OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
cameracontroller.hpp
Go to the documentation of this file.
1 #ifndef OPENCS_VIEW_CAMERACONTROLLER_H
2 #define OPENCS_VIEW_CAMERACONTROLLER_H
3 
4 #include <string>
5 #include <vector>
6 
7 #include <QObject>
8 
9 #include <osg/ref_ptr>
10 #include <osg/Vec3d>
11 
12 namespace osg
13 {
14  class Camera;
15  class Group;
16 }
17 
18 namespace CSMPrefs
19 {
20  class Shortcut;
21 }
22 
23 namespace CSVRender
24 {
25  class SceneWidget;
26 
27  class CameraController : public QObject
28  {
29  Q_OBJECT
30 
31  public:
32 
33  static const osg::Vec3d WorldUp;
34 
35  static const osg::Vec3d LocalUp;
36  static const osg::Vec3d LocalLeft;
37  static const osg::Vec3d LocalForward;
38 
39  CameraController(QObject* parent);
40  virtual ~CameraController();
41 
42  bool isActive() const;
43 
44  osg::Camera* getCamera() const;
45  double getCameraSensitivity() const;
46  bool getInverted() const;
47  double getSecondaryMovementMultiplier() const;
48  double getWheelMovementMultiplier() const;
49 
50  void setCamera(osg::Camera*);
51  void setCameraSensitivity(double value);
52  void setInverted(bool value);
53  void setSecondaryMovementMultiplier(double value);
54  void setWheelMovementMultiplier(double value);
55 
56  // moves the camera to an intelligent position
57  void setup(osg::Group* root, unsigned int mask, const osg::Vec3d& up);
58 
59  virtual void handleMouseMoveEvent(int x, int y) = 0;
60  virtual void handleMouseScrollEvent(int x) = 0;
61 
62  virtual void update(double dt) = 0;
63 
64  protected:
65 
66  void addShortcut(CSMPrefs::Shortcut* shortcut);
67 
68  private:
69 
74 
75  osg::Camera* mCamera;
76 
77  std::vector<CSMPrefs::Shortcut*> mShortcuts;
78  };
79 
81  {
82  Q_OBJECT
83 
84  public:
85 
87 
88  double getLinearSpeed() const;
89  double getRotationalSpeed() const;
90  double getSpeedMultiplier() const;
91 
92  void setLinearSpeed(double value);
93  void setRotationalSpeed(double value);
94  void setSpeedMultiplier(double value);
95 
96  void fixUpAxis(const osg::Vec3d& up);
97  void unfixUpAxis();
98 
99  void handleMouseMoveEvent(int x, int y);
100  void handleMouseScrollEvent(int x);
101 
102  void update(double dt);
103 
104  private:
105 
106  void yaw(double value);
107  void pitch(double value);
108  void roll(double value);
109  void translate(const osg::Vec3d& offset);
110 
111  void stabilize();
112 
117  osg::Vec3d mUp;
118 
119  double mLinSpeed;
120  double mRotSpeed;
121  double mSpeedMult;
122 
123  private slots:
124 
125  void naviPrimary(bool active);
126  void naviSecondary(bool active);
127  void forward(bool active);
128  void left(bool active);
129  void backward(bool active);
130  void right(bool active);
131  void rollLeft(bool active);
132  void rollRight(bool active);
133  void alternateFast(bool active);
134  void swapSpeedMode();
135  };
136 
138  {
139  Q_OBJECT
140 
141  public:
142 
144 
145  osg::Vec3d getCenter() const;
146  double getOrbitSpeed() const;
147  double getOrbitSpeedMultiplier() const;
148  unsigned int getPickingMask() const;
149 
150  void setCenter(const osg::Vec3d& center);
151  void setOrbitSpeed(double value);
152  void setOrbitSpeedMultiplier(double value);
153  void setPickingMask(unsigned int value);
154 
155  void handleMouseMoveEvent(int x, int y);
156  void handleMouseScrollEvent(int x);
157 
158  void update(double dt);
159 
161  void reset();
162 
163  void setConstRoll(bool enable);
164 
165  private:
166 
167  void initialize();
168 
169  void rotateHorizontal(double value);
170  void rotateVertical(double value);
171  void roll(double value);
172  void translate(const osg::Vec3d& offset);
173  void zoom(double value);
174 
179  unsigned int mPickingMask;
180  osg::Vec3d mCenter;
181  double mDistance;
182 
183  double mOrbitSpeed;
185 
187 
188  private slots:
189 
190  void naviPrimary(bool active);
191  void naviSecondary(bool active);
192  void up(bool active);
193  void left(bool active);
194  void down(bool active);
195  void right(bool active);
196  void rollLeft(bool active);
197  void rollRight(bool active);
198  void alternateFast(bool active);
199  void swapSpeedMode();
200  };
201 }
202 
203 #endif
unsigned int mPickingMask
Definition: cameracontroller.hpp:179
double mOrbitSpeed
Definition: cameracontroller.hpp:183
void rotateVertical(double value)
Definition: cameracontroller.cpp:693
void setSpeedMultiplier(double value)
Definition: cameracontroller.cpp:262
void forward(bool active)
Definition: cameracontroller.cpp:404
void handleMouseScrollEvent(int x)
Definition: cameracontroller.cpp:596
bool mLeft
Definition: cameracontroller.hpp:178
double getLinearSpeed() const
Definition: cameracontroller.cpp:237
void translate(const osg::Vec3d &offset)
Definition: cameracontroller.cpp:381
bool mForward
Definition: cameracontroller.hpp:116
unsigned int getPickingMask() const
Definition: cameracontroller.cpp:539
bool isActive() const
Definition: cameracontroller.cpp:49
bool getInverted() const
Definition: cameracontroller.cpp:64
void setCenter(const osg::Vec3d &center)
Definition: cameracontroller.cpp:544
void setConstRoll(bool enable)
Definition: cameracontroller.cpp:672
bool mUp
Definition: cameracontroller.hpp:178
double mCameraSensitivity
Definition: cameracontroller.hpp:71
OrbitCameraController(QWidget *parent)
Definition: cameracontroller.cpp:448
void left(bool active)
Definition: cameracontroller.cpp:755
osg::Vec3d getCenter() const
Definition: cameracontroller.cpp:524
void alternateFast(bool active)
Definition: cameracontroller.cpp:434
double getSecondaryMovementMultiplier() const
Definition: cameracontroller.cpp:69
void setWheelMovementMultiplier(double value)
Definition: cameracontroller.cpp:111
bool mInitialized
Definition: cameracontroller.hpp:175
bool mActive
Definition: cameracontroller.hpp:70
bool mConstRoll
Definition: cameracontroller.hpp:186
FreeCameraController(QWidget *parent)
Definition: cameracontroller.cpp:161
double getCameraSensitivity() const
Definition: cameracontroller.cpp:59
bool mFast
Definition: cameracontroller.hpp:115
void naviPrimary(bool active)
Definition: cameracontroller.cpp:394
void setup(osg::Group *root, unsigned int mask, const osg::Vec3d &up)
Definition: cameracontroller.cpp:116
bool mLockUpright
Definition: cameracontroller.hpp:113
bool mNaviPrimary
Definition: cameracontroller.hpp:114
void rotateHorizontal(double value)
Definition: cameracontroller.cpp:677
bool mFastAlternate
Definition: cameracontroller.hpp:115
bool mRight
Definition: cameracontroller.hpp:116
static const osg::Vec3d LocalForward
Definition: cameracontroller.hpp:37
void naviSecondary(bool active)
Definition: cameracontroller.cpp:745
void setCamera(osg::Camera *)
Definition: cameracontroller.cpp:79
static const osg::Vec3d WorldUp
Definition: cameracontroller.hpp:33
osg::Camera * mCamera
Definition: cameracontroller.hpp:75
void roll(double value)
Definition: cameracontroller.cpp:711
void rollRight(bool active)
Definition: cameracontroller.cpp:776
bool mNaviSecondary
Definition: cameracontroller.hpp:176
Definition: cameracontroller.hpp:27
void rollLeft(bool active)
Definition: cameracontroller.cpp:424
void backward(bool active)
Definition: cameracontroller.cpp:414
void setCameraSensitivity(double value)
Definition: cameracontroller.cpp:96
double getOrbitSpeedMultiplier() const
Definition: cameracontroller.cpp:534
void addShortcut(CSMPrefs::Shortcut *shortcut)
Definition: cameracontroller.cpp:152
virtual void update(double dt)=0
osg::Vec3d mUp
Definition: cameracontroller.hpp:117
void handleMouseScrollEvent(int x)
Definition: cameracontroller.cpp:300
void setPickingMask(unsigned int value)
Definition: cameracontroller.cpp:567
void up(bool active)
Definition: cameracontroller.cpp:750
bool mLeft
Definition: cameracontroller.hpp:116
double mDistance
Definition: cameracontroller.hpp:181
bool mRollRight
Definition: cameracontroller.hpp:116
bool mNaviSecondary
Definition: cameracontroller.hpp:114
bool mNaviPrimary
Definition: cameracontroller.hpp:176
double getRotationalSpeed() const
Definition: cameracontroller.cpp:242
void rollRight(bool active)
Definition: cameracontroller.cpp:429
void fixUpAxis(const osg::Vec3d &up)
Definition: cameracontroller.cpp:267
virtual void handleMouseScrollEvent(int x)=0
Definition: cameracontroller.hpp:80
bool mInverted
Definition: cameracontroller.hpp:70
double mLinSpeed
Definition: cameracontroller.hpp:119
void initialize()
Definition: cameracontroller.cpp:640
virtual void handleMouseMoveEvent(int x, int y)=0
static const osg::Vec3d LocalLeft
Definition: cameracontroller.hpp:36
void right(bool active)
Definition: cameracontroller.cpp:765
void setInverted(bool value)
Definition: cameracontroller.cpp:101
void naviPrimary(bool active)
Definition: cameracontroller.cpp:740
double getWheelMovementMultiplier() const
Definition: cameracontroller.cpp:74
double mSpeedMult
Definition: cameracontroller.hpp:121
void swapSpeedMode()
Definition: cameracontroller.cpp:439
Definition: cameracontroller.hpp:137
void stabilize()
Definition: cameracontroller.cpp:387
void pitch(double value)
Definition: cameracontroller.cpp:351
void right(bool active)
Definition: cameracontroller.cpp:419
bool mDown
Definition: cameracontroller.hpp:178
double getSpeedMultiplier() const
Definition: cameracontroller.cpp:247
osg::Vec3d mCenter
Definition: cameracontroller.hpp:180
osg::Camera * getCamera() const
Definition: cameracontroller.cpp:54
double mRotSpeed
Definition: cameracontroller.hpp:120
bool mFastAlternate
Definition: cameracontroller.hpp:177
void setOrbitSpeed(double value)
Definition: cameracontroller.cpp:557
bool mFast
Definition: cameracontroller.hpp:177
void update(double dt)
Definition: cameracontroller.cpp:604
bool mRollLeft
Definition: cameracontroller.hpp:178
double mWheelMoveMult
Definition: cameracontroller.hpp:73
void handleMouseMoveEvent(int x, int y)
Definition: cameracontroller.cpp:279
void handleMouseMoveEvent(int x, int y)
Definition: cameracontroller.cpp:572
void alternateFast(bool active)
Definition: cameracontroller.cpp:781
double getOrbitSpeed() const
Definition: cameracontroller.cpp:529
bool mRollLeft
Definition: cameracontroller.hpp:116
void setLinearSpeed(double value)
Definition: cameracontroller.cpp:252
bool mBackward
Definition: cameracontroller.hpp:116
void setOrbitSpeedMultiplier(double value)
Definition: cameracontroller.cpp:562
void rollLeft(bool active)
Definition: cameracontroller.cpp:770
void swapSpeedMode()
Definition: cameracontroller.cpp:786
void zoom(double value)
Definition: cameracontroller.cpp:728
void setSecondaryMovementMultiplier(double value)
Definition: cameracontroller.cpp:106
void unfixUpAxis()
Definition: cameracontroller.cpp:274
bool mRight
Definition: cameracontroller.hpp:178
void enable(CodeContainer &code, Literals &literals, const std::string &id)
Definition: generator.cpp:870
double mOrbitSpeedMult
Definition: cameracontroller.hpp:184
void yaw(double value)
Definition: cameracontroller.cpp:345
void naviSecondary(bool active)
Definition: cameracontroller.cpp:399
void reset()
Flag controller to be re-initialized.
Definition: cameracontroller.cpp:635
void update(double dt)
Definition: cameracontroller.cpp:308
A class similar in purpose to QShortcut, but with the ability to use mouse buttons.
Definition: shortcut.hpp:16
double mSecondaryMoveMult
Definition: cameracontroller.hpp:72
void setRotationalSpeed(double value)
Definition: cameracontroller.cpp:257
CameraController(QObject *parent)
Definition: cameracontroller.cpp:34
bool mRollRight
Definition: cameracontroller.hpp:178
static const osg::Vec3d LocalUp
Definition: cameracontroller.hpp:35
void translate(const osg::Vec3d &offset)
Definition: cameracontroller.cpp:716
void down(bool active)
Definition: cameracontroller.cpp:760
virtual ~CameraController()
Definition: cameracontroller.cpp:45
void left(bool active)
Definition: cameracontroller.cpp:409
std::vector< CSMPrefs::Shortcut * > mShortcuts
Definition: cameracontroller.hpp:77
void roll(double value)
Definition: cameracontroller.cpp:375
bool mModified
Definition: cameracontroller.hpp:113