Merge pull request #2 from jsreynaud/master

Sync Forked repo
This commit is contained in:
Charles Grassin
2023-02-22 10:38:06 +01:00
committed by GitHub
4 changed files with 146 additions and 5 deletions

View File

@ -64,6 +64,7 @@ FillArea.FillArea().SetDebug().SetNetname("GND").SetStepMM(1.27).SetSizeMM(0.6).
# with # with
# SetDebug: Activate debug mode (print evolution of the board in ascii art) # SetDebug: Activate debug mode (print evolution of the board in ascii art)
# SetViaThroughAreas: Ignores areas on other layers
# SetNetname: Change the netname to consider for the filling # SetNetname: Change the netname to consider for the filling
# (default is /GND or fallback to GND) # (default is /GND or fallback to GND)
# SetStepMM: Change step between Via (in mm) # SetStepMM: Change step between Via (in mm)
@ -130,6 +131,7 @@ class FillArea:
self.SetClearanceMM(0.2) self.SetClearanceMM(0.2)
self.only_selected_area = False self.only_selected_area = False
self.delete_vias = False self.delete_vias = False
self.via_through_areas = 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:
@ -162,6 +164,10 @@ class FillArea:
self.random = r self.random = r
return self return self
def SetViaThroughAreas(self, r):
self.via_through_areas = r
return self
def SetType(self, type): def SetType(self, type):
self.fill_type = type self.fill_type = type
return self return self
@ -308,11 +314,11 @@ STEP = '-'
if is_rule_exclude_via_area and (hit_test_area or hit_test_edge or hit_test_zone): if is_rule_exclude_via_area and (hit_test_area or hit_test_edge or hit_test_zone):
return self.REASON_KEEPOUT # Collides with keepout/rules return self.REASON_KEEPOUT # Collides with keepout/rules
elif (hit_test_area or hit_test_edge) and not is_rules_area: elif (not self.via_through_areas) and (hit_test_area or hit_test_edge) and not is_rules_area:
# Collides with another signal (e.g. on another layer) but not a rule zone # Collides with another signal (e.g. on another layer) but not a rule zone
return self.REASON_OTHER_SIGNAL return self.REASON_OTHER_SIGNAL
elif hit_test_zone and not is_rules_area: elif (not self.via_through_areas) and hit_test_zone and not is_rules_area:
# Check if the zone is higher priority than other zones of the target net in the same point # Check if the zone is higher priority than other zones of the target net in the same point
# target_areas_on_same_layer = filter(lambda x: ((x.GetPriority() > area_priority) and (x.GetLayer() == area_layer) and (x.GetNetname().upper() == self.netname)), all_areas) # target_areas_on_same_layer = filter(lambda x: ((x.GetPriority() > area_priority) and (x.GetLayer() == area_layer) and (x.GetNetname().upper() == self.netname)), all_areas)
target_areas_on_same_layer = filter(lambda x: ((x.GetPriority() > area_priority) and ( target_areas_on_same_layer = filter(lambda x: ((x.GetPriority() > area_priority) and (
@ -764,8 +770,9 @@ STEP = '-'
ran_y = 0 ran_y = 0
if self.random: if self.random:
ran_x = (random.random() * l_clearance / 2.0) - (l_clearance / 4.0) max_offset = max(self.step - (self.clearance + self.size), 0) / 2.0
ran_y = (random.random() * l_clearance / 2.0) - (l_clearance / 4.0) ran_x = (random.random() * max_offset) - (max_offset / 2.0)
ran_y = (random.random() * max_offset) - (max_offset / 2.0)
self.AddVia(wxPoint(via.PosX + ran_x, via.PosY + ran_y), via.X, via.Y) self.AddVia(wxPoint(via.PosX + ran_x, via.PosY + ran_y), via.X, via.Y)
via_placed += 1 via_placed += 1

View File

@ -81,6 +81,7 @@ class FillAreaAction(pcbnew.ActionPlugin):
if a.m_Debug.IsChecked(): if a.m_Debug.IsChecked():
fill.SetDebug() fill.SetDebug()
fill.SetRandom(a.m_Random.IsChecked()) fill.SetRandom(a.m_Random.IsChecked())
fill.SetViaThroughAreas(a.m_viaThroughAreas.IsChecked())
fill.SetType(a.m_cbFillType.GetStringSelection()) fill.SetType(a.m_cbFillType.GetStringSelection())
if a.m_only_selected.IsChecked(): if a.m_only_selected.IsChecked():
fill.OnlyOnSelectedArea() fill.OnlyOnSelectedArea()

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
########################################################################### ###########################################################################
## Python code generated with wxFormBuilder (version 3.10.1) ## Python code generated with wxFormBuilder (version 3.10.1-0-g8feb16b)
## http://www.wxformbuilder.org/ ## http://www.wxformbuilder.org/
## ##
## PLEASE DO *NOT* EDIT THIS FILE! ## PLEASE DO *NOT* EDIT THIS FILE!
@ -102,6 +102,14 @@ 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_staticText71 = wx.StaticText( self, wx.ID_ANY, u"Ignore areas on other layers", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText71.Wrap( -1 )
fgSizer1.Add( self.m_staticText71, 0, wx.ALL, 5 )
self.m_viaThroughAreas = wx.CheckBox( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer1.Add( self.m_viaThroughAreas, 0, wx.ALL, 5 )
self.m_staticText7 = wx.StaticText( self, wx.ID_ANY, u"Debug mode", wx.DefaultPosition, wx.DefaultSize, 0 ) self.m_staticText7 = wx.StaticText( self, wx.ID_ANY, u"Debug mode", wx.DefaultPosition, wx.DefaultSize, 0 )
self.m_staticText7.Wrap( -1 ) self.m_staticText7.Wrap( -1 )

View File

@ -1147,6 +1147,131 @@
<property name="window_style"></property> <property name="window_style"></property>
</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">Ignore areas on other layers</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_staticText71</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"></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_viaThroughAreas</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>
</object>
</object>
<object class="sizeritem" expanded="0"> <object class="sizeritem" expanded="0">
<property name="border">5</property> <property name="border">5</property>
<property name="flag">wxALL|wxEXPAND</property> <property name="flag">wxALL|wxEXPAND</property>