diff --git a/include/osg/DeepCopy b/include/osg/DeepCopy index 9befac5f0..d5b535cff 100644 --- a/include/osg/DeepCopy +++ b/include/osg/DeepCopy @@ -38,15 +38,15 @@ struct DeepCopy : public Cloner // note can't clone a refernced object since it doens't have clone // method so we have to assume shallow copy and pass back the pointer. - virtual Referenced* operator() (const Referenced* ref) const { return ref; } + virtual Referenced* operator() (const Referenced* ref) const { return const_cast(ref); } - virtual Object* operator() (const Object* obj) const { if (obj && _flags&DEEP_COPY_OBJECTS) return obj->clone(*this); else return NULL; } - virtual Node* operator() (const Node* node) const { if (obj && _flags&DEEP_COPY_NODES) return node->clone(*this); } - virtual Drawable* operator() (const Drawable* drawable) const { if (drawable && _flags&DEEP_COPY_DRAWABLES) return drawable->clone(*this); } - virtual StateSet* operator() (const StateSet* stateset) const { if (stateset && _flags&DEEP_COPY_STATESETS) return stateset->clone(*this); } - virtual StateAttribute* operator() (const StateAttribute* attr) const { if (attr && _flags&DEEP_COPY_STATEATTRIBUTES) return attr->clone(*this); } - virtual Texture* operator() (const Texture* text) const { if (text && _flags&DEEP_COPY_TEXTURES) return text->clone(*this); } - virtual Image* operator() (const Image* image) const { if (image && _flags&DEEP_COPY_IMAGES) return image->clone(*this); } + virtual Object* operator() (const Object* obj) const { if (obj && _flags&DEEP_COPY_OBJECTS) return obj->clone(*this); else return const_cast(obj); } + virtual Node* operator() (const Node* node) const { if (node && _flags&DEEP_COPY_NODES) return dynamic_cast(node->clone(*this)); else return const_cast(node); } + virtual Drawable* operator() (const Drawable* drawable) const { if (drawable && _flags&DEEP_COPY_DRAWABLES) return dynamic_cast(drawable->clone(*this)); else return const_cast(drawable); } + virtual StateSet* operator() (const StateSet* stateset) const { if (stateset && _flags&DEEP_COPY_STATESETS) return dynamic_cast(stateset->clone(*this)); else return const_cast(stateset); } + virtual StateAttribute* operator() (const StateAttribute* attr) const { if (attr && _flags&DEEP_COPY_STATEATTRIBUTES) return dynamic_cast(attr->clone(*this)); else return const_cast(attr); } + virtual Texture* operator() (const Texture* text) const { if (text && _flags&DEEP_COPY_TEXTURES) return dynamic_cast(text->clone(*this)); else return const_cast(text); } + virtual Image* operator() (const Image* image) const { if (image && _flags&DEEP_COPY_IMAGES) return dynamic_cast(image->clone(*this)); else return const_cast(image); } protected: