linkcad.edit
ジオメトリ操作タスクです。各タスクは Drawing(FlattenTask の場合は 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.EnabledCellstask.shape_filter = ShapeFilter.SelectedShapestask.execute()タスク
SnapToGridTask
形状の頂点を最も近いグリッド点にスナップします。
from linkcad.v1.db import Transactionfrom linkcad.v1.edit import PolygonSnapMode, SnapToGridTask
with Transaction(drawing, "Snap to grid"): SnapToGridTask(drawing, 100, PolygonSnapMode.AllAngle).execute()| パラメーター | 型 | 既定値 | 説明 |
|---|---|---|---|
drawing | Drawing | 必須 | 対象の図面 |
grid | int | 必須 | データベース単位でのグリッド間隔 |
snap_mode | PolygonSnapMode | AllAngle | マンハッタン幾何を強制するかどうか |
FlattenTask
あるセル配下のセル階層をフラット化し、すべてのセル参照をそのセルへ展開します。引数は図面ではなく開始セルである点に注意してください。
from linkcad.v1.edit import FlattenTask
FlattenTask(drawing.main_cell).execute()| パラメーター | 型 | 説明 |
|---|---|---|
start_cell | Cell | 参照を展開する対象のセル |
RemoveDuplicatesTask
同一ジオメトリのポリゴンとポリラインを削除します。
from linkcad.v1.edit import RemoveDuplicatesTask
RemoveDuplicatesTask(drawing).execute()MergeTask
各レイヤー上の重なり合うポリゴンをブール和でマージします。曲線形状は指定した Resolution で先にテセレーションされます。
from linkcad.v1.edit import EdgePolicy, FillRule, HolesMode, MergeTaskfrom linkcad.v1.geom import Resolution
res = Resolution()res.minimum_facets = 32res.maximum_error = 1
task = MergeTask( drawing, res, FillRule.NonZero, HolesMode.Link, EdgePolicy.Merge, dont_explode=False, process_vertically=False,)task.execute()| パラメーター | 型 | 既定値 | 説明 |
|---|---|---|---|
drawing | Drawing | 必須 | 対象の図面 |
resolution | Resolution | 必須 | 曲線テセレーションの設定 |
fill_rule | FillRule | 必須 | ポリゴン内部を判定する回転数規則 |
holes_mode | HolesMode | 必須 | 出力ポリゴン内の穴の表現方法 |
edge_policy | EdgePolicy | 必須 | 内側の境界の扱い方 |
dont_explode | bool | False | True の場合、複雑な結果ポリゴンを分解しません |
process_vertically | bool | False | True の場合、セルをボトムアップで処理します(階層図面向け) |
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)| パラメーター | 型 | 説明 |
|---|---|---|
drawing | Drawing | 対象の図面 |
wire_end_tolerance | int | データベース単位での端点間の最大ギャップ |
width_tolerance | int | 結合するポリライン間の最大幅差 |
PolylineToPolygonTask
閉じたポリラインを塗りつぶしポリゴンに変換します。
from linkcad.v1.edit import PolylineToPolygonTaskfrom linkcad.v1.geom import Resolution
PolylineToPolygonTask(drawing, tolerance=0, resolution=Resolution()).execute()| パラメーター | 型 | 説明 |
|---|---|---|
drawing | Drawing | 対象の図面 |
tolerance | int | 閉じているとみなす端点間のギャップ |
resolution | Resolution | 曲線テセレーションの設定 |
ExplodeToPolygonTask
複雑な形状をテセレーションによって単純なポリゴンとポリラインに変換します。
from linkcad.v1.edit import ExplodeToPolygonTask, FillRule, HolesMode, ShapesToConvertfrom 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)| パラメーター | 型 | 説明 |
|---|---|---|
drawing | Drawing | 対象の図面 |
resolution | Resolution | 曲線テセレーションの設定 |
fill_rule | FillRule | 回転数規則 |
holes_mode | HolesMode | 穴の表現方法 |
shapes_to_convert | ShapesToConvert | 展開する形状の種類 |
unique_object_count と total_object_count はプロパティで、実際に数を数える 2 つのタスク——ExplodeToPolygonTask と JoinPolylinesTask——にのみ定義されています。
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()| パラメーター | 型 | 説明 |
|---|---|---|
drawing | Drawing | 対象の図面 |
fill_rule | FillRule | 回転数規則 |
holes_mode | HolesMode | 穴の表現方法 |
列挙型
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.Nurbs | NURBS 曲線 |
ShapesToConvert.ZeroWidthClosedPolylines | 幅ゼロの閉じたポリライン |
None は Python の予約語であるため、このメンバーは getattr(ShapesToConvert, "None") としてのみ参照できます。