BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
camera.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/ba3d/view/camera.h
6 //! @brief Defines Camera 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_CAMERA_H
16 #define BORNAGAIN_GUI_BA3D_VIEW_CAMERA_H
17 
18 #include "GUI/ba3d/def.h"
19 #include <QColor>
20 #include <QMatrix4x4>
21 #include <QQuaternion>
22 
23 namespace RealSpace {
24 
25 class Canvas;
26 class Program;
27 
28 class Camera : public QObject {
29  Q_OBJECT
30  friend class Canvas;
31  friend class Program;
32 
33 public:
34  Camera();
35 
36  struct Position {
37 
38  Position();
39  Position(const Vector3D& eye, const Vector3D& ctr, const Vector3D& up,
40  const QQuaternion& = {});
41 
43  QQuaternion rot;
44 
45  Position interpolateTo(const Position&, float) const;
46  };
47 
48  void lookAt(const Position&); // camera position for 3D object
49  void lookAt3DAxes(const Position&); // camera position for 3D axes
50 
51  const Position& getPos() const { return pos; }
52  const Position& getPos3DAxes() const { return pos3DAxes; }
53 
54  void set();
55 
56 signals:
57  void updated(Camera const&);
58 
59 private:
60  void setAspectRatio(float);
61 
62  // additional transformation
63  void turnBy(QQuaternion const&);
64  void zoomBy(float);
65  void endTransform(bool keep);
66 
67  // camera setup
70 
71  float zoom;
73 
74  // light
76 
77  // transformation
78  QQuaternion addRot; // rotation, additional rotation
79  QMatrix4x4 matModel, matProj;
80  QMatrix4x4 matModel3DAxes;
81 };
82 
83 } // namespace RealSpace
84 #endif // BORNAGAIN_GUI_BA3D_VIEW_CAMERA_H
const Position & getPos3DAxes() const
Definition: camera.h:52
Vector3D lightPosRotated1
Definition: camera.h:75
void turnBy(QQuaternion const &)
Definition: camera.cpp:92
const Position & getPos() const
Definition: camera.h:51
void lookAt(const Position &)
Definition: camera.cpp:50
Vector3D lightPos1
Definition: camera.h:75
void zoomBy(float)
Definition: camera.cpp:98
Position pos3DAxes
Definition: camera.h:69
QQuaternion addRot
Definition: camera.h:78
float farPlane
Definition: camera.h:72
void lookAt3DAxes(const Position &)
Definition: camera.cpp:57
Position pos
Definition: camera.h:68
float nearPlane
Definition: camera.h:72
void endTransform(bool keep)
Definition: camera.cpp:104
QMatrix4x4 matModel3DAxes
Definition: camera.h:80
QMatrix4x4 matProj
Definition: camera.h:79
void updated(Camera const &)
void setAspectRatio(float)
Definition: camera.cpp:86
float vertAngle
Definition: camera.h:72
QMatrix4x4 matModel
Definition: camera.h:79
Definitions.
Position interpolateTo(const Position &, float) const
Definition: camera.cpp:44