OpenSceneGraph 3.6.5
UserDataContainer
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_USERDATACONTAINER
15#define OSG_USERDATACONTAINER 1
16
17#include <osg/Object>
18
19#include <string>
20#include <vector>
21
22namespace osg {
23
26{
27 public:
30
31 virtual bool isSameKindAs(const Object* obj) const { return dynamic_cast<const UserDataContainer*>(obj)!=0; }
32
36 virtual const char* libraryName() const { return "osg"; }
37
40 virtual const char* className() const { return "UserDataContainer"; }
41
44 virtual UserDataContainer* asUserDataContainer() { return this; }
45
48 virtual const UserDataContainer* asUserDataContainer() const { return this; }
49
56 virtual void setUserData(Referenced* obj) = 0;
57
59
61 virtual Referenced* getUserData() = 0;
62
64 virtual const Referenced* getUserData() const = 0;
65
67 virtual unsigned int addUserObject(Object* obj) = 0;
68
69 template<class T> unsigned int addUserObject(const osg::ref_ptr<T>& obj) { return addUserObject(obj.get()); }
70
72 virtual void setUserObject(unsigned int i, Object* obj) = 0;
73
75 virtual void removeUserObject(unsigned int i) = 0;
76
77
79 virtual Object* getUserObject(unsigned int i) = 0;
80
82 virtual const Object* getUserObject(unsigned int i) const = 0;
83
85 virtual unsigned int getNumUserObjects() const = 0;
86
88 virtual unsigned int getUserObjectIndex(const osg::Object* obj, unsigned int startPos=0) const = 0;
89
91 virtual unsigned int getUserObjectIndex(const std::string& name, unsigned int startPos=0) const = 0;
92
93
95 virtual Object* getUserObject(const std::string& name, unsigned int startPos=0);
96
98 virtual const Object* getUserObject(const std::string& name, unsigned int startPos=0) const;
99
100
101 typedef std::vector<std::string> DescriptionList;
102
104 virtual void setDescriptions(const DescriptionList& descriptions) = 0;
105
108
110 virtual const DescriptionList& getDescriptions() const = 0;
111
113 virtual unsigned int getNumDescriptions() const = 0;
114
116 virtual void addDescription(const std::string& desc) = 0;
117
118 protected:
120};
121
124{
125 public:
128
130
131
132 virtual void setThreadSafeRefUnref(bool threadSafe);
133
140 virtual void setUserData(Referenced* obj);
141
144
147
149 virtual const Referenced* getUserData() const;
150
152 virtual unsigned int addUserObject(Object* obj);
153
155 virtual void setUserObject(unsigned int i, Object* obj);
156
158 virtual void removeUserObject(unsigned int i);
159
160
162 virtual Object* getUserObject(unsigned int i);
163
165 virtual const Object* getUserObject(unsigned int i) const;
166
168 virtual unsigned int getNumUserObjects() const;
169
171 virtual unsigned int getUserObjectIndex(const osg::Object* obj, unsigned int startPos=0) const;
172
174 virtual unsigned int getUserObjectIndex(const std::string& name, unsigned int startPos=0) const;
175
176
177
178
180 virtual void setDescriptions(const DescriptionList& descriptions);
181
184
186 virtual const DescriptionList& getDescriptions() const;
187
189 virtual unsigned int getNumDescriptions() const;
190
192 virtual void addDescription(const std::string& desc);
193
194protected:
195
197
198 typedef std::vector< osg::ref_ptr<osg::Object> > ObjectList;
199
203};
204
205
207inline Object* getUserObject(osg::Object* object, const std::string& name)
208{
210 return udc ? udc->getUserObject(name) : 0;
211}
212
214inline const Object* getUserObject(const osg::Object* object, const std::string& name)
215{
216 const osg::UserDataContainer* udc = object->getUserDataContainer();
217 return udc ? udc->getUserObject(name) : 0;
218}
219
220}
221
222#endif
The core osg library provides the basic scene graph classes such as Nodes, State and Drawables,...
Definition AlphaFunc:19
Object * getUserObject(osg::Object *object, const std::string &name)
Convenience function for getting the User Object associated with specified name from an Object's User...
Definition UserDataContainer:207
Copy Op(erator) used to control whether shallow or deep copy is used during copy construction and clo...
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Base class/standard interface for objects which require IO support, cloning and reference counting.
Definition Object:61
Object()
Construct an object.
Definition Object:69
osg::UserDataContainer * getUserDataContainer()
get the UserDataContainer attached to this object.
Definition Object:243
virtual void setThreadSafeRefUnref(bool threadSafe)
Set whether to use a mutex to ensure ref() and unref() are thread safe.
virtual void setUserData(Referenced *obj)
Set user data, data must be subclassed from Referenced to allow automatic memory handling.
Smart pointer for handling referenced counted objects.
Definition ref_ptr:32
T * get() const
Definition ref_ptr:117
Base class for providing reference counted objects.
Definition Referenced:44
Internal structure for storing all user data.
Definition UserDataContainer:26
virtual UserDataContainer * asUserDataContainer()
Convert 'this' into a UserDataContainer pointer if Object is a UserDataContainer, otherwise return 0.
Definition UserDataContainer:44
virtual bool isSameKindAs(const Object *obj) const
Definition UserDataContainer:31
virtual void addDescription(const std::string &desc)=0
Add a description string.
virtual const Referenced * getUserData() const =0
Get const user data.
virtual unsigned int addUserObject(Object *obj)=0
Add user data object.
virtual const char * libraryName() const
return the name of the object's library.
Definition UserDataContainer:36
virtual DescriptionList & getDescriptions()=0
Get the description list.
virtual const char * className() const
return the name of the object's class type.
Definition UserDataContainer:40
virtual unsigned int getNumUserObjects() const =0
Get number of user objects assigned to this object.
virtual unsigned int getNumDescriptions() const =0
Get number of description strings.
UserDataContainer(const UserDataContainer &udc, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
std::vector< std::string > DescriptionList
Definition UserDataContainer:101
virtual unsigned int getUserObjectIndex(const osg::Object *obj, unsigned int startPos=0) const =0
Get the index position of specified user data object.
virtual const Object * getUserObject(const std::string &name, unsigned int startPos=0) const
Get first const user data object with specified name.
virtual const DescriptionList & getDescriptions() const =0
Get the const description list.
virtual Referenced * getUserData()=0
Get user data.
unsigned int addUserObject(const osg::ref_ptr< T > &obj)
Definition UserDataContainer:69
virtual const Object * getUserObject(unsigned int i) const =0
Get const user data object as specified index position.
virtual void setUserData(Referenced *obj)=0
Set user data, data must be subclassed from Referenced to allow automatic memory handling.
virtual ~UserDataContainer()
Definition UserDataContainer:119
virtual void removeUserObject(unsigned int i)=0
Remove element from the list of user data objects.
virtual Object * getUserObject(const std::string &name, unsigned int startPos=0)
Get first user data object with specified name.
virtual unsigned int getUserObjectIndex(const std::string &name, unsigned int startPos=0) const =0
Get the index position of first user data object that matches specified name.
virtual void setDescriptions(const DescriptionList &descriptions)=0
Set the list of string descriptions.
virtual void setUserObject(unsigned int i, Object *obj)=0
Add element to list of user data objects.
virtual const UserDataContainer * asUserDataContainer() const
convert 'const this' into a const UserDataContainer pointer if Object is a UserDataContainer,...
Definition UserDataContainer:48
virtual Object * getUserObject(unsigned int i)=0
Get user data object as specified index position.
virtual const Object * getUserObject(unsigned int i) const
Get const user data object as specified index position.
virtual unsigned int getUserObjectIndex(const std::string &name, unsigned int startPos=0) const
Get the index position of first user data object that matches specified name.
ObjectList _objectList
Definition UserDataContainer:202
virtual void setUserObject(unsigned int i, Object *obj)
Add element to list of user data objects.
ref_ptr< Referenced > _userData
Definition UserDataContainer:200
virtual void removeUserObject(unsigned int i)
Remove element from the list of user data objects.
virtual void setDescriptions(const DescriptionList &descriptions)
Set the list of string descriptions.
virtual unsigned int getUserObjectIndex(const osg::Object *obj, unsigned int startPos=0) const
Get the index position of specified user data object.
virtual const Referenced * getUserData() const
Get const user data.
virtual const DescriptionList & getDescriptions() const
Get the const description list.
virtual unsigned int addUserObject(Object *obj)
Add user data object.
virtual Object * getUserObject(unsigned int i)
Get user data object as specified index position.
virtual unsigned int getNumUserObjects() const
Get number of user objects assigned to this object.
virtual void setUserData(Referenced *obj)
Set user data, data must be subclassed from Referenced to allow automatic memory handling.
virtual void addDescription(const std::string &desc)
Add a description string.
virtual DescriptionList & getDescriptions()
Get the description list.
META_Object(osg, DefaultUserDataContainer) virtual void setThreadSafeRefUnref(bool threadSafe)
virtual unsigned int getNumDescriptions() const
Get number of description strings.
DefaultUserDataContainer(const DefaultUserDataContainer &udc, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
std::vector< osg::ref_ptr< osg::Object > > ObjectList
Definition UserDataContainer:198
DescriptionList _descriptionList
Definition UserDataContainer:201
virtual ~DefaultUserDataContainer()
Definition UserDataContainer:196
virtual Referenced * getUserData()
Get user data.
#define OSG_EXPORT
Definition Export:39

osg logo
Generated at Wed Jul 23 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.