#polygon #operations #boolean #automation #design #electronic #shape

iron-shapes-booleanop

iron-shapes的多边形布尔运算

3个不稳定版本

0.1.0 2024年6月4日
0.0.3 2022年7月13日
0.0.2 2021年12月10日

#489算法

Download history 3/week @ 2024-04-14 11/week @ 2024-04-21 5/week @ 2024-04-28 12/week @ 2024-05-05 14/week @ 2024-05-12 16/week @ 2024-05-19 9/week @ 2024-05-26 168/week @ 2024-06-02 24/week @ 2024-06-09 37/week @ 2024-06-16 7/week @ 2024-06-23 1/week @ 2024-06-30 23/week @ 2024-07-07 16/week @ 2024-07-14 28/week @ 2024-07-21 20/week @ 2024-07-28

87 每月下载量
8 个crate中(直接使用 2 个)

AGPL-3.0-or-later

87KB
2K SLoC

iron-shapes 的布尔运算

此项目实现了多边形的布尔运算。

代码最初是从 https://github.com/21re/rust-geo-booleanop 分叉的。

大部分代码已被重写以更好地满足电子设计自动化工具的需求。例如,支持整数坐标。未来的工作将包括寻找多边形之间的交互和重叠。这可以用于电气连接检查和从芯片布局中提取网表。


lib.rs:

多边形布尔运算库。

示例

use iron_shapes::prelude::*;
use iron_shapes_booleanop::BooleanOp;

// Create two polygons.
let p1 = Polygon::from(vec![(0., 0.), (2., 0.), (2., 1.), (0., 1.)]);
let p2 = p1.translate((1., 0.).into()); // Shift p1 by (1, 0).

// Compute the boolean intersection of the two squares.
let intersection = p1.intersection(&p2);
assert_eq!(intersection.polygons.len(), 1);
assert_eq!(intersection.polygons[0], Polygon::from(vec![(1., 0.), (2., 0.), (2., 1.), (1., 1.)]));

// Compute the boolean exclusive-or of the two squares.
// This results in two unconnected polygons. This demonstrates why boolean operations return always
// a `MultiPolygon`.
let intersection = p1.xor(&p2);
assert_eq!(intersection.polygons.len(), 2);

参考

  • 此工作最初基于以下内容进行松散地构建:F. Martinez, A. Rueda, F. Feito, "A new algorithm for computing Boolean operations on polygons", 2013, doi:10.1016/j.advengsoft.2013.04.004

这里实现的算法与参考论文有所不同。最值得注意的是,列表2中第6-9行的排序方式不同,以正确处理垂直重叠边缘。

依赖项

~1.5MB
~29K SLoC