Merge pull request #1 from mtiutiu/master

added delete vias option
This commit is contained in:
Jean-Samuel Reynaud
2017-06-13 09:23:37 +02:00
committed by GitHub
4 changed files with 236 additions and 33 deletions

View File

@ -83,6 +83,7 @@ class FillArea:
# ie: radius from the border of the via # ie: radius from the border of the via
self.SetClearanceMM(0.2) self.SetClearanceMM(0.2)
self.only_selected_area = False self.only_selected_area = False
self.delete_vias = False
if self.pcb is not None: if self.pcb is not None:
for lnet in ["GND", "/GND"]: for lnet in ["GND", "/GND"]:
if self.pcb.FindNet(lnet) is not None: if self.pcb.FindNet(lnet) is not None:
@ -136,6 +137,10 @@ class FillArea:
self.only_selected_area = True self.only_selected_area = True
return self return self
def DeleteVias(self):
self.delete_vias = True
return self
def SetClearanceMM(self, s): def SetClearanceMM(self, s):
self.clearance = float(FromMM(s)) self.clearance = float(FromMM(s))
return self return self
@ -196,10 +201,28 @@ class FillArea:
self.pcb.AddNative(m, ADD_APPEND) self.pcb.AddNative(m, ADD_APPEND)
m.SetFlag(IS_NEW) m.SetFlag(IS_NEW)
def RefillBoardAreas(self):
for i in range(self.pcb.GetAreaCount()):
area = self.pcb.GetArea(i)
area.ClearFilledPolysList()
area.UnFill()
if not area.GetIsKeepout():
area.BuildFilledSolidAreasPolygons(self.pcb)
def Run(self): def Run(self):
""" """
Launch the process Launch the process
""" """
if self.delete_vias:
for module in self.pcb.GetModules():
if self.debug:
print("* Deleting module: %s" % module.GetValue())
if module.GetValue() == "AUTO_VIA":
self.pcb.DeleteNative(module)
self.RefillBoardAreas()
return # no need to run the rest of logic
lboard = self.pcb.ComputeBoundingBox() lboard = self.pcb.ComputeBoundingBox()
rectangle = [] rectangle = []
origin = lboard.GetPosition() origin = lboard.GetPosition()
@ -273,7 +296,8 @@ class FillArea:
# Same job with all pads # Same job with all pads
for pad in self.pcb.GetPads(): for pad in self.pcb.GetPads():
local_offset = max(pad.GetClearance(),self.clearance) + self.size/2 local_offset = max(pad.GetClearance(),
self.clearance) + self.size / 2
max_size = max(pad.GetSize().x, pad.GetSize().y) max_size = max(pad.GetSize().x, pad.GetSize().y)
start_x = int(floor(((pad.GetPosition().x - (max_size / 2.0 + start_x = int(floor(((pad.GetPosition().x - (max_size / 2.0 +
local_offset)) - origin.x) / self.step)) local_offset)) - origin.x) / self.step))
@ -318,7 +342,8 @@ class FillArea:
opx = stop_x opx = stop_x
opy = stop_y opy = stop_y
clearance = max(track.GetClearance(),self.clearance) + self.size/2 + track.GetWidth()/2 clearance = max(track.GetClearance(), self.clearance) + \
self.size / 2 + track.GetWidth() / 2
start_x = int(floor(((start_x - clearance) - start_x = int(floor(((start_x - clearance) -
origin.x) / self.step)) origin.x) / self.step))
@ -374,17 +399,14 @@ class FillArea:
ran_x = 0 ran_x = 0
ran_y = 0 ran_y = 0
if self.random: if self.random:
ran_x = (random.random() * self.step / 2.0) - (self.step / 4.0) ran_x = (random.random() * self.step / 2.0) - \
ran_y = (random.random() * self.step / 2.0) - (self.step / 4.0) (self.step / 4.0)
ran_y = (random.random() * self.step / 2.0) - \
(self.step / 4.0)
self.AddModule(module, wxPoint(origin.x + (self.step * x) + ran_x, self.AddModule(module, wxPoint(origin.x + (self.step * x) + ran_x,
origin.y + (self.step * y) + ran_y), x, y) origin.y + (self.step * y) + ran_y), x, y)
for i in range(self.pcb.GetAreaCount()): self.RefillBoardAreas()
area = self.pcb.GetArea(i)
area.ClearFilledPolysList()
area.UnFill()
if not area.GetIsKeepout():
area.BuildFilledSolidAreasPolygons(self.pcb)
if self.filename: if self.filename:
self.pcb.Save(self.filename) self.pcb.Save(self.filename)

