跳转到内容

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)]
# 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)两个多边形的交集
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运算失败