diff --git a/include/osgDB/PropertyInterface b/include/osgDB/PropertyInterface index 3dc61a323..34ce1b6f2 100644 --- a/include/osgDB/PropertyInterface +++ b/include/osgDB/PropertyInterface @@ -126,6 +126,10 @@ public: bool areTypesCompatible(osgDB::BaseSerializer::Type lhs, osgDB::BaseSerializer::Type rhs) const; + /** create an object of specified type for provided compound class name in the form libraryName::className. */ + osg::Object* createObject(const std::string& compounClassdName) const; + + /// template method for getting property data, return true if property available and the type is compatible, otherwise returns false. template bool getProperty(const osg::Object* object, const std::string& propertyName, T& value); @@ -212,4 +216,4 @@ bool PropertyInterface::setProperty(osg::Object* object, const std::string& prop } -#endif \ No newline at end of file +#endif diff --git a/src/osgDB/PropertyInterface.cpp b/src/osgDB/PropertyInterface.cpp index 1ddfb43f9..96fd0945c 100644 --- a/src/osgDB/PropertyInterface.cpp +++ b/src/osgDB/PropertyInterface.cpp @@ -282,6 +282,12 @@ osgDB::BaseSerializer* PropertyInterface::getSerializer(const osg::Object* objec return ow ? ow->getSerializer(propertyName, type) : 0; } +osg::Object* PropertyInterface::createObject(const std::string& compoundClassName) const +{ + osgDB::ObjectWrapper* ow = osgDB::Registry::instance()->getObjectWrapperManager()->findWrapper(compoundClassName); + return (ow!=0) ? ow->createInstance() : 0; +} + bool PropertyInterface::copyPropertyDataFromObject(const osg::Object* object, const std::string& propertyName, void* valuePtr, unsigned int valueSize, osgDB::BaseSerializer::Type valueType) { _poi->flush();