Remove curve boundary from HalfEdge

This commit is contained in:
Hanno Braun 2024-03-23 01:13:55 +01:00
parent f1a6e63260
commit 4740b3bdb6
8 changed files with 26 additions and 60 deletions

View File

@ -1,7 +1,4 @@
use fj_math::Point;
use crate::{
geometry::CurveBoundary,
objects::{Curve, Vertex},
storage::Handle,
};
@ -35,30 +32,19 @@ use crate::{
/// [`Shell`]: crate::objects::Shell
#[derive(Clone, Debug)]
pub struct HalfEdge {
boundary: CurveBoundary<Point<1>>,
curve: Handle<Curve>,
start_vertex: Handle<Vertex>,
}
impl HalfEdge {
/// Create an instance of `Edge`
pub fn new(
boundary: impl Into<CurveBoundary<Point<1>>>,
curve: Handle<Curve>,
start_vertex: Handle<Vertex>,
) -> Self {
pub fn new(curve: Handle<Curve>, start_vertex: Handle<Vertex>) -> Self {
Self {
boundary: boundary.into(),
curve,
start_vertex,
}
}
/// Access the boundary points of the edge on the curve
pub fn boundary(&self) -> CurveBoundary<Point<1>> {
self.boundary
}
/// Access the curve of the edge
pub fn curve(&self) -> &Handle<Curve> {
&self.curve

View File

@ -17,13 +17,13 @@ use crate::{
pub trait BuildHalfEdge {
/// Create a half-edge that is not joined to a sibling
fn unjoined(
boundary: impl Into<CurveBoundary<Point<1>>>,
_: impl Into<CurveBoundary<Point<1>>>,
core: &mut Core,
) -> HalfEdge {
let curve = Curve::new().insert(core);
let start_vertex = Vertex::new().insert(core);
HalfEdge::new(boundary, curve, start_vertex)
HalfEdge::new(curve, start_vertex)
}
/// Create a half-edge from its sibling
@ -35,13 +35,9 @@ pub trait BuildHalfEdge {
let mut geometry = core.layers.geometry.of_half_edge(sibling);
geometry.boundary = geometry.boundary.reverse();
HalfEdge::new(
sibling.boundary().reverse(),
sibling.curve().clone(),
start_vertex,
)
.insert(core)
.set_geometry(geometry, &mut core.layers.geometry)
HalfEdge::new(sibling.curve().clone(), start_vertex)
.insert(core)
.set_geometry(geometry, &mut core.layers.geometry)
}
/// Create an arc

View File

@ -18,7 +18,6 @@ impl Reverse for Cycle {
geometry.boundary = geometry.boundary.reverse();
HalfEdge::new(
current.boundary().reverse(),
current.curve().clone(),
next.start_vertex().clone(),
)

View File

@ -13,13 +13,10 @@ impl ReverseCurveCoordinateSystems for Handle<HalfEdge> {
geometry.path = geometry.path.reverse();
geometry.boundary = geometry.boundary.reverse();
let half_edge = HalfEdge::new(
geometry.boundary,
self.curve().clone(),
self.start_vertex().clone(),
)
.insert(core)
.derive_from(self, core);
let half_edge =
HalfEdge::new(self.curve().clone(), self.start_vertex().clone())
.insert(core)
.derive_from(self, core);
core.layers
.geometry

View File

@ -45,28 +45,21 @@ impl SplitHalfEdge for Handle<HalfEdge> {
let geometry = core.layers.geometry.of_half_edge(self);
let [start, end] = geometry.boundary.inner;
let a = HalfEdge::new(
[start, point],
self.curve().clone(),
self.start_vertex().clone(),
)
.insert(core)
.derive_from(self, core)
.set_geometry(
geometry.with_boundary([start, point]),
&mut core.layers.geometry,
);
let b = HalfEdge::new(
[point, end],
self.curve().clone(),
Vertex::new().insert(core),
)
.insert(core)
.derive_from(self, core)
.set_geometry(
geometry.with_boundary([point, end]),
&mut core.layers.geometry,
);
let a =
HalfEdge::new(self.curve().clone(), self.start_vertex().clone())
.insert(core)
.derive_from(self, core)
.set_geometry(
geometry.with_boundary([start, point]),
&mut core.layers.geometry,
);
let b = HalfEdge::new(self.curve().clone(), Vertex::new().insert(core))
.insert(core)
.derive_from(self, core)
.set_geometry(
geometry.with_boundary([point, end]),
&mut core.layers.geometry,
);
[a, b]
}

View File

@ -13,7 +13,6 @@ impl TransformObject for Handle<HalfEdge> {
core: &mut Core,
cache: &mut TransformCache,
) -> Self {
let boundary = self.boundary();
let curve = self
.curve()
.clone()
@ -23,8 +22,7 @@ impl TransformObject for Handle<HalfEdge> {
.clone()
.transform_with_cache(transform, core, cache);
let half_edge =
HalfEdge::new(boundary, curve, start_vertex).insert(core);
let half_edge = HalfEdge::new(curve, start_vertex).insert(core);
core.layers.geometry.define_half_edge(
half_edge.clone(),

View File

@ -38,7 +38,6 @@ impl UpdateHalfEdge for HalfEdge {
T: Insert<Inserted = Handle<Curve>>,
{
HalfEdge::new(
self.boundary(),
update(self.curve(), core)
.insert(core)
.derive_from(self.curve(), core),
@ -55,7 +54,6 @@ impl UpdateHalfEdge for HalfEdge {
T: Insert<Inserted = Handle<Vertex>>,
{
HalfEdge::new(
self.boundary(),
self.curve().clone(),
update(self.start_vertex(), core)
.insert(core)

View File

@ -462,7 +462,6 @@ mod tests {
geometry.boundary.reverse();
[HalfEdge::new(
half_edge.boundary().reverse(),
half_edge.curve().clone(),
half_edge.start_vertex().clone(),
)