ADDED: Support tenting control of individual vias

REMOVED: Tenting option from plot dialog (tenting is now
         controlled from Board Setup and via properties)

See https://gitlab.com/kicad/code/kicad/-/issues/2402
This commit is contained in:
Jon Evans 2024-06-09 12:44:30 -04:00
parent 2a37580839
commit 4aab9f59aa
23 changed files with 775 additions and 579 deletions

View File

@ -875,14 +875,15 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// Add via tech layers // Add via tech layers
if( ( layer == F_Mask || layer == B_Mask ) && !m_board->GetTentVias() ) if( ( layer == F_Mask || layer == B_Mask ) )
{ {
int maskExpansion = GetBoard()->GetDesignSettings().m_SolderMaskExpansion; int maskExpansion = GetBoard()->GetDesignSettings().m_SolderMaskExpansion;
for( PCB_TRACK* track : m_board->Tracks() ) for( PCB_TRACK* track : m_board->Tracks() )
{ {
if( track->Type() == PCB_VIA_T if( track->Type() == PCB_VIA_T
&& static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) ) && static_cast<const PCB_VIA*>( track )->FlashLayer( layer )
&& !static_cast<const PCB_VIA*>( track )->IsTented() )
{ {
createViaWithMargin( track, layerContainer, maskExpansion ); createViaWithMargin( track, layerContainer, maskExpansion );
} }
@ -966,14 +967,15 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// NON-TENTED VIAS // NON-TENTED VIAS
if( ( layer == F_Mask || layer == B_Mask ) && !m_board->GetTentVias() ) if( ( layer == F_Mask || layer == B_Mask ) )
{ {
int maskExpansion = GetBoard()->GetDesignSettings().m_SolderMaskExpansion; int maskExpansion = GetBoard()->GetDesignSettings().m_SolderMaskExpansion;
for( PCB_TRACK* track : m_board->Tracks() ) for( PCB_TRACK* track : m_board->Tracks() )
{ {
if( track->Type() == PCB_VIA_T if( track->Type() == PCB_VIA_T
&& static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) ) && static_cast<const PCB_VIA*>( track )->FlashLayer( layer )
&& !static_cast<const PCB_VIA*>( track )->IsTented() )
{ {
track->TransformShapeToPolygon( *layerPoly, layer, maskExpansion, maxError, track->TransformShapeToPolygon( *layerPoly, layer, maskExpansion, maxError,
ERROR_INSIDE ); ERROR_INSIDE );

View File

@ -47,6 +47,7 @@ attr
autoplace_cost90 autoplace_cost90
autoplace_cost180 autoplace_cost180
aux_axis_origin aux_axis_origin
back
best_length_ratio best_length_ratio
best_width_ratio best_width_ratio
bevelled bevelled
@ -138,6 +139,7 @@ fp_rect
fp_text fp_text
fp_text_box fp_text_box
free free
front
full full
general general
generator generator
@ -314,6 +316,7 @@ title_block
teardrop teardrop
teardrops teardrops
tedit tedit
tenting
text_frame text_frame
text_position_mode text_position_mode
thermal_width thermal_width

View File

@ -726,6 +726,8 @@ public:
double m_SolderPasteMarginRatio; // Solder mask margin ratio value of pad size double m_SolderPasteMarginRatio; // Solder mask margin ratio value of pad size
// The final margin is the sum of these 2 values // The final margin is the sum of these 2 values
bool m_AllowSoldermaskBridgesInFPs; bool m_AllowSoldermaskBridgesInFPs;
bool m_TentVias; // The default tenting option if not overridden on an
// individual via
std::shared_ptr<NET_SETTINGS> m_NetSettings; std::shared_ptr<NET_SETTINGS> m_NetSettings;

View File

@ -663,11 +663,6 @@ public:
BOARD_STACKUP GetStackupOrDefault() const; BOARD_STACKUP GetStackupOrDefault() const;
// Tented vias are vias covered by solder mask. So because the solder mask is a negative
// layer, tented vias are NOT plotted on solder mask layers
bool GetTentVias() const { return !m_plotOptions.GetPlotViaOnMaskLayer(); }
void SetTentVias( bool aFlag ) { m_plotOptions.SetPlotViaOnMaskLayer( !aFlag ); }
const PAGE_INFO& GetPageSettings() const { return m_paper; } const PAGE_INFO& GetPageSettings() const { return m_paper; }
void SetPageSettings( const PAGE_INFO& aPageSettings ) { m_paper = aPageSettings; } void SetPageSettings( const PAGE_INFO& aPageSettings ) { m_paper = aPageSettings; }

View File

@ -210,6 +210,7 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
m_SolderPasteMarginRatio = DEFAULT_SOLDERPASTE_RATIO; m_SolderPasteMarginRatio = DEFAULT_SOLDERPASTE_RATIO;
m_AllowSoldermaskBridgesInFPs = false; m_AllowSoldermaskBridgesInFPs = false;
m_TentVias = true;
// Layer thickness for 3D viewer // Layer thickness for 3D viewer
m_boardThickness = pcbIUScale.mmToIU( DEFAULT_BOARD_THICKNESS_MM ); m_boardThickness = pcbIUScale.mmToIU( DEFAULT_BOARD_THICKNESS_MM );
@ -955,6 +956,7 @@ void BOARD_DESIGN_SETTINGS::initFromOther( const BOARD_DESIGN_SETTINGS& aOther )
m_SolderPasteMargin = aOther.m_SolderPasteMargin; m_SolderPasteMargin = aOther.m_SolderPasteMargin;
m_SolderPasteMarginRatio = aOther.m_SolderPasteMarginRatio; m_SolderPasteMarginRatio = aOther.m_SolderPasteMarginRatio;
m_AllowSoldermaskBridgesInFPs = aOther.m_AllowSoldermaskBridgesInFPs; m_AllowSoldermaskBridgesInFPs = aOther.m_AllowSoldermaskBridgesInFPs;
m_TentVias = aOther.m_TentVias;
m_DefaultFPTextItems = aOther.m_DefaultFPTextItems; m_DefaultFPTextItems = aOther.m_DefaultFPTextItems;
std::copy( std::begin( aOther.m_LineThickness ), std::end( aOther.m_LineThickness ), std::copy( std::begin( aOther.m_LineThickness ), std::end( aOther.m_LineThickness ),
@ -1043,6 +1045,7 @@ bool BOARD_DESIGN_SETTINGS::operator==( const BOARD_DESIGN_SETTINGS& aOther ) co
if( m_SolderPasteMargin != aOther.m_SolderPasteMargin ) return false; if( m_SolderPasteMargin != aOther.m_SolderPasteMargin ) return false;
if( m_SolderPasteMarginRatio != aOther.m_SolderPasteMarginRatio ) return false; if( m_SolderPasteMarginRatio != aOther.m_SolderPasteMarginRatio ) return false;
if( m_AllowSoldermaskBridgesInFPs != aOther.m_AllowSoldermaskBridgesInFPs ) return false; if( m_AllowSoldermaskBridgesInFPs != aOther.m_AllowSoldermaskBridgesInFPs ) return false;
if( m_TentVias != aOther.m_TentVias ) return false;
if( m_DefaultFPTextItems != aOther.m_DefaultFPTextItems ) return false; if( m_DefaultFPTextItems != aOther.m_DefaultFPTextItems ) return false;
if( !std::equal( std::begin( m_LineThickness ), std::end( m_LineThickness ), if( !std::equal( std::begin( m_LineThickness ), std::end( m_LineThickness ),

View File

@ -362,9 +362,6 @@ void DIALOG_PLOT::init_Dialog()
// Plot mirror option // Plot mirror option
m_plotMirrorOpt->SetValue( m_plotOpts.GetMirror() ); m_plotMirrorOpt->SetValue( m_plotOpts.GetMirror() );
// Plot vias on mask layer (not tented) or not (tented)
m_tentVias->SetValue( !m_plotOpts.GetPlotViaOnMaskLayer() );
// Black and white plotting // Black and white plotting
m_SVGColorChoice->SetSelection( m_plotOpts.GetBlackAndWhite() ? 1 : 0 ); m_SVGColorChoice->SetSelection( m_plotOpts.GetBlackAndWhite() ? 1 : 0 );
m_PDFColorChoice->SetSelection( m_plotOpts.GetBlackAndWhite() ? 1 : 0 ); m_PDFColorChoice->SetSelection( m_plotOpts.GetBlackAndWhite() ? 1 : 0 );
@ -918,8 +915,6 @@ void DIALOG_PLOT::applyPlotSettings()
sel = m_DXF_plotUnits->GetSelection(); sel = m_DXF_plotUnits->GetSelection();
tempOptions.SetDXFPlotUnits( sel == 0 ? DXF_UNITS::INCHES : DXF_UNITS::MILLIMETERS ); tempOptions.SetDXFPlotUnits( sel == 0 ? DXF_UNITS::INCHES : DXF_UNITS::MILLIMETERS );
tempOptions.SetPlotViaOnMaskLayer( !m_tentVias->GetValue() );
if( !m_DXF_plotTextStrokeFontOpt->IsEnabled() ) // Currently, only DXF supports this option if( !m_DXF_plotTextStrokeFontOpt->IsEnabled() ) // Currently, only DXF supports this option
tempOptions.SetTextMode( PLOT_TEXT_MODE::DEFAULT ); tempOptions.SetTextMode( PLOT_TEXT_MODE::DEFAULT );
else else

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -106,11 +106,6 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
m_zoneFillCheck = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Check zone fills before plotting"), wxDefaultPosition, wxDefaultSize, 0 ); m_zoneFillCheck = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Check zone fills before plotting"), wxDefaultPosition, wxDefaultSize, 0 );
gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
m_tentVias = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Tent vias"), wxDefaultPosition, wxDefaultSize, 0 );
m_tentVias->SetToolTip( _("Tented vias: not plotted on soldermask layer\nNot tented: vias are plotted on soldermask layer\n(Solder mask is a negative layer)") );
gbSizer1->Add( m_tentVias, wxGBPosition( 6, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 30 );
drillMarksLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Drill marks:"), wxDefaultPosition, wxDefaultSize, 0 ); drillMarksLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Drill marks:"), wxDefaultPosition, wxDefaultSize, 0 );
drillMarksLabel->Wrap( -1 ); drillMarksLabel->Wrap( -1 );
gbSizer1->Add( drillMarksLabel, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 30 ); gbSizer1->Add( drillMarksLabel, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 30 );
@ -160,7 +155,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
m_SizerSolderMaskAlert = new wxBoxSizer( wxHORIZONTAL ); m_SizerSolderMaskAlert = new wxBoxSizer( wxHORIZONTAL );
m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxART_WARNING, wxART_CMN_DIALOG ), wxDefaultPosition, wxDefaultSize, 0 ); m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxASCII_STR(wxART_WARNING), wxASCII_STR(wxART_CMN_DIALOG) ), wxDefaultPosition, wxDefaultSize, 0 );
m_SizerSolderMaskAlert->Add( m_bitmapAlert, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 ); m_SizerSolderMaskAlert->Add( m_bitmapAlert, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
wxBoxSizer* bSizerWarningText; wxBoxSizer* bSizerWarningText;

View File

@ -1,34 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wxFormBuilder_Project> <wxFormBuilder_Project>
<FileVersion major="1" minor="17"/> <FileVersion major="1" minor="18"/>
<object class="Project" expanded="true"> <object class="Project" expanded="true">
<property name="class_decoration"></property>
<property name="code_generation">C++</property> <property name="code_generation">C++</property>
<property name="disconnect_events">1</property> <property name="cpp_class_decoration"></property>
<property name="disconnect_mode">source_name</property> <property name="cpp_disconnect_events">1</property>
<property name="disconnect_php_events">0</property> <property name="cpp_event_generation">connect</property>
<property name="disconnect_python_events">0</property> <property name="cpp_help_provider">none</property>
<property name="cpp_namespace"></property>
<property name="cpp_precompiled_header"></property>
<property name="cpp_use_array_enum">0</property>
<property name="cpp_use_enum">1</property>
<property name="embedded_files_path">res</property> <property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property> <property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_plot_base</property> <property name="file">dialog_plot_base</property>
<property name="first_id">1000</property> <property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="image_path_wrapper_function_name"></property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property> <property name="internationalize">1</property>
<property name="lua_skip_events">1</property>
<property name="lua_ui_table">UI</property>
<property name="name">Dialog_Plot_base</property> <property name="name">Dialog_Plot_base</property>
<property name="namespace"></property>
<property name="path">.</property> <property name="path">.</property>
<property name="precompiled_header"></property> <property name="php_disconnect_events">0</property>
<property name="php_disconnect_mode">source_name</property>
<property name="php_skip_events">1</property>
<property name="python_disconnect_events">0</property>
<property name="python_disconnect_mode">source_name</property>
<property name="python_image_path_wrapper_function_name"></property>
<property name="python_indent_with_spaces"></property>
<property name="python_skip_events">1</property>
<property name="relative_path">1</property> <property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_array_enum">0</property>
<property name="use_enum">1</property>
<property name="use_microsoft_bom">0</property> <property name="use_microsoft_bom">0</property>
<property name="use_native_eol">0</property>
<object class="Dialog" expanded="true"> <object class="Dialog" expanded="true">
<property name="aui_managed">0</property> <property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
@ -81,10 +83,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -143,10 +145,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -219,10 +221,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -281,10 +283,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -346,10 +348,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="auth_needed">0</property> <property name="auth_needed">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
@ -444,10 +446,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -549,10 +551,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -617,10 +619,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -686,10 +688,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -755,10 +757,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -824,10 +826,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -892,10 +894,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -961,10 +963,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1029,10 +1031,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1085,74 +1087,6 @@
<property name="window_style"></property> <property name="window_style"></property>
</object> </object>
</object> </object>
<object class="gbsizeritem" expanded="false">
<property name="border">30</property>
<property name="colspan">2</property>
<property name="column">1</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
<property name="row">6</property>
<property name="rowspan">1</property>
<object class="wxCheckBox" expanded="false">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="drag_accept_files">0</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Tent vias</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_tentVias</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip">Tented vias: not plotted on soldermask layer&#x0A;Not tented: vias are plotted on soldermask layer&#x0A;(Solder mask is a negative layer)</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="gbsizeritem" expanded="false"> <object class="gbsizeritem" expanded="false">
<property name="border">30</property> <property name="border">30</property>
<property name="colspan">1</property> <property name="colspan">1</property>
@ -1165,10 +1099,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1230,10 +1164,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1298,10 +1232,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1363,10 +1297,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1432,10 +1366,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1497,10 +1431,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1565,10 +1499,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1633,10 +1567,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1701,10 +1635,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1779,10 +1713,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="bitmap">Load From Art Provider; wxART_WARNING; wxART_CMN_DIALOG</property> <property name="bitmap">Load From Art Provider; wxART_WARNING; wxART_CMN_DIALOG</property>
@ -1847,10 +1781,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1909,10 +1843,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -1990,10 +1924,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2091,10 +2025,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2159,10 +2093,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2227,10 +2161,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2295,10 +2229,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2360,10 +2294,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2428,10 +2362,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2497,10 +2431,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2565,10 +2499,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2646,10 +2580,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2708,10 +2642,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2773,10 +2707,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2875,10 +2809,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -2937,10 +2871,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3012,10 +2946,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3074,10 +3008,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3149,10 +3083,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3211,10 +3145,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3276,10 +3210,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3340,10 +3274,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3437,10 +3371,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3506,10 +3440,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3571,10 +3505,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3639,10 +3573,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3738,10 +3672,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3803,10 +3737,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3869,10 +3803,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -3934,10 +3868,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4033,10 +3967,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4098,10 +4032,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4166,10 +4100,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4234,10 +4168,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4302,10 +4236,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4384,10 +4318,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>
@ -4453,10 +4387,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="auth_needed">0</property> <property name="auth_needed">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
@ -4528,10 +4462,10 @@
<property name="LeftDockable">1</property> <property name="LeftDockable">1</property>
<property name="RightDockable">1</property> <property name="RightDockable">1</property>
<property name="TopDockable">1</property> <property name="TopDockable">1</property>
<property name="aui_layer"></property> <property name="aui_layer">0</property>
<property name="aui_name"></property> <property name="aui_name"></property>
<property name="aui_position"></property> <property name="aui_position">0</property>
<property name="aui_row"></property> <property name="aui_row">0</property>
<property name="best_size"></property> <property name="best_size"></property>
<property name="bg"></property> <property name="bg"></property>
<property name="caption"></property> <property name="caption"></property>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -52,7 +52,7 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
{ {
ID_PRINT_REF = 1000, ID_PRINT_REF = 1000,
ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, ID_ALLOW_PRINT_PAD_ON_SILKSCREEN,
ID_MIROR_OPT ID_MIROR_OPT,
}; };
wxBoxSizer* m_MainSizer; wxBoxSizer* m_MainSizer;
@ -73,7 +73,6 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
wxCheckBox* m_sketchPadsOnFabLayers; wxCheckBox* m_sketchPadsOnFabLayers;
wxCheckBox* m_plotPadNumbers; wxCheckBox* m_plotPadNumbers;
wxCheckBox* m_zoneFillCheck; wxCheckBox* m_zoneFillCheck;
wxCheckBox* m_tentVias;
wxStaticText* drillMarksLabel; wxStaticText* drillMarksLabel;
wxChoice* m_drillShapeOpt; wxChoice* m_drillShapeOpt;
wxStaticText* scalingLabel; wxStaticText* scalingLabel;

View File

@ -124,6 +124,20 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
} }
}; };
auto getTentingSelection =
[]( const PCB_VIA* via ) -> int
{
if( via->Padstack().OuterLayerDefaults().has_solder_mask.has_value() )
{
if( *via->Padstack().OuterLayerDefaults().has_solder_mask )
return 1; // Tented
return 2; // Not tented
}
return 0; // From design rules
};
// Look for values that are common for every item that is selected // Look for values that are common for every item that is selected
for( EDA_ITEM* item : m_items ) for( EDA_ITEM* item : m_items )
{ {
@ -197,6 +211,7 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen
viaType = v->GetViaType(); viaType = v->GetViaType();
m_viaNotFree->SetValue( !v->GetIsFree() ); m_viaNotFree->SetValue( !v->GetIsFree() );
m_annularRingsCtrl->SetSelection( getAnnularRingSelection( v ) ); m_annularRingsCtrl->SetSelection( getAnnularRingSelection( v ) );
m_tentingCtrl->SetSelection( getTentingSelection( v ) );
selection_first_layer = v->TopLayer(); selection_first_layer = v->TopLayer();
selection_last_layer = v->BottomLayer(); selection_last_layer = v->BottomLayer();
@ -665,6 +680,14 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow()
break; break;
} }
switch( m_tentingCtrl->GetSelection() )
{
default:
case 0: v->Padstack().OuterLayerDefaults().has_solder_mask.reset(); break;
case 1: v->Padstack().OuterLayerDefaults().has_solder_mask = true; break;
case 2: v->Padstack().OuterLayerDefaults().has_solder_mask = false; break;
}
v->SanitizeLayers(); v->SanitizeLayers();
if( !m_viaDiameter.IsIndeterminate() ) if( !m_viaDiameter.IsIndeterminate() )

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -321,7 +321,19 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE( wxWindow* pa
int m_annularRingsCtrlNChoices = sizeof( m_annularRingsCtrlChoices ) / sizeof( wxString ); int m_annularRingsCtrlNChoices = sizeof( m_annularRingsCtrlChoices ) / sizeof( wxString );
m_annularRingsCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_annularRingsCtrlNChoices, m_annularRingsCtrlChoices, 0 ); m_annularRingsCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_annularRingsCtrlNChoices, m_annularRingsCtrlChoices, 0 );
m_annularRingsCtrl->SetSelection( 1 ); m_annularRingsCtrl->SetSelection( 1 );
fgSizer4->Add( m_annularRingsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); fgSizer4->Add( m_annularRingsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxEXPAND, 5 );
m_tentingLabel = new wxStaticText( m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Tenting:"), wxDefaultPosition, wxDefaultSize, 0 );
m_tentingLabel->Wrap( -1 );
fgSizer4->Add( m_tentingLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_tentingCtrlChoices[] = { _("From design rules"), _("Tented"), _("Not tented") };
int m_tentingCtrlNChoices = sizeof( m_tentingCtrlChoices ) / sizeof( wxString );
m_tentingCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_tentingCtrlNChoices, m_tentingCtrlChoices, 0 );
m_tentingCtrl->SetSelection( 0 );
m_tentingCtrl->SetToolTip( _("Whether to tent (cover with soldermask) this via") );
fgSizer4->Add( m_tentingCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
viaRightColumn->Add( fgSizer4, 0, wxEXPAND|wxBOTTOM, 3 ); viaRightColumn->Add( fgSizer4, 0, wxEXPAND|wxBOTTOM, 3 );

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// http://www.wxformbuilder.org/ // http://www.wxformbuilder.org/
// //
// PLEASE DO *NOT* EDIT THIS FILE! // PLEASE DO *NOT* EDIT THIS FILE!
@ -38,7 +38,6 @@ class PCB_LAYER_BOX_SELECTOR;
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_TRACK_VIA_PROPERTIES_BASE /// Class DIALOG_TRACK_VIA_PROPERTIES_BASE
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -102,6 +101,8 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public DIALOG_SHIM
PCB_LAYER_BOX_SELECTOR* m_ViaEndLayer; PCB_LAYER_BOX_SELECTOR* m_ViaEndLayer;
wxStaticText* m_annularRingsLabel; wxStaticText* m_annularRingsLabel;
wxChoice* m_annularRingsCtrl; wxChoice* m_annularRingsCtrl;
wxStaticText* m_tentingLabel;
wxChoice* m_tentingCtrl;
wxStaticLine* m_staticline2; wxStaticLine* m_staticline2;
wxBoxSizer* m_legacyTeardropsWarning; wxBoxSizer* m_legacyTeardropsWarning;
wxStaticBitmap* m_legacyTeardropsIcon; wxStaticBitmap* m_legacyTeardropsIcon;

View File

@ -56,7 +56,7 @@ bool PANEL_SETUP_MASK_AND_PASTE::TransferDataToWindow()
m_maskExpansion.SetValue( m_BrdSettings->m_SolderMaskExpansion ); m_maskExpansion.SetValue( m_BrdSettings->m_SolderMaskExpansion );
m_maskMinWidth.SetValue( m_BrdSettings->m_SolderMaskMinWidth ); m_maskMinWidth.SetValue( m_BrdSettings->m_SolderMaskMinWidth );
m_maskToCopperClearance.SetValue( m_BrdSettings->m_SolderMaskToCopperClearance ); m_maskToCopperClearance.SetValue( m_BrdSettings->m_SolderMaskToCopperClearance );
m_tentVias->SetValue( m_Frame->GetBoard()->GetTentVias() ); m_tentVias->SetValue( m_BrdSettings->m_TentVias );
m_pasteMargin.SetValue( m_BrdSettings->m_SolderPasteMargin ); m_pasteMargin.SetValue( m_BrdSettings->m_SolderPasteMargin );
m_pasteMarginRatio.SetDoubleValue( m_BrdSettings->m_SolderPasteMarginRatio * 100.0 ); m_pasteMarginRatio.SetDoubleValue( m_BrdSettings->m_SolderPasteMarginRatio * 100.0 );
@ -73,7 +73,7 @@ bool PANEL_SETUP_MASK_AND_PASTE::TransferDataFromWindow()
m_BrdSettings->m_SolderMaskExpansion = m_maskExpansion.GetValue(); m_BrdSettings->m_SolderMaskExpansion = m_maskExpansion.GetValue();
m_BrdSettings->m_SolderMaskMinWidth = m_maskMinWidth.GetValue(); m_BrdSettings->m_SolderMaskMinWidth = m_maskMinWidth.GetValue();
m_BrdSettings->m_SolderMaskToCopperClearance = m_maskToCopperClearance.GetValue(); m_BrdSettings->m_SolderMaskToCopperClearance = m_maskToCopperClearance.GetValue();
m_Frame->GetBoard()->SetTentVias( m_tentVias->GetValue() ); m_BrdSettings->m_TentVias = m_tentVias->GetValue();
m_BrdSettings->m_SolderPasteMargin = m_pasteMargin.GetValue(); m_BrdSettings->m_SolderPasteMargin = m_pasteMargin.GetValue();
m_BrdSettings->m_SolderPasteMarginRatio = m_pasteMarginRatio.GetDoubleValue() / 100.0; m_BrdSettings->m_SolderPasteMarginRatio = m_pasteMarginRatio.GetDoubleValue() / 100.0;

View File

@ -926,6 +926,9 @@ void PCB_IO_KICAD_LEGACY::loadSETUP()
plot_opts.Parse( &parser ); plot_opts.Parse( &parser );
m_board->SetPlotOptions( plot_opts ); m_board->SetPlotOptions( plot_opts );
if( plot_opts.GetLegacyPlotViaOnMaskLayer().has_value() )
m_board->GetDesignSettings().m_TentVias = *plot_opts.GetLegacyPlotViaOnMaskLayer();
} }
else if( TESTLINE( "AuxiliaryAxisOrg" ) ) else if( TESTLINE( "AuxiliaryAxisOrg" ) )

View File

@ -587,6 +587,12 @@ void PCB_IO_KICAD_SEXPR::formatSetup( const BOARD* aBoard, int aNestLevel ) cons
KICAD_FORMAT::FormatBool( m_out, aNestLevel + 1, "allow_soldermask_bridges_in_footprints", KICAD_FORMAT::FormatBool( m_out, aNestLevel + 1, "allow_soldermask_bridges_in_footprints",
dsnSettings.m_AllowSoldermaskBridgesInFPs ); dsnSettings.m_AllowSoldermaskBridgesInFPs );
// TODO support tenting top or bottom individually
if( dsnSettings.m_TentVias )
m_out->Print( 0, " (tenting front back)" );
else
m_out->Print( 0, " (tenting none)" );
VECTOR2I origin = dsnSettings.GetAuxOrigin(); VECTOR2I origin = dsnSettings.GetAuxOrigin();
if( origin != VECTOR2I( 0, 0 ) ) if( origin != VECTOR2I( 0, 0 ) )
@ -2234,6 +2240,15 @@ void PCB_IO_KICAD_SEXPR::format( const PCB_TRACK* aTrack, int aNestLevel ) const
m_out->Print( 0, ")" ); m_out->Print( 0, ")" );
} }
if( via->Padstack().OuterLayerDefaults().has_solder_mask.has_value() )
{
// TODO support tenting top or bottom individually
if( *via->Padstack().OuterLayerDefaults().has_solder_mask )
m_out->Print( 0, " (tenting top bottom)" );
else
m_out->Print( 0, " (tenting none)" );
}
if( !isDefaultTeardropParameters( via->GetTeardropParams() ) ) if( !isDefaultTeardropParameters( via->GetTeardropParams() ) )
{ {
m_out->Print( 0, "\n" ); m_out->Print( 0, "\n" );

View File

@ -153,7 +153,8 @@ class PCB_IO_KICAD_SEXPR; // forward decl
//----------------- Start of 9.0 development ----------------- //----------------- Start of 9.0 development -----------------
//#define SEXPR_BOARD_FILE_VERSION 20240201 // Use nullable properties for overrides //#define SEXPR_BOARD_FILE_VERSION 20240201 // Use nullable properties for overrides
//#define SEXPR_BOARD_FILE_VERSION 20240202 // Tables //#define SEXPR_BOARD_FILE_VERSION 20240202 // Tables
#define SEXPR_BOARD_FILE_VERSION 20240225 // Rationalization of solder_paste_margin //#define SEXPR_BOARD_FILE_VERSION 20240225 // Rationalization of solder_paste_margin
#define SEXPR_BOARD_FILE_VERSION 20240609 // Add 'tenting' keyword
#define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag #define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag
#define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting #define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting

View File

@ -2316,6 +2316,21 @@ void PCB_IO_KICAD_SEXPR_PARSER::parseSetup()
NeedRIGHT(); NeedRIGHT();
break; break;
case T_tenting:
{
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{
// TODO support tenting top or bottom individually
if( token == T_front || token == T_back )
bds.m_TentVias = true;
else if( token == T_none )
bds.m_TentVias = false;
else
Expecting( "front, back, or none" );
}
break;
}
case T_aux_axis_origin: case T_aux_axis_origin:
{ {
int x = parseBoardUnits( "auxiliary origin X" ); int x = parseBoardUnits( "auxiliary origin X" );
@ -2378,6 +2393,10 @@ void PCB_IO_KICAD_SEXPR_PARSER::parseSetup()
SyncLineReaderWith( parser ); SyncLineReaderWith( parser );
m_board->SetPlotOptions( plotParams ); m_board->SetPlotOptions( plotParams );
if( plotParams.GetLegacyPlotViaOnMaskLayer().has_value() )
m_board->GetDesignSettings().m_TentVias = !*plotParams.GetLegacyPlotViaOnMaskLayer();
break; break;
} }
@ -5815,6 +5834,22 @@ PCB_VIA* PCB_IO_KICAD_SEXPR_PARSER::parsePCB_VIA()
parseTEARDROP_PARAMETERS( &via->GetTeardropParams() ); parseTEARDROP_PARAMETERS( &via->GetTeardropParams() );
break; break;
case T_tenting:
{
// If the via has a tenting token, it means this individual via has a tenting override
for( token = NextTok(); token != T_RIGHT; token = NextTok() )
{
// TODO support tenting top or bottom individually
if( token == T_front || token == T_back )
via->Padstack().OuterLayerDefaults().has_solder_mask = true;
else if( token == T_none )
via->Padstack().OuterLayerDefaults().has_solder_mask = false;
else
Expecting( "front, back, or none" );
}
break;
}
case T_tstamp: case T_tstamp:
case T_uuid: case T_uuid:
NextTok(); NextTok();

View File

@ -103,7 +103,6 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS()
// we used 0.1mils for SVG step before, but nm precision is more accurate, so we use nm // we used 0.1mils for SVG step before, but nm precision is more accurate, so we use nm
m_svgPrecision = SVG_PRECISION_DEFAULT; m_svgPrecision = SVG_PRECISION_DEFAULT;
m_plotDrawingSheet = false; m_plotDrawingSheet = false;
m_plotViaOnMaskLayer = false;
m_plotMode = FILLED; m_plotMode = FILLED;
m_DXFPolygonMode = true; m_DXFPolygonMode = true;
m_DXFUnits = DXF_UNITS::INCHES; m_DXFUnits = DXF_UNITS::INCHES;
@ -209,7 +208,6 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
aFormatter->Print( aNestLevel+1, "(svgprecision %d)\n", m_svgPrecision ); aFormatter->Print( aNestLevel+1, "(svgprecision %d)\n", m_svgPrecision );
KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotframeref", m_plotDrawingSheet ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotframeref", m_plotDrawingSheet );
KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "viasonmask", m_plotViaOnMaskLayer );
aFormatter->Print( aNestLevel+1, "(mode %d)\n", GetPlotMode() == SKETCH ? 2 : 1 ); aFormatter->Print( aNestLevel+1, "(mode %d)\n", GetPlotMode() == SKETCH ? 2 : 1 );
KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "useauxorigin", m_useAuxOrigin ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "useauxorigin", m_useAuxOrigin );
@ -301,9 +299,6 @@ bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
if( m_plotDrawingSheet != aPcbPlotParams.m_plotDrawingSheet ) if( m_plotDrawingSheet != aPcbPlotParams.m_plotDrawingSheet )
return false; return false;
if( m_plotViaOnMaskLayer != aPcbPlotParams.m_plotViaOnMaskLayer )
return false;
if( m_plotMode != aPcbPlotParams.m_plotMode ) if( m_plotMode != aPcbPlotParams.m_plotMode )
return false; return false;

