Sajjad, Although you refer to Brian's message, I would like to explain what he meant briefly.
dynamic_cast<T> allows casting both down and up in inheritance hierarchy. If object's dynamic type isn't Switch, then you cannot cast a Group pointer to Switch with dynamic cast. That is: osg::Group* pGroup1 = new osg::Group; osg::Group* pGroup2 = new osg::Switch; osg::Switch* pSwitch1 = dynamic_cast<osg::Switch*>(pGroup1); osg::Switch* pSwitch2 = dynamic_cast<osg::Switch*>(pGroup2); pSwitch1 will evaluate to NULL, as pGroup1 is a Group. pSwitch2 will evaluate a valid Switch object, as its dynamic type is osg::Switch. Nevertheless, if you already have instantiated your object as a Switch, then you can use dynamic_cast. If you are really sure that your object is a Switch, you can use static_cast as well. Ismail On Thu, Apr 9, 2009 at 7:32 PM, ami guru <dosto.wa...@gmail.com> wrote: > Hello Brian, > > > I did not understand why down-casting is not possible. Super class can be > downcasted to a concrete class through dynamic cast, > isnt it? > > > I am afraid that the discussion is getting a bit off -topic now. > > Sajjad > > On Thu, Apr 9, 2009 at 3:43 PM, Brian R Hill <bhil...@csc.com> wrote: >> >> Sajjad, >> >> You can't cast a group to a switch if it wasn't created as a switch. >> >> osg::ref_ptr<osg::Group> groupOfLights; >> >> This will always fail and return 0. >> osg::Switch * your_switch = dynamic_cast<osg::Switch *>(groupOfLights.get >> ()); >> >> You need to create your groupOfLights as a switch. >> >> osg::ref_ptr<osg::Switch> groupOfLights; >> >> Since a switch is a groud, you can use it as both a group and a switch. >> >> Also, using dynamic_cast isn't bad. There are situations where it might >> not >> be optimal. But for your intended use - key press events - it's absolutley >> acceptable. >> >> Brian >> >> >> This is a PRIVATE message. If you are not the intended recipient, please >> delete without copying and kindly advise us by e-mail of the mistake in >> delivery. >> NOTE: Regardless of content, this e-mail shall not operate to bind CSC to >> any order or other contract unless pursuant to explicit written agreement >> or government initiative expressly permitting the use of e-mail for such >> purpose. • >> >> >> -----osg-users-boun...@lists.openscenegraph.org wrote: ----- >> >> >> To: OpenSceneGraph Users <osg-users@lists.openscenegraph.org> >> From: René Molenaar <megamillerz...@gmail.com> >> Sent by: osg-users-boun...@lists.openscenegraph.org >> Date: 04/09/2009 09:28AM >> Subject: Re: [osg-users] Light Manager >> >> Hi Sajjad, >> >> >> There are asType functions is osg::Node, >> this has better performance then dynamic_cast ... >> >> for example you can do: >> >> osg::ref_ptr<osg::Switch> switch = group->asSwitch(); >> >> Now you are using a virtual table to get the right type: >> >> if the object is a Switch you will get the this-pointer of the Switch >> if it is not you will get 0. >> >> Usually there are always better ways then dynamic_cast, especially >> if you are the owner of the code. >> >> Good Luck, >> >> Rene >> >> >> >> >> 2009/4/9 ami guru < dosto.wa...@gmail.com > >> >> Hello Forum, >> >> >> I have a LightManager class that tracks the number of lights(OpenGL >> Lights) >> that have been created. >> >> Inside the class the have the following member >> >> >> osg::ref_ptr<osg::Group> groupOfLights; >> vector<osg::ref_ptr<osg::LightSource> > lights; >> >> the member groupOfLights contain the LightSource as child. >> >> >> In the application i want to select different light (spot,point or >> diffuse) >> with key press event and only one light is enabled during an instant OR i >> may enable several lights. >> >> >> In that case i believe that i have to do dynamic casting to cast Group to >> Switch. >> >> In other better way to do that ? >> >> >> >> Regards >> Sajjad >> >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> >> >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org