Types and Symbols

Types and Symbols

For a full list of the structures used, please see the header file uf_modl.h.
 
Bead Structures
 
Bead Section Parms
 
History
 
V15.0 change: The UF_MODL_bead_ends enumerated type is new.
 
typedef enum UF_MODL_bead_ends
{
UF_MODL_END_CAPS_NONE
UF_MODL_END_CAPS_START
UF_MODL_END_CAPS_END
UF_MODL_END_CAPS_BOTH
} UF_MODL_bead_ends_t;
 
History
 
In V15.0, the following fields were added to the UF_MODL_bead_section_parms_s structure: blend_radius, end_cap_radius, end_cap_angle, end_cap_option, attach, and hollow.
 
typedef struct UF_MODL_bead_section_parms_s
{
UF_MODL_bead_shape_t shape;
UF_MODL_parm_p_t radius;
UF_MODL_parm_p_t placement_width;
UF_MODL_bead_width_relative_t placement_width_relative;
UF_MODL_parm_p_t secondary_width;
UF_MODL_bead_width_relative_t secondary_width_relative;
UF_MODL_parm_p_t taper_angle;
UF_MODL_bead_angle_relative_t taper_angle_relative;
UF_MODL_parm_p_t height;
UF_MODL_parm_p_t blend_radius
UF_MODL_parm_p_t end_cap_radius;
UF_MODL_parm_p_t end_cap_angle;
UF_MODL_bead_ends_t end_cap_option;
logical attach;
logical hollow
} UF_MODL_bead_section_parms_t, *UF_MODL_bead_section_parms_p_t;

 
This structure is used to define the parameters for constructing the cross sectional shape of the bead.
 
Parameter
 
Description
 
shape
 
Cross sectional shape type of the bead This should be set to one of the following values:
 

 
UF_MODL_U_SHAPED,
 
UF_MODL_V_SHAPED,
 
UF_MODL_CIRCULAR_SHAPED
 
radius
 
Radius of the blend between the bead walls and the secondary face if one is defined or just between the bead walls if there isn't one
 
Currently only
 
UF_MODL_PARM_CONSTANT is allowed as the method type, and not the law options.
 
placement_width
 
Distance used in offsetting the centerline in the placement face. Currently only
 
UF_MODL_PARM_CONSTANT is allowed as the method type, and not the law options.
 
placement_width_relative
 
Indication of how the placement_width is measured.
 
Currently only UF_MODL_RELATIVE_THEORETICAL is allowed. This defines the width as the intersection of the walls and the placement face.
 
secondary_width
 
Distance used in offsetting the centerline in the secondary face. Refer to secondary_width_relative for how this definition may be altered when a radius is also specified.
 
Currently only
 
UF_MODL_PARM_CONSTANT is allowed as the method type, and not the law options.
 
secondary_width_relative
 
When a radius is specified along with a secondary_width you may further clarify how the secondary_width is measured.
 
UF_MODL_RELATIVE_THEORETICAL - defines the width as the intersection of the walls and the secondary face.
 
UF_MODL_RELATIVE_TANGENT - defines the width as the distance between the tangent points of the radius and the secondary face.
 
taper_angle
 
Angle between the bead walls and the section axis at the centerline. Refer to taper_angle_relative for how this definition may be altered when defined relative to face normals.
 
Currently only
 
UF_MODL_PARM_CONSTANT is allowed as the method type, and not the law options.
 
taper_angle_relative
 
Indication of how the taper_angle is measured.

UF_MODL_RELATIVE_CENTERLINE - defines the angle between the bead walls and the section axis at the centerline.
 

UF_MODL_RELATIVE_WALL - defines the angle between the bead walls and the face normals derived at the intersection of the bead section walls and the placement face.
 
height
 
Distance to offset the centerline along the section axis.
 
blend_radius
 
Radius of blend between side walls and placement faces.
 
end_cap_radius
 
Radius of the end cap on the circular bead. This is measured tangent to the end of the centerline. It must be greater than the height or the radius (whichever is greater).
 
end_cap_angle
 
Angle of the end cap taper on the v shaped bead.
 
end_cap_option
 
Indicates where end caps should be placed on the bead.
 
attach
 
If TRUE, boolean bead to target body. Otherwise, a separate body will result.
 
hollow
 
If TRUE, create a hollow bead which preserves the thickness of the target solid body. Only applicable when attach is TRUE.
 
Bead Section Plane
 
typedef struct UF_MODL_bead_section_plane_s
{
UF_MODL_bead_plane_normal_t plane_normal_type;
union
{ /* plane_normal_type == UF_MODL_FIXED_DIRECTION */
struct
{
UF_MODL_vector_p_t normal_direction;
} fixed
} defined_by;
} UF_MODL_bead_section_plane_t, *UF_MODL_bead_section_plane_p_t;

 
This structure is used to define the normal of the orientation plane for the bead sections.
 
Parameter
 
Description
 
plane_normal_type
 
Indication of how the section plane normal is being defined, either as tangent along the centerline or as a fixed direction. This should be set to one of the following values:
 
UF_MODL_TANGENT_ALONG_CENTERLINE
 
UF_MODL_FIXED_DIRECTION
 
normal_direction
 
Additional information required if plane_normal_type is UF_MODL_FIXED_DIRECTION.
 
normal_direction - pointer to direction information to define the fixed normal of the orientation plane.
 
String Structure
 
typedef struct string_list
{
int num;
int string[];
int dir[];
tag_t id[];

} UF_STRING_t, *UF_STRING_p_t;
 


Query routines which use this structure should use UF_MODL_free_string_list to deallocate memory.
 
Various functions use this structure to define a single profile shape or multiple profile shapes. The profile shape can usually consist of curves, all edges of a face, and edges.
 
Parameter
 
Description
 
num
 
Number of items in the string array and dir array.
(min = 1, max = 150)
 
string
 
Number of items in the id array for each string.
(min = 1, max = 402)
 
dir
 
Indication of whether the string defined in id should start from the beginning of the first curve or the end of the first curve. This should be set to one of the following values:

UF_MODL_CURVE_START_FROM_BEGIN
UF_MODL_CURVE_START_FROM_END
 
id
 
The array of items defining the string. This array should be as long as the total of the number of items indicated in string.

Although not all functions allow all the data types, this array can typically include curves, faces, and edges.
 
Sweep Structures
 

SWEEP TRIM
typedef struct UF_MODL_SWEEP_TRIM_object_s
{
tag_t *trim_objects; /* <I> */
int trim_count; /* <I> */
UF_MODL_SWEEP_TRIM_SIGN sign; /* <I> */
tag_t *thru_bodies; /* <I> */
int num_thru_bodies; /* <I> */
} UF_MODL_SWEEP_TRIM_object_t,
*UF_MODL_SWEEP_TRIM_object_p_t;
 
Parameter
 
Description
 
trim_objects
 
Array of objects to which to trim
 
trim_count
 
trim_object array size
 
sign
 
type of trim:
 
UF_MODL_SWEEP_TRIM_NONE
 
UF_MODL_SWEEP_TRIM_TO_FACE - only unite, subtract, and intersect operations are supported.
 
UF_MODL_SWEEP_TRIM_BETW_TWO_FACES - only unite, subtract, and intersect operations are supported. The same body must contain the trimming faces.
 
UF_MODL_SWEEP_TRIM_TO_ALL - only subtract boolean is supported.
 
thru_bodies
 
Not used since V11.0
 
num_thru_bodies
 
Not used since V11.0
 

 
Blend Face Structures
 
The following data structures are used with UF_MODL_create_blend_face.
 

BLEND FACES CREATE DATA
typedef struct UF_MODL_blend_faces_create_data_s
{
tag_t *first_set; /* <I> */
int first_set_size; /* <I> */
logical flip_first_normal; /* <I> */
tag_t *second_set; /* <I> */
int second_set_size; /* <I> */
logical flip_second_normal; /* <I> */
logical propagate; /* <I> */
tag_t *cliff_edges; /* <I> */
int n_cliff_edges; /* <I> */
tag_t *thls; /* <I> */
int n_thls; /* <I> */
logical proj_on_first_set; /* <I> */
logical end_overflow; /* <I> */
char *blend_tolerance; /* <I> */
UF_MODL_trim_blend_option trim_option; /* <I> */
UF_MODL_blend_radius_type radius_type; /* <I> */
char *default_radius; /* <I> */
void *law_parameters; /* <I> */
} UF_MODL_blend_faces_create_data_t,
*UF_MODL_blend_faces_create_data_p_t;
 
Parameter
 
Description
 
first_set
 
Array of tags of faces and/or bodies which make up the first set of faces
 
first_set_size
 
Size of the first_set array
 
flip_first_normal
 
Determine which side of the first face from the first set of faces the blend lies.
 
TRUE = the blend lies in the direction of the face normal
 
second_set
 
Array of tags of faces and/or bodies which make up the second set of faces
 
second_set_size
 
Size of the second_set array
 
flip_second_normal
 
Determine which side of the first face from the second set of faces the blend lies.
 
TRUE = the blend lies in the direction of the face normal
 
propagate
 
TRUE = blend is allowed to propagate past smooth edges beyond the provided sets of faces
 
cliff_edges
 
Array of edge tags. The blend is constrained to be cliffedge blend in the region of the given edges
 
