struct PK_ATTDEF_sf_2 { char *name; --- name of attribute type PK_ATTDEF_class_t attdef_class; --- transform characteristics int n_owner_types; --- number of legal owners (>0) PK_CLASS_t *owner_types; --- legal owner types int n_fields; --- number of fields (>= 0) PK_ATTRIB_field_t *field_types; --- types of above fields PK_LOGICAL_t unicode_names; --- Unicode or char names PK_field_names_t field_names; --- names of above fields int *field_sizes; --- for future use }; typedef struct PK_ATTDEF_sf_2 PK_ATTDEF_sf_2_t; This data structure is the standard form for a named-field attribute definition. Description of fields: name Acts as a label for the type which is fixed across transmit and receive. It is specified by a string containing only printable characters. Names beginning with the string SDL/TY are reserved for attribute types generated internally by Parasolid. attdef_class Determines the behaviour of an attribute of the new type when the entity to which the attribute is attached is changed by a modelling operation. The meaning of each possible value of class is as follows. PK_ATTDEF_class_01_c Attribute is independent of physical size and position of entity to which it is attached (e.g. density). PK_ATTDEF_class_02_c Attribute is dependent on entity size but not on position. (e.g. weight). PK_ATTDEF_class_03_c Attribute may vary with position or orientation (e.g. moment of inertia). PK_ATTDEF_class_04_c Attribute transforms with its owner, but is otherwise independent of the size and shape of its owner (e.g. start-point or direction of movement of the tool that cuts a face) PK_ATTDEF_class_05_c Attribute transforms with its owner provided its owner is not changed in other ways (e.g. centre of gravity) PK_ATTDEF_class_06_c As for class 01, attribute is independent of physical size and position of the entity to which it is attached. However this class of attribute supports multiple values - one entity may have a list of attributes of the same type attached. PK_ATTDEF_class_07_c As for class 04, attribute transforms with its owner, but is otherwise independent of size and shape of the owner. However this class supports multiple values - an entity may have a list of attributes of the same type attached. The response of a field of an attribute when the attribute transforms (with its owner) depends on the type of the field as follows: real, integer and string fields are unaffected, co-ordinate fields are acted on by the transformation, vector and direction fields are acted on by the reflection and rotation parts of the transformation. axis fields behave as a coordinate field and a direction field. owner_types An array of length n_owner_types which dictates the entity class which may legitimately own attributes of the given type. Legitimate classes are as follows. PK_CLASS_assembly PK_CLASS_instance PK_CLASS_body PK_CLASS_region PK_CLASS_shell PK_CLASS_face PK_CLASS_loop PK_CLASS_edge PK_CLASS_fin PK_CLASS_vertex PK_CLASS_group PK_CLASS_surf PK_CLASS_curve PK_CLASS_point The geometric entity classes, PK_CLASS_surf, PK_CLASS_curve and PK_CLASS_point, may only be specified as legal owners for attribute types with class PK_ATTDEF_class_01_c or PK_ATTDEF_class_04_c. A valid attribute definition must specify at least one owner. field_types An array of length n_fields which specifies the sequence and type of fields for attributes of the given type. The permitted field types are as follows. PK_ATTRIB_field_real_c PK_ATTRIB_field_integer_c PK_ATTRIB_field_string_c PK_ATTRIB_field_ustring_c PK_ATTRIB_field_vector_c PK_ATTRIB_field_coordinate_c PK_ATTRIB_field_direction_c PK_ATTRIB_field_axis_c PK_ATTRIB_field_pointer_c n_fields may be zero. unicode_names A switch specifying whether names are supplied in Unicode form, or in the native character set of the machine. Currently, only native names are supported, so PK_LOGICAL_false is required. field_names An array of length n_fields which specifies the names of fields for attributes of the given type. field_sizes For future use. Currently this field must be set to NULL.