KiCad PCB EDA Suite
C3D_MODEL_VIEWER Class Reference

Class C3D_MODEL_VIEWER Implement a canvas based on a wxGLCanvas. More...

#include <c3d_model_viewer.h>

Inheritance diagram for C3D_MODEL_VIEWER:
HIDPI_GL_CANVAS

Public Member Functions

 C3D_MODEL_VIEWER (wxWindow *aParent, const int *aAttribList=0, S3D_CACHE *aCacheManager=NULL)
 Creates a new 3D Canvas with a attribute list. More...
 
 ~C3D_MODEL_VIEWER ()
 
void Set3DModel (const S3DMODEL &a3DModel)
 Set3DModel - Set this model to be displayed. More...
 
void Set3DModel (wxString const &aModelPathName)
 Set3DModel - Set this model to be displayed. More...
 
void Clear3DModel ()
 Clear3DModel - Unloads the displayed 3d model. More...
 
virtual wxSize GetNativePixelSize () const
 
void SetScaleFactor (double aFactor)
 Set the canvas scale factor, probably for a hi-DPI display. More...
 
double GetScaleFactor () const
 Get the current scale factor. More...
 

Private Member Functions

void ogl_initialize ()
 
void ogl_set_arrow_material ()
 
void OnPaint (wxPaintEvent &event)
 
void OnEraseBackground (wxEraseEvent &event)
 
void OnMouseWheel (wxMouseEvent &event)
 
void OnMouseMove (wxMouseEvent &event)
 
void OnLeftDown (wxMouseEvent &event)
 
void OnLeftUp (wxMouseEvent &event)
 
void OnMiddleUp (wxMouseEvent &event)
 
void OnMiddleDown (wxMouseEvent &event)
 
void OnRightClick (wxMouseEvent &event)
 

Private Attributes

wxGLContext * m_glRC
 openGL context More...
 
CTRACK_BALL m_trackBallCamera
 Camera used in this canvas. More...
 
const S3DMODELm_3d_model
 Original 3d model data. More...
 
C_OGL_3DMODELm_ogl_3dmodel
 Class holder for 3d model to display on openGL. More...
 
bool m_reload_is_needed
 Flag that we have a new model and it need to be reloaded when the paint is called. More...
 
bool m_ogl_initialized
 Flag if open gl was initialized. More...
 
double m_BiuTo3Dunits
 factor to convert the model or any other items to keep it in relation to the +/-RANGE_SCALE_3D (it is named same as the board render for better understanding proposes) More...
 
S3D_CACHEm_cacheManager
 Optional cache manager. More...
 

Static Private Attributes

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

Detailed Description

Class C3D_MODEL_VIEWER Implement a canvas based on a wxGLCanvas.

Definition at line 45 of file c3d_model_viewer.h.

Constructor & Destructor Documentation

◆ C3D_MODEL_VIEWER()

C3D_MODEL_VIEWER::C3D_MODEL_VIEWER ( wxWindow *  aParent,
const int *  aAttribList = 0,
S3D_CACHE aCacheManager = NULL 
)

Creates a new 3D Canvas with a attribute list.

Parameters
aParent= the parent creator of this canvas
aAttribList= a list of openGL options created by COGL_ATT_LIST::GetAttributesList

Definition at line 83 of file c3d_model_viewer.cpp.

