xsimrParticleShape Struct Reference
 
 
 
xsimrParticleShape Struct Reference

#include <xsi_miuserdata_defs.h>


Class Description

Particle shape structure.

The data pointed to by each data tag is a flat list of particle attributes for each particle in the cloud. The size of each attribute entry is dependent upon the parameter type in xsimrAttributeData::type.

See also:
xsimrParticleShapeType, xsimrAttributeData, xsimrPointCloudData
Since:
7.0
Example:
Example for how to use the particle data structure:
                xsimrPointCloudData *findParticleData( miState *state )
                {
                        if( state->instance == miNULLTAG )
                                return( NULL );

                        // Get the item tag and the item�s userdata block tag.
                        miTag       object_tag;
                        mi_query(miQ_INST_ITEM, NULL, state->instance, (void *)&object_tag);

                        if( object_tag == miNULLTAG )
                                return ( NULL );

                        miTag       data_tag;
                        mi_query(miQ_OBJ_DATA, NULL, object_tag, (void *)&data_tag );

                        while( data_tag )
                        {
                                miUint      label = 0;

                                mi_query( miQ_DATA_LABEL, NULL, data_tag, &label );

                                if( label == XSIMR_POINTCLOUDDATA_LABEL )
                                {
                                        xsimrPointCloudData     *data_ptr = NULL;

                                        mi_query( miQ_DATA_PARAM, NULL, data_tag, (void *)&data_ptr );

                                        if( data_ptr->version != XSIMR_POINTCLOUDDATA_VERSION )
                                        {
                                                mi_error( "Unsupported point cloud data version (%d.%d)", data_ptr->version >> 16, data_ptr->version & 0xFFFF );
                                                return( NULL );
                                        }

                                        return( data_ptr );
                                }

                                mi_query(miQ_DATA_NEXT, NULL, data_tag, &data_tag);
                        }
                        return( NULL );
                }

                static void *findAttribute
                (
                        xsimrPointCloudData *data_ptr,
                        const char      *name_wanted,
                        xsimrAttributeType type_wanted,
                        miBoolean       *is_constant
                        )
                {
                        for( int i = 0; i < data_ptr->n_data; i++ )
                        {
                                xsimrAttributeData  *attrib_ptr = &data_ptr->attributes[ data_ptr->i_data + i ];
                                const char*      attrib_name = (const char *)mi_db_access( attrib_ptr->name );
                                mi_db_unpin( attrib_ptr->name );

                                if( _stricmp( attrib_name, name_wanted ) == 0 &&
                                        attrib_ptr->type == type_wanted )
                                {
                                        void    *attrib_data_ptr;

                                        *is_constant = attrib_ptr->constant;

                                        mi_query( miQ_DATA_PARAM, NULL, attrib_ptr->data, &attrib_data_ptr );

                                        return( data_ptr );
                                }
                        }

                        return( NULL );
                }

                // Get position vector and "size" attribute from cloud
                void get_my_data
                (
                        miState         *state,
                        miVector        **pos_ptr,
                        miScalar        **radius_ptr,
                        miBoolean       *radius_const
                        )
                {
                        xsimrPointCloudData *data_ptr;

                        data_ptr = findParticleData( state );
                        if( !data_ptr )
                                return;

                        // Get the position vector.
                        mi_query( miQ_DATA_PARAM, NULL, data_ptr->positions, (void *)pos_ptr );

                        findAttribute( data_ptr, "Radius", xsimrATTRIBUTE_SCALAR, radius_const );
                }

List of all members.

Public Attributes

xsimrParticleShapeType  type
miInteger  instance_id

Member Data Documentation

miInteger instance_id

If the shape type is xsimrSHAPE_INSTANCE, then this index into the instance list on the pointcloud geometry shader's parameter structure


The documentation for this struct was generated from the following file: