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.
This commit is contained in:
Hanno Braun 2023-01-27 14:52:33 +01:00
parent b04638ea0a
commit 819001eb0b
2 changed files with 13 additions and 7 deletions

View File

@ -17,7 +17,7 @@ use crate::{
use super::{Sweep, SweepCache}; use super::{Sweep, SweepCache};
impl Sweep for (Handle<HalfEdge>, Color) { impl Sweep for (Handle<HalfEdge>, Color) {
type Swept = Handle<Face>; type Swept = (Handle<Face>, Handle<HalfEdge>);
fn sweep_with_cache( fn sweep_with_cache(
self, self,
@ -137,7 +137,7 @@ impl Sweep for (Handle<HalfEdge>, Color) {
let cycle = { let cycle = {
let a = bottom_edge; let a = bottom_edge;
let [d, b] = side_edges; let [d, b] = side_edges;
let c = top_edge; let c = top_edge.clone();
let mut edges = [a, b, c, d]; let mut edges = [a, b, c, d];
@ -167,7 +167,9 @@ impl Sweep for (Handle<HalfEdge>, Color) {
color: Some(color), color: Some(color),
..Default::default() ..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) .insert(&mut services.objects)
}; };
let face = (half_edge, Color::default()) let (face, _) = (half_edge, Color::default())
.sweep([0., 0., 1.], &mut services.objects); .sweep([0., 0., 1.], &mut services.objects);
let expected_face = { let expected_face = {

View File

@ -65,7 +65,7 @@ impl Sweep for Handle<Face> {
let cycle = cycle.reverse(objects); let cycle = cycle.reverse(objects);
for half_edge in cycle.half_edges().cloned() { 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); .sweep_with_cache(path, cache, objects);
faces.push(face); faces.push(face);
@ -155,7 +155,9 @@ mod tests {
.build(&mut services.objects) .build(&mut services.objects)
.insert(&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 assert!(side_faces
@ -222,7 +224,9 @@ mod tests {
.insert(&mut services.objects) .insert(&mut services.objects)
.reverse(&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 assert!(side_faces