84  :
85 
86  HIDPI_GL_CANVAS( aParent,
87  wxID_ANY,
88  aAttribList,
89  wxDefaultPosition,
90  wxDefaultSize,
91  wxFULL_REPAINT_ON_RESIZE ),
93  m_cacheManager(aCacheManager)
94 {
95  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::C3D_MODEL_VIEWER" ) );
96 
97  m_ogl_initialized = false;
98  m_reload_is_needed = false;
100  m_3d_model = NULL;
101  m_BiuTo3Dunits = 1.0;
102 
103  m_glRC = NULL;
104 }
const S3DMODEL * m_3d_model
Original 3d model data.
bool m_reload_is_needed
Flag that we have a new model and it need to be reloaded when the paint is called.
wxGLContext * m_glRC
openGL context
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
#define RANGE_SCALE_3D
HIDPI_GL_CANVAS(wxWindow *parent, wxWindowID id=wxID_ANY, const int *attribList=NULL, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=0, const wxString &name=wxGLCanvasName, const wxPalette &palette=wxNullPalette)
#define NULL
double m_BiuTo3Dunits
factor to convert the model or any other items to keep it in relation to the +/-RANGE_SCALE_3D (it is...
S3D_CACHE * m_cacheManager
Optional cache manager.
bool m_ogl_initialized
Flag if open gl was initialized.
C_OGL_3DMODEL * m_ogl_3dmodel
Class holder for 3d model to display on openGL.
CTRACK_BALL m_trackBallCamera
Camera used in this canvas.

References m_3d_model, m_BiuTo3Dunits, m_glRC, m_logTrace, m_ogl_3dmodel, m_ogl_initialized, m_reload_is_needed, and NULL.

◆ ~C3D_MODEL_VIEWER()

C3D_MODEL_VIEWER::~C3D_MODEL_VIEWER ( )

Definition at line 107 of file c3d_model_viewer.cpp.

108 {
109  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::~C3D_MODEL_VIEWER" ) );
110 
111  if( m_glRC )
112  {
114 
115  delete m_ogl_3dmodel;
117 
120  }
121 }
wxGLContext * m_glRC
openGL context
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
void UnlockCtx(wxGLContext *aContext)
Function UnlockCtx allows other canvases to bind an OpenGL context.
static GL_CONTEXT_MANAGER & Get()
Function Get returns the GL_CONTEXT_MANAGER instance (singleton).
#define NULL
void LockCtx(wxGLContext *aContext, wxGLCanvas *aCanvas)
Function LockCtx sets a context as current and prevents other canvases from switching it.
void DestroyCtx(wxGLContext *aContext)
Function DestroyCtx destroys a managed OpenGL context.
C_OGL_3DMODEL * m_ogl_3dmodel
Class holder for 3d model to display on openGL.

References GL_CONTEXT_MANAGER::DestroyCtx(), GL_CONTEXT_MANAGER::Get(), GL_CONTEXT_MANAGER::LockCtx(), m_glRC, m_logTrace, m_ogl_3dmodel, NULL, and GL_CONTEXT_MANAGER::UnlockCtx().

Member Function Documentation

◆ Clear3DModel()

void C3D_MODEL_VIEWER::Clear3DModel ( )

Clear3DModel - Unloads the displayed 3d model.

Definition at line 167 of file c3d_model_viewer.cpp.

168 {
169  // Delete the old model
170  m_reload_is_needed = false;
171 
172  delete m_ogl_3dmodel;
174 
175  m_3d_model = NULL;
176 
177  Refresh();
178 }
const S3DMODEL * m_3d_model
Original 3d model data.
bool m_reload_is_needed
Flag that we have a new model and it need to be reloaded when the paint is called.
#define NULL
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
C_OGL_3DMODEL * m_ogl_3dmodel
Class holder for 3d model to display on openGL.

References m_3d_model, m_ogl_3dmodel, m_reload_is_needed, NULL, and Refresh().

Referenced by Set3DModel().

◆ GetNativePixelSize()

wxSize HIDPI_GL_CANVAS::GetNativePixelSize ( ) const
virtualinherited

Definition at line 46 of file hidpi_gl_canvas.cpp.

47 {
48  wxSize size = wxGLCanvas::GetClientSize();
49 
50  const double scaleFactor = GetScaleFactor();
51  size.x *= scaleFactor;
52  size.y *= scaleFactor;
53 
54  return size;
55 }
double GetScaleFactor() const
Get the current scale factor.

References HIDPI_GL_CANVAS::GetScaleFactor().

Referenced by EDA_3D_CANVAS::OnMouseMove(), EDA_3D_CANVAS::OnPaint(), and KIGFX::OPENGL_GAL::OPENGL_GAL().

◆ GetScaleFactor()

double HIDPI_GL_CANVAS::GetScaleFactor ( ) const
inherited

◆ ogl_initialize()

void C3D_MODEL_VIEWER::ogl_initialize ( )
private

Definition at line 181 of file c3d_model_viewer.cpp.

182 {
183  glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
184  glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
185  glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST );
186 
187  glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
188  glEnable( GL_DEPTH_TEST );
189  //glDepthFunc( GL_LEQUAL );
190  glEnable( GL_CULL_FACE );
191  glShadeModel( GL_SMOOTH );
192  glEnable( GL_LINE_SMOOTH );
193  glEnable( GL_NORMALIZE );
194 
195  // Setup light
196  // https://www.opengl.org/sdk/docs/man2/xhtml/glLight.xml
197  // /////////////////////////////////////////////////////////////////////////
198  const GLfloat ambient[] = { 0.01f, 0.01f, 0.01f, 1.0f };
199  const GLfloat diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
200  const GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
201 
202  // defines a directional light that points along the negative z-axis
203  const GLfloat position[] = { 0.0f, 0.0f, 2.0f * RANGE_SCALE_3D, 0.0f };
204 
205  const GLfloat lmodel_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
206 
207  glLightfv( GL_LIGHT0, GL_AMBIENT, ambient );
208  glLightfv( GL_LIGHT0, GL_DIFFUSE, diffuse );
209  glLightfv( GL_LIGHT0, GL_SPECULAR, specular );
210  glLightfv( GL_LIGHT0, GL_POSITION, position );
211  glLightModelfv( GL_LIGHT_MODEL_AMBIENT, lmodel_ambient );
212 }
#define RANGE_SCALE_3D

