kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #30588
Re: [PATCH] Select via sizes from design rules
Hi,
I did something similar, but added a little bit more to it.
It is not yet done so no patch but a link to the Github Repo.
https://github.com/DasBasti/KiCad/tree/via_types_in_design_rules
The goal is to have a list of all used vias in the design in your design
rules. So you can enable micro vias for more than just the outer layers.
And not just give all the constraints up.
I am currently working on having the routing tool detect where the via
should go if a mcro via is selected.
Please have a look at my code and maybe yours will fit in.
Cheers,
Basti
2017-09-04 22:18 GMT+02:00 Mathias Grimmberger <mgri@xxxxxxxxxxxxx>:
>
> Hi Maciej,
>
> Maciej Sumiński <maciej.suminski@xxxxxxx> writes:
> > Hi Mathias,
> >
> > I apologize for not replying to the width setting dropbox earlier, now
> > it seems to be too late to change the idea.
> >
> > Your patch is a clever solution to the problem, so if there are no more
> > ideas/patches for setting via sizes, I am going to apply your changes.
>
>
> Below is an updated patch, the original one would not disable the
> dropdown when the "use netclass values" checkbox was checked.
>
>
> Have fun,
>
> MGri
>
>
>
> diff --git a/pcbnew/dialogs/dialog_track_via_properties.cpp
> b/pcbnew/dialogs/dialog_track_via_properties.cpp
> index 28d4c1b30..15db2bc5a 100644
> --- a/pcbnew/dialogs/dialog_track_via_properties.cpp
> +++ b/pcbnew/dialogs/dialog_track_via_properties.cpp
> @@ -189,6 +189,30 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(
> PCB_BASE_FRAME* aParen
> setCommonVal( viaY, m_ViaYCtrl, m_viaY );
> setCommonVal( viaDiameter, m_ViaDiameterCtrl, m_viaDiameter );
> setCommonVal( viaDrill, m_ViaDrillCtrl, m_viaDrill );
> + m_DesignRuleViasUnit->SetLabel( GetAbbreviatedUnitsLabel(
> g_UserUnit ) );
> +
> + int viaSelection = wxNOT_FOUND;
> +
> + for( unsigned ii = 0; ii < aParent->GetDesignSettings().m_ViasDimensionsList.size();
> ii++ )
> + {
> + VIA_DIMENSION* viaDimension = &aParent->GetDesignSettings().
> m_ViasDimensionsList[ii];
> + wxString msg = StringFromValue( g_UserUnit,
> viaDimension->m_Diameter, false )
> + + " / " + StringFromValue( g_UserUnit,
> viaDimension->m_Drill, false );
> + m_DesignRuleViasCtrl->Append( msg, viaDimension );
> +
> + if( viaSelection == wxNOT_FOUND && viaDiameter ==
> viaDimension->m_Diameter
> + && viaDrill == viaDimension->m_Drill )
> + {
> + viaSelection = ii;
> + }
> + }
> +
> + m_DesignRuleViasCtrl->SetSelection( viaSelection );
> +
> + m_DesignRuleViasCtrl->Connect( wxEVT_CHOICE,
> wxCommandEventHandler( DIALOG_TRACK_VIA_PROPERTIES::onViaSelect ), NULL,
> this );
> + m_ViaDiameterCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler(
> DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this );
> + m_ViaDrillCtrl->Connect( wxEVT_TEXT, wxCommandEventHandler(
> DIALOG_TRACK_VIA_PROPERTIES::onViaEdit ), NULL, this );
> +
> m_ViaDiameterCtrl->SetFocus();
> }
> else
> @@ -410,6 +434,10 @@ void DIALOG_TRACK_VIA_PROPERTIES::onViaNetclassCheck(
> wxCommandEvent& aEvent )
> {
> bool enableNC = aEvent.IsChecked();
>
> + m_DesignRuleVias->Enable( !enableNC );
> + m_DesignRuleViasCtrl->Enable( !enableNC );
> + m_DesignRuleViasUnit->Enable( !enableNC );
> +
> m_ViaDiameterLabel->Enable( !enableNC );
> m_ViaDiameterCtrl->Enable( !enableNC );
> m_ViaDiameterUnit->Enable( !enableNC );
> @@ -433,6 +461,24 @@ void DIALOG_TRACK_VIA_PROPERTIES::onOkClick(
> wxCommandEvent& aEvent )
> }
>
>
> +void DIALOG_TRACK_VIA_PROPERTIES::onViaSelect( wxCommandEvent& aEvent )
> +{
> + VIA_DIMENSION* viaDimension = static_cast<VIA_DIMENSION*> (
> aEvent.GetClientData() );
> +
> + wxString msg = StringFromValue( g_UserUnit, viaDimension->m_Diameter,
> false );
> + m_ViaDiameterCtrl->ChangeValue( msg );
> +
> + msg = StringFromValue( g_UserUnit, viaDimension->m_Drill, false );
> + m_ViaDrillCtrl->ChangeValue( msg );
> +}
> +
> +
> +void DIALOG_TRACK_VIA_PROPERTIES::onViaEdit( wxCommandEvent& aEvent )
> +{
> + m_DesignRuleViasCtrl->SetSelection( wxNOT_FOUND );
> +}
> +
> +
> bool DIALOG_TRACK_VIA_PROPERTIES::check() const
> {
> bool trackNetclass = m_trackNetclass->IsChecked();
> diff --git a/pcbnew/dialogs/dialog_track_via_properties.h
> b/pcbnew/dialogs/dialog_track_via_properties.h
> index 14e15518c..50909924c 100644
> --- a/pcbnew/dialogs/dialog_track_via_properties.h
> +++ b/pcbnew/dialogs/dialog_track_via_properties.h
> @@ -46,6 +46,8 @@ private:
> void onViaNetclassCheck( wxCommandEvent& aEvent ) override;
> void onCancelClick( wxCommandEvent& aEvent ) override;
> void onOkClick( wxCommandEvent& aEvent ) override;
> + void onViaSelect( wxCommandEvent& aEvent );
> + void onViaEdit( wxCommandEvent& aEvent );
>
> void OnInitDlg( wxInitDialogEvent& event ) override
> {
> diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.cpp
> b/pcbnew/dialogs/dialog_track_via_properties_base.cpp
> index 5af355aba..23c117bc2 100644
> --- a/pcbnew/dialogs/dialog_track_via_properties_base.cpp
> +++ b/pcbnew/dialogs/dialog_track_via_properties_base.cpp
> @@ -191,6 +191,19 @@ DIALOG_TRACK_VIA_PROPERTIES_BASE::DIALOG_TRACK_VIA_PROPERTIES_BASE(
> wxWindow* pa
> fgViaRightSizer->SetFlexibleDirection( wxBOTH );
> fgViaRightSizer->SetNonFlexibleGrowMode(
> wxFLEX_GROWMODE_SPECIFIED );
>
> + m_DesignRuleVias = new wxStaticText( m_sbViaSizer->GetStaticBox(),
> wxID_ANY, _("Design rule vias:"), wxDefaultPosition, wxDefaultSize, 0 );
> + m_DesignRuleVias->Wrap( -1 );
> + fgViaRightSizer->Add( m_DesignRuleVias, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL,
> 5 );
> +
> + wxArrayString m_DesignRuleViasCtrlChoices;
> + m_DesignRuleViasCtrl = new wxChoice( m_sbViaSizer->GetStaticBox(),
> wxID_ANY, wxDefaultPosition, wxDefaultSize, m_DesignRuleViasCtrlChoices, 0
> );
> + m_DesignRuleViasCtrl->SetSelection( 0 );
> + fgViaRightSizer->Add( m_DesignRuleViasCtrl, 0,
> wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
> +
> + m_DesignRuleViasUnit = new wxStaticText(
> m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Unit"), wxDefaultPosition,
> wxDefaultSize, 0 );
> + m_DesignRuleViasUnit->Wrap( -1 );
> + fgViaRightSizer->Add( m_DesignRuleViasUnit, 0,
> wxALIGN_CENTER_VERTICAL|wxALL, 5 );
> +
> m_ViaDiameterLabel = new wxStaticText(
> m_sbViaSizer->GetStaticBox(), wxID_ANY, _("Diameter:"), wxDefaultPosition,
> wxDefaultSize, 0 );
> m_ViaDiameterLabel->Wrap( -1 );
> fgViaRightSizer->Add( m_ViaDiameterLabel, 0,
> wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 );
> diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.fbp
> b/pcbnew/dialogs/dialog_track_via_properties_base.fbp
> index c285ca20d..43a690419 100644
> --- a/pcbnew/dialogs/dialog_track_via_properties_base.fbp
> +++ b/pcbnew/dialogs/dialog_track_via_properties_base.fbp
> @@ -103,6 +103,7 @@
> <property name="minimum_size"></property>
> <property name="name">m_sbCommonSizer</property>
> <property name="orient">wxHORIZONTAL</property>
> + <property name="parent">1</property>
> <property name="permission">protected</property>
> <event name="OnUpdateUI"></event>
> <object class="sizeritem" expanded="0">
> @@ -496,6 +497,7 @@
> <property name="minimum_size"></property>
> <property name="name">m_sbTrackSizer</property>
> <property name="orient">wxHORIZONTAL</property>
> + <property name="parent">1</property>
> <property name="permission">protected</property>
> <event name="OnUpdateUI"></event>
> <object class="sizeritem" expanded="0">
> @@ -2204,6 +2206,7 @@
> <property name="minimum_size"></property>
> <property name="name">m_sbViaSizer</property>
> <property name="orient">wxHORIZONTAL</property>
> + <property name="parent">1</property>
> <property name="permission">protected</property>
> <event name="OnUpdateUI"></event>
> <object class="sizeritem" expanded="0">
> @@ -2867,6 +2870,260 @@
> <property
> name="gripper">0</property>
> <property
> name="hidden">0</property>
> <property
> name="id">wxID_ANY</property>
> + <property name="label">Design
> rule 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_DesignRuleVias</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"></property>
> + <property
> name="window_extra_style"></property>
> + <property
> name="window_name"></property>
> + <property name="window_style"></
> property>
> + <property
> name="wrap">-1</property>
> + <event name="OnChar"></event>
> + <event
> name="OnEnterWindow"></event>
> + <event name="OnEraseBackground"></
> event>
> + <event name="OnKeyDown"></event>
> + <event name="OnKeyUp"></event>
> + <event name="OnKillFocus"></event>
> + <event
> name="OnLeaveWindow"></event>
> + <event
> name="OnLeftDClick"></event>
> + <event name="OnLeftDown"></event>
> + <event name="OnLeftUp"></event>
> + <event
> name="OnMiddleDClick"></event>
> + <event
> name="OnMiddleDown"></event>
> + <event name="OnMiddleUp"></event>
> + <event name="OnMotion"></event>
> + <event
> name="OnMouseEvents"></event>
> + <event
> name="OnMouseWheel"></event>
> + <event name="OnPaint"></event>
> + <event
> name="OnRightDClick"></event>
> + <event name="OnRightDown"></event>
> + <event name="OnRightUp"></event>
> + <event name="OnSetFocus"></event>
> + <event name="OnSize"></event>
> + <event name="OnUpdateUI"></event>
> + </object>
> + </object>
> + <object class="sizeritem" expanded="0">
> + <property name="border">5</property>
> + <property name="flag">wxALIGN_CENTER_
> VERTICAL|wxEXPAND</property>
> + <property
> name="proportion">0</property>
> + <object class="wxChoice" expanded="0">
> + <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="choices"></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="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="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_
> DesignRuleViasCtrl</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="selection">0</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"></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>
> + <event name="OnChar"></event>
> + <event name="OnChoice"></event>
> + <event
> name="OnEnterWindow"></event>
> + <event name="OnEraseBackground"></
> event>
> + <event name="OnKeyDown"></event>
> + <event name="OnKeyUp"></event>
> + <event name="OnKillFocus"></event>
> + <event
> name="OnLeaveWindow"></event>
> + <event
> name="OnLeftDClick"></event>
> + <event name="OnLeftDown"></event>
> + <event name="OnLeftUp"></event>
> + <event
> name="OnMiddleDClick"></event>
> + <event
> name="OnMiddleDown"></event>
> + <event name="OnMiddleUp"></event>
> + <event name="OnMotion"></event>
> + <event
> name="OnMouseEvents"></event>
> + <event
> name="OnMouseWheel"></event>
> + <event name="OnPaint"></event>
> + <event
> name="OnRightDClick"></event>
> + <event name="OnRightDown"></event>
> + <event name="OnRightUp"></event>
> + <event name="OnSetFocus"></event>
> + <event name="OnSize"></event>
> + <event name="OnUpdateUI"></event>
> + </object>
> + </object>
> + <object class="sizeritem" expanded="0">
> + <property name="border">5</property>
> + <property name="flag">wxALIGN_CENTER_
> VERTICAL|wxALL</property>
> + <property
> name="proportion">0</property>
> + <object class="wxStaticText"
> expanded="0">
> + <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="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="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">Unit</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_
> DesignRuleViasUnit</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"></property>
> + <property
> name="window_extra_style"></property>
> + <property
> name="window_name"></property>
> + <property name="window_style"></
> property>
> + <property
> name="wrap">-1</property>
> + <event name="OnChar"></event>
> + <event
> name="OnEnterWindow"></event>
> + <event name="OnEraseBackground"></
> event>
> + <event name="OnKeyDown"></event>
> + <event name="OnKeyUp"></event>
> + <event name="OnKillFocus"></event>
> + <event
> name="OnLeaveWindow"></event>
> + <event
> name="OnLeftDClick"></event>
> + <event name="OnLeftDown"></event>
> + <event name="OnLeftUp"></event>
> + <event
> name="OnMiddleDClick"></event>
> + <event
> name="OnMiddleDown"></event>
> + <event name="OnMiddleUp"></event>
> + <event name="OnMotion"></event>
> + <event
> name="OnMouseEvents"></event>
> + <event
> name="OnMouseWheel"></event>
> + <event name="OnPaint"></event>
> + <event
> name="OnRightDClick"></event>
> + <event name="OnRightDown"></event>
> + <event name="OnRightUp"></event>
> + <event name="OnSetFocus"></event>
> + <event name="OnSize"></event>
> + <event name="OnUpdateUI"></event>
> + </object>
> + </object>
> + <object class="sizeritem" expanded="0">
> + <property name="border">5</property>
> + <property name="flag">wxALIGN_CENTER_
> VERTICAL|wxALIGN_RIGHT|wxALL</property>
> + <property
> name="proportion">0</property>
> + <object class="wxStaticText"
> expanded="0">
> + <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="close_button">1</
> property>
> + <property name="context_help"></
> property>
> + <property name="context_menu">0</
> 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="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">Diameter:</
> property>
> <property
> name="max_size"></property>
> <property
> name="maximize_button">0</property>
> diff --git a/pcbnew/dialogs/dialog_track_via_properties_base.h
> b/pcbnew/dialogs/dialog_track_via_properties_base.h
> index 2a0fa250b..8d65384ba 100644
> --- a/pcbnew/dialogs/dialog_track_via_properties_base.h
> +++ b/pcbnew/dialogs/dialog_track_via_properties_base.h
> @@ -78,6 +78,9 @@ class DIALOG_TRACK_VIA_PROPERTIES_BASE : public
> DIALOG_SHIM
> wxTextCtrl* m_ViaYCtrl;
> wxStaticText* m_ViaYUnit;
> wxStaticLine* m_viaStaticLine;
> + wxStaticText* m_DesignRuleVias;
> + wxChoice* m_DesignRuleViasCtrl;
> + wxStaticText* m_DesignRuleViasUnit;
> wxStaticText* m_ViaDiameterLabel;
> wxTextCtrl* m_ViaDiameterCtrl;
> wxStaticText* m_ViaDiameterUnit;
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help : https://help.launchpad.net/ListHelp
>
>
References