n_cliff_edges
 
Size of the cliff_edges array
 
thls
 
Array of edges or curves. The blend is constrained to be a tangent hold line blend in the region of the given edges or curves.
 
n_thls
 
Size of the thls array
 
proj_on_first_set
 
TRUE = Project thls curves on the first face set, otherwise on the second project set. Used only when thls curves are provided.
 
end_overflow
 
TRUE if allow end tangent and notch overflow.
 
blend_tolerance
 
Tolerance associated with the blend
 
trim_option
 
Blend trimming option:
 
UF_TRIM_AND_ATTACH = trim blend and faces and attach blend.
 
UF_TRIM_ALL = trim blend and faces.
 
UF_TRIM_BLEND = trim blend to faces.
 
UF_NO_TRIM = do not trim blend.
 
radius_type
 
Blend radius type:
 
UF_CONSTANT = constant radius blend
 
UF_LAW_CONTROLLED = law controlled radius blend. law_parameters must be provided
 
UF_TANGENCY_CONTROLLED = tangency controlled radius blend. Tangency hold lines must be provided.
 
default_radius
 
Radius for the constant radius blend
 
law_parameters
 
Law parameters for the law controlled blend.
 

 

Blend faces Limit data
typedef struct UF_MODL_blend_faces_limit_data_s
{
logical use_start_limit; /* <I> */
double start_limit[6]; /* <I> */
logical use_end_limit; /* <I> */
double end_limit[6]; /* <I> */
logical use_help_point; /* <I> */
double help_point[3]; /* <I> */

} UF_MODL_blend_faces_limit_data_t,
*UF_MODL_blend_faces_limit_data_p_t;
 
Parameter
 
Description
 
use_start_limit
 
TRUE = the blend is trimmed to start in a constant parameter line determined by a start limiting plane. The blend lies on the positive side of the plane
 
start_limit
 
Start limit plane (point and normal vector)
 
use_end_limit
 
TRUE = the blend is trimmed to end in a constant parameter line determined by a start limiting plane. The blend lies on the positive side of the plane
 
end_limit
 
End limit plane (point and normal vector)
 
use_help_point
 
TRUE = use a help point to differentiate between multiple alternative possible blends between the faces. If there is a blend which passes close to the help point, it is the one created
 
help_point
 
Coordinates of the help point
 

 
Quilt Structures
 
The following structures are used in the quilt Open C API routines.
 
The following structure holds data common to four of the quilt surface types:
 

QUILT DATA
typedef struct UF_MODL_quilt_data_s
{
UF_MODL_overlap_check_t check_overlap;
int num_target_faces;
tag_t *target_faces;
char *inside_distance;
char *inside_angle;
char *edge_distance;
char *edge_angle;
} UF_MODL_quilt_data_t, *UF_MODL_quilt_data_p_t;
 
Parameter
 
Description
 
check_overlap
 
Flag for controlling overlap checking
= UF_MODL_OVERLAP_CHECKING_OFF
= UF_MODL_OVERLAP_CHECKING_ON
 
num_target_faces
 
Number of tags in target_faces array
 
target_faces
 
Pointer to array of target faces tags.
 
inside_distance
 
Interior distance tolerance
 
inside_angle
 
Interior angle tolerance
 
edge_distance
 
Edge distance tolerance
 
edge_angle
 
Edge angle tolerance
 
The following structure holds data that is specific to the UF_MODL_curve_mesh_along_fixed_vector type of quilt surface. This structure completely defines all creation parameters of this type of surface.
 

Quilt: Curve mesh along fixed vector data
typedef struct UF_MODL_curve_mesh_along_fixed_vector_data_s
{
UF_MODL_quilt_data_t quilt_data;
double projection_vector(3);
UF_STRING_p_t primary_curves;
UF_STRING_p_t cross_curves;
} UF_MODL_curve_mesh_along_fixed_vector_data_t, *UF_MODL_curve_mesh_along_fixed_vector_data_p_t;
 
Parameter
 
Description
 
quilt_data
 
Structure of common elements of the quilt feature.
 
projection_vector
 
Projection direction vector
 
primary_curves
 
Pointer to primary list structure
int num Total number of primary string
(min=1,max=150)
int string[] Total number of segment curves/
sketch id of each primary string
(min=1,max=402)
int dir[] Direction of each primary string
1 = Start to End
-1 = End to Start
tag_t id[] Identifier of primary curves
 
cross_curves
 
Pointer to cross list structure
int num Total number of cross string
(min=1,max=150)
int string[] Total number of segment curves/
sketch id of each cross string
(min=1,max=402)
int dir[] Direction of each cross string
1 = Start to End
-1 = End to Start
tag_t id[] Identifier of cross curves
 

 
The following structure holds data that is specific to the UF_MODL_curve_mesh_along_driver_normals type of quilt surface. This structure completely defines all creation parameters of this type of surface.
 

Quilt: Curve mesh along driver normals data
typedef struct UF_MODL_curve_mesh_along_driver_normals_data_s
{
UF_MODL_quilt_data_t quilt_data;
char *projection_limit;
UF_STRING_p_t primary_curves;
UF_STRING_p_t cross_curves;
} UF_MODL_curve_mesh_along_driver_normals_data_t, *UF_MODL_curve_mesh_along_driver_normals_data_p_t;
 
Parameter
 
Description
 
quilt_data
 
Structure of common elements of the quilt feature.
 
projection_limit
 
Projection distance limit (=0 if no limit)
 
primary_curves
 
Pointer to primary list structure
int num Total number of primary string
(min=1,max=150)
int string[] Total number of segment curves/
sketch id of each primary string
(min=1,max=402)
int dir[] Direction of each primary string
1 = Start to End
-1 = End to Start
tag_t id[] Identifier of primary curves
 
cross_curves
 
Pointer to cross list structure
int num Total number of cross string
(min=1,max=150)
int string[] Total number of segment curves/
sketch id of each cross string
(min=1,max=402)
int dir[] Direction of each cross string
1 = Start to End
-1 = End to Start
tag_t id[] Identifier of cross curves
 

 
The following structure holds data that is specific to the UF_MODL_b_surface_along_fixed_vector type of quilt surface. This structure completely defines all creation parameters of this type of surface.
 

Quilt: B surface along fixed vector data
typedef struct UF_MODL_b_surface_along_fixed_vector_data_s
{
UF_MODL_quilt_data_t quilt_data;
double projection_vector(3);
tag_t driver_surface;
} UF_MODL_b_surface_along_fixed_vector_data_t, *UF_MODL_b_surface_along_fixed_vector_data_p_t;
 
Parameter
 
Description
 
quilt_data
 
Structure of common elements of the quilt feature.
 
projection_vector
 
Projection direction vector
 
driver_surface
 
Driver b-surface
 

 
The following structure holds data that is specific to the UF_MODL_b_surface_along_driver_normals type of quilt surface. This structure completely defines all creation parameters of this type of surface.
 

Quilt: B_Surface Along Driver Normals Data
typedef struct UF_MODL_b_surface_along_driver_normals_data_s
{
UF_MODL_quilt_data_t quilt_data;
char projection_limit;
tag_t driver_surface;
} UF_MODL_b_surface_along_driver_normals_data_t, *UF_MODL_b_surface_along_driver_normals_data_p_t;
 
Parameter
 
Description
 
quilt_data
 
Structure of common elements of the quilt feature.
 
projection_limit
 
Projection distance limit (=0 if no limit)
 
driver_surface
 
Driver b-surface
 

 
The following structure holds data that is specific to the UF_MODL_self_refit type of quilt surface. This structure completely defines all creation parameters of this type of surface.
 

Quilt: Self refit data
typedef struct UF_MODL_self_refit_data_s
{
tag_t driver_surface;
char *inside_distance;
char *inside_angle;
char *edge_distance;
char *edge_angle;
} UF_MODL_self_refit_data_t, *UF_MODL_self_refit_data_p_t;
 
Parameter
 
Description
 
driver_surface
 
Driver b-surface
 
inside_distance
 
Interior distance tolerance
 
inside_angle
 
Interior angle tolerance
 
edge_distance
 
Edge distance tolerance
 
edge_angle
 
Edge angle tolerance
 

 
This union is used to hold a pointer to one of the previous 5 structures depending on the type of quilt surface.
 

Quilt: Data structures Union
typedef union
{
UF_MODL_curve_mesh_along_fixed_vector_data_t
*quilt_type1;
UF_MODL_curve_mesh_along_driver_normals_data_t
*quilt_type2;
UF_MODL_b_surface_along_fixed_vector_data_t
*quilt_type3;
UF_MODL_b_surface_along_driver_normals_data_t
*quilt_type4;
UF_MODL_self_refit_data_t *quilt_type5;
} UF_MODL_quilt_data_structures_u, *UF_MODL_quilt_data_structures_p_u;
 
Parameter
 
Description
 
quilt_type1
 
pointer to UF_MODL_curve_mesh_along_fixed_vector_data_t structure.
 
quilt_type2
 
pointer to UF_MODL_curve_mesh_along_driver_normals_data_t structure.
 
quilt_type3
 
pointer to UF_MODL_b_surface_along_fixed_vector_data_t structure.
 
quilt_type4
 
pointer to UF_MODL_b_surface_along_driver_normals_data_t structure.
 