View File

@ -116,8 +116,7 @@ public:
void SetNegative( bool aFlag ) { m_negative = aFlag; } void SetNegative( bool aFlag ) { m_negative = aFlag; }
bool GetNegative() const { return m_negative; } bool GetNegative() const { return m_negative; }
void SetPlotViaOnMaskLayer( bool aFlag ) { m_plotViaOnMaskLayer = aFlag; } std::optional<bool> GetLegacyPlotViaOnMaskLayer() const { return m_plotViaOnMaskLayer; }
bool GetPlotViaOnMaskLayer() const { return m_plotViaOnMaskLayer; }
void SetPlotFrameRef( bool aFlag ) { m_plotDrawingSheet = aFlag; } void SetPlotFrameRef( bool aFlag ) { m_plotDrawingSheet = aFlag; }
bool GetPlotFrameRef() const { return m_plotDrawingSheet; } bool GetPlotFrameRef() const { return m_plotDrawingSheet; }
@ -224,9 +223,8 @@ private:
bool m_blackAndWhite; /// Plot in black and white only bool m_blackAndWhite; /// Plot in black and white only
bool m_plotDrawingSheet; bool m_plotDrawingSheet;
std::optional<bool> m_plotViaOnMaskLayer; /// Deprecated; only used for reading legacy files
bool m_plotViaOnMaskLayer; /// True if vias are drawn on Mask layer (ie untented,
/// *exposed* by mask)
bool m_subtractMaskFromSilk; /// On gerbers 'scrape' away the solder mask from bool m_subtractMaskFromSilk; /// On gerbers 'scrape' away the solder mask from
/// silkscreen (trim silks) /// silkscreen (trim silks)

