Added a ViewerEventHandler which manages full screen, file write, and help
output to osgProducer. Removed FullSreenEventHandler as it is now superseeded by ViewerEventHandler.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <Producer/CameraGroup>
|
||||
|
||||
#include <osg/ArgumentParser>
|
||||
#include <osg/ApplicationUsage>
|
||||
#include <osg/Group>
|
||||
#include <osg/StateSet>
|
||||
#include <osg/FrameStamp>
|
||||
@@ -43,9 +44,15 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup
|
||||
virtual ~OsgCameraGroup() {}
|
||||
|
||||
|
||||
typedef std::vector < osg::ref_ptr<osgProducer::OsgSceneHandler> > 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<osgProducer::OsgSceneHandler> > 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<osg::Node> _scene_data;
|
||||
osg::ref_ptr<osg::Group> _scene_decorator;
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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 <osgGA/GUIEventHandler>
|
||||
#include <osgProducer/Viewer>
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
#include <osgProducer/FullScreenEventHandler>
|
||||
|
||||
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");
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -93,6 +93,7 @@ OsgCameraGroup::OsgCameraGroup(osg::ArgumentParser& arguments):
|
||||
Producer::CameraGroup(extractCameraConfigFile(arguments))
|
||||
{
|
||||
_init();
|
||||
_applicationUsage = arguments.getApplicationUsage();
|
||||
}
|
||||
|
||||
void OsgCameraGroup::_init()
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#include <osgProducer/Viewer>
|
||||
#include <osgProducer/FrameStatsHandler>
|
||||
#include <osgProducer/StatsEventHandler>
|
||||
#include <osgProducer/FullScreenEventHandler>
|
||||
#include <osgProducer/ViewerEventHandler>
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
74
src/osgProducer/ViewerEventHandler.cpp
Normal file
74
src/osgProducer/ViewerEventHandler.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
#include <osgProducer/ViewerEventHandler>
|
||||
#include <osgDB/WriteFile>
|
||||
|
||||
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<<std::endl;
|
||||
osgDB::writeNodeFile(*node,_writeNodeFileName.c_str());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case osgGA::GUIEventAdapter::KEY_Help :
|
||||
case '/' :
|
||||
case '?' :
|
||||
{
|
||||
if (_cg->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");
|
||||
}
|
||||
Reference in New Issue
Block a user