iMSTK
Interactive Medical Simulation Toolkit
imstkMouseSceneControl.h
1 /*
2 ** This file is part of the Interactive Medical Simulation Toolkit (iMSTK)
3 ** iMSTK is distributed under the Apache License, Version 2.0.
4 ** See accompanying NOTICE for details.
5 */
6 
7 #pragma once
8 
9 #include "imstkMouseControl.h"
10 
11 namespace imstk
12 {
13 class MouseDeviceClient;
14 class SceneManager;
15 
25 {
26 public:
27  enum class Mode
28  {
29  None,
30  Pan,
31  Rotate
32  };
33 
34  MouseSceneControl(const std::string& name = "MouseSceneControl") : MouseControl(name) { }
35  ~MouseSceneControl() override = default;
36 
40  void setZoomSpeed(const double zoomSpeed) { m_zoomSpeed = zoomSpeed; }
41 
45  void setRotateSpeed(const double rotateSpeed) { m_rotateSpeed = rotateSpeed; }
46 
50  void setPanSpeed(const double panSpeed) { m_panSpeed = panSpeed; }
51 
56  void setSceneManager(std::shared_ptr<SceneManager> manager) { m_sceneManager = manager; }
57 
61  void setEnabled(bool enable);
62 
66  bool getEnabled() const;
67 
68  void printControls() override;
69 
73  void OnButtonPress(const int key) override;
74  void OnButtonRelease(const int key) override;
75  void OnScroll(const double dx) override;
76  void OnMouseMove(const Vec2d& pos) override;
77 
78 protected:
79  std::shared_ptr<SceneManager> m_sceneManager;
80  Mode m_mode = Mode::None;
81  Vec2d m_prevPos;
82  Vec2d m_pos;
83 
84  // User changeable values
85  double m_zoomSpeed = 1.0;
86  double m_rotateSpeed = 1.0;
87  double m_panSpeed = 1.0;
88 
89  // Hardcoded values
90  double m_zoomFactor = 1.0;
91  double m_rotateFactor = 5.0;
92  double m_panFactor = 1.0;
93 
94  bool m_enabled = false;
95 };
96 } // namespace imstk
This is the base class for mouse based controls It can be constructed and observed or subclassed and ...
void OnButtonPress(const int key) override
On the mouse scene control button press.
void setEnabled(bool enable)
Enable the mouse control, independent of the debug mode.
Compound Geometry.
void setZoomSpeed(const double zoomSpeed)
Set the scroll controlled zoom speed.
void setSceneManager(std::shared_ptr< SceneManager > manager)
Set the scene manager to be controlled The active scene&#39;s camera will be controllable depending on Sc...
void printControls() override
Prints the controls.
void setPanSpeed(const double panSpeed)
Set the pan speed.
Controls the camera using trackball controls Left click rotate, middle click pan. ...
void setRotateSpeed(const double rotateSpeed)
Set the mouse controlled rotate speed.