View File

@ -769,12 +769,39 @@ std::shared_ptr<SHAPE_SEGMENT> PCB_VIA::GetEffectiveHoleShape() const
} }
void PCB_VIA::SetTentingMode( TENTING_MODE aMode )
{
switch( aMode )
{
case TENTING_MODE::FROM_RULES: m_padStack.OuterLayerDefaults().has_solder_mask.reset(); break;
case TENTING_MODE::TENTED: m_padStack.OuterLayerDefaults().has_solder_mask = true; break;
case TENTING_MODE::NOT_TENTED: m_padStack.OuterLayerDefaults().has_solder_mask = false; break;
}
}
TENTING_MODE PCB_VIA::TentingMode() const
{
if( m_padStack.OuterLayerDefaults().has_solder_mask.has_value() )
{
return *m_padStack.OuterLayerDefaults().has_solder_mask ?
TENTING_MODE::TENTED : TENTING_MODE::NOT_TENTED;
}
return TENTING_MODE::FROM_RULES;
}
bool PCB_VIA::IsTented() const bool PCB_VIA::IsTented() const
{ {
// TODO support tenting top or bottom individually
if( m_padStack.OuterLayerDefaults().has_solder_mask.has_value() )
return *m_padStack.OuterLayerDefaults().has_solder_mask;
if( const BOARD* board = GetBoard() ) if( const BOARD* board = GetBoard() )
return board->GetTentVias(); return board->GetDesignSettings().m_TentVias;
else
return true; return true;
} }
@ -1640,6 +1667,12 @@ static struct TRACK_VIA_DESC
.Map( VIATYPE::BLIND_BURIED, _HKI( "Blind/buried" ) ) .Map( VIATYPE::BLIND_BURIED, _HKI( "Blind/buried" ) )
.Map( VIATYPE::MICROVIA, _HKI( "Micro" ) ); .Map( VIATYPE::MICROVIA, _HKI( "Micro" ) );
ENUM_MAP<TENTING_MODE>::Instance()
.Undefined( TENTING_MODE::FROM_RULES )
.Map( TENTING_MODE::FROM_RULES, _HKI( "From design rules" ) )
.Map( TENTING_MODE::TENTED, _HKI( "Tented" ) )
.Map( TENTING_MODE::NOT_TENTED, _HKI( "Not tented" ) );
ENUM_MAP<PCB_LAYER_ID>& layerEnum = ENUM_MAP<PCB_LAYER_ID>::Instance(); ENUM_MAP<PCB_LAYER_ID>& layerEnum = ENUM_MAP<PCB_LAYER_ID>::Instance();
if( layerEnum.Choices().GetCount() == 0 ) if( layerEnum.Choices().GetCount() == 0 )
@ -1697,7 +1730,10 @@ static struct TRACK_VIA_DESC
&PCB_VIA::SetBottomLayer, &PCB_VIA::BottomLayer ), groupVia ); &PCB_VIA::SetBottomLayer, &PCB_VIA::BottomLayer ), groupVia );
propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, VIATYPE>( _HKI( "Via Type" ), propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, VIATYPE>( _HKI( "Via Type" ),
&PCB_VIA::SetViaType, &PCB_VIA::GetViaType ), groupVia ); &PCB_VIA::SetViaType, &PCB_VIA::GetViaType ), groupVia );
propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, TENTING_MODE>( _HKI( "Tenting" ),
&PCB_VIA::SetTentingMode, &PCB_VIA::TentingMode ), groupVia );
} }
} _TRACK_VIA_DESC; } _TRACK_VIA_DESC;
ENUM_TO_WXANY( VIATYPE ); ENUM_TO_WXANY( VIATYPE );
ENUM_TO_WXANY( TENTING_MODE );

