BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RealSpace::Camera Class Reference
Inheritance diagram for RealSpace::Camera:
[legend]
Collaboration diagram for RealSpace::Camera:
[legend]

Classes

struct  Position
 

Signals

void updated (Camera const &)
 

Public Member Functions

 Camera ()
 
const PositiongetPos () const
 
const PositiongetPos3DAxes () const
 
void lookAt (const Position &)
 
void lookAt3DAxes (const Position &)
 
void set ()
 

Private Member Functions

void endTransform (bool keep)
 
void setAspectRatio (float)
 
void turnBy (QQuaternion const &)
 
void zoomBy (float)
 

Private Attributes

QQuaternion addRot
 
float farPlane
 
Vector3D lightPos1
 
Vector3D lightPosRotated1
 
QMatrix4x4 matModel
 
QMatrix4x4 matModel3DAxes
 
QMatrix4x4 matProj
 
float nearPlane
 
Position pos
 
Position pos3DAxes
 
float vertAngle
 
float zoom
 

Friends

class Canvas
 
class Program
 

Detailed Description

Definition at line 28 of file camera.h.

Constructor & Destructor Documentation

◆ Camera()

RealSpace::Camera::Camera ( )

Definition at line 23 of file camera.cpp.

26  , zoom(1)
27  , vertAngle(60)
28  , nearPlane(1)
29  , farPlane(10000)
30  , lightPos1(LIGHT1)
32 {
33  setAspectRatio(1);
34 }
Vector3D lightPosRotated1
Definition: camera.h:75
Vector3D lightPos1
Definition: camera.h:75
Position pos3DAxes
Definition: camera.h:69
float farPlane
Definition: camera.h:72
Position pos
Definition: camera.h:68
float nearPlane
Definition: camera.h:72
void setAspectRatio(float)
Definition: camera.cpp:86
float vertAngle
Definition: camera.h:72
const Vector3D LIGHT1
Definition: camera.cpp:19
static Vector3D const _z
Definition: def.h:49
static Vector3D const _0
Definition: def.h:49
static Vector3D const _x
Definition: def.h:49

References setAspectRatio().

Here is the call graph for this function:

Member Function Documentation

◆ endTransform()

void RealSpace::Camera::endTransform ( bool  keep)
private

Definition at line 104 of file camera.cpp.

105 {
106  if (keep) {
107  pos.rot = (pos.rot * addRot).normalized();
108  pos.eye = pos.eye * zoom; // TODO limit
109 
110  pos3DAxes.rot = (pos3DAxes.rot * addRot).normalized(); // no zooming for 3D axes
111  }
112  addRot = {};
113  zoom = 1;
114  set();
115 }
QQuaternion addRot
Definition: camera.h:78

References addRot, RealSpace::Camera::Position::eye, pos, pos3DAxes, RealSpace::Camera::Position::rot, set(), and zoom.

Referenced by RealSpace::Canvas::defaultView(), RealSpace::Canvas::horizontalCameraTurn(), RealSpace::Canvas::mouseReleaseEvent(), RealSpace::Canvas::sideView(), RealSpace::Canvas::topView(), RealSpace::Canvas::verticalCameraTurn(), and RealSpace::Canvas::wheelEvent().

Here is the call graph for this function:

◆ getPos()

const Position& RealSpace::Camera::getPos ( ) const
inline

◆ getPos3DAxes()

const Position& RealSpace::Camera::getPos3DAxes ( ) const
inline

Definition at line 52 of file camera.h.

52 { return pos3DAxes; }

References pos3DAxes.

Referenced by RealSpace::Canvas::horizontalCameraTurn(), and RealSpace::Canvas::verticalCameraTurn().

◆ lookAt()

void RealSpace::Camera::lookAt ( const Position pos_)

Definition at line 50 of file camera.cpp.

51 {
52  pos = pos_;
53  // lightPos = pos.eye;
54  set();
55 }

References pos, and set().

Referenced by RealSpace::Canvas::defaultView(), RealSpace::Canvas::horizontalCameraTurn(), RealSpace::Canvas::setCamera(), RealSpace::Canvas::sideView(), RealSpace::Canvas::topView(), and RealSpace::Canvas::verticalCameraTurn().

Here is the call graph for this function:

◆ lookAt3DAxes()

void RealSpace::Camera::lookAt3DAxes ( const Position pos3DAxes_)

Definition at line 57 of file camera.cpp.

58 {
59  pos3DAxes = pos3DAxes_;
60  set();
61 }

References pos3DAxes, and set().

Referenced by RealSpace::Canvas::defaultView(), RealSpace::Canvas::horizontalCameraTurn(), RealSpace::Canvas::sideView(), RealSpace::Canvas::topView(), and RealSpace::Canvas::verticalCameraTurn().

Here is the call graph for this function:

◆ set()

void RealSpace::Camera::set ( )

