add bt_player
This commit is contained in:
120
kicad_plugins/trace_solder_expander/SolderExpanderDlg.py
Normal file
120
kicad_plugins/trace_solder_expander/SolderExpanderDlg.py
Normal file
@@ -0,0 +1,120 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
###########################################################################
|
||||
## Python code generated with wxFormBuilder (version Oct 26 2018)
|
||||
## http://www.wxformbuilder.org/
|
||||
##
|
||||
## PLEASE DO *NOT* EDIT THIS FILE!
|
||||
###########################################################################
|
||||
|
||||
import wx
|
||||
import wx.xrc
|
||||
|
||||
###########################################################################
|
||||
## Class SolderExpanderDlg
|
||||
###########################################################################
|
||||
|
||||
class SolderExpanderDlg ( wx.Dialog ):
|
||||
|
||||
def __init__( self, parent ):
|
||||
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Solder Mask Expansion", pos = wx.DefaultPosition, size = wx.Size( 579,761 ), style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER )
|
||||
|
||||
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
|
||||
|
||||
bSizer3 = wx.BoxSizer( wx.VERTICAL )
|
||||
|
||||
self.m_comment = wx.StaticText( self, wx.ID_ANY, u"Select Tracks to add\na Solder Mask clearance expansion\nor One Pad to apply Solder Mask clearance\nexpansion to connected tracks\n", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_comment.Wrap( -1 )
|
||||
|
||||
bSizer3.Add( self.m_comment, 0, wx.ALL|wx.EXPAND, 5 )
|
||||
|
||||
bSizer4 = wx.BoxSizer( wx.VERTICAL )
|
||||
|
||||
|
||||
bSizer4.Add( ( 0, 1), 1, wx.EXPAND, 5 )
|
||||
|
||||
self.m_bitmap1 = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size( 177,102 ), 0 )
|
||||
bSizer4.Add( self.m_bitmap1, 0, wx.EXPAND, 5 )
|
||||
|
||||
self.m_staticText4 = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_staticText4.Wrap( -1 )
|
||||
|
||||
bSizer4.Add( self.m_staticText4, 0, wx.EXPAND, 5 )
|
||||
|
||||
|
||||
bSizer3.Add( bSizer4, 1, wx.EXPAND, 5 )
|
||||
|
||||
bSizer31 = wx.BoxSizer( wx.HORIZONTAL )
|
||||
|
||||
self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"Solder Mask width (mm)\nto Add to Track's width", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_staticText3.Wrap( -1 )
|
||||
|
||||
bSizer31.Add( self.m_staticText3, 1, wx.ALL|wx.EXPAND, 5 )
|
||||
|
||||
self.m_clearanceMM = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_clearanceMM.SetMinSize( wx.Size( 1000,-1 ) )
|
||||
|
||||
bSizer31.Add( self.m_clearanceMM, 1, wx.ALL|wx.EXPAND, 5 )
|
||||
|
||||
|
||||
bSizer3.Add( bSizer31, 0, 0, 5 )
|
||||
|
||||
bSizer1 = wx.BoxSizer( wx.HORIZONTAL )
|
||||
|
||||
self.m_staticText101 = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_staticText101.Wrap( -1 )
|
||||
|
||||
bSizer1.Add( self.m_staticText101, 1, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
self.m_button1 = wx.Button( self, wx.ID_OK, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
|
||||
self.m_button1.SetDefault()
|
||||
bSizer1.Add( self.m_button1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
self.m_button2 = wx.Button( self, wx.ID_CANCEL, u"Cancel", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
bSizer1.Add( self.m_button2, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
|
||||
bSizer3.Add( bSizer1, 0, wx.ALIGN_RIGHT|wx.EXPAND, 5 )
|
||||
|
||||
self.m_staticline1 = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
|
||||
bSizer3.Add( self.m_staticline1, 0, wx.EXPAND |wx.ALL, 5 )
|
||||
|
||||
bSizer11 = wx.BoxSizer( wx.HORIZONTAL )
|
||||
|
||||
self.m_staticText1011 = wx.StaticText( self, wx.ID_ANY, u"Select a Mask segment to delete the Mask path", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_staticText1011.Wrap( -1 )
|
||||
|
||||
bSizer11.Add( self.m_staticText1011, 1, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
self.m_buttonDelete = wx.Button( self, wx.ID_OK, u"Delete", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
bSizer11.Add( self.m_buttonDelete, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
|
||||
bSizer3.Add( bSizer11, 1, wx.EXPAND, 5 )
|
||||
|
||||
bSizerSet = wx.BoxSizer( wx.HORIZONTAL )
|
||||
|
||||
self.m_staticText10111 = wx.StaticText( self, wx.ID_ANY, u"check this to discretize arcs", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
self.m_staticText10111.Wrap( -1 )
|
||||
|
||||
bSizerSet.Add( self.m_staticText10111, 1, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5 )
|
||||
|
||||
self.m_checkBoxD = wx.CheckBox( self, wx.ID_ANY, u"segments", wx.DefaultPosition, wx.DefaultSize, 0 )
|
||||
# self.m_checkBoxD.SetToolTip( u"check this to discretize arcs with segments" )
|
||||
|
||||
bSizerSet.Add( self.m_checkBoxD, 0, wx.ALL, 5 )
|
||||
|
||||
|
||||
bSizer3.Add( bSizerSet, 1, wx.EXPAND, 5 )
|
||||
|
||||
|
||||
self.SetSizer( bSizer3 )
|
||||
self.Layout()
|
||||
|
||||
self.Centre( wx.BOTH )
|
||||
|
||||
def __del__( self ):
|
||||
pass
|
||||
|
||||
|
||||
2
kicad_plugins/trace_solder_expander/__init__.py
Normal file
2
kicad_plugins/trace_solder_expander/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from .trace_solder_expander import Solder_Expander
|
||||
Solder_Expander().register()
|
||||
954
kicad_plugins/trace_solder_expander/solderExpander.fbp
Normal file
954
kicad_plugins/trace_solder_expander/solderExpander.fbp
Normal file
@@ -0,0 +1,954 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<wxFormBuilder_Project>
|
||||
<FileVersion major="1" minor="15" />
|
||||
<object class="Project" expanded="1">
|
||||
<property name="class_decoration"></property>
|
||||
<property name="code_generation">Python</property>
|
||||
<property name="disconnect_events">1</property>
|
||||
<property name="disconnect_mode">source_name</property>
|
||||
<property name="disconnect_php_events">0</property>
|
||||
<property name="disconnect_python_events">0</property>
|
||||
<property name="embedded_files_path">res</property>
|
||||
<property name="encoding">UTF-8</property>
|
||||
<property name="event_generation">connect</property>
|
||||
<property name="file">SolderExpanderDlg</property>
|
||||
<property name="first_id">1000</property>
|
||||
<property name="help_provider">none</property>
|
||||
<property name="indent_with_spaces"></property>
|
||||
<property name="internationalize">0</property>
|
||||
<property name="name">SolderExpanderDlg</property>
|
||||
<property name="namespace"></property>
|
||||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></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_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Dialog" expanded="1">
|
||||
<property name="aui_managed">0</property>
|
||||
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
|
||||
<property name="bg"></property>
|
||||
<property name="center">wxBOTH</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="event_handler">impl_virtual</property>
|
||||
<property name="extra_style"></property>
|
||||
<property name="fg"></property>
|
||||
<property name="font"></property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">SolderExpanderDlg</property>
|
||||
<property name="pos"></property>
|
||||
<property name="size">579,761</property>
|
||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="title">Solder Mask Expansion</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer3</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</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">Select Tracks to add
a Solder Mask clearance expansion
or One Pad to apply Solder Mask clearance
expansion to connected tracks
</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_comment</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">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer4</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<property name="height">1</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBitmap" 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="bitmap"></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="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_bitmap1</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">177,102</property>
|
||||
<property name="subclass">; ; forward_declare</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>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" 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="label"></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_staticText4</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="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag"></property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer31</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</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">Solder Mask width (mm)
to Add to Track's width</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_staticText3</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="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxTextCtrl" 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="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">1000,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_clearanceMM</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="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxTextValidator</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>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_RIGHT|wxEXPAND</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer1</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxStaticText" 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="label"></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_staticText101</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="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" 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="bitmap"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">0</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="current"></property>
|
||||
<property name="default">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="disabled"></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="focus"></property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_OK</property>
|
||||
<property name="label">OK</property>
|
||||
<property name="margins"></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_button1</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="position"></property>
|
||||
<property name="pressed"></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="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="sizeritem" expanded="0">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" 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="bitmap"></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="current"></property>
|
||||
<property name="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="disabled"></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="focus"></property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_CANCEL</property>
|
||||
<property name="label">Cancel</property>
|
||||
<property name="margins"></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_button2</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="position"></property>
|
||||
<property name="pressed"></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="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">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND | wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticLine" 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="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticline1</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">wxLI_HORIZONTAL</property>
|
||||
<property name="subclass">; ; forward_declare</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>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizer11</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxStaticText" 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="label">Select a Mask segment to delete the Mask path</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_staticText1011</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">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxButton" 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="bitmap"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">0</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="current"></property>
|
||||
<property name="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="disabled"></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="focus"></property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_OK</property>
|
||||
<property name="label">Delete</property>
|
||||
<property name="margins"></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_buttonDelete</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="position"></property>
|
||||
<property name="pressed"></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="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">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerSet</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="wxStaticText" 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="label">check this to discretize arcs</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_staticText10111</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">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">segments</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_checkBoxD</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="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>
|
||||
</object>
|
||||
</object>
|
||||
</wxFormBuilder_Project>
|
||||
BIN
kicad_plugins/trace_solder_expander/soldermask_clearance.png
Normal file
BIN
kicad_plugins/trace_solder_expander/soldermask_clearance.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 988 B |
149
kicad_plugins/trace_solder_expander/soldermask_clearance.svg
Normal file
149
kicad_plugins/trace_solder_expander/soldermask_clearance.svg
Normal file
@@ -0,0 +1,149 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="27.733334"
|
||||
width="27.733334"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="soldermask_clearance.svg"
|
||||
viewBox="0 0 26 26"
|
||||
inkscape:export-filename="C:\Users\userC\AppData\Roaming\kicad\scripting\plugins\trace_solder_expander\soldermask_clearance.png"
|
||||
inkscape:export-xdpi="101.05263"
|
||||
inkscape:export-ydpi="101.05263">
|
||||
<metadata
|
||||
id="metadata40">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1361"
|
||||
id="namedview38"
|
||||
showgrid="true"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:zoom="18.443509"
|
||||
inkscape:cx="7.0991957"
|
||||
inkscape:cy="12.507182"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3017"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5"
|
||||
originx="0"
|
||||
originy="0" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
id="c"
|
||||
height="1.3651"
|
||||
width="1.2097"
|
||||
y="-0.18257"
|
||||
x="-0.10484"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1.5978799"
|
||||
id="feGaussianBlur7" />
|
||||
</filter>
|
||||
<filter
|
||||
id="d"
|
||||
height="1.4696"
|
||||
width="1.4809999"
|
||||
y="-0.23481999"
|
||||
x="-0.24049"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1.5978799"
|
||||
id="feGaussianBlur10" />
|
||||
</filter>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M -1.7193647e-8,-1.7193646e-8 V 26 H 26 V 11.5 H 14 14.03125 14.0625 C 12.8522,13.592433 10.591084,15 8,15 4.1340066,15 0.99999996,11.865993 0.99999996,8 0.99999996,4.1340066 4.1340066,0.99999996 8,0.99999996 c 2.591084,0 4.8522,1.40756694 6.0625,3.50000004 3.645833,0 8.291667,0 11.9375,0 V -1.7193646e-8 Z"
|
||||
id="rect3811"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccssscccc"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<path
|
||||
d="m 11.5,8 h 13 m -13,0 C 11.5,9.932997 9.932997,11.5 8,11.5 6.0670034,11.5 4.5,9.932997 4.5,8 4.5,6.0670034 6.0670034,4.5 8,4.5 c 1.932997,0 3.5,1.5670034 3.5,3.5 z"
|
||||
style="opacity:1;fill:none;stroke:#ffcc00;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3867"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<g
|
||||
transform="matrix(1.6382539,0,0,1.5572263,1.2572207,0.36314149)"
|
||||
id="g16"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263">
|
||||
<rect
|
||||
height="16"
|
||||
width="16"
|
||||
y="0"
|
||||
x="0"
|
||||
id="rect18"
|
||||
style="fill-opacity:0" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#006400;fill-opacity:1;stroke:none;stroke-width:1"
|
||||
d="M 0,-1.7193646e-8 V 25.999145 H 25.999145 V 10.394897 H 13.500366 c -0.924775,2.12164 -3.038255,3.605347 -5.5004882,3.605347 -3.3137084,0 -6.0003661,-2.686658 -6.0003661,-6.0003661 0,-3.313709 2.6866577,-6.0003662 6.0003661,-6.0003662 2.4692872,0 4.5872392,1.494109 5.5078122,3.6254883 H 25.999145 V -1.7193647e-8 Z"
|
||||
id="rect3869"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<path
|
||||
id="path3002"
|
||||
style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 11.5,8 h 13 m -13,0 C 11.5,9.932997 9.932997,11.5 8,11.5 6.0670034,11.5 4.5,9.932997 4.5,8 4.5,6.0670034 6.0670034,4.5 8,4.5 c 1.932997,0 3.5,1.5670034 3.5,3.5 z"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccssscccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3872"
|
||||
d="M -1.7193647e-8,-1.7193646e-8 V 26 H 26 V 11.5 H 14 14.03125 14.0625 C 12.8522,13.592433 10.591084,15 8,15 4.1340066,15 0.99999996,11.865993 0.99999996,8 0.99999996,4.1340066 4.1340066,0.99999996 8,0.99999996 c 2.591084,0 4.8522,1.40756694 6.0625,3.50000004 3.645833,0 8.291667,0 11.9375,0 V -1.7193646e-8 Z"
|
||||
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<circle
|
||||
style="opacity:0.76300001;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:14.23387146;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path825"
|
||||
cx="8.0107536"
|
||||
cy="8.0024424"
|
||||
r="1.8978496" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="39.170238"
|
||||
width="68.170242"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
sodipodi:docname="soldermask_clearance_help.svg"
|
||||
viewBox="0 0 63.909602 36.722098"
|
||||
inkscape:export-filename="/home/mau/.kicad_plugins/trace_solder_expander/soldermask_clearance_help.png"
|
||||
inkscape:export-xdpi="249.23077"
|
||||
inkscape:export-ydpi="249.23077">
|
||||
<metadata
|
||||
id="metadata40">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="824"
|
||||
id="namedview38"
|
||||
showgrid="true"
|
||||
inkscape:snap-to-guides="false"
|
||||
inkscape:snap-grids="true"
|
||||
inkscape:zoom="10.94351"
|
||||
inkscape:cx="24.081918"
|
||||
inkscape:cy="19.825662"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
fit-margin-top="1"
|
||||
fit-margin-right="2"
|
||||
fit-margin-left="5"
|
||||
fit-margin-bottom="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3017"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="0.5"
|
||||
spacingy="0.5"
|
||||
originx="10.204784"
|
||||
originy="5.5865558" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
id="c"
|
||||
height="1.3651"
|
||||
width="1.2097"
|
||||
y="-0.18257"
|
||||
x="-0.10484"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1.5978799"
|
||||
id="feGaussianBlur7" />
|
||||
</filter>
|
||||
<filter
|
||||
id="d"
|
||||
height="1.4696"
|
||||
width="1.4809999"
|
||||
y="-0.23481999"
|
||||
x="-0.24049"
|
||||
style="color-interpolation-filters:sRGB">
|
||||
<feGaussianBlur
|
||||
stdDeviation="1.5978799"
|
||||
id="feGaussianBlur10" />
|
||||
</filter>
|
||||
</defs>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3872-9"
|
||||
d="M 6.6422998,2.8922999 V 33.8298 H 60.079799 l -1.5e-5,-30.9375001 z"
|
||||
style="opacity:0.25;fill:#cccccc;fill-opacity:1;stroke:#b3b3b3;stroke-width:3.90959978;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:export-ydpi="82.105263" />
|
||||
<g
|
||||
id="g904"
|
||||
transform="translate(10.204784,5.1355441)">
|
||||
<path
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
style="opacity:0.25;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M -1.7193647e-8,-1.7193646e-8 V 26 H 26 V 11.5 H 14 14.03125 14.0625 C 12.8522,13.592433 10.591084,15 8,15 4.1340066,15 0.99999996,11.865993 0.99999996,8 0.99999996,4.1340066 4.1340066,0.99999996 8,0.99999996 c 2.591084,0 4.8522,1.40756694 6.0625,3.50000004 3.645833,0 8.291667,0 11.9375,0 V -1.7193646e-8 Z"
|
||||
id="path3872"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccssscccc" />
|
||||
<path
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
sodipodi:nodetypes="cccccccssscccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect3811"
|
||||
d="M -1.7193647e-8,-1.7193646e-8 V 26 H 26 V 11.5 H 14 14.03125 14.0625 C 12.8522,13.592433 10.591084,15 8,15 4.1340066,15 0.99999996,11.865993 0.99999996,8 0.99999996,4.1340066 4.1340066,0.99999996 8,0.99999996 c 2.591084,0 4.8522,1.40756694 6.0625,3.50000004 3.645833,0 8.291667,0 11.9375,0 V -1.7193646e-8 Z"
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:#b3b3b3;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect3869"
|
||||
d="M 0,-1.7193646e-8 V 25.999145 H 25.999145 V 10.394897 H 13.500366 c -0.924775,2.12164 -3.038255,3.605347 -5.5004882,3.605347 -3.3137084,0 -6.0003661,-2.686658 -6.0003661,-6.0003661 0,-3.313709 2.6866577,-6.0003662 6.0003661,-6.0003662 2.4692872,0 4.5872392,1.494109 5.5078122,3.6254883 H 25.999145 V -1.7193647e-8 Z"
|
||||
style="fill:#006400;fill-opacity:1;stroke:none;stroke-width:1" />
|
||||
<path
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3867"
|
||||
style="opacity:1;fill:none;stroke:#ffcc00;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 11.5,8 h 13 m -13,0 C 11.5,9.932997 9.932997,11.5 8,11.5 6.0670034,11.5 4.5,9.932997 4.5,8 4.5,6.0670034 6.0670034,4.5 8,4.5 c 1.932997,0 3.5,1.5670034 3.5,3.5 z" />
|
||||
<g
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
id="g16"
|
||||
transform="matrix(1.6382539,0,0,1.5572263,1.2572207,0.36314149)">
|
||||
<rect
|
||||
style="fill-opacity:0"
|
||||
id="rect18"
|
||||
x="0"
|
||||
y="0"
|
||||
width="16"
|
||||
height="16" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:export-ydpi="82.105263"
|
||||
inkscape:export-xdpi="82.105263"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 11.5,8 h 13 m -13,0 C 11.5,9.932997 9.932997,11.5 8,11.5 6.0670034,11.5 4.5,9.932997 4.5,8 4.5,6.0670034 6.0670034,4.5 8,4.5 c 1.932997,0 3.5,1.5670034 3.5,3.5 z"
|
||||
style="opacity:0.25;fill:none;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path3002" />
|
||||
<circle
|
||||
r="1.8978496"
|
||||
cy="8.0024424"
|
||||
cx="8.0107536"
|
||||
id="path825"
|
||||
style="opacity:0.76300001;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:14.23387146;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3088"
|
||||
d="m 28,11 h 6.562499"
|
||||
style="fill:#333333;stroke:#333333;stroke-width:0.9375px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="cc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3088-3"
|
||||
d="m 27.986049,8.7326995 h 6.562499"
|
||||
style="fill:#333333;stroke:#333333;stroke-width:0.9375px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<text
|
||||
id="text851"
|
||||
y="25.152184"
|
||||
x="28.789062"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#333333;fill-opacity:1;stroke:#333333;stroke-width:0.9375"
|
||||
xml:space="preserve"><tspan
|
||||
id="tspan888"
|
||||
sodipodi:role="line"
|
||||
x="28.789062"
|
||||
y="25.152184">exp</tspan></text>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5191"
|
||||
d="M 33.75,17.624999 31.875,12 30,17.624999"
|
||||
style="fill:#333333;stroke:#333333;stroke-width:0.9375px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5195"
|
||||
d="M 30,2 31.875,7.625001 33.75,2"
|
||||
style="fill:#333333;stroke:#333333;stroke-width:0.9375px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.4 KiB |
666
kicad_plugins/trace_solder_expander/trace_solder_expander.py
Executable file
666
kicad_plugins/trace_solder_expander/trace_solder_expander.py
Executable file
@@ -0,0 +1,666 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2019 Maurice https://github.com/easyw/
|
||||
|
||||
# some source tips @
|
||||
# https://github.com/bpkempke/kicad-scripts
|
||||
# https://github.com/MitjaNemec/Kicad_action_plugins
|
||||
# https://github.com/jsreynaud/kicad-action-scripts
|
||||
|
||||
# GNU GENERAL PUBLIC LICENSE
|
||||
# Version 3, 29 June 2007
|
||||
#
|
||||
# Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
# Everyone is permitted to copy and distribute verbatim copies
|
||||
# of this license document, but changing it is not allowed.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301, USA.
|
||||
|
||||
|
||||
# some source tips @
|
||||
# https://github.com/bpkempke/kicad-scripts
|
||||
# https://github.com/MitjaNemec/Kicad_action_plugins
|
||||
# https://github.com/jsreynaud/kicad-action-scripts
|
||||
|
||||
# import trace_solder_expansion; reload(trace_solder_expansion)
|
||||
|
||||
import sys
|
||||
import os
|
||||
from pcbnew import *
|
||||
import wx
|
||||
import pcbnew
|
||||
import math
|
||||
import uuid
|
||||
|
||||
debug = False #True
|
||||
def wxLogDebug(msg,show):
|
||||
"""printing messages only if show is omitted or True"""
|
||||
if show:
|
||||
wx.LogMessage(msg)
|
||||
#
|
||||
def find_pcbnew_w():
|
||||
windows = wx.GetTopLevelWindows()
|
||||
pcbneww = [w for w in windows if "pcbnew" in w.GetTitle().lower()]
|
||||
if len(pcbneww) != 1:
|
||||
return None
|
||||
return pcbneww[0]
|
||||
#
|
||||
|
||||
#if (sys.version[0]) == '2':
|
||||
# from .SolderExpanderDlg import SolderExpanderDlg
|
||||
#else:
|
||||
# from .SolderExpanderDlg_py3 import SolderExpanderDlg_y3
|
||||
#from .SolderExpanderDlg import SolderExpanderDlg
|
||||
from . import SolderExpanderDlg
|
||||
|
||||
ToUnits=pcbnew.ToMM #ToMils
|
||||
FromUnits=pcbnew.FromMM #Mils
|
||||
|
||||
global discretize
|
||||
discretize = False
|
||||
# import trace_solder_expansion; reload(trace_solder_expansion)
|
||||
|
||||
# Python plugin stuff
|
||||
|
||||
class SolderExpander_Dlg(SolderExpanderDlg.SolderExpanderDlg):
|
||||
# from https://github.com/MitjaNemec/Kicad_action_plugins
|
||||
# hack for new wxFormBuilder generating code incompatible with old wxPython
|
||||
# noinspection PyMethodOverriding
|
||||
def SetSizeHints(self, sz1, sz2):
|
||||
if sys.version_info[0] == 2:
|
||||
# wxPython 2
|
||||
self.SetSizeHintsSz(sz1, sz2)
|
||||
else:
|
||||
# wxPython 3
|
||||
super(SolderExpander_Dlg, self).SetSizeHints(sz1, sz2)
|
||||
|
||||
def onDeleteClick(self, event):
|
||||
return self.EndModal(wx.ID_DELETE)
|
||||
|
||||
def __init__(self, parent):
|
||||
global discretize
|
||||
SolderExpanderDlg.SolderExpanderDlg.__init__(self, parent)
|
||||
self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick)
|
||||
self.SetMinSize(self.GetSize())
|
||||
#if self.m_checkBoxD.IsChecked():
|
||||
# discretize = True
|
||||
# #wx.LogMessage(str(discretize) + ' 0')
|
||||
#else:
|
||||
# discretize = False
|
||||
|
||||
#
|
||||
|
||||
class Solder_Expander(pcbnew.ActionPlugin):
|
||||
def defaults(self):
|
||||
self.name = "Solder Mask Expander for Tracks\n version 2.3"
|
||||
self.category = "Modify PCB"
|
||||
self.description = "Solder Mask Expander for selected Tracks on the PCB"
|
||||
self.icon_file_name = os.path.join(os.path.dirname(__file__), "./soldermask_clearance.png")
|
||||
self.show_toolbar_button = True
|
||||
|
||||
def Warn(self, message, caption='Warning!'):
|
||||
dlg = wx.MessageDialog(
|
||||
None, message, caption, wx.OK | wx.ICON_WARNING)
|
||||
dlg.ShowModal()
|
||||
dlg.Destroy()
|
||||
|
||||
def CheckInput(self, value, data):
|
||||
val = None
|
||||
try:
|
||||
val = float(value.replace(',','.'))
|
||||
if val <= 0:
|
||||
raise Exception("Invalid")
|
||||
except:
|
||||
self.Warn(
|
||||
"Invalid parameter for %s: Must be a positive number" % data)
|
||||
val = None
|
||||
return val
|
||||
|
||||
def Run(self):
|
||||
#import pcbnew
|
||||
#pcb = pcbnew.GetBoard()
|
||||
# net_name = "GND"
|
||||
#aParameters = SolderExpanderDlg(None)
|
||||
# _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0]
|
||||
global discretize
|
||||
|
||||
# _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetName() == 'PcbFrame'][0]
|
||||
pcbnew_window = find_pcbnew_w()
|
||||
aParameters = SolderExpander_Dlg(pcbnew_window)
|
||||
aParameters.m_clearanceMM.SetValue("0.2")
|
||||
aParameters.m_bitmap1.SetBitmap(wx.Bitmap( os.path.join(os.path.dirname(os.path.realpath(__file__)), "soldermask_clearance_help.png") ) )
|
||||
pcb = pcbnew.GetBoard()
|
||||
if not(hasattr(pcbnew,'DRAWSEGMENT')):
|
||||
#if hasattr(pcb, 'm_Uuid'):
|
||||
aParameters.m_buttonDelete.Disable()
|
||||
aParameters.m_buttonDelete.Hide()
|
||||
aParameters.m_staticText1011.Hide()
|
||||
aParameters.m_checkBoxD.SetToolTip( u"check this to discretize arcs with segments" )
|
||||
#if aParameters.m_checkBoxD.IsChecked():
|
||||
# discretize = True
|
||||
# wx.LogMessage(str(discretize) + ' 1')
|
||||
#else:
|
||||
# discretize = False
|
||||
else:
|
||||
aParameters.m_checkBoxD.Hide()
|
||||
aParameters.m_staticText10111.Hide()
|
||||
modal_result = aParameters.ShowModal()
|
||||
clearance = FromMM(self.CheckInput(aParameters.m_clearanceMM.GetValue(), "extra clearance from track width"))
|
||||
|
||||
if not(hasattr(pcbnew,'DRAWSEGMENT')):
|
||||
#if hasattr(pcb, 'm_Uuid'):
|
||||
aParameters.m_buttonDelete.Disable()
|
||||
aParameters.m_buttonDelete.Hide()
|
||||
aParameters.m_staticText1011.Hide()
|
||||
discretize = aParameters.m_checkBoxD.GetValue()
|
||||
#if aParameters.m_checkBoxD.IsChecked():
|
||||
# discretize = True
|
||||
# wx.LogMessage(str(discretize) + ' 1')
|
||||
#else:
|
||||
# discretize = False
|
||||
|
||||
if clearance is not None:
|
||||
if modal_result == wx.ID_OK:
|
||||
#pcb = pcbnew.GetBoard()
|
||||
tracks=getSelTracks(pcb)
|
||||
arcs=getSelArcs(pcb)
|
||||
if len(tracks) >0 or len(arcs) >0 : #selected tracks >0
|
||||
solderExpander(pcb,tracks,clearance)
|
||||
solderExpander(pcb,arcs,clearance)
|
||||
else:
|
||||
pads=[]
|
||||
for item in pcb.GetPads():
|
||||
if item.IsSelected():
|
||||
pads.append(item)
|
||||
if len(pads) == 1:
|
||||
tracks=[]
|
||||
tracks = find_Tracks_inNet_Pad(pcb,pads[0])
|
||||
c_tracks = get_contiguous_tracks(pcb,tracks,pads[0])
|
||||
solderExpander(pcb,c_tracks,clearance)
|
||||
solderExpander(pcb,arcs,clearance)
|
||||
else:
|
||||
wx.LogMessage("Solder Mask Expander:\nSelect Tracks\nor One Pad to select connected Tracks")
|
||||
|
||||
#solderExpander(clearance)
|
||||
elif modal_result == wx.ID_DELETE:
|
||||
Delete_Segments(pcb)
|
||||
#wx.LogMessage('Solder Mask Segments on Track Net Deleted')
|
||||
else:
|
||||
None # Cancel
|
||||
else:
|
||||
None # Invalid input
|
||||
aParameters.Destroy()
|
||||
#
|
||||
def selectListTracks(pcb,tracks):
|
||||
for item in tracks:
|
||||
if type(item) is TRACK:
|
||||
item.SetSelected()
|
||||
#
|
||||
#
|
||||
#def getSelTracksLength(pcb):
|
||||
# ln = 0.
|
||||
# for item in pcb.GetTracks():
|
||||
# if type(item) is pcbnew.TRACK and item.IsSelected():
|
||||
# ln+=(item.GetLength())
|
||||
# return(ln)
|
||||
# #print(pcbnew.ToMM(ln))
|
||||
#
|
||||
def get_contiguous_tracks(pcb,trks,pad):
|
||||
LinePoints = []
|
||||
LineSegments=[]
|
||||
|
||||
#start_point = ToMM(pad.GetPosition())
|
||||
startp = (pad.GetPosition())
|
||||
start_point = ((startp.x),(startp.y))
|
||||
for t in (trks):
|
||||
LinePoints.append((t.GetStart().x,t.GetStart().y))
|
||||
LinePoints.append((t.GetEnd().x, t.GetEnd().y))
|
||||
wxLogDebug('Points '+str(LinePoints),debug)
|
||||
l= len(LinePoints)
|
||||
for i in range(0,l,2):
|
||||
LineSegments.append((LinePoints[i],LinePoints[i+1]))
|
||||
wxLogDebug(str(LineSegments),debug)
|
||||
|
||||
#segments = [(1, 2), (2, 3), (4, 5), (6, 5), (7, 6)]
|
||||
#start_point=(4,5)
|
||||
#segments_start=segments
|
||||
|
||||
segments = LineSegments
|
||||
groups=[]
|
||||
found=False
|
||||
for s in segments:
|
||||
found=False
|
||||
for g in groups:
|
||||
for sCmp in g:
|
||||
wxLogDebug('sCmp: '+(str(sCmp)),debug)
|
||||
wxLogDebug('s: '+(str(s)),debug)
|
||||
if isConn(sCmp,s): #confronto start e end
|
||||
g.append(s)
|
||||
found=True
|
||||
break;
|
||||
if (found):
|
||||
break;
|
||||
if(not found):
|
||||
groups.append([s])
|
||||
wxLogDebug('groups: '+(str(groups)),debug)
|
||||
wxLogDebug('len groups: '+(str(len(groups))),debug)
|
||||
l = 0
|
||||
lens = []
|
||||
for g in groups:
|
||||
lens.append(len(g))
|
||||
if l<len(g):
|
||||
l = len(g)
|
||||
wxLogDebug('len max groups: '+str(l),debug)
|
||||
wxLogDebug('lens in groups: '+str(lens),debug)
|
||||
found=False
|
||||
|
||||
res_g=[]
|
||||
wxLogDebug('start '+str((start_point,start_point)),debug)
|
||||
wxLogDebug('start '+str(s),debug)
|
||||
|
||||
#for g,i in enumerate(groups):
|
||||
i=0
|
||||
while (i+1) < len (groups):
|
||||
found = False
|
||||
for s in groups[i]:
|
||||
for r in groups[i+1]:
|
||||
wxLogDebug('s: '+str(s)+';r: '+str(r),debug)
|
||||
if isConn(r,s):
|
||||
for r1 in groups[i+1]:
|
||||
groups[i].append(r1)
|
||||
groups.pop(i+1)
|
||||
found=True
|
||||
break
|
||||
if found:
|
||||
break
|
||||
if not found:
|
||||
i+=1
|
||||
else:
|
||||
i=0
|
||||
l = 0
|
||||
lens = []
|
||||
for g in groups:
|
||||
lens.append(len(g))
|
||||
if l<len(g):
|
||||
l = len(g)
|
||||
wxLogDebug('groups merged: '+(str(groups)),debug)
|
||||
wxLogDebug('len max groups merged: '+str(l),debug)
|
||||
wxLogDebug('lens in groups merged: '+str(lens),debug)
|
||||
|
||||
for g in groups:
|
||||
for s in g:
|
||||
if isConn((start_point,start_point),s):
|
||||
res_g = g
|
||||
found = True
|
||||
break
|
||||
wxLogDebug('start '+str(start_point),debug)
|
||||
group = res_g
|
||||
wxLogDebug('group '+str(res_g),debug)
|
||||
wxLogDebug('len group: '+(str(len(group))),debug)
|
||||
trks_connected=[]
|
||||
for seg in res_g:
|
||||
for t in trks:
|
||||
tseg = ((t.GetStart().x,t.GetStart().y),(t.GetEnd().x,t.GetEnd().y))
|
||||
wxLogDebug('seg '+str(seg),debug)
|
||||
wxLogDebug('tseg '+str(tseg),debug)
|
||||
if isConn(seg,tseg):
|
||||
if t not in trks_connected:
|
||||
trks_connected.append(t)
|
||||
wxLogDebug('t added: '+(str(tseg)),debug)
|
||||
wxLogDebug('trks_connected '+str(len(trks_connected)),debug)
|
||||
return trks_connected
|
||||
#
|
||||
def isEq (p1,p2):
|
||||
epsilon = FromMM(0.003) # tolerance 5 nm
|
||||
delta = math.hypot(p1[0]-p2[0],p1[1]-p2[1])
|
||||
wxLogDebug('delta: '+str(delta)+'eps: '+str(epsilon),debug)
|
||||
#wxLogDebug('epsilon: '+str(epsilon),debug)
|
||||
if delta <= epsilon:
|
||||
wxLogDebug('connected',debug)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
#
|
||||
|
||||
def isConn(s1,s2):
|
||||
#if s1[0] == s2[0] or s1[1] == s2[1]:
|
||||
if isEq(s1[0],s2[0]) or isEq(s1[1],s2[1]):
|
||||
return True
|
||||
#elif s1[0] == s2[1] or s1[1] == s2[0]:
|
||||
elif isEq(s1[0],s2[1]) or isEq(s1[1],s2[0]):
|
||||
return True
|
||||
return False
|
||||
#
|
||||
|
||||
def getSelTracks(pcb):
|
||||
tracks=[]
|
||||
if hasattr(pcbnew,'TRACK'):
|
||||
track_item = pcbnew.TRACK
|
||||
else:
|
||||
track_item = pcbnew.PCB_TRACK
|
||||
for item in pcb.GetTracks():
|
||||
if type(item) is track_item and item.IsSelected():
|
||||
tracks.append(item)
|
||||
return tracks
|
||||
#
|
||||
def getSelArcs(pcb):
|
||||
tracks=[]
|
||||
if hasattr(pcbnew,'TRACK'):
|
||||
track_item = pcbnew.TRACK
|
||||
else:
|
||||
track_item = pcbnew.PCB_ARC
|
||||
for item in pcb.GetTracks():
|
||||
if type(item) is track_item and item.IsSelected():
|
||||
tracks.append(item)
|
||||
return tracks
|
||||
#
|
||||
def find_Tracks_inNet_Pad(pcb,pad):
|
||||
track_list = []
|
||||
# get list of all selected pads
|
||||
#selected_pads = [pad1, pad2]
|
||||
# get the net the pins are on
|
||||
net = pad.GetNetname()
|
||||
# find all tracks
|
||||
tracks = pcb.GetTracks()
|
||||
# find all tracks on net
|
||||
tracks_on_net = []
|
||||
for track in tracks:
|
||||
track_net_name = track.GetNetname()
|
||||
if track_net_name == net:
|
||||
tracks_on_net.append(track)
|
||||
return tracks_on_net
|
||||
#
|
||||
def not_eq(a,b):
|
||||
if abs(a-b) >= 1: #1nm
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
#
|
||||
# Function to find the circle on
|
||||
# which the given three points lie
|
||||
def getCircleCenterRadius(sp,ep,ip):
|
||||
# findCircle(x1, y1, x2, y2, x3, y3) :
|
||||
# NB add always set float even if values are pcb internal Units!!!
|
||||
x1 = float(sp.x); y1 = float(sp.y)
|
||||
x2 = float(ep.x); y2 = float(ep.y)
|
||||
x3 = float(ip.x); y3 = float(ip.y)
|
||||
|
||||
x12 = x1 - x2;
|
||||
x13 = x1 - x3;
|
||||
y12 = y1 - y2;
|
||||
y13 = y1 - y3;
|
||||
y31 = y3 - y1;
|
||||
y21 = y2 - y1;
|
||||
x31 = x3 - x1;
|
||||
x21 = x2 - x1;
|
||||
|
||||
# x1^2 - x3^2
|
||||
sx13 = math.pow(x1, 2) - math.pow(x3, 2);
|
||||
# y1^2 - y3^2
|
||||
sy13 = math.pow(y1, 2) - math.pow(y3, 2);
|
||||
sx21 = math.pow(x2, 2) - math.pow(x1, 2);
|
||||
sy21 = math.pow(y2, 2) - math.pow(y1, 2);
|
||||
|
||||
f = (((sx13) * (x12) + (sy13) *
|
||||
(x12) + (sx21) * (x13) +
|
||||
(sy21) * (x13)) // (2 *
|
||||
((y31) * (x12) - (y21) * (x13))));
|
||||
|
||||
g = (((sx13) * (y12) + (sy13) * (y12) +
|
||||
(sx21) * (y13) + (sy21) * (y13)) //
|
||||
(2 * ((x31) * (y12) - (x21) * (y13))));
|
||||
|
||||
c = (-math.pow(x1, 2) - math.pow(y1, 2) - 2 * g * x1 - 2 * f * y1);
|
||||
|
||||
# eqn of circle be x^2 + y^2 + 2*g*x + 2*f*y + c = 0
|
||||
# where centre is (h = -g, k = -f) and
|
||||
# radius r as r^2 = h^2 + k^2 - c
|
||||
h = -g;
|
||||
k = -f;
|
||||
sqr_of_r = h * h + k * k - c;
|
||||
# r is the radius
|
||||
r = round(math.sqrt(sqr_of_r), 5);
|
||||
Cx = h
|
||||
Cy = k
|
||||
radius = r
|
||||
return wxPoint(Cx,Cy), radius
|
||||
#
|
||||
def create_Solder(pcb,p1,p2,lyr=None,w=None,Nn=None,Ts=None,pcbG=None):
|
||||
#draw segment to test or from Arc
|
||||
#new_line = pcbnew.DRAWSEGMENT(pcb)
|
||||
if hasattr(pcbnew,'TRACK'):
|
||||
new_line = pcbnew.TRACK(pcb)
|
||||
else:
|
||||
#new_shape = pcbnew.S_SEGMENT()
|
||||
new_line = PCB_SHAPE()
|
||||
# new_shape = pcbnew.PCB_SHAPE()
|
||||
# new_line = pcbnew.Cast_to_PCB_SHAPE(new_shape)
|
||||
#new_soldermask_shape = PCB_SHAPE()
|
||||
#new_soldermask_line = pcbnew.Cast_to_PCB_SHAPE(new_soldermask_shape)
|
||||
#new_line = PCB_TRACK(new_shape)
|
||||
|
||||
new_line.SetStart(p1)
|
||||
new_line.SetEnd(p2)
|
||||
if w is None:
|
||||
new_line.SetWidth(FromUnits(1.5)) #FromUnits(int(mask_width)))
|
||||
else:
|
||||
#wx.LogMessage(str(w))
|
||||
new_line.SetWidth(w) #FromUnits(w))
|
||||
if lyr is None:
|
||||
lyr = F_SilkS
|
||||
elif lyr is pcbnew.F_Cu:
|
||||
lyr is pcbnew.F_Mask
|
||||
elif lyr is pcbnew.B_Cu:
|
||||
lyr is pcbnew.B_Mask
|
||||
# if Nn is not None:
|
||||
# new_line.SetNet(Nn)
|
||||
# #new_line.SetNetname(Nn)
|
||||
new_line.SetLayer(lyr) #pcbnew.F_SilkS) #pcb.GetLayerID(mask_layer))
|
||||
if Ts is not None and hasattr(pcbnew,'TRACK'):
|
||||
tsc = 0
|
||||
Nname = new_line.GetNetname()
|
||||
for c in Nname:
|
||||
tsc = tsc + ord(c)
|
||||
if hasattr(new_line, 'SetTimeStamp'):
|
||||
new_line.SetTimeStamp(tsc) # adding a unique number (this netname) as timestamp to mark this segment as generated by this script on this netname
|
||||
pcb.Add(new_line)
|
||||
if pcbG is not None:
|
||||
pcbG.AddItem(new_line)
|
||||
|
||||
return new_line
|
||||
#
|
||||
def solderExpander(pcb,tracks,clearance):
|
||||
global discretize
|
||||
# wx.LogMessage(str(discretize) + ' 2')
|
||||
mask_width = clearance #FromMM(.5) # msk espansion value each side
|
||||
#mask_layer = pcbnew.F_Mask
|
||||
|
||||
# pcb = LoadBoard(in_filename)
|
||||
#pcb = pcbnew.GetBoard()
|
||||
|
||||
#ToUnits=pcbnew.ToMM #ToMils
|
||||
#FromUnits=pcbnew.FromMM #Mils
|
||||
|
||||
for item in tracks:
|
||||
start = item.GetStart()
|
||||
end = item.GetEnd()
|
||||
width = item.GetWidth()
|
||||
layerId = item.GetLayer()
|
||||
layer = item.GetLayerSet()
|
||||
layerN = item.GetLayerName()
|
||||
layer = pcb.GetLayerID(layerN)
|
||||
track_net_name = item.GetNetname()
|
||||
ts = 0
|
||||
for c in track_net_name:
|
||||
ts = ts + ord(c)
|
||||
#wx.LogMessage("LayerName"+str(layer))
|
||||
|
||||
if layerId == pcbnew.F_Cu:
|
||||
mask_layer = pcbnew.F_Mask
|
||||
elif layerId == pcbnew.B_Cu: #'B_Cu':
|
||||
mask_layer = pcbnew.B_Mask
|
||||
else: #we shouldn't arrive here
|
||||
mask_layer = pcbnew.F_Mask
|
||||
wxLogDebug(" * Track: %s to %s, width %f mask_width %f" % (ToUnits(start),ToUnits(end),ToUnits(width), ToUnits(mask_width)),debug)
|
||||
#print (" * Track: %s to %s, width %f mask_width %f" % (ToUnits(start),ToUnits(end),ToUnits(width), ToUnits(mask_width)))
|
||||
if hasattr(pcbnew,'DRAWSEGMENT'):
|
||||
new_soldermask_line = pcbnew.DRAWSEGMENT(pcb)
|
||||
new_soldermask_line.SetStart(start)
|
||||
new_soldermask_line.SetEnd(end)
|
||||
new_soldermask_line.SetWidth(width+2*mask_width) #FromUnits(int(mask_width)))
|
||||
new_soldermask_line.SetLayer(mask_layer) #pcbnew.F_Mask) #pcb.GetLayerID(mask_layer))
|
||||
# again possible to mark via as own since no timestamp_t binding kicad v5.1.4
|
||||
if hasattr(new_soldermask_line, 'SetTimeStamp'):
|
||||
new_soldermask_line.SetTimeStamp(ts) # adding a unique number (this netname) as timestamp to mark this via as generated by this script on this netname
|
||||
pcb.Add(new_soldermask_line)
|
||||
elif type(item) is pcbnew.PCB_TRACK: #kicad 5.99
|
||||
#new_soldermask_shape = PCB_SHAPE()
|
||||
#new_soldermask_line = pcbnew.Cast_to_PCB_SHAPE(new_soldermask_shape)
|
||||
new_soldermask_line = PCB_SHAPE()
|
||||
new_soldermask_line.SetStart(start)
|
||||
new_soldermask_line.SetEnd(end)
|
||||
new_soldermask_line.SetWidth(width+2*mask_width)
|
||||
new_soldermask_line.SetLayer(mask_layer) #pcbnew.F_Mask) #pcb.GetLayerID(mask_layer))
|
||||
# again possible to mark via as own since no timestamp_t binding kicad v5.1.4
|
||||
if hasattr(new_soldermask_line, 'SetTimeStamp'):
|
||||
new_soldermask_line.SetTimeStamp(ts) # adding a unique number (this netname) as timestamp to mark this via as generated by this script on this netname
|
||||
pcb.Add(new_soldermask_line)
|
||||
else: #PCB_ARC kicad 5.99
|
||||
#new_soldermask_line = PCB_ARC(PCB_SHAPE())
|
||||
#new_soldermask_line.SetMid(item.GetMid())
|
||||
#wxLogDebug(str(item.GetMid())+' mid',True)
|
||||
md = item.GetMid()
|
||||
#wxLogDebug(str(cnt)+' center, radius '+str(rad),True)
|
||||
netName = None
|
||||
width_new = width +2*mask_width
|
||||
cnt, rad = getCircleCenterRadius(start,end,md)
|
||||
if discretize:
|
||||
segNBR = 16
|
||||
groupName = uuid.uuid4() #randomword(5)
|
||||
pcb_group = pcbnew.PCB_GROUP(None)
|
||||
pcb_group.SetName(groupName)
|
||||
pcb.Add(pcb_group)
|
||||
create_round_segs(pcb,start,end,cnt,rad,mask_layer,width_new,netName,segNBR,pcb_group)
|
||||
else:
|
||||
createDwgArc(pcb,start,end,md,cnt,mask_layer,width_new,netName)
|
||||
#break;
|
||||
pcbnew.Refresh()
|
||||
#
|
||||
def createDwgArc(pcb,p1,p2,mp,cn,lyr=None,w=None,Nn=None,Ts=None):
|
||||
# new_arc = pcbnew.PCB_SHAPE()
|
||||
# new_arc = pcbnew.Cast_to_PCB_SHAPE(new_arc)
|
||||
# new_arc.SetShape(pcbnew.SHAPE_T_ARC)
|
||||
# new_arc.SetStart(p1)
|
||||
# new_arc.SetMid(md)
|
||||
# new_arc.SetEnd(p2)
|
||||
# new_arc.SetWidth(w) #250000)
|
||||
|
||||
new_arc=pcbnew.PCB_SHAPE()
|
||||
new_arc.SetShape(pcbnew.SHAPE_T_ARC)
|
||||
use_geo=True
|
||||
if use_geo:
|
||||
# new_arc.SetArcGeometry(aStart: 'wxPoint', aMid: 'wxPoint', aEnd: 'wxPoint')
|
||||
new_arc.SetArcGeometry(p1,mp,p2)
|
||||
else:
|
||||
new_arc.SetArcStart(p1)
|
||||
new_arc.SetArcEnd(p2)
|
||||
new_arc.SetCenter(cn)
|
||||
new_arc.SetWidth(w)
|
||||
if lyr is None:
|
||||
lyr = F_SilkS
|
||||
new_arc.SetLayer(lyr) #pcbnew.F_SilkS) #pcb.GetLayerID(mask_layer))
|
||||
pcb.Add(new_arc)
|
||||
return new_arc
|
||||
#
|
||||
def getAngleRadians(p1,p2):
|
||||
#return math.degrees(math.atan2((p1.y-p2.y),(p1.x-p2.x)))
|
||||
return (math.atan2((p1.y-p2.y),(p1.x-p2.x)))
|
||||
#
|
||||
|
||||
def rotatePoint(r,sa,da,c):
|
||||
# sa, da in radians
|
||||
x = c.x - math.cos(sa+da) * r
|
||||
y = c.y - math.sin(sa+da) * r
|
||||
return wxPoint(x,y)
|
||||
#
|
||||
def create_round_segs(pcb,sp,ep,cntr,rad,layer,width,Nn,N_SEGMENTS,pcbGroup=None):
|
||||
start_point = sp
|
||||
end_point = ep
|
||||
pos = sp
|
||||
next_pos = ep
|
||||
a1 = getAngleRadians(cntr,sp)
|
||||
a2 = getAngleRadians(cntr,ep)
|
||||
wxLogDebug('a1:'+str(math.degrees(a1))+' a2:'+str(math.degrees(a2))+' a2-a1:'+str(math.degrees(a2-a1)),debug)
|
||||
if (a2-a1) > 0 and abs(a2-a1) > math.radians(180):
|
||||
deltaA = -(math.radians(360)-(a2-a1))/N_SEGMENTS
|
||||
wxLogDebug('deltaA reviewed:'+str(math.degrees(deltaA)),debug)
|
||||
elif (a2-a1) < 0 and abs(a2-a1) > math.radians(180):
|
||||
deltaA = (math.radians(360)-abs(a2-a1))/N_SEGMENTS
|
||||
wxLogDebug('deltaA reviewed2:'+str(math.degrees(deltaA)),debug)
|
||||
else:
|
||||
deltaA = (a2-a1)/N_SEGMENTS
|
||||
delta=deltaA
|
||||
wxLogDebug('delta:'+str(math.degrees(deltaA))+' radius:'+str(ToMM(rad)),debug)
|
||||
points = []
|
||||
#import round_trk; import importlib; importlib.reload(round_trk)
|
||||
for ii in range (N_SEGMENTS+1): #+1):
|
||||
points.append(pos)
|
||||
#t = create_Track(pos,pos)
|
||||
prv_pos = pos
|
||||
#pos = pos + fraction_delta
|
||||
#posPolar = cmath.polar(pos)
|
||||
#(rad) * cmath.exp(math.radians(deltaA)*1j) #cmath.rect(r, phi) : Return the complex number x with polar coordinates r and phi.
|
||||
#pos = wxPoint(posPolar.real+sp.x,posPolar.imag+sp.y)
|
||||
pos = rotatePoint(rad,a1,delta,cntr)
|
||||
delta=delta+deltaA
|
||||
#wxLogDebug("pos:"+str(ToUnits(prv_pos.x))+":"+str(ToUnits(prv_pos.y))+";"+str(ToUnits(pos.x))+":"+str(ToUnits(pos.y)),debug)
|
||||
for i, p in enumerate(points):
|
||||
#if i < len (points)-1:
|
||||
if i < len (points)-2:
|
||||
t = create_Solder(pcb,p,points[i+1],layer,width,Nn,True,pcbGroup) #adding ts code to segments
|
||||
t = create_Solder(pcb,points[-2],ep,layer,width,Nn,True,pcbGroup) #avoiding rounding on last segment
|
||||
#
|
||||
def Delete_Segments(pcb):
|
||||
draws = []
|
||||
#print ("TRACKS WHICH MATCH CRITERIA:")
|
||||
for item in pcb.GetDrawings():
|
||||
#for item in pcb.GetTracks():
|
||||
if type(item) is DRAWSEGMENT and item.IsSelected(): #item.GetNetname() == net_name:
|
||||
draws.append(item)
|
||||
wxLogDebug(str(len(draws)),debug)
|
||||
|
||||
if len (draws) == 1:
|
||||
tsd = draws[0].GetTimeStamp()
|
||||
wxLogDebug(str(tsd),debug)
|
||||
if tsd != 0:
|
||||
target_draws = filter(lambda x: (x.GetTimeStamp() == tsd), pcb.GetDrawings())
|
||||
#wx.LogMessage(str(len(target_tracks)))
|
||||
target_draws_cp = list(target_draws)
|
||||
for i in range(l):
|
||||
pcb.RemoveNative(target_draws_cp[i])
|
||||
#for draw in target_draws:
|
||||
# #if via.GetTimeStamp() == 55:
|
||||
# pcb.RemoveNative(draw)
|
||||
#wx.LogMessage('removing via')
|
||||
#pcbnew.Refresh()
|
||||
wxLogDebug(u'\u2714 Mask Segments Deleted',True)
|
||||
else:
|
||||
wxLogDebug(u'\u2718 you must select only Mask segment\n generated by this tool',not debug)
|
||||
else:
|
||||
#msg = u'\n\u2714 Radius > 3 * (track width)'
|
||||
wxLogDebug(u'\u2718 you must select One Mask segment only',not debug)
|
||||
#
|
||||
#Solder_Expander().register()
|
||||
|
||||
Reference in New Issue
Block a user