HDK
|
Points, primitives, and vertices all can have custom attributes assigned to them. These attributes are accessed by name and are the same for all entities in a class. For example, if one point has a Cd attribute, all points will have the Cd attribute.
One special class of attribute is the Detail attribute. There is only one copy of a detail attribute per GU_Detail (hence the name) so is useful for storing global detail for that geometry.
While attributes are uniform within a GU_Detail, separate GU_Details can have different attributes of different types.
To simplify the handling of attributes the GEO_AttributeHandle class should be used to bind references to attributes. The GEO_Detail::getPointAttribute, GEO_Detail::getPrimAttribute, GEO_Detail::getVertexAttribute, and GEO_Detail::getDetailAttribute methods can be used to look up an attribute by name on a GU_Detail.
Creation of attributes is done with the GEO_Detail::addAttrib, GEO_Detail::addPointAttrib, GEO_Detail::addPrimAttrib, GEO_Detail::addVertexAttrib methods. Note these methods take the size of the attribute in bytes!
You may see code which uses the GA_GBElement::castAttribData method. This is deprecated and should be avoided, the GEO_AttributeHandle approach being preferred (see getsetAttributes, handleAccessAttributes).
An example on creating and modifying point attributes is found in SOP/SOP_TimeCompare.C and SOP/SOP_TimeCompare.h.
An example on creating a detail attribute is found in SOP/SOP_DetailAttrib.C and SOP/SOP_DetailAttrib.h.