Hi all,

FYI, I don't know if it's exactly the same (I admit I didn't read the entire 
thread), but we've discussed about an aggregation of "components" in osg 
classes (see "Suggestion: Add components in nodes (aggregation)" thread).
Sorry I don't have much time going deeper, but the idea seems interesting.
Cheers,

Sukender
PVLE - Lightweight cross-platform game engine - http://pvle.sourceforge.net/

----- "Robert Osfield" <[email protected]> a écrit :

> Hi Ulrich,
> 
> Guten Rutsch ;-)
> 
> I've done a quick read of you proposal and it sounds good.  For
> convenience perhaps adding a getIntProperty(), getFloatProperty()
> etc.
> methods might be appropriate, or perhaps one could use the bool
> getProperty(const std::string&, Property) interface that I adopted in
> osg::ArgumentParser, where Property is a temporary helper object.
> 
> Robert.
> 
> On Thu, Dec 31, 2009 at 11:22 AM, Ulrich Hertlein
> <[email protected]> wrote:
> > Hi guys,
> >
> > I have coded up a proposal for a general-purpose property system for
> osg::Object and would
> > like to present it for comments and discussion.
> >
> > Properties must be derived from osg::Referenced and are stored in a
> map by name:
> >
> > class PropertyMap : public Referenced, public std::map<std::string,
> ref_ptr<Referenced> >
> >
> > - osg::Object has a 'osg::ref_ptr<osg::PropertyMap> _properties'
> > - this is only valid if there are any properties stored, so consumes
> minimal memory.
> > - the properties map is created when a property is first added.
> > - for now it's never deleted but an explicit call for that could be
> added; it could also
> > be deleted when the map becomes empty.
> >
> > - user data is stored/retrieved under the 'osg.data' name.  The API
> is unchanged.
> > - descriptions are stored/retrieved under the 'osg.desc' name.  The
> API is unchanged.
> > - 'osg::Object _userData' and 'osg::Node _descriptions' are
> removed.
> >
> > The general osg::Object API for properties is:
> > - void setProperty(const std::string& name, Referenced* prop);
> > - void clearProperty(name);
> > - const Referenced* getProperty(name) const;
> > - Referenced* getProperty(name);
> >
> >
> > For data that is not derived from osg::Referenced (like floats, int,
> strings) instead of
> > using a variant class I've created the following template class:
> >
> > template <typename T> class Property : public Referenced {
> > public:
> >    //...
> >    void set(const T& data) { _data = data; }
> >    const T& get() const { return _data; }
> >    T& get() { return _data; }
> >
> > private:
> >    T _data;
> > };
> >
> > Data is stored like this:
> > osg::Property<int>* ip = new osg::Property<int>(42);
> > obj->setProperty("my.int", ip);
> >
> > and retrieved like this:
> > osg::Property<int>* ip0 = dynamic_cast<osg::Property<int>
> >(obj->getProperty("my.int"));
> > ip0->get() == 42;
> >
> >
> > For convenience I've created template versions in osg::Object so
> that one can write:
> >
> > obj->setProperty<int>("my.int", 42); // creates and stores
> Property<int>(42)
> > obj->getProperty<int>("my.int")->get() == 42;
> > (int) (*obj->getProperty<int>("my.int")) == 42;
> >
> >
> > With this the osg::Node description is simply stored as a
> > osg::Property<osg::Node::DescriptionList> as 'osg.desc' with
> wrappers to keep the original
> > API:
> >
> > const DescriptionList& getDescriptions() const {
> >   return getOrCreateProperty<DescriptionList>("osg.desc")->get();
> > }
> >
> > const std::string& getDescription(unsigned int i) const {
> >   return
> getOrCreateProperty<DescriptionList>("osg.desc")->get()[i];
> > }
> >
> >
> > At the moment there are some missing bits like saving the entire
> properties map (not only
> > userdata/descriptions) and the copyop integration, and also some
> ugly parts, for example
> > the _properties is mutable so that I could keep the existing
> Descriptions API.
> >
> >
> > I'm eagerly awaiting your thoughts and comments.
> > Happy New Year everyone and 'Guten Rutsch' (as we say in Germany).
> >
> > Cheers,
> > /ulrich
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to