References RANGE_SCALE_3D.

Referenced by OnPaint().

◆ ogl_set_arrow_material()

void C3D_MODEL_VIEWER::ogl_set_arrow_material ( )
private

Definition at line 215 of file c3d_model_viewer.cpp.

216 {
217  glEnable( GL_COLOR_MATERIAL );
218  glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
219 
220  const SFVEC4F specular = SFVEC4F( 0.1f, 0.1f, 0.1f, 1.0f );
221 
222  glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, &specular.r );
223  glMaterialf( GL_FRONT_AND_BACK, GL_SHININESS, 96.0f );
224 }
glm::vec4 SFVEC4F
Definition: xv3d_types.h:49

Referenced by OnPaint().

◆ OnEraseBackground()

void C3D_MODEL_VIEWER::OnEraseBackground ( wxEraseEvent &  event)
private

Definition at line 368 of file c3d_model_viewer.cpp.

369 {
370  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnEraseBackground" ) );
371  // Do nothing, to avoid flashing.
372 }
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.

References m_logTrace.

◆ OnLeftDown()

void C3D_MODEL_VIEWER::OnLeftDown ( wxMouseEvent &  event)
private

Definition at line 439 of file c3d_model_viewer.cpp.

440 {
441  //m_is_moving_mouse = true;
442  event.Skip();
443 }

◆ OnLeftUp()

void C3D_MODEL_VIEWER::OnLeftUp ( wxMouseEvent &  event)
private

Definition at line 446 of file c3d_model_viewer.cpp.

447 {
448  //m_is_moving_mouse = false;
449  //Refresh( false );
450  event.Skip();
451 }

◆ OnMiddleDown()

void C3D_MODEL_VIEWER::OnMiddleDown ( wxMouseEvent &  event)
private

Definition at line 454 of file c3d_model_viewer.cpp.

455 {
456  //m_is_moving_mouse = true;
457  event.Skip();
458 }

◆ OnMiddleUp()

