Show
Ignore:
Timestamp:
02/11/07 22:12:34 (8 years ago)
Author:
robert
Message:

Changed osgManipulator::Dragger::handle(..) method to use a nested PointerInfo?
class to encapsulate the pixel coords, SceneView? and picking operations in prep for
making the code more general purpose, and less reliant on classes like osgUtil::SceneView? and osgUtil::IntersectVisitor?.

Files:
1 modified

Legend:

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

    r6143 r6148  
    202202            for(unsigned int i=0;i<_viewer->getNumberOfCameras();++i) 
    203203            { 
     204                 
    204205                if ((ea.getEventType() == osgGA::GUIEventAdapter::PUSH) && 
    205                     _viewer->computeIntersections(ea.getX(), ea.getY(), i, hitList)) 
     206                    _viewer->computeIntersections(ea.getX(), ea.getY(), i, _pointer.hitList)) 
    206207                { 
    207208                    float pixel_x,pixel_y; 
     
    213214                        osgUtil::SceneView* sv = sh ? sh->getSceneView() : 0; 
    214215                        if (! sv) continue; 
    215  
    216                         for (osg::NodePath::iterator itr = hitList.front().getNodePath().begin(); 
    217                              itr != hitList.front().getNodePath().end(); 
     216                         
     217                        _pointer.pixel_x = int(pixel_x+0.5); 
     218                        _pointer.pixel_y = int(pixel_y+0.5); 
     219                        _pointer.sv = sv; 
     220                        _pointer.hitIter = _pointer.hitList.begin(); 
     221 
     222                        for (osg::NodePath::iterator itr = _pointer.hitList.front().getNodePath().begin(); 
     223                             itr != _pointer.hitList.front().getNodePath().end(); 
    218224                             ++itr) 
    219225                        { 
     
    221227                            if (dragger) 
    222228                            { 
    223                                 dragger->handle(int(pixel_x+0.5), int(pixel_y+0.5), *sv, 
    224                                                 hitList, hitList.begin(), 
    225                                                 ea, aa); 
     229 
     230                                dragger->handle(_pointer, ea, aa); 
    226231                                _activeDragger = dragger; 
    227232                                break; 
     
    245250                                osgUtil::SceneView* sv = sh ? sh->getSceneView() : 0; 
    246251                                if (_activeDragger && sv) 
    247                                     _activeDragger->handle(int(pixel_x+0.5), int(pixel_y+0.5), *sv, 
    248                                                            hitList, hitList.begin(), 
    249                                                            ea, aa); 
     252                                { 
     253                                    _pointer.pixel_x = int(pixel_x+0.5); 
     254                                    _pointer.pixel_y = int(pixel_y+0.5); 
     255                                    _pointer.sv = sv; 
     256                                    _pointer.hitIter = _pointer.hitList.begin(); 
     257 
     258                                    _activeDragger->handle(_pointer, ea, aa); 
     259                                } 
    250260                            } 
    251261                        } 
     
    258268                { 
    259269                    _activeDragger = 0; 
    260                     hitList.clear(); 
     270                    _pointer.hitList.clear(); 
    261271                } 
    262272            } 
     
    268278        unsigned int _mode; 
    269279        osgManipulator::Dragger* _activeDragger; 
    270         osgUtil::IntersectVisitor::HitList hitList; 
     280        osgManipulator::Dragger::PointerInfo _pointer; 
    271281}; 
    272282