Skip to main content

clipper2_sys/clipper64/
path.rs

1use crate::Point64;
2
3/// Integer grid polyline / polygon ring (`Path64`), backed by `Vec<Point64>`.
4///
5/// 整数坐标折线或闭合轮廓(`Path64`),内部为 `Vec<Point64>`。
6///
7/// # Geometry helpers / 几何辅组
8///
9/// - [`Path64::new`], [`Path64::from_vec`] — construct / 构造  
10/// - [`Path64::translate`], [`Path64::scale`] — transform (integer deltas / float scale) / 平移与缩放  
11/// - [`Path64::iter`], [`Path64::len`], [`Path64::get_point`] — access / 访问  
12///
13/// Clipper-related methods (`simplify`, `area`, …) are on the same `Path64` type in `clipper64/mod.rs`
14/// (re-exported at the crate root).
15///
16/// 与 Clipper 相关的方法(`simplify`、`area` 等)在同一 `Path64` 上于 `clipper64/mod.rs` 中实现(并在 crate 根再导出)。
17#[derive(Clone, Debug, Default)]
18pub struct Path64(pub(crate) Vec<Point64>);
19
20impl_path_geom!(int64, Path64, Point64);
21
22#[cfg(test)]
23mod tests {
24    use crate::{Path64, Point64};
25
26    #[test]
27    fn new_translate_scale_len() {
28        let p = Path64::new(vec![
29            Point64::new(0, 0),
30            Point64::new(10, 0),
31            Point64::new(10, 10),
32        ]);
33        assert_eq!(p.len(), 3);
34        let t = p.translate(5, -1);
35        let p0 = t.get_point(0);
36        assert_eq!(p0.x, 5);
37        assert_eq!(p0.y, -1);
38        let s = p.scale(2.0, 2.0);
39        let p1 = s.get_point(1);
40        assert_eq!(p1.x, 20);
41        assert_eq!(p1.y, 0);
42    }
43
44    #[test]
45    fn iter_and_for_in_by_ref() {
46        let p = Path64::new(vec![Point64::new(1, 2), Point64::new(3, 4)]);
47        let s: i64 = p.iter().map(|q| q.x + q.y).sum();
48        assert_eq!(s, 10);
49        let t: i64 = (&p).into_iter().map(|q| q.x).sum();
50        assert_eq!(t, 4);
51    }
52}