From 3e32d9c8af751ec58c126198fe9281270dfbd757 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 30 Nov 2012 20:03:31 +0000 Subject: [PATCH] Fixed crash when no CameraManipulator is assigned to the viewer --- src/osgPlugins/p3d/ReaderWriterP3D.cpp | 9 ++++-- src/osgPresentation/SlideEventHandler.cpp | 38 +++++++++++++---------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/osgPlugins/p3d/ReaderWriterP3D.cpp b/src/osgPlugins/p3d/ReaderWriterP3D.cpp index 386bd5ca7..bb08cdb17 100644 --- a/src/osgPlugins/p3d/ReaderWriterP3D.cpp +++ b/src/osgPlugins/p3d/ReaderWriterP3D.cpp @@ -402,19 +402,20 @@ bool ReaderWriterP3DXML::getKeyProperty(osgDB::XmlNode*cur, const char* token, i { std::istringstream iss(itr->second); iss>>std::hex>>value; + OSG_NOTICE<<"ReaderWriterP3DXML::getKeyProperty() hex result = "<second.size()>1 && (itr->second[0]>='0' && itr->second[0]<='9')) { std::istringstream iss(itr->second); iss>>value; - OSG_NOTICE<<" numeric result = "<name == "newline") diff --git a/src/osgPresentation/SlideEventHandler.cpp b/src/osgPresentation/SlideEventHandler.cpp index dd8aeddb4..882538d9f 100644 --- a/src/osgPresentation/SlideEventHandler.cpp +++ b/src/osgPresentation/SlideEventHandler.cpp @@ -1244,10 +1244,13 @@ bool SlideEventHandler::selectSlide(int slideNum,int layerNum) // refersh the viewer. //_viewer->getKeySwitchMatrixManipulator()->setMinimumDistance(0.001); - _viewer->getCameraManipulator()->setNode(_slideSwitch.get()); - - _viewer->computeActiveCoordinateSystemNodePath(); + if (_viewer->getCameraManipulator()) + { + _viewer->getCameraManipulator()->setNode(_slideSwitch.get()); + _viewer->computeActiveCoordinateSystemNodePath(); + } + // resetUpdateCallbacks(ALL_OBJECTS); bool _useSlideFilePaths = false; @@ -1387,22 +1390,25 @@ bool SlideEventHandler::home(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAd osg::Node* node = _viewer->getSceneData(); if (node) node->accept(fhpv); - if (fhpv._homePosition.valid()) + if (_viewer->getCameraManipulator()) { - OSG_INFO<<"Doing home for stored home position."<getCameraManipulator()->setAutoComputeHomePosition(false); - _viewer->getCameraManipulator()->setHomePosition( - fhpv._homePosition->eye, - fhpv._homePosition->center, - fhpv._homePosition->up); + _viewer->getCameraManipulator()->setAutoComputeHomePosition(false); + _viewer->getCameraManipulator()->setHomePosition( + fhpv._homePosition->eye, + fhpv._homePosition->center, + fhpv._homePosition->up); + } + else + { + _viewer->getCameraManipulator()->setAutoComputeHomePosition(true); + } + _viewer->getCameraManipulator()->home(ea,aa); } - else - { - _viewer->getCameraManipulator()->setAutoComputeHomePosition(true); - } - _viewer->getCameraManipulator()->home(ea,aa); - + return true; }