00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _ROBOT_GFX_LOOKATCAMERAMANIPULATOR_
00026 #define _ROBOT_GFX_LOOKATCAMERAMANIPULATOR_
00027
00028 #include <gfx/gfx>
00029
00030 #include <osgGA/MatrixManipulator>
00031
00032
00033 namespace gfx {
00034
00035
00036
00037 class LookAtCameraManipulator : public osgGA::MatrixManipulator
00038 {
00039 public:
00040 LookAtCameraManipulator(Real alpha = 90, Real theta=10, Real d=5, Real targetx = 0, Real targety = 0, Real targetz = 0);
00041 virtual ~LookAtCameraManipulator();
00042
00043 void setAlpha(Real alpha) { this->alpha = Math::degToRad(alpha); }
00044 void setTheta(Real theta) { this->theta = Math::degToRad(theta); }
00045 void setD(Real d) { this->d = d; }
00046 Real getAlpha() const { return Math::radToDeg(alpha); }
00047 Real getTheta() const { return Math::radToDeg(theta); }
00048 Real getD() const { return d; }
00049
00050
00051 void setTarget(Real targetx, Real targety, Real targetz)
00052 {
00053 target[0] = targetx;
00054 target[1] = targety;
00055 target[2] = targetz;
00056 }
00057
00058 Point3 getTarget() const
00059 {
00060 return Point3(target[0], target[1], target[2]);
00061 }
00062
00063
00064 void trackingEnable() { tracking=true; }
00065 void trackingDisable() { tracking=false; }
00066
00067 bool trackingEnabled() const { return tracking; }
00068
00069
00070
00071
00072
00073 virtual void setNode(osg::Node*);
00074
00075
00076 virtual const osg::Node* getNode() const;
00077
00078
00079 virtual osg::Node* getNode();
00080
00081
00082
00083 virtual void home(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& us);
00084
00085
00086 virtual void init(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& us);
00087
00088
00089
00090 virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& us);
00091
00092 virtual osg::Matrixd getMatrix() const;
00093 virtual osg::Matrixd getInverseMatrix() const;
00094 virtual void setByMatrix(const osg::Matrixd& matrix);
00095 virtual void setByInverseMatrix(const osg::Matrixd& matrix);
00096
00097
00098 protected:
00099 osg::Vec3 target;
00100 bool tracking;
00101
00102 Real alpha;
00103 Real theta;
00104 Real d;
00105
00106 Real halpha;
00107 Real htheta;
00108 Real hd;
00109
00110
00111 Real x,y;
00112 Real ialpha, itheta, id;
00113 osg::Vec3 itarget;
00114
00115 osg::Vec3 calcPos() const;
00116
00117
00118 };
00119
00120 }
00121
00122 #endif
00123