Zum Inhalt springen

linkcad.libgraph

Leistungsfähige Engine für boolesche Geometrieoperationen an Polygonen. Umschließt die native libgraph-Bibliothek.

from linkcad.libgraph import (
ShapeProcessor, ShapeGroup, Operation, FillRule, HolesMode, Result,
boolean_and, boolean_or, boolean_xor, boolean_difference,
)

Hilfsfunktionen

Verwenden Sie diese Funktionen direkt für einfache Operationen mit zwei Polygonen. Jede Funktion akzeptiert Stützpunktlisten als Sequenzen von (x, y)-Tupeln und gibt eine Liste von Ergebnispolygonen zurück (jeweils eine Liste von (x, y)-Tupeln).

from linkcad.libgraph import boolean_and, boolean_or, boolean_xor, boolean_difference
square = [(0, 0), (10, 0), (10, 10), (0, 10)]
triangle = [(5, 5), (15, 5), (10, 15)]
# Intersection
result = boolean_and(square, triangle)
# Union
result = boolean_or(square, triangle)
# Exclusive OR
result = boolean_xor(square, triangle)
# Difference (square minus triangle)
result = boolean_difference(square, triangle)
FunktionBeschreibung
boolean_and(vtx1, vtx2, fill_rule=FillRule.NonZero)Schnittmenge zweier Polygone
boolean_or(vtx1, vtx2, fill_rule=FillRule.NonZero)Vereinigung zweier Polygone
boolean_xor(vtx1, vtx2, fill_rule=FillRule.NonZero)Symmetrische Differenz zweier Polygone
boolean_difference(vtx1, vtx2, fill_rule=FillRule.NonZero)Differenz — Bereiche in vtx1, aber nicht in vtx2

ShapeProcessor

Verwenden Sie ShapeProcessor für Operationen mit mehreren Polygonen oder für vollständige Kontrolle über die Operation:

from linkcad.libgraph import ShapeProcessor, ShapeGroup, Operation
sp = ShapeProcessor()
sp.add_polygon(ShapeGroup.A, [(0, 0), (10, 0), (10, 10), (0, 10)])
sp.add_polygon(ShapeGroup.B, [(5, 5), (15, 5), (10, 15)])
sp.execute(Operation.And)
results = []
while True:
poly = sp.get_next_polygon()
if poly is None:
break
results.append(poly)
MethodeBeschreibung
ShapeProcessor()Neue Prozessorinstanz erstellen
sp.add_polygon(group, vertices)Polygon zu Gruppe A, B oder AB hinzufügen
sp.execute(operation)Angegebene boolesche Operation ausführen
sp.get_next_polygon()Nächstes Ergebnispolygon abrufen; gibt None zurück, wenn keine weiteren vorhanden sind
sp.resultResult-Status des letzten Aufrufs von execute()

Enums

ShapeGroup

Legt fest, zu welchem Operanden ein Polygon gehört.

WertBeschreibung
ShapeGroup.AErster Operand
ShapeGroup.BZweiter Operand
ShapeGroup.ABGehört gleichzeitig zu beiden Operanden

Operation

Die auszuführende boolesche Operation.

WertBeschreibung
Operation.OrVereinigung (A ∪ B)
Operation.AndSchnittmenge (A ∩ B)
Operation.XorSymmetrische Differenz (A △ B)
Operation.AMinusBDifferenz (A − B)
Operation.BMinusADifferenz (B − A)

FillRule

Steuert, wie überlappende Polygonkanten „innen“ und „außen“ bestimmen.

WertBeschreibung
FillRule.NonZeroNicht-Null-Wicklungsregel (Standardkonvention in EDA)
FillRule.EvenOddGerade-Ungerade-Regel

HolesMode

Steuert, wie Löcher in Ausgabepolygonen dargestellt werden.

WertBeschreibung
HolesMode.ExtractLöcher als separate umgekehrte Polygone zurückgeben
HolesMode.LinkLöcher mit Brücken der Breite null an die äußere Begrenzung anbinden
HolesMode.SplitErgebnis in einfache Polygone ohne Löcher aufteilen

Result

Status des letzten Aufrufs von ShapeProcessor.execute().

WertBeschreibung
Result.OkOperation erfolgreich
Result.ErrorOperation fehlgeschlagen