KiCad PCB EDA Suite
CAMERA Class Referenceabstract

A class used to derive camera objects from. More...

#include <camera.h>

Inheritance diagram for CAMERA:
TRACK_BALL

Public Member Functions

 CAMERA (float aInitialDistance)
 Initialize a camera. More...
 
virtual ~CAMERA ()
 
const glm::mat4 GetRotationMatrix () const
 Get the rotation matrix to be applied in a transformation camera. More...
 
const glm::mat4 & GetViewMatrix () const
 
const glm::mat4 & GetViewMatrix_Inv () const
 
const glm::mat4 & GetProjectionMatrix () const
 
const glm::mat4 & GetProjectionMatrixInv () const
 
const SFVEC3FGetRight () const
 
const SFVEC3FGetUp () const
 
const SFVEC3FGetDir () const
 
const SFVEC3FGetPos () const
 
const SFVEC2FGetFocalLen () const
 
float GetNear () const
 
float GetFar () const
 
void SetBoardLookAtPos (const SFVEC3F &aBoardPos)
 
virtual void SetLookAtPos (const SFVEC3F &aLookAtPos)=0
 
void SetLookAtPos_T1 (const SFVEC3F &aLookAtPos)
 
const SFVEC3FGetLookAtPos_T1 () const
 
const SFVEC3FGetCameraPos () const
 
const SFVEC3FGetCameraInitPos () const
 
float GetCameraMinDimension () const
 
virtual void Drag (const wxPoint &aNewMousePosition)=0
 Calculate a new mouse drag position. More...
 
virtual void Pan (const wxPoint &aNewMousePosition)=0
 
virtual void Pan (const SFVEC3F &aDeltaOffsetInc)=0
 
virtual void Pan_T1 (const SFVEC3F &aDeltaOffsetInc)=0
 
virtual void Reset ()
 Reset the camera to initial state. More...
 
virtual void Reset_T1 ()
 
void ResetXYpos ()
 
void ResetXYpos_T1 ()
 
void SetCurMousePosition (const wxPoint &aPosition)
 Update the current mouse position without make any new calculations on camera. More...
 
void ToggleProjection ()
 
PROJECTION_TYPE GetProjection ()
 
void SetProjection (PROJECTION_TYPE aProjection)
 
bool SetCurWindowSize (const wxSize &aSize)
 Update the windows size of the camera. More...
 
void ZoomReset ()
 
bool Zoom (float aFactor)
 
bool Zoom_T1 (float aFactor)
 
float GetZoom () const
 
float GetMinZoom ()
 
void SetMinZoom (float minZoom)
 
float GetMaxZoom ()
 
void SetMaxZoom (float maxZoom)
 
void RotateX (float aAngleInRadians)
 
void RotateY (float aAngleInRadians)
 
void RotateZ (float aAngleInRadians)
 
void RotateX_T1 (float aAngleInRadians)
 
void RotateY_T1 (float aAngleInRadians)
 
void RotateZ_T1 (float aAngleInRadians)
 
virtual void SetT0_and_T1_current_T ()
 This will set T0 and T1 with the current values. More...
 
virtual void Interpolate (float t)
 It will update the matrix to interpolate between T0 and T1 values. More...
 
void SetInterpolateMode (CAMERA_INTERPOLATION aInterpolateMode)
 
bool ParametersChanged ()
 
bool ParametersChangedQuery () const
 
void MakeRay (const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection) const
 Make a ray based on a windows screen position. More...
 
void MakeRay (const SFVEC2F &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection) const
 Make a ray based on a windows screen position, it will interpolate based on the aWindowPos. More...
 
void MakeRayAtCurrrentMousePosition (SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection) const
 Make a ray based on the latest mouse position. More...
 

Protected Member Functions

void zoomChanged ()
 
void rebuildProjection ()
 
void updateFrustum ()
 
void updateViewMatrix ()
 
void updateRotationMatrix ()
 

Protected Attributes

float m_zoom
 3D zoom value – Z-distance is scaled by it More...
 
float m_zoom_t0
 
float m_zoom_t1
 
float m_minZoom
 Possible 3D zoom range. More...
 
float m_maxZoom
 
SFVEC2I m_windowSize
 The window size that this camera is working. More...
 
wxPoint m_lastPosition
 The last mouse position in the screen. More...
 
glm::mat4 m_rotationMatrix
 
glm::mat4 m_rotationMatrixAux
 
glm::mat4 m_viewMatrix
 
glm::mat4 m_viewMatrixInverse
 
glm::mat4 m_projectionMatrix
 
glm::mat4 m_projectionMatrixInv
 
PROJECTION_TYPE m_projectionType
 
CAMERA_FRUSTUM m_frustum
 
SFVEC3F m_right
 
SFVEC3F m_up
 
SFVEC3F m_dir
 
SFVEC3F m_pos
 
SFVEC2F m_focalLen
 
SFVEC3F m_camera_pos_init
 
SFVEC3F m_camera_pos
 
SFVEC3F m_camera_pos_t0
 
SFVEC3F m_camera_pos_t1
 
SFVEC3F m_lookat_pos
 
SFVEC3F m_lookat_pos_t0
 
SFVEC3F m_lookat_pos_t1
 
SFVEC3F m_board_lookat_pos_init
 Default boardlookat position (the board center). More...
 
SFVEC3F m_rotate_aux
 Stores the rotation angle auxiliary. More...
 
SFVEC3F m_rotate_aux_t0
 
SFVEC3F m_rotate_aux_t1
 
CAMERA_INTERPOLATION m_interpolation_mode
 
std::vector< float > m_scr_nX
 Precalc values array used to calc ray for each pixel (constant for the same window size). More...
 
std::vector< float > m_scr_nY
 
std::vector< SFVEC3Fm_right_nX
 Precalc values array used to calc ray for each pixel, for X and Y axis of each new camera position. More...
 
std::vector< SFVEC3Fm_up_nY
 
bool m_parametersChanged
 Set to true if any of the parameters in the camera was changed. More...
 

Static Protected Attributes

static const wxChar * m_logTrace = wxT( "KI_TRACE_CAMERA" )
 Trace mask used to enable or disable the trace output of this class. More...
 

Detailed Description

A class used to derive camera objects from.

It must be derived by other classes to implement a real camera object.

Definition at line 77 of file camera.h.

Constructor & Destructor Documentation

◆ CAMERA()

CAMERA::CAMERA ( float  aInitialDistance)
explicit

Initialize a camera.

Parameters
aInitialDistanceInitial Z-distance to the board

Definition at line 54 of file camera.cpp.

55 {
56  wxLogTrace( m_logTrace, wxT( "CAMERA::CAMERA" ) );
57 
58  m_camera_pos_init = SFVEC3F( 0.0f, 0.0f, -aInitialDistance );
60  m_windowSize = SFVEC2I( 0, 0 );
63 
66 
67  Reset();
68 }
#define DEFAULT_MIN_ZOOM
Definition: camera.cpp:50
#define DEFAULT_MAX_ZOOM
Definition: camera.cpp:51
virtual void Reset()
Reset the camera to initial state.
Definition: camera.cpp:71
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
SFVEC3F m_camera_pos_init
Definition: camera.h:303
PROJECTION_TYPE m_projectionType
Definition: camera.h:292
float m_maxZoom
Definition: camera.h:274
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279
CAMERA_INTERPOLATION m_interpolation_mode
Definition: camera.h:317
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:311
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
Definition: camera.h:344
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44