View File

@ -70,6 +70,13 @@ enum class VIATYPE : int
NOT_DEFINED = 0 /* not yet used */ NOT_DEFINED = 0 /* not yet used */
}; };
enum class TENTING_MODE
{
FROM_RULES = 0,
TENTED = 1,
NOT_TENTED = 2
};
#define UNDEFINED_DRILL_DIAMETER -1 //< Undefined via drill diameter. #define UNDEFINED_DRILL_DIAMETER -1 //< Undefined via drill diameter.
// Used for tracks and vias for algorithmic safety, not to enforce constraints // Used for tracks and vias for algorithmic safety, not to enforce constraints
@ -407,6 +414,9 @@ public:
MINOPTMAX<int> GetWidthConstraint( wxString* aSource = nullptr ) const override; MINOPTMAX<int> GetWidthConstraint( wxString* aSource = nullptr ) const override;
MINOPTMAX<int> GetDrillConstraint( wxString* aSource = nullptr ) const; MINOPTMAX<int> GetDrillConstraint( wxString* aSource = nullptr ) const;
void SetTentingMode( TENTING_MODE aMode );
TENTING_MODE TentingMode() const;
bool IsTented() const override; bool IsTented() const override;
int GetSolderMaskExpansion() const; int GetSolderMaskExpansion() const;

