From 9ca2bea0b4acfb333f1f1eb8d803f8967862ad36 Mon Sep 17 00:00:00 2001 From: easyw Date: Sun, 23 Feb 2020 09:37:46 +0100 Subject: [PATCH] Annular checker, option to use drill size as finished hole size --- AnnularChecker/AnnularDlg.fbp | 318 +++++++++++++++++------------ AnnularChecker/AnnularDlg.py | 27 ++- AnnularChecker/annular_checker.py | 61 +++--- AnnularChecker/annular_checker.pyc | Bin 14910 -> 0 bytes README.md | 188 ++++++++--------- 5 files changed, 335 insertions(+), 259 deletions(-) delete mode 100644 AnnularChecker/annular_checker.pyc diff --git a/AnnularChecker/AnnularDlg.fbp b/AnnularChecker/AnnularDlg.fbp index 4a7af2a..7d576be 100644 --- a/AnnularChecker/AnnularDlg.fbp +++ b/AnnularChecker/AnnularDlg.fbp @@ -189,131 +189,6 @@ none 0 0 - - 5 - wxALL - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - PH Drill margin - 0 - - 0 - - - 0 - - 1 - m_staticTextPHD - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - 5 - wxALIGN_RIGHT|wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - - 0 - - 1 - m_textCtrlPHD - 1 - - - protected - 1 - - Resizable - 1 - - - ; ; forward_declare - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - 5 wxALL @@ -346,7 +221,7 @@ 0 0 wxID_ANY - AR Vias + AR Vias (mm) 0 0 @@ -471,7 +346,7 @@ 0 0 wxID_ANY - AR Pads + AR Pads (mm) 0 0 @@ -564,6 +439,195 @@ + + 5 + wxALL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + + 1 + + 0 + 0 + wxID_ANY + PH Drill margin (mm) + 0 + + 0 + + + 0 + + 1 + m_staticTextPHD + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + 5 + wxALIGN_RIGHT|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 0 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_textCtrlPHD + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + use drill size as finished hole size + + 0 + + + 0 + + 1 + m_checkBoxPHD + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + diff --git a/AnnularChecker/AnnularDlg.py b/AnnularChecker/AnnularDlg.py index 966a320..e147ed3 100644 --- a/AnnularChecker/AnnularDlg.py +++ b/AnnularChecker/AnnularDlg.py @@ -33,15 +33,7 @@ class AnnularDlg ( wx.Dialog ): gSizer1 = wx.GridSizer( 0, 2, 0, 0 ) - self.m_staticTextPHD = wx.StaticText( self, wx.ID_ANY, u"PH Drill margin", wx.DefaultPosition, wx.DefaultSize, 0 ) - self.m_staticTextPHD.Wrap( -1 ) - - gSizer1.Add( self.m_staticTextPHD, 1, wx.ALL, 5 ) - - self.m_textCtrlPHD = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) - gSizer1.Add( self.m_textCtrlPHD, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) - - self.m_staticTextARV = wx.StaticText( self, wx.ID_ANY, u"AR Vias", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticTextARV = wx.StaticText( self, wx.ID_ANY, u"AR Vias (mm)", wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticTextARV.Wrap( -1 ) gSizer1.Add( self.m_staticTextARV, 0, wx.ALL, 5 ) @@ -49,7 +41,7 @@ class AnnularDlg ( wx.Dialog ): self.m_textCtrlARV = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) gSizer1.Add( self.m_textCtrlARV, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) - self.m_staticTextARP = wx.StaticText( self, wx.ID_ANY, u"AR Pads", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticTextARP = wx.StaticText( self, wx.ID_ANY, u"AR Pads (mm)", wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticTextARP.Wrap( -1 ) gSizer1.Add( self.m_staticTextARP, 0, wx.ALL, 5 ) @@ -57,6 +49,21 @@ class AnnularDlg ( wx.Dialog ): self.m_textCtrlARP = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) gSizer1.Add( self.m_textCtrlARP, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) + self.m_staticTextPHD = wx.StaticText( self, wx.ID_ANY, u"PH Drill margin (mm)", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_staticTextPHD.Wrap( -1 ) + + self.m_staticTextPHD.Enable( False ) + + gSizer1.Add( self.m_staticTextPHD, 1, wx.ALL, 5 ) + + self.m_textCtrlPHD = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.m_textCtrlPHD.Enable( False ) + + gSizer1.Add( self.m_textCtrlPHD, 0, wx.ALIGN_RIGHT|wx.ALL, 5 ) + + self.m_checkBoxPHD = wx.CheckBox( self, wx.ID_ANY, u"use drill size as finished hole size", wx.DefaultPosition, wx.DefaultSize, 0 ) + gSizer1.Add( self.m_checkBoxPHD, 0, wx.ALL, 5 ) + bSizer3.Add( gSizer1, 1, wx.ALIGN_CENTER|wx.ALL, 5 ) diff --git a/AnnularChecker/annular_checker.py b/AnnularChecker/annular_checker.py index fad8137..eaf8bf6 100644 --- a/AnnularChecker/annular_checker.py +++ b/AnnularChecker/annular_checker.py @@ -8,20 +8,14 @@ # annular.py checking PCB for Annular Ring in Vias and TH Pads # (SMD, Connector and NPTH are skipped) # default Annular Ring >= 0.15 both for TH Pads and Vias -# to change values modify: -# -# AR_SET = 0.150 #minimum annular accepted for pads -# AR_SET_V = 0.150 #minimum annular accepted for vias - -# annular.py - +# #### plugins errors #import pcbnew;pcbnew.GetWizardsBackTrace() global mm_ius, DRL_EXTRA, AR_SET, AR_SET_V, DRL_EXTRA_ius, MIN_AR_SIZE, MIN_AR_SIZE_V, found_violations, LogMsg, ___version___ -___version___="1.6.2" +___version___="1.6.3" #wx.LogMessage("My message") mm_ius = 1000000.0 @@ -124,17 +118,15 @@ class Annular_Dlg(AnnularDlg.AnnularDlg): else: super(Annular_Dlg, self).SetSizeHints(sz1, sz2) - # def onDeleteClick(self, event): - # return self.EndModal(wx.ID_DELETE) - # - # def onConnectClick(self, event): - # return self.EndModal(wx.ID_REVERT) - def __init__(self, parent): import wx AnnularDlg.AnnularDlg.__init__(self, parent) #self.GetSizer().Fit(self) self.SetMinSize(self.GetSize()) + #c1.Bind(wx.EVT_CHECKBOX, self.OntextMetric, c1) + #self.m_checkBoxPHD.Bind(wx.EVT_CHECKBOX, self.OnClickCheck, self.m_checkBoxPHD) + self.m_checkBoxPHD.Bind(wx.EVT_CHECKBOX, self.OnClickCheck) + #self.Bind(wx.EVT_CHECKBOX, self.OnClickCheck) #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick) #self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick) #if wx.__version__ < '4.0': @@ -143,6 +135,22 @@ class Annular_Dlg(AnnularDlg.AnnularDlg): #else: # self.m_buttonReconnect.SetToolTip( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" ) # self.m_buttonRound.SetToolTip( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" ) + def OnClickCheck(self, event): + #self.Destroy() + if self.m_checkBoxPHD.IsChecked(): + #self.Destroy() + self.m_staticTextPHD.Enable() + self.m_textCtrlPHD.Enable() + else: + self.m_staticTextPHD.Disable() + self.m_textCtrlPHD.Disable() + + # def onDeleteClick(self, event): + # return self.EndModal(wx.ID_DELETE) + # + # def onConnectClick(self, event): + # return self.EndModal(wx.ID_REVERT) + # Python plugin stuff class annular_check( pcbnew.ActionPlugin ): @@ -150,15 +158,8 @@ class annular_check( pcbnew.ActionPlugin ): A script to check for annular ring violations both for TH pads and vias requirements: KiCAD pcbnew >= 4.0 - annular.py release "1.5.1" - - annular.py checking PCB for Annular Ring in Vias and TH Pads - (SMD, Connector and NPTH are skipped) - default Annular Ring >= 0.15 both for TH Pads and Vias - to change values modify: - - AR_SET = 0.150 #minimum annular accepted for pads - AR_SET_V = 0.150 #minimum annular accepted for vias + AR_SET minimum annular accepted for pads + AR_SET_V minimum annular accepted for vias """ global ___version___ def defaults( self ): @@ -169,7 +170,7 @@ class annular_check( pcbnew.ActionPlugin ): self.description should be a comprehensive description of the plugin """ - self.name = "Annular check \nversion "+___version___ + self.name = "Annular checker \nversion "+___version___ self.category = "Checking PCB" self.description = "Automaticaly check annular on an existing PCB" #self.pcbnew_icon_support = hasattr(self, "show_toolbar_button") @@ -184,11 +185,12 @@ class annular_check( pcbnew.ActionPlugin ): aParameters = Annular_Dlg(_pcbnew_frame) aParameters.m_LabelTitle.SetLabel("Check annular ring: version: "+___version___) aParameters.m_textCtrlARP.SetToolTip( wx.ToolTip(u"Annular Ring for Pads (mm)" )) - aParameters.m_staticTextPHD.SetToolTip( wx.ToolTip(u"Annular Ring for Pads (mm)" )) + aParameters.m_staticTextPHD.SetToolTip( wx.ToolTip(u"Drill extra margin (mm)" )) aParameters.m_textCtrlARV.SetToolTip( wx.ToolTip(u"Annular Ring for Vias (mm)" )) aParameters.m_staticTextARV.SetToolTip( wx.ToolTip(u"Annular Ring for Vias (mm)" )) aParameters.m_textCtrlPHD.SetToolTip( wx.ToolTip(u"Drill extra margin (mm)" )) aParameters.m_staticTextARP.SetToolTip( wx.ToolTip(u"Drill extra margin (mm)" )) + aParameters.m_checkBoxPHD.SetToolTip( wx.ToolTip(u"use drill size as finished hole size\nadding an extra drill margin" )) aParameters.m_textCtrlPHD.SetValue('0.1') aParameters.m_textCtrlARP.SetValue('0.125') aParameters.m_textCtrlARV.SetValue('0.125') @@ -200,9 +202,12 @@ class annular_check( pcbnew.ActionPlugin ): phd = float(aParameters.m_textCtrlPHD.GetValue().replace(',','.')) ar = float(aParameters.m_textCtrlARP.GetValue().replace(',','.')) arv = float(aParameters.m_textCtrlARV.GetValue().replace(',','.')) - DRL_EXTRA=phd - DRL_EXTRA_ius=DRL_EXTRA * mm_ius - + if aParameters.m_checkBoxPHD.IsChecked(): + DRL_EXTRA=phd + DRL_EXTRA_ius=DRL_EXTRA * mm_ius + else: + DRL_EXTRA=0 + DRL_EXTRA_ius=DRL_EXTRA * mm_ius AR_SET = ar #minimum annular accepted for pads MIN_AR_SIZE = AR_SET * mm_ius diff --git a/AnnularChecker/annular_checker.pyc b/AnnularChecker/annular_checker.pyc deleted file mode 100644 index 55d33563c10b1c1abbb490d45b3b645ede05a70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14910 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 action plugin tools - -- ### action_menu_annular_check.py -A script to check for annular ring violations -for PTH, NPTH pads and vias - -- ### action_menu_pcb2dxf -A script to export technical layers of kicad PCB to DXF -DXF generated file has single line draw as it should be for mechanical interchange (this option is missing in pcbnew plot) - -- ### action_menu_move_to_layer -A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) - -- ### action_positions -A script to Generate Position Files for SMD, THD, Virtual, ALL - ---- -## action_menu_annular_check.py -A script to check for annular ring violations -for PTH, NPTH pads and vias - -requirements: KiCAD pcbnew > 4.0 built with KICAD_SCRIPTING_ACTION_MENU option activated -release "1.5.3" - -'action_menu_annular_check.py' checking PCB for Annular Ring in PTH, NPTH and Vias -(SMD, Connector and NPTH are skipped) -default Annular Ring >= 0.15 both for TH Pads and Vias -to change values modify: - - AR_SET = 0.150 #minimum annular accepted for pads - AR_SET_V = 0.150 #minimum annular accepted for vias - DRL_EXTRA = 0.100 #extra drill margin size for production - -Launch the Annular Check script in pcbnew from Tools menu: -![Annular Check](screenshots/annular-checker.gif) - -### todo (annular_check) -- [ ] add colors to output list - ---- -## action_menu_pcb2dxf -**kicadpcb2dxf** -_dxf exporter for mechanical layers of a kicad_pcb board_ -- "Dwgs", "Cmts", "Edge", "Eco1", "Eco2", "F.Fab", "B.Fab", "F.CrtYd", "B.CrtYd" -- the dxf generated has single line draw as it should be for mechanical interchange (this option is missing in pcbnew plot) - -creates DXF file of technical layers of the selected kicad pcb board - -![kicad pcb2dxf](screenshots/export-pcb2dxf.png) - -(this is a part of kicad StepUp tools; please refer to kicad StepUp tools for the full licence) - - kicadpcb2dxf: Copyright (c) 2015 Maurice easyw - dxf_parser="r12writer from ezdxf 0.7.6": Copyright (C) 2016, Manfred Moitzi with MIT License - -done: -- [x] added line, circle, arc primitives -- [x] added footprint support -- [x] fixed negative arc case -- [x] added text support (mirror & alignement not supported) -- [x] added multiline text -- [x] add quote support - -### todo (kicadpcb2dxf) -- [ ] tbd - ---- -## action_menu_move_to_layer -A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) - -requirements: KiCAD pcbnew > 4.0 built with KICAD_SCRIPTING_ACTION_MENU option activated -release "1.1.0" - - A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) - How to use: - - move to GAL - - select some draw objects - - call the plugin - - select the new layer - - selected draw objects will be moved to new layer - -Launch the 'Move Selected drawings to chosen Layer' script in pcbnew from Tools menu -![Move Selected drawings to chosen Layer](screenshots/move_to_layer.png) - -- ### action_positions -A script to Generate Position Files for SMD, THD, Virtual, ALL - -The script will generate Fabrication POS files for: - -- SMD -- THD -- VIRTUAL -- ALL +# kicad-action-tools +#### A suite of kicad action plugin tools + +- ### Annular Ring Checker +Check your kicad_pcb for annular ring violations: +PTH Plated Trough Hole, NPTH Non Plated Trough Hole Pads and Vias + +- ### action_menu_pcb2dxf +A script to export technical layers of kicad PCB to DXF +DXF generated file has single line draw as it should be for mechanical interchange (this option is missing in pcbnew plot) + +- ### action_menu_move_to_layer +A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) + +- ### action_positions +A script to Generate Position Files for SMD, THD, Virtual, ALL + +--- +## action_menu_annular_check.py +A script to check for annular ring violations +for PTH, NPTH pads and vias + +requirements: KiCAD pcbnew > 4.0 built with KICAD_SCRIPTING_ACTION_MENU option activated +release "1.5.3" + +'action_menu_annular_check.py' checking PCB for Annular Ring in PTH, NPTH and Vias +(SMD, Connector and NPTH are skipped) +default Annular Ring >= 0.125 both for TH Pads and Vias +to change values modify: + + AR_SET = 0.150 #minimum annular accepted for pads + AR_SET_V = 0.150 #minimum annular accepted for vias + DRL_EXTRA = 0.100 #extra drill margin size for production + +Launch the Annular Check script in pcbnew from Tools menu: +![Annular Check](screenshots/annular-checker.gif) + +### todo (annular_check) +- [ ] add colors to output list + +--- +## action_menu_pcb2dxf +**kicadpcb2dxf** +_dxf exporter for mechanical layers of a kicad_pcb board_ +- "Dwgs", "Cmts", "Edge", "Eco1", "Eco2", "F.Fab", "B.Fab", "F.CrtYd", "B.CrtYd" +- the dxf generated has single line draw as it should be for mechanical interchange (this option is missing in pcbnew plot) + +creates DXF file of technical layers of the selected kicad pcb board + +![kicad pcb2dxf](screenshots/export-pcb2dxf.png) + +(this is a part of kicad StepUp tools; please refer to kicad StepUp tools for the full licence) + + kicadpcb2dxf: Copyright (c) 2015 Maurice easyw + dxf_parser="r12writer from ezdxf 0.7.6": Copyright (C) 2016, Manfred Moitzi with MIT License + +done: +- [x] added line, circle, arc primitives +- [x] added footprint support +- [x] fixed negative arc case +- [x] added text support (mirror & alignement not supported) +- [x] added multiline text +- [x] add quote support + +### todo (kicadpcb2dxf) +- [ ] tbd + +--- +## action_menu_move_to_layer +A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) + +requirements: KiCAD pcbnew > 4.0 built with KICAD_SCRIPTING_ACTION_MENU option activated +release "1.1.0" + + A script to Move Selected Drawing(s) to chosen new Layer (available only in GAL) + How to use: + - move to GAL + - select some draw objects + - call the plugin + - select the new layer + - selected draw objects will be moved to new layer + +Launch the 'Move Selected drawings to chosen Layer' script in pcbnew from Tools menu +![Move Selected drawings to chosen Layer](screenshots/move_to_layer.png) + +- ### action_positions +A script to Generate Position Files for SMD, THD, Virtual, ALL + +The script will generate Fabrication POS files for: + +- SMD +- THD +- VIRTUAL +- ALL