1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use fj_math::Transform;

use crate::{
    objects::Surface, operations::insert::Insert, storage::Handle, Core,
};

use super::{TransformCache, TransformObject};

impl TransformObject for Handle<Surface> {
    fn transform_with_cache(
        &self,
        transform: &Transform,
        core: &mut Core,
        cache: &mut TransformCache,
    ) -> Self {
        cache
            .entry(self)
            .or_insert_with(|| {
                let surface = Surface::new().insert(core);

                let geometry =
                    core.layers.geometry.of_surface(self).transform(transform);
                core.layers
                    .geometry
                    .define_surface(surface.clone(), geometry);

                surface
            })
            .clone()
    }
}