Wie man alle ausgewählten Zonen mit der KiCAD-pcbnew-Plugin-Python-API erhält

In unserem vorherigen Post haben wir gezeigt, wie man alle ausgewählten Objekte mit der KiCAD-Python-API erhält mit

get_current_selection.py
pcbnew.GetCurrentSelection()

Sie können diese Einträge einfach filtern, um nur eine Liste ausgewählter Zonen zu erhalten, entweder mit einer for-Schleife mit Inline-Filterung:

filter_selected_zones.py
for selected_object in pcbnew.GetCurrentSelection():
    if type(selected_object).__name__ == 'ZONE':
        print(selected_object.GetReference())

oder mit einer List-Comprehension:

selected_zones_listcomp.py
selected_footprints: list[pcbnew.FOOTPRINT] = [
    zone for zone in pcbnew.GetCurrentSelection() if type(zone).__name__ == 'ZONE'
]

Vollständiges Plugin-Beispiel:

simple_kicad_plugin.py
#!/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

Beispielausgabe (Auszug):

selected_zones_example_output.txt
D39
D32
D23
D37
D18
D34
D11
D15

Check out similar posts by category: KiCad, Python