quilt_type5
 
pointer to UF_MODL_self_refit_data_t structure.
 
Section Surface Types and Symbols
 
The following types are used by the section surface functions. See "Section" in the "Free Form Features" chapter of the Modeling User Manual for a discussion of creation methods, rho values, etc.
 

Section Surface Creation Methods
typedef enum UF_MODL_secsrf_cre_method
{
UF_MODL_secsrf_init_create_method,
UF_MODL_secsrf_five_points,
UF_MODL_secsrf_four_points_slope,
UF_MODL_secsrf_ends_slopes_shoulder,
UF_MODL_secsrf_ends_apex_shoulder,
UF_MODL_secsrf_ends_apex_rho,
UF_MODL_secsrf_ends_slopes_rho,
UF_MODL_secsrf_ends_slope_arc,
UF_MODL_secsrf_three_points_arc,
UF_MODL_secsrf_fillet_shoulder,
UF_MODL_secsrf_fillet_rho,
UF_MODL_secsrf_ends_slopes_hilite,
UF_MODL_secsrf_ends_apex_hilite,
UF_MODL_secsrf_fillet_hilite,
UF_MODL_secsrf_two_points_radius,
UF_MODL_secsrf_ends_slopes_cubic,
UF_MODL_secsrf_fillet_cubic,
UF_MODL_secsrf_point_radius_angle_arc,
UF_MODL_secsrf_full_circle
} UF_MODL_secsrf_cre_method_t;
 
History
 
In V15.0 the following four constants were added to UF_MODL_secsrf_cre_method enumerated type: UF_MODL_secsrf_two_points_radius, UF_MODL_secsrf_ends_slopes_cubic, UF_MODL_secsrf_fillet_cubic, and UF_MODL_secsrf_point_radius_angle_arc.
 
The following are the enumerated types of additional data methods used in the creation methods which have a rho, radius, or angle value: UF_MODL_secsrf_ends_apex_rho, UF_MODL_secsrf_ends_slopes_rho, UF_MODL_secsrf_fillet_rho,
UF_MODL_secsrf_two_points_radius and
UF_MODL_secsrf_point_radius_angle_arc section surfaces.
 
History
 
In V15.0, the following two additonal data methods were added: UF_MODL_secsrf_two_points_radius and
UF_MODL_secsrf_point_radius_angle_arc section surfaces.
 

Generic Parameter Methods
typedef enum UF_MODL_secsrf_param_method
{
UF_MODL_secsrf_no_data,
UF_MODL_secsrf_constant,
UF_MODL_secsrf_linear,
UF_MODL_secsrf_cubic,
UF_MODL_secsrf_tension,
UF_MODL_secsrf_general
} UF_MODL_secsrf_param_method_t;

 
History
 
V15.0 change: the UF_MODL_secsrf_param_method was added.
 
Where the enumerated constants of the UF_MODL_secsrf_param_method enumeration have the following descriptions:
 
Enumerated Constant
 
Description
 
UF_MODL_secsrf_no_data
 
No Rho, radius, law, etc.
 
UF_MODL_secsrf_constant
 
data constant
 
UF_MODL_secsrf_linear
 
data_value[2]
 
UF_MODL_secsrf_cubic
 
data_value[2]
 
UF_MODL_secsrf_tension
 
NULL
 
UF_MODL_secsrf_general
 
general law (UF_MODL_parm general law)
 

 
The following is the data structure used to hold the parameter data.
 

Generic struct for laws,rho,etc
typedef struct UF_MODL_secsrf_param_s
{
UF_MODL_secsrf_param_method_t data_method;
struct
{
double data_constant;
tag_t data_exp[2];
double data_value[2];
UF_MODL_parm_t *general_law;
} data_values;
} UF_MODL_secsrf_param_t, *UF_MODL_secsrf_param_p_t;

 
History
 
V15.0 change: the UF_MODL_secsrf_param_s structure was added.
 
Where the fields of the generic UF_MODL_secsrf_param_s structure have the following descriptions:
 
Field
 
Description
 
data_method
 
Method type value
 
data_constant
 
Constant value
 
data_exp[2]
 
Cubic/linear expression tags
 
data_value[2]
 
Cubic/linear law values
 
general_law
 
General law structure
 

 

NOTE:
Please note the following items which are in effect as of the V15.0 release.
 
cubic), by using the UF_MODL_parm_t structure.
 
surface queried uses a constant, linear, or cubic law, then those types still return as constant, linear, or cubic. However, if you use any other type of law, it is noted as "UF_MODL_secsrf_general". The data for that law appears in the data_values.general_law field of the UF_MODL_secsrf_param structure.
 
you should not have to recompile your programs.
 

Section Surface Rho Methods
typedef enum UF_MODL_secsrf_rho_method
{
UF_MODL_secsrf_no_rho,
UF_MODL_secsrf_constant,
UF_MODL_secsrf_linear,
UF_MODL_secsrf_cubic,
UF_MODL_secsrf_tension,
UF_MODL_secsrf_general
} UF_MODL_secsrf_rho_method_t;
 
Where the enumerated constants of the UF_MODL_secsrf_rho_method have the following descriptions:
 
Enumerated Constant
 
Description
 
UF_MODL_secsrf_no_rho
 
No rho
 
UF_MODL_secsrf_constant
 
constant rho
 
UF_MODL_secsrf_linear
 
rho[2]
 
UF_MODL_secsrf_cubic
 
rho[2]
 
UF_MODL_secsrf_tension
 
NULL
 
UF_MODL_secsrf_general
 
rho_law (Not implemented)
 

 
The following is the structure used to hold the rho data.
 

Section Surface Rho Data
typedef struct UF_MODL_secsrf_rho_data_s
{
UF_MODL_secsrf_rho_method_t rho_method;
struct
{
double constant_rho;
tag_t rho_exp[2];
double rho[2];
void *rho_law;
} rho_values;
} UF_MODL_secsrf_rho_data_t,
*UF_MODL_secsrf_rho_data_p_t;
 
Where the fields of the section surface rho data structure have the following descriptions:
 
Field
 
Description
 
rho_method
 
Rho method value
 
constant_rho
 
Constant rho value
 
rho_exp[2]
 
Cubic/linear expression tags
 
rho[2]
 
Cubic/linear rho values
 
rho_law
 
Private value - Do Not change
 

 
The following is the section surface structure.
 
/* Section Surface data Structure */

Section Surface Data Structure
typedef struct UF_MODL_secsrf_data_s
{
UF_MODL_secsrf_cre_method_t create_method;
int polynomial_status;
UF_MODL_secsrf_rho_data_t rho_data;
double tolerance;
tag_t tangent_faces[2];
UF_STRING_p_t control_strings[6];
UF_STRING_p_t spine_string;
UF_MODL_secsrf_param_t radius_data;
UF_MODL_secsrf_param_t angle_data;
int direction_indicator;
} UF_MODL_secsrf_data_t, *UF_MODL_secsrf_data_p_t;

 

 
History
 
V15.0 change: the UF_MODL_secsrf_data_s structure was modified to add the following fields: radius_data, angle_data, and direction_indicator.
 
where the fields have the following descriptions:
 
Field
 
Description
 
create_method
 
Creation method
 
Polynomial_status
 
Polynomial status
 
rho_data
 
Rho data
 
tolerance
 
Tolerance used to create surface
 
tangent_faces[2]
 
Face tags of tangent faces
 
control_strings[6]
 
Control string array
 
spine_string
 
Spine curve string
 
radius_data
 
radius data
 
angle_data
 
angle data
 
direction_indicator
 
Surface direction
 

 
Currently there are 18 different Section surface construction techniques. Each requiring a different combination of construction geometry and data. Below is the common data used for all of the section surface.
 
Given:
 
UF_MODL_secsrf_data_t section_surface;

section_surface.polynomial_status = 0; make surface rational
(exact)
                                    1; make surface polynomial
(approximate)

section_surface.tolerance = any valid NX tolerance value;
section_surface.direction_indicator = 1; create surface in
direction of the face normal
                                     1-; create surface opposite
the face normal  (UF_MODL_secsrf_point_radius_angle_arc only)
The following shows the options for section surface that contain rho data: UF_MODL_secsrf_ends_apex_rho, UF_MODL_secsrf_ends_slopes_rho and UF_MODL_secsrf_fillet_rho section surfaces. Valid rho values are described in the "Section" section of the "Free Form Features" chapter of the Modeling User Manual.

If a section surface has no rho data the rho method should be set to the following.
 
section_surface.rho_data.data_method = UF_MODL_secsrf_no_data;
If the rho method is set to a constant rho then a valid rho value must be placed in data_values structure.
 
section_surface.rho_data.data_method =    UF_MODL_secsrf_constant;
section_surface.rho_data.data_values.data_constant = valid rho
value;
If the rho method is set to a linear or cubic rho then a valid rho value must be placed in data_values structure. The expression tag will take precedence over the a real value. Both rho values need to be populated.
 
section_surface.rho_data.data_method =
UF_MODL_secsrf_linear or UF_MODL_secsrf_cubic;
section_surface.rho_data.data_values.data_value[0]=valid rho value;
or section_surface.rho_data.data_values.data_exp[0]=expression tag;
and
 
