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
并非线程安全,多线程环境下需要进行同步控制。另外,用户在使用时需要自行管理数据的内存分配和释放。