From 8bbbea127410999a90fab1dd63c26873759e8835 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 11 Feb 2014 18:18:48 +0000 Subject: [PATCH] Fixed handling of assignment of User Object's that replace existing Object with the specified propertyName. --- include/osgDB/PropertyInterface | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/include/osgDB/PropertyInterface b/include/osgDB/PropertyInterface index 3d5548dac..d2c7e8441 100644 --- a/include/osgDB/PropertyInterface +++ b/include/osgDB/PropertyInterface @@ -272,11 +272,24 @@ inline bool PropertyInterface::setProperty(osg::Object* object, const std::strin if (copyPropertyObjectToObject(object, propertyName, &value, sizeof(ObjectPtr), getTypeEnum())) return true; else { - OSG_NOTICE<<"PropertyInterface::setProperty("<className()<<") Adding object to UserDataContainer"<getOrCreateUserDataContainer(); - value->setName(propertyName); - udc->addUserObject(value); + unsigned int objectIndex = udc->getUserObjectIndex(propertyName); + if (objectIndex < udc->getNumUserObjects()) + { + const osg::Object* outgoingObject = udc->getUserObject(objectIndex); + if (outgoingObject==value) return true; + + OSG_NOTICE<<"PropertyInterface::setProperty("<className()<<") replace object on UserDataContainer"<setName(propertyName); + udc->setUserObject(objectIndex, value); + } + else + { + OSG_NOTICE<<"PropertyInterface::setProperty("<className()<<") Adding object to UserDataContainer"<setName(propertyName); + udc->addUserObject(value); + } return true; } }