Go to the documentation of this file.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
00026
00027
00028
00029
00030 #ifndef OGRE_TOOLS_ORBIT_CAMERA_H_
00031 #define OGRE_TOOLS_ORBIT_CAMERA_H_
00032
00033 #include "camera_base.h"
00034 #include <OgreVector3.h>
00035
00036 namespace Ogre
00037 {
00038 class Camera;
00039 class SceneNode;
00040 class SceneManager;
00041 }
00042
00043 namespace rviz
00044 {
00045
00046 class Shape;
00047
00062 class OrbitCamera : public CameraBase
00063 {
00064 public:
00065 OrbitCamera( Ogre::SceneManager* scene_manager );
00066 virtual ~OrbitCamera();
00067
00072 void zoom( float amount );
00077 void setFocalPoint( const Ogre::Vector3& focal_point );
00078
00079 float getPitch() { return pitch_; }
00080 float getYaw() { return yaw_; }
00081 float getDistance() { return distance_; }
00082 const Ogre::Vector3& getFocalPoint() { return focal_point_; }
00083
00084 virtual void setFrom( CameraBase* camera );
00085 virtual void yaw( float angle );
00086 virtual void pitch( float angle );
00087 virtual void roll( float angle );
00088 virtual void setOrientation( float x, float y, float z, float w );
00089 virtual void setPosition( float x, float y, float z );
00090 virtual void move( float x, float y, float z );
00091
00092 virtual Ogre::Vector3 getPosition();
00093 virtual Ogre::Quaternion getOrientation();
00094
00095 virtual void lookAt( const Ogre::Vector3& point );
00096
00097 virtual void mouseLeftDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00098 virtual void mouseMiddleDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00099 virtual void mouseRightDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00100 virtual void scrollWheel( int diff, bool ctrl, bool alt, bool shift );
00101
00105 virtual void update();
00106
00107 virtual void mouseLeftDown( int x, int y );
00108 virtual void mouseMiddleDown( int x, int y );
00109 virtual void mouseRightDown( int x, int y );
00110 virtual void mouseLeftUp( int x, int y );
00111 virtual void mouseMiddleUp( int x, int y );
00112 virtual void mouseRightUp( int x, int y );
00113
00114 virtual void fromString(const std::string& str);
00115 virtual std::string toString();
00116
00117 private:
00118
00119 Ogre::Vector3 getGlobalFocalPoint();
00120
00125 void calculatePitchYawFromPosition( const Ogre::Vector3& position );
00129 void normalizePitch();
00133 void normalizeYaw();
00134
00135 Ogre::Vector3 focal_point_;
00136 float yaw_;
00137 float pitch_;
00138 float distance_;
00139
00140 Shape* focal_point_object_;
00141 };
00142
00143 }
00144
00145 #endif