コンテンツにスキップ

linkcad.edit

ジオメトリ操作タスクです。各タスクは DrawingFlattenTask の場合は Cell)に対して構築し、task.execute() で実行します。タスクは WriteLock(スタンドアロンスクリプト)または Transaction(ツールプラグイン)の中で実行しなければなりません。

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,
)

基底クラス

ITask

すべてのタスクは ITask を継承します。

プロパティ / メソッド説明
task.execute()タスクを実行します。失敗時に例外を送出することがあります
task.cancel()実行中のタスクをキャンセルします
task.progress進捗率(0-100)
task.cell_filterタスクが処理するセル。代入可能
task.layer_filterタスクが対象とするレイヤー。代入可能
task.shape_filterタスクが対象とする形状。代入可能
from linkcad.v1.edit import CellFilter, RemoveDuplicatesTask, ShapeFilter
task = RemoveDuplicatesTask(drawing)
task.cell_filter = CellFilter.EnabledCells
task.shape_filter = ShapeFilter.SelectedShapes
task.execute()

タスク

SnapToGridTask

形状の頂点を最も近いグリッド点にスナップします。

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()
パラメーター既定値説明
drawingDrawing必須対象の図面
gridint必須データベース単位でのグリッド間隔
snap_modePolygonSnapModeAllAngleマンハッタン幾何を強制するかどうか

FlattenTask

あるセル配下のセル階層をフラット化し、すべてのセル参照をそのセルへ展開します。引数は図面ではなく開始セルである点に注意してください。

from linkcad.v1.edit import FlattenTask
FlattenTask(drawing.main_cell).execute()
パラメーター説明
start_cellCell参照を展開する対象のセル

RemoveDuplicatesTask

同一ジオメトリのポリゴンとポリラインを削除します。

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

MergeTask

各レイヤー上の重なり合うポリゴンをブール和でマージします。曲線形状は指定した Resolution で先にテセレーションされます。

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()
パラメーター既定値説明
drawingDrawing必須対象の図面
resolutionResolution必須曲線テセレーションの設定
fill_ruleFillRule必須ポリゴン内部を判定する回転数規則
holes_modeHolesMode必須出力ポリゴン内の穴の表現方法
edge_policyEdgePolicy必須内側の境界の扱い方
dont_explodeboolFalseTrue の場合、複雑な結果ポリゴンを分解しません
process_verticallyboolFalseTrue の場合、セルをボトムアップで処理します(階層図面向け)

ClosePolylinesTask

最初と最後の頂点を結んで、開いたポリラインを閉じます。

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

JoinPolylinesTask

端点が許容範囲内で接しているポリライン同士を結合します。

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)
パラメーター説明
drawingDrawing対象の図面
wire_end_toleranceintデータベース単位での端点間の最大ギャップ
width_toleranceint結合するポリライン間の最大幅差

PolylineToPolygonTask

閉じたポリラインを塗りつぶしポリゴンに変換します。

from linkcad.v1.edit import PolylineToPolygonTask
from linkcad.v1.geom import Resolution
PolylineToPolygonTask(drawing, tolerance=0, resolution=Resolution()).execute()
パラメーター説明
drawingDrawing対象の図面
toleranceint閉じているとみなす端点間のギャップ
resolutionResolution曲線テセレーションの設定

ExplodeToPolygonTask

複雑な形状をテセレーションによって単純なポリゴンとポリラインに変換します。

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)
パラメーター説明
drawingDrawing対象の図面
resolutionResolution曲線テセレーションの設定
fill_ruleFillRule回転数規則
holes_modeHolesMode穴の表現方法
shapes_to_convertShapesToConvert展開する形状の種類

unique_object_counttotal_object_count はプロパティで、実際に数を数える 2 つのタスク——ExplodeToPolygonTaskJoinPolylinesTask——にのみ定義されています。

RemoveZeroWidthPolylinesTask

幅が 0 のポリラインをすべて削除します。

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

RemoveOverlappingPolylinesTask

同じレイヤー上で他のセグメントと重なるポリラインセグメントを削除します。

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

FixSelfIntersectingPolygonsTask

自己交差するポリゴンを単純ポリゴンに分割します。

from linkcad.v1.edit import FillRule, FixSelfIntersectingPolygonsTask, HolesMode
FixSelfIntersectingPolygonsTask(drawing, FillRule.NonZero, HolesMode.Link).execute()
パラメーター説明
drawingDrawing対象の図面
fill_ruleFillRule回転数規則
holes_modeHolesMode穴の表現方法

列挙型

FillRule

ポリゴンの「内側」を判定する回転数規則です。linkcad.v1.db からの再エクスポートです。

説明
FillRule.NonZero非ゼロ回転数規則(CAD/EDA の標準的な慣習)
FillRule.EvenOdd偶奇規則(交互に塗りつぶし)

HolesMode

結果ポリゴン内の穴の表現方法を制御します。linkcad.v1.plugin からの再エクスポートです。

説明
HolesMode.Link幅ゼロのブリッジで穴を外周に接続します
HolesMode.Split出力に穴が現れないようポリゴンを分割します
HolesMode.Extract穴を別のポリゴンとして返します
HolesMode.Keep穴をそのまま保持します

EdgePolicy

マージ時に内側の境界をどう扱うかを制御します。

説明
EdgePolicy.Keep元の内側境界を保持します
EdgePolicy.Merge内側境界をマージします

PolygonSnapMode

スナップ後に頂点が取りうる角度を制御します。

説明
PolygonSnapMode.AllAngleすべての角度を許可します
PolygonSnapMode.ForceManhattanマンハッタン幾何(直交)を強制します

ShapesToConvert

ExplodeToPolygonTask が変換する形状の種類を選びます。値は組み合わせられます。

説明
ShapesToConvert.None何も変換しません
ShapesToConvert.All変換可能なすべての形状
ShapesToConvert.Polylinesポリライン
ShapesToConvert.Textテキスト
ShapesToConvert.Circles円と楕円
ShapesToConvert.Arcs円弧
ShapesToConvert.Donutsドーナツ
ShapesToConvert.NurbsNURBS 曲線
ShapesToConvert.ZeroWidthClosedPolylines幅ゼロの閉じたポリライン

None は Python の予約語であるため、このメンバーは getattr(ShapesToConvert, "None") としてのみ参照できます。