Zum Inhalt springen

linkcad.edit

Tasks zur Geometriebearbeitung. Jeder Task wird gegen eine Drawing erzeugt (bzw. bei FlattenTask gegen eine Cell) und mit task.execute() ausgeführt. Tasks müssen innerhalb eines WriteLock (eigenständige Skripte) oder einer Transaction (Tool-Plugins) laufen.

from linkcad.v1.edit import (
ITask,
SnapToGridTask,
FlattenTask,
RemoveDuplicatesTask,
MergeTask,
ClosePolylinesTask,
JoinPolylinesTask,
PolylineToPolygonTask,
ExplodeToPolygonTask,
RemoveZeroWidthPolylinesTask,
RemoveOverlappingPolylinesTask,
FixSelfIntersectingPolygonsTask,
FillRule,
HolesMode,
EdgePolicy,
PolygonSnapMode,
ShapesToConvert,
CellFilter,
LayerFilter,
ShapeFilter,
)

Basisklasse

ITask

Alle Tasks erweitern ITask.

Eigenschaft / MethodeBeschreibung
task.execute()Den Task ausführen. Kann bei Fehlschlag eine Ausnahme auslösen
task.cancel()Einen laufenden Task abbrechen
task.progressFortschritt in Prozent (0-100)
task.cell_filterWelche Zellen der Task bearbeitet; zuweisbar
task.layer_filterWelche Ebenen der Task einbezieht; zuweisbar
task.shape_filterWelche Formen der Task einbezieht; zuweisbar
from linkcad.v1.edit import CellFilter, RemoveDuplicatesTask, ShapeFilter
task = RemoveDuplicatesTask(drawing)
task.cell_filter = CellFilter.EnabledCells
task.shape_filter = ShapeFilter.SelectedShapes
task.execute()

Tasks

SnapToGridTask

Richtet Stützpunkte von Formen am nächstgelegenen Rasterpunkt aus.

from linkcad.v1.db import Transaction
from linkcad.v1.edit import PolygonSnapMode, SnapToGridTask
with Transaction(drawing, "Snap to grid"):
SnapToGridTask(drawing, 100, PolygonSnapMode.AllAngle).execute()
ParameterTypStandardBeschreibung
drawingDrawingerforderlichZielzeichnung
gridinterforderlichRasterabstand in Datenbankeinheiten
snap_modePolygonSnapModeAllAngleOb Manhattan-Geometrie erzwungen wird

FlattenTask

Reduziert die Zellenhierarchie unterhalb einer Zelle — expandiert alle Zellenreferenzen in diese Zelle. Beachten Sie: der Task nimmt die Startzelle, nicht die Zeichnung.

from linkcad.v1.edit import FlattenTask
FlattenTask(drawing.main_cell).execute()
ParameterTypBeschreibung
start_cellCellZelle, deren Referenzen expandiert werden

RemoveDuplicatesTask

Entfernt Polygone und Polylinien mit identischer Geometrie.

from linkcad.v1.edit import RemoveDuplicatesTask
RemoveDuplicatesTask(drawing).execute()

MergeTask

Führt überlappende Polygone auf jeder Ebene per boolescher Vereinigung zusammen. Gekrümmte Formen werden zuvor mit der übergebenen Resolution tesseliert.

from linkcad.v1.edit import EdgePolicy, FillRule, HolesMode, MergeTask
from linkcad.v1.geom import Resolution
res = Resolution()
res.minimum_facets = 32
res.maximum_error = 1
task = MergeTask(
drawing,
res,
FillRule.NonZero,
HolesMode.Link,
EdgePolicy.Merge,
dont_explode=False,
process_vertically=False,
)
task.execute()
ParameterTypStandardBeschreibung
drawingDrawingerforderlichZielzeichnung
resolutionResolutionerforderlichEinstellungen zur Kurventesselierung
fill_ruleFillRuleerforderlichWinding-Regel zur Bestimmung des Polygoninneren
holes_modeHolesModeerforderlichWie Löcher in den Ausgabepolygonen dargestellt werden
edge_policyEdgePolicyerforderlichWie innere Konturen behandelt werden
dont_explodeboolFalseBei True komplexe Ergebnispolygone nicht zerlegen
process_verticallyboolFalseBei True Zellen von unten nach oben verarbeiten (bei hierarchischen Zeichnungen)

ClosePolylinesTask

Schließt offene Polylinien, indem erster und letzter Stützpunkt verbunden werden.

from linkcad.v1.edit import ClosePolylinesTask
ClosePolylinesTask(drawing).execute()

JoinPolylinesTask

Verbindet Polylinien, deren Endpunkte sich innerhalb einer Toleranz berühren.

from linkcad.v1.edit import JoinPolylinesTask
task = JoinPolylinesTask(drawing, wire_end_tolerance=10, width_tolerance=1)
task.execute()
print(task.unique_object_count, task.total_object_count)
ParameterTypBeschreibung
drawingDrawingZielzeichnung
wire_end_toleranceintMaximaler Endpunktabstand in Datenbankeinheiten
width_toleranceintMaximaler Breitenunterschied zwischen verbundenen Polylinien

