Zum Inhalt springen

`@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

ParameterTypStandardBeschreibung
namestrerforderlichAnzeigename im Menü
menustr"Tools/Python"Menüpfad (/ für Untermenüs verwenden)
tooltipstr""Tooltip, der beim Hover angezeigt wird
shortcutstr""Tastenkürzel (z. B. "Ctrl+Shift+M")
iconstr""Pfad zur Symboldatei (PNG, 24×24)
requires_drawingboolTrueGibt 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:

FeldBeschreibung
nameTool-Anzeigename
menuMenüpfad
tooltipTooltip-Text
shortcutTastenkürzel
iconSymbolpfad
requires_drawingGibt 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}")