fj_operations/
transform.rs1use 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}