section_surface.rho_data.data_values.data_value[1]=valid rho value;
or section_surface.rho_data.data_values.data_exp[1]=expression tag;
If the rho method is set to least tension then the rho_values must be set to NULL.
 
section_surface.rho_data.data_method = UF_MODL_secsrf_tension;
section_surface.rho_data.data_values.general_law = NULL;
If the rho value is set to general the user is required NOT to change the data_values.
 
section_surface.rho_data.data_method = UF_MODL_secsrf_general;
section_surface.rho_data.data_values.general_law = pointer data to
a law function;
The following shows the options for section surface that contain radius data: UF_MODL_secsrf_two_points_radius and UF_MODL_secsrf_point_radius_angle_arc section surfaces. Valid radius values are described in the Section Surface documentation.

If a section surface has no radius data the data method should be set to the following.
 
section_surface.radius_data.data_method = UF_MODL_secsrf_no_data;
If the radius method is set to a constant radius then a valid radius value must be placed in data_values structure.
 
section_surface.radius_data.data_method =
UF_MODL_secsrf_constant;
section_surface.radius_data.data_values.data_constant = valid
radius value;
If the radius method is set to a linear or cubic then a valid radius value must be placed in data_values structure. The expression tag will take precedence over the a real value. Both radius values need to be populated.
 
section_surface.radius_data.data_method =
UF_MODL_secsrf_linear or UF_MODL_secsrf_cubic;
section_surface.radius_data.data_values.data_value[0]=valid radius
value; or
section_surface.radius_data.data_values.data_exp[0]=expression tag;
and
 
section_surface.radius_data.data_values.data_value[1]=valid radius
value; or
section_surface.radius_data.data_values.data_exp[1]=expression tag;
If the radius value is set to general the user is required NOT to change the data_values.
 
section_surface.radius_data.data_method = UF_MODL_secsrf_general;
section_surface.radius_data.data_values.general_law = pointer data
to a law function;
The following shows the options for a section surface that contain angle data: UF_MODL_secsrf_point_radius_angle_arc section surface. Valid angle values are described in the Section Surface documentation.

If a section surface has no angle data the data method should be set to the following.
 
section_surface.angle_data.data_method = UF_MODL_secsrf_no_data;
If the angle method is set to a constant angle then a valid angle value must be placed in data_values structure.
 
section_surface.angle_data.data_method =
UF_MODL_secsrf_constant;
section_surface.angle_data.data_values.data_constant = valid angle
value;
If the angle method is set to a linear or cubic angle then a valid angle value must be placed in data_values structure. The expression tag will take precedence over the a real value. Both angle values need to be populated.
 
section_surface.angle_data.data_method =
UF_MODL_secsrf_linear or UF_MODL_secsrf_cubic;
section_surface.angle_data.data_values.data_value[0]=valid angle
value; or
section_surface.angle_data.data_values.data_exp[0]=expression tag;
and
 
section_surface.angle_data.data_values.data_value[1]=valid angle
value; or
section_surface.angle_data.data_values.data_exp[1]=expression tag;
If the angle value is set to general the user is required NOT to change the data_values.
 
section_surface.angle_data.data_method = UF_MODL_secsrf_general;
section_surface.angle_data.data_values.general_law = pointer data
to a law function;
Note: The UF_MODL_secsrf_general data method can not be used directly. It is a place holder for any section surface which contains a law value that is populated during an UF_MODL_ask_section_surface call. Do not modify this data.
 
The following is a list of each type and their required geometry tags and data.
 
section_surface.create_method = UF_MODL_secsrf_five_points;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = First interior curve tag;
section_surface.control_strings[2] = Second interior curve tag;
section_surface.control_strings[3] = Third interior curve tag;
section_surface.control_strings[4] = End curve tag;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_four_points_slope;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start slope curve tag;
section_surface.control_strings[2] = First interior curve tag;
section_surface.control_strings[3] = Second interior curve tag;
section_surface.control_strings[4] = End curve tag;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method =
UF_MODL_secsrf_ends_slopes_shoulder;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start slope curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = End slope curve tag;
section_surface.control_strings[4] = Shoulder curve tag;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_apex_shoulder;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Apex curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = Shoulder curve tag;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_apex_rho;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Apex curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = must be populated
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_slopes_rho;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start Slope curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = End Slope curve tag;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = must be populated
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_slope_arc;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start Slope curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_three_points_arc;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = First Interior curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_fillet_shoulder;
section_surface.control_strings[0] = Curve tag on first face;
section_surface.control_strings[1] = Curve tag on second face;
section_surface.control_strings[2] = Shoulder curve tag;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = First face tag;
section_surface.tangent_faces[1] = Second face tag;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_fillet_rho;
section_surface.control_strings[0] = Curve tag on first face;
section_surface.control_strings[1] = Curve tag on second face;
section_surface.control_strings[2] = NULL;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = must be populated with rho data
section_surface.tangent_faces[0] = First face tag;
section_surface.tangent_faces[1] = Second face tag;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_slopes_hilite;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start Slope curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = End Slope curve tag;
section_surface.control_strings[4] = Start highlight curve tag;
section_surface.control_strings[5] = End highlight curve tag;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_apex_hilite;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Apex curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = Start highlight curve tag;
section_surface.control_strings[4] = End highlight curve tag;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_fillet_hilite;
section_surface.control_strings[0] = Curve tag on first face;
section_surface.control_strings[1] = Curve tag on second face;
section_surface.control_strings[3] = Start highlight curve tag;
section_surface.control_strings[4] = End highlight curve tag;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = must be populated with rho data
section_surface.tangent_faces[0] = Face tag one;
section_surface.tangent_faces[1] = Face tag two;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_two_points_radius;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = End curve tag;
section_surface.control_strings[2] = NULL;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = must be populated with radius data
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_ends_slopes_cubic;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = Start Slope  curve tag;
section_surface.control_strings[2] = End curve tag;
section_surface.control_strings[3] = End Slope curve tag;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method = UF_MODL_secsrf_fillet_cubic;
section_surface.control_strings[0] = Curve tag on first face;
section_surface.control_strings[1] = Curve tag on second face;
section_surface.control_strings[2] = NULL;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = First face tag;
section_surface.tangent_faces[1] = Second face tag;
section_surface.radius_data = NULL;
section_surface.angle_data = NULL;

section_surface.create_method =
UF_MODL_secsrf_point_radius_angle_arc;
section_surface.control_strings[0] = Start curve tag;
section_surface.control_strings[1] = NULL;
section_surface.control_strings[2] = NULL;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = First face tag;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = must be populated with radius data
section_surface.angle_data = must be populated with angle data;
section_surface.direction_indicator = must be 1 or -1;

section_surface.create_method = UF_MODL_secsrf_full_circle; 
section_surface.control_strings[0] = Guide edge curve tag;
section_surface.control_strings[1] = Orientation edge curve tag;
section_surface.control_strings[2] = NULL;
section_surface.control_strings[3] = NULL;
section_surface.control_strings[4] = NULL;
section_surface.control_strings[5] = NULL;
section_surface.spine_string = Spine curve tag;
section_surface.rho_data = NULL;
section_surface.tangent_faces[0] = NULL;
section_surface.tangent_faces[1] = NULL;
section_surface.radius_data = must be populated with radius data
section_surface.angle_data = NULL;

Faces
 
typedef struct UF_MODL_faces_s
{
int number_of_faces;
tag_t faces[];
UF_MODL_face_extension_t face_extension;
} UF_MODL_faces_t, *UF_MODL_faces_p_t;
 
This structure is used in various functions to define an array of faces and a face extension option.
 
Parameter
 
Description
 
number_of_faces
 
The number of faces supplied in the following array
 
faces[]
 
An array of faces to be used in the function, note that some functions may allow planes and datum_planes in this array.
 
face_extension
 
An indication of how the faces should be extended if the function allows for face extension, it should be set to one of the following values:
 
UF_MODL_FACE_EXTENSION_NONE,
UF_MODL_FACE_EXTENSION_LINEAR,
UF_MODL_FACE_EXTENSION_NATURAL,
UF_MODL_FACE_EXTENSION_CURV,
UF_MODL_FACE_EXTENSION_CIRC
 

 
typedef struct UF_MODL_offset_trans_faces_s
{
UF_MODL_faces_p_t faces;
UF_MODL_offset_trans_type_t method_type;
char distance[MAX_LINE_SIZE+1];
UF_MODL_vector_p_t direction;
} UF_MODL_offset_trans_faces_t,
*UF_MODL_offset_trans_faces_p_t;
 
This structure is used in various functions to define a set of faces that are an offset or translation of the specified faces.
 
Parameter
 
Description
 
faces
 
The faces to be offset or translated.
 
method_type
 
Indication of whether the faces are to be offset or translated, this should be set to one of the following values:

UF_MODL_OFFSET_OF_FACES,
UF_MODL_TRANSLATION_OF_FACES
 
distance
 
A character string containing the constant value desired to offset or translate the specified faces.
 
direction
 
A vector defining the direction of translation, only used if method_type = UF_MODL_TRANSLATION_OF_FACES, can be NULL otherwise
 

 
Parms Structure
 
This structure was modified in V13.0 as follows:
 
The array size of the value field changed from MAX_STRING_LEN to MAX_LINE_SIZE+1. The V12.0 law structure with the field, identifier, changed to the V13.0 law_spine structure with the field law. The V12.0 range structure with three fields changed to the V13.0 law_no_spine structure with a law field.
 
