Hi Ulrich,<br> I don't think you get the trick, from what you said, the only thing wrong is the ShapeDrawable. <br> I will post a new issue in a short while which is not different from this post and you will see that even without using ShapeDrawable objects, the same issue still hang around.<br> Just bear with me.<br> Thanks for your help.<br> Franclin.<br><br><b><i>Ulrich Hertlein <u.hertlein@sandbox.de></i></b> a écrit :<blockquote class="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"> Hi Franclin,<br><br>> Downcasting from a derived class to a parent class is possible with the <br>> dynamic_cast operator. From what you have written in your mail, it looks like<br>> the snippet won't compile at all, I can bet something it will as I tried it a<br>> couple of hours ago. Try it yourself and let me know.<br><br>The code is correct and will compile, it's just that the casts won't work
 as you <br>expect.<br><br>Okay, let's see:<br>>> osg::Geode myGeode = new osg::Geode;<br>>> myGeode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(),1,1,1)));<br>>> osg::Drawable* myDrawable = myGeode->getDrawable(0);<br><br>myDrawable is a Drawable* to a ShapeDrawable<br>This is fine since Drawable is a base class of ShapeDrawable.<br>(I assume there aren't any other Drawables in myGeode and the first one is <br>actually the ShapeDrawable you added.)<br><br>> osg::Geometry* myGeom = myDrawable->asGeometry();<br><br>If you take a look at 'osg::Drawable' you'll see that this actually *always* <br>returns 0 and ShapeDrawable doesn't override it (Geometry is the only class that <br>overrides it).<br><br>However, even doing what the comment says (and what you're doing for 'myGeom2'):<br><br>osg::Geometry* geom = dynamic_cast<osg::geometry*>(this)<br><br>This cannot succeed since the *object* is-a ShapeDrawable (even though the
 <br>pointer is Drawable*).<br><br>> Of course, downcasting from shapedrawable to geometry would have not worked<br>> and even worse would have not compiled at all.<br><br>Agreed.  But introducing a Drawable* doesn't help because it doesn't change the <br>type of the object the pointer is pointing to.<br><br>ShapeDrawable* shape = new ShapeDrawable(...)<br>Drawable* drawable = dynamic_cast<drawable*>(shape); // OK, is a base class<br>Geometry* geom = dynamic_cast<geometry*>(drawable); // is always 0<br><br>I'm probably not explaining this as clearly as possible but try to think of it <br>this way: you have a base class 'Vehicle' and two derived classes 'Car' and <br>'Plane'.  You can create a 'Plane' and have a 'Vehicle' pointer to it but you <br>can't cast that pointer to a 'Car'.<br><br>Hope this helps.<br><br>Cheers,<br>/ulrich<br><br>_______________________________________________<br>osg-users mailing
 list<br>osg-users@lists.openscenegraph.org<br>http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org<br></geometry*></drawable*></osg::geometry*></blockquote><br><p>


      <hr size="1"> 
Envoyé avec <a href="http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52423/*http://fr.docs.yahoo.com/mail/overview/index.html">Yahoo! Mail</a>.<br>Une boite mail plus intelligente. </a>