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};
impl Sweep for (Handle<HalfEdge>, Color) {
type Swept = Handle<Face>;
type Swept = (Handle<Face>, Handle<HalfEdge>);
fn sweep_with_cache(
self,
@ -137,7 +137,7 @@ impl Sweep for (Handle<HalfEdge>, 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<HalfEdge>, 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 = {

View File

@ -65,7 +65,7 @@ impl Sweep for Handle<Face> {
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