From ff40db5b5d3761ecfba35f76eed2675a9ac2ed4d 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 386bd5ca7e7..bb08cdb17f3 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 dd8aeddb481..882538d9f45 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); - } - else - { - _viewer->getCameraManipulator()->setAutoComputeHomePosition(true); + _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); } - _viewer->getCameraManipulator()->home(ea,aa); - + return true; }