typedef struct UF_MODL_parm_s
{
UF_MODL_parm_method_t method_type;
union
{
/* method_type == UF_MODL_PARM_CONSTANT */
struct
{
char value[MAX_LINE_SIZE+1];
} constant;

/* method_type == UF_MODL_PARM_LAW_SPINE */
struct
{
UF_MODL_law_spine_p_t law;
} law_spine;

/* method_type ==
UF_MODL_PARM_LAW_NO_SPINE */
struct
{
UF_MODL_law_no_spine_p_t law;
} law_no_spine;
} defined_by;
} UF_MODL_parm_t, *UF_MODL_parm_p_t;
 
Various functions use this structure to define an input parameter through a variety of methods. The parameter can be a constant, defined by a law with a spine, or defined by a law without a spine. The function should indicate which options should be used or are valid.
 
When a function is returning the parm structure for a particular parameter, the character string value is a fully defined expression (i.e., p5=25).
 
Parameter
 
Description
 
method_type
 
indication of how the parameter is being defined, either through a constant value, of which an expression is made, or by a law. This should be set to one of the following values:
 
UF_MODL_PARM_CONSTANT
UF_MODL_PARM_LAW_SPINE
UF_MODL_PARM_LAW_NO_SPINE
 
constant
 
Information used to define the parameter if method_type = UF_MODL_PARM_CONSTANT
 
value - a character string containing the constant value desired, note that this string can be a numeric value (e.g., "25"), a fully defined expression (e.g., "p5=25"), an existing expression name (e.g., "p5"), or an expression string (i.e.,"p5+p7"). If the fully defined expression exists then an error occurs. If the expression name does not exist then an error occurs. Otherwise an expression is created.
 
law_spine
 
Information used to define the parameter if method_type = UF_MODL_PARM_LAW_SPINE
 
law definition of the law.
 
law_no_spine
 
Information used to define the parameter if method_type = UF_MODL_PARM_LAW_NO_SPINE
 
law definition of the law.
 

 
Law Spine Structure
 
typedef struct UF_MODL_law_spine_s
{
UF_STRING_t spine_profile;
UF_MODL_law_method_t method_type;
union
{
/* method_type == UF_MODL_LAW_CONSTANT */
struct
{
char value[MAX_LINE_SIZE+1];
} constant;
/* method_type == UF_MODL_LAW_LINEAR or
UF_MODL_LAW_CUBIC */
struct
{
char start_value[MAX_LINE_SIZE+1];
char end_value[MAX_LINE_SIZE+1];
} linear_cubic;
/* method_type == UF_MODL_LAW_SPINE_PTS_LINEAR
or
UF_MODL_LAW_SPINE_PTS_CUBIC */
struct
{
int number_of_pts_vals;
UF_MODL_law_spine_pt_val_t pts_vals[];
} spine_pts_linear_cubic;
/* method_type == UF_MODL_LAW_EQUATION */
struct
{
char parm[MAX_LINE_SIZE+1];
char function[MAX_LINE_SIZE+1];
} equation;
/* method_type == UF_MODL_LAW_CURVE */
struct
{
UF_STRING_t law_profile;
tag_t base;
UF_MODL_curve_direction_t direction;
} curve;
} defined_by;
} UF_MODL_law_spine_t, *UF_MODL_law_spine_p_t;
 
This structure defines a law, with a spine, in conjunction with the UF_MODL_parm structure.
 
Note for all character string values in the structure, if the character string is in expression format (e.g., p5=25, p5+p7), and the expression does not exist, an expression is created and the law is associated to that expression. If the expression does exist, then an error occurs. If the character string contains an expression name (e.g., p5) and the expression exists, the law is associated to that expression, if the expression does not exist an error occurs. If the character string is a numeric value (e.g., 25), the law is not associated to an expression.
 
When a function is returning the law structure for a particular parameter, all character string values are fully defined expressions (e.g., p5=25), if they had an associated expression.
 
Parameter
 
Description
 
spine_profile
 
A profile used to define the spine of the law.
 
method_type
 
Indication of how the law is being defined. This should be set to one of the following values:

UF_MODL_LAW_CONSTANT
UF_MODL_LAW_LINEAR,
UF_MODL_LAW_CUBIC
UF_MODL_LAW_SPINE_PTS_LINEAR
UF_MODL_LAW_SPINE_PTS_CUBIC
UF_MODL_LAW_EQUATION
UF_MODL_LAW_CURVE
 
constant
 
Information used to define the law if method_type = UF_MODL_LAW_CONSTANT,

the law evaluates to this constant value along the entire parameter range of the law.

value - a character string containing the constant
value desired
 
linear_cubic
 
Information used to define the law if method_type = UF_MODL_LAW_LINEAR or
UF_MODL_LAW_CUBIC

The law evaluates in a linear progression, or cubic progression
along the parameter range of the law.

start_value - a character string containing the starting
value desired
end_value - a character string containing the ending
value desired
 
spine_pts_linear_cubic
 
Information used to define the law if method_type = UF_MODL_LAW_SPINE_PTS_LINEAR or
UF_MODL_LAW_SPINE_PTS_CUBIC

The law evaluates to the values supplied at the corresponding
spine points, and varies linearly or cubically in between these
values.

number_of_pts_vals - number of elements in the following
array
pts_vals - array of points on spine curves at which values are
defined, and the corresponding values
 
equation
 
Information used to define the law if method_type = UF_MODL_LAW_EQUATION

The law evaluates to the result of solving the equation while
varying the variable specified from 0 to 1.

parm - a character string containing the dependant
variable of the equation, this variable
varies from 0 to 1 during evaluation of the law
function - a character string containing the equation
that should be solved to determine the value
of the law, note that this equation must have
the variable defined in parm in it.
 
curve
 
Information used to define the law if method_type = UF_MODL_LAW_CURVE

The law evaluates to the "Y" distance between the given profile and the base curve, the profile should be in the X-Y plane. If a base curve is not supplied, then the X axis is used as a base.

law_profile - profile defining the law
base - base curve of law, if a base is not desired then
set this to NULL_TAG.
direction - indication if the base curve should start from the beginning or end of the curve, this should be set to one of the following values:
UF_MODL_CURVE_START_FROM_BEGIN
UF_MODL_CURVE_START_FROM_END
can be 0 if no base curve defined.
 

 
Law No Spine Structure
 
typedef struct UF_MODL_law_no_spine_s
{
UF_MODL_law_method_t method_type;
union
{
/* method_type == UF_MODL_LAW_CONSTANT */
struct
{
char value[MAX_LINE_SIZE+1];
} constant;

/* method_type == UF_MODL_LAW_LINEAR or
UF_MODL_LAW_CUBIC */
struct
{
char start_value[MAX_LINE_SIZE+1];
char end_value[MAX_LINE_SIZE+1];
} linear_cubic;

/* method_type == UF_MODL_LAW_EQUATION */
struct
{
char parm[MAX_LINE_SIZE+1];
char function[MAX_LINE_SIZE+1];
} equation;

/* method_type == UF_MODL_LAW_CURVE */
struct
{
UF_STRING_t law_profile;
tag_t base;
UF_MODL_curve_direction_t direction;
} curve;
} defined_by;
} UF_MODL_law_no_spine_t, *UF_MODL_law_no_spine_p_t;
 
This structure defines a law, without a spine, in conjunction with the UF_MODL_parm structure.
 
Note for all character string values in the structure, if the character string is in expression format (e.g., p5=25, p5+p7), and the expression does not exist, an expression is created and the law is associated to that expression. If the expression does exist, then an error occurs. If the character string contains an expression name (e.g., p5) and the expression exists, the law is associated to that expression, if the expression does not exist an error occurs. If the character string is a numeric value (e.g., 25) the law is not associated to an expression.
 
When a function is returning the law structure for a particular parameter, all character string values are fully defined expressions (i.e., p5=25), if they had an associated expression.
 
Parameter
 
Description
 
method_type
 
indication of how the law is being defined. This should be set to one of the following values:

UF_MODL_LAW_CONSTANT
UF_MODL_LAW_LINEAR,
UF_MODL_LAW_CUBIC
UF_MODL_LAW_EQUATION
UF_MODL_LAW_CURVE
 
constant
 
Information used to define the law if method_type = UF_MODL_LAW_CONSTANT,

the law evaluates to this constant value along the entire parameter range of the law.

value - a character string containing the constant
value desired
 
linear_cubic
 
Information used to define the law if method_type = UF_MODL_LAW_LINEAR or
UF_MODL_LAW_CUBIC

The law evaluates in a linear progression, or cubic progression
along the parameter range of the law.

start_value - a character string containing the starting
value desired
end_value - a character string containing the ending
value desired
 
equation
 
Information used to define the law if method_type = UF_MODL_LAW_EQUATION

The law evaluates to the result of solving the equation while
varying the variable specified from 0 to 1.

parm - a character string containing the dependant
variable of the equation, this variable
varies from 0 to 1 during evaluation of the law
function - a character string containing the equation
that should be solved to determine the value
of the law, note that this equation must have
the variable defined in parm in it.
 
curve
 
Information used to define the law if method_type = UF_MODL_LAW_CURVE

