Zum Inhalt springen

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 / MethodeBeschreibung
Drawing.current()Klassenmethode — aktive Zeichnungsinstanz abrufen
drawing.nameZeichnungsname (schreibgeschützt)
drawing.unitsDatenbankeinheiten — ein Unit-Enum-Wert (schreibgeschützt)
drawing.main_cellHauptzelle (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
# Create
cell = Cell.create_instance(drawing, "MY_CELL")
# Look up
cell = Cell.lookup(drawing, "MY_CELL") # returns None if not found
Eigenschaft / MethodeBeschreibung
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.nameZellenname (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 / MethodeBeschreibung
layer.nameEbenenname
layer.numberEbenennummer (von GDSII verwendet)
layer.datatypeEbenen-data type (von GDSII verwendet)
layer.visibleGibt an, ob die Ebene sichtbar ist
layer.colorAnzeigefarbe der Ebene (Color)

Object

Basisklasse für alle Objekte, die in einer Zelle vorhanden sein können (Formen, Zellenreferenzen usw.).

Eigenschaft / MethodeBeschreibung
obj.layerDie 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 / MethodeBeschreibung
shape.layer()Layer der Form abrufen
shape.vertices()Stützpunktkoordinaten als (x, y)-Tupel durchlaufen
shape.closedTrue, 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 / MethodeBeschreibung
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 / MethodeBeschreibung
polyline.vertices()Stützpunkte als (x, y)-Tupel durchlaufen
polyline.widthPfadbreite in Datenbankeinheiten
polyline.closedTrue, 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 Ref
from 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 / MethodeBeschreibung
Ref.create_instance(cell, transformation, ref_cell)Klassenmethode — Zellenreferenz erstellen
ref.ref_cellDie referenzierte Cell
ref.transformationAngewendete Transformation
ref.destroy()Diese Referenz entfernen und zerstören

Color

Ein RGB-Farbwert, der Ebenen zugeordnet ist.

EigenschaftBeschreibung
color.redRotkanal (0–255)
color.greenGrünkanal (0–255)
color.blueBlaukanal (0–255)

Property

Eine benannte Zeichenfolgeneigenschaft, die einem Datenbankobjekt zugeordnet ist.

EigenschaftBeschreibung
prop.nameEigenschaftsname
prop.valueEigenschaftswert

Unit

Enum der Datenbank-Koordinateneinheiten. Wird von drawing.units zurückgegeben.

WertBeschreibung
Unit.Nanometer1 nm pro Datenbankeinheit
Unit.Micrometer1 µm pro Datenbankeinheit
Unit.Millimeter1 mm pro Datenbankeinheit
Unit.Centimeter1 cm pro Datenbankeinheit
Unit.Meter1 m pro Datenbankeinheit
Unit.Mil1 mil (0,001 inch) pro Datenbankeinheit
Unit.Inch1 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, Transaction
from 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 exception

Eigenstä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 access
with 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