void C3D_MODEL_VIEWER::OnMiddleUp ( wxMouseEvent &  event)
private

Definition at line 461 of file c3d_model_viewer.cpp.

462 {
463  //m_is_moving_mouse = false;
464  //Refresh( false );
465  event.Skip();
466 }

◆ OnMouseMove()

void C3D_MODEL_VIEWER::OnMouseMove ( wxMouseEvent &  event)
private

Definition at line 420 of file c3d_model_viewer.cpp.

421 {
422  m_trackBallCamera.SetCurWindowSize( GetClientSize() );
423 
424  if( event.Dragging() )
425  {
426  if( event.LeftIsDown() ) // Drag
427  m_trackBallCamera.Drag( event.GetPosition() );
428  //else if( event.MiddleIsDown() ) // Pan
429  // m_trackBallCamera.Pan( event.GetPosition() );
430 
431  // orientation has changed, redraw mesh
432  Refresh( false );
433  }
434 
435  m_trackBallCamera.SetCurMousePosition( event.GetPosition() );
436 }
void SetCurMousePosition(const wxPoint &aPosition)
It updates the current mouse position without make any new recalculations on camera.
Definition: ccamera.cpp:431
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
bool SetCurWindowSize(const wxSize &aSize)
SetCurWindowSize - update the windows size of the camera.
Definition: ccamera.cpp:448
void Drag(const wxPoint &aNewMousePosition) override
Calculate a new mouse drag position.
Definition: ctrack_ball.cpp:51
CTRACK_BALL m_trackBallCamera
Camera used in this canvas.

References CTRACK_BALL::Drag(), m_trackBallCamera, Refresh(), CCAMERA::SetCurMousePosition(), and CCAMERA::SetCurWindowSize().

◆ OnMouseWheel()

void C3D_MODEL_VIEWER::OnMouseWheel ( wxMouseEvent &  event)
private

Definition at line 375 of file c3d_model_viewer.cpp.

376 {
377  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnMouseWheel" ) );
378 
379  if( event.ShiftDown() )
380  {
381  //if( event.GetWheelRotation() < 0 )
382  //SetView3D( WXK_UP ); // move up
383  //else
384  //SetView3D( WXK_DOWN ); // move down
385  }
386  else if( event.ControlDown() )
387  {
388  //if( event.GetWheelRotation() > 0 )
389  //SetView3D( WXK_RIGHT ); // move right
390  //else
391  //SetView3D( WXK_LEFT ); // move left
392  }
393  else
394  {
395  m_trackBallCamera.Zoom( event.GetWheelRotation() > 0 ? 1.1f : 1/1.1f );
396 
397  //DisplayStatus();
398  Refresh( false );
399  }
400 
401  m_trackBallCamera.SetCurMousePosition( event.GetPosition() );
402 }
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
void SetCurMousePosition(const wxPoint &aPosition)
It updates the current mouse position without make any new recalculations on camera.
Definition: ccamera.cpp:431
bool Zoom(float aFactor)
Definition: ccamera.cpp:474
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
CTRACK_BALL m_trackBallCamera
Camera used in this canvas.

References m_logTrace, m_trackBallCamera, Refresh(), CCAMERA::SetCurMousePosition(), and CCAMERA::Zoom().

◆ OnPaint()

void C3D_MODEL_VIEWER::OnPaint ( wxPaintEvent &  event)
private

Definition at line 227 of file c3d_model_viewer.cpp.

