Walls And Holes  1
meshview.h
Go to the documentation of this file.
1 #ifndef MESHVIEW_H
2 #define MESHVIEW_H
3 
4 #include <QOpenGLWidget>
5 #include <QMouseEvent>
6 #include <QWheelEvent>
7 #include <QMutex>
8 
10 #include "toolmanager.h"
11 #include "objtools.h"
12 
13 #include "meshviewcontainer.h"
14 #include "abstractrenderer.h"
15 
16 
17 class MeshView : public QOpenGLWidget, public QOpenGLFunctions
18 {
19  Q_OBJECT
20 
21  friend class MeshViewContainer;
22 
23 public:
24  explicit MeshView(QWidget *parent = 0);
25  ~MeshView();
26 
27 public slots:
31  void scheduleRepaint();
32 
33  void makeContextCurrent();
34  void doneContextCurrent();
35 
36 
40  void cleanUp();
41 
42 private slots:
43  void cameraActivated(AbstractTool *tool, QString);
44 
45 protected:
50  void setRenderer(QSharedPointer<AbstractRenderer> renderer);
51 
52  void initializeGL() override;
53  void paintGL() override;
54  void resizeGL(int w, int h) override;
55 
56  void mousePressEvent(QMouseEvent *event) override;
57  void mouseMoveEvent(QMouseEvent *event) override;
58  void mouseReleaseEvent(QMouseEvent *event) override;
59  void wheelEvent(QWheelEvent *event) override;
60 
61 
71  QSharedPointer<AbstractRenderer> getCurrentRenderer();
72 
73 
74 
78  QSharedPointer<AbstractRenderer> mRenderer;
79 
84  QSharedPointer<AbstractRenderer> mNextRenderer;
85 
91 
92 
93  // The Projection*View matrix.
94  QMatrix4x4 mProjectionMatrix;
95 
96 
97  // Controller for the camera.
99 
100  // The tool manager. This will send mouse events to the appropriate tool.
102 
103 
111  QOpenGLContext *mContext;
112 };
113 
114 #endif // MESHVIEW_H
MeshView(QWidget *parent=0)
Definition: meshview.cpp:11
QMatrix4x4 mProjectionMatrix
Definition: meshview.h:94
The AbstractMeshViewCamera class Abstract class that will determine how the camera moves based on the...
Definition: abstractmeshviewcamera.h:16
void doneContextCurrent()
Definition: meshview.cpp:97
void mousePressEvent(QMouseEvent *event) override
Definition: meshview.cpp:53
~MeshView()
Definition: meshview.cpp:23
void mouseMoveEvent(QMouseEvent *event) override
Definition: meshview.cpp:58
Definition: meshview.h:17
void makeContextCurrent()
Definition: meshview.cpp:92
QSharedPointer< AbstractRenderer > getCurrentRenderer()
This method should ONLY be called on the OpenGL thread. It returns the appropriate renderer to be use...
Definition: meshview.cpp:74
AbstractMeshViewCamera * mCamera
Definition: meshview.h:98
void resizeGL(int w, int h) override
Definition: meshview.cpp:175
ToolManager * mTools
Definition: meshview.h:101
void scheduleRepaint()
Schedules a paintGL() call on the OpenGL thread.
Definition: meshview.cpp:87
The AbstractTool class represents a UI tool. A UI tool can be activated or deactivated.
Definition: abstracttool.h:24
void wheelEvent(QWheelEvent *event) override
Definition: meshview.cpp:68
QSharedPointer< AbstractRenderer > mRenderer
The Renderer object that will be used to draw to the screen.
Definition: meshview.h:78
void cleanUp()
Cleans up all resources.
Definition: meshview.cpp:103
void paintGL() override
Definition: meshview.cpp:162
void setRenderer(QSharedPointer< AbstractRenderer > renderer)
Makes the MeshView use a new Renderer.
Definition: meshview.cpp:32
QMutex mRendererMutex
Mutex for updating the mRenderer variable. This ensures that the mRenderer is not being used when it ...
Definition: meshview.h:90
QOpenGLContext * mContext
The context this MeshView was initialized with. This variable is only stored to disconnect its aboutT...
Definition: meshview.h:111
void initializeGL() override
Definition: meshview.cpp:145
Definition: meshviewcontainer.h:12
QSharedPointer< AbstractRenderer > mNextRenderer
nullptr if the Renderer does not need to change, else equal to the new renderer.
Definition: meshview.h:84
The ToolManager class represents a group of mutually exclusive tools out of which only one can be act...
Definition: toolmanager.h:28
void mouseReleaseEvent(QMouseEvent *event) override
Definition: meshview.cpp:63