struct PK_ATTDEF_sf { 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 }; typedef struct PK_ATTDEF_sf PK_ATTDEF_sf_t; This data structure is the standard form for an 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.