Changeset 13369

Show
Ignore:
Timestamp:
11/09/15 17:13:03 (2 years ago)
Author:
robert
Message:

Release OpenSceneGraph-3.5.1

Files:
1 modified

Legend:

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

    r13368 r13369  
    3333public: 
    3434    Keystone(): 
     35        keystoneEditingEnabled(false), 
    3536        bottom_left(-1.0,-1.0), 
    3637        bottom_right(1.0,-1.0), 
     
    4950    { 
    5051        if (&rhs==this) return *this; 
     52        keystoneEditingEnabled = rhs.keystoneEditingEnabled; 
    5153        bottom_left = rhs.bottom_left; 
    5254        bottom_right = rhs.bottom_right; 
     
    5658    } 
    5759 
    58     osg::Vec2d bottom_left; 
    59     osg::Vec2d bottom_right; 
    60     osg::Vec2d top_left; 
    61     osg::Vec2d top_right; 
     60    bool        keystoneEditingEnabled; 
     61 
     62    osg::Vec2d  bottom_left; 
     63    osg::Vec2d  bottom_right; 
     64    osg::Vec2d  top_left; 
     65    osg::Vec2d  top_right; 
    6266 
    6367    void compute3DPositions(osg::DisplaySettings* ds, osg::Vec3& tl, osg::Vec3& tr, osg::Vec3& br, osg::Vec3& bl) const 
     
    9397 
    9498    bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa); 
     99 
     100    void setKeystoneEditingEnabled(bool enabled) { if (_currentControlPoints.valid()) _currentControlPoints->keystoneEditingEnabled = enabled; } 
     101    bool getKeystoneEditingEnabled() const { return _currentControlPoints.valid() ? _currentControlPoints->keystoneEditingEnabled : false; } 
    95102 
    96103    enum Region 
     
    226233        case(osgGA::GUIEventAdapter::PUSH): 
    227234        { 
    228             osg::Vec2d scale = incrementScale(ea); 
    229             if (scale.length2()!=0.0) 
     235            if (getKeystoneEditingEnabled()) 
    230236            { 
    231                 _selectedRegion = computeRegion(ea); 
    232                 (*_startControlPoints) = (*_currentControlPoints); 
    233                 _startPosition.set(ea.getXnormalized(),ea.getYnormalized()); 
     237                osg::Vec2d scale = incrementScale(ea); 
     238                if (scale.length2()!=0.0) 
     239                { 
     240                    _selectedRegion = computeRegion(ea); 
     241                    (*_startControlPoints) = (*_currentControlPoints); 
     242                    _startPosition.set(ea.getXnormalized(),ea.getYnormalized()); 
     243                } 
     244                else 
     245                { 
     246                    _selectedRegion = NONE_SELECTED; 
     247                } 
    234248            } 
    235             else 
     249            return false; 
     250        } 
     251        case(osgGA::GUIEventAdapter::DRAG): 
     252        { 
     253            if (getKeystoneEditingEnabled()) 
     254            { 
     255                if (_selectedRegion!=NONE_SELECTED) 
     256                { 
     257                    (*_currentControlPoints) = (*_startControlPoints); 
     258                    osg::Vec2d currentPosition(ea.getXnormalized(), ea.getYnormalized()); 
     259                    osg::Vec2d delta(currentPosition-_startPosition); 
     260                    osg::Vec2d scale = incrementScale(ea); 
     261                    move(_selectedRegion, osg::Vec2d(delta.x()*scale.x(), delta.y()*scale.y()) ); 
     262                    return true; 
     263                } 
     264            } 
     265            return false; 
     266        } 
     267        case(osgGA::GUIEventAdapter::RELEASE): 
     268        { 
     269            if (getKeystoneEditingEnabled()) 
    236270            { 
    237271                _selectedRegion = NONE_SELECTED; 
     
    239273            return false; 
    240274        } 
    241         case(osgGA::GUIEventAdapter::DRAG): 
    242         { 
    243             if (_selectedRegion!=NONE_SELECTED) 
     275        case(osgGA::GUIEventAdapter::KEYDOWN): 
     276        { 
     277            if (getKeystoneEditingEnabled()) 
    244278            { 
    245                 (*_currentControlPoints) = (*_startControlPoints); 
    246                 osg::Vec2d currentPosition(ea.getXnormalized(), ea.getYnormalized()); 
    247                 osg::Vec2d delta(currentPosition-_startPosition); 
    248                 osg::Vec2d scale = incrementScale(ea); 
    249                 move(_selectedRegion, osg::Vec2d(delta.x()*scale.x(), delta.y()*scale.y()) ); 
    250                 return true; 
     279                if (ea.getUnmodifiedKey()=='g' && (ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_LEFT_CTRL || ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_RIGHT_CTRL)) 
     280                { 
     281                    setKeystoneEditingEnabled(false); 
     282                } 
     283                else if (ea.getKey()=='r') 
     284                { 
     285                    _selectedRegion = NONE_SELECTED; 
     286                    _startControlPoints->reset(); 
     287                    _currentControlPoints->reset(); 
     288                } 
     289                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up) 
     290                { 
     291                    move(computeRegion(ea), osg::Vec2d(0.0, _keyIncrement.y()*incrementScale(ea).y()) ); 
     292                } 
     293                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down) 
     294                { 
     295                    move(computeRegion(ea), osg::Vec2d(0.0, -_keyIncrement.y()*incrementScale(ea).y()) ); 
     296                } 
     297                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Left) 
     298                { 
     299                    move(computeRegion(ea), osg::Vec2d(-_keyIncrement.x()*incrementScale(ea).x(), 0.0) ); 
     300                } 
     301                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Right) 
     302                { 
     303                    move(computeRegion(ea), osg::Vec2d(_keyIncrement.x()*incrementScale(ea).x(), 0.0) ); 
     304                } 
     305                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_7 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Home) 
     306                { 
     307                    _currentControlPoints->top_left.set(ea.getXnormalized(), ea.getYnormalized()); 
     308                } 
     309                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_9 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Up) 
     310                { 
     311                    _currentControlPoints->top_right.set(ea.getXnormalized(), ea.getYnormalized()); 
     312                } 
     313                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_3 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Down) 
     314                { 
     315                    _currentControlPoints->bottom_right.set(ea.getXnormalized(), ea.getYnormalized()); 
     316                } 
     317                else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_1 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_End) 
     318                { 
     319                    _currentControlPoints->bottom_left.set(ea.getXnormalized(), ea.getYnormalized()); 
     320                } 
    251321            } 
    252  
    253             return false; 
    254         } 
    255         case(osgGA::GUIEventAdapter::RELEASE): 
    256         { 
    257             _selectedRegion = NONE_SELECTED; 
    258             return false; 
    259         } 
    260         case(osgGA::GUIEventAdapter::KEYDOWN): 
    261         { 
    262             if (ea.getKey()=='r') 
     322            else if (ea.getUnmodifiedKey()=='g' && (ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_LEFT_CTRL || ea.getModKeyMask()==osgGA::GUIEventAdapter::MODKEY_RIGHT_CTRL)) 
    263323            { 
    264                 _selectedRegion = NONE_SELECTED; 
    265                 _startControlPoints->reset(); 
    266                 _currentControlPoints->reset(); 
    267             } 
    268             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up) 
    269             { 
    270                 move(computeRegion(ea), osg::Vec2d(0.0, _keyIncrement.y()*incrementScale(ea).y()) ); 
    271             } 
    272             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down) 
    273             { 
    274                 move(computeRegion(ea), osg::Vec2d(0.0, -_keyIncrement.y()*incrementScale(ea).y()) ); 
    275             } 
    276             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Left) 
    277             { 
    278                 move(computeRegion(ea), osg::Vec2d(-_keyIncrement.x()*incrementScale(ea).x(), 0.0) ); 
    279             } 
    280             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Right) 
    281             { 
    282                 move(computeRegion(ea), osg::Vec2d(_keyIncrement.x()*incrementScale(ea).x(), 0.0) ); 
    283             } 
    284             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_7 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Home) 
    285             { 
    286                 _currentControlPoints->top_left.set(ea.getXnormalized(), ea.getYnormalized()); 
    287             } 
    288             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_9 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Up) 
    289             { 
    290                 _currentControlPoints->top_right.set(ea.getXnormalized(), ea.getYnormalized()); 
    291             } 
    292             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_3 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Page_Down) 
    293             { 
    294                 _currentControlPoints->bottom_right.set(ea.getXnormalized(), ea.getYnormalized()); 
    295             } 
    296             else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_1 || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_End) 
    297             { 
    298                 _currentControlPoints->bottom_left.set(ea.getXnormalized(), ea.getYnormalized()); 
    299             } 
    300             else 
    301             { 
    302                 OSG_NOTICE<<"key = 0x"<<std::hex<<ea.getKey()<<std::dec<<std::endl; 
     324                setKeystoneEditingEnabled(true); 
    303325            } 
    304326            return false; 
     
    308330    } 
    309331} 
     332struct KeystoneCullCallback : public osg::Drawable::CullCallback 
     333{ 
     334    KeystoneCullCallback(Keystone* keystone=0):_keystone(keystone) {} 
     335    KeystoneCullCallback(const KeystoneCullCallback&, const osg::CopyOp&) {} 
     336 
     337    META_Object(osg,KeystoneCullCallback); 
     338 
     339    /** do customized cull code, return true if drawable should be culled.*/ 
     340    virtual bool cull(osg::NodeVisitor* nv, osg::Drawable* drawable, osg::RenderInfo* renderInfo) const 
     341    { 
     342        return _keystone.valid() ? !_keystone->keystoneEditingEnabled : true; 
     343    } 
     344 
     345    osg::ref_ptr<Keystone> _keystone; 
     346}; 
     347 
    310348 
    311349struct KeystoneUpdateCallback : public osg::Drawable::UpdateCallback 
     
    429467    osg::ref_ptr<KeystoneUpdateCallback> kuc = new KeystoneUpdateCallback(keystone); 
    430468    geometry->setUpdateCallback(kuc.get()); 
     469 
     470    geometry->setCullCallback(new KeystoneCullCallback(keystone)); 
    431471 
    432472    osg::ref_ptr<osg::Vec4Array> colours = new osg::Vec4Array;