From ed00c7e19e80330637ac235429696ff66ca87963 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Fri, 22 Mar 2024 23:33:36 +0100 Subject: [PATCH] Add boundary to `HalfEdgeGeometry` --- crates/fj-core/src/geometry/half_edge.rs | 3 ++ .../fj-core/src/operations/build/half_edge.rs | 28 ++++++++++++++----- crates/fj-core/src/operations/join/cycle.rs | 2 +- crates/fj-core/src/operations/reverse/edge.rs | 7 +++-- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/crates/fj-core/src/geometry/half_edge.rs b/crates/fj-core/src/geometry/half_edge.rs index 4d7e6521a..27af963be 100644 --- a/crates/fj-core/src/geometry/half_edge.rs +++ b/crates/fj-core/src/geometry/half_edge.rs @@ -31,6 +31,9 @@ pub struct HalfEdgeGeometry { /// really belong here. It exists here for practical reasons that are, /// hopefully, temporary. pub path: SurfacePath, + + /// # The boundary of the half-edge on its curve + pub boundary: CurveBoundary>, } impl HalfEdgeGeometry { diff --git a/crates/fj-core/src/operations/build/half_edge.rs b/crates/fj-core/src/operations/build/half_edge.rs index 1b1d67189..63a9cbcb2 100644 --- a/crates/fj-core/src/operations/build/half_edge.rs +++ b/crates/fj-core/src/operations/build/half_edge.rs @@ -68,9 +68,13 @@ pub trait BuildHalfEdge { [arc.start_angle, arc.end_angle].map(|coord| Point::from([coord])); let half_edge = HalfEdge::unjoined(boundary, core).insert(core); - core.layers - .geometry - .define_half_edge(half_edge.clone(), HalfEdgeGeometry { path }); + core.layers.geometry.define_half_edge( + half_edge.clone(), + HalfEdgeGeometry { + path, + boundary: boundary.into(), + }, + ); half_edge } @@ -86,9 +90,13 @@ pub trait BuildHalfEdge { [Scalar::ZERO, Scalar::TAU].map(|coord| Point::from([coord])); let half_edge = HalfEdge::unjoined(boundary, core).insert(core); - core.layers - .geometry - .define_half_edge(half_edge.clone(), HalfEdgeGeometry { path }); + core.layers.geometry.define_half_edge( + half_edge.clone(), + HalfEdgeGeometry { + path, + boundary: boundary.into(), + }, + ); half_edge } @@ -107,7 +115,13 @@ pub trait BuildHalfEdge { HalfEdge::unjoined(boundary, core) .insert(core) - .set_geometry(HalfEdgeGeometry { path }, &mut core.layers.geometry) + .set_geometry( + HalfEdgeGeometry { + path, + boundary: boundary.into(), + }, + &mut core.layers.geometry, + ) } } diff --git a/crates/fj-core/src/operations/join/cycle.rs b/crates/fj-core/src/operations/join/cycle.rs index ce2d26431..82cd9bfc8 100644 --- a/crates/fj-core/src/operations/join/cycle.rs +++ b/crates/fj-core/src/operations/join/cycle.rs @@ -98,7 +98,7 @@ impl JoinCycle for Cycle { ) .insert(core) .set_geometry( - HalfEdgeGeometry { path }, + HalfEdgeGeometry { path, boundary }, &mut core.layers.geometry, ) }) diff --git a/crates/fj-core/src/operations/reverse/edge.rs b/crates/fj-core/src/operations/reverse/edge.rs index 65eecd191..6b8d808d6 100644 --- a/crates/fj-core/src/operations/reverse/edge.rs +++ b/crates/fj-core/src/operations/reverse/edge.rs @@ -21,9 +21,10 @@ impl ReverseCurveCoordinateSystems for Handle { .insert(core) .derive_from(self, core); - core.layers - .geometry - .define_half_edge(half_edge.clone(), HalfEdgeGeometry { path }); + core.layers.geometry.define_half_edge( + half_edge.clone(), + HalfEdgeGeometry { path, boundary }, + ); half_edge }