diff --git a/experiments/2025-03-18/src/geometry/curve.rs b/experiments/2025-03-18/src/geometry/curve.rs index f7565d9e1..9f3898c1c 100644 --- a/experiments/2025-03-18/src/geometry/curve.rs +++ b/experiments/2025-03-18/src/geometry/curve.rs @@ -1,10 +1,15 @@ -use fj_math::{Line, Transform, Vector}; +use fj_math::{Line, Point, Transform, Vector}; pub trait CurveGeometry { + fn point_from_local(&self, point: Point<1>) -> Point<3>; fn translate(&self, offset: Vector<3>) -> Box; } impl CurveGeometry for Line<3> { + fn point_from_local(&self, point: Point<1>) -> Point<3> { + self.point_from_line_coords(point) + } + fn translate(&self, offset: Vector<3>) -> Box { let translated = self.transform(&Transform::translation(offset)); Box::new(translated) diff --git a/experiments/2025-03-18/src/geometry/swept_curve.rs b/experiments/2025-03-18/src/geometry/swept_curve.rs index 5f385b00c..c29f777b8 100644 --- a/experiments/2025-03-18/src/geometry/swept_curve.rs +++ b/experiments/2025-03-18/src/geometry/swept_curve.rs @@ -1,5 +1,7 @@ use fj_math::{Line, Point, Transform, Vector}; +use super::CurveGeometry; + pub struct SweptCurve { pub curve: Line<3>, pub path: Vector<3>, @@ -29,7 +31,7 @@ impl SweptCurve { pub fn point_from_local(&self, point: impl Into>) -> Point<3> { let [u, v] = point.into().coords.components; - self.curve.point_from_line_coords(Point::from([u])) + self.v() * v + self.curve.point_from_local(Point::from([u])) + self.v() * v } pub fn project_point(&self, point: impl Into>) -> Point<2> {