PK_ATTDEF_sf_2_t   


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.