228 {
229  event.Skip( false );
230 
231  // SwapBuffer requires the window to be shown before calling
232  if( !IsShownOnScreen() )
233  {
234  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnPaint !IsShown" ) );
235  return;
236  }
237 
238  // "Makes the OpenGL state that is represented by the OpenGL rendering
239  // context context current, i.e. it will be used by all subsequent OpenGL calls.
240  // This function may only be called when the window is shown on screen"
241  if( m_glRC == NULL )
243 
245 
246  // Set the OpenGL viewport according to the client size of this canvas.
247  // This is done here rather than in a wxSizeEvent handler because our
248  // OpenGL rendering context (and thus viewport setting) is used with
249  // multiple canvases: If we updated the viewport in the wxSizeEvent
250  // handler, changing the size of one canvas causes a viewport setting that
251  // is wrong when next another canvas is repainted.
252  wxSize clientSize = GetClientSize();
253 
254  if( !m_ogl_initialized )
255  {
256  m_ogl_initialized = true;
257  ogl_initialize();
258  }
259 
260  if( m_reload_is_needed )
261  {
262  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::OnPaint m_reload_is_needed" ) );
263 
264  m_reload_is_needed = false;
266 
267  // It convert a model as it was a board, so get the max size dimension of the board
268  // and compute the conversion scale
269  m_BiuTo3Dunits = (double)RANGE_SCALE_3D /
270  ( (double)m_ogl_3dmodel->GetBBox().GetMaxDimension() *
272  }
273 
274  glViewport( 0, 0, clientSize.x, clientSize.y );
275 
276  m_trackBallCamera.SetCurWindowSize( clientSize );
277 
278  // clear color and depth buffers
279  // /////////////////////////////////////////////////////////////////////////
280  glEnable( GL_DEPTH_TEST );
281 
282  glClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
283  glClearDepth( 1.0f );
284  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
285 
286  // Set projection and modelview matrixes
287  // /////////////////////////////////////////////////////////////////////////
288  glMatrixMode( GL_PROJECTION );
289  glLoadMatrixf( glm::value_ptr( m_trackBallCamera.GetProjectionMatrix() ) );
290 
291  glMatrixMode( GL_MODELVIEW );
292  glLoadMatrixf( glm::value_ptr( m_trackBallCamera.GetViewMatrix() ) );
293 
294  glEnable( GL_LIGHTING );
295  glEnable( GL_LIGHT0 );
296 
297  // Render Model
298  if( m_ogl_3dmodel )
299  {
300  glPushMatrix();
301 
302  double modelunit_to_3d_units_factor = m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
303 
304  glScaled( modelunit_to_3d_units_factor,
305  modelunit_to_3d_units_factor,
306  modelunit_to_3d_units_factor );
307 
308  // Center model in the render viewport
309  const SFVEC3F model_center = m_ogl_3dmodel->GetBBox().GetCenter();
310 
311  glTranslatef( -model_center.x, -model_center.y, -model_center.z );
312 
314 
317 
319 
320  glPopMatrix();
321  }
322 
323 
324  // YxY squared view port
325  glViewport( 0, 0, clientSize.y / 8 , clientSize.y / 8 );
326  glClear( GL_DEPTH_BUFFER_BIT );
327 
328  glMatrixMode( GL_PROJECTION );
329  glLoadIdentity();
330  gluPerspective( 45.0f, 1.0f, 0.01f, RANGE_SCALE_3D * 2.0f );
331 
332  glMatrixMode( GL_MODELVIEW );
333  glLoadIdentity();
334 
335  const glm::mat4 TranslationMatrix = glm::translate( glm::mat4(1.0f),
336  SFVEC3F( 0.0f, 0.0f, -RANGE_SCALE_3D ) );
337 
338  const glm::mat4 ViewMatrix = TranslationMatrix * m_trackBallCamera.GetRotationMatrix();
339 
340  glLoadMatrixf( glm::value_ptr( ViewMatrix ) );
341 
343 
344  glColor3f( 0.9f, 0.0f, 0.0f );
345  OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
346  SFVEC3F( RANGE_SCALE_3D / 2.65f, 0.0f, 0.0f ),
347  0.275f );
348 
349  glColor3f( 0.0f, 0.9f, 0.0f );
350  OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
351  SFVEC3F( 0.0f, RANGE_SCALE_3D / 2.65f, 0.0f ),
352  0.275f );
353 
354  glColor3f( 0.0f, 0.0f, 0.9f );
355  OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
356  SFVEC3F( 0.0f, 0.0f, RANGE_SCALE_3D / 2.65f ),
357  0.275f );
358 
359  // "Swaps the double-buffer of this window, making the back-buffer the
360  // front-buffer and vice versa, so that the output of the previous OpenGL
361  // commands is displayed on the window."
362  SwapBuffers();
363 
365 }
const S3DMODEL * m_3d_model
Original 3d model data.
static void EndDrawMulti()
EndDrawMulti - cleanup render states after drawing multiple models.
bool m_reload_is_needed
Flag that we have a new model and it need to be reloaded when the paint is called.
#define UNITS3D_TO_UNITSPCB
Scale convertion from 3d model units to pcb units.
void Draw_transparent(float aOpacity) const
Draw_transparent - render the model into the current context.
Definition: c_ogl_3dmodel.h:61
wxGLContext * m_glRC
openGL context
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
const CBBOX & GetBBox() const
GetBBox - Get main bbox.
Definition: c_ogl_3dmodel.h:87
#define RANGE_SCALE_3D
void UnlockCtx(wxGLContext *aContext)
Function UnlockCtx allows other canvases to bind an OpenGL context.
const glm::mat4 GetRotationMatrix() const
Function GetRotationMatrix Get the rotation matrix to be applied in a transformation camera.
Definition: ccamera.cpp:158
static GL_CONTEXT_MANAGER & Get()
Function Get returns the GL_CONTEXT_MANAGER instance (singleton).
SFVEC3F GetCenter() const
Function GetCenter return the center point of the bounding box.
Definition: cbbox.cpp:135
#define NULL
Use all material properties from model file.
double m_BiuTo3Dunits
factor to convert the model or any other items to keep it in relation to the +/-RANGE_SCALE_3D (it is...
static void BeginDrawMulti()
BeginDrawMulti - set some basic render states before drawing multiple models.
bool SetCurWindowSize(const wxSize &aSize)
SetCurWindowSize - update the windows size of the camera.
Definition: ccamera.cpp:448
float GetMaxDimension() const
GetMaxDimension.
Definition: cbbox.cpp:169
void LockCtx(wxGLContext *aContext, wxGLCanvas *aCanvas)
Function LockCtx sets a context as current and prevents other canvases from switching it.
const glm::mat4 & GetViewMatrix() const
Definition: ccamera.cpp:419
void Draw_opaque() const
Draw_opaque - render the model into the current context.
Definition: c_ogl_3dmodel.h:56
glm::vec3 SFVEC3F
Definition: xv3d_types.h:47
const glm::mat4 & GetProjectionMatrix() const
Definition: ccamera.cpp:389
bool m_ogl_initialized
Flag if open gl was initialized.
wxGLContext * CreateCtx(wxGLCanvas *aCanvas, const wxGLContext *aOther=NULL)
Function CreateCtx creates a managed OpenGL context.
C_OGL_3DMODEL * m_ogl_3dmodel
Class holder for 3d model to display on openGL.
CTRACK_BALL m_trackBallCamera
Camera used in this canvas.
void OGL_draw_arrow(SFVEC3F aPosition, SFVEC3F aTargetPos, float aSize)
OGL_draw_arrow - draw a round arrow.

References C_OGL_3DMODEL::BeginDrawMulti(), GL_CONTEXT_MANAGER::CreateCtx(), C_OGL_3DMODEL::Draw_opaque(), C_OGL_3DMODEL::Draw_transparent(), C_OGL_3DMODEL::EndDrawMulti(), GL_CONTEXT_MANAGER::Get(), C_OGL_3DMODEL::GetBBox(), CBBOX::GetCenter(), CBBOX::GetMaxDimension(), CCAMERA::GetProjectionMatrix(), CCAMERA::GetRotationMatrix(), CCAMERA::GetViewMatrix(), GL_CONTEXT_MANAGER::LockCtx(), m_3d_model, m_BiuTo3Dunits, m_glRC, m_logTrace, m_ogl_3dmodel, m_ogl_initialized, m_reload_is_needed, m_trackBallCamera, NORMAL, NULL, OGL_draw_arrow(), ogl_initialize(), ogl_set_arrow_material(), RANGE_SCALE_3D, CCAMERA::SetCurWindowSize(), UNITS3D_TO_UNITSPCB, and GL_CONTEXT_MANAGER::UnlockCtx().

◆ OnRightClick()

void C3D_MODEL_VIEWER::OnRightClick ( wxMouseEvent &  event)
private

Definition at line 469 of file c3d_model_viewer.cpp.

470 {
471  event.Skip();
472 }

◆ Set3DModel() [1/2]

void C3D_MODEL_VIEWER::Set3DModel ( const S3DMODEL a3DModel)

Set3DModel - Set this model to be displayed.

Parameters
a3DModel- 3d model data

Definition at line 124 of file c3d_model_viewer.cpp.

125 {
126  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::Set3DModel with a S3DMODEL" ) );
127 
128  // Validate a3DModel pointers
129  wxASSERT( a3DModel.m_Materials != NULL );
130  wxASSERT( a3DModel.m_Meshes != NULL );
131  wxASSERT( a3DModel.m_MaterialsSize > 0 );
132  wxASSERT( a3DModel.m_MeshesSize > 0 );
133 
134  // Delete the old model
135  delete m_ogl_3dmodel;
137 
138  m_3d_model = NULL;
139 
140  if( (a3DModel.m_Materials != NULL) && (a3DModel.m_Meshes != NULL) &&
141  (a3DModel.m_MaterialsSize > 0) && (a3DModel.m_MeshesSize > 0) )
142  {
143  m_3d_model = &a3DModel;
144  m_reload_is_needed = true;
145  }
146 
147  Refresh();
148 }
const S3DMODEL * m_3d_model
Original 3d model data.
bool m_reload_is_needed
Flag that we have a new model and it need to be reloaded when the paint is called.
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
SMESH * m_Meshes
The meshes list of this model.
Definition: c3dmodel.h:93
#define NULL
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
unsigned int m_MaterialsSize
Number of materials in the material array.
Definition: c3dmodel.h:95
SMATERIAL * m_Materials
The materials list of this model.
Definition: c3dmodel.h:96
C_OGL_3DMODEL * m_ogl_3dmodel
Class holder for 3d model to display on openGL.
unsigned int m_MeshesSize
Number of meshes in the array.
Definition: c3dmodel.h:92

References m_3d_model, m_logTrace, S3DMODEL::m_Materials, S3DMODEL::m_MaterialsSize, S3DMODEL::m_Meshes, S3DMODEL::m_MeshesSize, m_ogl_3dmodel, m_reload_is_needed, NULL, and Refresh().

Referenced by DLG_SELECT_3DMODEL::OnFileActivated(), DLG_SELECT_3DMODEL::OnSelectionChanged(), and Set3DModel().

◆ Set3DModel() [2/2]

void C3D_MODEL_VIEWER::Set3DModel ( wxString const &  aModelPathName)

Set3DModel - Set this model to be displayed.

Parameters
aModelPathName- 3d model path name

Definition at line 151 of file c3d_model_viewer.cpp.

152 {
153  wxLogTrace( m_logTrace, wxT( "C3D_MODEL_VIEWER::Set3DModel with a wxString" ) );
154 
155  if( m_cacheManager )
156  {
157  const S3DMODEL* model = m_cacheManager->GetModel( aModelPathName );
158 
159  if( model )
160  Set3DModel( (const S3DMODEL &)*model );
161  else
162  Clear3DModel();
163  }
164 }
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
S3DMODEL * GetModel(const wxString &aModelFileName)
Function GetModel attempts to load the scene data for a model and to translate it into an S3D_MODEL s...
Definition: 3d_cache.cpp:654
void Set3DModel(const S3DMODEL &a3DModel)
Set3DModel - Set this model to be displayed.
S3D_CACHE * m_cacheManager
Optional cache manager.
Store the a model based on meshes and materials.
Definition: c3dmodel.h:90
void Clear3DModel()
Clear3DModel - Unloads the displayed 3d model.

References Clear3DModel(), S3D_CACHE::GetModel(), m_cacheManager, m_logTrace, and Set3DModel().

◆ SetScaleFactor()

void HIDPI_GL_CANVAS::SetScaleFactor ( double  aFactor)
inherited

Set the canvas scale factor, probably for a hi-DPI display.

Definition at line 58 of file hidpi_gl_canvas.cpp.

59 {
60  m_scale_factor = aNewScaleFactor;
61 }
double m_scale_factor
The current scale factor (e.g.

References HIDPI_GL_CANVAS::m_scale_factor.

Referenced by PANEL_PREV_3D::loadCommonSettings(), EDA_3D_VIEWER::loadCommonSettings(), and KIGFX::OPENGL_GAL::updatedGalDisplayOptions().

Member Data Documentation

◆ m_3d_model

const S3DMODEL* C3D_MODEL_VIEWER::m_3d_model
private

Original 3d model data.

Definition at line 119 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), Clear3DModel(), OnPaint(), and Set3DModel().

◆ m_BiuTo3Dunits

double C3D_MODEL_VIEWER::m_BiuTo3Dunits
private

factor to convert the model or any other items to keep it in relation to the +/-RANGE_SCALE_3D (it is named same as the board render for better understanding proposes)

Definition at line 133 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), and OnPaint().

