Added asUpdate/Cull/EventVisitor and asCamera/asDrawable to osg::Object and usage of these within the code base to avoid dynamic_cast<> usage.

This commit is contained in:
Robert Osfield
2016-01-20 17:49:10 +00:00
parent 2e7cfe7efa
commit 8fc287c1b7
37 changed files with 118 additions and 63 deletions

View File

@@ -916,7 +916,8 @@ void CompositeViewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event,
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
osg::Camera* camera = (source_event.getNumPointerData()>=2) ? dynamic_cast<osg::Camera*>(source_event.getPointerData(1)->object.get()) : 0;
osg::Object* object = (source_event.getNumPointerData()>=2) ? source_event.getPointerData(1)->object.get() : 0;
osg::Camera* camera = object ? object->asCamera() : 0;
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
if (!viewport) return;
@@ -1030,7 +1031,8 @@ void CompositeViewer::eventTraversal()
}
osgGA::PointerData* pd = event->getNumPointerData()>0 ? event->getPointerData(event->getNumPointerData()-1) : 0;
osg::Camera* camera = pd ? dynamic_cast<osg::Camera*>(pd->object.get()) : 0;
osg::Object* object = pd ? pd->object.get() : 0;
osg::Camera* camera = object ? object->asCamera() : 0;
osgViewer::View* view = camera ? dynamic_cast<osgViewer::View*>(camera->getView()) : 0;
if (!view)

View File

@@ -118,7 +118,7 @@ struct KeystoneUpdateCallback : public osg::DrawableUpdateCallback
/** do customized update code.*/
virtual void update(osg::NodeVisitor*, osg::Drawable* drawable)
{
update(dynamic_cast<osg::Geometry*>(drawable));
update(drawable->asGeometry());
}
void update(osg::Geometry* geometry)
@@ -418,8 +418,8 @@ osg::Vec2d KeystoneHandler::incrementScale(const osgGA::GUIEventAdapter& ea) con
bool KeystoneHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& /*aa*/, osg::Object* obj, osg::NodeVisitor* /*nv*/)
{
osg::Camera* camera = dynamic_cast<osg::Camera*>(obj);
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
osg::Camera* camera = obj ? obj->asCamera() : 0;
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
if (!viewport) return false;

View File

@@ -908,7 +908,7 @@ void Renderer::operator () (osg::Object* object)
osg::GraphicsContext* context = dynamic_cast<osg::GraphicsContext*>(object);
if (context) operator()(context);
osg::Camera* camera = dynamic_cast<osg::Camera*>(object);
osg::Camera* camera =object->asCamera();
if (camera) cull();
}

View File

@@ -1014,7 +1014,7 @@ bool View::computeIntersections(const osgGA::GUIEventAdapter& ea, osgUtil::LineS
if (ea.getNumPointerData()>=1)
{
const osgGA::PointerData* pd = ea.getPointerData(ea.getNumPointerData()-1);
const osg::Camera* camera = dynamic_cast<const osg::Camera*>(pd->object.get());
const osg::Camera* camera = pd->object.valid() ? pd->object->asCamera() : 0;
if (camera)
{
return computeIntersections(camera, osgUtil::Intersector::PROJECTION, pd->getXnormalized(), pd->getYnormalized(), intersections, traversalMask);
@@ -1030,7 +1030,7 @@ bool View::computeIntersections(const osgGA::GUIEventAdapter& ea, const osg::Nod
if (ea.getNumPointerData()>=1)
{
const osgGA::PointerData* pd = ea.getPointerData(ea.getNumPointerData()-1);
const osg::Camera* camera = dynamic_cast<const osg::Camera*>(pd->object.get());
const osg::Camera* camera = pd->object.valid() ? pd->object->asCamera() : 0;
if (camera)
{
return computeIntersections(camera, osgUtil::Intersector::PROJECTION, pd->getXnormalized(), pd->getYnormalized(), nodePath, intersections, traversalMask);

View File

@@ -849,7 +849,8 @@ void Viewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event, osgGA::G
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
osg::Camera* camera = (source_event.getNumPointerData()>=2) ? dynamic_cast<osg::Camera*>(source_event.getPointerData(1)->object.get()) : 0;
osg::Object* object = (source_event.getNumPointerData()>=2) ? source_event.getPointerData(1)->object.get() : 0;
osg::Camera* camera = object ? object->asCamera() : 0;
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
if (!viewport) return;