diff --git a/experiments/2025-03-18/src/geometry/swept_curve.rs b/experiments/2025-03-18/src/geometry/swept_curve.rs index 0326fef7f..7e6a3c87c 100644 --- a/experiments/2025-03-18/src/geometry/swept_curve.rs +++ b/experiments/2025-03-18/src/geometry/swept_curve.rs @@ -8,6 +8,21 @@ pub struct SweptCurve { } impl SweptCurve { + pub fn plane_from_coord_system( + origin: impl Into>, + axes: [impl Into>; 2], + ) -> Self { + let origin = origin.into(); + let [u, v] = axes.map(Into::into); + + let line = Line::from_origin_and_direction(origin, u); + + Self { + curve: Box::new(line), + path: v, + } + } + pub fn plane_from_points(points: [impl Into>; 3]) -> Self { let [a, b, c] = points.map(Into::into); @@ -63,11 +78,10 @@ mod tests { #[test] fn project_point() { - let plane = SweptCurve::plane_from_points([ + let plane = SweptCurve::plane_from_coord_system( [1., 1., 1.], - [2., 1., 1.], - [1., 2., 1.], - ]); + [[1., 0., 0.], [0., 1., 0.]], + ); assert_eq!(plane.project_point([2., 2., 2.]), Point::from([1., 1.])); } diff --git a/experiments/2025-03-18/src/model.rs b/experiments/2025-03-18/src/model.rs index 9aed7ed31..108a42b2a 100644 --- a/experiments/2025-03-18/src/model.rs +++ b/experiments/2025-03-18/src/model.rs @@ -29,11 +29,10 @@ pub fn model(viewer: &Viewer) -> TriMesh { // we're done here. let surface = Handle::new(Surface { - geometry: Box::new(SweptCurve::plane_from_points([ + geometry: Box::new(SweptCurve::plane_from_coord_system( [0., 0., 1.], - [1., 0., 1.], - [0., 1., 1.], - ])), + [[1., 0., 0.], [0., 1., 0.]], + )), }); let face = sketch.to_face(surface);