The law evaluates to the "Y" distance between the given profile and the base curve, the profile should be in the X-Y plane. If a base curve is not supplied, then the X axis is used as a base.

law_profile - profile defining the law
base - base curve of law, if a base is not desired then
set this to NULL_TAG.
direction - indication if the base curve should start from the beginning or end of the curve, this should be set to one of the following values:
UF_MODL_CURVE_START_FROM_BEGIN
UF_MODL_CURVE_START_FROM_END
can be 0 if no base curve defined.
 
Law Spine Points Values Structure
 
typedef struct UF_MODL_law_spine_pt_val_s
{
double pt[3];
char value[MAX_LINE_SIZE+1];
} UF_MODL_law_spine_pt_val_t, *UF_MODL_law_spine_pt_val_p_t;
 
This structure is used in conjunction with the law spine structure to define points and associated values on a spine.
 
Parameter
 
Description
 
pt[3]
 
Point coordinates at which to associate the corresponding value. The closest point on the spine to this point is used. If the spine is closed and the end point is put in the array twice, the beginning of the spine is used for the first point and the ending for the second point.
 
value
 
The value assigned to the law at the given point.
 
Pocket Pad Outline
 
In V13.0, this structure was modified to add the following two structures to the defined_by union: single_outline_corner and double_outline_corner.
 
typedef struct UF_MODL_pocketpad_outline_s
{
UF_MODL_pocketpad_outline_type_t
outline_type;
union
{
/* outline_type ==
UF_MODL_SINGLE_OUTLINE */
struct
{
UF_MODL_project_curves_p_t outline_curves;
UF_MODL_curves_represent_t curves_represent;
UF_MODL_outline_represents_t outline_represents;
UF_MODL_parm_p_t taper_angle;
UF_MODL_taper_relative_to_t taper_relative_to;
UF_MODL_vector_p_t taper_vector;
} single_outline;

/* outline_type == UF_MODL_DOUBLE_OUTLINE */
struct
{
UF_MODL_project_curves_p_t
placement_curves;
UF_MODL_curves_represent_t
placement_curves_represent;
UF_MODL_project_curves_p_t
floor_top_curves;
UF_MODL_curves_represent_t
floor_top_curves_represent;
} double_outline;

/* outline_type ==
UF_MODL_SINGLE_OUTLINE_CORNER */
struct
{
UF_MODL_project_curves_p_t outline_curves;
UF_MODL_curves_represent_t curves_represent;
UF_MODL_outline_represents_t outline_represents;
UF_MODL_parm_p_t taper_angle;
UF_MODL_taper_relative_to_t taper_relative_to;
UF_MODL_vector_p_t taper_vector;
UF_MODL_parm_p_t corner_radius;
} single_outline_corner;

/* outline_type ==
UF_MODL_DOUBLE_OUTLINE_CORNER */
struct
{
UF_MODL_project_curves_p_t
placement_curves;
UF_MODL_curves_represent_t
placement_curves_represent;
UF_MODL_project_curves_p_t
floor_top_curves;
UF_MODL_curves_represent_t
floor_top_curves_represent;
UF_MODL_parm_p_t
corner_radius;
} double_outline_corner;

} defined_by;

} UF_MODL_pocketpad_outline_t,
*UF_MODL_pocketpad_outline_p_t;
 
The general pocket/pad functions use this structure to define the outline to specify the shape of the pocket/pad. This structure also defines whether the pocket/pad is created with a single outline at either the placement faces, or the floor/top faces of the pocket/pad, or with outlines at both the placement faces and the floor/top faces of the pocket/pad.
 
Parameter
 
Description
 
outline_type
 
Indication of whether the pocket/pad is being defined with a single outline at either the placement face or the floor/top face of the pocket/pad, or if the pocket/pad is being defined with outlines at both the placement face and the floor/top face of the pocket/pad, this should be set to one of the following values:

UF_MODL_SINGLE_OUTLINE
UF_MODL_DOUBLE_OUTLINE
 
single_outline
 
Information used to define the outline used to generate the pocket/pad if outline_type = UF_MODL_SINGLE_OUTLINE

outline_curves - the curves making up the outline.

curves_represent - indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND

outline_represents - indication of whether this outline is
defining the shape of the pocket/pad at the
placement face of the pocket/pad, at the
floor face o the pocket, or at the top face
of the pad, this should be set to one of the
following values

UF_MODL_SHAPE_AT_PLACEMENT
UF_MODL_SHAPE_AT_FLOOR
UF_MODL_SHAPE_AT_TOP

taper_angle - the parameter containing the angle value
desired for the taper

taper_relative_to - indication of how the taper angle is
measured, either relative to face normals,
or to a fixed vector, this should be set to
one of the following values

UF_MODL_TAPER_FACE_NORMALS
UF_MODL_TAPER_FIXED_VECTOR

taper_vector - the vector from which the taper angle is
measured, if the taper is relative to a fixed
vector
 

 
double_outline
 
Information used to define the outlines used to generate the pocket/pad if outline_type = UF_MODL_DOUBLE_OUTLINE

placement_curves - the curves making up the outline for the
placement faces

placement_curves_represent -
indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND

floor_top_curves - the curves making up the outline for the
floor/top faces

floor_top_curves_represent -
indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND
 
single_outline_corner
 
Information used to define the outline used to generate the pocket/pad if outline_type = UF_MODL_SINGLE_OUTLINE_CORNER

Note that all the information in this structure is the same as that in single_outline except for the addition of the corner_radius variable described below. Note also that if parameters of a pocket/pad are retrieved, and that pocket/pad had a corner radius defined, then the information is returned in this structure.

corner_radius - the parameter containing the radius value desired for "corner" of non-smooth outlines. Non-smooth outlines are outlines whose curve tangents are not within angle tolerance across their end points. This radius is applied on the side of the pocket/pad at these points.
 
double_outline_corner
 
Information used to define the outline used to generate the pocket/pad if outline_type = UF_MODL_DOUBLE_OUTLINE_CORNER

Note that all the information in this structure is the same as that in double_outline except for the addition of the corner_radius variable described below. Note also that if parameters of a pocket/pad are retrieved, and that pocket/pad had a corner radius defined, then the information is returned in this structure.

corner_radius - the parameter containing the radius value desired for "corner" of non-smooth outlines. Non-smooth outlines are outlines whose curve tangents are not within angle tolerance across their end points. This radius is applied on the side of the pocket/pad at these points.
 
Pocket Pad Outline
 
typedef struct UF_MODL_pocketpad_outline_s
{
UF_MODL_pocketpad_outline_type_t
outline_type;
union
{
/* outline_type ==
UF_MODL_SINGLE_OUTLINE */
struct
{
UF_MODL_project_curves_p_t outline_curves;
UF_MODL_curves_represent_t curves_represent;
UF_MODL_outline_represents_t outline_represents;
UF_MODL_parm_p_t taper_angle;
UF_MODL_taper_relative_to_t taper_relative_to;
UF_MODL_vector_p_t taper_vector;
} single_outline;

/* outline_type == UF_MODL_DOUBLE_OUTLINE */
struct
{
UF_MODL_project_curves_p_t
placement_curves;
UF_MODL_curves_represent_t
placement_curves_represent;
UF_MODL_project_curves_p_t
floor_top_curves;
UF_MODL_curves_represent_t
floor_top_curves_represent;
} double_outline;
} defined_by;

} UF_MODL_pocketpad_outline_t,
*UF_MODL_pocketpad_outline_p_t;
 
This structure is used in the general pocket/pad functions to define the outline to specify the shape of the pocket/pad. This structure is also used to define whether the pocket/pad is being created with a single outline at either the placement faces, or the floor/top faces of the pocket/pad, or with outlines at both the placement faces and the floor/top faces of the pocket/pad.
 
Parameter
 
Description
 
outline_type
 
Indication of whether the pocket/pad is being defined with a single outline at either the placement face or the floor/top face of the pocket/pad, or if the pocket/pad is being defined with outlines at both the placement face and the floor/top face of the pocket/pad, this should be set to one of the following values:

UF_MODL_SINGLE_OUTLINE
UF_MODL_DOUBLE_OUTLINE
 
single_outline
 
Information used to define the outline used to generate the pocket/pad if outline_type = UF_MODL_SINGLE_OUTLINE

outline_curves - the curves making up the outline.

curves_represent - indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND

outline_represents - indication of whether this outline is
defining the shape of the pocket/pad at the
placement face of the pocket/pad, at the
floor face o the pocket, or at the top face
of the pad, this should be set to one of the
following values

UF_MODL_SHAPE_AT_PLACEMENT
UF_MODL_SHAPE_AT_FLOOR
UF_MODL_SHAPE_AT_TOP

taper_angle - the parameter containing the angle value
desired for the taper

taper_relative_to - indication of how the taper angle is
measured, either relative to face normals,
or to a fixed vector, this should be set to
one of the following values

UF_MODL_TAPER_FACE_NORMALS
UF_MODL_TAPER_FIXED_VECTOR

taper_vector - the vector from which the taper angle is
measured, if the taper is relative to a fixed
vector
 

 
double_outline
 
Information used to define the outlines used to generate the pocket/pad if outline_type = UF_MODL_DOUBLE_OUTLINE

placement_curves - the curves making up the outline for the
placement faces

