From fb9726c51e05c19e6e43f33a9e69eb9c82dc57d7 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 10 Jul 2024 21:52:23 +0200 Subject: [PATCH] Return `Option` from `Geometry::of_half_edge` This makes the method a bit more flexible, which is going to help in the transition away from half-edge geometry. --- crates/fj-core/src/geometry/geometry.rs | 9 +++++---- crates/fj-core/src/operations/build/half_edge.rs | 2 +- crates/fj-core/src/operations/join/cycle.rs | 6 ++++-- crates/fj-core/src/operations/reverse/cycle.rs | 2 +- crates/fj-core/src/operations/reverse/half_edge.rs | 3 ++- crates/fj-core/src/operations/split/edge.rs | 2 +- crates/fj-core/src/operations/split/face.rs | 2 +- crates/fj-core/src/operations/split/half_edge.rs | 2 +- crates/fj-core/src/operations/sweep/cycle.rs | 2 +- crates/fj-core/src/operations/transform/half_edge.rs | 2 +- .../checks/coincident_half_edges_are_not_siblings.rs | 3 ++- .../src/validation/checks/curve_geometry_mismatch.rs | 3 ++- 12 files changed, 22 insertions(+), 16 deletions(-) diff --git a/crates/fj-core/src/geometry/geometry.rs b/crates/fj-core/src/geometry/geometry.rs index bbd04de85..54eb345d1 100644 --- a/crates/fj-core/src/geometry/geometry.rs +++ b/crates/fj-core/src/geometry/geometry.rs @@ -131,10 +131,11 @@ impl Geometry { /// ## Panics /// /// Panics, if the geometry of the half-edge is not defined. - pub fn of_half_edge(&self, half_edge: &Handle) -> &HalfEdgeGeom { - self.half_edge - .get(half_edge) - .expect("Expected geometry of half-edge to be defined") + pub fn of_half_edge( + &self, + half_edge: &Handle, + ) -> Option<&HalfEdgeGeom> { + self.half_edge.get(half_edge) } /// # Access the geometry of the provided surface diff --git a/crates/fj-core/src/operations/build/half_edge.rs b/crates/fj-core/src/operations/build/half_edge.rs index 45202e88b..9f6a9f36e 100644 --- a/crates/fj-core/src/operations/build/half_edge.rs +++ b/crates/fj-core/src/operations/build/half_edge.rs @@ -31,7 +31,7 @@ pub trait BuildHalfEdge { start_vertex: Handle, core: &mut Core, ) -> Handle { - let mut geometry = *core.layers.geometry.of_half_edge(sibling); + let mut geometry = *core.layers.geometry.of_half_edge(sibling).unwrap(); geometry.boundary = geometry.boundary.reverse(); HalfEdge::new(sibling.curve().clone(), start_vertex) diff --git a/crates/fj-core/src/operations/join/cycle.rs b/crates/fj-core/src/operations/join/cycle.rs index 4e18a8412..66312758c 100644 --- a/crates/fj-core/src/operations/join/cycle.rs +++ b/crates/fj-core/src/operations/join/cycle.rs @@ -265,7 +265,8 @@ impl JoinCycle for Cycle { *core .layers .geometry - .of_half_edge(half_edge), + .of_half_edge(half_edge) + .unwrap(), &mut core.layers.geometry, )] }, @@ -304,7 +305,8 @@ impl JoinCycle for Cycle { *core .layers .geometry - .of_half_edge(half_edge), + .of_half_edge(half_edge) + .unwrap(), &mut core.layers.geometry, )] }, diff --git a/crates/fj-core/src/operations/reverse/cycle.rs b/crates/fj-core/src/operations/reverse/cycle.rs index 9bc657251..f01bd72e5 100644 --- a/crates/fj-core/src/operations/reverse/cycle.rs +++ b/crates/fj-core/src/operations/reverse/cycle.rs @@ -15,7 +15,7 @@ impl Reverse for Cycle { .pairs() .map(|(current, next)| { let mut half_edge_geom = - *core.layers.geometry.of_half_edge(current); + *core.layers.geometry.of_half_edge(current).unwrap(); half_edge_geom.boundary = half_edge_geom.boundary.reverse(); HalfEdge::new( diff --git a/crates/fj-core/src/operations/reverse/half_edge.rs b/crates/fj-core/src/operations/reverse/half_edge.rs index a93d5eb6c..f7087e8e4 100644 --- a/crates/fj-core/src/operations/reverse/half_edge.rs +++ b/crates/fj-core/src/operations/reverse/half_edge.rs @@ -35,7 +35,8 @@ impl ReverseCurveCoordinateSystems .unwrap() .clone(); - let mut half_edge_geom = *core.layers.geometry.of_half_edge(half_edge); + let mut half_edge_geom = + *core.layers.geometry.of_half_edge(half_edge).unwrap(); half_edge_geom.boundary = half_edge_geom.boundary.reverse(); let curve = diff --git a/crates/fj-core/src/operations/split/edge.rs b/crates/fj-core/src/operations/split/edge.rs index 8afe3cbd5..0903a2321 100644 --- a/crates/fj-core/src/operations/split/edge.rs +++ b/crates/fj-core/src/operations/split/edge.rs @@ -55,7 +55,7 @@ impl SplitEdge for Shell { ) .insert(core) .set_geometry( - *core.layers.geometry.of_half_edge(&sibling_b), + *core.layers.geometry.of_half_edge(&sibling_b).unwrap(), &mut core.layers.geometry, ); diff --git a/crates/fj-core/src/operations/split/face.rs b/crates/fj-core/src/operations/split/face.rs index c742ac478..17a5f5e01 100644 --- a/crates/fj-core/src/operations/split/face.rs +++ b/crates/fj-core/src/operations/split/face.rs @@ -164,7 +164,7 @@ impl SplitFace for Shell { .update_start_vertex(|_, _| b.start_vertex().clone(), core) .insert(core) .set_geometry( - *core.layers.geometry.of_half_edge(&half_edge), + *core.layers.geometry.of_half_edge(&half_edge).unwrap(), &mut core.layers.geometry, ) }; diff --git a/crates/fj-core/src/operations/split/half_edge.rs b/crates/fj-core/src/operations/split/half_edge.rs index ba9ee5d64..259721e0f 100644 --- a/crates/fj-core/src/operations/split/half_edge.rs +++ b/crates/fj-core/src/operations/split/half_edge.rs @@ -45,7 +45,7 @@ impl SplitHalfEdge for Cycle { ) -> [Handle; 2] { let point = point.into(); - let geometry = *core.layers.geometry.of_half_edge(half_edge); + let geometry = *core.layers.geometry.of_half_edge(half_edge).unwrap(); let [start, end] = [ core.layers .geometry diff --git a/crates/fj-core/src/operations/sweep/cycle.rs b/crates/fj-core/src/operations/sweep/cycle.rs index 28d6cc514..c054910a5 100644 --- a/crates/fj-core/src/operations/sweep/cycle.rs +++ b/crates/fj-core/src/operations/sweep/cycle.rs @@ -82,7 +82,7 @@ impl SweepCycle for Cycle { top_half_edges.push(( swept_half_edge.top_half_edge, swept_half_edge.top_boundary, - *core.layers.geometry.of_half_edge(bottom_half_edge), + *core.layers.geometry.of_half_edge(bottom_half_edge).unwrap(), core.layers .geometry .of_curve(bottom_half_edge.curve()) diff --git a/crates/fj-core/src/operations/transform/half_edge.rs b/crates/fj-core/src/operations/transform/half_edge.rs index 3f2eb6626..e91b1b093 100644 --- a/crates/fj-core/src/operations/transform/half_edge.rs +++ b/crates/fj-core/src/operations/transform/half_edge.rs @@ -32,7 +32,7 @@ impl TransformObject for (&Handle, &Handle) { core.layers.geometry.define_half_edge( transformed_half_edge.clone(), - *core.layers.geometry.of_half_edge(half_edge), + *core.layers.geometry.of_half_edge(half_edge).unwrap(), ); transformed_half_edge diff --git a/crates/fj-core/src/validation/checks/coincident_half_edges_are_not_siblings.rs b/crates/fj-core/src/validation/checks/coincident_half_edges_are_not_siblings.rs index ca13ffd2c..a3c80ff0a 100644 --- a/crates/fj-core/src/validation/checks/coincident_half_edges_are_not_siblings.rs +++ b/crates/fj-core/src/validation/checks/coincident_half_edges_are_not_siblings.rs @@ -318,7 +318,8 @@ mod tests { *core .layers .geometry - .of_half_edge(half_edge), + .of_half_edge(half_edge) + .unwrap(), &mut core.layers.geometry, )] }, diff --git a/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs b/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs index af6efb34e..1b0be3072 100644 --- a/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs +++ b/crates/fj-core/src/validation/checks/curve_geometry_mismatch.rs @@ -227,7 +227,8 @@ mod tests { let mut half_edge_geom = *core .layers .geometry - .of_half_edge(half_edge); + .of_half_edge(half_edge) + .unwrap(); half_edge_geom.boundary = half_edge_geom.boundary.reverse();