Show
Ignore:
Timestamp:
04/18/03 17:59:34 (12 years ago)
Author:
robert
Message:

Updated NEWS for the release.

Fixed warnings.

Files:
1 modified

Legend:

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

    r1851 r1902  
    2727    public: 
    2828     
    29         OccluderEventHandler(osgUtil::SceneView* sceneview,osg::Group* rootnode):_sceneview(sceneview),_rootnode(rootnode) {} 
     29        OccluderEventHandler(osgProducer::Viewer* viewer):_viewer(viewer) {} 
    3030     
    3131        virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&); 
     
    4040        void endOccluder(); 
    4141         
    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; 
    4446        osg::ref_ptr<osg::Group>                _rootnode; 
    4547        osg::ref_ptr<osg::Group>                _occluders; 
     
    5658            { 
    5759 
    58                 float x = ea.getX(); 
    59                 float y = ea.getY(); 
     60                float x = ea.getXnormalized(); 
     61                float y = ea.getYnormalized(); 
    6062  
    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)) 
    6365                { 
    6466                     return true; 
    6567                } 
    6668 
    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()) 
    7670                { 
    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()); 
    8674                } 
    8775 
     
    9785                if (_occluders.valid()) 
    9886                { 
    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; 
    10190                } 
    10291                else 
     
    137126            { 
    138127                _occluders = new osg::Group; 
    139                 _rootnode->addChild(_occluders.get()); 
     128                if (rootNode()) rootNode()->addChild(_occluders.get()); 
    140129            } 
    141130            _occluders->addChild(occluderNode); 
     
    298287    while (arguments.read("-m")) { manuallyCreateOccluders = true; } 
    299288 
     289    if (manuallyCreateOccluders) 
     290    { 
     291        viewer.getEventHandlerList().push_front(new OccluderEventHandler(&viewer)); 
     292    } 
     293 
    300294    // get details on keyboard and mouse bindings used by the viewer. 
    301295    viewer.getUsage(*arguments.getApplicationUsage()); 
     
    350344    viewer.realize(); 
    351345 
    352     if (manuallyCreateOccluders) 
    353     { 
    354         osgUtil::SceneView* sceneview = viewer.getSceneHandlerList()[0].get(); 
    355      
    356         viewer.getEventHandlerList().push_front(new OccluderEventHandler(sceneview,rootnode.get())); 
    357     } 
    358346 
    359347    while( !viewer.done() )