FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
View.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 #include "FAST/Data/Color.hpp"
5 #include "Renderer.hpp"
6 #include "Plane.hpp"
7 #include <vector>
8 #include <QGLWidget>
9 #include <QTimer>
10 #include <QKeyEvent>
11 #include <QMouseEvent>
12 
13 namespace fast {
14 
15 class ComputationThread;
16 
17 class FAST_EXPORT View : public QGLWidget, public ProcessObject, protected QOpenGLFunctions_3_3_Core {
18  //FAST_OBJECT(View)
19  Q_OBJECT
20  public:
21  void addRenderer(Renderer::pointer renderer);
22  void removeRenderer(Renderer::pointer renderer);
23  void removeAllRenderers();
24  void keyPressEvent(QKeyEvent* event);
25  void mouseMoveEvent(QMouseEvent* event);
26  void mousePressEvent(QMouseEvent* event);
27  void mouseReleaseEvent(QMouseEvent* event);
28  void wheelEvent(QWheelEvent* event);
29  void setMaximumFramerate(unsigned int framerate);
30  void setCameraInputConnection(DataChannel::pointer port);
31  void set2DMode();
32  void set3DMode();
33  void setLookAt(Vector3f cameraPosition, Vector3f targetPosition, Vector3f cameraUpVector, float zNear = 0.1, float zFar = 1000);
34  void quit();
35  void reinitialize();
36  bool hasQuit() const;
37  ~View();
38  void recalculateCamera();
39  void setBackgroundColor(Color color);
40  void setAutoUpdateCamera(bool autoUpdate);
41  Vector4f getOrthoProjectionParameters();
42 
43  std::string getNameOfClass() const {
44  return "View";
45  };
46  View();
47  std::vector<Renderer::pointer> getRenderers();
48  static QGLFormat getGLFormat();
49  Matrix4f getViewMatrix() const;
50  Matrix4f getPerspectiveMatrix() const;
51  void loadAttributes() override;
56  void setZoom(float zoom);
57  private:
58  uint m_FBO = 0;
59  uint m_textureColor = 0;
60  uint m_textureDepth = 0;
61  std::vector<Renderer::pointer> mNonVolumeRenderers;
62  std::vector<Renderer::pointer> mVolumeRenderers;
63  GLuint programGLSL;
64 
65  // Camera
66  Affine3f m3DViewingTransformation;
67  Vector3f mRotationPoint;
68  Vector3f mCameraPosition;
69  bool mCameraSet;
70 
71  Matrix4f mPerspectiveMatrix;
72 
73  void execute();
74  QTimer* timer;
75  unsigned int mFramerate;
76 
77  Color mBackgroundColor;
78 
79  bool mQuit;
80 
81  float m_zoom = 1.0f;
82  float zNear, zFar;
83  float fieldOfViewX, fieldOfViewY;
84  float aspect;
85  bool mIsIn2DMode;
86  bool mAutoUpdateCamera;
87  Vector3f mBBMin, mBBMax;
88 
89  bool mLeftMouseButtonIsPressed;
90  bool mRightButtonIsPressed;
91 
92  int previousX, previousY;
93 
94  float mLeft, mRight, mBottom, mTop; // Used for ortho projection
95  float mCentroidZ;
96 
97  friend class ComputationThread;
98  protected:
99  void getMinMaxFromBoundingBoxes(bool transform, Vector3f& min, Vector3f& max);
100  void initializeGL();
101  void paintGL();
102  void resizeGL(int width, int height);
103  void updateRenderersInput(int executeToken);
104  void updateRenderers();
105  void lockRenderers();
106  void unlockRenderers();
107  void stopRenderers();
108  void resetRenderers();
109 
110  std::mutex m_mutex;
111 
112  friend class ComputationThread;
113 
114 };
115 
116 } // end namespace fast
AffineTransformation.hpp
fast::View::m_mutex
std::mutex m_mutex
Definition: View.hpp:110
fast
Definition: AffineTransformation.hpp:7
fast::View
Definition: View.hpp:17
fast::ComputationThread
Definition: ComputationThread.hpp:16
Renderer.hpp
fast::max
T max(T a, T b)
Definition: Utility.hpp:46
fast::Renderer::pointer
std::shared_ptr< Renderer > pointer
Definition: Renderer.hpp:16
fast::DataChannel::pointer
std::shared_ptr< DataChannel > pointer
Definition: DataChannel.hpp:12
fast::min
T min(T a, T b)
Definition: Utility.hpp:41
Plane.hpp
fast::View::getNameOfClass
std::string getNameOfClass() const
Definition: View.hpp:43
Color.hpp
uint
unsigned int uint
Definition: DataTypes.hpp:16
fast::Color
Definition: Color.hpp:8
fast::ProcessObject
Definition: ProcessObject.hpp:22