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
00031
00032 #ifndef TrackballManipulator_INCLUDE_ONCE
00033 #define TrackballManipulator_INCLUDE_ONCE
00034
00035 #include <vlGraphics/UIEventListener.hpp>
00036 #include <vlGraphics/Camera.hpp>
00037 #include <vlCore/Vector3.hpp>
00038
00039 namespace vl
00040 {
00041 class Transform;
00042 class Rendering;
00043 class SceneManager;
00044 class ActorCollection;
00045
00046
00047
00048
00061 class VLGRAPHICS_EXPORT TrackballManipulator: public UIEventListener
00062 {
00063 VL_INSTRUMENT_CLASS(vl::TrackballManipulator, UIEventListener)
00064
00065 public:
00066 typedef enum { NoMode, RotationMode, TranslationMode, ZoomMode } ETrackballMode;
00067
00068 public:
00070 TrackballManipulator(): mMode(NoMode),
00071 mRotationButton(LeftButton), mTranslationButton(MiddleButton), mZoomButton(RightButton),
00072 mRotationSpeed(1.0f), mTranslationSpeed(1.0f), mZoomSpeed(1.0f)
00073 {
00074 VL_DEBUG_SET_OBJECT_NAME()
00075 }
00076
00077
00078
00079 virtual void mouseDownEvent(EMouseButton, int x, int y);
00080
00081 virtual void mouseUpEvent(EMouseButton, int x, int y);
00082
00083 virtual void mouseMoveEvent(int x, int y);
00084
00085 virtual void enableEvent(bool enabled);
00086
00087 virtual void initEvent() {}
00088
00089 virtual void destroyEvent() {}
00090
00091 virtual void updateEvent() {}
00092
00093 virtual void addedListenerEvent(OpenGLContext*) {}
00094
00095 virtual void removedListenerEvent(OpenGLContext*) {}
00096
00097 virtual void mouseWheelEvent(int) {}
00098
00099 virtual void keyPressEvent(unsigned short, EKey) {}
00100
00101 virtual void keyReleaseEvent(unsigned short, EKey) {}
00102
00103 virtual void resizeEvent(int, int) {}
00104
00105 virtual void fileDroppedEvent(const std::vector<String>&) {}
00106
00107 virtual void visibilityEvent(bool) {}
00108
00109
00110
00112 void setCamera(Camera* camera) { mCamera = camera; }
00113
00115 Camera* camera() { return mCamera.get(); }
00116
00118 void setPivot(vec3 pivot) { mPivot = pivot; }
00119
00121 vec3 pivot() const { return mPivot; }
00122
00124 void setTransform(Transform* tr) { mTransform = tr; }
00125
00127 Transform* transform() { return mTransform.get(); }
00128
00130 int rotationButton() const { return mRotationButton; }
00131
00133 void setRotationButton(int mouse_button) { mRotationButton = mouse_button; }
00134
00136 int zoomButton() const { return mZoomButton; }
00137
00139 void setZoomButton(int mouse_button) { mZoomButton = mouse_button; }
00140
00142 int translationButton() const { return mTranslationButton; }
00143
00145 void setTranslationButton(int mouse_button) { mTranslationButton = mouse_button; }
00146
00148 float rotationSpeed() const { return mRotationSpeed; }
00149
00151 void setRotationSpeed(float speed) { mRotationSpeed = speed; }
00152
00154 float zoomSpeed() const { return mZoomSpeed; }
00155
00157 void setZoomSpeed(float speed) { mZoomSpeed = speed; }
00158
00160 float translationSpeed() const { return mTranslationSpeed; }
00161
00163 void setTranslationSpeed(float speed) { mTranslationSpeed = speed; }
00164
00166 void adjustView(const AABB& aabb, const vec3& dir, const vec3& up, real bias=1.0f);
00167
00169 void adjustView(ActorCollection& actors, const vec3& dir, const vec3& up, real bias=1.0f);
00170
00172 void adjustView(SceneManager* scene, const vec3& dir, const vec3& up, real bias=1.0f);
00173
00175 void adjustView(Rendering* rendering, const vec3& dir, const vec3& up, real bias=1.0f);
00176
00177
00178
00179 mat4 trackballRotation(int x, int y);
00180
00181 vec3 computeVector(int x, int y);
00182
00184 ETrackballMode mode() const { return mMode; }
00185
00186 protected:
00187 ref<Camera> mCamera;
00188 ivec2 mMouseStart;
00189 mat4 mStartMatrix;
00190 vec3 mPivot;
00191 vec3 mStartCameraPos;
00192 vec3 mStartPivot;
00193 ref<Transform> mTransform;
00194 ETrackballMode mMode;
00195 int mRotationButton;
00196 int mTranslationButton;
00197 int mZoomButton;
00198 float mRotationSpeed;
00199 float mTranslationSpeed;
00200 float mZoomSpeed;
00201 };
00202 }
00203
00204 #endif