Here’s a cleaner version of the code with better error checking:
import pcbnew
import wx
class ComplexPluginAction(pcbnew.ActionPlugin):
def defaults(self):
self.name = "Assigned Zone to Net"
self.category = "Assigned Zone to Net"
self.description = "Assigned the net of a selected pad to a filled zone"
#self.show_toolbar_button = False # Optional, defaults to False
#self.icon_file_name = os.path.join(os.path.dirname(__file__), 'simple_plugin.png') # Optional, defaults to ""
def Run(self):
board = pcbnew.GetBoard()
items = board.AllConnectedItems()
selection = []
pad = ""
zone = ""
for item in items:
if item.IsSelected():
selection.append(item)
selection_valid = False
if len(selection) == 2:
for item in selection:
if isinstance(item, pcbnew.PAD):
pad = item
if isinstance(item, pcbnew.ZONE):
zone = item
if pad != "" and zone != "":
selection_valid = True
if selection_valid:
# Assign net to zone
zone.SetNet(pad.GetNet())
# Re-fill all the zones
filler = pcbnew.ZONE_FILLER(board)
filler.Fill(board.Zones())
pcbnew.Refresh()
else:
dialog = wx.MessageDialog(None, "Invalid selection", "Error", wx.OK | wx.ICON_WARNING)
dialog.ShowModal()
dialog.Destroy()