References BEZIER, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, m_board_lookat_pos_init, m_camera_pos_init, m_interpolation_mode, m_logTrace, m_maxZoom, m_minZoom, m_projectionType, m_windowSize, PERSPECTIVE, and Reset().

◆ ~CAMERA()

virtual CAMERA::~CAMERA ( )
inlinevirtual

Definition at line 87 of file camera.h.

88  {
89  }

Member Function Documentation

◆ Drag()

virtual void CAMERA::Drag ( const wxPoint &  aNewMousePosition)
pure virtual

Calculate a new mouse drag position.

Implemented in TRACK_BALL.

Referenced by EDA_3D_CANVAS::OnMouseMove().

◆ GetCameraInitPos()

const SFVEC3F& CAMERA::GetCameraInitPos ( ) const
inline

Definition at line 131 of file camera.h.

131 { return m_camera_pos_init; }
SFVEC3F m_camera_pos_init
Definition: camera.h:303

References m_camera_pos_init.

Referenced by RENDER_3D_RAYTRACE::Reload().

◆ GetCameraMinDimension()

float CAMERA::GetCameraMinDimension ( ) const

Definition at line 403 of file camera.cpp.

404 {
405  return -m_camera_pos_init.z * m_frustum.tang;
406 }
float tang
Definition: camera.h:59
SFVEC3F m_camera_pos_init
Definition: camera.h:303
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294

References m_camera_pos_init, m_frustum, and CAMERA_FRUSTUM::tang.

◆ GetCameraPos()

const SFVEC3F& CAMERA::GetCameraPos ( ) const
inline

Definition at line 130 of file camera.h.

130 { return m_camera_pos; }
SFVEC3F m_camera_pos
Definition: camera.h:304

References m_camera_pos.

Referenced by EDA_3D_CANVAS::DisplayStatus().

◆ GetDir()

const SFVEC3F& CAMERA::GetDir ( ) const
inline

Definition at line 106 of file camera.h.

106 { return m_dir; }
SFVEC3F m_dir
Definition: camera.h:298

References m_dir.

Referenced by RENDER_3D_RAYTRACE::Redraw(), and RENDER_3D_RAYTRACE::render().

◆ GetFar()

float CAMERA::GetFar ( ) const
inline

Definition at line 110 of file camera.h.

110 { return m_frustum.farD; }
float farD
Definition: camera.h:59
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294

References CAMERA_FRUSTUM::farD, and m_frustum.

◆ GetFocalLen()

const SFVEC2F& CAMERA::GetFocalLen ( ) const
inline

Definition at line 108 of file camera.h.

108 { return m_focalLen; }
SFVEC2F m_focalLen
Definition: camera.h:301

References m_focalLen.

◆ GetLookAtPos_T1()

const SFVEC3F& CAMERA::GetLookAtPos_T1 ( ) const
inline

Definition at line 128 of file camera.h.

128 { return m_lookat_pos_t1; }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310

References m_lookat_pos_t1.

Referenced by EDA_3D_CANVAS::render_pivot().

◆ GetMaxZoom()

float CAMERA::GetMaxZoom ( )
inline

Definition at line 186 of file camera.h.

186 { return m_maxZoom; }
float m_maxZoom
Definition: camera.h:274

References m_maxZoom.

Referenced by RENDER_3D_RAYTRACE::Reload().

◆ GetMinZoom()

float CAMERA::GetMinZoom ( )
inline

Definition at line 179 of file camera.h.

179 { return m_minZoom; }
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273

References m_minZoom.

◆ GetNear()

float CAMERA::GetNear ( ) const
inline

Definition at line 109 of file camera.h.

109 { return m_frustum.nearD; }
float nearD
Definition: camera.h:59
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294

References m_frustum, and CAMERA_FRUSTUM::nearD.

◆ GetPos()

const SFVEC3F& CAMERA::GetPos ( ) const
inline

Definition at line 107 of file camera.h.

107 { return m_pos; }
SFVEC3F m_pos
Definition: camera.h:299

References m_pos.

Referenced by RENDER_3D_OPENGL::Redraw(), and RENDER_3D_OPENGL::renderSolderMaskLayer().

◆ GetProjection()

PROJECTION_TYPE CAMERA::GetProjection ( )
inline

Definition at line 161 of file camera.h.

161 { return m_projectionType; }
PROJECTION_TYPE m_projectionType
Definition: camera.h:292

References m_projectionType.

Referenced by EDA_3D_CANVAS::GetProjectionMode(), and EDA_3D_VIEWER_FRAME::setupUIConditions().

◆ GetProjectionMatrix()

const glm::mat4 & CAMERA::GetProjectionMatrix ( ) const

Definition at line 391 of file camera.cpp.

392 {
393  return m_projectionMatrix;
394 }
glm::mat4 m_projectionMatrix
Definition: camera.h:290

References m_projectionMatrix.

Referenced by EDA_3D_MODEL_VIEWER::OnPaint(), RENDER_3D_OPENGL::Redraw(), and EDA_3D_CANVAS::render_pivot().

◆ GetProjectionMatrixInv()

const glm::mat4 & CAMERA::GetProjectionMatrixInv ( ) const

Definition at line 397 of file camera.cpp.

398 {
399  return m_projectionMatrixInv;
400 }
glm::mat4 m_projectionMatrixInv
Definition: camera.h:291

References m_projectionMatrixInv.

◆ GetRight()

const SFVEC3F& CAMERA::GetRight ( ) const
inline

Definition at line 104 of file camera.h.

104 { return m_right; }
SFVEC3F m_right
Definition: camera.h:296

References m_right.

◆ GetRotationMatrix()

const glm::mat4 CAMERA::GetRotationMatrix ( ) const

Get the rotation matrix to be applied in a transformation camera.

Returns
the rotation matrix of the camera

Definition at line 168 of file camera.cpp.

169 {
171 }
glm::mat4 m_rotationMatrix
Definition: camera.h:286
glm::mat4 m_rotationMatrixAux
Definition: camera.h:287

References m_rotationMatrix, and m_rotationMatrixAux.

Referenced by EDA_3D_MODEL_VIEWER::OnPaint(), and RENDER_3D_OPENGL::render3dArrows().

◆ GetUp()

const SFVEC3F& CAMERA::GetUp ( ) const
inline

Definition at line 105 of file camera.h.

105 { return m_up; }
SFVEC3F m_up
Definition: camera.h:297

References m_up.

◆ GetViewMatrix()

const glm::mat4 & CAMERA::GetViewMatrix ( ) const

Definition at line 427 of file camera.cpp.

428 {
429  return m_viewMatrix;
430 }
glm::mat4 m_viewMatrix
Definition: camera.h:288

References m_viewMatrix.

Referenced by EDA_3D_MODEL_VIEWER::OnPaint(), RENDER_3D_OPENGL::Redraw(), and EDA_3D_CANVAS::render_pivot().

◆ GetViewMatrix_Inv()

const glm::mat4 & CAMERA::GetViewMatrix_Inv ( ) const

Definition at line 433 of file camera.cpp.

434 {
435  return m_viewMatrixInverse;
436 }
glm::mat4 m_viewMatrixInverse
Definition: camera.h:289

References m_viewMatrixInverse.

◆ GetZoom()

float CAMERA::GetZoom ( ) const
inline

Definition at line 177 of file camera.h.

177 { return m_zoom; }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266

References m_zoom.

Referenced by EDA_3D_CANVAS::DoRePaint(), EDA_3D_CANVAS::OnMouseWheel(), and EDA_3D_CANVAS::SetView3D().