View File

@ -1,7 +1,7 @@
(kicad_pcb (kicad_pcb
(version 20240108) (version 20240609)
(generator "pcbnew") (generator "pcbnew")
(generator_version "8.0") (generator_version "8.99")
(general (general
(thickness 1.6) (thickness 1.6)
(legacy_teardrops no) (legacy_teardrops no)
@ -128,6 +128,7 @@
) )
(pad_to_mask_clearance 0) (pad_to_mask_clearance 0)
(allow_soldermask_bridges_in_footprints no) (allow_soldermask_bridges_in_footprints no)
(tenting front back)
(pcbplotparams (pcbplotparams
(layerselection 0x00010fc_ffffffff) (layerselection 0x00010fc_ffffffff)
(plot_on_all_layers_selection 0x0000000_00000000) (plot_on_all_layers_selection 0x0000000_00000000)
@ -140,7 +141,6 @@
(dashed_line_gap_ratio 3.000000) (dashed_line_gap_ratio 3.000000)
(svgprecision 4) (svgprecision 4)
(plotframeref no) (plotframeref no)
(viasonmask no)
(mode 1) (mode 1)
(useauxorigin no) (useauxorigin no)
(hpglpennumber 1) (hpglpennumber 1)
@ -148,6 +148,7 @@
(hpglpendiameter 15.000000) (hpglpendiameter 15.000000)
(pdf_front_fp_property_popups yes) (pdf_front_fp_property_popups yes)
(pdf_back_fp_property_popups yes) (pdf_back_fp_property_popups yes)
(pdf_metadata yes)
(dxfpolygonmode yes) (dxfpolygonmode yes)
(dxfimperialunits yes) (dxfimperialunits yes)
(dxfusepcbnewfont yes) (dxfusepcbnewfont yes)
@ -158,10 +159,11 @@
(plotfptext yes) (plotfptext yes)
(plotinvisibletext no) (plotinvisibletext no)
(sketchpadsonfab no) (sketchpadsonfab no)
(plotpadnumbers no)
(subtractmaskfromsilk no) (subtractmaskfromsilk no)
(outputformat 1) (outputformat 1)
(mirror no) (mirror no)
(drillshape 1) (drillshape 0)
(scaleselection 1) (scaleselection 1)
(outputdirectory "") (outputdirectory "")
) )
@ -911,8 +913,8 @@
) )
(primitives (primitives
(gr_bbox (gr_bbox
(start -3.175 -4.1275) (start -5.08 -4.1275)
(end -5.08 -0.9525) (end -3.175 -0.9525)
(fill no) (fill no)
) )
(gr_poly (gr_poly
@ -940,8 +942,8 @@
(width 0.2) (width 0.2)
) )
(gr_rect (gr_rect
(start 3.175 3.81) (start 1.905 3.81)
(end 1.905 5.08) (end 3.175 5.08)
(width 0) (width 0)
(fill yes) (fill yes)
) )
@ -1132,14 +1134,24 @@
(uuid "4da21d74-ca51-4030-841d-9fa4271dd639") (uuid "4da21d74-ca51-4030-841d-9fa4271dd639")
) )
(via (via
(at 122 82) (at 122 79.1)
(size 0.7) (size 0.6)
(drill 0.35) (drill 0.3)
(layers "F.Cu" "B.Cu") (layers "F.Cu" "B.Cu")
(remove_unused_layers yes) (remove_unused_layers yes)
(keep_end_layers no) (keep_end_layers no)
(free yes) (free yes)
(zone_layer_connections) (zone_layer_connections)
(net 2)
(uuid "993f27ea-49bf-4980-b2ed-b2764a799bb9")
)
(via
(at 122 82)
(size 0.7)
(drill 0.35)
(layers "F.Cu" "B.Cu")
(free yes)
(tenting none)
(teardrops (teardrops
(best_length_ratio 0.2) (best_length_ratio 0.2)
(max_length 0) (max_length 0)
@ -1159,10 +1171,8 @@
(size 0.7) (size 0.7)
(drill 0.35) (drill 0.35)
(layers "F.Cu" "B.Cu") (layers "F.Cu" "B.Cu")
(remove_unused_layers yes)
(keep_end_layers yes)
(free yes) (free yes)
(zone_layer_connections) (tenting front back)
(teardrops (teardrops
(best_length_ratio 0.42) (best_length_ratio 0.42)
(max_length 0.75) (max_length 0.75)