コンテンツにスキップ

linkcad.libgraph

ポリゴン演算用の高性能ブールジオメトリエンジンです。ネイティブ libgraph ライブラリをラップします。

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

便利関数

単純な 2 ポリゴン演算では、これらの関数を直接使用します。各関数は頂点リストを (x, y) タプルのシーケンスとして受け取り、結果ポリゴンのリスト(各結果ポリゴンは (x, y) タプルのリスト)を返します。

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)
関数説明
boolean_and(vtx1, vtx2, fill_rule=FillRule.NonZero)2 つのポリゴンの交差
boolean_or(vtx1, vtx2, fill_rule=FillRule.NonZero)2 つのポリゴンの和
boolean_xor(vtx1, vtx2, fill_rule=FillRule.NonZero)2 つのポリゴンの対称差
boolean_difference(vtx1, vtx2, fill_rule=FillRule.NonZero)差分——vtx1 にあり vtx2 にない領域

ShapeProcessor

複数ポリゴン演算、または演算を完全に制御したい場合は ShapeProcessor を使用します。

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)
メソッド説明
ShapeProcessor()新しいプロセッサーインスタンスを作成します
sp.add_polygon(group, vertices)グループ A、B、または AB にポリゴンを追加します
sp.execute(operation)指定されたブール演算を実行します
sp.get_next_polygon()次の結果ポリゴンを取得します。尽きた場合は None を返します
sp.result直前の execute() 呼び出しの Result ステータス

列挙型

ShapeGroup

ポリゴンがどのオペランドに属するかを決定します。

説明
ShapeGroup.A第 1 オペランド
ShapeGroup.B第 2 オペランド
ShapeGroup.AB両方のオペランドに同時に属します

Operation

実行するブール演算です。

説明
Operation.Or和(A ∪ B)
Operation.And交差(A ∩ B)
Operation.Xor対称差(A △ B)
Operation.AMinusB差分(A − B)
Operation.BMinusA差分(B − A)

FillRule

重なり合うポリゴンエッジが「内側」と「外側」をどのように決定するかを制御します。

説明
FillRule.NonZero非ゼロワインディング規則(標準的な EDA の慣例)
FillRule.EvenOdd偶奇規則

HolesMode

出力ポリゴン内の穴の表現方法を制御します。

説明
HolesMode.Extract穴を個別の反転ポリゴンとして返します
HolesMode.Linkゼロ幅ブリッジで穴を外側境界に接続します
HolesMode.Split穴のない単純ポリゴンへ結果を分割します

Result

直前の ShapeProcessor.execute() 呼び出しのステータスです。

説明
Result.Ok演算に成功しました
Result.Error演算に失敗しました