osg.DefaultUserDataContainer是OpenSceneGraph中的一个组件,用于存储场景图节点的用户自定义数据。用户可以通过它来存储任意类型的数据,并在场景图节点中传递和获取这些数据。
DefaultUserDataContainer():构造函数,创建一个默认的用户数据容器。
DefaultUserDataContainer(const DefaultUserDataContainer& rhs, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY):拷贝构造函数,根据已有的容器创建一个新的容器。
virtual ~DefaultUserDataContainer():析构函数,销毁用户数据容器。
void addDescription(const std::string& desc):添加用户数据的描述信息。对于不同类型的数据,我们可以添加不同的描述信息来标识它们。
void setDescription(unsigned int index, const std::string& desc):修改描述信息。
void removeDescription(unsigned int index):删除指定索引位置上的描述信息。
unsigned int getNumDescriptions() const:获取描述信息的个数。
std::string getDescription(unsigned int index) const:获取指定索引位置上的描述信息。
void addData(osg::Referenced* obj, unsigned int attributeID):向容器中添加数据。其中,obj是需要存储的数据,attributeID是数据对应的索引值,可以理解为数据的“关键字”。
void setData(osg::Referenced* obj, unsigned int attributeID):修改已有的数据。
void removeData(unsigned int attributeID):根据索引值,从容器中删除指定的数据。
osg::Referenced* getAttribute(unsigned int attributeID) const:根据指定的索引值,获取容器中对应的数据。
template<typename T> T* getUserData(unsigned int attributeID) const:模板函数,根据指定的索引值,获取容器中对应类型的数据。
unsigned int getAttributeIndex(osg::Referenced* obj) const:获取指定数据在容器中的索引值。
创建一个用户数据容器
osg::ref_ptr<osg::DefaultUserDataContainer> userDataContainer = new osg::DefaultUserDataContainer;
向容器中添加描述信息和用户数据
userDataContainer->addDescription("My Description");
osg::ref_ptr<osg::Vec3Array> myVecData = new osg::Vec3Array;
userDataContainer->addData(myVecData.get(), 0);
获取容器中的数据
osg::ref_ptr<osg::Vec3Array> myVecResult = userDataContainer->getUserData<osg::Vec3Array>(0);
修改容器中的数据
osg::ref_ptr<osg::Vec3Array> myVecDataNew = new osg::Vec3Array;
userDataContainer->setData(myVecDataNew.get(), 0);
删除容器中的数据
userDataContainer->removeData(0);
DefaultUserDataContainer并非线程安全,多线程环境下需要进行同步控制。另外,用户在使用时需要自行管理数据的内存分配和释放。