mirror of
https://github.com/hannobraun/Fornjot
synced 2025-11-22 15:32:24 +00:00
Remove curve boundary from HalfEdge
This commit is contained in:
parent
f1a6e63260
commit
4740b3bdb6
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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(),
|
||||
)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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]
|
||||
}
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -462,7 +462,6 @@ mod tests {
|
||||
geometry.boundary.reverse();
|
||||
|
||||
[HalfEdge::new(
|
||||
half_edge.boundary().reverse(),
|
||||
half_edge.curve().clone(),
|
||||
half_edge.start_vertex().clone(),
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user