linkcad.db
Das Datenbankmodul bietet Zugriff auf die In-Memory-Zeichnungsdatenbank von LinkCAD. Alle Datenbankobjekte werden aus Performance-Gründen durch C++-Implementierungen unterstützt.
from linkcad.db import ( Drawing, Cell, Layer, Object, Shape, Polygon, Polyline, Ref, Color, Property, ReadLock, WriteLock, Transaction, Unit)Klassen
Drawing
Der Container der obersten Ebene für alle Layoutdaten.
from linkcad.db import Drawing
dwg = Drawing.current() # Get the active drawing| Eigenschaft / Methode | Beschreibung |
|---|---|
Drawing.current() | Klassenmethode — aktive Zeichnungsinstanz abrufen |
drawing.name | Zeichnungsname (schreibgeschützt) |
drawing.units | Datenbankeinheiten — ein Unit-Enum-Wert (schreibgeschützt) |
drawing.main_cell | Hauptzelle (Top-Zelle) abrufen oder festlegen |
drawing.cells() | Alle Zellen durchlaufen |
drawing.layers() | Alle Ebenen durchlaufen |
drawing.delete_layer(layer) | Eine Ebene löschen |
Cell
Ein benannter Container für Formen und Zellenreferenzen.
from linkcad.db import Cell
# Createcell = Cell.create_instance(drawing, "MY_CELL")
# Look upcell = Cell.lookup(drawing, "MY_CELL") # returns None if not found| Eigenschaft / Methode | Beschreibung |
|---|---|
Cell.create_instance(drawing, name) | Klassenmethode — neue Zelle erstellen |
Cell.lookup(drawing, name) | Klassenmethode — Zelle anhand des Namens suchen; gibt None zurück, wenn sie nicht gefunden wird |
cell.name | Zellenname (schreibgeschützt) |
cell.shapes() | Formen in dieser Zelle durchlaufen |
cell.cell_objects() | Alle Objekte (Formen + Referenzen) in dieser Zelle durchlaufen |
Layer
Eine benannte Ebene mit Anzeigeeigenschaften.
| Eigenschaft / Methode | Beschreibung |
|---|---|
layer.name | Ebenenname |
layer.number | Ebenennummer (von GDSII verwendet) |
layer.datatype | Ebenen-data type (von GDSII verwendet) |
layer.visible | Gibt an, ob die Ebene sichtbar ist |
layer.color | Anzeigefarbe der Ebene (Color) |
Object
Basisklasse für alle Objekte, die in einer Zelle vorhanden sein können (Formen, Zellenreferenzen usw.).
| Eigenschaft / Methode | Beschreibung |
|---|---|
obj.layer | Die Ebene, zu der dieses Objekt gehört (bei Referenzen möglicherweise None) |
obj.destroy() | Dieses Objekt entfernen und zerstören |
Shape
Basisklasse für geometrische Formen (Polygone, Polylinien und tesselierte Primitive wie Kreise).
| Eigenschaft / Methode | Beschreibung |
|---|---|
shape.layer() | Layer der Form abrufen |
shape.vertices() | Stützpunktkoordinaten als (x, y)-Tupel durchlaufen |
shape.closed | True, wenn die Form geschlossen ist (polygonartig) |
shape.area() | Vorzeichenbehafteter Flächeninhalt der Form |
shape.bounds() | Begrenzungsrahmen (Bounds) |
shape.destroy() | Diese Form entfernen und zerstören |
Polygon
Eine geschlossene gefüllte Form. Erweitert Shape.
from linkcad.db import Polygon| Eigenschaft / Methode | Beschreibung |
|---|---|
polygon.vertices() | Stützpunkte als (x, y)-Tupel durchlaufen |
polygon.area() | Vorzeichenbehafteter Flächeninhalt |
polygon.layer() | Zugehörige Ebene |
polygon.destroy() | Entfernen und zerstören |
Polyline
Ein offener oder geschlossener Pfad mit optionaler Breite. Erweitert Shape.
from linkcad.db import Polyline| Eigenschaft / Methode | Beschreibung |
|---|---|
polyline.vertices() | Stützpunkte als (x, y)-Tupel durchlaufen |
polyline.width | Pfadbreite in Datenbankeinheiten |
polyline.closed | True, wenn der Pfad geschlossen ist |
polyline.layer() | Zugehörige Ebene |
polyline.destroy() | Entfernen und zerstören |
Ref
Eine platzierte Instanz einer anderen Zelle mit zugehöriger Transformation.
from linkcad.db import Reffrom linkcad.geom import Transformation
xform = Transformation()xform.rotate(45.0)xform.translate(1000, 2000)Ref.create_instance(cell=parent_cell, transformation=xform, ref_cell=child_cell)| Eigenschaft / Methode | Beschreibung |
|---|---|
Ref.create_instance(cell, transformation, ref_cell) | Klassenmethode — Zellenreferenz erstellen |
ref.ref_cell | Die referenzierte Cell |
ref.transformation | Angewendete Transformation |
ref.destroy() | Diese Referenz entfernen und zerstören |
Color
Ein RGB-Farbwert, der Ebenen zugeordnet ist.
| Eigenschaft | Beschreibung |
|---|---|
color.red | Rotkanal (0–255) |
color.green | Grünkanal (0–255) |
color.blue | Blaukanal (0–255) |
Property
Eine benannte Zeichenfolgeneigenschaft, die einem Datenbankobjekt zugeordnet ist.
| Eigenschaft | Beschreibung |
|---|---|
prop.name | Eigenschaftsname |
prop.value | Eigenschaftswert |
Unit
Enum der Datenbank-Koordinateneinheiten. Wird von drawing.units zurückgegeben.
| Wert | Beschreibung |
|---|---|
Unit.Nanometer | 1 nm pro Datenbankeinheit |
Unit.Micrometer | 1 µm pro Datenbankeinheit |
Unit.Millimeter | 1 mm pro Datenbankeinheit |
Unit.Centimeter | 1 cm pro Datenbankeinheit |
Unit.Meter | 1 m pro Datenbankeinheit |
Unit.Mil | 1 mil (0,001 inch) pro Datenbankeinheit |
Unit.Inch | 1 inch pro Datenbankeinheit |
Sperren
Die Sperranforderung hängt vom Ausführungskontext ab.
Plugin-Kontext (@tool, @format_reader, @format_writer)
Das Framework hält die passende Sperre, bevor es run(), read() oder write() aufruft. Für Leseoperationen ist keine explizite Sperre erforderlich. Schreiboperationen, die rückgängig gemacht werden können sollen, benötigen eine Transaction:
from linkcad.db import Cell, Ref, Transactionfrom linkcad.geom import Transformation
def run(self, drawing) -> None: # Read access — no lock needed for cell in drawing.cells(): print(cell.name)
# Write access — wrap in Transaction for undo support with Transaction(drawing, "My Operation"): new_cell = Cell.create_instance(drawing, "RESULT") # ... build geometry ... # auto-commits on exit; rolls back on exceptionEigenständige Skripte (linkcad --python-script)
Skripte, die außerhalb des Plugin-Frameworks ausgeführt werden, müssen Sperren explizit erwerben:
from linkcad.db import Drawing, ReadLock, WriteLock
dwg = Drawing.current()
# Read accesswith ReadLock(): for cell in dwg.cells(): print(cell.name)
# Write access (no undo support)with WriteLock(): for layer in list(dwg.layers()): if layer.name.startswith("TEMP_"): dwg.delete_layer(layer)ReadLock
Kontextmanager für schreibgeschützten Zugriff in eigenständigen Skripten.
from linkcad.db import ReadLock
with ReadLock(): main = dwg.main_cell for shape in main.shapes(): print(shape.bounds())WriteLock
Kontextmanager für Schreibzugriff in eigenständigen Skripten. Erstellt keinen Undo-Eintrag.
from linkcad.db import WriteLock
with WriteLock(): for cell in dwg.cells(): for obj in list(cell.cell_objects()): if obj.layer and obj.layer.name == "SCRATCH": obj.destroy()Transaction
Kontextmanager für Schreibzugriff, der einen einzelnen rückgängig machbaren Eintrag in der Undo-Historie erstellt. In Tool-Plugins verwenden. Akzeptiert eine Beschreibungszeichenfolge, die im Edit-Menü angezeigt wird.
from linkcad.db import Transaction
with Transaction(drawing, "Create Panel"): cell = Cell.create_instance(drawing, "PANEL") # ... build content ... # auto-commits on clean exit; rolls back on exception