Re-instated the code to allow event handler to run in standard viewers like osgviewer
This commit is contained in:
@@ -1561,11 +1561,14 @@ osgDB::ReaderWriter::ReadResult ReaderWriterP3DXML::readNode(const std::string&
|
||||
|
||||
|
||||
osgDB::getDataFilePathList() = previousPaths;
|
||||
|
||||
|
||||
return constructor.takePresentation();
|
||||
/*
|
||||
std::cout<<"readSlide="<<readSlide<<std::endl;
|
||||
std::cout<<"node="<<node<<std::endl;
|
||||
return node;*/
|
||||
osg::ref_ptr<osg::Node> presentation_node = constructor.takePresentation();
|
||||
|
||||
osgPresentation::SlideEventHandler* seh = new osgPresentation::SlideEventHandler;
|
||||
seh->set(presentation_node.get());
|
||||
presentation_node->setEventCallback(seh);
|
||||
|
||||
return presentation_node.release();
|
||||
}
|
||||
|
||||
|
||||
@@ -656,7 +656,7 @@ SlideEventHandler::SlideEventHandler(osgViewer::Viewer* viewer):
|
||||
_updateOpacityActive(false),
|
||||
_previousX(0), _previousY(0),
|
||||
_cursorOn(true),
|
||||
_releaseAndCompileOnEachNewSlide(true),
|
||||
_releaseAndCompileOnEachNewSlide(false),
|
||||
_firstSlideOrLayerChange(true),
|
||||
_tickAtFirstSlideOrLayerChange(0),
|
||||
_tickAtLastSlideOrLayerChange(0),
|
||||
@@ -701,7 +701,7 @@ void SlideEventHandler::set(osg::Node* model)
|
||||
_timePerSlide = duration;
|
||||
}
|
||||
|
||||
selectSlide(0);
|
||||
//selectSlide(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -718,7 +718,7 @@ void SlideEventHandler::set(osg::Node* model)
|
||||
osg::notify(osg::INFO)<<"Found presentation slide"<<findSlide._switch->getName()<<std::endl;
|
||||
|
||||
_slideSwitch = findSlide._switch;
|
||||
selectLayer(0);
|
||||
//selectLayer(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -753,8 +753,38 @@ double SlideEventHandler::getCurrentTimeDelayBetweenSlides() const
|
||||
}
|
||||
|
||||
|
||||
void SlideEventHandler::operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
osgGA::EventVisitor* ev = dynamic_cast<osgGA::EventVisitor*>(nv);
|
||||
if (ev)
|
||||
{
|
||||
if (node->getNumChildrenRequiringEventTraversal()>0) traverse(node,nv);
|
||||
|
||||
if (ev->getActionAdapter() && !ev->getEvents().empty())
|
||||
{
|
||||
for(osgGA::EventQueue::Events::iterator itr = ev->getEvents().begin();
|
||||
itr != ev->getEvents().end();
|
||||
++itr)
|
||||
{
|
||||
handleWithCheckAgainstIgnoreHandledEventsMask(*(*itr), *(ev->getActionAdapter()), node, nv);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool SlideEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
|
||||
{
|
||||
|
||||
if (!_viewer)
|
||||
{
|
||||
_viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
|
||||
selectSlide(0);
|
||||
home();
|
||||
osg::notify(osg::NOTICE)<<"Assigned viewer. to SlideEventHandler"<<std::endl;
|
||||
}
|
||||
// else osg::notify(osg::NOTICE)<<"SlideEventHandler::handle()"<<std::endl;
|
||||
|
||||
|
||||
if (ea.getHandled()) return false;
|
||||
|
||||
switch(ea.getEventType())
|
||||
@@ -1201,8 +1231,11 @@ void SlideEventHandler::updateOperators()
|
||||
_activeOperators.collect(_slideSwitch.get());
|
||||
_activeOperators.process();
|
||||
|
||||
UpdateLightVisitor uav(_viewer->getCamera()->getViewMatrix(),0.0f,0.0f);
|
||||
_viewer->getSceneData()->accept(uav);
|
||||
if (_viewer.valid())
|
||||
{
|
||||
UpdateLightVisitor uav(_viewer->getCamera()->getViewMatrix(),0.0f,0.0f);
|
||||
_viewer->getSceneData()->accept(uav);
|
||||
}
|
||||
}
|
||||
|
||||
bool SlideEventHandler::home(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
|
||||
|
||||
@@ -205,6 +205,9 @@ public:
|
||||
|
||||
virtual void accept(osgGA::GUIEventHandlerVisitor& v) { v.visit(*this); }
|
||||
|
||||
/** Event traversal node callback method.*/
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&);
|
||||
|
||||
virtual void getUsage(osg::ApplicationUsage& usage) const;
|
||||
@@ -280,13 +283,13 @@ protected:
|
||||
|
||||
osg::observer_ptr<osgViewer::Viewer> _viewer;
|
||||
|
||||
osg::ref_ptr<osg::Switch> _showSwitch;
|
||||
osg::observer_ptr<osg::Switch> _showSwitch;
|
||||
unsigned int _activePresentation;
|
||||
|
||||
osg::ref_ptr<osg::Switch> _presentationSwitch;
|
||||
osg::observer_ptr<osg::Switch> _presentationSwitch;
|
||||
unsigned int _activeSlide;
|
||||
|
||||
osg::ref_ptr<osg::Switch> _slideSwitch;
|
||||
osg::observer_ptr<osg::Switch> _slideSwitch;
|
||||
unsigned int _activeLayer;
|
||||
|
||||
bool _firstTraversal;
|
||||
|
||||
Reference in New Issue
Block a user