From 475fc027ba76fda171a07169a5fc1d09c9fd7b8b Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 14 Apr 2025 13:54:47 +0200 Subject: [PATCH] Extract more code into `VerticesFromSegments` --- experiments/2025-03-18/src/geometry/sketch.rs | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/experiments/2025-03-18/src/geometry/sketch.rs b/experiments/2025-03-18/src/geometry/sketch.rs index 3d58cfc6c..9c4f1380b 100644 --- a/experiments/2025-03-18/src/geometry/sketch.rs +++ b/experiments/2025-03-18/src/geometry/sketch.rs @@ -37,25 +37,15 @@ impl Sketch { pub fn to_face(&self, surface: Handle) -> Face { let vertices = VerticesFromSegments::new(&self.segments, &surface); - let half_edges = - vertices.vertices.into_iter().circular_tuple_windows().map( - |(start, end)| { - let curve = - Handle::new(Curve::line_from_vertices([&start, &end])); + let half_edges = vertices.iter().map(|([start, end], is_internal)| { + let curve = Handle::new(Curve::line_from_vertices([&start, &end])); - let [start_is_coincident, end_is_coincident] = - [&start, &end].map(|vertex| { - vertices.coincident_vertices.contains(vertex) - }); - let is_internal = start_is_coincident && end_is_coincident; - - Handle::new(HalfEdge { - curve, - start, - is_internal, - }) - }, - ); + Handle::new(HalfEdge { + curve, + start, + is_internal, + }) + }); Face::new(surface, half_edges, false) } @@ -115,4 +105,16 @@ impl VerticesFromSegments { coincident_vertices, } } + + fn iter(&self) -> impl Iterator; 2], bool)> { + self.vertices.iter().cloned().circular_tuple_windows().map( + |(start, end)| { + let [start_is_coincident, end_is_coincident] = [&start, &end] + .map(|vertex| self.coincident_vertices.contains(vertex)); + let is_internal = start_is_coincident && end_is_coincident; + + ([start, end], is_internal) + }, + ) + } }