In our previous post, we showed how to get all selected objects using the KiCAD python API using
pcbnew.GetCurrentSelection()
You can simply filter these entries to obtain just a list of selected zones using either a for loop with inline filtering:
for selected_object in pcbnew.GetCurrentSelection(): if type(selected_object).__name__ == 'ZONE': print(selected_object.GetReference())
or using a list comprehension:
selected_footprints: list[pcbnew.FOOTPRINT] = [ zone for zone in pcbnew.GetCurrentSelection() if type(zone).__name__ == 'ZONE' ]
Complete plugin example:
#!/usr/bin/env python import pcbnew import os class SimplePlugin(pcbnew.ActionPlugin): def defaults(self): self.name = "Plugin Name as shown in Pcbnew: Tools->External Plugins" self.category = "A descriptive category name" self.description = "A description of the plugin and what it does" 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.BOARD = pcbnew.GetBoard() footprints: list[pcbnew.FOOTPRINT] = board.GetFootprints() # TODO Do something useful with [board] for selected_object in pcbnew.GetCurrentSelection(): print(selected_object) SimplePlugin().register() # Instantiate and register to Pcbnew
Example output (excerpt):
D39 D32 D23 D37 D18 D34 D11 D15