Groups

Element type: miSCENE_GROUP
Data type: miGroup
Sizes: int max_kids, int max_connections
Defaults: all nulls, max_* as given by size arguments
typedef struct miGroup {
        miGeoScalar     merge;          /* merge tolerance */
        miBoolean       placeholder;    /* is this a demand-loaded group? */
        int             spare0;         /* not used */
        miBoolean       merge_group;    /* perform merging on members? */
        int             max_kids;       /* number of kids allocated */
        int             no_kids;        /* number of kids actually used */
        int             max_connections;/* number of connections allocated */
        int             no_connections; /* number of connections used */
        miTag           userdata;       /* optional user data blocks */
        miUint          label;          /* optional label */
        int             spare1[3];      /* not used */
        miTag           kids[2];        /* kid list (instances) */
} miGroup;

typedef struct {
        miTag           instance[2];    /* the two face type object instances*/
        miGeoIndex      face[2];        /* indices of the two miFace's */
        miGeoIndex      curve[2];       /* indices of the two miCurves*/
        miGeoRange      range[2];
} miConnection;

A translator must provide: nothing.

A translator may provide: merge_group, merge, the connection array, userdata, label.

Groups have two variable-sized sections, one for the list of instances and one for the list of connections. The latter exists only if the group is a merge group. The macro miGROUP_GET_CONNECTIONS(n) returns a miConnection pointer to the n-th connection. Note that instances must be added to groups with mi_scene_link, but the connection tags are written directly to the miConnection.

merge is the merge epsilon. It is used only in merge groups.

placeholder is reserved for internal use.

merge_group is miTRUE if this group is a merge group. Merge groups are treated like objects; all their subobjects are tessellated as one object. In fact, the Scene module treats merge groups like objects and lets GAP pick apart the group and its subtrees.

max_kids is the current size of the kids array.

no_kids is the number of instances stored in the kids array.

max_connections is the current size of the connection array.

no_connections is the number of connections in the connection array.

userdata allows attaching a user data block (miUserdata) or a chain of user data blocks. Shaders can retrieve the data with mi_query.

userdata allows attaching a user data block (miUserdata) or a chain of user data blocks. Shaders can retrieve the data with mi_query.

label is a numeric value assigned by applications.

kids is the beginning of the variable section of miGroup, consisting of an array of instance tags followed by an optional array of connections. Fields that follow the kids array in the C declaration in geoshader.h are not shown here, and are never used.

The data structure contains extra members such as groupjob for placeholder groups, which are reserved for future extensions. Do not use.

Copyright © 1986-2008 by mental images GmbH