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 aRangeScale, float aDefaultZoom)
 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
 
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 ZoomGet () const
 
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 rebuildProjection ()
 
void updateFrustum ()
 
void updateViewMatrix ()
 
void updateRotationMatrix ()
 

Protected Attributes

float m_range_scale
 The nominal range expected to be used in the camera. More...
 
float m_default_zoom
 3D zoom value (Min 0.0 ... More...
 
float m_zoom
 
float m_zoom_t0
 
float m_zoom_t1
 
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  aRangeScale,
float  aDefaultZoom 
)
explicit

Initialize a camera.

Parameters
aRangeScaleit will be expected that the board will have a -aRangeScale/2 to +aRangeScale/2. It will initialize the Z position with aRangeScale.

Definition at line 54 of file camera.cpp.

55 {
56  wxLogTrace( m_logTrace, wxT( "CAMERA::CAMERA" ) );
57 
58  m_range_scale = aRangeScale;
59  m_default_zoom = aDefaultZoom;
60  m_camera_pos_init = SFVEC3F( 0.0f, 0.0f, -(aRangeScale * 2.0f ) );
62  m_windowSize = SFVEC2I( 0, 0 );
65 
66  Reset();
67 }
virtual void Reset()
Reset the camera to initial state.
Definition: camera.cpp:70
float m_default_zoom
3D zoom value (Min 0.0 ...
Definition: camera.h:258
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
SFVEC3F m_camera_pos_init
Definition: camera.h:290
PROJECTION_TYPE m_projectionType
Definition: camera.h:279
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266
CAMERA_INTERPOLATION m_interpolation_mode
Definition: camera.h:304
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:298
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
Definition: camera.h:331
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
float m_range_scale
The nominal range expected to be used in the camera.
Definition: camera.h:252

References BEZIER, m_board_lookat_pos_init, m_camera_pos_init, m_default_zoom, m_interpolation_mode, m_logTrace, m_projectionType, m_range_scale, m_windowSize, PERSPECTIVE, and Reset().

◆ ~CAMERA()

virtual CAMERA::~CAMERA ( )
inlinevirtual

Definition at line 89 of file camera.h.

90  {
91  }

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().

◆ GetCameraPos()

const SFVEC3F& CAMERA::GetCameraPos ( ) const
inline

Definition at line 132 of file camera.h.

132 { return m_camera_pos; }
SFVEC3F m_camera_pos
Definition: camera.h:291

References m_camera_pos.

Referenced by EDA_3D_CANVAS::DisplayStatus().

◆ GetDir()

const SFVEC3F& CAMERA::GetDir ( ) const
inline

Definition at line 108 of file camera.h.

108 { return m_dir; }
SFVEC3F m_dir
Definition: camera.h:285

References m_dir.

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

◆ GetFar()

float CAMERA::GetFar ( ) const
inline

Definition at line 112 of file camera.h.

112 { return m_frustum.farD; }
float farD
Definition: camera.h:59
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281

References CAMERA_FRUSTUM::farD, and m_frustum.

◆ GetFocalLen()

const SFVEC2F& CAMERA::GetFocalLen ( ) const
inline

Definition at line 110 of file camera.h.

110 { return m_focalLen; }
SFVEC2F m_focalLen
Definition: camera.h:288

References m_focalLen.

◆ GetLookAtPos_T1()

const SFVEC3F& CAMERA::GetLookAtPos_T1 ( ) const
inline

Definition at line 130 of file camera.h.

130 { return m_lookat_pos_t1; }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297

References m_lookat_pos_t1.

Referenced by EDA_3D_CANVAS::render_pivot().

◆ GetNear()

float CAMERA::GetNear ( ) const
inline

Definition at line 111 of file camera.h.

111 { return m_frustum.nearD; }
float nearD
Definition: camera.h:59
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281

References m_frustum, and CAMERA_FRUSTUM::nearD.

◆ GetPos()

const SFVEC3F& CAMERA::GetPos ( ) const
inline

Definition at line 109 of file camera.h.

109 { return m_pos; }
SFVEC3F m_pos
Definition: camera.h:286

References m_pos.

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

◆ GetProjection()

PROJECTION_TYPE CAMERA::GetProjection ( )
inline

Definition at line 160 of file camera.h.

160 { return m_projectionType; }
PROJECTION_TYPE m_projectionType
Definition: camera.h:279

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 377 of file camera.cpp.

378 {
379  return m_projectionMatrix;
380 }
glm::mat4 m_projectionMatrix
Definition: camera.h:277

References m_projectionMatrix.

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

◆ GetProjectionMatrixInv()

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

Definition at line 383 of file camera.cpp.

384 {
385  return m_projectionMatrixInv;
386 }
glm::mat4 m_projectionMatrixInv
Definition: camera.h:278

References m_projectionMatrixInv.

◆ GetRight()

const SFVEC3F& CAMERA::GetRight ( ) const
inline

Definition at line 106 of file camera.h.

106 { return m_right; }
SFVEC3F m_right
Definition: camera.h:283

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 152 of file camera.cpp.

153 {
155 }
glm::mat4 m_rotationMatrix
Definition: camera.h:273
glm::mat4 m_rotationMatrixAux
Definition: camera.h:274

References m_rotationMatrix, and m_rotationMatrixAux.

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

◆ GetUp()

const SFVEC3F& CAMERA::GetUp ( ) const
inline

Definition at line 107 of file camera.h.

107 { return m_up; }
SFVEC3F m_up
Definition: camera.h:284

References m_up.

◆ GetViewMatrix()

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

Definition at line 407 of file camera.cpp.

408 {
409  return m_viewMatrix;
410 }
glm::mat4 m_viewMatrix
Definition: camera.h:275

References m_viewMatrix.

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

◆ GetViewMatrix_Inv()

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

Definition at line 413 of file camera.cpp.

414 {
415  return m_viewMatrixInverse;
416 }
glm::mat4 m_viewMatrixInverse
Definition: camera.h:276

References m_viewMatrixInverse.

◆ 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 564 of file camera.cpp.

565 {
566  wxASSERT( t >= 0.0f );
567 
568  const float t0 = 1.0f - t;
569 
573  m_zoom = m_zoom_t0 * t0 + m_zoom_t1 * t;
574 
575  m_parametersChanged = true;
576 
579 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
float m_zoom
Definition: camera.h:259
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:322
SFVEC3F m_lookat_pos_t0
Definition: camera.h:296
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297
float m_zoom_t1
Definition: camera.h:261
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302
void rebuildProjection()
Definition: camera.cpp:158
SFVEC3F m_camera_pos_t0
Definition: camera.h:292
void updateRotationMatrix()
Definition: camera.cpp:131
float m_zoom_t0
Definition: camera.h:260
SFVEC3F m_camera_pos_t1
Definition: camera.h:293
SFVEC3F m_lookat_pos
Definition: camera.h:295
SFVEC3F m_camera_pos
Definition: camera.h:291
SFVEC3F m_rotate_aux_t0
Definition: camera.h:301

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 309 of file camera.cpp.

311 {
312  wxASSERT( aWindowPos.x < m_windowSize.x );
313  wxASSERT( aWindowPos.y < m_windowSize.y );
314 
315  const SFVEC3F up_plus_right = m_up_nY[aWindowPos.y] + m_right_nX[aWindowPos.x];
316 
317  switch( m_projectionType )
318  {
319  default:
321  aOutOrigin = up_plus_right + m_frustum.nc;
322  aOutDirection = glm::normalize( aOutOrigin - m_pos );
323  break;
324 
326  aOutOrigin = up_plus_right * 0.5f + m_frustum.nc;
327  aOutDirection = -m_dir + SFVEC3F( FLT_EPSILON );
328  break;
329  }
330 }
SFVEC3F m_dir
Definition: camera.h:285
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:316
SFVEC3F m_pos
Definition: camera.h:286
PROJECTION_TYPE m_projectionType
Definition: camera.h:279
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:317
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281
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 333 of file camera.cpp.

335 {
336  wxASSERT( aWindowPos.x < (float)m_windowSize.x );
337  wxASSERT( aWindowPos.y < (float)m_windowSize.y );
338 
339  const SFVEC2F floorWinPos_f = glm::floor( aWindowPos );
340  const SFVEC2I floorWinPos_i = (SFVEC2I)floorWinPos_f;
341  const SFVEC2F relativeWinPos = aWindowPos - floorWinPos_f;
342 
343  // Note: size of vectors m_up and m_right are m_windowSize + 1
344  const SFVEC3F up_plus_right = m_up_nY[floorWinPos_i.y] * (1.0f - relativeWinPos.y) +
345  m_up_nY[floorWinPos_i.y + 1] * relativeWinPos.y +
346  m_right_nX[floorWinPos_i.x] * (1.0f - relativeWinPos.x) +
347  m_right_nX[floorWinPos_i.x + 1] * relativeWinPos.x;
348 
349  switch( m_projectionType )
350  {
351  default:
353  aOutOrigin = up_plus_right + m_frustum.nc;
354  aOutDirection = glm::normalize( aOutOrigin - m_pos );
355  break;
356 
358  aOutOrigin = up_plus_right * 0.5f + m_frustum.nc;
359  aOutDirection = -m_dir + SFVEC3F( FLT_EPSILON );
360  break;
361  }
362 }
SFVEC3F m_dir
Definition: camera.h:285
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:316
SFVEC3F m_pos
Definition: camera.h:286
PROJECTION_TYPE m_projectionType
Definition: camera.h:279
glm::vec2 SFVEC2F
Definition: xv3d_types.h:42
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:317
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281
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 365 of file camera.cpp.

366 {
367  const SFVEC2I windowPos = SFVEC2I( m_lastPosition.x, m_windowSize.y - m_lastPosition.y );
368 
369  if( ( 0 < windowPos.x ) && ( windowPos.x < m_windowSize.x ) &&
370  ( 0 < windowPos.y ) && ( windowPos.y < m_windowSize.y ) )
371  {
372  MakeRay( windowPos, aOutOrigin, aOutDirection );
373  }
374 }
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:271
void MakeRay(const SFVEC2I &aWindowPos, SFVEC3F &aOutOrigin, SFVEC3F &aOutDirection) const
Make a ray based on a windows screen position.
Definition: camera.cpp:309
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266

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 582 of file camera.cpp.

583 {
584  const bool parametersChanged = m_parametersChanged;
585 
586  m_parametersChanged = false;
587 
588  return parametersChanged;
589 }
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:322

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 211 of file camera.h.

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

References m_parametersChanged.

◆ rebuildProjection()

void CAMERA::rebuildProjection ( )
protected

Definition at line 158 of file camera.cpp.

159 {
160  if( ( m_windowSize.x == 0 ) || ( m_windowSize.y == 0 ) )
161  return;
162 
163  m_frustum.ratio = (float) m_windowSize.x / (float)m_windowSize.y;
164 
165  // Consider that we can render double the length multiplied by the 2/sqrt(2)
166  m_frustum.farD = glm::length( m_camera_pos_init ) * 2.0f * ( 2.0f * sqrtf( 2.0f ) );
167 
168  switch( m_projectionType )
169  {
170  default:
172 
173  m_frustum.nearD = 0.10f;
174 
175  // Ratio width / height of the window display
176  m_frustum.angle = 45.0f;
177 
178  m_projectionMatrix = glm::perspective( glm::radians( m_frustum.angle ), m_frustum.ratio,
180 
181  m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
182 
183  m_frustum.tang = glm::tan( glm::radians( m_frustum.angle ) * 0.5f );
184 
185  m_focalLen.x = ( (float)m_windowSize.y / (float)m_windowSize.x ) / m_frustum.tang;
186  m_focalLen.y = 1.0f / m_frustum.tang;
187 
192  break;
193 
195 
196  m_frustum.nearD = -m_frustum.farD; // Use a symmetrical clip plane for ortho projection
197 
198  // This formula was found by trial and error
199  const float orthoReductionFactor = glm::length( m_camera_pos_init ) *
200  m_zoom * m_zoom * 0.5f;
201 
202  // Initialize Projection Matrix for Orthographic View
203  m_projectionMatrix = glm::ortho( -m_frustum.ratio * orthoReductionFactor,
204  m_frustum.ratio * orthoReductionFactor,
205  -orthoReductionFactor,
206  orthoReductionFactor,
208 
209  m_projectionMatrixInv = glm::inverse( m_projectionMatrix );
210 
211  m_frustum.nw = orthoReductionFactor * 2.0f * m_frustum.ratio;
212  m_frustum.nh = orthoReductionFactor * 2.0f;
215 
216  break;
217  }
218 
219  if( ( m_windowSize.x > 0 ) && ( m_windowSize.y > 0 ) )
220  {
221  m_scr_nX.resize( m_windowSize.x + 1 );
222  m_scr_nY.resize( m_windowSize.y + 1 );
223 
224  // Precalc X values for camera -> ray generation
225  for( unsigned int x = 0; x < (unsigned int)m_windowSize.x + 1; ++x )
226  {
227  // Converts 0.0 .. 1.0
228  const float xNormalizedDeviceCoordinates = ( ( (float)x + 0.5f ) /
229  (m_windowSize.x - 0.0f) );
230 
231  // Converts -1.0 .. 1.0
232  m_scr_nX[x] = 2.0f * xNormalizedDeviceCoordinates - 1.0f;
233  }
234 
235  // Precalc Y values for camera -> ray generation
236  for( unsigned int y = 0; y < (unsigned int)m_windowSize.y + 1 ; ++y )
237  {
238  // Converts 0.0 .. 1.0
239  const float yNormalizedDeviceCoordinates = ( ( (float)y + 0.5f ) /
240  (m_windowSize.y - 0.0f) );
241 
242  // Converts -1.0 .. 1.0
243  m_scr_nY[y] = 2.0f * yNormalizedDeviceCoordinates - 1.0f;
244  }
245 
246  updateFrustum();
247  }
248 }
float m_zoom
Definition: camera.h:259
float ratio
Definition: camera.h:59
SFVEC2F m_focalLen
Definition: camera.h:288
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:290
PROJECTION_TYPE m_projectionType
Definition: camera.h:279
float farD
Definition: camera.h:59
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266
glm::mat4 m_projectionMatrix
Definition: camera.h:277
float nearD
Definition: camera.h:59
void updateFrustum()
Definition: camera.cpp:251
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281
std::vector< float > m_scr_nY
Definition: camera.h:310
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:309
glm::mat4 m_projectionMatrixInv
Definition: camera.h:278
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_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(), Zoom(), and ZoomReset().

◆ Reset()

void CAMERA::Reset ( )
virtual

Reset the camera to initial state.

Reimplemented in TRACK_BALL.

Definition at line 70 of file camera.cpp.

71 {
72  m_parametersChanged = true;
73  m_projectionMatrix = glm::mat4( 1.0f );
74  m_projectionMatrixInv = glm::mat4( 1.0f );
75  m_rotationMatrix = glm::mat4( 1.0f );
76  m_rotationMatrixAux = glm::mat4( 1.0f );
77  m_lastPosition = wxPoint( 0, 0 );
78 
88 
89  m_rotate_aux = SFVEC3F( 0.0f );
90  m_rotate_aux_t0 = SFVEC3F( 0.0f );
91  m_rotate_aux_t1 = SFVEC3F( 0.0f );
92 
95  m_viewMatrixInverse = glm::inverse( m_viewMatrix );
96  m_scr_nX.clear();
97  m_scr_nY.clear();
99 }
glm::mat4 m_viewMatrixInverse
Definition: camera.h:276
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
float m_zoom
Definition: camera.h:259
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:322
SFVEC3F m_lookat_pos_t0
Definition: camera.h:296
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297
float m_zoom_t1
Definition: camera.h:261
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302
float m_default_zoom
3D zoom value (Min 0.0 ...
Definition: camera.h:258
glm::mat4 m_viewMatrix
Definition: camera.h:275
SFVEC3F m_camera_pos_init
Definition: camera.h:290
void rebuildProjection()
Definition: camera.cpp:158
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:271
SFVEC3F m_camera_pos_t0
Definition: camera.h:292
void updateRotationMatrix()
Definition: camera.cpp:131
void updateViewMatrix()
Definition: camera.cpp:123
float m_zoom_t0
Definition: camera.h:260
glm::mat4 m_rotationMatrix
Definition: camera.h:273
SFVEC3F m_camera_pos_t1
Definition: camera.h:293
SFVEC3F m_lookat_pos
Definition: camera.h:295
glm::mat4 m_projectionMatrix
Definition: camera.h:277
SFVEC3F m_camera_pos
Definition: camera.h:291
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:298
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
glm::mat4 m_rotationMatrixAux
Definition: camera.h:274
std::vector< float > m_scr_nY
Definition: camera.h:310
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:309
glm::mat4 m_projectionMatrixInv
Definition: camera.h:278
SFVEC3F m_rotate_aux_t0
Definition: camera.h:301

References m_board_lookat_pos_init, m_camera_pos, m_camera_pos_init, m_camera_pos_t0, m_camera_pos_t1, m_default_zoom, 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 102 of file camera.cpp.

103 {
106  m_rotate_aux_t1 = SFVEC3F( 0.0f );
108 
109  // Since 0 = 2pi, we want to reset the angle to be the closest
110  // one to where we currently are. That ensures that we rotate
111  // the board around the smallest distance getting there.
112  if( m_rotate_aux_t0.x > M_PI )
113  m_rotate_aux_t1.x = static_cast<float>( 2.0f * M_PI );
114 
115  if( m_rotate_aux_t0.y > M_PI )
116  m_rotate_aux_t1.y = static_cast<float>( 2.0f * M_PI );
117 
118  if( m_rotate_aux_t0.z > M_PI )
119  m_rotate_aux_t1.z = static_cast<float>( 2.0f * M_PI );
120 }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297
float m_zoom_t1
Definition: camera.h:261
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302
float m_default_zoom
3D zoom value (Min 0.0 ...
Definition: camera.h:258
SFVEC3F m_camera_pos_init
Definition: camera.h:290
SFVEC3F m_camera_pos_t1
Definition: camera.h:293
SFVEC3F m_board_lookat_pos_init
Default boardlookat position (the board center).
Definition: camera.h:298
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
SFVEC3F m_rotate_aux_t0
Definition: camera.h:301

References m_board_lookat_pos_init, m_camera_pos_init, m_camera_pos_t1, m_default_zoom, 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 389 of file camera.cpp.

390 {
391  m_parametersChanged = true;
392  m_camera_pos.x = 0.0f;
393  m_camera_pos.y = 0.0f;
394 
396  updateFrustum();
397 }
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:322
void updateViewMatrix()
Definition: camera.cpp:123
SFVEC3F m_camera_pos
Definition: camera.h:291
void updateFrustum()
Definition: camera.cpp:251

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

◆ ResetXYpos_T1()

void CAMERA::ResetXYpos_T1 ( )

Definition at line 400 of file camera.cpp.

401 {
402  m_camera_pos_t1.x = 0.0f;
403  m_camera_pos_t1.y = 0.0f;
404 }
SFVEC3F m_camera_pos_t1
Definition: camera.h:293

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 511 of file camera.cpp.

512 {
513  m_rotate_aux.x += aAngleInRadians;
515 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
void updateRotationMatrix()
Definition: camera.cpp:131

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateX_T1()

void CAMERA::RotateX_T1 ( float  aAngleInRadians)

Definition at line 532 of file camera.cpp.

533 {
534  m_rotate_aux_t1.x += aAngleInRadians;
535 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ RotateY()

void CAMERA::RotateY ( float  aAngleInRadians)

Definition at line 518 of file camera.cpp.

519 {
520  m_rotate_aux.y += aAngleInRadians;
522 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
void updateRotationMatrix()
Definition: camera.cpp:131

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateY_T1()

void CAMERA::RotateY_T1 ( float  aAngleInRadians)

Definition at line 538 of file camera.cpp.

539 {
540  m_rotate_aux_t1.y += aAngleInRadians;
541 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ RotateZ()

void CAMERA::RotateZ ( float  aAngleInRadians)

Definition at line 525 of file camera.cpp.

526 {
527  m_rotate_aux.z += aAngleInRadians;
529 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
void updateRotationMatrix()
Definition: camera.cpp:131

References m_rotate_aux, and updateRotationMatrix().

Referenced by EDA_3D_CONTROLLER::RotateView().

◆ RotateZ_T1()

void CAMERA::RotateZ_T1 ( float  aAngleInRadians)

Definition at line 544 of file camera.cpp.

545 {
546  m_rotate_aux_t1.z += aAngleInRadians;
547 }
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302

References m_rotate_aux_t1.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ SetBoardLookAtPos()

void CAMERA::SetBoardLookAtPos ( const SFVEC3F aBoardPos)
inline

Definition at line 114 of file camera.h.

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

References m_board_lookat_pos_init, and SetLookAtPos().

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

◆ SetCurMousePosition()

void CAMERA::SetCurMousePosition ( const wxPoint &  aPosition)

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

Definition at line 419 of file camera.cpp.

420 {
421  m_lastPosition = aNewMousePosition;
422 }
wxPoint m_lastPosition
The last mouse position in the screen.
Definition: camera.h:271

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 436 of file camera.cpp.

437 {
438  const SFVEC2I newSize = SFVEC2I( aSize.x, aSize.y );
439 
440  if( m_windowSize != newSize )
441  {
442  m_windowSize = newSize;
444 
445  return true;
446  }
447 
448  return false;
449 }
glm::ivec2 SFVEC2I
Definition: xv3d_types.h:39
void rebuildProjection()
Definition: camera.cpp:158
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266

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 198 of file camera.h.

199  {
200  m_interpolation_mode = aInterpolateMode;
201  }
CAMERA_INTERPOLATION m_interpolation_mode
Definition: camera.h:304

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 125 of file camera.h.

126  {
127  m_lookat_pos_t1 = aLookAtPos;
128  }
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297

References m_lookat_pos_t1.

Referenced by EDA_3D_CANVAS::move_pivot_based_on_cur_mouse_position().

◆ SetProjection()

void CAMERA::SetProjection ( PROJECTION_TYPE  aProjection)
inline

Definition at line 161 of file camera.h.

161 { m_projectionType = aProjection; }
PROJECTION_TYPE m_projectionType
Definition: camera.h:279

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 550 of file camera.cpp.

551 {
555  m_zoom_t0 = m_zoom;
556 
560  m_zoom_t1 = m_zoom;
561 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
float m_zoom
Definition: camera.h:259
SFVEC3F m_lookat_pos_t0
Definition: camera.h:296
SFVEC3F m_lookat_pos_t1
Definition: camera.h:297
float m_zoom_t1
Definition: camera.h:261
SFVEC3F m_rotate_aux_t1
Definition: camera.h:302
SFVEC3F m_camera_pos_t0
Definition: camera.h:292
float m_zoom_t0
Definition: camera.h:260
SFVEC3F m_camera_pos_t1
Definition: camera.h:293
SFVEC3F m_lookat_pos
Definition: camera.h:295
SFVEC3F m_camera_pos
Definition: camera.h:291
SFVEC3F m_rotate_aux_t0
Definition: camera.h:301

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 251 of file camera.cpp.

252 {
253  // Update matrix and vectors
254  m_viewMatrixInverse = glm::inverse( m_viewMatrix );
255 
256  m_right = glm::normalize( SFVEC3F( m_viewMatrixInverse *
257  glm::vec4( SFVEC3F( 1.0, 0.0, 0.0 ), 0.0 ) ) );
258 
259  m_up = glm::normalize( SFVEC3F( m_viewMatrixInverse *
260  glm::vec4( SFVEC3F( 0.0, 1.0, 0.0 ), 0.0 ) ) );
261 
262  m_dir = glm::normalize( SFVEC3F( m_viewMatrixInverse *
263  glm::vec4( SFVEC3F( 0.0, 0.0, 1.0 ), 0.0 ) ) );
264 
265  m_pos = SFVEC3F( m_viewMatrixInverse * glm::vec4( SFVEC3F( 0.0, 0.0, 0.0 ), 1.0 ) );
266 
267  /*
268  * Frustum is a implementation based on a tutorial by
269  * http://www.lighthouse3d.com/tutorials/view-frustum-culling/
270  */
271 
272  // compute the centers of the near and far planes
275 
276  // compute the 4 corners of the frustum on the near plane
281 
282  // compute the 4 corners of the frustum on the far plane
287 
288  if( ( m_windowSize.x > 0 ) && ( m_windowSize.y > 0 ) )
289  {
290  // Reserve size for precalc values
291  m_right_nX.resize( m_windowSize.x + 1 );
292  m_up_nY.resize( m_windowSize.y + 1 );
293 
294  // Precalc X values for camera -> ray generation
295  const SFVEC3F right_nw = m_right * m_frustum.nw;
296 
297  for( unsigned int x = 0; x < ( (unsigned int) m_windowSize.x + 1 ); ++x )
298  m_right_nX[x] = right_nw * m_scr_nX[x];
299 
300  // Precalc Y values for camera -> ray generation
301  const SFVEC3F up_nh = m_up * m_frustum.nh;
302 
303  for( unsigned int y = 0; y < ( (unsigned int) m_windowSize.y + 1 ); ++y )
304  m_up_nY[y] = up_nh * m_scr_nY[y];
305  }
306 }
SFVEC3F fbl
Far Bottom Left.
Definition: camera.h:57
SFVEC3F fc
Definition: camera.h:50
glm::mat4 m_viewMatrixInverse
Definition: camera.h:276
SFVEC3F ftl
Far Top Left.
Definition: camera.h:55
SFVEC3F m_dir
Definition: camera.h:285
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:316
glm::mat4 m_viewMatrix
Definition: camera.h:275
float nw
Definition: camera.h:60
SFVEC3F m_up
Definition: camera.h:284
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:286
SFVEC3F nbl
Near Bottom Left.
Definition: camera.h:53
float farD
Definition: camera.h:59
SFVEC3F m_right
Definition: camera.h:283
SFVEC2I m_windowSize
The window size that this camera is working.
Definition: camera.h:266
float nearD
Definition: camera.h:59
std::vector< SFVEC3F > m_up_nY
Definition: camera.h:317
CAMERA_FRUSTUM m_frustum
Definition: camera.h:281
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:310
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:309
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 131 of file camera.cpp.

132 {
133  m_rotationMatrixAux = glm::rotate( glm::mat4( 1.0f ), m_rotate_aux.x,
134  SFVEC3F( 1.0f, 0.0f, 0.0f ) );
136 
138  SFVEC3F( 0.0f, 1.0f, 0.0f ) );
140 
142  SFVEC3F( 0.0f, 0.0f, 1.0f ) );
144 
145  m_parametersChanged = true;
146 
148  updateFrustum();
149 }
SFVEC3F m_rotate_aux
Stores the rotation angle auxiliary.
Definition: camera.h:300
bool m_parametersChanged
Set to true if any of the parameters in the camera was changed.
Definition: camera.h:322
void normalise2PI(float &aAngle)
Definition: camera.cpp:34
void updateViewMatrix()
Definition: camera.cpp:123
void updateFrustum()
Definition: camera.cpp:251
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
glm::mat4 m_rotationMatrixAux
Definition: camera.h:274

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 123 of file camera.cpp.

124 {
125  m_viewMatrix = glm::translate( glm::mat4( 1.0f ), m_camera_pos ) *
127  glm::translate( glm::mat4( 1.0f ), -m_lookat_pos );
128 }
glm::mat4 m_viewMatrix
Definition: camera.h:275
glm::mat4 m_rotationMatrix
Definition: camera.h:273
SFVEC3F m_lookat_pos
Definition: camera.h:295
SFVEC3F m_camera_pos
Definition: camera.h:291
glm::mat4 m_rotationMatrixAux
Definition: camera.h:274

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(), Zoom(), and ZoomReset().

◆ Zoom()

bool CAMERA::Zoom ( float  aFactor)

Definition at line 462 of file camera.cpp.

463 {
464  if( ( m_zoom == MIN_ZOOM && aFactor > 1 ) || ( m_zoom == MAX_ZOOM && aFactor < 1 )
465  || aFactor == 1 )
466  return false;
467 
468  m_zoom /= aFactor;
469 
470  if( m_zoom <= MIN_ZOOM )
471  m_zoom = MIN_ZOOM;
472 
473  if( m_zoom >= MAX_ZOOM )
474  m_zoom = MAX_ZOOM;
475 
477 
480 
481  return true;
482 }
#define MIN_ZOOM
Definition: camera.cpp:50
float m_zoom
Definition: camera.h:259
#define MAX_ZOOM
Definition: camera.cpp:51
SFVEC3F m_camera_pos_init
Definition: camera.h:290
void rebuildProjection()
Definition: camera.cpp:158
void updateViewMatrix()
Definition: camera.cpp:123
SFVEC3F m_camera_pos
Definition: camera.h:291

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

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

◆ Zoom_T1()

bool CAMERA::Zoom_T1 ( float  aFactor)

Definition at line 485 of file camera.cpp.

486 {
487  if( ( m_zoom == MIN_ZOOM && aFactor > 1 ) || ( m_zoom == MAX_ZOOM && aFactor < 1 )
488  || aFactor == 1 )
489  return false;
490 
491  m_zoom_t1 = m_zoom / aFactor;
492 
493  if( m_zoom_t1 < MIN_ZOOM )
495 
496  if( m_zoom_t1 > MAX_ZOOM )
498 
500 
501  return true;
502 }
#define MIN_ZOOM
Definition: camera.cpp:50
float m_zoom
Definition: camera.h:259
#define MAX_ZOOM
Definition: camera.cpp:51
float m_zoom_t1
Definition: camera.h:261
SFVEC3F m_camera_pos_init
Definition: camera.h:290
SFVEC3F m_camera_pos_t1
Definition: camera.h:293

References m_camera_pos_init, m_camera_pos_t1, m_zoom, m_zoom_t1, MAX_ZOOM, and MIN_ZOOM.

Referenced by EDA_3D_CANVAS::SetView3D().

◆ ZoomGet()

float CAMERA::ZoomGet ( ) const

Definition at line 505 of file camera.cpp.

506 {
507  return m_zoom;
508 }
float m_zoom
Definition: camera.h:259

References m_zoom.

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

◆ ZoomReset()

void CAMERA::ZoomReset ( )

Definition at line 452 of file camera.cpp.

453 {
454  m_zoom = 1.0f;
455 
457 
460 }
float m_zoom
Definition: camera.h:259
SFVEC3F m_camera_pos_init
Definition: camera.h:290
void rebuildProjection()
Definition: camera.cpp:158
void updateViewMatrix()
Definition: camera.cpp:123
SFVEC3F m_camera_pos
Definition: camera.h:291

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 298 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

Definition at line 290 of file camera.h.

Referenced by CAMERA(), rebuildProjection(), Reset(), Reset_T1(), Zoom(), Zoom_T1(), and ZoomReset().

◆ m_camera_pos_t0

SFVEC3F CAMERA::m_camera_pos_t0
protected

Definition at line 292 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_default_zoom

float CAMERA::m_default_zoom
protected

3D zoom value (Min 0.0 ...

Max 1.0)

Definition at line 258 of file camera.h.

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

◆ m_dir

SFVEC3F CAMERA::m_dir
protected

Definition at line 285 of file camera.h.

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

◆ m_focalLen

SFVEC2F CAMERA::m_focalLen
protected

Definition at line 288 of file camera.h.

Referenced by GetFocalLen(), and rebuildProjection().

◆ m_frustum

CAMERA_FRUSTUM CAMERA::m_frustum
protected

Definition at line 281 of file camera.h.

Referenced by GetFar(), GetNear(), MakeRay(), TRACK_BALL::Pan(), rebuildProjection(), and updateFrustum().

◆ m_interpolation_mode

CAMERA_INTERPOLATION CAMERA::m_interpolation_mode
protected

Definition at line 304 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 271 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 296 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_parametersChanged

bool CAMERA::m_parametersChanged
protected

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

Definition at line 322 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 286 of file camera.h.

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

◆ m_projectionMatrix

glm::mat4 CAMERA::m_projectionMatrix
protected

Definition at line 277 of file camera.h.

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

◆ m_projectionMatrixInv

glm::mat4 CAMERA::m_projectionMatrixInv
protected

Definition at line 278 of file camera.h.

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

◆ m_projectionType

PROJECTION_TYPE CAMERA::m_projectionType
protected

◆ m_range_scale

float CAMERA::m_range_scale
protected

The nominal range expected to be used in the camera.

It will be used to initialize the Z position

Definition at line 252 of file camera.h.

Referenced by CAMERA().

◆ m_right

SFVEC3F CAMERA::m_right
protected

Definition at line 283 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 316 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 300 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 301 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 274 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 309 of file camera.h.

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

◆ m_scr_nY

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

Definition at line 310 of file camera.h.

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

◆ m_up

SFVEC3F CAMERA::m_up
protected

Definition at line 284 of file camera.h.

Referenced by GetUp(), and updateFrustum().

◆ m_up_nY

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

Definition at line 317 of file camera.h.

Referenced by MakeRay(), and updateFrustum().

◆ m_viewMatrix

glm::mat4 CAMERA::m_viewMatrix
protected

Definition at line 275 of file camera.h.

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

◆ m_viewMatrixInverse

glm::mat4 CAMERA::m_viewMatrixInverse
protected

Definition at line 276 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 266 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

◆ m_zoom_t0

float CAMERA::m_zoom_t0
protected

Definition at line 260 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 261 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: