diff --git a/3d-viewer/dialogs/panel_preview_3d_model.cpp b/3d-viewer/dialogs/panel_preview_3d_model.cpp index 5a9f5dc690..f343f9185b 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.cpp +++ b/3d-viewer/dialogs/panel_preview_3d_model.cpp @@ -63,6 +63,8 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM // This board will only be used to hold a footprint for viewing m_dummyBoard->SetBoardUse( BOARD_USE::FPHOLDER ); + m_bodyStyleShowAll = true; + BOARD_DESIGN_SETTINGS parent_bds = aFrame->GetDesignSettings(); BOARD_DESIGN_SETTINGS& dummy_bds = m_dummyBoard->GetDesignSettings(); dummy_bds.SetBoardThickness( parent_bds.GetBoardThickness() ); @@ -83,6 +85,7 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM m_bpvRight->SetBitmap( KiBitmap( BITMAPS::axis3d_right ) ); m_bpvBottom->SetBitmap( KiBitmap( BITMAPS::axis3d_bottom ) ); m_bpvISO->SetBitmap( KiBitmap( BITMAPS::ortho ) ); + m_bpvBodyStyle->SetBitmap( KiBitmap( BITMAPS::axis3d ) ); m_bpUpdate->SetBitmap( KiBitmap( BITMAPS::reload ) ); m_bpSettings->SetBitmap( KiBitmap( BITMAPS::options_3drender ) ); @@ -174,6 +177,10 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM PANEL_PREVIEW_3D_MODEL::~PANEL_PREVIEW_3D_MODEL() { + // Restore the 3D viewer Render settings, that can be modified by the panel tools + if( m_boardAdapter.m_Cfg ) + m_boardAdapter.m_Cfg->m_Render = m_initialRender; + delete m_dummyBoard; delete m_previewPane; } @@ -228,11 +235,21 @@ void PANEL_PREVIEW_3D_MODEL::loadSettings() if( cfg ) { + // Save the 3D viewer render settings, to restore it after closing the preview + m_initialRender = cfg->m_Render; + m_boardAdapter.m_Cfg = cfg; m_previewPane->SetAnimationEnabled( cfg->m_Camera.animation_enabled ); m_previewPane->SetMovingSpeedMultiplier( cfg->m_Camera.moving_speed_multiplier ); m_previewPane->SetProjectionMode( cfg->m_Camera.projection_mode ); + + // Ensure the board body is always shown, and do not use the settings of the 3D viewer + cfg->m_Render.show_soldermask = m_bodyStyleShowAll; + cfg->m_Render.show_solderpaste = m_bodyStyleShowAll; + cfg->m_Render.show_zones = m_bodyStyleShowAll; + cfg->m_Render.show_board_body = m_bodyStyleShowAll; + cfg->m_Render.realistic = m_bodyStyleShowAll; } } @@ -383,6 +400,28 @@ void PANEL_PREVIEW_3D_MODEL::onOpacitySlider( wxCommandEvent& event ) } +void PANEL_PREVIEW_3D_MODEL::setBodyStyleView( wxCommandEvent& event ) +{ + // turn ON or OFF options to show the board body if OFF, soder paste, soldermask + // and board body are hidden, to allows a good view of the 3D model and its pads. + EDA_3D_VIEWER_SETTINGS* cfg = m_boardAdapter.m_Cfg; + + if( !cfg ) + return; + + m_bodyStyleShowAll = !m_bodyStyleShowAll; + + cfg->m_Render.show_soldermask = m_bodyStyleShowAll; + cfg->m_Render.show_solderpaste = m_bodyStyleShowAll; + cfg->m_Render.show_zones = m_bodyStyleShowAll; + cfg->m_Render.show_board_body = m_bodyStyleShowAll; + cfg->m_Render.realistic = m_bodyStyleShowAll; + + m_previewPane->ReloadRequest(); + m_previewPane->Refresh(); +} + + void PANEL_PREVIEW_3D_MODEL::View3DSettings( wxCommandEvent& event ) { BOARD_DESIGN_SETTINGS bds = m_dummyBoard->GetDesignSettings(); diff --git a/3d-viewer/dialogs/panel_preview_3d_model.h b/3d-viewer/dialogs/panel_preview_3d_model.h index d5da6b1b97..3fcba6aa1e 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.h +++ b/3d-viewer/dialogs/panel_preview_3d_model.h @@ -3,7 +3,7 @@ * * Copyright (C) 2016 Mario Luzeiro * Copyright (C) 2015 Cirilo Bernardo - * Copyright (C) 2015-2022 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2015-2023 KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -151,6 +151,11 @@ private: m_previewPane->Refresh(); } + // turn ON or OFF options to show the board body. If OFF, solder paste, soldermask + // and board body are hidden, to allows a good view of the 3D model and its pads. + // Useful for 3D model placement + void setBodyStyleView( wxCommandEvent& event ) override; + void View3DLeft( wxCommandEvent& event ) override { m_previewPane->SetView3D( VIEW3D_TYPE::VIEW3D_LEFT ); @@ -201,9 +206,12 @@ private: FOOTPRINT* m_dummyFootprint; std::vector* m_parentModelList; - int m_selected; /// Index into m_parentInfoList + int m_selected; /// Index into m_parentInfoList EDA_UNITS m_userUnits; + bool m_bodyStyleShowAll; /// true if the board body is show + /// The 3d viewer Render initial settings (must be saved and restored) + EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS m_initialRender; }; #endif // PANEL_PREVIEW_3D_MODEL_H diff --git a/3d-viewer/dialogs/panel_preview_3d_model_base.cpp b/3d-viewer/dialogs/panel_preview_3d_model_base.cpp index ff25410b62..ad724d557c 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model_base.cpp +++ b/3d-viewer/dialogs/panel_preview_3d_model_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b) +// C++ code generated with wxFormBuilder (version 3.10.1-282-g1fa54006) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -190,10 +190,18 @@ PANEL_PREVIEW_3D_MODEL_BASE::PANEL_PREVIEW_3D_MODEL_BASE( wxWindow* parent, wxWi wxBoxSizer* bSizer3DButtons; bSizer3DButtons = new wxBoxSizer( wxVERTICAL ); + + bSizer3DButtons->Add( 0, 10, 0, 0, 5 ); + m_bpvISO = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); m_bpvISO->SetToolTip( _("Enable/disable orthographic projection") ); - bSizer3DButtons->Add( m_bpvISO, 0, wxTOP, 14 ); + bSizer3DButtons->Add( m_bpvISO, 0, wxTOP, 5 ); + + m_bpvBodyStyle = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxBU_AUTODRAW|0 ); + m_bpvBodyStyle->SetToolTip( _("Show or hide the board body\nIf hidden, show only copper and silkscreen layers.") ); + + bSizer3DButtons->Add( m_bpvBodyStyle, 0, wxTOP|wxBOTTOM, 5 ); bSizer3DButtons->Add( 0, 0, 1, wxEXPAND, 5 ); @@ -225,7 +233,10 @@ PANEL_PREVIEW_3D_MODEL_BASE::PANEL_PREVIEW_3D_MODEL_BASE( wxWindow* parent, wxWi bSizer3DButtons->Add( m_bpUpdate, 0, wxBOTTOM, 5 ); m_bpSettings = new wxBitmapButton( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 ); - bSizer3DButtons->Add( m_bpSettings, 0, 0, 5 ); + bSizer3DButtons->Add( m_bpSettings, 0, wxBOTTOM, 5 ); + + + bSizer3DButtons->Add( 0, 10, 0, 0, 5 ); bSizermain->Add( bSizer3DButtons, 0, wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND, 5 ); @@ -274,6 +285,7 @@ PANEL_PREVIEW_3D_MODEL_BASE::PANEL_PREVIEW_3D_MODEL_BASE( wxWindow* parent, wxWi m_spinZoffset->Connect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::onIncrementOffset ), NULL, this ); m_opacity->Connect( wxEVT_SLIDER, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::onOpacitySlider ), NULL, this ); m_bpvISO->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DISO ), NULL, this ); + m_bpvBodyStyle->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::setBodyStyleView ), NULL, this ); m_bpvLeft->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DLeft ), NULL, this ); m_bpvRight->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DRight ), NULL, this ); m_bpvFront->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DFront ), NULL, this ); @@ -325,6 +337,7 @@ PANEL_PREVIEW_3D_MODEL_BASE::~PANEL_PREVIEW_3D_MODEL_BASE() m_spinZoffset->Disconnect( wxEVT_SCROLL_LINEUP, wxSpinEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::onIncrementOffset ), NULL, this ); m_opacity->Disconnect( wxEVT_SLIDER, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::onOpacitySlider ), NULL, this ); m_bpvISO->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DISO ), NULL, this ); + m_bpvBodyStyle->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::setBodyStyleView ), NULL, this ); m_bpvLeft->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DLeft ), NULL, this ); m_bpvRight->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DRight ), NULL, this ); m_bpvFront->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_PREVIEW_3D_MODEL_BASE::View3DFront ), NULL, this ); diff --git a/3d-viewer/dialogs/panel_preview_3d_model_base.fbp b/3d-viewer/dialogs/panel_preview_3d_model_base.fbp index 21d72e2ec8..de8084c019 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model_base.fbp +++ b/3d-viewer/dialogs/panel_preview_3d_model_base.fbp @@ -35,6 +35,7 @@ 1 + 0 1 impl_virtual @@ -119,6 +120,7 @@ Dock 0 Left + 0 1 1 @@ -180,6 +182,7 @@ Dock 0 Left + 0 1 1 @@ -246,6 +249,7 @@ Dock 0 Left + 0 1 1 @@ -306,6 +310,7 @@ Dock 0 Left + 0 1 1 @@ -367,6 +372,7 @@ Dock 0 Left + 0 1 1 @@ -433,6 +439,7 @@ Dock 0 Left + 0 1 1 @@ -493,6 +500,7 @@ Dock 0 Left + 0 1 1 @@ -554,6 +562,7 @@ Dock 0 Left + 0 1 1 @@ -620,6 +629,7 @@ Dock 0 Left + 0 1 1 @@ -712,6 +722,7 @@ Dock 0 Left + 0 1 1 @@ -773,6 +784,7 @@ Dock 0 Left + 0 1 1 @@ -839,6 +851,7 @@ Dock 0 Left + 0 1 1 @@ -899,6 +912,7 @@ Dock 0 Left + 0 1 1 @@ -960,6 +974,7 @@ Dock 0 Left + 0 1 1 @@ -1026,6 +1041,7 @@ Dock 0 Left + 0 1 1 @@ -1086,6 +1102,7 @@ Dock 0 Left + 0 1 1 @@ -1147,6 +1164,7 @@ Dock 0 Left + 0 1 1 @@ -1213,6 +1231,7 @@ Dock 0 Left + 0 1 1 @@ -1305,6 +1324,7 @@ Dock 0 Left + 0 1 1 @@ -1366,6 +1386,7 @@ Dock 0 Left + 0 1 1 @@ -1432,6 +1453,7 @@ Dock 0 Left + 0 1 1 @@ -1492,6 +1514,7 @@ Dock 0 Left + 0 1 1 @@ -1553,6 +1576,7 @@ Dock 0 Left + 0 1 1 @@ -1619,6 +1643,7 @@ Dock 0 Left + 0 1 1 @@ -1679,6 +1704,7 @@ Dock 0 Left + 0 1 1 @@ -1740,6 +1766,7 @@ Dock 0 Left + 0 1 1 @@ -1806,6 +1833,7 @@ Dock 0 Left + 0 1 1 @@ -1882,6 +1910,7 @@ Dock 0 Left + 0 1 1 @@ -1970,6 +1999,7 @@ Dock 0 Left + 0 1 1 @@ -2031,7 +2061,17 @@ wxVERTICAL none - 14 + 5 + + 0 + + 10 + protected + 0 + + + + 5 wxTOP 0 @@ -2060,6 +2100,7 @@ Dock 0 Left + 0 1 1 @@ -2104,6 +2145,81 @@ View3DISO + + 5 + wxTOP|wxBOTTOM + 0 + + 1 + 1 + 1 + 1 + + + + + 0 + + + + + 1 + 0 + 1 + + 1 + + 0 + 0 + + Dock + 0 + Left + 0 + 1 + + 1 + + + 0 + 0 + wxID_ANY + MyButton + + 0 + + 0 + + + 0 + + 1 + m_bpvBodyStyle + 1 + + + protected + 1 + + + + Resizable + 1 + -1,-1 + + + 0 + Show or hide the board body If hidden, show only copper and silkscreen layers. + + wxFILTER_NONE + wxDefaultValidator + + + + + setBodyStyleView + + 5 wxEXPAND @@ -2144,6 +2260,7 @@ Dock 0 Left + 0 1 1 @@ -2218,6 +2335,7 @@ Dock 0 Left + 0 1 1 @@ -2292,6 +2410,7 @@ Dock 0 Left + 0 1 1 @@ -2366,6 +2485,7 @@ Dock 0 Left + 0 1 1 @@ -2440,6 +2560,7 @@ Dock 0 Left + 0 1 1 @@ -2514,6 +2635,7 @@ Dock 0 Left + 0 1 1 @@ -2598,6 +2720,7 @@ Dock 0 Left + 0 1 1 @@ -2644,7 +2767,7 @@ 5 - + wxBOTTOM 0 1 @@ -2672,6 +2795,7 @@ Dock 0 Left + 0 1 1 @@ -2716,6 +2840,16 @@ View3DSettings + + 5 + + 0 + + 10 + protected + 0 + + diff --git a/3d-viewer/dialogs/panel_preview_3d_model_base.h b/3d-viewer/dialogs/panel_preview_3d_model_base.h index 1619ce5672..3d5bbf839f 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model_base.h +++ b/3d-viewer/dialogs/panel_preview_3d_model_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 3.10.1-0-g8feb16b) +// C++ code generated with wxFormBuilder (version 3.10.1-282-g1fa54006) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -69,6 +69,7 @@ class PANEL_PREVIEW_3D_MODEL_BASE : public wxPanel wxStaticText* m_previewLabel; wxBoxSizer* m_SizerPanelView; wxBitmapButton* m_bpvISO; + wxBitmapButton* m_bpvBodyStyle; wxBitmapButton* m_bpvLeft; wxBitmapButton* m_bpvRight; wxBitmapButton* m_bpvFront; @@ -91,6 +92,7 @@ class PANEL_PREVIEW_3D_MODEL_BASE : public wxPanel virtual void onIncrementOffset( wxSpinEvent& event ) { event.Skip(); } virtual void onOpacitySlider( wxCommandEvent& event ) { event.Skip(); } virtual void View3DISO( wxCommandEvent& event ) { event.Skip(); } + virtual void setBodyStyleView( wxCommandEvent& event ) { event.Skip(); } virtual void View3DLeft( wxCommandEvent& event ) { event.Skip(); } virtual void View3DRight( wxCommandEvent& event ) { event.Skip(); } virtual void View3DFront( wxCommandEvent& event ) { event.Skip(); }