Show
Ignore:
Timestamp:
01/03/06 17:52:06 (9 years ago)
Author:
robert
Message:

Added ability to write out the selected parts of the scene graph.

Files:
1 modified

Legend:

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

    r4952 r4955  
    1515 
    1616#include <osgDB/ReadFile> 
     17#include <osgDB/WriteFile> 
    1718 
    1819#include <osgFX/Scribe> 
    1920 
     21 
     22class CreateModelToSaveVisitor : public osg::NodeVisitor 
     23{ 
     24public: 
     25 
     26    CreateModelToSaveVisitor(): 
     27        osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)         
     28    { 
     29        _group = new osg::Group; 
     30        _addToModel = false; 
     31    } 
     32     
     33    virtual void apply(osg::Node& node) 
     34    { 
     35        osgFX::Scribe* scribe = dynamic_cast<osgFX::Scribe*>(&node); 
     36        if (scribe) 
     37        { 
     38            for(unsigned int i=0; i<scribe->getNumChildren(); ++i) 
     39            { 
     40                _group->addChild(scribe->getChild(i)); 
     41            } 
     42        } 
     43        else 
     44        { 
     45            traverse(node); 
     46        } 
     47    } 
     48     
     49    osg::ref_ptr<osg::Group> _group; 
     50    bool _addToModel; 
     51}; 
    2052 
    2153class MyKeyboardMouseCallback : public Producer::KeyboardMouseCallback 
     
    4880    { 
    4981        if (key==' ') resetTrackball(); 
     82        else if (key=='o') saveSelectedModel(); 
    5083    } 
    5184 
     
    186219    } 
    187220 
     221    void saveSelectedModel() 
     222    { 
     223        CreateModelToSaveVisitor cmtsv; 
     224        _sceneView->getSceneData()->accept(cmtsv); 
     225         
     226        if (cmtsv._group->getNumChildren()>0) 
     227        { 
     228            osgDB::writeNodeFile(*cmtsv._group, "selected_model.osg"); 
     229        } 
     230    } 
     231 
    188232private: 
    189233