improved Gui

Annular, Positions, Snap
This commit is contained in:
easyw
2020-02-25 16:18:48 +01:00
parent b82024e23d
commit f268b8dfe6
17 changed files with 1052 additions and 404 deletions

View File

@ -45,7 +45,7 @@
<property name="minimum_size"></property>
<property name="name">Snap2GridDlg</property>
<property name="pos"></property>
<property name="size">499,491</property>
<property name="size">499,584</property>
<property name="style">wxCAPTION|wxCLOSE_BOX|wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass"></property>
<property name="title">Snap to Grid</property>
@ -119,6 +119,64 @@
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</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_bitmapS2G</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">100,100</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"></property>
@ -254,64 +312,6 @@
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</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_bitmapS2G</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="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>
</object>
<object class="sizeritem" expanded="0">

View File

@ -17,7 +17,7 @@ import wx.xrc
class Snap2GridDlg ( wx.Dialog ):
def __init__( self, parent ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Snap to Grid", pos = wx.DefaultPosition, size = wx.Size( 499,491 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER )
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Snap to Grid", pos = wx.DefaultPosition, size = wx.Size( 499,584 ), style = wx.CAPTION|wx.CLOSE_BOX|wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER )
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
@ -28,6 +28,9 @@ class Snap2GridDlg ( wx.Dialog ):
bSizer3.Add( self.m_comment, 0, wx.ALL|wx.EXPAND, 5 )
self.m_bitmapS2G = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size( 100,100 ), 0 )
bSizer3.Add( self.m_bitmapS2G, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
bSizer31 = wx.BoxSizer( wx.HORIZONTAL )
self.m_staticTextGrid = wx.StaticText( self, wx.ID_ANY, u"Grid", wx.DefaultPosition, wx.DefaultSize, 0 )
@ -40,9 +43,6 @@ class Snap2GridDlg ( wx.Dialog ):
self.m_comboBoxGrid.SetSelection( 0 )
bSizer31.Add( self.m_comboBoxGrid, 0, wx.ALL|wx.EXPAND, 5 )
self.m_bitmapS2G = wx.StaticBitmap( self, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer31.Add( self.m_bitmapS2G, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )
bSizer3.Add( bSizer31, 0, 0, 5 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,243 @@
<?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="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="1.0beta2 (c8d5c0e, 2020-01-08)"
sodipodi:docname="snap2grid-help.svg"
inkscape:export-filename="C:\Users\userC\AppData\Roaming\kicad\scripting\plugins\kicad-action-tools\Snap2Grid\snap2grid-help.png"
inkscape:export-xdpi="369.23001"
inkscape:export-ydpi="369.23001">
<metadata
id="metadata72">
<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>
<defs
id="defs70" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1010"
id="namedview68"
showgrid="true"
inkscape:snap-grids="true"
inkscape:snap-to-guides="true"
inkscape:zoom="11.480769"
inkscape:cx="12.998223"
inkscape:cy="20.096351"
inkscape:window-x="-7"
inkscape:window-y="-7"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
inkscape:document-rotation="0">
<inkscape:grid
type="xygrid"
id="grid3049"
empspacing="1"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
</sodipodi:namedview>
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10"
d="m 5.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9"
d="m 11.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4"
d="m 17.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7"
d="m 23.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-8"
d="m 5.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9-3"
d="m 11.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4-8"
d="m 17.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7-5"
d="m 23.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-71"
d="m 5.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-4-3"
d="m 17.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-7-8"
d="m 23.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-3"
d="m 5.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9-5"
d="m 11.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4-6"
d="m 17.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7-59"
d="m 23.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
d="M 11,7 A 1,1.0015023 0 0 1 9,7 1,1.0015023 0 1 1 11,7 z"
id="path3811"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3821"
d="m 20,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
<g
transform="matrix(0.67334578,0,0,0.67334578,6.072015,-0.80029514)"
id="g4164">
<path
inkscape:connector-curvature="0"
id="rect51"
d="m 1.5380859,6.5039062 v 4.6249998 a 2.2240581,1.9589449 0 0 1 0,3.822266 V 20.59375 H 24.461914 V 6.5039062 Z"
style="fill:#e6e6e6;stroke:#545454;stroke-width:0.97711289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
transform="translate(-0.53360319)"
id="g3983">
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="4.5123401"
x="-8.5317764"
id="rect73" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="11.451617"
x="-8.5076618"
id="rect73-5" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="18.488895"
x="-8.5498009"
id="rect73-56" />
</g>
<g
id="g3983-1"
transform="translate(-0.53360319,16.090848)">
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="4.5123401"
x="-8.5317764"
id="rect73-0" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="11.451617"
x="-8.5076618"
id="rect73-5-4" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="18.488895"
x="-8.5498009"
id="rect73-56-9" />
</g>
</g>
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9-33"
d="m 12,16 a 2,2.0030045 0 0 1 -4,0 2,2.0030045 0 1 1 4,0 z" />
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3813"
d="m 11,13 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
<path
d="m 11,19 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3815"
inkscape:connector-curvature="0"
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1" />
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3817"
d="m 8,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
<path
d="m 14,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3819"
inkscape:connector-curvature="0"
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@ -56,7 +56,7 @@ class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg):
Snap2GridDlg.Snap2GridDlg.__init__(self, parent)
#self.GetSizer().Fit(self)
self.SetMinSize(self.GetSize())
self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png")))
self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid-help.png")))
#self.SetIcon(wx.IconFromBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png"))))
#self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick)
#self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick)

View File

@ -8,11 +8,7 @@
#import snaptogrid; import importlib; importlib.reload(snaptogrid)
### plugins errors
#import pcbnew
#pcbnew.GetWizardsBackTrace()
__version__ = '1.0.2'
__version__ = '1.0.1'
import sys, os
import pcbnew
import datetime
@ -21,11 +17,11 @@ from pcbnew import *
use_grid_origin = True
gridReference = 0.1 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm
gridReference = 2.54 #1.27 #mm pcbnew.FromMM(1.0) #0.1mm
gridSizeMM = gridReference
from . import Snap2GridDlg
#from . import Send2GridDlg
sys.path.append(os.path.dirname(__file__))
@ -36,38 +32,36 @@ def wxLogDebug(msg,dbg):
wx.LogMessage(msg)
#
class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg):
# 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 wx.__version__ < '4.0':
self.SetSizeHintsSz(sz1, sz2)
else:
super(Snap2Grid_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
Snap2GridDlg.Snap2GridDlg.__init__(self, parent)
#self.GetSizer().Fit(self)
self.SetMinSize(self.GetSize())
self.m_bitmapS2G.SetBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png")))
#self.SetIcon(wx.IconFromBitmap(wx.Bitmap(os.path.join(os.path.dirname(__file__), "./snap2grid.png"))))
#self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick)
#self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick)
#if wx.__version__ < '4.0':
# self.m_buttonReconnect.SetToolTipString( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" )
# self.m_buttonRound.SetToolTipString( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" )
#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" )
#class Snap2Grid_Dlg(Snap2GridDlg.Snap2GridDlg):
# # 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 wx.__version__ < '4.0':
# self.SetSizeHintsSz(sz1, sz2)
# else:
# super(RoundTrack_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
# Send2GridDlg.Send2GridDlg.__init__(self, parent)
# #self.GetSizer().Fit(self)
# self.SetMinSize(self.GetSize())
# #self.m_buttonDelete.Bind(wx.EVT_BUTTON, self.onDeleteClick)
# #self.m_buttonReconnect.Bind(wx.EVT_BUTTON, self.onConnectClick)
# #if wx.__version__ < '4.0':
# # self.m_buttonReconnect.SetToolTipString( u"Select two converging Tracks to re-connect them\nor Select tracks including one round corner to be straighten" )
# # self.m_buttonRound.SetToolTipString( u"Select two connected Tracks to round the corner\nThen choose distance from intersection and the number of segments" )
# #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" )
#
# Python plugin stuff
class snap_to_grid( pcbnew.ActionPlugin ):
"""
@ -83,9 +77,9 @@ class snap_to_grid( pcbnew.ActionPlugin ):
self.description should be a comprehensive description
of the plugin
"""
self.name = "Snap Selected Footprint(s) to Grid \nversion "+__version__
self.name = "Snap Selected Module(s) to Grid\nversion "+__version__
self.category = "Modify PCB"
self.description = "Automaticaly Snap Selected Footprint Module(s) to Grid on an existing PCB"
self.description = "Automaticaly Snap Selected Module(s) to Grid on an existing PCB"
#self.pcbnew_icon_support = hasattr(self, "show_toolbar_button")
self.show_toolbar_button = True
self.icon_file_name = os.path.join(os.path.dirname(__file__), './snap2grid.png')
@ -95,131 +89,111 @@ class snap_to_grid( pcbnew.ActionPlugin ):
#self.pcb = GetBoard()
import sys,os
#mm_ius = 1000000.0
_pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0]
#aParameters = RoundTrackDlg(None)
aParameters = Snap2Grid_Dlg(_pcbnew_frame)
gridIndex = aParameters.m_comboBoxGrid.FindString('0.1mm (3.94mils)')
aParameters.m_comboBoxGrid.SetSelection(gridIndex)
#aParameters.m_comboBoxGrid.Append('0.1mm (3.94mils)')
aParameters.m_radioBtnGO.SetValue(True)
aParameters.Show()
modal_result = aParameters.ShowModal()
if modal_result == wx.ID_OK:
grid = aParameters.m_comboBoxGrid.GetStringSelection()
gridSizeMM = float(grid.split('mm')[0])
if aParameters.m_radioBtnGO.GetValue():
use_grid_origin = True
else:
use_grid_origin = False
snap2grid(gridSizeMM,use_grid_origin)
else:
None # Cancel
##
def snap2grid(gridSizeMM,use_grid_origin):
pcb = pcbnew.GetBoard()
gridOrigin = pcb.GetGridOrigin()
auxOrigin = pcb.GetAuxOrigin()
content=''
locked_fp=''
#wxPoint(77470000, 135890000)
for module in pcb.GetModules():
if module.IsSelected():
if use_grid_origin:
mpx = module.GetPosition().x - gridOrigin.x
mpy = module.GetPosition().y - gridOrigin.y
#print(mpx,mpy)
mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.x
mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.y
#print(mpxOnG,mpyOnG)
locked=''
if not module.IsLocked():
module.SetPosition(wxPoint(mpxOnG,mpyOnG))
pcb = pcbnew.GetBoard()
gridOrigin = pcb.GetGridOrigin()
auxOrigin = pcb.GetAuxOrigin()
content=''
locked_fp=''
#wxPoint(77470000, 135890000)
for module in pcb.GetModules():
if module.IsSelected():
if use_grid_origin:
mpx = module.GetPosition().x - gridOrigin.x
mpy = module.GetPosition().y - gridOrigin.y
print(mpx,mpy)
mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.x
mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ gridOrigin.y
print(mpxOnG,mpyOnG)
locked=''
if not module.IsLocked():
module.SetPosition(wxPoint(mpxOnG,mpyOnG))
else:
locked='LOCKED'
X_POS=str(module.GetPosition().x) # - gridOrigin.x)
#X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x ))
X_POS="{0:<11}".format(X_POS)
Y_POS=str(module.GetPosition().y) # - gridOrigin.y)
Y_POS="{0:<11}".format(Y_POS)
## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM)
## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM)
## module.SetPosition(wxPoint(mpOnGx,mpOnGy))
#module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0)))
#module.SetOrientation(10)
#Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y))
# else:
# mpx = module.GetPosition().x - auxOrigin().x
# mpy = module.GetPosition().y - auxOrigin().y
# X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - auxOrigin().x ))
# X_POS="{0:<11}".format(X_POS)
# Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - auxOrigin().y))
# Y_POS="{0:<11}".format(Y_POS)
Reference="{0:<10}".format(str(module.GetReference()))
Value = str(module.GetValue())
Value=(Value[:17] + '..') if len(Value) > 19 else Value
Value="{0:<20}".format(Value)
Rotation='{0:.1f}'.format((module.GetOrientation()/10))
Rotation="{0:>6}".format(Rotation)+' '
if module.GetLayer() == 0:
Layer=" top"
else:
locked='LOCKED'
X_POS=str(module.GetPosition().x) # - gridOrigin.x)
#X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x ))
X_POS="{0:<11}".format(X_POS)
Y_POS=str(module.GetPosition().y) # - gridOrigin.y)
Y_POS="{0:<11}".format(Y_POS)
## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM)
## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM)
## module.SetPosition(wxPoint(mpOnGx,mpOnGy))
#module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0)))
#module.SetOrientation(10)
#Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y))
else: # AuxOrigin
mpx = module.GetPosition().x - auxOrigin.x
mpy = module.GetPosition().y - auxOrigin.y
#print(mpx,mpy)
mpxOnG = int(mpx/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ auxOrigin.x
mpyOnG = int(mpy/FromMM(gridSizeMM))*FromMM(gridSizeMM)+ auxOrigin.y
#print(mpxOnG,mpyOnG)
locked=''
if not module.IsLocked():
module.SetPosition(wxPoint(mpxOnG,mpyOnG))
else:
locked='LOCKED'
X_POS=str(module.GetPosition().x) # - gridOrigin.x)
#X_POS='{0:.4f}'.format(pcbnew.ToMM(module.GetPosition().x - gridOrigin.x ))
X_POS="{0:<11}".format(X_POS)
Y_POS=str(module.GetPosition().y) # - gridOrigin.y)
Y_POS="{0:<11}".format(Y_POS)
## mpOnGx = PutOnGridMM(module.GetPosition().x, gridSizeMM)
## mpOnGy = PutOnGridMM(module.GetPosition().y, gridSizeMM)
## module.SetPosition(wxPoint(mpOnGx,mpOnGy))
#module.SetPosition(wxPoint(mpOnGx+FromMM(100.0),mpOnGy+FromMM(2.0)))
#module.SetOrientation(10)
#Y_POS='{0:.4f}'.format(-1*pcbnew.ToMM(module.GetPosition().y - gridOrigin.y))
Reference="{0:<10}".format(str(module.GetReference()))
Value = str(module.GetValue())
Value=(Value[:17] + '..') if len(Value) > 19 else Value
Value="{0:<20}".format(Value)
Rotation='{0:.1f}'.format((module.GetOrientation()/10))
Rotation="{0:>6}".format(Rotation)+' '
if module.GetLayer() == 0:
Layer=" top"
else:
Layer=" bottom"
#Side="## Side :"+Layer+lsep
Layer="{0:<10}".format(Layer)
content+=Reference
if 'LOCKED' in locked:
locked_fp+=Reference + ' LOCKED'+'\n' #os.linesep
#content+=Value
content+=X_POS
content+=Y_POS
#content+=str(mpOnGx)
#content+=str(mpOnGy)
content+=str(mpxOnG)
content+=str(mpyOnG)
content+=Layer+'\n' #os.linesep
if len(content)>0:
content+=str(pcbnew.FromMM(gridSizeMM))+'\n'
info='Snapped to grid: '+str(gridSizeMM)+'mm\n'
if use_grid_origin:
content+="Using GridOrigin as Ref"+'\n'
info+="Using GridOrigin as Ref"+'\n'
else:
content+="Using AuxOrigin as Ref"+'\n'
info+="Using AuxOrigin as Ref"+'\n'
if debug:
Layer=" bottom"
#Side="## Side :"+Layer+lsep
Layer="{0:<10}".format(Layer)
content+=Reference
if 'LOCKED' in locked:
locked_fp+=Reference + ' LOCKED'+'\n' #os.linesep
#content+=Value
content+=X_POS
content+=Y_POS
#content+=str(mpOnGx)
#content+=str(mpOnGy)
content+=str(mpxOnG)
content+=str(mpyOnG)
content+=Layer+'\n' #os.linesep
if len(content)>0:
content+=str(pcbnew.FromMM(gridReference))
wxLogDebug(content,debug)
#else:
wxLogDebug(info,True)
if len (locked_fp)>0:
locked_fp+='\n'+'NOT Moved (Locked fp)'
locked_fp+='\n'+info
wxLogDebug(locked_fp,True)
if len (locked_fp)>0:
locked_fp+='\n'+'NOT Moved'
wxLogDebug(locked_fp,True)
else:
wxLogDebug(info,True)
else:
wxLogDebug('No Modules Selected',True)
Refresh()
#return content
wxLogDebug('No Modules Selected',True)
Refresh()
#return content
#if 0:
# #from https://github.com/MitjaNemec/Kicad_action_plugins
# #hack wxFormBuilder py2/py3
# _pcbnew_frame = [x for x in wx.GetTopLevelWindows() if x.GetTitle().lower().startswith('pcbnew')][0]
# #aParameters = RoundTrackDlg(None)
# aParameters = RoundTrack_Dlg(_pcbnew_frame)
# #aParameters = RoundTrack_DlgEx(_pcbnew_frame)
# aParameters.Show()
# #end hack
# aParameters.m_distanceMM.SetValue("5")
# aParameters.m_segments.SetValue("16")
# aParameters.m_bitmap1.SetBitmap(wx.Bitmap( os.path.join(os.path.dirname(os.path.realpath(__file__)), "round_track_help.png") ) )
# modal_result = aParameters.ShowModal()
# segments = self.CheckSegmentsInput(
# aParameters.m_segments.GetValue(), "number of segments")
# distI = FromMM(self.CheckDistanceInput(aParameters.m_distanceMM.GetValue(), "distance from intersection"))
# if segments is not None and distI is not None:
# if modal_result == wx.ID_OK:
# Round_Selection(pcb, distI, segments)
# elif modal_result == wx.ID_DELETE:
# Delete_Segments(pcb)
# #wx.LogMessage('Round Segments on Track Net Deleted')
# elif modal_result == wx.ID_REVERT:
# wxLogDebug('Connecting Tracks',debug)
# Connect_Segments(pcb)
# else:
# None # Cancel
# else:
# None # Invalid input
# aParameters.Destroy()
# wxLogDebug('showing Selected Tracks',debug)
# wx.LogMessage('Select Tracks to calculate the Length\nor One Pad to select connected Tracks')
#

View File

@ -7,15 +7,15 @@
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="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
inkscape:export-ydpi="553.84998"
inkscape:export-xdpi="553.84998"
inkscape:export-filename="C:\Users\userC\AppData\Roaming\kicad\scripting\plugins\kicad-action-tools\Snap2Grid\snap2grid.png"
sodipodi:docname="snap2grid.svg"
inkscape:export-filename="/home/mau/.kicad_plugins/kicad-action-tools/Snap2Grid/snap2grid.png"
inkscape:export-xdpi="118.15385"
inkscape:export-ydpi="118.15385">
inkscape:version="1.0beta2 (c8d5c0e, 2020-01-08)"
id="svg2"
version="1.1"
width="26"
height="26">
<metadata
id="metadata72">
<rdf:RDF>
@ -31,212 +31,213 @@
<defs
id="defs70" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1009"
id="namedview68"
showgrid="true"
inkscape:snap-grids="true"
inkscape:snap-to-guides="true"
inkscape:zoom="8.1181296"
inkscape:cx="-43.153083"
inkscape:cy="14.972949"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:document-rotation="0"
inkscape:current-layer="svg2"
inkscape:window-maximized="1"
inkscape:current-layer="svg2">
inkscape:window-y="-7"
inkscape:window-x="-7"
inkscape:cy="20.096351"
inkscape:cx="12.998223"
inkscape:zoom="11.480769"
inkscape:snap-to-guides="true"
inkscape:snap-grids="true"
showgrid="true"
id="namedview68"
inkscape:window-height="1010"
inkscape:window-width="1920"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
guidetolerance="10"
gridtolerance="10"
objecttolerance="10"
borderopacity="1"
bordercolor="#666666"
pagecolor="#ffffff">
<inkscape:grid
type="xygrid"
id="grid3049"
empspacing="1"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originy="0"
originx="0"
originy="0" />
spacingy="0.5"
spacingx="0.5"
snapvisiblegridlinesonly="true"
enabled="true"
visible="true"
empspacing="1"
id="grid3049"
type="xygrid" />
</sodipodi:namedview>
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
d="m 5.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10"
d="m 5.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 11.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-9"
d="m 11.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4"
d="m 17.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7"
d="m 23.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-8"
d="m 5.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9-3"
d="m 11.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4-8"
d="m 17.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7-5"
d="m 23.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-71"
d="m 5.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-4-3"
d="m 17.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-7-8"
d="m 23.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-3"
d="m 5.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path10-9-5"
d="m 11.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-4-6"
d="m 17.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
style="fill:#333333;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path10-7-59"
d="m 23.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z" />
<path
d="M 11,7 A 1,1.0015023 0 0 1 9,7 1,1.0015023 0 1 1 11,7 z"
id="path3811"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 17.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-4"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 23.5,4 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-7"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 5.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-8"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 11.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-9-3"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 17.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-4-8"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 23.5,10 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-7-5"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 5.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-71"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 17.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-4-3"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 23.5,16 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-7-8"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 5.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-3"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 11.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-9-5"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 17.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-4-6"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
d="m 23.5,22 a 1.5,1.5022534 0 0 1 -3,0 1.5,1.5022534 0 1 1 3,0 z"
id="path10-7-59"
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd" />
<path
style="fill:#333333;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3811"
d="M 11,7 A 1,1.0015023 0 0 1 9,7 1,1.0015023 0 1 1 11,7 z" />
<path
d="m 20,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3821"
d="m 20,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
inkscape:connector-curvature="0"
style="fill:#333333;fill-rule:evenodd;fill-opacity:1" />
<g
transform="matrix(0.67334578,0,0,0.67334578,6.072015,-0.80029514)"
id="g4164">
id="g4164"
transform="matrix(0.67334578,0,0,0.67334578,6.072015,-0.80029514)">
<path
inkscape:connector-curvature="0"
id="rect51"
style="fill:#e6e6e6;stroke:#545454;stroke-width:0.97711289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 1.5380859,6.5039062 v 4.6249998 a 2.2240581,1.9589449 0 0 1 0,3.822266 V 20.59375 H 24.461914 V 6.5039062 Z"
style="fill:#e6e6e6;stroke:#545454;stroke-width:0.97711289;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
id="rect51"
inkscape:connector-curvature="0" />
<g
transform="translate(-0.53360319)"
id="g3983">
id="g3983"
transform="translate(-0.53360319)">
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="4.5123401"
id="rect73"
x="-8.5317764"
id="rect73" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
y="4.5123401"
width="6.0590835"
y="11.451617"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
id="rect73-5"
x="-8.5076618"
id="rect73-5" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
y="11.451617"
width="6.0590835"
y="18.488895"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
id="rect73-56"
x="-8.5498009"
id="rect73-56" />
y="18.488895"
width="6.0590835"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<g
id="g3983-1"
transform="translate(-0.53360319,16.090848)">
transform="translate(-0.53360319,16.090848)"
id="g3983-1">
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
width="6.0590835"
y="4.5123401"
id="rect73-0"
x="-8.5317764"
id="rect73-0" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
y="4.5123401"
width="6.0590835"
y="11.451617"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
id="rect73-5-4"
x="-8.5076618"
id="rect73-5-4" />
<rect
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="rotate(-90)"
height="4.0659709"
y="11.451617"
width="6.0590835"
y="18.488895"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
id="rect73-56-9"
x="-8.5498009"
id="rect73-56-9" />
y="18.488895"
width="6.0590835"
height="4.0659709"
transform="rotate(-90)"
style="fill:#00c921;fill-opacity:1;stroke:#545454;stroke-width:0.93241322;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</g>
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
d="m 12,16 a 2,2.0030045 0 0 1 -4,0 2,2.0030045 0 1 1 4,0 z"
id="path10-9-33"
d="m 12,16 a 2,2.0030045 0 0 1 -4,0 2,2.0030045 0 1 1 4,0 z" />
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1" />
<path
d="m 11,13 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3813"
d="m 11,13 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
<path
d="m 11,19 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3815"
inkscape:connector-curvature="0"
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1" />
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3817"
d="m 8,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
id="path3815"
d="m 11,19 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
<path
d="m 14,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3819"
d="m 8,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z"
id="path3817"
inkscape:connector-curvature="0"
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1" />
<path
style="fill:#c80000;fill-rule:evenodd;fill-opacity:1"
inkscape:connector-curvature="0"
id="path3819"
d="m 14,16 a 1,1.0015023 0 0 1 -2,0 1,1.0015023 0 1 1 2,0 z" />
</svg>

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.7 KiB