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)]
# 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)| 関数 | 説明 |
|---|---|
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 | 演算に失敗しました |