diff --git a/3d-viewer/3d_canvas/create_layer_items.cpp b/3d-viewer/3d_canvas/create_layer_items.cpp index aaf99089d6..e22b06145d 100644 --- a/3d-viewer/3d_canvas/create_layer_items.cpp +++ b/3d-viewer/3d_canvas/create_layer_items.cpp @@ -362,12 +362,13 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) // Add a hole for this layer layerHoleContainer->Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, - *track ) ); + *track ) ); } else if( layer == layer_ids[0] ) // it only adds once the THT holes { // Add through hole object - m_TH_ODs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, *track ) ); + if ( !m_Cfg->m_CapVias ) + m_TH_ODs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, *track ) ); m_viaTH_ODs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, *track ) ); if( cfg.clip_silk_on_via_annuli && ring_radius > 0.0 ) diff --git a/3d-viewer/3d_viewer/eda_3d_viewer_settings.cpp b/3d-viewer/3d_viewer/eda_3d_viewer_settings.cpp index 28c91aec4a..48706a67c0 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer_settings.cpp +++ b/3d-viewer/3d_viewer/eda_3d_viewer_settings.cpp @@ -417,6 +417,8 @@ EDA_3D_VIEWER_SETTINGS::EDA_3D_VIEWER_SETTINGS() : m_params.emplace_back( new PARAM( "camera.projection_mode", &m_Camera.projection_mode, 1 ) ); + m_params.emplace_back( new PARAM( "cap_vias", + &m_CapVias, false ) ); m_params.emplace_back( new PARAM( "use_stackup_colors", &m_UseStackupColors, true ) ); m_params.emplace_back( new PARAM_LAYER_PRESET_3D( "layer_presets", diff --git a/3d-viewer/3d_viewer/eda_3d_viewer_settings.h b/3d-viewer/3d_viewer/eda_3d_viewer_settings.h index 52a5714394..ec2bcefba5 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer_settings.h +++ b/3d-viewer/3d_viewer/eda_3d_viewer_settings.h @@ -190,6 +190,7 @@ public: RENDER_SETTINGS m_Render; CAMERA_SETTINGS m_Camera; + bool m_CapVias; bool m_UseStackupColors; std::vector m_LayerPresets; wxString m_CurrentPreset; diff --git a/3d-viewer/dialogs/appearance_controls_3D.cpp b/3d-viewer/dialogs/appearance_controls_3D.cpp index d79c5000fb..d90ac3cd76 100644 --- a/3d-viewer/dialogs/appearance_controls_3D.cpp +++ b/3d-viewer/dialogs/appearance_controls_3D.cpp @@ -166,6 +166,20 @@ APPEARANCE_CONTROLS_3D::APPEARANCE_CONTROLS_3D( EDA_3D_VIEWER_FRAME* aParent, wx m_viewportsLabel->SetFont( infoFont ); // Create display options + m_cbCapVias = new wxCheckBox( m_panelLayers, wxID_ANY, + _( "Cap vias" ) ); + m_cbCapVias->SetFont( infoFont ); + + m_cbCapVias->Bind( wxEVT_CHECKBOX, + [this]( wxCommandEvent& aEvent ) + { + EDA_3D_VIEWER_SETTINGS* cfg = m_frame->GetAdapter().m_Cfg; + cfg->m_CapVias = aEvent.IsChecked(); + + UpdateLayerCtls(); + m_frame->NewDisplay( true ); + } ); + m_cbUseBoardStackupColors = new wxCheckBox( m_panelLayers, wxID_ANY, _( "Use board stackup colors" ) ); m_cbUseBoardStackupColors->SetFont( infoFont ); @@ -196,6 +210,7 @@ APPEARANCE_CONTROLS_3D::APPEARANCE_CONTROLS_3D( EDA_3D_VIEWER_FRAME* aParent, wx m_frame->NewDisplay( true ); } ); + m_panelLayersSizer->Add( m_cbCapVias, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 5 ); m_panelLayersSizer->Add( m_cbUseBoardStackupColors, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 5 ); m_panelLayersSizer->Add( m_cbUseBoardEditorCopperColors, 0, wxEXPAND | wxALL, 5 ); @@ -702,6 +717,7 @@ void APPEARANCE_CONTROLS_3D::UpdateLayerCtls() if( cfg ) { + m_cbCapVias->SetValue( cfg->m_CapVias ); m_cbUseBoardStackupColors->SetValue( cfg->m_UseStackupColors ); m_cbUseBoardEditorCopperColors->SetValue( cfg->m_Render.use_board_editor_copper_colors ); } diff --git a/3d-viewer/dialogs/appearance_controls_3D.h b/3d-viewer/dialogs/appearance_controls_3D.h index 0e36896841..4680dd3566 100644 --- a/3d-viewer/dialogs/appearance_controls_3D.h +++ b/3d-viewer/dialogs/appearance_controls_3D.h @@ -190,6 +190,7 @@ private: int m_pointSize; wxColour m_layerPanelColour; GRID_BITMAP_TOGGLE_RENDERER* m_toggleGridRenderer; + wxCheckBox* m_cbCapVias; wxCheckBox* m_cbUseBoardStackupColors; wxCheckBox* m_cbUseBoardEditorCopperColors; };