mirror of
https://github.com/hannobraun/Fornjot
synced 2025-05-09 20:38:30 +00:00
Merge pull request #2285 from hannobraun/split
Clean up edge splitting code
This commit is contained in:
commit
a811b8b96e
@ -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(
|
||||||
|
@ -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(),
|
||||||
|
Loading…
Reference in New Issue
Block a user