fj_kernel/algorithms/transform/
face.rs

1use fj_math::Transform;
2
3use crate::{
4    objects::{Face, FaceSet},
5    services::Services,
6};
7
8use super::{TransformCache, TransformObject};
9
10impl TransformObject for Face {
11    fn transform_with_cache(
12        self,
13        transform: &Transform,
14        services: &mut Services,
15        cache: &mut TransformCache,
16    ) -> Self {
17        // Color does not need to be transformed.
18        let color = self.color();
19
20        let surface = self
21            .surface()
22            .clone()
23            .transform_with_cache(transform, services, cache);
24        let exterior = self
25            .exterior()
26            .clone()
27            .transform_with_cache(transform, services, cache);
28        let interiors = self.interiors().cloned().map(|interior| {
29            interior.transform_with_cache(transform, services, cache)
30        });
31
32        Self::new(surface, exterior, interiors, color)
33    }
34}
35
36impl TransformObject for FaceSet {
37    fn transform_with_cache(
38        self,
39        transform: &Transform,
40        services: &mut Services,
41        cache: &mut TransformCache,
42    ) -> Self {
43        let mut faces = Self::new();
44        faces.extend(
45            self.into_iter().map(|face| {
46                face.transform_with_cache(transform, services, cache)
47            }),
48        );
49        faces
50    }
51}