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.
This commit is contained in:
Hanno Braun 2024-07-10 21:52:23 +02:00
parent f3aff3baa6
commit fb9726c51e
12 changed files with 22 additions and 16 deletions

View File

@ -131,10 +131,11 @@ impl Geometry {
/// ## Panics /// ## Panics
/// ///
/// Panics, if the geometry of the half-edge is not defined. /// Panics, if the geometry of the half-edge is not defined.
pub fn of_half_edge(&self, half_edge: &Handle<HalfEdge>) -> &HalfEdgeGeom { pub fn of_half_edge(
self.half_edge &self,
.get(half_edge) half_edge: &Handle<HalfEdge>,
.expect("Expected geometry of half-edge to be defined") ) -> Option<&HalfEdgeGeom> {
self.half_edge.get(half_edge)
} }
/// # Access the geometry of the provided surface /// # Access the geometry of the provided surface

View File

@ -31,7 +31,7 @@ pub trait BuildHalfEdge {
start_vertex: Handle<Vertex>, start_vertex: Handle<Vertex>,
core: &mut Core, core: &mut Core,
) -> Handle<HalfEdge> { ) -> Handle<HalfEdge> {
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(); geometry.boundary = geometry.boundary.reverse();
HalfEdge::new(sibling.curve().clone(), start_vertex) HalfEdge::new(sibling.curve().clone(), start_vertex)

View File

@ -265,7 +265,8 @@ impl JoinCycle for Cycle {
*core *core
.layers .layers
.geometry .geometry
.of_half_edge(half_edge), .of_half_edge(half_edge)
.unwrap(),
&mut core.layers.geometry, &mut core.layers.geometry,
)] )]
}, },
@ -304,7 +305,8 @@ impl JoinCycle for Cycle {
*core *core
.layers .layers
.geometry .geometry
.of_half_edge(half_edge), .of_half_edge(half_edge)
.unwrap(),
&mut core.layers.geometry, &mut core.layers.geometry,
)] )]
}, },

View File

@ -15,7 +15,7 @@ impl Reverse for Cycle {
.pairs() .pairs()
.map(|(current, next)| { .map(|(current, next)| {
let mut half_edge_geom = 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(); half_edge_geom.boundary = half_edge_geom.boundary.reverse();
HalfEdge::new( HalfEdge::new(

View File

@ -35,7 +35,8 @@ impl ReverseCurveCoordinateSystems
.unwrap() .unwrap()
.clone(); .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(); half_edge_geom.boundary = half_edge_geom.boundary.reverse();
let curve = let curve =

View File

@ -55,7 +55,7 @@ impl SplitEdge for Shell {
) )
.insert(core) .insert(core)
.set_geometry( .set_geometry(
*core.layers.geometry.of_half_edge(&sibling_b), *core.layers.geometry.of_half_edge(&sibling_b).unwrap(),
&mut core.layers.geometry, &mut core.layers.geometry,
); );

View File

@ -164,7 +164,7 @@ impl SplitFace for Shell {
.update_start_vertex(|_, _| b.start_vertex().clone(), core) .update_start_vertex(|_, _| b.start_vertex().clone(), core)
.insert(core) .insert(core)
.set_geometry( .set_geometry(
*core.layers.geometry.of_half_edge(&half_edge), *core.layers.geometry.of_half_edge(&half_edge).unwrap(),
&mut core.layers.geometry, &mut core.layers.geometry,
) )
}; };

View File

@ -45,7 +45,7 @@ impl SplitHalfEdge for Cycle {
) -> [Handle<HalfEdge>; 2] { ) -> [Handle<HalfEdge>; 2] {
let point = point.into(); 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] = [ let [start, end] = [
core.layers core.layers
.geometry .geometry

View File

@ -82,7 +82,7 @@ impl SweepCycle for Cycle {
top_half_edges.push(( top_half_edges.push((
swept_half_edge.top_half_edge, swept_half_edge.top_half_edge,
swept_half_edge.top_boundary, 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 core.layers
.geometry .geometry
.of_curve(bottom_half_edge.curve()) .of_curve(bottom_half_edge.curve())

View File

@ -32,7 +32,7 @@ impl TransformObject for (&Handle<HalfEdge>, &Handle<Surface>) {
core.layers.geometry.define_half_edge( core.layers.geometry.define_half_edge(
transformed_half_edge.clone(), transformed_half_edge.clone(),
*core.layers.geometry.of_half_edge(half_edge), *core.layers.geometry.of_half_edge(half_edge).unwrap(),
); );
transformed_half_edge transformed_half_edge

View File

@ -318,7 +318,8 @@ mod tests {
*core *core
.layers .layers
.geometry .geometry
.of_half_edge(half_edge), .of_half_edge(half_edge)
.unwrap(),
&mut core.layers.geometry, &mut core.layers.geometry,
)] )]
}, },

View File

@ -227,7 +227,8 @@ mod tests {
let mut half_edge_geom = *core let mut half_edge_geom = *core
.layers .layers
.geometry .geometry
.of_half_edge(half_edge); .of_half_edge(half_edge)
.unwrap();
half_edge_geom.boundary = half_edge_geom.boundary =
half_edge_geom.boundary.reverse(); half_edge_geom.boundary.reverse();