Einrichtung & Anforderungen
Python-Version
LinkCAD 11 wird mit einem eingebetteten Python-3.12-Interpreter ausgeliefert. Es ist keine separate Python-Installation erforderlich.
Plugin-Speicherort
Legen Sie Python-Plugin-Dateien (.py) in einem dieser Verzeichnisse ab:
- Benutzer-Plugins:
%APPDATA%\LinkCAD\plugins\ - System-Plugins:
<LinkCAD install dir>\plugins\
LinkCAD durchsucht diese Verzeichnisse beim Start und registriert alle gefundenen Plugins.
Zugriff auf die Konsole
Öffnen Sie die interaktive Python-Konsole über das Menü:
- View → Python Console (Ctrl+Shift+P)
Die Konsole bietet vollständigen Zugriff auf das Paket linkcad und die aktuell geladene Zeichnung.
Konsole und Skripteditor definieren beide eine globale Variable drawing, die immer auf die gerade in LinkCAD geöffnete Zeichnung verweist bzw. None ist, wenn nichts geladen ist. Sie gehört der Anwendung — lesen und ändern Sie sie, rufen Sie darauf aber niemals destroy() auf.
if drawing is not None: print(drawing.name, len(drawing.cells), "cells")Eine Zeichnung, die Sie selbst erzeugen, muss freigegeben werden, sonst stürzt der Interpreter beim Beenden ab. Verwenden Sie sie als Kontextmanager:
from linkcad.v1.db import Drawing
with Drawing("scratch") as dwg: ...Skripteditor
LinkCAD enthält einen integrierten Skripteditor:
- View → Python Script Editor (Ctrl+Shift+E)
- Das aktuelle Skript mit F5 ausführen
- Den ausgewählten Text mit Ctrl+↵ ausführen
Paketstruktur
linkcad und linkcad.v1 veröffentlichen die Module der API, und sonst nichts:
| Modul | Zweck |
|---|---|
linkcad.v1.plugin | Plugin-Framework — Dekoratoren, Optionen, Basisklassen |
linkcad.v1.db | Zeichnungsdatenbank — Zellen, Ebenen, Formen, Transaktionen |
linkcad.v1.geom | Geometrieprimitive — Punkte, Vektoren, Transformationen, Begrenzungen |
linkcad.v1.edit | Geometrie-Tasks — Zusammenführen, Reduzieren, am Raster ausrichten, Verbinden, Auflösen |
linkcad.v1.env | Optionen und Protokollierung — dauerhafte Einstellungen, Ereignisprotokoll |
linkcad.v1.conv | Dateiformat-Konvertierung — Zeichnungen laden und speichern |
linkcad.v1.libgraph | Boolesche Geometrie — Vereinigung, Schnitt, Differenz |
linkcad.v1.controller | Übergeordneter Controller für den Konvertierungsablauf |
Ein Name lebt in dem Modul, das ihn definiert; greifen Sie also zuerst zum Modul und dann zu den Namen darin:
from linkcad import db, geom # or: from linkcad.v1 import db, geomfrom linkcad.v1.db import Drawing, Cell, Layerfrom linkcad.v1.geom import Point, VectorAuf oberster Ebene gibt es keine Namen: from linkcad import Drawing funktioniert nicht, und from linkcad.v1 import Drawing ebenso wenig.
Das ist Absicht, kein Versehen. Die Inhalte der Module kollidieren. FillRule ist ein anderes Enum in db, edit und libgraph; HolesMode unterscheidet sich zwischen edit und libgraph; CellContext und FormatInfo benennen jeweils zwei unverwandte Typen. Ein flacher Namensraum müsste sich für je einen entscheiden — und würde ihn nach Importreihenfolge wählen, was keine Regel ist, die jemand vorhersagen kann.
Die Modulliste wird aus dem Paketverzeichnis ermittelt statt aufgeschrieben, sie kann also nie zurückfallen. Die handverlesene Liste, die sie ersetzt hat, nannte zwölf Klassen und ließ Arc, Ellipse, Donut, Nurbs, Text, Ref, Shape, Object, Property, sämtliche Enums und das gesamte linkcad.geom aus.
API-Versionierung
Bevorzugen Sie die Untermodule linkcad.v1.*. Jedes davon spiegelt den gesamten öffentlichen Namensraum des entsprechenden Moduls der obersten Ebene, es handelt sich also um dieselben Objekte; über v1 binden Sie Ihr Skript an die stabile API-Oberfläche, sodass es auch bei künftiger Weiterentwicklung der LinkCAD-Python-API funktioniert.
import linkcad
print(linkcad.API_VERSION) # "v1"print(linkcad.__version__) # e.g. "11.0.27" — read from the loaded LinkCAD build__version__ ist kein Literal im Paket: es kommt aus linkcad.env.program_version() und ist damit immer die Version der tatsächlich geladenen Binärdatei.
Editor-Unterstützung
Das Paket liefert Typ-Stubs mit und ist mit py.typed markiert (PEP 561); ein Editor oder Typprüfer versteht linkcad.* also ohne Zutun Ihrerseits:
- Vervollständigung für
cell.unddrawing., mit der echten Mitgliederliste - Signaturhilfe —
cell.add_polygon(layer, vertices)zeigt beide Parameter und ihre Typen - eine rote Unterstreichung für
cell.shapes()als Methode aufgerufen, für einstrdort, wo einLayerhingehört, und für dasNone, dasdrawing.cell(name)liefern kann
Die Stubs werden beim Bauen aus den gebauten Modulen erzeugt statt eingecheckt; sie können daher nicht von den beschriebenen Bindings abweichen. Wenn Sie Ihren Editor auf den mitgelieferten Interpreter richten oder dessen site-packages-Verzeichnis in den Pfad Ihres Projekts aufnehmen, funktioniert alles Obige ohne weitere Einrichtung.
Zusätzliche Pakete installieren
Sie können zusätzliche Python-Pakete mit pip in der LinkCAD-Python-Umgebung installieren:
import subprocesssubprocess.check_call(["pip", "install", "numpy"])