placement_curves_represent -
indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND

floor_top_curves - the curves making up the outline for the
floor/top faces

floor_top_curves_represent -
indication of whether the curves represent
theoreticals or tangents, this should be set
to one of the following values:

UF_MODL_THEORETICAL_INTERSECT
UF_MODL_TANGENT_AT_END_OF_BLEND
 
Project Curves
 
typedef struct UF_MODL_project_curves_s
{
int number_of_curves;
tag_t curves[];
UF_MODL_proj_type_t
curve_projection_type;
UF_MODL_vector_p_t curve_projection_vector;

} UF_MODL_project_curves_t,
*UF_MODL_project_curves_p_t;
 
This structure is used in various functions to define a set of curves that is then subsequently projected along the specified vector. The function also requires the input of faces/planes/datum_planes to define the target of the projection.
 
Parameter
 
Description
 
number_of_curves
 
the number of curves in the following array
 
curves
 
the array of curves
 
curve_projection_type
 
indication of whether the curves should be projected along their plane normal or along the following vector, this should be set to one of the following values:

UF_MODL_PROJ_NORMAL_TO_CURVES
UF_MODL_PROJ_ALONG_VECTOR
 
curve_projection_vector
 
the vector along which to project the curves if curve_projection_type = UF_MODL_PROJ_ALONG_VECTOR, can be NULL otherwise
 
Vector Structure
 
typedef struct UF_MODL_vector_s
{
int reverse_vector;
UF_MODL_vector_type_t vector_type;
union
{
/* vector_type == UF_MODL_VECTOR_DIRECTION */
struct
{
double xyz[3];
} direction;

/* vector_type == UF_MODL_VECTOR_AXIS */
struct
{
tag_t identifier;
} axis;

/* vector_type ==
UF_MODL_VECTOR_FACE_NORMAL */
struct
{
tag_t face;
double point[3];
} face_normal;

/* vector_type ==
UF_MODL_VECTOR_TWO_POINTS */
struct
{
double from_point[3];
double to_point[3];
} two_points;

/* vector_type ==
UF_MODL_VECTOR_PLANE_OF_CURVES */
struct
{
int number_of_curves;
tag_t curves[];
} plane_of_curves;
} defined_by;
} UF_MODL_vector_t, *UF_MODL_vector_p_t;
 
The following table provides descriptions for these structures.
 
Parameter
 
Description
 
reverse_vector
 
Indicates if the vector calculated should then be reversed before being used.
= 0 -> do not reverse
!= 0 -> reverse
 
vector_type
 
Indication of which structure within the union is being used to define the vector, this should be one of the following values:

UF_MODL_VECTOR_DIRECTION,
UF_MODL_VECTOR_AXIS,
UF_MODL_VECTOR_FACE_NORMAL,
UF_MODL_VECTOR_TWO_POINTS,
UF_MODL_VECTOR_PLANE_OF_CURVES
 
direction
 
Information used to define vector if vector_type = UF_MODL_VECTOR_DIRECTION
 
xyz[3] - 3D direction vector
 
axis
 
Information used to define vector if vector_type =
UF_MODL_VECTOR_AXIS
 
identifier - tag of datum plane or plane whose normal is to be used to define the vector, or the tag of a datum axis.
 
face_normal
 
Information used to define vector if vector_type = UF_MODL_VECTOR_FACE_NORMAL
 
face - tag of face whose normal or reverse normal is to be used to define the vector.
 
point[3] - point coordinates on the face to determine the normal or reverse normal at, the closest point on the face to this point is used.
 
two_points
 
Information used to define vector if vector_type = UF_MODL_VECTOR_TWO_POINTS
 
from_point[3] - point coordinates from which the vector is to start.
 
to_point[3} - point coordinates to which the vector is to point.
 
plane_of_curves
 
Information used to define vector if vector_type = UF_MODL_VECTOR_PLANE_OF_CURVES
 
number_of_curves - number of curves in the following array
 
curves[] - array of curves whose plane normal is to be found
 
This structure is used in various functions to define a vector. A variety of means of defining a vector are provided. Note that the data used in defining the vector is not associated to the created data unless otherwise noted in the specific function being used.
 
Thread Structure
 
This structure is used in creating and inquiring symbolic threads.
 
typedef struct UF_MODL_symb_thread_data_s
{
tag_t cyl_face;
tag_t start_face;
double axis_direction[3];
int include_instances;
int rotation;
int length_flag;
int tapered;
int num_starts;
char *length;
char *form;
char *method;
char *callout;
char *major_dia;
char *minor_dia;
char *tapped_dia;
char *pitch;
char *angle;
} UF_MODL_symb_thread_data_t, *UF_MODL_symb_thread_data_p_t;
 

 
Parameter
 
Description
 
cyl_face
 
Cylindrical face to be threaded
 
start_face
 
Face at which the thread starts
 
axis_direction
 
Direction of the thread
 
include_instances
 
Instancing flag -
 
UF_MODL_NO_INSTANCES - no thread on instances of cylindrical face
 
UF_MODL_INCL_INSTANCES - threads on instances of the
 
cylindrical face
 
rotation
 
Rotation -
 
UF_MODL_RIGHT_HAND - right-handed thread
 
UF_MODL_LEFT_HAND - left-handed thread
 
length_flag
 
Indicates the thread is a fixed length or full thread.
 
UF_MODL_FULL_THREAD - full thread length
 
UF_MODL_FIXED_LENGTH - fixed thread length
 
tapered
 
Indicates the thread is tapered or non-tapered
 
UF_MODL_TAPERED - tapered thread
 
UF_MODL_NON_TAPERED - non-tapered thread
 
num_starts
 
Number of starts
 
length
 
Thread length expression
 
form
 
Thread form
 
method
 
Thread method
 
callout
 
Thread callout.
 
In creation, if you specify a callout, the major diameter, minor diameter, pitch, tapped drill/shaft diameter, length, and tapered indicator are read from the thread table and the values of those parameters from the structure are ignored except for the length value. If the length value is specified in the structure, it will be used instead of the one read from the table. If no callout is specified, the values of those parameters are used in creating the thread.
 
Not specifying a callout means to pass a NULL pointer, passing an empty string ("") causes an error.
 
In Inquiry, if a callout is specified in creating the thread, those parameters also return in the structure together with the callout.
 
major_dia
 
Major diameter expression of the thread
 
minor_dia
 
Minor diameter expression of the thread
 
tapped_dia
 
Tapped diameter expression of the thread
 
pitch
 
Thread pitch expression
 
angle
 
Thread angle expression
 
Sheet Metal Hole Structure
 
The following structure is used when creating, editing, or querying a sheet metal hole.
 
typedef struct UF_MODL_smhole_data_s
{
char diameter[UF_MAX_EXP_LENGTH + 1];
char depth[UF_MAX_EXP_LENGTH + 1];
char tip_angle[UF_MAX_EXP_LENGTH + 1];
tag_t edge1;
char offset1[UF_MAX_EXP_LENGTH + 1];
tag_t edge2;
char offset2[UF_MAX_EXP_LENGTH + 1];
tag_t hole_face;
tag_t thru_face;
UF_MODL_smhole_direction_type_e_t method;
tag_t datum_axis;
double vec_dir[3];
UF_MODL_smhole_hole_type_e_t type;
}UF_MODL_smhole_data_t, *UF_MODL_smhole_data_p_t;
 
History
 
V15.0 changes: UF_SMHOLE_direction_type_e_t was renamed to UF_MODL_smhole_direction_type_e_t. UF_SMHOLE_hole_type_e_t was renamed to UF_MODL_smhole_type_e_t.
 

 
Field
 
Description
 
diameter
 
Diameter of SMHole
 
depth
 
Depth of SMHole. Only used for depth type SMHoles
 
tip_angle
 
Tip angle of SMHole. Only used for depth type SMHoles
 
edge1
 
Tag of the first offset edge
 
offset1
 
Offset distance from first offset edge
 
edge2
 
Tag of the second offset edge
 
offset2
 
Offset distance from second offset edge
 
hole_face
 
Tag of the face on which the SMHole will be placed
 
thru_face
 
Tag of the face through which the Through SMHole will be created
 
method
 
Method used to determine angle of central axis of the SMHole.
 
UF_FACE_NORMALS = use face normals
UF_ALONG_VECTOR = use a vector
UF_ALONG_DATUM_AXIS = use a datum axis
 
datum_axis
 
Tag of the datum axis used to determine the angle of the central axis of the SMHole. Used with UF_ALONG_DATUM_AXIS method.
 
vec_dir[3]
 
Vector used to determine the angle of the central axis of the SMHole. Used with UF_ALONG_VECTOR method.
 
type
 
Type of SMHole to be created.
UF_DEPTH_SMHOLE = depth type SMHole
UF_THROUGH_SMHOLE = thru type SMHole
UF_PUNCH_SMHOLE = punch type SMHole
 
Sheet Metal Slot Structure
 
The following structure is used when creating, editing, or querying a sheet metal slot.
 
