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; } }