Annular checker, option to use drill size as finished hole size

This commit is contained in:
easyw
2020-02-23 09:37:46 +01:00
parent 8d9b3b285c
commit 9ca2bea0b4
5 changed files with 335 additions and 259 deletions

View File

@ -189,131 +189,6 @@
<property name="permission">none</property>
<property name="rows">0</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">1</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">PH Drill margin</property>
<property name="markup">0</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_staticTextPHD</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>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_RIGHT|wxALL</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<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="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></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_textCtrlPHD</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">; ; forward_declare</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="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
@ -346,7 +221,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">AR Vias</property>
<property name="label">AR Vias (mm)</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@ -471,7 +346,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">AR Pads</property>
<property name="label">AR Pads (mm)</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@ -564,6 +439,195 @@
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">1</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">0</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">PH Drill margin (mm)</property>
<property name="markup">0</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_staticTextPHD</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>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_RIGHT|wxALL</property>
<property name="proportion">0</property>
<object class="wxTextCtrl" expanded="1">
<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">0</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="maxlength"></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_textCtrlPHD</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">; ; forward_declare</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="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="1">
<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="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">use drill size as finished hole size</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_checkBoxPHD</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">; ; forward_declare</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>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">

View File

@ -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 )

View File

@ -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

Binary file not shown.

188
README.md
View File

@ -1,94 +1,94 @@
# kicad-action-plugins
#### <font color='navy'><b>kicad action plugin tools</b></font>
- ### 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
#### <font color='navy'><b>A suite of kicad action plugin tools</b></font>
- ### 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