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:
Robert Osfield
2003-03-25 15:13:20 +00:00
parent 5e56e0eba8
commit 0c60d14c00
9 changed files with 102 additions and 59 deletions

View File

@@ -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

View 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;

View File

@@ -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
};

View File

@@ -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;
};
}

View File

@@ -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");
}

View File

@@ -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)

View File

@@ -93,6 +93,7 @@ OsgCameraGroup::OsgCameraGroup(osg::ArgumentParser& arguments):
Producer::CameraGroup(extractCameraConfigFile(arguments))
{
_init();
_applicationUsage = arguments.getApplicationUsage();
}
void OsgCameraGroup::_init()

View File

@@ -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));
}
}

View 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");
}