diff --git a/crates/fj-core/src/operations/split/edge.rs b/crates/fj-core/src/operations/split/edge.rs index 80cc3c778..bd669e921 100644 --- a/crates/fj-core/src/operations/split/edge.rs +++ b/crates/fj-core/src/operations/split/edge.rs @@ -43,7 +43,8 @@ impl SplitEdge for Shell { let [half_edge_a, half_edge_b] = half_edge.split_half_edge(point, core); let siblings = { - let [sibling_a, sibling_b] = sibling.split_half_edge(point, core); + let [sibling_a, sibling_b] = + sibling.sibling.split_half_edge(point, core); let sibling_b = sibling_b .update_start_vertex( |_, _| half_edge_b.start_vertex().clone(), @@ -65,7 +66,7 @@ impl SplitEdge for Shell { core, ) .into_inner() - .replace_half_edge(&sibling, siblings.clone(), core) + .replace_half_edge(&sibling.sibling, siblings.clone(), core) .into_inner(); (shell, [[half_edge_a, half_edge_b], siblings]) diff --git a/crates/fj-core/src/queries/mod.rs b/crates/fj-core/src/queries/mod.rs index 6f6488caf..ef15e3073 100644 --- a/crates/fj-core/src/queries/mod.rs +++ b/crates/fj-core/src/queries/mod.rs @@ -16,5 +16,5 @@ mod sibling_of_half_edge; pub use self::{ all_half_edges_with_surface::AllHalfEdgesWithSurface, bounding_vertices_of_half_edge::BoundingVerticesOfHalfEdge, - sibling_of_half_edge::SiblingOfHalfEdge, + sibling_of_half_edge::{Sibling, SiblingOfHalfEdge}, }; diff --git a/crates/fj-core/src/queries/sibling_of_half_edge.rs b/crates/fj-core/src/queries/sibling_of_half_edge.rs index 52c30758d..cf2036513 100644 --- a/crates/fj-core/src/queries/sibling_of_half_edge.rs +++ b/crates/fj-core/src/queries/sibling_of_half_edge.rs @@ -15,10 +15,7 @@ pub trait SiblingOfHalfEdge { /// Returns `None`, if the provided half-edge is not part of the object this /// method is called on, or if the provided half-edge has no sibling within /// the object. - fn get_sibling_of( - &self, - half_edge: &Handle, - ) -> Option>; + fn get_sibling_of(&self, half_edge: &Handle) -> Option; } impl SiblingOfHalfEdge for Shell { @@ -40,15 +37,12 @@ impl SiblingOfHalfEdge for Shell { same_curve && same_vertices } - fn get_sibling_of( - &self, - half_edge: &Handle, - ) -> Option> { + fn get_sibling_of(&self, half_edge: &Handle) -> Option { for face in self.faces() { for cycle in face.region().all_cycles() { for h in cycle.half_edges() { if self.are_siblings(half_edge, h) { - return Some(h.clone()); + return Some(Sibling { sibling: h.clone() }); } } } @@ -57,3 +51,9 @@ impl SiblingOfHalfEdge for Shell { None } } + +/// The sibling of a half-edge, plus some extra information +pub struct Sibling { + /// The sibling + pub sibling: Handle, +}