typedef struct UF_MODL_smslot_data_s
{
char length[UF_MAX_EXP_LENGTH + 1];
char width[UF_MAX_EXP_LENGTH + 1];
char depth[UF_MAX_EXP_LENGTH + 1];
tag_t edge1;
char offset1[UF_MAX_EXP_LENGTH + 1];
tag_t edge2;
char offset2[UF_MAX_EXP_LENGTH + 1];
tag_t slot_face;
tag_t thru_face;
UF_MODL_smslot_direction_type_e_t dir_method;
tag_t d_datum_axis;
double d_vec_dir[3];
UF_MODL_smslot_direction_type_e_t orient_method;
tag_t o_datum_axis;
double o_vec_dir[3];
UF_MODL_smslot_slot_type_e_t type;
}UF_MODL_smslot_data_t, *UF_MODL_smslot_data_p_t;
 
History
 
V15.0 changes: UF_SMHOLE_direction_type_e_t was renamed to UF_MODL_smhole_direction_type_e_t. UF_SMSLOT_slot_type_e_t was renamed to UF_MODL_smslot_type_e_t.
 

 
Field
 
Description
 
length
 
Length of SMSlot
 
width
 
Width of SMSlot
 
depth
 
Depth of SMSlot. Only used for depth type SMSlots
 
edge1
 
Tag of the first offset edge
 
offset1
 
Offset distance from first offset edge
 
edge2
 
Tag of the second offset edge
 
offset2
 
Offset distance from second offset edge
 
slot_face
 
Tag of the face on which the SMSlot will be placed
 
thru_face
 
Tag of the face through which the Through SMSlot will be created
 
dir_method
 
Method used to determine angle of central axis of the SMSlot.
 
UF_FACE_NORMALS = use face normals
UF_ALONG_VECTOR = use a vector
UF_ALONG_DATUM_AXIS = use a datum axis
 
d_datum_axis
 
Tag of the datum axis used to determine the angle of the central axis of the SMSlot. Used when dir_method is UF_ALONG_DATUM_AXIS.
 
d_vec_dir[3]
 
Direction vector used to determine the angle of the central axis of the SMSlot. Used when dir_method is UF_ALONG_VECTOR.
 
orient_method
 
Method used to determine angle of the orientation along the length of the SMSlot.
 
UF_FACE_NORMALS = use face normals
UF_ALONG_VECTOR = use a vector
UF_ALONG_DATUM_AXIS = use a datum axis
 
o_datum_axis
 
Tag of the datum axis used to determine the orientation along the length of the SMSlot. Used when orient_method is UF_ALONG_DATUM_AXIS.
 
o_vec_dir[3]
 
Orientation vector used to determine the orientation along the length of the SMSlot. Used when orient_method is UF_ALONG_VECTOR.
 
type
 
Type of SMSlot to be created.
UF_DEPTH_SMSLOT = depth type SMSlot
UF_THROUGH_SMSLOT = thru type SMSlot
UF_PUNCH_SMSLOT = punch type SMSlot
 
SMCutout Parameter Data
 
typedef struct UF_MODL_smcutout_data_s
 
{
 

 

 
tag_t
 
placement_face;
 

 
int
 
n_curves;
 

 
tag_t
 
*curves;
 

 
UF_MODL_smcutout_direction_type_e_t
 
proj_method;
 

 
double
 
proj_vector[3];
 

 
tag_t
 
datum_axis;
 

 
logical
 
flip_discard_region;
 
}
 
UF_MODL_smcutout_data_t, *UF_MODL_smcutout_data_p_t;
 
This structure is used to define the parameters for constructing the cross sectional shape of the bead.
 
Field
 
Description
 
placement_face
 
The face on which the SMCutout will be placed.
 
n_curves
 
The number of curves in the curves array.
 
curves
 
An array holding the tags to the curves that define the outline shape of the SMCutout.
 
proj_method
 
The method used to determine the projection vector of the outline curves as well as the direction in which the cutout will be punched through the solid body. Can be one of
 
UF_FACE_NORMALS: project along the placement face reverse normal.
 
UF_ALONG_VECTOR: project along a given vector. See proj_vector below.
 
UF_ALONG_DATUM_AXIS: project along a given datum axis. See datum_axis below.
 
proj_vector[3]
 
Used when proj_method is UF_ALONG_VECTOR. This is the vector along which the outline curves will be projected. It also indicates the vector along which the cutout will be punched through the solid body.
 
datum_axis
 
Used when proj_method is UF_ALONG_DATUM_AXIS. This is the tag of a datum axis that will be used to determine the vector along which the outline curves will be projected. It also indicates the vector along which the cutout will be punched through the solid body.
 
flip_discard_region
 
When true the discard region is flipped from its normal calculation. See discussion below on the discard region.
 

 
The discard region is calculated by a vector pointing to the region to be discarded. This vector, called the discard region vector, is the cross product between the placement face normal and the tangent of the combined curves in the "curves" array described above.
 
Therefore, it is important to know the order of the curves in the "curves" array. Reversing the order of these curves may reverse their tangent when combined and thus reverse the discard region vector.
 
Simplify Parms
 
typedef struct UF_MODL_simpl_data_s
 
{
 

 

 
int
 
n_retained_faces;
 

 
tag_t
 
*retained_faces;
 

 
int
 
n_boundary_faces;
 

 
tag_t
 
*boundary_faces;
 

 
int
 
n_removed_faces;
 

 
tag_t
 
*removed_faces;
 

 
int
 
n_boundary_edges;
 

 
tag_t
 
*boundary_edges;
 

 
int
 
n_non_boundary_edges;
 

 
tag_t
 
*non_boundary_edges;
 

 
int
 
n_imprint_features;
 

 
tag_t
 
*imprint_features;
 

 
tag_t
 
max_hole_dia_expression;
 
}
 
UF_MODL_simpl_data_t, *UF_MODL_simpl_data_p_t;
 
The UF_MODL_simpl_data_s structure contains the parametric information used to define a simplification feature.
 
When the simplification feature is applied to a body, certain faces are removed from the body, and the gaps are healed over (creating new faces if necessary). The faces to be removed are determined as follows:
 
crossing a boundary edge is retained.
 
The boundary edges are defined as follows:
 
edges.
 
in the array non_boundary_edges, are also boundary edges.
 
except those edges in the array non_boundary_edges, are also boundary edges.
 
current value of max_hole_dia_expression, except those edges in the array non_boundary_edges, are also boundary edges. (Effectively, such holes are removed.) A hole is defined to be an inward-pointing full cylindrical face or an inward-pointing full conical face. To suppress this option, simply pass in an expression evaluating to 0.0 or less.
 
The array removed_faces can be used to verify the simplification feature. If any face in it would remain on the solid after the feature were created, the feature is not actually created and the error UF_MODL_SIMPL_FACE_NOT_REMOVED returns. This also applies if the feature is previewed.
 
The following restrictions apply to simplify parms:
 
two arrays may have elements in common.
 
no elements in common.
 
In some cases, one or more faces cannot be removed at all, because the surrounding faces cannot be healed across them, or because this would divide the body into two or more disjoint pieces. In this case, the error UF_MODL_SIMPL_HEAL_FAILED returns. These cases cannot be detected by previewing the simplification, only when it is actually applied.
 
Field
 
Description
 
n_retained_faces
 
Number of retained faces
 
retained_faces
 
Array of retained faces
 
n_boundary_faces
 
Number of boundary faces
 
boundary_faces
 
Array of boundary faces
 
n_removed_faces
 
Number of removed faces
 
removed_faces
 
Array of removed faces
 
n_boundary_edges
 
Number of boundary edges
 
boundary_edges
 
Array of boundary edges
 
n_non_boundary_edges
 
Number of non-boundary edges
 
non_boundary_edges
 
Array of non-boundary edges
 
n_imprint_features
 
Number of imprint features to apply
 
imprint_features
 
Array of imprint features whose edges are to be boundaries
 
n_non_boundary_faces
 
Expression for maximum diameter holes to remove
 
Imprint Faces Parms
 
typedef struct UF_MODL_imprint_faces_data_s
 
{
 

 

 
int
 
n_imprint_faces;
 

 
tag_t
 
*imprint_faces;
 

 
tag_t
 
imprint_datum_plane;
 
}
 
UF_MODL_imprint_faces_data_t,
*UF_MODL_imprint_faces_data_p_t;
 
The UF_MODL_imprint_faces_data_s structure contains the parametric information used to define an imprint feature which imprints an edge on every face in imprint_faces where they intersect with imprint_datum_plane. The faces must all be on the same body. It is an error if none of the faces intersect imprint_datum_plane.
 
Field
 
Description
 
n_imprint_faces
 
The number of faces
 
imprint_faces
 
Array of faces to be imprinted
 
imprint_datum_plane
 
The datum plane of intersection
 
Imprint Loop Parms
 
typedef struct UF_MODL_imprint_loop_data_s
 
{
 

 

 
tag_t
 
imprint_face;
 

 
tag_t
 
imprint_datum_plane;
 
}
 
UF_MODL_imprint_loop_data_t,
*UF_MODL_imprint_loop_data_p_t;
 
The UF_MODL_imprint_loop_data_s structure contains the parametric information used to define an imprint feature which imprints edges on all the faces connected to imprint_face which intersect with imprint_datum_plane. Hence it defines a closed loop on the solid, even if the geometry of the solid is changed later. It is an error if the face does not intersect imprint_datum_plane.
 
Field
 
Description
 
imprint_face
 
The face defining the starting point of the imprint
 
imprint_datum_plane
 
The datum plane of intersection