Skip to main content

kasane_logic/geometry/shapes/solid/
geometry_relation.rs

1use crate::{
2    Coordinate, IntoCoordinates, IntoLines, IntoPolygons, IntoTriangles, Line, Polygon, Solid,
3    Triangle,
4};
5
6impl IntoCoordinates for Solid {
7    fn into_coordinates(self) -> impl Iterator<Item = Coordinate> {
8        self.polygons
9            .into_iter()
10            .flat_map(|polygon| polygon.into_coordinates())
11    }
12
13    fn iter_coordinates(&self) -> impl Iterator<Item = Coordinate> {
14        self.polygons
15            .iter()
16            .flat_map(|polygon| polygon.iter_coordinates())
17    }
18}
19
20impl IntoLines for Solid {
21    fn into_lines(self) -> impl Iterator<Item = Line> {
22        self.polygons
23            .into_iter()
24            .flat_map(|polygon| polygon.into_lines())
25    }
26
27    fn iter_lines(&self) -> impl Iterator<Item = Line> {
28        self.polygons
29            .iter()
30            .flat_map(|polygon| polygon.iter_lines())
31    }
32}
33
34impl IntoTriangles for Solid {
35    fn into_triangles(self) -> impl Iterator<Item = Triangle> {
36        self.polygons
37            .into_iter()
38            .flat_map(|polygon| polygon.into_triangles())
39    }
40
41    fn iter_triangles(&self) -> impl Iterator<Item = Triangle> {
42        self.polygons
43            .iter()
44            .flat_map(|polygon| polygon.iter_triangles())
45    }
46}
47
48impl IntoPolygons for Solid {
49    fn into_polygons(self) -> impl Iterator<Item = Polygon> {
50        self.polygons.into_iter()
51    }
52
53    fn iter_polygons(&self) -> impl Iterator<Item = Polygon> {
54        self.polygons.clone().into_iter()
55    }
56}