Refactored the UserDataContainer so that the osg::UserDataContainer is now a pure virtual base class,
with a osg::DefaultUserDataContainer subclassed from this. The user object access methods have now all been moved from osg::Object into the UserDataContainer class, except for the set/getUserData() methods that are left in osg::Object for backwards compatibility, and the description list access methods have been moved back into osg::Node. main UserObject access methods are now all def
This commit is contained in:
@@ -32,25 +32,25 @@ namespace MyNamespace
|
||||
{
|
||||
|
||||
/** Provide an simple example of customizing the default UserDataContainer.*/
|
||||
class MyUserDataContainer : public osg::UserDataContainer
|
||||
class MyUserDataContainer : public osg::DefaultUserDataContainer
|
||||
{
|
||||
public:
|
||||
MyUserDataContainer() {}
|
||||
MyUserDataContainer(const MyUserDataContainer& udc, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY):
|
||||
UserDataContainer(udc, copyop) {}
|
||||
DefaultUserDataContainer(udc, copyop) {}
|
||||
|
||||
META_Object(MyNamespace, MyUserDataContainer)
|
||||
|
||||
virtual Object* getUserObject(unsigned int i)
|
||||
{
|
||||
OSG_NOTICE<<"MyUserDataContainer::getUserObject("<<i<<")"<<std::endl;
|
||||
return osg::UserDataContainer::getUserObject(i);
|
||||
return osg::DefaultUserDataContainer::getUserObject(i);
|
||||
}
|
||||
|
||||
virtual const Object* getUserObject(unsigned int i) const
|
||||
{
|
||||
OSG_NOTICE<<"MyUserDataContainer::getUserObject("<<i<<") const"<<std::endl;
|
||||
return osg::UserDataContainer::getUserObject(i);
|
||||
return osg::DefaultUserDataContainer::getUserObject(i);
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ class MyUserDataContainer : public osg::UserDataContainer
|
||||
REGISTER_OBJECT_WRAPPER( MyUserDataContainer,
|
||||
new MyNamespace::MyUserDataContainer,
|
||||
MyNamespace::MyUserDataContainer,
|
||||
"osg::Object osg::UserDataContainer MyNamespace::MyUserDataContainer" )
|
||||
"osg::Object osg::UserDataContainer osg::DefaultUserDataContainer MyNamespace::MyUserDataContainer" )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -160,17 +160,21 @@ void testResults(osg::Node* node)
|
||||
OSG_NOTICE<<"Height not found"<<std::endl;
|
||||
}
|
||||
|
||||
OSG_NOTICE<<"node->getNumUserObjects()="<<node->getNumUserObjects()<<std::endl;
|
||||
for(unsigned int i=0; i<node->getNumUserObjects(); ++i)
|
||||
osg::UserDataContainer* udc = node->getUserDataContainer();
|
||||
if (udc)
|
||||
{
|
||||
MyGetValueVisitor mgvv;
|
||||
osg::Object* userObject = node->getUserObject(i);
|
||||
osg::ValueObject* valueObject = dynamic_cast<osg::ValueObject*>(userObject);
|
||||
OSG_NOTICE<<"userObject="<<userObject<<", className="<<userObject->className()<<", getName()="<<userObject->getName()<<" valueObject="<<valueObject<<" getNumeric "<<getNumeric<float>(userObject)<<" ";
|
||||
if (valueObject) valueObject->get(mgvv);
|
||||
OSG_NOTICE<<std::endl;
|
||||
OSG_NOTICE<<"udc->getNumUserObjects()="<<udc->getNumUserObjects()<<std::endl;
|
||||
for(unsigned int i=0; i<udc->getNumUserObjects(); ++i)
|
||||
{
|
||||
MyGetValueVisitor mgvv;
|
||||
osg::Object* userObject = udc->getUserObject(i);
|
||||
osg::ValueObject* valueObject = dynamic_cast<osg::ValueObject*>(userObject);
|
||||
OSG_NOTICE<<"userObject="<<userObject<<", className="<<userObject->className()<<", getName()="<<userObject->getName()<<" valueObject="<<valueObject<<" getNumeric "<<getNumeric<float>(userObject)<<" ";
|
||||
if (valueObject) valueObject->get(mgvv);
|
||||
OSG_NOTICE<<std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OSG_NOTICE<<std::endl<<std::endl;
|
||||
}
|
||||
|
||||
@@ -196,7 +200,7 @@ int main(int argc, char** argv)
|
||||
|
||||
osg::ref_ptr<osg::Drawable> drawable = new osg::Geometry;
|
||||
drawable->setName("myDrawable");
|
||||
node->addUserObject(drawable.get());
|
||||
node->getOrCreateUserDataContainer()->addUserObject(drawable.get());
|
||||
|
||||
node->setUserValue("fred",12);
|
||||
node->setUserValue("john",1.1);
|
||||
|
||||
Reference in New Issue
Block a user