BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
canvas.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/ba3d/view/canvas.h
6 //! @brief Defines Canvas class
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifndef BORNAGAIN_GUI_BA3D_VIEW_CANVAS_H
16 #define BORNAGAIN_GUI_BA3D_VIEW_CANVAS_H
17 
18 #include "GUI/ba3d/def.h"
19 #include <QHash>
20 
21 #include <QOpenGLFunctions>
22 #include <QOpenGLShaderProgram>
23 #include <QOpenGLWidget>
24 
25 namespace RealSpace {
26 
27 class Camera;
28 class Program;
29 class Model;
30 class Geometry;
31 class Buffer;
32 class Object;
33 
34 class Canvas : public QOpenGLWidget, protected QOpenGLFunctions {
35  Q_OBJECT
36  friend class Object;
37 
38 public:
39  Canvas();
40  ~Canvas();
41 
42  void setBgColor(QColor const&);
43 
44  // active things, owned elsewhere, may be nullptr
45  void setCamera(Camera*);
46  void setProgram(Program*);
47  void setModel(Model*);
48  Model* getModel();
49 
50  // ToolBar Actions
51  void defaultView();
52  void sideView();
53  void topView();
54 
55  // Flying Camera implementation (similar to Blender's camera system)
56  void horizontalCameraTurn(float angle);
57  void verticalCameraTurn(float angle);
58 
59  Camera* cam() { return camera; }
60 
61 private:
62  QRect viewport;
64  int currentZoomLevel; // current configuration of mousewheel w.r.t to default (0) configuration
65 
66  void setCamera(bool full = true);
67 
68  void initializeGL();
69  void resizeGL(int, int);
70  void paintGL();
71 
72  QPoint e_last; // latest mouse event's (x,y) screen coordinates
73  QMatrix4x4 matModel, matProj;
74  QVector3D unproject(QPoint const&);
75 
77  void mousePressEvent(QMouseEvent*);
78  void mouseMoveEvent(QMouseEvent*);
79  void mouseReleaseEvent(QMouseEvent*);
80  void wheelEvent(QWheelEvent*);
81 
85 
86  QMetaObject::Connection modelUpdated;
87 
88  QHash<Geometry const*, Buffer*> buffers;
89  void releaseBuffer(Geometry const*);
90  void releaseBuffers();
91 
92  void draw(QColor const&, QMatrix4x4 const&, Geometry const&);
93 
94  void cleanup();
95  bool isInitialized() const;
96 
98 };
99 
100 } // namespace RealSpace
101 #endif // BORNAGAIN_GUI_BA3D_VIEW_CANVAS_H
Model * getModel()
Definition: canvas.cpp:110
void resizeGL(int, int)
Definition: canvas.cpp:139
void setBgColor(QColor const &)
Definition: canvas.cpp:70
enum RealSpace::Canvas::@2 mouseButton
void setCamera(Camera *)
Definition: canvas.cpp:78
void releaseBuffers()
Definition: canvas.cpp:273
QRect viewport
Definition: canvas.h:62
void wheelEvent(QWheelEvent *)
Definition: canvas.cpp:250
void setProgram(Program *)
Definition: canvas.cpp:84
QMetaObject::Connection modelUpdated
Definition: canvas.h:86
QVector3D unproject(QPoint const &)
Definition: canvas.cpp:185
Model * model
Definition: canvas.h:84
QHash< Geometry const *, Buffer * > buffers
Definition: canvas.h:88
Program * program
Definition: canvas.h:83
void mouseMoveEvent(QMouseEvent *)
Definition: canvas.cpp:212
void initializeGL()
Definition: canvas.cpp:126
QPoint e_last
Definition: canvas.h:72
Camera * camera
Definition: canvas.h:82
Camera * cam()
Definition: canvas.h:59
QMatrix4x4 matModel
Definition: canvas.h:73
bool isInitialized() const
Definition: canvas.cpp:310
float colorBgG
Definition: canvas.h:63
void mousePressEvent(QMouseEvent *)
Definition: canvas.cpp:191
float colorBgB
Definition: canvas.h:63
void mouseReleaseEvent(QMouseEvent *)
Definition: canvas.cpp:242
void releaseBuffer(Geometry const *)
Definition: canvas.cpp:268
float aspectRatio
Definition: canvas.h:63
void defaultView()
Definition: canvas.cpp:315
bool m_isInitializedGL
Definition: canvas.h:97
void horizontalCameraTurn(float angle)
Definition: canvas.cpp:387
void draw(QColor const &, QMatrix4x4 const &, Geometry const &)
Definition: canvas.cpp:280
void setModel(Model *)
Definition: canvas.cpp:92
void verticalCameraTurn(float angle)
Definition: canvas.cpp:433
QMatrix4x4 matProj
Definition: canvas.h:73
int currentZoomLevel
Definition: canvas.h:64
float colorBgR
Definition: canvas.h:63
Definitions.