void GliderManipulator::init(const GUIEventAdapter& ea,GUIActionAdapter& us) { flushMouseEventStack(); us.requestContinuousUpdate(false); _velocity = 0.2f; if (ea.getEventType()!=GUIEventAdapter::RESIZE) { us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f); } }
void DriveManipulator::home(const GUIEventAdapter& ea,GUIActionAdapter& us) { if (getAutoComputeHomePosition()) computeHomePosition(); computePosition(_homeEye, _homeCenter, _homeUp); _velocity = 0.0; _pitch = 0.0; us.requestRedraw(); us.requestContinuousUpdate(false); us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f); flushMouseEventStack(); }
void GliderManipulator::home(const GUIEventAdapter& ea,GUIActionAdapter& us) { if(_node.get()) { const osg::BoundingSphere& boundingSphere=_node->getBound(); osg::Vec3 eye = boundingSphere._center+osg::Vec3(-boundingSphere._radius*0.25f,-boundingSphere._radius*0.25f,-boundingSphere._radius*0.03f); computePosition(eye, osg::Vec3(1.0f,1.0f,-0.1f), osg::Vec3(0.0f,0.0f,1.0f)); _velocity = boundingSphere._radius*0.01f; us.requestRedraw(); us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f); flushMouseEventStack(); } }
/// Centers mouse pointer void StandardManipulator::centerMousePointer( const GUIEventAdapter& ea, GUIActionAdapter& us ) { _mouseCenterX = (ea.getXmin() + ea.getXmax()) / 2.0f; _mouseCenterY = (ea.getYmin() + ea.getYmax()) / 2.0f; us.requestWarpPointer( _mouseCenterX, _mouseCenterY ); }
void DriveManipulator::init(const GUIEventAdapter& ea,GUIActionAdapter& us) { flushMouseEventStack(); us.requestContinuousUpdate(false); _velocity = 0.0; osg::Vec3d ep = _eye; osg::CoordinateFrame cf=getCoordinateFrame(ep); Matrixd rotation_matrix; rotation_matrix.makeRotate(_rotation); osg::Vec3d sv = osg::Vec3d(1.0,0.0,0.0) * rotation_matrix; osg::Vec3d bp = ep; bp -= getUpVector(cf)*_modelScale; bool positionSet = false; osg::Vec3d ip, np; if (intersect(ep, bp, ip, np)) { osg::Vec3d uv; if (np*getUpVector(cf)>0.0) uv = np; else uv = -np; ep = ip+uv*_height; osg::Vec3d lv = uv^sv; computePosition(ep,ep+lv,uv); positionSet = true; } if (!positionSet) { bp = ep; bp += getUpVector(cf)*_modelScale; if (intersect(ep, bp, ip, np)) { osg::Vec3d uv; if (np*getUpVector(cf)>0.0f) uv = np; else uv = -np; ep = ip+uv*_height; osg::Vec3d lv = uv^sv; computePosition(ep,ep+lv,uv); positionSet = true; } } if (ea.getEventType()!=GUIEventAdapter::RESIZE) { us.requestWarpPointer((ea.getXmin()+ea.getXmax())/2.0f,(ea.getYmin()+ea.getYmax())/2.0f); } }