diff --git a/include/osgGA/FirstPersonManipulator b/include/osgGA/FirstPersonManipulator index dafb815a0..b0326380b 100644 --- a/include/osgGA/FirstPersonManipulator +++ b/include/osgGA/FirstPersonManipulator @@ -45,9 +45,9 @@ class OSGGA_EXPORT FirstPersonManipulator : public StandardManipulator virtual osg::Matrixd getInverseMatrix() const; virtual void setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation ); - virtual void setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ); + virtual void setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ); virtual void getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) const; - virtual void getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) const; + virtual void getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const; virtual void setVelocity( const double& velocity ); inline double getVelocity() const; diff --git a/include/osgGA/OrbitManipulator b/include/osgGA/OrbitManipulator index b6a31699b..8cb633444 100644 --- a/include/osgGA/OrbitManipulator +++ b/include/osgGA/OrbitManipulator @@ -46,9 +46,9 @@ class OSGGA_EXPORT OrbitManipulator : public StandardManipulator virtual osg::Matrixd getInverseMatrix() const; virtual void setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation ); - virtual void setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ); + virtual void setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ); virtual void getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) const; - virtual void getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) const; + virtual void getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const; void setHeading( double azimuth ); double getHeading() const; diff --git a/include/osgGA/StandardManipulator b/include/osgGA/StandardManipulator index 974f2816f..0695da4ba 100644 --- a/include/osgGA/StandardManipulator +++ b/include/osgGA/StandardManipulator @@ -51,10 +51,17 @@ class OSGGA_EXPORT StandardManipulator : public CameraManipulator // Use META_Object(osgGA,YourManipulator); in your descendant non-abstract classes. virtual const char* className() const { return "StandardManipulator"; } + /** Sets manipulator by eye position and eye orientation.*/ virtual void setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation ) = 0; - virtual void setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ) = 0; + + /** Sets manipulator by eye position, center of rotation, and up vector.*/ + virtual void setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ) = 0; + + /** Gets manipulator's eye position and eye orientation.*/ virtual void getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) const = 0; - virtual void getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) const = 0; + + /** Gets manipulator's focal center, eye position, and up vector.*/ + virtual void getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const = 0; virtual void setNode( osg::Node* ); virtual const osg::Node* getNode() const; diff --git a/src/osgGA/FirstPersonManipulator.cpp b/src/osgGA/FirstPersonManipulator.cpp index ecd27950d..a6ac38c62 100644 --- a/src/osgGA/FirstPersonManipulator.cpp +++ b/src/osgGA/FirstPersonManipulator.cpp @@ -112,7 +112,7 @@ void FirstPersonManipulator::getTransformation( osg::Vec3d& eye, osg::Quat& rota // doc in parent -void FirstPersonManipulator::setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ) +void FirstPersonManipulator::setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ) { // set variables osg::Matrixd m( osg::Matrixd::lookAt( eye, center, up ) ); @@ -126,7 +126,7 @@ void FirstPersonManipulator::setTransformation( const osg::Vec3d& center, const // doc in parent -void FirstPersonManipulator::getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) const +void FirstPersonManipulator::getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const { center = _eye + _rotation * osg::Vec3d( 0.,0.,-1. ); eye = _eye; diff --git a/src/osgGA/OrbitManipulator.cpp b/src/osgGA/OrbitManipulator.cpp index d58e6ffa6..e4f31bb91 100644 --- a/src/osgGA/OrbitManipulator.cpp +++ b/src/osgGA/OrbitManipulator.cpp @@ -113,7 +113,7 @@ void OrbitManipulator::getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) // doc in parent -void OrbitManipulator::setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ) +void OrbitManipulator::setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ) { Vec3d lv( center - eye ); @@ -140,7 +140,7 @@ void OrbitManipulator::setTransformation( const osg::Vec3d& center, const osg::V // doc in parent -void OrbitManipulator::getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) const +void OrbitManipulator::getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const { center = _center; eye = _center + _rotation * osg::Vec3d( 0., 0., _distance ); @@ -159,7 +159,7 @@ void OrbitManipulator::setHeading( double azimuth ) Vec3d dir = Quat( getElevation(), localRight ) * Quat( azimuth, localUp ) * Vec3d( 0., -_distance, 0. ); - setTransformation( _center, _center + dir, localUp ); + setTransformation( _center + dir, _center, localUp ); } @@ -171,7 +171,7 @@ double OrbitManipulator::getHeading() const Vec3d localRight = getSideVector( coordinateFrame ); Vec3d center, eye, tmp; - getTransformation( center, eye, tmp ); + getTransformation( eye, center, tmp ); Plane frontPlane( localFront, center ); double frontDist = frontPlane.distance( eye ); @@ -193,7 +193,7 @@ void OrbitManipulator::setElevation( double elevation ) Vec3d dir = Quat( -elevation, localRight ) * Quat( getHeading(), localUp ) * Vec3d( 0., -_distance, 0. ); - setTransformation( _center, _center + dir, localUp ); + setTransformation( _center + dir, _center, localUp ); } @@ -205,7 +205,7 @@ double OrbitManipulator::getElevation() const localUp.normalize(); Vec3d center, eye, tmp; - getTransformation( center, eye, tmp ); + getTransformation( eye, center, tmp ); Plane plane( localUp, center ); double dist = plane.distance( eye ); @@ -324,7 +324,7 @@ void OrbitManipulator::applyAnimationStep( const double currentProgress, const d // compute new center osg::Vec3d prevCenter, prevEye, prevUp; - getTransformation( prevCenter, prevEye, prevUp ); + getTransformation( prevEye, prevCenter, prevUp ); osg::Vec3d newCenter = osg::Vec3d(prevCenter) + (ad->_movement * (currentProgress - prevProgress)); // fix vertical axis @@ -338,7 +338,7 @@ void OrbitManipulator::applyAnimationStep( const double currentProgress, const d } // apply new transformation - setTransformation( newCenter, prevEye, prevUp ); + setTransformation( prevEye, newCenter, prevUp ); } @@ -347,7 +347,7 @@ bool OrbitManipulator::startAnimationByMousePointerIntersection( { // get current transformation osg::Vec3d prevCenter, prevEye, prevUp; - getTransformation( prevCenter, prevEye, prevUp ); + getTransformation( prevEye, prevCenter, prevUp ); // center by mouse intersection if( !setCenterByMousePointerIntersection( ea, us ) ) @@ -358,7 +358,7 @@ bool OrbitManipulator::startAnimationByMousePointerIntersection( // setup animation data and restore original transformation ad->start( osg::Vec3d(_center) - prevCenter, ea.getTime() ); - setTransformation( prevCenter, prevEye, prevUp ); + setTransformation( prevEye, prevCenter, prevUp ); return true; } diff --git a/src/osgGA/StandardManipulator.cpp b/src/osgGA/StandardManipulator.cpp index ad1d8370c..a02db4b75 100644 --- a/src/osgGA/StandardManipulator.cpp +++ b/src/osgGA/StandardManipulator.cpp @@ -23,24 +23,8 @@ using namespace osg; using namespace osgGA; using namespace osgUtil; - - -/** \fn void StandardManipulator::setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation ) - Sets manipulator by eye position and eye orientation.*/ - -/** \fn void StandardManipulator::setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ) - Sets manipulator by focal center, eye position, and up vector.*/ - -/** \fn void StandardManipulator::getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) - Gets manipulator's eye position and eye orientation.*/ - -/** \fn void StandardManipulator::getTransformation( osg::Vec3d& center, osg::Vec3d& eye, osg::Vec3d& up ) - Gets manipulator's focal center, eye position, and up vector.*/ - - int StandardManipulator::numRelativeFlagsAllocated = 0; - int StandardManipulator::allocateRelativeFlag() { return numRelativeFlagsAllocated++; @@ -191,7 +175,7 @@ void StandardManipulator::home( double /*currentTime*/ ) computeHomePosition( NULL, ( _flags & COMPUTE_HOME_USING_BBOX ) != 0 ); _thrown = false; - setTransformation( _homeCenter, _homeEye, _homeUp ); + setTransformation( _homeEye, _homeCenter, _homeUp ); flushMouseEventStack(); } @@ -214,7 +198,7 @@ void StandardManipulator::home( const GUIEventAdapter& ea, GUIActionAdapter& us } _thrown = false; - setTransformation( _homeCenter, _homeEye, _homeUp ); + setTransformation( _homeEye, _homeCenter, _homeUp ); us.requestRedraw(); us.requestContinuousUpdate( false ); @@ -799,7 +783,7 @@ bool StandardManipulator::setCenterByMousePointerIntersection( const GUIEventAda // get current transformation osg::Vec3d eye, oldCenter, up; - getTransformation( oldCenter, eye, up ); + getTransformation( eye, oldCenter, up ); // new center osg::Vec3d newCenter = (*intersections.begin()).getWorldIntersectPoint(); @@ -816,7 +800,7 @@ bool StandardManipulator::setCenterByMousePointerIntersection( const GUIEventAda } // set the new center - setTransformation( newCenter, eye, up ); + setTransformation( eye, newCenter, up ); // warp pointer diff --git a/src/osgGA/TerrainManipulator.cpp b/src/osgGA/TerrainManipulator.cpp index 37a9c8348..eab41e989 100644 --- a/src/osgGA/TerrainManipulator.cpp +++ b/src/osgGA/TerrainManipulator.cpp @@ -136,7 +136,7 @@ void TerrainManipulator::setByMatrix(const Matrixd& matrix) } -void TerrainManipulator::setTransformation( const osg::Vec3d& center, const osg::Vec3d& eye, const osg::Vec3d& up ) +void TerrainManipulator::setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up ) { if (!_node) return;