`@tool()`-Dekorator
Registriert eine Klasse als LinkCAD-Tool, das im Anwendungsmenü mit einem automatisch erzeugten Optionsdialog erscheint.
Signatur
@tool( name: str, menu: str = "Tools/Python", tooltip: str = "", shortcut: str = "", icon: str = "", requires_drawing: bool = True,)class MyTool(Tool): ...Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
name | str | erforderlich | Anzeigename im Menü |
menu | str | "Tools/Python" | Menüpfad (/ für Untermenüs verwenden) |
tooltip | str | "" | Tooltip, der beim Hover angezeigt wird |
shortcut | str | "" | Tastenkürzel (z. B. "Ctrl+Shift+M") |
icon | str | "" | Pfad zur Symboldatei (PNG, 24×24) |
requires_drawing | bool | True | Gibt an, ob das Tool eine geöffnete Zeichnung benötigt |
Tool-Basisklasse
Alle Tool-Plugins müssen Tool erweitern und run() implementieren:
class Tool: def run(self, drawing) -> None: """Override to implement the tool logic.""" ...Das Argument drawing stellt Zugriff auf die aktuelle Zeichnung bereit. Wenn requires_drawing=False ist, kann es None sein.
ToolInfo
Der Dekorator erstellt ein benanntes Tupel ToolInfo, das an die Klasse angehängt wird:
| Feld | Beschreibung |
|---|---|
name | Tool-Anzeigename |
menu | Menüpfad |
tooltip | Tooltip-Text |
shortcut | Tastenkürzel |
icon | Symbolpfad |
requires_drawing | Gibt an, ob eine Zeichnung erforderlich ist |
Menüpfad
Der Parameter menu legt fest, wo das Tool im Menü von LinkCAD erscheint:
"Tools/Python" → Tools → Python → <tool name>"Tools/Analysis" → Tools → Analysis → <tool name>"Tools/Drawing/Custom" → Tools → Drawing → Custom → <tool name>Vollständiges Beispiel
from linkcad.plugin import tool, Tool, Option
@tool( name="Shape Counter", menu="Tools/Analysis", tooltip="Count shapes per layer", shortcut="Ctrl+Shift+C", requires_drawing=True,)class ShapeCounter(Tool): include_refs = Option.boolean("Include cell references", default=False)
def run(self, drawing) -> None: total = 0 for layer_name, shapes in drawing.shapes_by_layer(): count = sum(1 for _ in shapes) total += count print(f"{layer_name}: {count}") print(f"Total: {total}")