View File

@ -24,6 +24,7 @@ import FillAreaDialog
class FillAreaAction(pcbnew.ActionPlugin): class FillAreaAction(pcbnew.ActionPlugin):
def defaults(self): def defaults(self):
self.name = "Via stitching WX" self.name = "Via stitching WX"
self.category = "Undefined" self.category = "Undefined"
@ -52,6 +53,8 @@ class FillAreaAction(pcbnew.ActionPlugin):
fill.SetRandom() fill.SetRandom()
if a.m_only_selected.IsChecked(): if a.m_only_selected.IsChecked():
fill.OnlyOnSelectedArea() fill.OnlyOnSelectedArea()
if a.m_delete_vias.IsChecked():
fill.DeleteVias()
fill.Run() fill.Run()
except Exception: except Exception:
wx.MessageDialog(None, "Invalid parameter") wx.MessageDialog(None, "Invalid parameter")

View File

@ -17,7 +17,7 @@ import wx.xrc
class FillAreaDialog ( wx.Dialog ): class FillAreaDialog ( wx.Dialog ):
def __init__( self, parent ): def __init__( self, parent ):
wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Fill Area parameters", pos = wx.DefaultPosition, size = wx.Size( 369,356 ), style = wx.DEFAULT_DIALOG_STYLE ) wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = u"Fill Area parameters", pos = wx.DefaultPosition, size = wx.Size( 369,389 ), style = wx.DEFAULT_DIALOG_STYLE )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize ) self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
@ -83,6 +83,13 @@ class FillAreaDialog ( wx.Dialog ):
self.m_only_selected = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_only_selected = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer1.Add( self.m_only_selected, 0, wx.ALL, 5 ) fgSizer1.Add( self.m_only_selected, 0, wx.ALL, 5 )
self.m_staticText10 = wx.StaticText( self, wx.ID_ANY, u"Delete generated vias", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText10.Wrap( -1 )
fgSizer1.Add( self.m_staticText10, 0, wx.ALL, 5 )
self.m_delete_vias = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer1.Add( self.m_delete_vias, 0, wx.ALL, 5 )
self.m_staticText71 = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticText71 = wx.StaticText( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText71.Wrap( -1 ) self.m_staticText71.Wrap( -1 )
fgSizer1.Add( self.m_staticText71, 0, wx.ALL, 5 ) fgSizer1.Add( self.m_staticText71, 0, wx.ALL, 5 )

View File

@ -44,7 +44,7 @@
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">FillAreaDialog</property> <property name="name">FillAreaDialog</property>
<property name="pos"></property> <property name="pos"></property>
<property name="size">369,356</property> <property name="size">369,389</property>
<property name="style">wxDEFAULT_DIALOG_STYLE</property> <property name="style">wxDEFAULT_DIALOG_STYLE</property>
<property name="subclass"></property> <property name="subclass"></property>
<property name="title">Fill Area parameters</property> <property name="title">Fill Area parameters</property>
@ -1483,6 +1483,177 @@
<event name="OnUpdateUI"></event> <event name="OnUpdateUI"></event>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</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">Delete generated vias</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_staticText10</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>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</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"></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_delete_vias</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">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnChar"></event>
<event name="OnCheckBox"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL</property> <property name="flag">wxALL</property>