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)]
# Intersectionresult = boolean_and(square, triangle)
# Unionresult = boolean_or(square, triangle)
# Exclusive ORresult = boolean_xor(square, triangle)
# Difference (square minus triangle)result = boolean_difference(square, triangle)| Funktion | Beschreibung |
|---|---|
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)| Methode | Beschreibung |
|---|---|
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.result | Result-Status des letzten Aufrufs von execute() |
Enums
ShapeGroup
Legt fest, zu welchem Operanden ein Polygon gehört.
| Wert | Beschreibung |
|---|---|
ShapeGroup.A | Erster Operand |
ShapeGroup.B | Zweiter Operand |
ShapeGroup.AB | Gehört gleichzeitig zu beiden Operanden |
Operation
Die auszuführende boolesche Operation.
| Wert | Beschreibung |
|---|---|
Operation.Or | Vereinigung (A ∪ B) |
Operation.And | Schnittmenge (A ∩ B) |
Operation.Xor | Symmetrische Differenz (A △ B) |
Operation.AMinusB | Differenz (A − B) |
Operation.BMinusA | Differenz (B − A) |
FillRule
Steuert, wie überlappende Polygonkanten „innen“ und „außen“ bestimmen.
| Wert | Beschreibung |
|---|---|
FillRule.NonZero | Nicht-Null-Wicklungsregel (Standardkonvention in EDA) |
FillRule.EvenOdd | Gerade-Ungerade-Regel |
HolesMode
Steuert, wie Löcher in Ausgabepolygonen dargestellt werden.
| Wert | Beschreibung |
|---|---|
HolesMode.Extract | Löcher als separate umgekehrte Polygone zurückgeben |
HolesMode.Link | Löcher mit Brücken der Breite null an die äußere Begrenzung anbinden |
HolesMode.Split | Ergebnis in einfache Polygone ohne Löcher aufteilen |
Result
Status des letzten Aufrufs von ShapeProcessor.execute().
| Wert | Beschreibung |
|---|---|
Result.Ok | Operation erfolgreich |
Result.Error | Operation fehlgeschlagen |