From 819001eb0bcdfd583c67ed4dd60d68d7d3491007 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 27 Jan 2023 14:52:33 +0100 Subject: [PATCH] Return top edge from half-edge sweep This is going to be required in the face sweep code, to make sure the top of the solid is properly stitched up with the sides. --- crates/fj-kernel/src/algorithms/sweep/edge.rs | 10 ++++++---- crates/fj-kernel/src/algorithms/sweep/face.rs | 10 +++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/crates/fj-kernel/src/algorithms/sweep/edge.rs b/crates/fj-kernel/src/algorithms/sweep/edge.rs index c370e01c0..cb56f1fbd 100644 --- a/crates/fj-kernel/src/algorithms/sweep/edge.rs +++ b/crates/fj-kernel/src/algorithms/sweep/edge.rs @@ -17,7 +17,7 @@ use crate::{ use super::{Sweep, SweepCache}; impl Sweep for (Handle, Color) { - type Swept = Handle; + type Swept = (Handle, Handle); fn sweep_with_cache( self, @@ -137,7 +137,7 @@ impl Sweep for (Handle, Color) { let cycle = { let a = bottom_edge; let [d, b] = side_edges; - let c = top_edge; + let c = top_edge.clone(); let mut edges = [a, b, c, d]; @@ -167,7 +167,9 @@ impl Sweep for (Handle, Color) { color: Some(color), ..Default::default() }; - face.build(objects).insert(objects) + let face = face.build(objects).insert(objects); + + (face, top_edge) } } @@ -202,7 +204,7 @@ mod tests { .insert(&mut services.objects) }; - let face = (half_edge, Color::default()) + let (face, _) = (half_edge, Color::default()) .sweep([0., 0., 1.], &mut services.objects); let expected_face = { diff --git a/crates/fj-kernel/src/algorithms/sweep/face.rs b/crates/fj-kernel/src/algorithms/sweep/face.rs index 7cf5188df..4a00335db 100644 --- a/crates/fj-kernel/src/algorithms/sweep/face.rs +++ b/crates/fj-kernel/src/algorithms/sweep/face.rs @@ -65,7 +65,7 @@ impl Sweep for Handle { let cycle = cycle.reverse(objects); for half_edge in cycle.half_edges().cloned() { - let face = (half_edge, self.color()) + let (face, _) = (half_edge, self.color()) .sweep_with_cache(path, cache, objects); faces.push(face); @@ -155,7 +155,9 @@ mod tests { .build(&mut services.objects) .insert(&mut services.objects) }; - (half_edge, Color::default()).sweep(UP, &mut services.objects) + let (face, _) = + (half_edge, Color::default()).sweep(UP, &mut services.objects); + face }); assert!(side_faces @@ -222,7 +224,9 @@ mod tests { .insert(&mut services.objects) .reverse(&mut services.objects) }; - (half_edge, Color::default()).sweep(DOWN, &mut services.objects) + let (face, _) = (half_edge, Color::default()) + .sweep(DOWN, &mut services.objects); + face }); assert!(side_faces