PolylineToPolygonTask

Wandelt geschlossene Polylinien in gefüllte Polygone um.

from linkcad.v1.edit import PolylineToPolygonTask
from linkcad.v1.geom import Resolution
PolylineToPolygonTask(drawing, tolerance=0, resolution=Resolution()).execute()
ParameterTypBeschreibung
drawingDrawingZielzeichnung
toleranceintEndpunktabstand, der noch als geschlossen gilt
resolutionResolutionEinstellungen zur Kurventesselierung

ExplodeToPolygonTask

Wandelt komplexe Formen durch Tesselierung in einfache Polygone und Polylinien um.

from linkcad.v1.edit import ExplodeToPolygonTask, FillRule, HolesMode, ShapesToConvert
from linkcad.v1.geom import Resolution
res = Resolution()
res.minimum_facets = 32
task = ExplodeToPolygonTask(
drawing, res, FillRule.NonZero, HolesMode.Link, ShapesToConvert.All
)
task.execute()
print(task.unique_object_count, task.total_object_count)
ParameterTypBeschreibung
drawingDrawingZielzeichnung
resolutionResolutionEinstellungen zur Kurventesselierung
fill_ruleFillRuleWinding-Regel
holes_modeHolesModeWie Löcher dargestellt werden
shapes_to_convertShapesToConvertWelche Formtypen aufgelöst werden

unique_object_count und total_object_count sind Eigenschaften und nur auf den beiden Tasks definiert, die überhaupt zählen: ExplodeToPolygonTask und JoinPolylinesTask.

RemoveZeroWidthPolylinesTask

Löscht alle Polylinien mit der Breite null.

from linkcad.v1.edit import RemoveZeroWidthPolylinesTask
RemoveZeroWidthPolylinesTask(drawing).execute()

RemoveOverlappingPolylinesTask

Entfernt Polyliniensegmente, die andere Segmente derselben Ebene überlagern.

from linkcad.v1.edit import RemoveOverlappingPolylinesTask
RemoveOverlappingPolylinesTask(drawing).execute()

FixSelfIntersectingPolygonsTask

Zerlegt selbstschneidende Polygone in einfache Polygone.

from linkcad.v1.edit import FillRule, FixSelfIntersectingPolygonsTask, HolesMode
FixSelfIntersectingPolygonsTask(drawing, FillRule.NonZero, HolesMode.Link).execute()
ParameterTypBeschreibung
drawingDrawingZielzeichnung
fill_ruleFillRuleWinding-Regel
holes_modeHolesModeWie Löcher dargestellt werden

Enums

FillRule

Winding-Regel zur Bestimmung, welche Bereiche „innerhalb“ eines Polygons liegen. Re-Export aus linkcad.v1.db.

WertBeschreibung
FillRule.NonZeroNon-Zero-Winding-Regel (übliche CAD-/EDA-Konvention)
FillRule.EvenOddEven-Odd-Regel (abwechselnde Füllung)

HolesMode

Bestimmt, wie Löcher in den Ergebnispolygonen dargestellt werden. Re-Export aus linkcad.v1.plugin.

WertBeschreibung
HolesMode.LinkLöcher mit der Außenkontur über Brücken der Breite null verbinden
HolesMode.SplitPolygone so teilen, dass in der Ausgabe keine Löcher erscheinen
HolesMode.ExtractLöcher als separate Polygone zurückgeben
HolesMode.KeepLöcher unverändert beibehalten

EdgePolicy

Bestimmt, wie innere Konturen beim Zusammenführen behandelt werden.

WertBeschreibung
EdgePolicy.KeepUrsprüngliche innere Konturen behalten
EdgePolicy.MergeInnere Konturen zusammenführen

PolygonSnapMode

Bestimmt, welche Winkel Stützpunkte nach dem Ausrichten annehmen dürfen.

WertBeschreibung
PolygonSnapMode.AllAngleAlle Winkel erlauben
PolygonSnapMode.ForceManhattanManhattan-Geometrie (orthogonal) erzwingen

ShapesToConvert

Wählt aus, welche Formtypen ExplodeToPolygonTask umwandelt. Die Werte lassen sich kombinieren.

WertBeschreibung
ShapesToConvert.NoneNichts
ShapesToConvert.AllJeden umwandelbaren Formtyp
ShapesToConvert.PolylinesPolylinien
ShapesToConvert.TextText
ShapesToConvert.CirclesKreise und Ellipsen
ShapesToConvert.ArcsKreisbögen
ShapesToConvert.DonutsRinge
ShapesToConvert.NurbsNURBS-Kurven
ShapesToConvert.ZeroWidthClosedPolylinesGeschlossene Polylinien der Breite null

None ist ein Python-Schlüsselwort, dieses Mitglied ist daher nur als getattr(ShapesToConvert, "None") erreichbar.