Skip to main content

clipper2_sys/clipperd/
path.rs

1use crate::PointD;
2
3/// Double-precision polyline / polygon (`PathD`).
4///
5/// 双精度折线或闭合轮廓(`PathD`)。
6///
7/// See [`crate::Path64`] for the parallel integer API. / 与 [`crate::Path64`] 为对偶关系。
8#[derive(Clone, Debug, Default)]
9pub struct PathD(pub(crate) Vec<PointD>);
10
11impl_path_geom!(float, PathD, PointD);
12
13#[cfg(test)]
14mod tests {
15    use crate::{PathD, PointD};
16
17    #[test]
18    fn new_translate_scale() {
19        let p = PathD::new(vec![
20            PointD::new(0.0, 0.0),
21            PointD::new(1.0, 0.0),
22            PointD::new(1.0, 1.0),
23        ]);
24        assert_eq!(p.len(), 3);
25        let t = p.translate(2.5, -0.5);
26        assert!((t.get_point(0).x - 2.5).abs() < 1e-9);
27    }
28
29    #[test]
30    fn iter_sum_x() {
31        let p = PathD::new(vec![PointD::new(1.0, 0.0), PointD::new(0.5, 1.0)]);
32        let s: f64 = p.iter().map(|q| q.x).sum();
33        assert!((s - 1.5).abs() < 1e-9);
34        let n = (&p).into_iter().count();
35        assert_eq!(n, 2);
36    }
37}