Show
Ignore:
Timestamp:
03/29/10 10:49:20 (5 years ago)
Author:
robert
Message:

Added TerainHandler? event handler to provide 'v'/'V' and 'r'/'R' key controls for change vertical scale and sample ratio respectively.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgterrain/osgterrain.cpp

    r11257 r11301  
    7474} 
    7575 
     76// class to handle events with a pick 
     77class TerrainHandler : public osgGA::GUIEventHandler { 
     78public: 
     79 
     80    TerrainHandler(osgTerrain::Terrain* terrain): 
     81        _terrain(terrain) {} 
     82 
     83    bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa) 
     84    { 
     85        switch(ea.getEventType()) 
     86        { 
     87            case(osgGA::GUIEventAdapter::KEYDOWN): 
     88            { 
     89                if (ea.getKey()=='r') 
     90                { 
     91                    _terrain->setSampleRatio(_terrain->getSampleRatio()*0.5); 
     92                    osg::notify(osg::NOTICE)<<"Sample ratio "<<_terrain->getSampleRatio()<<std::endl; 
     93                    return true; 
     94                } 
     95                else if (ea.getKey()=='R') 
     96                { 
     97                    _terrain->setSampleRatio(_terrain->getSampleRatio()/0.5); 
     98                    osg::notify(osg::NOTICE)<<"Sample ratio "<<_terrain->getSampleRatio()<<std::endl; 
     99                    return true; 
     100                } 
     101                else if (ea.getKey()=='v') 
     102                { 
     103                    _terrain->setVerticalScale(_terrain->getVerticalScale()*1.25); 
     104                    osg::notify(osg::NOTICE)<<"Vertical scale "<<_terrain->getVerticalScale()<<std::endl; 
     105                    return true; 
     106                } 
     107                else if (ea.getKey()=='V') 
     108                { 
     109                    _terrain->setVerticalScale(_terrain->getVerticalScale()/1.25); 
     110                    osg::notify(osg::NOTICE)<<"Vertical scale "<<_terrain->getVerticalScale()<<std::endl; 
     111                    return true; 
     112                } 
     113 
     114                return false; 
     115            } 
     116            default: 
     117                return false; 
     118        } 
     119    } 
     120 
     121protected: 
     122 
     123    ~TerrainHandler() {} 
     124 
     125    osg::ref_ptr<osgTerrain::Terrain>  _terrain; 
     126}; 
     127 
    76128int main(int argc, char** argv) 
    77129{ 
     
    157209    terrain->setBlendingPolicy(blendingPolicy); 
    158210 
     211    // register our custom handler for adjust Terrain settings 
     212    viewer.addEventHandler(new TerrainHandler(terrain)); 
     213 
    159214    // add a viewport to the viewer and attach the scene graph. 
    160215    viewer.setSceneData( rootnode );