- Timestamp:
- 01/28/09 10:26:44 (4 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgcompositeviewer/osgcompositeviewer.cpp
r7536 r9564 45 45 // class to handle events with a pick 46 46 class PickHandler : public osgGA::GUIEventHandler { 47 public: 47 public: 48 48 49 49 PickHandler(): 50 50 _mx(0.0f), 51 51 _my(0.0f) {} 52 52 53 53 ~PickHandler() {} 54 54 55 55 bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa) 56 56 { 57 57 osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa); 58 58 if (!view) return false; 59 59 60 60 switch(ea.getEventType()) 61 61 { … … 79 79 return false; 80 80 } 81 81 82 82 void pick(osgViewer::View* view, float x, float y) 83 83 { … … 92 92 node = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0; 93 93 parent = (nodePath.size()>=2)?dynamic_cast<osg::Group*>(nodePath[nodePath.size()-2]):0; 94 } 94 } 95 95 96 96 // now we try to decorate the hit node by the osgFX::Scribe to show that its been "picked" … … 120 120 121 121 } 122 122 123 123 float _mx, _my; 124 124 … … 131 131 // use an ArgumentParser object to manage the program arguments. 132 132 osg::ArgumentParser arguments(&argc,argv); 133 133 134 134 // read the scene from the list of file specified commandline args. 135 135 osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles(arguments); … … 139 139 // construct the viewer. 140 140 osgViewer::CompositeViewer viewer(arguments); 141 142 143 144 141 142 143 144 145 145 if (arguments.read("-1")) 146 146 { 147 147 { 148 148 osgViewer::View* view = new osgViewer::View; 149 view->setName("Single view"); 149 150 view->setSceneData(osgDB::readNodeFile("fountain.osg")); 150 151 151 152 view->addEventHandler( new osgViewer::StatsHandler ); 152 153 153 154 view->setUpViewAcrossAllScreens(); 154 155 view->setCameraManipulator(new osgGA::TrackballManipulator); … … 175 176 view->addEventHandler( statesetManipulator.get() ); 176 177 } 177 178 178 179 // view two 179 180 { … … 184 185 view->setSceneData(scene.get()); 185 186 view->setCameraManipulator(new osgGA::TrackballManipulator); 186 187 187 188 view->addEventHandler( new osgViewer::StatsHandler ); 188 189 189 190 190 191 // add the handler for doing the picking 191 192 view->addEventHandler(new PickHandler()); 192 193 } 193 194 } 194 195 195 196 196 197 if (arguments.read("-3") || viewer.getNumViews()==0) 197 { 198 { 198 199 199 200 osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface(); 200 if (!wsi) 201 if (!wsi) 201 202 { 202 203 osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl; … … 246 247 247 248 view->addEventHandler( statesetManipulator.get() ); 248 249 249 250 view->addEventHandler( new osgViewer::StatsHandler ); 250 251 view->addEventHandler( new osgViewer::HelpHandler ); … … 263 264 view->getCamera()->setGraphicsContext(gc.get()); 264 265 view->setCameraManipulator(new osgGA::TrackballManipulator); 265 266 266 267 // add the handler for doing the picking 267 268 view->addEventHandler(new PickHandler()); 268 269 269 270 } 270 271 … … 284 285 } 285 286 286 287 287 288 while (arguments.read("-s")) { viewer.setThreadingModel(osgViewer::CompositeViewer::SingleThreaded); } 288 289 while (arguments.read("-g")) { viewer.setThreadingModel(osgViewer::CompositeViewer::CullDrawThreadPerContext); } 289 290 while (arguments.read("-c")) { viewer.setThreadingModel(osgViewer::CompositeViewer::CullThreadPerCameraDrawThreadPerContext); } 290 291 291 292 // run the viewer's main frame loop 292 293 return viewer.run();
