From 6e89dc0d9485e03466b93872463b60d11b40d8f2 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 5 Mar 2008 11:33:55 +0000 Subject: [PATCH] From Jean-Sebastien Guay, "I changed osgGA::StateSetManipulator to mirror the osgViewer::StatsHandler and other handlers which allow you to change the key(s) you would press to get them to do something. Pretty simple change but useful in our context and possibly in others too." --- include/osgGA/StateSetManipulator | 18 +++++++++ src/osgGA/StateSetManipulator.cpp | 64 ++++++++++++------------------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/include/osgGA/StateSetManipulator b/include/osgGA/StateSetManipulator index abf30d236..30ce9cd32 100644 --- a/include/osgGA/StateSetManipulator +++ b/include/osgGA/StateSetManipulator @@ -69,6 +69,19 @@ public: void cyclePolygonMode(); + + void setKeyEventToggleBackfaceCulling(int key) { _keyEventToggleBackfaceCulling = key; } + int getKeyEventToggleBackfaceCulling() const { return _keyEventToggleBackfaceCulling; } + + void setKeyEventToggleLighting(int key) { _keyEventToggleLighting = key; } + int getKeyEventToggleLighting() const { return _keyEventToggleLighting; } + + void setKeyEventToggleTexturing(int key) { _keyEventToggleTexturing = key; } + int getKeyEventToggleTexturing() const { return _keyEventToggleTexturing; } + + void setKeyEventCyclePolygonMode(int key) { _keyEventCyclePolygonMode = key; } + int getKeyEventCyclePolygonMode() const { return _keyEventCyclePolygonMode; } + protected: virtual ~StateSetManipulator(); @@ -81,6 +94,11 @@ protected: bool _texture; unsigned int _maxNumOfTextureUnits; + int _keyEventToggleBackfaceCulling; + int _keyEventToggleLighting; + int _keyEventToggleTexturing; + int _keyEventCyclePolygonMode; + osg::PolygonMode* getOrCreatePolygonMode(); }; diff --git a/src/osgGA/StateSetManipulator.cpp b/src/osgGA/StateSetManipulator.cpp index 30b56f900..a4be13f7b 100644 --- a/src/osgGA/StateSetManipulator.cpp +++ b/src/osgGA/StateSetManipulator.cpp @@ -21,7 +21,11 @@ StateSetManipulator::StateSetManipulator(osg::StateSet* stateset): _backface(false), _lighting(false), _texture(false), - _maxNumOfTextureUnits(4) + _maxNumOfTextureUnits(4), + _keyEventToggleBackfaceCulling('b'), + _keyEventToggleLighting('l'), + _keyEventToggleTexturing('t'), + _keyEventCyclePolygonMode('w') { setStateSet(stateset); } @@ -72,62 +76,44 @@ bool StateSetManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& aa) if (ea.getHandled()) return false; - if(ea.getEventType()==GUIEventAdapter::KEYDOWN) + if (ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN) { - switch( ea.getKey() ) + if ( ea.getKey() == _keyEventToggleBackfaceCulling ) + { + setBackfaceEnabled(!getBackfaceEnabled()); + aa.requestRedraw(); + return true; + } + if ( ea.getKey() == _keyEventToggleLighting ) { - - case 'b' : - setBackfaceEnabled(!getBackfaceEnabled()); - aa.requestRedraw(); - return true; - break; - - case 'l' : setLightingEnabled(!getLightingEnabled()); aa.requestRedraw(); return true; - break; - - case 't' : + } + if ( ea.getKey() == _keyEventToggleTexturing ) + { setTextureEnabled(!getTextureEnabled()); aa.requestRedraw(); return true; - break; - - case 'w' : + } + if ( ea.getKey() == _keyEventCyclePolygonMode ) + { cyclePolygonMode(); aa.requestRedraw(); - break; - -#if COMPILE_TEXENVFILTER_USAGE - case 'm' : - { - osg::TexEnvFilter* texenvfilter = dynamic_cast(_stateset->getTextureAttribute(0,osg::StateAttribute::TEXENVFILTER)); - if (!texenvfilter) - { - texenvfilter = new osg::TexEnvFilter; - _stateset->setTextureAttribute(0,texenvfilter); - } - - // cycle through the available modes. - texenvfilter->setLodBias(texenvfilter->getLodBias()+0.1); - aa.requestRedraw(); - } - break; -#endif + return true; } } + return false; } void StateSetManipulator::getUsage(osg::ApplicationUsage& usage) const { - usage.addKeyboardMouseBinding("b","Toggle backface culling"); - usage.addKeyboardMouseBinding("l","Toggle lighting"); - usage.addKeyboardMouseBinding("t","Toggle texturing"); - usage.addKeyboardMouseBinding("w","Toggle polygon fill mode between fill, line (wire frame) and points"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleBackfaceCulling),"Toggle backface culling"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleLighting),"Toggle lighting"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleTexturing),"Toggle texturing"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventCyclePolygonMode),"Toggle polygon fill mode between fill, line (wire frame) and points"); }