3个不稳定版本
0.1.0 | 2024年6月4日 |
---|---|
0.0.3 | 2022年7月13日 |
0.0.2 | 2021年12月10日 |
#489 在 算法 中
87 每月下载量
在 8 个crate中(直接使用 2 个)
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