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 55d3356..0000000 Binary files a/AnnularChecker/annular_checker.pyc and /dev/null differ diff --git a/README.md b/README.md index 325e2b6..0047321 100644 --- a/README.md +++ b/README.md @@ -1,94 +1,94 @@ -# kicad-action-plugins -#### kicad 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