Hi JSG,

Nick

http://www.linkedin.com/in/tnikolov
Sent from Gümüşsuyu, İstanbul, Turkey

On Mon, Dec 7, 2009 at 6:02 AM, Jean-Sébastien Guay <
[email protected]> wrote:

> Hello Trajce,
>
>
>     I have osg file and I am doing traversal to get nodes with given
>>    name. In the osg file, I see the Geode with the name, however the
>>    visitor never gets there
>>
>
> [...]
>
>
>     virtual void apply(osg::Group& node)
>>    {
>>    for (unsigned int i=0; i<node.getNumChildren(); ++i)
>>    {
>>    traverse(*node.getChild(i));
>>    }
>>    }
>>
>
> Well first of all, you don't need this, the osg::NodeVisitor base class
> version of apply(osg::Group&) will traverse all children of a group already.
>
>

yea ... I was doing couple of testings so I put the other sample



>
>     virtual void apply(osg::Geode& node)
>>    {
>>      osg::Node::DescriptionList& dl = node.getDescriptions();
>>      osg::Node::DescriptionList::iterator itr = dl.begin();
>>      for (; itr != dl.end(); ++itr)
>>      {
>>        if (itr->find_first_of("#MIRROR") != std::string::npos)
>>        {
>>          std::cout << "Never gets here !" << std::endl;
>>        }
>>      }
>>      traverse(node);
>>    }
>>
>
> Here, you're not checking the node's name, you're checking its description
> list... In addition, find_first_of doesn't do what you think it does. It
> finds the first occurence of *any* of the characters in the string you pass
> (so the first occurence of either '#' 'M' 'I'...). Try this instead:
>
>
>     virtual void apply(osg::Geode& node)
>     {
>       if (node.getName().find("#MIRROR") != std::string::npos)
>       {
>         std::cout << "Should get here if one of the Geodes' name has
> #MIRROR in it" << std::endl;
>       }
>       traverse(node);
>     }
>
> std::string::find returns the first occurrence of the argument within the
> string object you call it on, or std::string::npos if not found.
>
>
good hint ... Thanks !


> Also note that you're only checking Geodes here... If you want to find any
> node that has #MIRROR in its name, you might want to override the
> apply(osg::Node& node), which will be called for all types of nodes (as long
> as you don't override other versions of apply() ).
>
> And a little tip I imagine you know, but just in case: you can write your
> scene graph to a .osg file (either with osgDB::writeNodeFile() in code or
> with osgconv on the command line) and then inspect it with a text editor to
> make sure one of the nodes really has #MIRROR in its name.
>

That is what I am doing to check the scenegraph.


Its been quite a while since I used OSG and just need time to get a hand of
it again. Forgot many things ... But I learn fast ;-)

Thanks a gain for the support



>
> Hope this helps,
>
> J-S
> --
> ______________________________________________________
> Jean-Sebastien Guay    [email protected]
>                               http://www.cm-labs.com/
>                        http://whitestar02.webhop.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