fj_operations/
transform.rs

1use fj_interop::debug::DebugInfo;
2use fj_kernel::{
3    algorithms::transform::TransformObject, objects::FaceSet,
4    services::Services,
5};
6use fj_math::{Aabb, Transform, Vector};
7
8use super::Shape;
9
10impl Shape for fj::Transform {
11    type Brep = FaceSet;
12
13    fn compute_brep(
14        &self,
15        services: &mut Services,
16        debug_info: &mut DebugInfo,
17    ) -> Self::Brep {
18        self.shape
19            .compute_brep(services, debug_info)
20            .transform(&make_transform(self), services)
21    }
22
23    fn bounding_volume(&self) -> Aabb<3> {
24        make_transform(self).transform_aabb(&self.shape.bounding_volume())
25    }
26}
27
28fn make_transform(transform: &fj::Transform) -> Transform {
29    let axis = Vector::from(transform.axis).normalize();
30    Transform::translation(transform.offset)
31        * Transform::rotation(axis * transform.angle.rad())
32}