/*
 
uf_modl_pads.h
File description:
    Open API modeling routines to create, edit and inquire about pads.
*****************************************************************************/
#ifndef UF_MODL_PADS_H_INCLUDED
#define UF_MODL_PADS_H_INCLUDED
/***************************************************************************
  ***************************************************************************/
#include <uf_defs.h>
#include <uf_modl_types.h>
#include <libufun_exports.h>
/********************************************************************
Gets rectangular pad parameters.
Environment: Internal  and  External
See Also:
History:
********************************************************************/
 extern UFUNEXPORT int UF_MODL_ask_rect_pad_parms(
tag_t feature_obj_id ,/* <I>
                      A feature object identifier
                      */
int  edit ,/* <I>
           This is an unused flag. It was used to determine
           whether to return the right-hand side or both sides
           of an expression. Currently, both sides of an
           expression are returned.
           */
char * size[3] ,/* <OF>
                Pad size (length , width , height).
                */
char ** corner_rad ,/* <OF>
                    Pad corner radius.  This must be freed by
                    calling UF_free.
                    */
char ** taper_angle  /* <OF>
                     Pad taper angle.  This must be freed by
                     calling UF_free.
                     */
);
/****************************************************************************
Creates a rectangular pad feature using a location, direction, X
direction, size, corner radius and taper angle. Along with these items
a placement face is needed to determine which face the pad is
associated to. The output of this function is the object identifier
associated to the rectangular pad.
Return: 
   Return code:
      = 0: successful
      > 0: failing error number
      < 0: failing error number
Environment: Internal  and  External
History: For V18.0, a datum plane may be input as the face defining the 
         RPO constraint.
See Also:  See   example  
          UF_MODL_ask_rect_pad_parms  
 ***************************************************************************/
 extern UFUNEXPORT int UF_MODL_create_rect_pad(
double  location[] ,/* <I>
                     Rectangular pad location.
                     */
double  direction[] ,/* <I>
                      Rectangular pad direction.
                      */
double  x_dir[3] ,/* <I>
                  Rectangular pad x direction.
                  */
char * size[3] ,/* <I>
                Rectangular pad size.
                */
char * radius ,/* <I>
               Rectangular pad corner radius.
               */
char * angle ,/* <I>
              Rectangular pad taper angle.
              */
tag_t  face ,/* <I>
             Face for the RPO constraint (may be a datum plane).
             */
tag_t * feature_obj_id  /* <O>
                        Feature object identifier of created rect. pad
                        */
);
/******************************************************************************
Creates a general pad. Expressions are created for the taper_angle,
top_offset, placement_radius, and top_radius if they are used.
Environment: Internal  and  External
See Also: UF_MODL_ask_general_pad  
          UF_MODL_edit_general_pad  
          UF_MODL_free_general_pad  
 please see   example  
History:
 ******************************************************************************/
 extern UFUNEXPORT int UF_MODL_create_general_pad(
UF_MODL_faces_p_t placement_faces ,/* <I>
                                   The faces or a face collector used to define the shape of
                                   the pad at the placement faces. The first
                                   face is used to determine the target
                                   body.
                                   */
UF_MODL_offset_trans_faces_p_t top_faces ,/* <I>
                                          The faces or a face collector used to define
                                          the top of the pad.
                                          The top can either be an offset or
                                          translation of the specified faces.
                                          If it is desired to have the top be
                                          an offset or translate of the
                                          placement faces, then just set the
                                          UF_MODL_faces_p_t pointer within
                                          this input structure to the
                                          placement_faces pointer value.
                                          */
UF_MODL_pocketpad_outline_p_t outline ,/* <I>
                                       The definition of the curves used to
                                       define the shape of the pad. The shape
                                       can be defined by a single set of curves
                                       or section builder 
                                       at either the placement face or the top
                                       face, and then the other curves or section builder are
                                       derived with a taper angle. The shape
                                       can also be defined by specifying curves or section builders
                                       at both the placement face and the top
                                       face.
                                       */
UF_MODL_parm_p_t placement_radius ,/* <I>
                                   The specification of the radius desired
                                   between the side of the pad and the
                                   placement face.
                                   */
UF_MODL_parm_p_t top_radius ,/* <I>
                             The specification of the radius desired
                             between the side of the pad and the top
                             of the pad.
                             */
tag_t * general_pad_tag  /* <O>
                         Object identifier for the general pad
                         feature.
                         */
);
/******************************************************************************
Retrieves the parameters used to create a general pad.
Environment: Internal  and  External
See Also:  please see   example  
          UF_MODL_create_general_pad  
          UF_MODL_edit_general_pad  
          UF_MODL_free_general_pad  
History:
 ******************************************************************************/
 extern UFUNEXPORT int UF_MODL_ask_general_pad(
tag_t general_pad_tag ,/* <I>
                       Object identifier of the general pad
                       feature whose parameters are to be
                       retrieved.
                       */
UF_MODL_faces_p_t placement_faces ,/* <OF>
                                   The faces used to define the shape of
                                   the pad at the placement faces. The
                                   first face is used to determine the
                                   target body.  The caller must allocate
                                   a UF_MODL_faces_t structure and pass a
                                   pointer to that structure.  This will be
                                   filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_offset_trans_faces_p_t top_faces ,/* <OF>
                                   The definition of the top of the pad.  The
                                   top can either be an offset or translation
                                   of the specified faces. If the top was
                                   an offset or translate of the placement
                                   faces, then the UF_MODL_faces_p_t pointer
                                   within this structure, points to the
                                   placement faces structure.  The caller must
                                   allocate a UF_MODL_offset_trans_faces_t
                                   structure and pass a pointer to that
                                   structure.  This will be filled with
                                   allocated data which must be freed by
                                   calling UF_MODL_free_general_pad.
                                   */
UF_MODL_pocketpad_outline_p_t outline ,/* <OF>
                                   The definition of the curves used to
                                   define the shape of the pad. The
                                   shape can be defined by a single set of
                                   curves at either the placement face or
                                   the top face, and then the other curves
                                   are derived with a taper angle. The
                                   shape can also be defined by specifying
                                   curves at both the placement face and the
                                   top face.  The caller must allocate a
                                   UF_MODL_pocketpad_outline_t structure and
                                   pass a pointer to that structure.  This will
                                   be filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_parm_p_t placement_radius ,/* <OF>
                                   The specification of the radius desired
                                   between the side of the pad and the
                                   placement face.  The caller must allocate a
                                   UF_MODL_parm_t structure and pass a
                                   pointer to that structure.  This will
                                   be filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_parm_p_t top_radius  /* <OF>
                             The specification of the radius desired
                             between the side of the pad and the top of the pad.
                             The caller must allocate a UF_MODL_parm_t
                             structure and pass a pointer to that structure.
                             This will be filled with allocated data which must
                             be freed by calling UF_MODL_free_general_pad.
                             */
);
/******************************************************************************
Retrieves the parameters with face collectors and section builders
used to create a general pad.
Environment: Internal  and  External
See Also:  please see   example  
          UF_MODL_create_general_pad  
          UF_MODL_edit_general_pad  
          UF_MODL_free_general_pad  
History:
 ******************************************************************************/
 extern UFUNEXPORT int UF_MODL_ask_general_pad1(
tag_t general_pad_tag ,/* <I>
                       Object identifier of the general pad
                       feature whose parameters are to be
                       retrieved.
                       */
UF_MODL_faces_p_t placement_faces ,/* <OF>
                                   The face collector used to define the shape of
                                   the pad at the placement faces. The
                                   first face of the face collector is used to determine the
                                   target body.  The caller must allocate
                                   a UF_MODL_faces_t structure and pass a
                                   pointer to that structure.  This will be
                                   filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_offset_trans_faces_p_t top_faces ,/* <OF>
                                   The definition of the top of the pad.  The
                                   top can either be an offset or translation
                                   of the specified face collector. If the top was
                                   an offset or translate of the placement
                                   faces, then the UF_MODL_faces_p_t pointer
                                   within this structure, points to the
                                   placement faces structure.  The caller must
                                   allocate a UF_MODL_offset_trans_faces_t
                                   structure and pass a pointer to that
                                   structure.  This will be filled with
                                   allocated data which must be freed by
                                   calling UF_MODL_free_general_pad.
                                   */
UF_MODL_pocketpad_outline_p_t outline ,/* <OF>
                                   The definition of the curves used to
                                   define the shape of the pad. The
                                   shape can be defined by a single section builder 
                                   at either the placement face or
                                   the top face, and then the other section builder 
                                   is derived with a taper angle. The
                                   shape can also be defined by specifying
                                   section builders at both the placement face and the
                                   top face.  The caller must allocate a
                                   UF_MODL_pocketpad_outline_t structure and
                                   pass a pointer to that structure.  This will
                                   be filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_parm_p_t placement_radius ,/* <OF>
                                   The specification of the radius desired
                                   between the side of the pad and the
                                   placement face.  The caller must allocate a
                                   UF_MODL_parm_t structure and pass a
                                   pointer to that structure.  This will
                                   be filled with allocated data which must be
                                   freed by calling UF_MODL_free_general_pad.
                                   */
UF_MODL_parm_p_t top_radius  /* <OF>
                             The specification of the radius desired
                             between the side of the pad and the top of the pad.
                             The caller must allocate a UF_MODL_parm_t
                             structure and pass a pointer to that structure.
                             This will be filled with allocated data which must
                             be freed by calling UF_MODL_free_general_pad.
                             */
);
/*******************************************************************************
Edits the various parameters of the general pad and reconstructs it
based on these new parameters.
Environment: Internal  and  External
See Also:
See Also: UF_MODL_create_general_pad  
          UF_MODL_ask_general_pad  
          UF_MODL_free_general_pad  
 please see   example  
History:
 ******************************************************************************/
 extern UFUNEXPORT int UF_MODL_edit_general_pad(
tag_t general_pad_tag ,/* <I>
                       Object identifier of the general pad
                       feature to be modified.
                       */
UF_MODL_faces_p_t placement_faces ,/* <I>
                                   The faces or face collector used to define the shape of
                                   the pad at the placement faces. The first
                                   face is used to determine the target
                                   body.
                                   */
UF_MODL_offset_trans_faces_p_t top_faces ,/* <I>
                                              The definition of the top of the
                                              pad.  The top can either be an
                                              offset or translation of the
                                              specified faces or face collector. If it is
                                              desired to have the top be an
                                              offset or translate of the
                                              placement faces, then just set
                                              the UF_MODL_faces_p_t
                                              pointer within this input i
                                              structure to the
                                              placement_faces pointer value.
                                              */
UF_MODL_pocketpad_outline_p_t outline ,/* <I>
                                       The definition of the curves used to
                                       define the shape of the pad. The shape
                                       can be defined by a single set of curves
                                       or section builder 
                                       at either the placement face or the top
                                       face, and then the other curves 
                                       or section builder are
                                       derived with a taper angle. The shape
                                       can also be defined by specifying 
                                       curves or section builders
                                       at both the placement face and the top
                                       face.
                                       */
UF_MODL_parm_p_t placement_radius ,/* <I>
                                   The specification of the radius desired
                                   between the side of the pad and the
                                   placement face.
                                   */
UF_MODL_parm_p_t top_radius  /* <I>
                             The specification of the radius desired
                             between the side of the pad and the top
                             of the pad.
                             */
);
/******************************************************************************
Frees all the memory associated with the parameters returned from
UF_MODL_ask_general_pad.
Environment: Internal  and  External
See Also: UF_MODL_create_general_pad  
          UF_MODL_ask_general_pad  
          UF_MODL_edit_general_pad  
 please see   example  
History:
 ******************************************************************************/
 extern UFUNEXPORT int UF_MODL_free_general_pad(
UF_MODL_faces_p_t placement_faces ,/* <I>
                                   The faces used to define the shape of
                                   the pad at the placement faces. The
                                   first face is used to determine the
                                   target body.
                                   */
UF_MODL_offset_trans_faces_p_t top_faces ,/* <I>
                                              The definition of the top of the
                                              pad.  The top can either be an
                                              offset or translation of the
                                              specified faces. If it is
                                              desired to have the top be an
                                              offset or translate of the
                                              placement faces, then just set
                                              the UF_MODL_faces_p_t
                                              pointer within this input i
                                              structure to the
                                              placement_faces pointer value.
                                              */
UF_MODL_pocketpad_outline_p_t outline ,/* <I>
                                       The definition of the curves used to
                                       define the shape of the pad. The
                                       shape can be defined by a single set of
                                       curves at either the placement face or
                                       the top face, and then the other curves
                                       are derived with a taper angle. The
                                       shape can also be defined by
                                       specifying curves at both the
                                       placement face and the top face.
                                       */
UF_MODL_parm_p_t placement_radius ,/* <I>
                                   The specification of the radius desired
                                   between the side of the pad and the
                                   placement face.
                                   */
UF_MODL_parm_p_t top_radius  /* <I>
                             The specification of the radius desired
                             between the side of the pad and the
                             top of the pad.
                             */
);
#undef EXPORTLIBRARY
#endif     /* UF_MODL_PADS_H_INCLUDED */