◆ Interpolate()

void CAMERA::Interpolate ( float  t)
virtual

It will update the matrix to interpolate between T0 and T1 values.

Parameters
tthe interpolation time, between 0.0f and 1.0f (it will clamp if >1).

Reimplemented in TRACK_BALL.

Definition at line 572 of file camera.cpp.

573 {
574  wxASSERT( t >= 0.0f );
575 
576  const float t0 = 1.0f - t;
577 
581  m_zoom = m_zoom_t0 * t0 + m_zoom_t1 * t;
582 
583  m_parametersChanged = true;
584 
587 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335
SFVEC3F m_lookat_pos_t0
Definition: camera.h:309
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310
float m_zoom_t1
Definition: camera.h:268
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315
void rebuildProjection()
Definition: camera.cpp:174
SFVEC3F m_camera_pos_t0
Definition: camera.h:305
void updateRotationMatrix()
Definition: camera.cpp:147
float m_zoom_t0
Definition: camera.h:267
SFVEC3F m_camera_pos_t1
Definition: camera.h:306
SFVEC3F m_lookat_pos
Definition: camera.h:308
SFVEC3F m_camera_pos
Definition: camera.h:304
SFVEC3F m_rotate_aux_t0
Definition: camera.h:314

References m_camera_pos, m_camera_pos_t0, m_camera_pos_t1, m_lookat_pos, m_lookat_pos_t0, m_lookat_pos_t1, m_parametersChanged, m_rotate_aux, m_rotate_aux_t0, m_rotate_aux_t1, m_zoom, m_zoom_t0, m_zoom_t1, rebuildProjection(), and updateRotationMatrix().

Referenced by EDA_3D_CANVAS::DoRePaint(), TRACK_BALL::Interpolate(), and EDA_3D_CANVAS::request_start_moving_camera().

◆ MakeRay() [1/2]

void CAMERA::MakeRay ( const SFVEC2I aWindowPos,
SFVEC3F aOutOrigin,
SFVEC3F aOutDirection 
) const

Make a ray based on a windows screen position.

Parameters
aWindowPosthe windows buffer position.
aOutOriginout origin position of the ray.
aOutDirectionout direction

Definition at line 323 of file camera.cpp.

325 {
326  wxASSERT( aWindowPos.x < m_windowSize.x );
327  wxASSERT( aWindowPos.y < m_windowSize.y );
328 
329  const SFVEC3F up_plus_right = m_up_nY[aWindowPos.y] + m_right_nX[aWindowPos.x];
330 
331  switch( m_projectionType )
332  {
333  default:
335  aOutOrigin = up_plus_right + m_frustum.nc;
336  aOutDirection = glm::normalize( aOutOrigin - m_pos );
337  break;
338 
340  aOutOrigin = up_plus_right * 0.5f + m_frustum.nc;
341  aOutDirection = -m_dir + SFVEC3F( FLT_EPSILON );
342  break;
343  }
344 }
SFVEC3F m_dir
Definition: camera.h:298
std::vector< SFVEC3F > m_right_nX
Precalc values array used to calc ray for each pixel, for X and Y axis of each new camera position.
Definition: camera.h:329
SFVEC3F m_pos
Definition: camera.h:299
PROJECTION_TYPE m_projectionType
Definition: camera.h:292
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:330
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
SFVEC3F nc
Definition: camera.h:49

References m_dir, m_frustum, m_pos, m_projectionType, m_right_nX, m_up_nY, m_windowSize, CAMERA_FRUSTUM::nc, ORTHO, and PERSPECTIVE.

Referenced by MakeRayAtCurrrentMousePosition(), RAYPACKET::RAYPACKET(), RAYPACKET_InitRays(), and RAYPACKET_InitRays_with2DDisplacement().

◆ MakeRay() [2/2]

void CAMERA::MakeRay ( const SFVEC2F aWindowPos,
SFVEC3F aOutOrigin,
SFVEC3F aOutDirection 
) const

Make a ray based on a windows screen position, it will interpolate based on the aWindowPos.

Parameters
aWindowPosthe windows buffer position (float value).
aOutOriginout origin position of the ray.
aOutDirectionout direction.

Definition at line 347 of file camera.cpp.

349 {
350  wxASSERT( aWindowPos.x < (float)m_windowSize.x );
351  wxASSERT( aWindowPos.y < (float)m_windowSize.y );
352 
353  const SFVEC2F floorWinPos_f = glm::floor( aWindowPos );
354  const SFVEC2I floorWinPos_i = (SFVEC2I)floorWinPos_f;
355  const SFVEC2F relativeWinPos = aWindowPos - floorWinPos_f;
356 
357  // Note: size of vectors m_up and m_right are m_windowSize + 1
358  const SFVEC3F up_plus_right = m_up_nY[floorWinPos_i.y] * (1.0f - relativeWinPos.y) +
359  m_up_nY[floorWinPos_i.y + 1] * relativeWinPos.y +
360  m_right_nX[floorWinPos_i.x] * (1.0f - relativeWinPos.x) +
361  m_right_nX[floorWinPos_i.x + 1] * relativeWinPos.x;
362 
363  switch( m_projectionType )
364  {
365  default:
367  aOutOrigin = up_plus_right + m_frustum.nc;
368  aOutDirection = glm::normalize( aOutOrigin - m_pos );
369  break;
370 
372  aOutOrigin = up_plus_right * 0.5f + m_frustum.nc;
373  aOutDirection = -m_dir + SFVEC3F( FLT_EPSILON );
374  break;
375  }
376 }
SFVEC3F m_dir
Definition: camera.h:298
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
std::vector< SFVEC3F > m_right_nX
Precalc values array used to calc ray for each pixel, for X and Y axis of each new camera position.
Definition: camera.h:329
SFVEC3F m_pos
Definition: camera.h:299
PROJECTION_TYPE m_projectionType
Definition: camera.h:292
glm::vec2 SFVEC2F
Definition: xv3d_types.h:42
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:330
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
SFVEC3F nc
Definition: camera.h:49

References m_dir, m_frustum, m_pos, m_projectionType, m_right_nX, m_up_nY, m_windowSize, CAMERA_FRUSTUM::nc, ORTHO, and PERSPECTIVE.

◆ MakeRayAtCurrrentMousePosition()

void CAMERA::MakeRayAtCurrrentMousePosition ( SFVEC3F aOutOrigin,
SFVEC3F aOutDirection 
) const

Make a ray based on the latest mouse position.

Parameters
aOutOriginout origin position of the ray.
aOutDirectionout direction.

Definition at line 379 of file camera.cpp.

380 {
381  const SFVEC2I windowPos = SFVEC2I( m_lastPosition.x, m_windowSize.y - m_lastPosition.y );
382 
383  if( ( 0 < windowPos.x ) && ( windowPos.x < m_windowSize.x ) &&
384  ( 0 < windowPos.y ) && ( windowPos.y < m_windowSize.y ) )
385  {
386  MakeRay( windowPos, aOutOrigin, aOutDirection );
387  }
388 }
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:284
void MakeRay(const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection) const
Make a ray based on a windows screen position.
Definition: camera.cpp:323
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279

References m_lastPosition, m_windowSize, and MakeRay().

Referenced by EDA_3D_CANVAS::getRayAtCurrrentMousePosition().

◆ Pan() [1/2]

virtual void CAMERA::Pan ( const wxPoint &  aNewMousePosition)
pure virtual

◆ Pan() [2/2]

virtual void CAMERA::Pan ( const SFVEC3F aDeltaOffsetInc)
pure virtual

Implemented in TRACK_BALL.

◆ Pan_T1()

virtual void CAMERA::Pan_T1 ( const SFVEC3F aDeltaOffsetInc)
pure virtual

Implemented in TRACK_BALL.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ ParametersChanged()

bool CAMERA::ParametersChanged ( )
Returns
true if some of the parameters in camera was changed, it will reset the flag.

Definition at line 590 of file camera.cpp.

591 {
592  const bool parametersChanged = m_parametersChanged;
593 
594  m_parametersChanged = false;
595 
596  return parametersChanged;
597 }
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335

References m_parametersChanged.

Referenced by EDA_3D_CANVAS::DoRePaint(), and RENDER_3D_RAYTRACE::Redraw().

◆ ParametersChangedQuery()

bool CAMERA::ParametersChangedQuery ( ) const
inline
Returns
true if some of the parameters in camera was changed, it will NOT reset the flag.

Definition at line 226 of file camera.h.

226 { return m_parametersChanged; }
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335

References m_parametersChanged.

◆ rebuildProjection()

void CAMERA::rebuildProjection ( )
protected

Definition at line 174 of file camera.cpp.

175 {
176  if( ( m_windowSize.x == 0 ) || ( m_windowSize.y == 0 ) )
177  return;
178 
179  m_frustum.ratio = (float) m_windowSize.x / (float)m_windowSize.y;
180  m_frustum.farD = glm::length( m_camera_pos_init ) * m_maxZoom * 2.0f;
181 
182  switch( m_projectionType )
183  {
184  default:
186 
187  m_frustum.nearD = 0.10f;
188 
189  // Ratio width / height of the window display
190  m_frustum.angle = 45.0f;
191 
192  m_projectionMatrix = glm::perspective( glm::radians( m_frustum.angle ), m_frustum.ratio,
194 
195  m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
196 
197  m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f );
198 
199  m_focalLen.x = ( (float)m_windowSize.y / (float)m_windowSize.x ) / m_frustum.tang;
200  m_focalLen.y = 1.0f / m_frustum.tang;
201 
206  break;
207 
209 
210  m_frustum.nearD = -m_frustum.farD; // Use a symmetrical clip plane for ortho projection
211 
212  // This formula was found by trial and error
213  const float orthoReductionFactor = glm::length( m_camera_pos_init ) *
214  m_zoom * m_zoom * 0.5f;
215 
216  // Initialize Projection Matrix for Orthographic View
217  m_projectionMatrix = glm::ortho( -m_frustum.ratio * orthoReductionFactor,
218  m_frustum.ratio * orthoReductionFactor,
219  -orthoReductionFactor,
220  orthoReductionFactor,
222 
223  m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
224 
225  m_frustum.nw = orthoReductionFactor * 2.0f * m_frustum.ratio;
226  m_frustum.nh = orthoReductionFactor * 2.0f;
229 
230  break;
231  }
232 
233  if( ( m_windowSize.x > 0 ) && ( m_windowSize.y > 0 ) )
234  {
235  m_scr_nX.resize( m_windowSize.x + 1 );
236  m_scr_nY.resize( m_windowSize.y + 1 );
237 
238  // Precalc X values for camera -> ray generation
239  for( unsigned int x = 0; x < (unsigned int)m_windowSize.x + 1; ++x )
240  {
241  // Converts 0.0 .. 1.0
242  const float xNormalizedDeviceCoordinates = ( ( (float)x + 0.5f ) /
243  (m_windowSize.x - 0.0f) );
244 
245  // Converts -1.0 .. 1.0
246  m_scr_nX[x] = 2.0f * xNormalizedDeviceCoordinates - 1.0f;
247  }
248 
249  // Precalc Y values for camera -> ray generation
250  for( unsigned int y = 0; y < (unsigned int)m_windowSize.y + 1 ; ++y )
251  {
252  // Converts 0.0 .. 1.0
253  const float yNormalizedDeviceCoordinates = ( ( (float)y + 0.5f ) /
254  (m_windowSize.y - 0.0f) );
255 
256  // Converts -1.0 .. 1.0
257  m_scr_nY[y] = 2.0f * yNormalizedDeviceCoordinates - 1.0f;
258  }
259 
260  updateFrustum();
261  }
262 }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
float ratio
Definition: camera.h:59
SFVEC2F m_focalLen
Definition: camera.h:301
float nw
Definition: camera.h:60
float fw
Definition: camera.h:60
float tang
Definition: camera.h:59
float fh
Definition: camera.h:60
SFVEC3F m_camera_pos_init
Definition: camera.h:303
PROJECTION_TYPE m_projectionType
Definition: camera.h:292
float farD
Definition: camera.h:59
float m_maxZoom
Definition: camera.h:274
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279
glm::mat4 m_projectionMatrix
Definition: camera.h:290
float nearD
Definition: camera.h:59
void updateFrustum()
Definition: camera.cpp:265
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294
std::vector< float > m_scr_nY
Definition: camera.h:323
std::vector< float > m_scr_nX
Precalc values array used to calc ray for each pixel (constant for the same window size).
Definition: camera.h:322
glm::mat4 m_projectionMatrixInv
Definition: camera.h:291
float nh
Definition: camera.h:60
float angle
Definition: camera.h:59

References CAMERA_FRUSTUM::angle, CAMERA_FRUSTUM::farD, CAMERA_FRUSTUM::fh, CAMERA_FRUSTUM::fw, m_camera_pos_init, m_focalLen, m_frustum, m_maxZoom, m_projectionMatrix, m_projectionMatrixInv, m_projectionType, m_scr_nX, m_scr_nY, m_windowSize, m_zoom, CAMERA_FRUSTUM::nearD, CAMERA_FRUSTUM::nh, CAMERA_FRUSTUM::nw, ORTHO, PERSPECTIVE, CAMERA_FRUSTUM::ratio, CAMERA_FRUSTUM::tang, and updateFrustum().

Referenced by Interpolate(), Reset(), SetCurWindowSize(), ToggleProjection(), zoomChanged(), and ZoomReset().

◆ Reset()

void CAMERA::Reset ( )
virtual

Reset the camera to initial state.

Reimplemented in TRACK_BALL.

Definition at line 71 of file camera.cpp.

72 {
73  m_parametersChanged = true;
74  m_projectionMatrix = glm::mat4( 1.0f );
75  m_projectionMatrixInv = glm::mat4( 1.0f );
76  m_rotationMatrix = glm::mat4( 1.0f );
77  m_rotationMatrixAux = glm::mat4( 1.0f );
78  m_lastPosition = wxPoint( 0, 0 );
79 
80  m_zoom = 1.0f;
81  m_zoom_t0 = 1.0f;
82  m_zoom_t1 = 1.0f;
89 
90  m_rotate_aux = SFVEC3F( 0.0f );
91  m_rotate_aux_t0 = SFVEC3F( 0.0f );
92  m_rotate_aux_t1 = SFVEC3F( 0.0f );
93 
96  m_viewMatrixInverse = glm::inverse( m_viewMatrix );
97  m_scr_nX.clear();
98  m_scr_nY.clear();
100 }
glm::mat4 m_viewMatrixInverse
Definition: camera.h:289
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335
SFVEC3F m_lookat_pos_t0
Definition: camera.h:309
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310
float m_zoom_t1
Definition: camera.h:268
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315
glm::mat4 m_viewMatrix
Definition: camera.h:288
SFVEC3F m_camera_pos_init
Definition: camera.h:303
void rebuildProjection()
Definition: camera.cpp:174
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:284
SFVEC3F m_camera_pos_t0
Definition: camera.h:305
void updateRotationMatrix()
Definition: camera.cpp:147
void updateViewMatrix()
Definition: camera.cpp:139
float m_zoom_t0
Definition: camera.h:267
glm::mat4 m_rotationMatrix
Definition: camera.h:286
SFVEC3F m_camera_pos_t1
Definition: camera.h:306
SFVEC3F m_lookat_pos
Definition: camera.h:308
glm::mat4 m_projectionMatrix
Definition: camera.h:290
SFVEC3F m_camera_pos
Definition: camera.h:304
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:311
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
glm::mat4 m_rotationMatrixAux
Definition: camera.h:287
std::vector< float > m_scr_nY
Definition: camera.h:323
std::vector< float > m_scr_nX
Precalc values array used to calc ray for each pixel (constant for the same window size).
Definition: camera.h:322
glm::mat4 m_projectionMatrixInv
Definition: camera.h:291
SFVEC3F m_rotate_aux_t0
Definition: camera.h:314

References m_board_lookat_pos_init, m_camera_pos, m_camera_pos_init, m_camera_pos_t0, m_camera_pos_t1, m_lastPosition, m_lookat_pos, m_lookat_pos_t0, m_lookat_pos_t1, m_parametersChanged, m_projectionMatrix, m_projectionMatrixInv, m_rotate_aux, m_rotate_aux_t0, m_rotate_aux_t1, m_rotationMatrix, m_rotationMatrixAux, m_scr_nX, m_scr_nY, m_viewMatrix, m_viewMatrixInverse, m_zoom, m_zoom_t0, m_zoom_t1, rebuildProjection(), updateRotationMatrix(), and updateViewMatrix().

Referenced by CAMERA(), and TRACK_BALL::Reset().

◆ Reset_T1()

void CAMERA::Reset_T1 ( )
virtual

Reimplemented in TRACK_BALL.

Definition at line 103 of file camera.cpp.

104 {
106  m_zoom_t1 = 1.0f;
107  m_rotate_aux_t1 = SFVEC3F( 0.0f );
109 
110  // Since 0 = 2pi, we want to reset the angle to be the closest
111  // one to where we currently are. That ensures that we rotate
112  // the board around the smallest distance getting there.
113  if( m_rotate_aux_t0.x > M_PI )
114  m_rotate_aux_t1.x = static_cast<float>( 2.0f * M_PI );
115 
116  if( m_rotate_aux_t0.y > M_PI )
117  m_rotate_aux_t1.y = static_cast<float>( 2.0f * M_PI );
118 
119  if( m_rotate_aux_t0.z > M_PI )
120  m_rotate_aux_t1.z = static_cast<float>( 2.0f * M_PI );
121 }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310
float m_zoom_t1
Definition: camera.h:268
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315
SFVEC3F m_camera_pos_init
Definition: camera.h:303
SFVEC3F m_camera_pos_t1
Definition: camera.h:306
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:311
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
SFVEC3F m_rotate_aux_t0
Definition: camera.h:314

References m_board_lookat_pos_init, m_camera_pos_init, m_camera_pos_t1, m_lookat_pos_t1, m_rotate_aux_t0, m_rotate_aux_t1, and m_zoom_t1.

Referenced by TRACK_BALL::Reset_T1(), and EDA_3D_CANVAS::SetView3D().

◆ ResetXYpos()

void CAMERA::ResetXYpos ( )

Definition at line 409 of file camera.cpp.

410 {
411  m_parametersChanged = true;
412  m_camera_pos.x = 0.0f;
413  m_camera_pos.y = 0.0f;
414 
416  updateFrustum();
417 }
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335
void updateViewMatrix()
Definition: camera.cpp:139
SFVEC3F m_camera_pos
Definition: camera.h:304
void updateFrustum()
Definition: camera.cpp:265

References m_camera_pos, m_parametersChanged, updateFrustum(), and updateViewMatrix().

◆ ResetXYpos_T1()

void CAMERA::ResetXYpos_T1 ( )

Definition at line 420 of file camera.cpp.

421 {
422  m_camera_pos_t1.x = 0.0f;
423  m_camera_pos_t1.y = 0.0f;
424 }
SFVEC3F m_camera_pos_t1
Definition: camera.h:306

References m_camera_pos_t1.

Referenced by EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position().

◆ RotateX()

void CAMERA::RotateX ( float  aAngleInRadians)

Definition at line 519 of file camera.cpp.

520 {
521  m_rotate_aux.x += aAngleInRadians;
523 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
void updateRotationMatrix()
Definition: camera.cpp:147

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateX_T1()

void CAMERA::RotateX_T1 ( float  aAngleInRadians)

Definition at line 540 of file camera.cpp.

541 {
542  m_rotate_aux_t1.x += aAngleInRadians;
543 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ RotateY()

void CAMERA::RotateY ( float  aAngleInRadians)

Definition at line 526 of file camera.cpp.

527 {
528  m_rotate_aux.y += aAngleInRadians;
530 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
void updateRotationMatrix()
Definition: camera.cpp:147

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateY_T1()

void CAMERA::RotateY_T1 ( float  aAngleInRadians)

Definition at line 546 of file camera.cpp.

547 {
548  m_rotate_aux_t1.y += aAngleInRadians;
549 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ RotateZ()

void CAMERA::RotateZ ( float  aAngleInRadians)

Definition at line 533 of file camera.cpp.

534 {
535  m_rotate_aux.z += aAngleInRadians;
537 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
void updateRotationMatrix()
Definition: camera.cpp:147

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateZ_T1()

void CAMERA::RotateZ_T1 ( float  aAngleInRadians)

Definition at line 552 of file camera.cpp.

553 {
554  m_rotate_aux_t1.z += aAngleInRadians;
555 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ SetBoardLookAtPos()

void CAMERA::SetBoardLookAtPos ( const SFVEC3F aBoardPos)
inline

Definition at line 112 of file camera.h.

113  {
114  if( m_board_lookat_pos_init != aBoardPos )
115  {
116  m_board_lookat_pos_init = aBoardPos;
117  SetLookAtPos( aBoardPos );
118  }
119  }
virtual void SetLookAtPos(const SFVEC3F &aLookAtPos)=0
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:311

References m_board_lookat_pos_init, and SetLookAtPos().

Referenced by RENDER_3D_RAYTRACE::Reload(), and RENDER_3D_OPENGL::reload().

◆ SetCurMousePosition()

void CAMERA::SetCurMousePosition ( const wxPoint &  aPosition)

Update the current mouse position without make any new calculations on camera.

Definition at line 439 of file camera.cpp.

440 {
441  m_lastPosition = aNewMousePosition;
442 }
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:284

References m_lastPosition.

Referenced by EDA_3D_MODEL_VIEWER::OnMouseMove(), EDA_3D_CANVAS::OnMouseMove(), EDA_3D_MODEL_VIEWER::OnMouseWheel(), and EDA_3D_CANVAS::OnMouseWheel().

◆ SetCurWindowSize()

bool CAMERA::SetCurWindowSize ( const wxSize &  aSize)

Update the windows size of the camera.

Returns
true if the windows size changed since last time.

Definition at line 456 of file camera.cpp.

457 {
458  const SFVEC2I newSize = SFVEC2I( aSize.x, aSize.y );
459 
460  if( m_windowSize != newSize )
461  {
462  m_windowSize = newSize;
464 
465  return true;
466  }
467 
468  return false;
469 }
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
void rebuildProjection()
Definition: camera.cpp:174
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279

References m_windowSize, and rebuildProjection().

Referenced by EDA_3D_CANVAS::DoRePaint(), EDA_3D_MODEL_VIEWER::OnMouseMove(), EDA_3D_CANVAS::OnMouseMove(), and EDA_3D_MODEL_VIEWER::OnPaint().

◆ SetInterpolateMode()

void CAMERA::SetInterpolateMode ( CAMERA_INTERPOLATION  aInterpolateMode)
inline

Definition at line 213 of file camera.h.

214  {
215  m_interpolation_mode = aInterpolateMode;
216  }
CAMERA_INTERPOLATION m_interpolation_mode
Definition: camera.h:317

References m_interpolation_mode.

Referenced by EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position(), and EDA_3D_CANVAS::SetView3D().

◆ SetLookAtPos()

virtual void CAMERA::SetLookAtPos ( const SFVEC3F aLookAtPos)
pure virtual

Implemented in TRACK_BALL.

Referenced by SetBoardLookAtPos().

◆ SetLookAtPos_T1()

void CAMERA::SetLookAtPos_T1 ( const SFVEC3F aLookAtPos)
inline

Definition at line 123 of file camera.h.

124  {
125  m_lookat_pos_t1 = aLookAtPos;
126  }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310

References m_lookat_pos_t1.

Referenced by EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position().

◆ SetMaxZoom()

void CAMERA::SetMaxZoom ( float  maxZoom)
inline

Definition at line 187 of file camera.h.

188  {
189  m_maxZoom = maxZoom;
190  zoomChanged();
191  }
void zoomChanged()
Definition: camera.cpp:124
float m_maxZoom
Definition: camera.h:274

References m_maxZoom, and zoomChanged().

Referenced by RENDER_3D_RAYTRACE::Reload().

◆ SetMinZoom()

void CAMERA::SetMinZoom ( float  minZoom)
inline

Definition at line 180 of file camera.h.

181  {
182  m_minZoom = minZoom;
183  zoomChanged();
184  }
void zoomChanged()
Definition: camera.cpp:124
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273

References m_minZoom, and zoomChanged().

Referenced by RENDER_3D_RAYTRACE::Reload().

◆ SetProjection()

void CAMERA::SetProjection ( PROJECTION_TYPE  aProjection)
inline

Definition at line 162 of file camera.h.

162 { m_projectionType = aProjection; }
PROJECTION_TYPE m_projectionType
Definition: camera.h:292

References m_projectionType.

Referenced by EDA_3D_CANVAS::SetProjectionMode().

◆ SetT0_and_T1_current_T()

void CAMERA::SetT0_and_T1_current_T ( )
virtual

This will set T0 and T1 with the current values.

Reimplemented in TRACK_BALL.

Definition at line 558 of file camera.cpp.

559 {
563  m_zoom_t0 = m_zoom;
564 
568  m_zoom_t1 = m_zoom;
569 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
SFVEC3F m_lookat_pos_t0
Definition: camera.h:309
SFVEC3F m_lookat_pos_t1
Definition: camera.h:310
float m_zoom_t1
Definition: camera.h:268
SFVEC3F m_rotate_aux_t1
Definition: camera.h:315
SFVEC3F m_camera_pos_t0
Definition: camera.h:305
float m_zoom_t0
Definition: camera.h:267
SFVEC3F m_camera_pos_t1
Definition: camera.h:306
SFVEC3F m_lookat_pos
Definition: camera.h:308
SFVEC3F m_camera_pos
Definition: camera.h:304
SFVEC3F m_rotate_aux_t0
Definition: camera.h:314

References m_camera_pos, m_camera_pos_t0, m_camera_pos_t1, m_lookat_pos, m_lookat_pos_t0, m_lookat_pos_t1, m_rotate_aux, m_rotate_aux_t0, m_rotate_aux_t1, m_zoom, m_zoom_t0, and m_zoom_t1.

Referenced by EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position(), TRACK_BALL::SetT0_and_T1_current_T(), and EDA_3D_CANVAS::SetView3D().

◆ ToggleProjection()

void CAMERA::ToggleProjection ( )

◆ updateFrustum()

void CAMERA::updateFrustum ( )
protected

Definition at line 265 of file camera.cpp.

266 {
267  // Update matrix and vectors
268  m_viewMatrixInverse = glm::inverse( m_viewMatrix );
269 
270  m_right = glm::normalize( SFVEC3F( m_viewMatrixInverse *
271  glm::vec4( SFVEC3F( 1.0, 0.0, 0.0 ), 0.0 ) ) );
272 
273  m_up = glm::normalize( SFVEC3F( m_viewMatrixInverse *
274  glm::vec4( SFVEC3F( 0.0, 1.0, 0.0 ), 0.0 ) ) );
275 
276  m_dir = glm::normalize( SFVEC3F( m_viewMatrixInverse *
277  glm::vec4( SFVEC3F( 0.0, 0.0, 1.0 ), 0.0 ) ) );
278 
279  m_pos = SFVEC3F( m_viewMatrixInverse * glm::vec4( SFVEC3F( 0.0, 0.0, 0.0 ), 1.0 ) );
280 
281  /*
282  * Frustum is a implementation based on a tutorial by
283  * http://www.lighthouse3d.com/tutorials/view-frustum-culling/
284  */
285 
286  // compute the centers of the near and far planes
289 
290  // compute the 4 corners of the frustum on the near plane
295 
296  // compute the 4 corners of the frustum on the far plane
301 
302  if( ( m_windowSize.x > 0 ) && ( m_windowSize.y > 0 ) )
303  {
304  // Reserve size for precalc values
305  m_right_nX.resize( m_windowSize.x + 1 );
306  m_up_nY.resize( m_windowSize.y + 1 );
307 
308  // Precalc X values for camera -> ray generation
309  const SFVEC3F right_nw = m_right * m_frustum.nw;
310 
311  for( unsigned int x = 0; x < ( (unsigned int) m_windowSize.x + 1 ); ++x )
312  m_right_nX[x] = right_nw * m_scr_nX[x];
313 
314  // Precalc Y values for camera -> ray generation
315  const SFVEC3F up_nh = m_up * m_frustum.nh;
316 
317  for( unsigned int y = 0; y < ( (unsigned int) m_windowSize.y + 1 ); ++y )
318  m_up_nY[y] = up_nh * m_scr_nY[y];
319  }
320 }
SFVEC3F fbl
Far Bottom Left.
Definition: camera.h:57
SFVEC3F fc
Definition: camera.h:50
glm::mat4 m_viewMatrixInverse
Definition: camera.h:289
SFVEC3F ftl
Far Top Left.
Definition: camera.h:55
SFVEC3F m_dir
Definition: camera.h:298
SFVEC3F nbr
Near Bottom Right.
Definition: camera.h:54
std::vector< SFVEC3F > m_right_nX
Precalc values array used to calc ray for each pixel, for X and Y axis of each new camera position.
Definition: camera.h:329
glm::mat4 m_viewMatrix
Definition: camera.h:288
float nw
Definition: camera.h:60
SFVEC3F m_up
Definition: camera.h:297
float fw
Definition: camera.h:60
SFVEC3F fbr
Far Bottom Right.
Definition: camera.h:58
float fh
Definition: camera.h:60
SFVEC3F m_pos
Definition: camera.h:299
SFVEC3F nbl
Near Bottom Left.
Definition: camera.h:53
float farD
Definition: camera.h:59
SFVEC3F m_right
Definition: camera.h:296
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:279
float nearD
Definition: camera.h:59
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:330
CAMERA_FRUSTUM m_frustum
Definition: camera.h:294
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
SFVEC3F ntl
Near Top Left.
Definition: camera.h:51
SFVEC3F ntr
Near Top Right.
Definition: camera.h:52
std::vector< float > m_scr_nY
Definition: camera.h:323
std::vector< float > m_scr_nX
Precalc values array used to calc ray for each pixel (constant for the same window size).
Definition: camera.h:322
SFVEC3F nc
Definition: camera.h:49
float nh
Definition: camera.h:60
SFVEC3F ftr
Far Top Right.
Definition: camera.h:56

References CAMERA_FRUSTUM::farD, CAMERA_FRUSTUM::fbl, CAMERA_FRUSTUM::fbr, CAMERA_FRUSTUM::fc, CAMERA_FRUSTUM::fh, CAMERA_FRUSTUM::ftl, CAMERA_FRUSTUM::ftr, CAMERA_FRUSTUM::fw, m_dir, m_frustum, m_pos, m_right, m_right_nX, m_scr_nX, m_scr_nY, m_up, m_up_nY, m_viewMatrix, m_viewMatrixInverse, m_windowSize, CAMERA_FRUSTUM::nbl, CAMERA_FRUSTUM::nbr, CAMERA_FRUSTUM::nc, CAMERA_FRUSTUM::nearD, CAMERA_FRUSTUM::nh, CAMERA_FRUSTUM::ntl, CAMERA_FRUSTUM::ntr, and CAMERA_FRUSTUM::nw.

Referenced by TRACK_BALL::Drag(), TRACK_BALL::Pan(), rebuildProjection(), ResetXYpos(), TRACK_BALL::SetLookAtPos(), and updateRotationMatrix().

◆ updateRotationMatrix()

void CAMERA::updateRotationMatrix ( )
protected

Definition at line 147 of file camera.cpp.

148 {
149  m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ), m_rotate_aux.x,
150  SFVEC3F( 1.0f, 0.0f, 0.0f ) );
152 
154  SFVEC3F( 0.0f, 1.0f, 0.0f ) );
156 
158  SFVEC3F( 0.0f, 0.0f, 1.0f ) );
160 
161  m_parametersChanged = true;
162 
164  updateFrustum();
165 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:313
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:335
void normalise2PI(float &aAngle)
Definition: camera.cpp:34
void updateViewMatrix()
Definition: camera.cpp:139
void updateFrustum()
Definition: camera.cpp:265
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
glm::mat4 m_rotationMatrixAux
Definition: camera.h:287

References m_parametersChanged, m_rotate_aux, m_rotationMatrixAux, normalise2PI(), updateFrustum(), and updateViewMatrix().

Referenced by Interpolate(), Reset(), RotateX(), RotateY(), and RotateZ().

◆ updateViewMatrix()

void CAMERA::updateViewMatrix ( )
protected

Definition at line 139 of file camera.cpp.

140 {
141  m_viewMatrix = glm::translate( glm::mat4( 1.0f ), m_camera_pos ) *
143  glm::translate( glm::mat4( 1.0f ), -m_lookat_pos );
144 }
glm::mat4 m_viewMatrix
Definition: camera.h:288
glm::mat4 m_rotationMatrix
Definition: camera.h:286
SFVEC3F m_lookat_pos
Definition: camera.h:308
SFVEC3F m_camera_pos
Definition: camera.h:304
glm::mat4 m_rotationMatrixAux
Definition: camera.h:287

References m_camera_pos, m_lookat_pos, m_rotationMatrix, m_rotationMatrixAux, and m_viewMatrix.

Referenced by TRACK_BALL::Drag(), TRACK_BALL::Pan(), Reset(), ResetXYpos(), TRACK_BALL::SetLookAtPos(), updateRotationMatrix(), zoomChanged(), and ZoomReset().

◆ Zoom()

bool CAMERA::Zoom ( float  aFactor)

Definition at line 482 of file camera.cpp.

483 {
484  if( ( m_zoom == m_minZoom && aFactor > 1 ) || ( m_zoom == m_maxZoom && aFactor < 1 )
485  || aFactor == 1 )
486  {
487  return false;
488  }
489 
490  m_zoom /= aFactor;
491 
492  zoomChanged();
493  return true;
494 }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
void zoomChanged()
Definition: camera.cpp:124
float m_maxZoom
Definition: camera.h:274
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273

References m_maxZoom, m_minZoom, m_zoom, and zoomChanged().

Referenced by EDA_3D_MODEL_VIEWER::OnMouseWheel(), and EDA_3D_CANVAS::OnMouseWheel().

◆ Zoom_T1()

bool CAMERA::Zoom_T1 ( float  aFactor)

Definition at line 497 of file camera.cpp.

498 {
499  if( ( m_zoom == m_minZoom && aFactor > 1 ) || ( m_zoom == m_maxZoom && aFactor < 1 )
500  || aFactor == 1 )
501  {
502  return false;
503  }
504 
505  m_zoom_t1 = m_zoom / aFactor;
506 
507  if( m_zoom_t1 < m_minZoom )
509 
510  if( m_zoom_t1 > m_maxZoom )
512 
514 
515  return true;
516 }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
float m_zoom_t1
Definition: camera.h:268
SFVEC3F m_camera_pos_init
Definition: camera.h:303
float m_maxZoom
Definition: camera.h:274
SFVEC3F m_camera_pos_t1
Definition: camera.h:306
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273

References m_camera_pos_init, m_camera_pos_t1, m_maxZoom, m_minZoom, m_zoom, and m_zoom_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ zoomChanged()

void CAMERA::zoomChanged ( )
protected

Definition at line 124 of file camera.cpp.

125 {
126  if( m_zoom < m_minZoom )
127  m_zoom = m_minZoom;
128 
129  if( m_zoom > m_maxZoom )
130  m_zoom = m_maxZoom;
131 
133 
136 }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
SFVEC3F m_camera_pos_init
Definition: camera.h:303
void rebuildProjection()
Definition: camera.cpp:174
void updateViewMatrix()
Definition: camera.cpp:139
float m_maxZoom
Definition: camera.h:274
SFVEC3F m_camera_pos
Definition: camera.h:304
float m_minZoom
Possible 3D zoom range.
Definition: camera.h:273

References m_camera_pos, m_camera_pos_init, m_maxZoom, m_minZoom, m_zoom, rebuildProjection(), and updateViewMatrix().

Referenced by SetMaxZoom(), SetMinZoom(), and Zoom().

◆ ZoomReset()

void CAMERA::ZoomReset ( )

Definition at line 472 of file camera.cpp.

473 {
474  m_zoom = 1.0f;
475 
477 
480 }
float m_zoom
3D zoom value – Z-distance is scaled by it
Definition: camera.h:266
SFVEC3F m_camera_pos_init
Definition: camera.h:303
void rebuildProjection()
Definition: camera.cpp:174
void updateViewMatrix()
Definition: camera.cpp:139
SFVEC3F m_camera_pos
Definition: camera.h:304

References m_camera_pos, m_camera_pos_init, m_zoom, rebuildProjection(), and updateViewMatrix().

Member Data Documentation

◆ m_board_lookat_pos_init

SFVEC3F CAMERA::m_board_lookat_pos_init
protected

Default boardlookat position (the board center).

Definition at line 311 of file camera.h.

Referenced by CAMERA(), Reset(), Reset_T1(), and SetBoardLookAtPos().

◆ m_camera_pos

◆ m_camera_pos_init

SFVEC3F CAMERA::m_camera_pos_init
protected

◆ m_camera_pos_t0

SFVEC3F CAMERA::m_camera_pos_t0
protected

Definition at line 305 of file camera.h.

Referenced by Interpolate(), Reset(), and SetT0_and_T1_current_T().

◆ m_camera_pos_t1

SFVEC3F CAMERA::m_camera_pos_t1
protected

◆ m_dir

SFVEC3F CAMERA::m_dir
protected

Definition at line 298 of file camera.h.

Referenced by GetDir(), MakeRay(), and updateFrustum().

◆ m_focalLen

SFVEC2F CAMERA::m_focalLen
protected

Definition at line 301 of file camera.h.

Referenced by GetFocalLen(), and rebuildProjection().

◆ m_frustum

CAMERA_FRUSTUM CAMERA::m_frustum
protected

◆ m_interpolation_mode

CAMERA_INTERPOLATION CAMERA::m_interpolation_mode
protected

Definition at line 317 of file camera.h.

Referenced by CAMERA(), TRACK_BALL::Interpolate(), and SetInterpolateMode().

◆ m_lastPosition

wxPoint CAMERA::m_lastPosition
protected

The last mouse position in the screen.

Definition at line 284 of file camera.h.

Referenced by TRACK_BALL::Drag(), MakeRayAtCurrrentMousePosition(), TRACK_BALL::Pan(), Reset(), and SetCurMousePosition().

◆ m_lookat_pos

SFVEC3F CAMERA::m_lookat_pos
protected

◆ m_lookat_pos_t0

SFVEC3F CAMERA::m_lookat_pos_t0
protected

Definition at line 309 of file camera.h.

Referenced by Interpolate(), Reset(), and SetT0_and_T1_current_T().

◆ m_lookat_pos_t1

SFVEC3F CAMERA::m_lookat_pos_t1
protected

◆ m_maxZoom

float CAMERA::m_maxZoom
protected

Definition at line 274 of file camera.h.

Referenced by CAMERA(), GetMaxZoom(), rebuildProjection(), SetMaxZoom(), Zoom(), Zoom_T1(), and zoomChanged().

◆ m_minZoom

float CAMERA::m_minZoom
protected

Possible 3D zoom range.

Definition at line 273 of file camera.h.

Referenced by CAMERA(), GetMinZoom(), SetMinZoom(), Zoom(), Zoom_T1(), and zoomChanged().

◆ m_parametersChanged

bool CAMERA::m_parametersChanged
protected

Set to true if any of the parameters in the camera was changed.

Definition at line 335 of file camera.h.

Referenced by TRACK_BALL::Drag(), Interpolate(), TRACK_BALL::Pan(), ParametersChanged(), ParametersChangedQuery(), Reset(), ResetXYpos(), TRACK_BALL::SetLookAtPos(), and updateRotationMatrix().

◆ m_pos

SFVEC3F CAMERA::m_pos
protected

Definition at line 299 of file camera.h.

Referenced by GetPos(), MakeRay(), and updateFrustum().

◆ m_projectionMatrix

glm::mat4 CAMERA::m_projectionMatrix
protected

Definition at line 290 of file camera.h.

Referenced by GetProjectionMatrix(), rebuildProjection(), and Reset().

◆ m_projectionMatrixInv

glm::mat4 CAMERA::m_projectionMatrixInv
protected

Definition at line 291 of file camera.h.

Referenced by GetProjectionMatrixInv(), rebuildProjection(), and Reset().

◆ m_projectionType

PROJECTION_TYPE CAMERA::m_projectionType
protected

◆ m_right

SFVEC3F CAMERA::m_right
protected

Definition at line 296 of file camera.h.

Referenced by GetRight(), and updateFrustum().

◆ m_right_nX

std::vector< SFVEC3F > CAMERA::m_right_nX
protected

Precalc values array used to calc ray for each pixel, for X and Y axis of each new camera position.

Definition at line 329 of file camera.h.

Referenced by MakeRay(), and updateFrustum().

◆ m_rotate_aux

SFVEC3F CAMERA::m_rotate_aux
protected

Stores the rotation angle auxiliary.

Definition at line 313 of file camera.h.

Referenced by Interpolate(), Reset(), RotateX(), RotateY(), RotateZ(), SetT0_and_T1_current_T(), and updateRotationMatrix().

◆ m_rotate_aux_t0

SFVEC3F CAMERA::m_rotate_aux_t0
protected

Definition at line 314 of file camera.h.

Referenced by Interpolate(), Reset(), Reset_T1(), and SetT0_and_T1_current_T().

◆ m_rotate_aux_t1

SFVEC3F CAMERA::m_rotate_aux_t1
protected

◆ m_rotationMatrix

glm::mat4 CAMERA::m_rotationMatrix
protected

◆ m_rotationMatrixAux

glm::mat4 CAMERA::m_rotationMatrixAux
protected

Definition at line 287 of file camera.h.

Referenced by GetRotationMatrix(), Reset(), updateRotationMatrix(), and updateViewMatrix().

◆ m_scr_nX

std::vector< float > CAMERA::m_scr_nX
protected

Precalc values array used to calc ray for each pixel (constant for the same window size).

Definition at line 322 of file camera.h.

Referenced by rebuildProjection(), Reset(), and updateFrustum().

◆ m_scr_nY

std::vector< float > CAMERA::m_scr_nY
protected

Definition at line 323 of file camera.h.

Referenced by rebuildProjection(), Reset(), and updateFrustum().

◆ m_up

SFVEC3F CAMERA::m_up
protected

Definition at line 297 of file camera.h.

Referenced by GetUp(), and updateFrustum().

◆ m_up_nY

std::vector< SFVEC3F > CAMERA::m_up_nY
protected

Definition at line 330 of file camera.h.

Referenced by MakeRay(), and updateFrustum().

◆ m_viewMatrix

glm::mat4 CAMERA::m_viewMatrix
protected

Definition at line 288 of file camera.h.

Referenced by GetViewMatrix(), Reset(), updateFrustum(), and updateViewMatrix().

◆ m_viewMatrixInverse

glm::mat4 CAMERA::m_viewMatrixInverse
protected

Definition at line 289 of file camera.h.

Referenced by GetViewMatrix_Inv(), Reset(), and updateFrustum().

◆ m_windowSize

SFVEC2I CAMERA::m_windowSize
protected

The window size that this camera is working.

Definition at line 279 of file camera.h.

Referenced by CAMERA(), TRACK_BALL::Drag(), MakeRay(), MakeRayAtCurrrentMousePosition(), TRACK_BALL::Pan(), rebuildProjection(), SetCurWindowSize(), and updateFrustum().

◆ m_zoom

float CAMERA::m_zoom
protected

3D zoom value – Z-distance is scaled by it

Definition at line 266 of file camera.h.

Referenced by GetZoom(), Interpolate(), rebuildProjection(), Reset(), SetT0_and_T1_current_T(), Zoom(), Zoom_T1(), zoomChanged(), and ZoomReset().

◆ m_zoom_t0

float CAMERA::m_zoom_t0
protected

Definition at line 267 of file camera.h.

Referenced by Interpolate(), Reset(), and SetT0_and_T1_current_T().

◆ m_zoom_t1

float CAMERA::m_zoom_t1
protected

Definition at line 268 of file camera.h.

Referenced by Interpolate(), Reset(), Reset_T1(), SetT0_and_T1_current_T(), and Zoom_T1().


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