linkcad.libgraph
用于多边形运算的高性能布尔几何引擎。封装原生 libgraph 库。
from linkcad.libgraph import ( ShapeProcessor, ShapeGroup, Operation, FillRule, HolesMode, Result, boolean_and, boolean_or, boolean_xor, boolean_difference,)便捷函数
对于简单的两个多边形运算,可直接使用这些函数。每个函数接受顶点列表(作为 (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) | 两个多边形的交集 |
boolean_or(vtx1, vtx2, fill_rule=FillRule.NonZero) | 两个多边形的并集 |
boolean_xor(vtx1, vtx2, fill_rule=FillRule.NonZero) | 两个多边形的对称差 |
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 | 第一个操作数 |
ShapeGroup.B | 第二个操作数 |
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 | 运算失败 |