From 77bd6cbfe93f168d8af95d5605a294bb4c246ec7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 5 Oct 2012 10:35:06 +0000 Subject: [PATCH] From Stephan Huber and Robert Osfield, addded interactive setting of the ImageSequence::seek() based on the mouse x position. --- .../osgimagesequence/osgimagesequence.cpp | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/examples/osgimagesequence/osgimagesequence.cpp b/examples/osgimagesequence/osgimagesequence.cpp index cb7f74802..d4c2a6eed 100644 --- a/examples/osgimagesequence/osgimagesequence.cpp +++ b/examples/osgimagesequence/osgimagesequence.cpp @@ -208,6 +208,32 @@ public: void set(osg::Node* node); + void setTrackMouse(bool tm) + { + if (tm==_trackMouse) return; + + _trackMouse = tm; + + std::cout << "tracking mouse: " << (_trackMouse ? "ON" : "OFF") << std::endl; + + for(ImageStreamList::iterator itr=_imageStreamList.begin(); + itr!=_imageStreamList.end(); + ++itr) + { + if ((*itr)->getStatus()==osg::ImageStream::PLAYING) + { + (*itr)->pause(); + } + else + { + (*itr)->play(); + } + } + + } + + bool getTrackMouse() const { return _trackMouse; } + virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object*, osg::NodeVisitor* nv); virtual void getUsage(osg::ApplicationUsage& usage) const; @@ -412,22 +438,7 @@ bool MovieEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAction } else if (ea.getKey() == 'i') { - _trackMouse = !_trackMouse; - std::cout << "tracking mouse: " << (_trackMouse ? "ON" : "OFF") << std::endl; - - for(ImageStreamList::iterator itr=_imageStreamList.begin(); - itr!=_imageStreamList.end(); - ++itr) - { - if ((*itr)->getStatus()==osg::ImageStream::PLAYING) - { - (*itr)->pause(); - } - else - { - (*itr)->play(); - } - } + setTrackMouse(!_trackMouse); } @@ -468,6 +479,9 @@ int main(int argc, char **argv) // pass the model to the MovieEventHandler so it can pick out ImageStream's to manipulate. MovieEventHandler* meh = new MovieEventHandler(); meh->set( viewer.getSceneData() ); + + if (arguments.read("--track-mouse")) meh->setTrackMouse(true); + viewer.addEventHandler( meh ); viewer.addEventHandler( new osgViewer::StatsHandler());