Unfortunately, that's just a limitation of the visitor pattern and
double dispatch in general. In order to accomplish what you want, you'd
have to overload apply(osg::Group) forward the call explicitly.
Something like:
MyVisitor::apply(osg::Group& grp)
{
if( dynamic_cast<osg::MyGroup*>(&grp) )
apply( static_cast<osg::MyGroup&>(grp) );
else
/* general osg::Group handling */
}
This visitor calls node->accept(*this), which turns around and calls
visitor->apply(*this). However, in node::accept, the visitor used of
type osg::NodeVisitor, the highest abstraction. Unless osg::NodeVisitor
has an apply overload that takes the type you want, then it won't get
called. Your apply(osg::MyGroup) isn't in NodeVisitor's vtable, which
is why it's not called.
I hope that helps.
Chase
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:osg-users-
> [EMAIL PROTECTED] On Behalf Of Stephane Lamoliatte
> Sent: Wednesday, December 19, 2007 9:32 AM
> To: OpenSceneGraph Users
> Subject: [osg-users] How to visit a custom node ?
>
> Hello,
>
> I created a new node, MyGroup, which extends osg::Group.
> I want to visit it in the scene graph with a NodeVisitor. So, I wrote
> MyNodeVisitor which extends osg::NodeVisitor. MyVisitor contains an
> apply function which takes MyGroup in parameter :
> MyVisitor::apply(osg::MyGroup &).
>
> The problem is that this function is never called : The application
call
> MyVisitor::apply(osg::Group&) instead.
>
> Does somebdy know why ?
>
> Thanks in advance.
> --
> Stephane.
>
> _______________________________________________
> osg-users mailing list
> [email protected]
>
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
g
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org