- Timestamp:
- 04/18/03 17:59:34 (10 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgoccluder/osgoccluder.cpp
r1851 r1902 27 27 public: 28 28 29 OccluderEventHandler(osg Util::SceneView* sceneview,osg::Group* rootnode):_sceneview(sceneview),_rootnode(rootnode) {}29 OccluderEventHandler(osgProducer::Viewer* viewer):_viewer(viewer) {} 30 30 31 31 virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&); … … 40 40 void endOccluder(); 41 41 42 43 osg::ref_ptr<osgUtil::SceneView> _sceneview; 42 osg::Group* rootNode() { return dynamic_cast<osg::Group*>(_viewer->getSceneData()); } 43 44 45 osgProducer::Viewer* _viewer; 44 46 osg::ref_ptr<osg::Group> _rootnode; 45 47 osg::ref_ptr<osg::Group> _occluders; … … 56 58 { 57 59 58 float x = ea.getX ();59 float y = ea.getY ();60 float x = ea.getXnormalized(); 61 float y = ea.getYnormalized(); 60 62 61 osg ::Vec3 near_point,far_point;62 if (!_ sceneview->projectWindowXYIntoObject(x,ea.getYmax()-y,near_point,far_point))63 osgUtil::IntersectVisitor::HitList hitList; 64 if (!_viewer->computeIntersections(x,y,hitList)) 63 65 { 64 66 return true; 65 67 } 66 68 67 osg::ref_ptr<osg::LineSegment> lineSegment = new osg::LineSegment; 68 lineSegment->set(near_point,far_point); 69 70 osgUtil::IntersectVisitor iv; 71 iv.addLineSegment(lineSegment.get()); 72 73 _rootnode->accept(iv); 74 75 if (iv.hits()) 69 if (!hitList.empty()) 76 70 { 77 78 osgUtil::IntersectVisitor::HitList& hitList = iv.getHitList(lineSegment.get()); 79 if (!hitList.empty()) 80 { 81 82 osgUtil::Hit& hit = hitList.front(); 83 addPoint(hit.getWorldIntersectPoint()); 84 } 85 71 72 osgUtil::Hit& hit = hitList.front(); 73 addPoint(hit.getWorldIntersectPoint()); 86 74 } 87 75 … … 97 85 if (_occluders.valid()) 98 86 { 99 std::cout<<"saving occluders to 'saved_occluders.osg'"<<std::endl; 100 osgDB::writeNodeFile(*_occluders,"saved_occluders.osg"); 87 88 if (osgDB::writeNodeFile(*_occluders,"saved_occluders.osg")) 89 std::cout<<"saved occluders to 'saved_occluders.osg'"<<std::endl; 101 90 } 102 91 else … … 137 126 { 138 127 _occluders = new osg::Group; 139 _rootnode->addChild(_occluders.get());128 if (rootNode()) rootNode()->addChild(_occluders.get()); 140 129 } 141 130 _occluders->addChild(occluderNode); … … 298 287 while (arguments.read("-m")) { manuallyCreateOccluders = true; } 299 288 289 if (manuallyCreateOccluders) 290 { 291 viewer.getEventHandlerList().push_front(new OccluderEventHandler(&viewer)); 292 } 293 300 294 // get details on keyboard and mouse bindings used by the viewer. 301 295 viewer.getUsage(*arguments.getApplicationUsage()); … … 350 344 viewer.realize(); 351 345 352 if (manuallyCreateOccluders)353 {354 osgUtil::SceneView* sceneview = viewer.getSceneHandlerList()[0].get();355 356 viewer.getEventHandlerList().push_front(new OccluderEventHandler(sceneview,rootnode.get()));357 }358 346 359 347 while( !viewer.done() )