Definition at line 64 of file camera.cpp.

65 {
66  // For 3D object
67  matModel.setToIdentity();
68  matModel.lookAt((pos.eye - pos.ctr) * zoom + pos.ctr, pos.ctr, pos.up);
69  QQuaternion rt(pos.rot * addRot);
70  matModel.translate(+pos.ctr);
71  matModel.rotate(rt);
72  matModel.translate(-pos.ctr);
73 
74  // For 3D axes
75  matModel3DAxes.setToIdentity(); //
77  pos3DAxes.up); //
78  QQuaternion rt3DAxes(pos3DAxes.rot * addRot);
79  matModel3DAxes.rotate(rt3DAxes);
80 
81  lightPosRotated1 = rt.inverted().rotatedVector(lightPos1);
82 
83  emit updated(*this);
84 }
QMatrix4x4 matModel3DAxes
Definition: camera.h:80
void updated(Camera const &)
QMatrix4x4 matModel
Definition: camera.h:79

References addRot, RealSpace::Camera::Position::ctr, RealSpace::Camera::Position::eye, lightPos1, lightPosRotated1, matModel, matModel3DAxes, pos, pos3DAxes, RealSpace::Camera::Position::rot, RealSpace::Camera::Position::up, updated(), and zoom.

Referenced by endTransform(), lookAt(), lookAt3DAxes(), RealSpace::Canvas::setModel(), turnBy(), and zoomBy().

◆ setAspectRatio()

void RealSpace::Camera::setAspectRatio ( float  ratio)
private

Definition at line 86 of file camera.cpp.

87 {
88  matProj.setToIdentity();
89  matProj.perspective(vertAngle, ratio, nearPlane, farPlane);
90 }
QMatrix4x4 matProj
Definition: camera.h:79

References farPlane, matProj, nearPlane, and vertAngle.

Referenced by Camera(), and RealSpace::Canvas::setCamera().

◆ turnBy()

void RealSpace::Camera::turnBy ( QQuaternion const &  rot)
private

Definition at line 92 of file camera.cpp.

93 {
94  addRot = rot;
95  set();
96 }

References addRot, and set().

Here is the call graph for this function:

◆ updated

void RealSpace::Camera::updated ( Camera const &  )
signal

Referenced by set().

◆ zoomBy()

void RealSpace::Camera::zoomBy ( float  zoom_)
private

Definition at line 98 of file camera.cpp.

99 {
100  zoom = zoom_;
101  set();
102 }

References set(), and zoom.

Referenced by RealSpace::Canvas::mouseMoveEvent(), and RealSpace::Canvas::wheelEvent().

Here is the call graph for this function:

Friends And Related Function Documentation

◆ Canvas

friend class Canvas
friend

Definition at line 30 of file camera.h.

◆ Program

friend class Program
friend

Definition at line 31 of file camera.h.

Member Data Documentation

◆ addRot

QQuaternion RealSpace::Camera::addRot
private

Definition at line 78 of file camera.h.

Referenced by endTransform(), set(), and turnBy().

◆ farPlane

float RealSpace::Camera::farPlane
private

Definition at line 72 of file camera.h.

Referenced by setAspectRatio().

◆ lightPos1

Vector3D RealSpace::Camera::lightPos1
private

Definition at line 75 of file camera.h.

Referenced by set().

◆ lightPosRotated1

Vector3D RealSpace::Camera::lightPosRotated1
private

Definition at line 75 of file camera.h.

Referenced by set(), and RealSpace::Program::set().

◆ matModel

QMatrix4x4 RealSpace::Camera::matModel
private

Definition at line 79 of file camera.h.

Referenced by RealSpace::Canvas::mousePressEvent(), set(), and RealSpace::Program::set().

◆ matModel3DAxes

QMatrix4x4 RealSpace::Camera::matModel3DAxes
private

Definition at line 80 of file camera.h.

Referenced by RealSpace::Canvas::paintGL(), and set().

◆ matProj

QMatrix4x4 RealSpace::Camera::matProj
private

◆ nearPlane

float RealSpace::Camera::nearPlane
private

Definition at line 72 of file camera.h.

Referenced by setAspectRatio().

◆ pos

Position RealSpace::Camera::pos
private

Definition at line 68 of file camera.h.

Referenced by endTransform(), getPos(), lookAt(), and set().

◆ pos3DAxes

Position RealSpace::Camera::pos3DAxes
private

Definition at line 69 of file camera.h.

Referenced by endTransform(), getPos3DAxes(), lookAt3DAxes(), and set().

◆ vertAngle

float RealSpace::Camera::vertAngle
private

Definition at line 72 of file camera.h.

Referenced by setAspectRatio().

◆ zoom

float RealSpace::Camera::zoom
private

Definition at line 71 of file camera.h.

Referenced by endTransform(), set(), and zoomBy().


The documentation for this class was generated from the following files: