Merge pull request #2285 from hannobraun/split

Clean up edge splitting code
This commit is contained in:
Hanno Braun 2024-03-23 00:34:23 +01:00 committed by GitHub
commit a811b8b96e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 23 deletions

View File

@ -3,7 +3,7 @@ use fj_math::Point;
use crate::{ use crate::{
objects::{HalfEdge, Shell}, objects::{HalfEdge, Shell},
operations::{ operations::{
derive::DeriveFrom, geometry::UpdateHalfEdgeGeometry, insert::Insert, geometry::UpdateHalfEdgeGeometry, insert::Insert,
replace::ReplaceHalfEdge, split::SplitHalfEdge, update::UpdateHalfEdge, replace::ReplaceHalfEdge, split::SplitHalfEdge, update::UpdateHalfEdge,
}, },
queries::SiblingOfHalfEdge, queries::SiblingOfHalfEdge,
@ -40,11 +40,7 @@ impl SplitEdge for Shell {
.get_sibling_of(half_edge) .get_sibling_of(half_edge)
.expect("Expected half-edge and its sibling to be part of shell"); .expect("Expected half-edge and its sibling to be part of shell");
let [half_edge_a, half_edge_b] = half_edge let [half_edge_a, half_edge_b] = half_edge.split_half_edge(point, core);
.split_half_edge(point, core)
.map(|half_edge_part| {
half_edge_part.insert(core).derive_from(half_edge, core)
});
let siblings = { let siblings = {
let [sibling_a, sibling_b] = sibling.split_half_edge(point, core); let [sibling_a, sibling_b] = sibling.split_half_edge(point, core);
@ -53,22 +49,14 @@ impl SplitEdge for Shell {
|_, _| half_edge_b.start_vertex().clone(), |_, _| half_edge_b.start_vertex().clone(),
core, core,
) )
.insert(core); .insert(core)
[sibling_a, sibling_b].map(|half_edge| { .set_path(
half_edge.insert(core).derive_from(&sibling, core).set_path( core.layers.geometry.of_half_edge(&sibling_b).path,
core.layers.geometry.of_half_edge(&sibling).path,
&mut core.layers.geometry, &mut core.layers.geometry,
) );
})
};
let [half_edge_a, half_edge_b] = [sibling_a, sibling_b]
[half_edge_a, half_edge_b].map(|half_edge_part| { };
half_edge_part.set_path(
core.layers.geometry.of_half_edge(half_edge).path,
&mut core.layers.geometry,
)
});
let shell = self let shell = self
.replace_half_edge( .replace_half_edge(

View File

@ -3,7 +3,7 @@ use fj_math::Point;
use crate::{ use crate::{
geometry::HalfEdgeGeometry, geometry::HalfEdgeGeometry,
objects::{HalfEdge, Vertex}, objects::{HalfEdge, Vertex},
operations::insert::Insert, operations::{derive::DeriveFrom, insert::Insert},
storage::Handle, storage::Handle,
Core, Core,
}; };
@ -48,13 +48,15 @@ impl SplitHalfEdge for Handle<HalfEdge> {
self.curve().clone(), self.curve().clone(),
self.start_vertex().clone(), self.start_vertex().clone(),
) )
.insert(core); .insert(core)
.derive_from(self, core);
let b = HalfEdge::new( let b = HalfEdge::new(
[point, end], [point, end],
self.curve().clone(), self.curve().clone(),
Vertex::new().insert(core), Vertex::new().insert(core),
) )
.insert(core); .insert(core)
.derive_from(self, core);
core.layers.geometry.define_half_edge( core.layers.geometry.define_half_edge(
a.clone(), a.clone(),