diff --git a/3d-viewer/3d_canvas/board_adapter.h b/3d-viewer/3d_canvas/board_adapter.h index f8e92fcf55..5ed731ab41 100644 --- a/3d-viewer/3d_canvas/board_adapter.h +++ b/3d-viewer/3d_canvas/board_adapter.h @@ -526,13 +526,4 @@ private: }; -class EDA_3D_BOARD_HOLDER -{ -public: - virtual BOARD_ADAPTER& GetAdapter() = 0; - virtual CAMERA& GetCurrentCamera() = 0; - - virtual ~EDA_3D_BOARD_HOLDER() {}; -}; - #endif // BOARD_ADAPTER_H diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.cpp b/3d-viewer/3d_canvas/eda_3d_canvas.cpp index 5ac639a889..81b2a0064b 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.cpp +++ b/3d-viewer/3d_canvas/eda_3d_canvas.cpp @@ -91,7 +91,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const wxGLAttributes& aGLAttrib BOARD_ADAPTER& aBoardAdapter, CAMERA& aCamera, S3D_CACHE* a3DCachePointer ) : HIDPI_GL_3D_CANVAS( EDA_DRAW_PANEL_GAL::GetVcSettings(), aCamera, aParent, aGLAttribs, - wxID_ANY, wxDefaultPosition, + EDA_3D_CANVAS_ID, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE ), m_eventDispatcher( nullptr ), m_parentStatusBar( nullptr ), diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.h b/3d-viewer/3d_canvas/eda_3d_canvas.h index 77834f0fdc..5da5836259 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.h +++ b/3d-viewer/3d_canvas/eda_3d_canvas.h @@ -42,6 +42,8 @@ class RENDER_3D_RAYTRACE_GL; class RENDER_3D_OPENGL; +static wxWindowID EDA_3D_CANVAS_ID = wxID_HIGHEST + 1321; + /** * Implement a canvas based on a wxGLCanvas */ diff --git a/3d-viewer/3d_rendering/opengl/create_scene.cpp b/3d-viewer/3d_rendering/opengl/create_scene.cpp index 228ec66a70..ad8dcbe14f 100644 --- a/3d-viewer/3d_rendering/opengl/create_scene.cpp +++ b/3d-viewer/3d_rendering/opengl/create_scene.cpp @@ -898,9 +898,7 @@ void RENDER_3D_OPENGL::Load3dModelsIfNeeded() if( m_3dModelMap.size() > 0 ) return; - wxFrame* frame = dynamic_cast( m_canvas->GetParent() ); - - if( frame ) + if( wxFrame* frame = dynamic_cast( m_canvas->GetParent() ) ) { STATUSBAR_REPORTER activityReporter( frame->GetStatusBar(), (int) EDA_3D_VIEWER_STATUSBAR::ACTIVITY ); diff --git a/3d-viewer/3d_viewer/eda_3d_viewer_frame.h b/3d-viewer/3d_viewer/eda_3d_viewer_frame.h index b1381d219a..6a98590446 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer_frame.h +++ b/3d-viewer/3d_viewer/eda_3d_viewer_frame.h @@ -60,7 +60,7 @@ enum EDA_3D_VIEWER_STATUSBAR /** * Create and handle a window for the 3d viewer connected to a Kiway and a pcbboard */ -class EDA_3D_VIEWER_FRAME : public EDA_3D_BOARD_HOLDER, public KIWAY_PLAYER +class EDA_3D_VIEWER_FRAME : public KIWAY_PLAYER { public: EDA_3D_VIEWER_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent, const wxString& aTitle, @@ -100,8 +100,8 @@ public: void Redraw(); - BOARD_ADAPTER& GetAdapter() override { return m_boardAdapter; } - CAMERA& GetCurrentCamera() override { return m_currentCamera; } + BOARD_ADAPTER& GetAdapter() { return m_boardAdapter; } + CAMERA& GetCurrentCamera() { return m_currentCamera; } EDA_3D_CANVAS* GetCanvas() { return m_canvas; } diff --git a/3d-viewer/3d_viewer/tools/eda_3d_controller.cpp b/3d-viewer/3d_viewer/tools/eda_3d_controller.cpp index 7cfbb5882b..0495437486 100644 --- a/3d-viewer/3d_viewer/tools/eda_3d_controller.cpp +++ b/3d-viewer/3d_viewer/tools/eda_3d_controller.cpp @@ -69,27 +69,30 @@ bool EDA_3D_CONTROLLER::Init() void EDA_3D_CONTROLLER::Reset( RESET_REASON aReason ) { - TOOLS_HOLDER* holder = m_toolMgr->GetToolHolder(); - - wxASSERT( holder ); - m_canvas = nullptr; m_boardAdapter = nullptr; m_camera = nullptr; - if( holder ) - { - m_canvas = dynamic_cast( holder->GetToolCanvas() ); + TOOLS_HOLDER* holder = m_toolMgr->GetToolHolder(); - EDA_3D_BOARD_HOLDER* holder3d = dynamic_cast( holder ); + wxCHECK( holder, /* void */ ); + wxCHECK( holder->GetToolCanvas()->GetId() == EDA_3D_CANVAS_ID, /* void */ ); - wxASSERT( holder3d ); + m_canvas = static_cast( holder->GetToolCanvas() ); - if( holder3d ) - { - m_boardAdapter = &holder3d->GetAdapter(); - m_camera = &holder3d->GetCurrentCamera(); - } + if( EDA_BASE_FRAME* frame = dynamic_cast( holder ) ) + { + wxCHECK( frame->GetFrameType() == FRAME_PCB_DISPLAY3D, /* void */ ); + + m_boardAdapter = &static_cast( frame )->GetAdapter(); + m_camera = &static_cast( frame )->GetCurrentCamera(); + } + else if( wxWindow* previewWindow = dynamic_cast( holder ) ) + { + wxCHECK( previewWindow->GetId() == PANEL_PREVIEW_3D_MODEL_ID, /* void */ ); + + m_boardAdapter = &static_cast( holder )->GetAdapter(); + m_camera = &static_cast( holder )->GetCurrentCamera(); } } @@ -117,10 +120,13 @@ int EDA_3D_CONTROLLER::Main( const TOOL_EVENT& aEvent ) { if( evt->IsCancelInteractive() ) { - wxWindow* canvas = m_toolMgr->GetToolHolder()->GetToolCanvas(); + wxWindow* canvas = m_toolMgr->GetToolHolder()->GetToolCanvas(); + KIWAY_HOLDER* parent = dynamic_cast( wxGetTopLevelParent( canvas ) ); - if( DIALOG_SHIM* dialog = dynamic_cast( wxGetTopLevelParent( canvas ) ) ) + if( parent && parent->GetType() == KIWAY_HOLDER::DIALOG ) { + DIALOG_SHIM* dialog = static_cast( parent ); + if( dialog->IsQuasiModal() ) dialog->EndQuasiModal( wxID_CANCEL ); else @@ -197,8 +203,10 @@ int EDA_3D_CONTROLLER::SetMaterial( const TOOL_EVENT& aEvent ) { m_boardAdapter->m_Cfg->m_Render.material_mode = aEvent.Parameter(); - if( auto* viewer = dynamic_cast( m_toolMgr->GetToolHolder() ) ) - viewer->NewDisplay( true ); + EDA_BASE_FRAME* frame = dynamic_cast( m_toolMgr->GetToolHolder() ); + + if( frame && frame->GetFrameType() == FRAME_PCB_DISPLAY3D ) + static_cast( frame )->NewDisplay( true ); else m_canvas->Request_refresh(); @@ -229,8 +237,10 @@ int EDA_3D_CONTROLLER::ToggleVisibility( const TOOL_EVENT& aEvent ) appearanceManager->OnLayerVisibilityChanged( layer, !visibilityFlags.test( layer ) ); }; - if( auto viewer = dynamic_cast( m_toolMgr->GetToolHolder() ) ) - appearanceManager = viewer->GetAppearanceManager(); + EDA_BASE_FRAME* frame = dynamic_cast( m_toolMgr->GetToolHolder() ); + + if( frame && frame->GetFrameType() == FRAME_PCB_DISPLAY3D ) + appearanceManager = static_cast( frame )->GetAppearanceManager(); if( appearanceManager ) { @@ -256,8 +266,10 @@ int EDA_3D_CONTROLLER::ToggleVisibility( const TOOL_EVENT& aEvent ) int EDA_3D_CONTROLLER::ToggleLayersManager( const TOOL_EVENT& aEvent ) { - if( auto* viewer = dynamic_cast( m_toolMgr->GetToolHolder() ) ) - viewer->ToggleAppearanceManager(); + EDA_BASE_FRAME* frame = dynamic_cast( m_toolMgr->GetToolHolder() ); + + if( frame && frame->GetFrameType() == FRAME_PCB_DISPLAY3D ) + static_cast( frame )->ToggleAppearanceManager(); return 0; } diff --git a/3d-viewer/dialogs/panel_preview_3d_model.cpp b/3d-viewer/dialogs/panel_preview_3d_model.cpp index c5f967023b..b0a4c07a03 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.cpp +++ b/3d-viewer/dialogs/panel_preview_3d_model.cpp @@ -51,7 +51,7 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAME* aFrame, FOOTPRINT* aFootprint, std::vector* aParentModelList ) : - PANEL_PREVIEW_3D_MODEL_BASE( aParent, wxID_ANY ), + PANEL_PREVIEW_3D_MODEL_BASE( aParent, PANEL_PREVIEW_3D_MODEL_ID ), m_parentFrame( aFrame ), m_previewPane( nullptr ), m_infobar( nullptr ), @@ -652,6 +652,8 @@ void PANEL_PREVIEW_3D_MODEL::UpdateDummyFootprint( bool aReloadRequired ) void PANEL_PREVIEW_3D_MODEL::onModify() { - if( DIALOG_SHIM* dlg = dynamic_cast( wxGetTopLevelParent( this ) ) ) - dlg->OnModify(); + KIWAY_HOLDER* kiwayHolder = dynamic_cast( wxGetTopLevelParent( this ) ); + + if( kiwayHolder && kiwayHolder->GetType() == KIWAY_HOLDER::DIALOG ) + static_cast( kiwayHolder )->OnModify(); } \ No newline at end of file diff --git a/3d-viewer/dialogs/panel_preview_3d_model.h b/3d-viewer/dialogs/panel_preview_3d_model.h index d9caebae3d..04a526d968 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.h +++ b/3d-viewer/dialogs/panel_preview_3d_model.h @@ -64,7 +64,9 @@ class BOARD_ADAPTER; class FOOTPRINT; class NL_FOOTPRINT_PROPERTIES_PLUGIN; -class PANEL_PREVIEW_3D_MODEL: public EDA_3D_BOARD_HOLDER, public TOOLS_HOLDER, public PANEL_PREVIEW_3D_MODEL_BASE +static wxWindowID PANEL_PREVIEW_3D_MODEL_ID = wxID_HIGHEST + 1244; + +class PANEL_PREVIEW_3D_MODEL: public TOOLS_HOLDER, public PANEL_PREVIEW_3D_MODEL_BASE { public: PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAME* aFrame, FOOTPRINT* aFootprint, @@ -80,8 +82,8 @@ public: wxWindow* GetToolCanvas() const override { return m_previewPane; } - BOARD_ADAPTER& GetAdapter() override { return m_boardAdapter; } - CAMERA& GetCurrentCamera() override { return m_currentCamera; } + BOARD_ADAPTER& GetAdapter() { return m_boardAdapter; } + CAMERA& GetCurrentCamera() { return m_currentCamera; } /** * Set the currently selected index in the model list so that the scale/rotation/offset diff --git a/common/gal/hidpi_gl_3D_canvas.cpp b/common/gal/hidpi_gl_3D_canvas.cpp index c37d5a92e1..128e48d127 100644 --- a/common/gal/hidpi_gl_3D_canvas.cpp +++ b/common/gal/hidpi_gl_3D_canvas.cpp @@ -29,10 +29,10 @@ const float HIDPI_GL_3D_CANVAS::m_delta_move_step_factor = 0.7f; HIDPI_GL_3D_CANVAS::HIDPI_GL_3D_CANVAS( const KIGFX::VC_SETTINGS& aVcSettings, CAMERA& aCamera, wxWindow* aParent, const wxGLAttributes& aGLAttribs, - wxWindowID, const wxPoint& aPos, + wxWindowID aId, const wxPoint& aPos, const wxSize& aSize, long aStyle, const wxString& aName, const wxPalette& aPalette ) : - HIDPI_GL_CANVAS( aVcSettings, aParent, aGLAttribs, wxID_ANY, aPos, aSize, aStyle, aName, aPalette ), + HIDPI_GL_CANVAS( aVcSettings, aParent, aGLAttribs, aId, aPos, aSize, aStyle, aName, aPalette ), m_mouse_is_moving( false ), m_mouse_was_moved( false ), m_camera_is_moving( false ),