◆ m_cacheManager

S3D_CACHE* C3D_MODEL_VIEWER::m_cacheManager
private

Optional cache manager.

Definition at line 136 of file c3d_model_viewer.h.

Referenced by Set3DModel().

◆ m_glRC

wxGLContext* C3D_MODEL_VIEWER::m_glRC
private

openGL context

Definition at line 113 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), OnPaint(), and ~C3D_MODEL_VIEWER().

◆ m_logTrace

const wxChar * C3D_MODEL_VIEWER::m_logTrace = wxT( "KI_TRACE_EDA_3D_MODEL_VIEWER" )
staticprivate

Trace mask used to enable or disable the trace output of this class.

The debug output can be turned on by setting the WXTRACE environment variable to "KI_TRACE_EDA_3D_MODEL_VIEWER". See the wxWidgets documentation on wxLogTrace for more information.

Definition at line 144 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), OnEraseBackground(), OnMouseWheel(), OnPaint(), Set3DModel(), and ~C3D_MODEL_VIEWER().

◆ m_ogl_3dmodel

C_OGL_3DMODEL* C3D_MODEL_VIEWER::m_ogl_3dmodel
private

Class holder for 3d model to display on openGL.

Definition at line 122 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), Clear3DModel(), OnPaint(), Set3DModel(), and ~C3D_MODEL_VIEWER().

◆ m_ogl_initialized

bool C3D_MODEL_VIEWER::m_ogl_initialized
private

Flag if open gl was initialized.

Definition at line 128 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), and OnPaint().

◆ m_reload_is_needed

bool C3D_MODEL_VIEWER::m_reload_is_needed
private

Flag that we have a new model and it need to be reloaded when the paint is called.

Definition at line 125 of file c3d_model_viewer.h.

Referenced by C3D_MODEL_VIEWER(), Clear3DModel(), OnPaint(), and Set3DModel().

◆ m_trackBallCamera

CTRACK_BALL C3D_MODEL_VIEWER::m_trackBallCamera
private

Camera used in this canvas.

Definition at line 116 of file c3d_model_viewer.h.

Referenced by OnMouseMove(), OnMouseWheel(), and OnPaint().


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