diff --git a/VisualStudio/osgProducer/osgProducer.dsp b/VisualStudio/osgProducer/osgProducer.dsp index a3a7ea1cf..8ceff7e9c 100755 --- a/VisualStudio/osgProducer/osgProducer.dsp +++ b/VisualStudio/osgProducer/osgProducer.dsp @@ -117,7 +117,7 @@ SOURCE=..\..\src\osgProducer\StatsEventHandler.cpp # End Source File # Begin Source File -SOURCE=..\..\src\osgProducer\FullScreenEventHandler.cpp +SOURCE=..\..\src\osgProducer\ViewerEventHandler.cpp # End Source File # Begin Source File @@ -161,7 +161,7 @@ SOURCE=..\..\Include\osgProducer\StatsEventHandler # End Source File # Begin Source File -SOURCE=..\..\Include\osgProducer\FullScreenEventHandler +SOURCE=..\..\Include\osgProducer\ViewerEventHandler # End Source File # Begin Source File diff --git a/include/osgProducer/OsgCameraGroup b/include/osgProducer/OsgCameraGroup index e9fff4d06..24d375fc4 100644 --- a/include/osgProducer/OsgCameraGroup +++ b/include/osgProducer/OsgCameraGroup @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -43,9 +44,15 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup virtual ~OsgCameraGroup() {} - typedef std::vector < osg::ref_ptr > SceneHandlerList; + void setApplicationUsage(osg::ApplicationUsage* au) { _applicationUsage = au; } + + osg::ApplicationUsage* getApplicationUsage() { return _applicationUsage; } + + const osg::ApplicationUsage* getApplicationUsage() const { return _applicationUsage; } + typedef std::vector < osg::ref_ptr > SceneHandlerList; + SceneHandlerList& getSceneHandlerList() { return _shvec;} const SceneHandlerList& getSceneHandlerList() const { return _shvec;} @@ -140,13 +147,16 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup /** Dispatch the cull and draw for each of the Camera's for this frame.*/ virtual void frame(); - + + protected : void setUpSceneViewsWithData(); + osg::ApplicationUsage* _applicationUsage; + osg::ref_ptr _scene_data; osg::ref_ptr _scene_decorator; diff --git a/include/osgProducer/Viewer b/include/osgProducer/Viewer index bd289e0cd..f1ea3b65c 100644 --- a/include/osgProducer/Viewer +++ b/include/osgProducer/Viewer @@ -55,7 +55,7 @@ class OSGPRODUCER_EXPORT Viewer : public OsgCameraGroup, public osgGA::GUIAction HEAD_LIGHT_SOURCE = 16, SKY_LIGHT_SOURCE = 32, STATS_MANIPULATOR = 64, - FULLSCREEN_MANIPULATOR = 128, + VIEWER_MANIPULATOR = 128, ESCAPE_SETS_DONE = 256, STANDARD_SETTINGS = TRACKBALL_MANIPULATOR| DRIVE_MANIPULATOR | @@ -63,7 +63,7 @@ class OSGPRODUCER_EXPORT Viewer : public OsgCameraGroup, public osgGA::GUIAction STATE_MANIPULATOR | HEAD_LIGHT_SOURCE | STATS_MANIPULATOR | - FULLSCREEN_MANIPULATOR | + VIEWER_MANIPULATOR | ESCAPE_SETS_DONE }; diff --git a/include/osgProducer/FullScreenEventHandler b/include/osgProducer/ViewerEventHandler similarity index 78% rename from include/osgProducer/FullScreenEventHandler rename to include/osgProducer/ViewerEventHandler index 1e8595676..86efb5a36 100644 --- a/include/osgProducer/FullScreenEventHandler +++ b/include/osgProducer/ViewerEventHandler @@ -11,19 +11,19 @@ * OpenSceneGraph Public License for more details. */ -#ifndef OSGPRODUCER_FULLSCREENEVENTHANDLER -#define OSGPRODUCER_FULLSCREENEVENTHANDLER 1 +#ifndef OSGPRODUCER_VIEWEREVENTHANDLER +#define OSGPRODUCER_VIEWEREVENTHANDLER 1 #include #include namespace osgProducer { -class FullScreenEventHandler : public osgGA::GUIEventHandler +class ViewerEventHandler : public osgGA::GUIEventHandler { public: - FullScreenEventHandler(osgProducer::Viewer* cg):_cg(cg) {} + ViewerEventHandler(osgProducer::OsgCameraGroup* cg); virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa); @@ -34,7 +34,9 @@ class FullScreenEventHandler : public osgGA::GUIEventHandler protected: - osgProducer::Viewer* _cg; + osgProducer::OsgCameraGroup* _cg; + + std::string _writeNodeFileName; }; } diff --git a/src/osgProducer/FullScreenEventHandler.cpp b/src/osgProducer/FullScreenEventHandler.cpp deleted file mode 100644 index 3c2102ca1..000000000 --- a/src/osgProducer/FullScreenEventHandler.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include - -using namespace osgProducer; - -bool FullScreenEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&) -{ - if(!_cg) return false; - - if(ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN) - { - - switch( ea.getKey() ) - { - case 'f' : - { - Producer::CameraConfig* cfg = _cg->getCameraConfig(); - for( unsigned int i = 0; i < cfg->getNumberOfCameras(); ++i ) - { - Producer::Camera *cam = cfg->getCamera(i); - Producer::RenderSurface* rs = cam->getRenderSurface(); - rs->fullScreen(!rs->isFullScreen()); - } - - return true; - } - - default: - break; - - } - } - return false; - -} - -void FullScreenEventHandler::accept(osgGA::GUIEventHandlerVisitor& gehv) -{ - gehv.visit(*this); -} - -void FullScreenEventHandler::getUsage(osg::ApplicationUsage& usage) const -{ - usage.addKeyboardMouseBinding("f","Toggle fullscreen"); -} diff --git a/src/osgProducer/GNUmakefile b/src/osgProducer/GNUmakefile index 5fdfee1df..e5057f3a0 100644 --- a/src/osgProducer/GNUmakefile +++ b/src/osgProducer/GNUmakefile @@ -7,7 +7,7 @@ CXXFILES =\ OsgCameraGroup.cpp\ OsgSceneHandler.cpp\ StatsEventHandler.cpp\ - FullScreenEventHandler.cpp\ + ViewerEventHandler.cpp\ Viewer.cpp\ LIBS += -lProducer $(GL_LIBS) -losgGA -losgUtil -losgDB -losg $(OTHER_LIBS) diff --git a/src/osgProducer/OsgCameraGroup.cpp b/src/osgProducer/OsgCameraGroup.cpp index 07359d5c6..628bc1515 100644 --- a/src/osgProducer/OsgCameraGroup.cpp +++ b/src/osgProducer/OsgCameraGroup.cpp @@ -93,6 +93,7 @@ OsgCameraGroup::OsgCameraGroup(osg::ArgumentParser& arguments): Producer::CameraGroup(extractCameraConfigFile(arguments)) { _init(); + _applicationUsage = arguments.getApplicationUsage(); } void OsgCameraGroup::_init() diff --git a/src/osgProducer/Viewer.cpp b/src/osgProducer/Viewer.cpp index 176399f40..910c3f910 100644 --- a/src/osgProducer/Viewer.cpp +++ b/src/osgProducer/Viewer.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include using namespace osgProducer; @@ -155,9 +155,9 @@ void Viewer::setUpViewer(unsigned int options) } - if (options&FULLSCREEN_MANIPULATOR) + if (options&VIEWER_MANIPULATOR) { - getEventHandlerList().push_back(new FullScreenEventHandler(this)); + getEventHandlerList().push_back(new ViewerEventHandler(this)); } } diff --git a/src/osgProducer/ViewerEventHandler.cpp b/src/osgProducer/ViewerEventHandler.cpp new file mode 100644 index 000000000..f461f54ea --- /dev/null +++ b/src/osgProducer/ViewerEventHandler.cpp @@ -0,0 +1,74 @@ +#include +#include + +using namespace osgProducer; + +ViewerEventHandler::ViewerEventHandler(osgProducer::OsgCameraGroup* cg): + _cg(cg), + _writeNodeFileName("savedmodel.osg") +{ +} + +bool ViewerEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&) +{ + if(!_cg) return false; + + if(ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN) + { + + switch( ea.getKey() ) + { + case 'f' : + { + Producer::CameraConfig* cfg = _cg->getCameraConfig(); + for( unsigned int i = 0; i < cfg->getNumberOfCameras(); ++i ) + { + Producer::Camera *cam = cfg->getCamera(i); + Producer::RenderSurface* rs = cam->getRenderSurface(); + rs->fullScreen(!rs->isFullScreen()); + } + + return true; + } + case 'o' : + { + osg::Node* node = _cg->getSceneData(); + if (node) + { + std::cout<<"writing file "<<_writeNodeFileName<getApplicationUsage()) + { + _cg->getApplicationUsage()->write(std::cout,_cg->getApplicationUsage()->getKeyboardMouseBindings()); + } + + return true; + } + + default: + break; + + } + } + return false; + +} + +void ViewerEventHandler::accept(osgGA::GUIEventHandlerVisitor& gehv) +{ + gehv.visit(*this); +} + +void ViewerEventHandler::getUsage(osg::ApplicationUsage& usage) const +{ + usage.addKeyboardMouseBinding("f","Toggle fullscreen"); +}