From c267df6cff1f0400efb4f9bf0f4ad96bc71f2ef6 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:06:18 +0200 Subject: [PATCH 1/6] Simplify `make_line_on_surface` --- crates/fj-core/src/operations/build/half_edge.rs | 11 +++++------ crates/fj-core/src/operations/build/shell.rs | 2 +- crates/fj-core/src/operations/geometry/curve.rs | 5 ++--- crates/fj-core/src/operations/sweep/half_edge.rs | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/fj-core/src/operations/build/half_edge.rs b/crates/fj-core/src/operations/build/half_edge.rs index e1c6074ce..bdf1abf64 100644 --- a/crates/fj-core/src/operations/build/half_edge.rs +++ b/crates/fj-core/src/operations/build/half_edge.rs @@ -87,6 +87,8 @@ pub trait BuildHalfEdge { surface: Handle, core: &mut Core, ) -> Handle { + let boundary = boundary.unwrap_or_default(); + let half_edge = HalfEdge::unjoined(core).insert(core); half_edge.curve().clone().make_line_on_surface( @@ -96,12 +98,9 @@ pub trait BuildHalfEdge { &mut core.layers.geometry, ); - core.layers.geometry.define_half_edge( - half_edge.clone(), - HalfEdgeGeom { - boundary: boundary.unwrap_or_default(), - }, - ); + core.layers + .geometry + .define_half_edge(half_edge.clone(), HalfEdgeGeom { boundary }); half_edge } diff --git a/crates/fj-core/src/operations/build/shell.rs b/crates/fj-core/src/operations/build/shell.rs index c0d94e47a..9062dccb3 100644 --- a/crates/fj-core/src/operations/build/shell.rs +++ b/crates/fj-core/src/operations/build/shell.rs @@ -92,7 +92,7 @@ pub trait BuildShell { let curve = curve.make_line_on_surface( positions, - Some(boundary), + boundary, surface.clone(), &mut core.layers.geometry, ); diff --git a/crates/fj-core/src/operations/geometry/curve.rs b/crates/fj-core/src/operations/geometry/curve.rs index b4ccf2755..8418fe4a8 100644 --- a/crates/fj-core/src/operations/geometry/curve.rs +++ b/crates/fj-core/src/operations/geometry/curve.rs @@ -35,7 +35,7 @@ pub trait UpdateCurveGeometry { fn make_line_on_surface( self, points_surface: [impl Into>; 2], - points_curve: Option>>, + points_curve: CurveBoundary>, surface: Handle, geometry: &mut Layer, ) -> Self; @@ -71,11 +71,10 @@ impl UpdateCurveGeometry for Handle { fn make_line_on_surface( self, points_surface: [impl Into>; 2], - points_curve: Option>>, + points_curve: CurveBoundary>, surface: Handle, geometry: &mut Layer, ) -> Self { - let points_curve = points_curve.unwrap_or_default(); let path = SurfacePath::line_from_points_with_coords( points_curve.inner.zip_ext(points_surface), ); diff --git a/crates/fj-core/src/operations/sweep/half_edge.rs b/crates/fj-core/src/operations/sweep/half_edge.rs index 3e350152a..d87ac7f3d 100644 --- a/crates/fj-core/src/operations/sweep/half_edge.rs +++ b/crates/fj-core/src/operations/sweep/half_edge.rs @@ -133,7 +133,7 @@ impl SweepHalfEdge for Handle { .unwrap_or_else(|| Curve::new().insert(core)) .make_line_on_surface( [start, end], - Some(boundary), + boundary, surface.clone(), &mut core.layers.geometry, ); From e8279456439b75f85d210ad2168f0ec62266a063 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:12:38 +0200 Subject: [PATCH 2/6] Update variable name --- crates/fj-core/src/operations/build/cycle.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/fj-core/src/operations/build/cycle.rs b/crates/fj-core/src/operations/build/cycle.rs index b36a3eee6..ac65eaad8 100644 --- a/crates/fj-core/src/operations/build/cycle.rs +++ b/crates/fj-core/src/operations/build/cycle.rs @@ -73,7 +73,7 @@ pub trait BuildCycle { Ps: IntoIterator, Ps::IntoIter: Clone + ExactSizeIterator, { - let edges = points + let half_edges = points .into_iter() .map(Into::into) .circular_tuple_windows() @@ -86,7 +86,7 @@ pub trait BuildCycle { ) }); - Cycle::new(edges) + Cycle::new(half_edges) } } From 4da0622958cc73f2e3c8d2e2c113d7bc0284c3bc Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:14:39 +0200 Subject: [PATCH 3/6] Remove redundant calls to `insert` --- crates/fj-core/src/operations/build/cycle.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/fj-core/src/operations/build/cycle.rs b/crates/fj-core/src/operations/build/cycle.rs index ac65eaad8..838d2ea5f 100644 --- a/crates/fj-core/src/operations/build/cycle.rs +++ b/crates/fj-core/src/operations/build/cycle.rs @@ -2,7 +2,7 @@ use fj_math::{Point, Scalar, Vector}; use itertools::Itertools; use crate::{ - operations::{build::BuildHalfEdge, insert::Insert, update::UpdateCycle}, + operations::{build::BuildHalfEdge, update::UpdateCycle}, storage::Handle, topology::{Cycle, HalfEdge, Surface}, Core, @@ -54,10 +54,10 @@ pub trait BuildCycle { let angle = Scalar::TAU / 4.; - let ab = HalfEdge::arc(a, b, angle, surface.clone(), core).insert(core); - let bc = HalfEdge::arc(b, c, angle, surface.clone(), core).insert(core); - let cd = HalfEdge::arc(c, d, angle, surface.clone(), core).insert(core); - let da = HalfEdge::arc(d, a, angle, surface.clone(), core).insert(core); + let ab = HalfEdge::arc(a, b, angle, surface.clone(), core); + let bc = HalfEdge::arc(b, c, angle, surface.clone(), core); + let cd = HalfEdge::arc(c, d, angle, surface.clone(), core); + let da = HalfEdge::arc(d, a, angle, surface.clone(), core); Cycle::empty().add_half_edges([ab, bc, cd, da], core) } From f9e79ba50a2e0908f981cc09c6e6e02f757292f2 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:30:28 +0200 Subject: [PATCH 4/6] Simplify --- crates/fj-core/src/operations/build/cycle.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/fj-core/src/operations/build/cycle.rs b/crates/fj-core/src/operations/build/cycle.rs index 838d2ea5f..fccad454a 100644 --- a/crates/fj-core/src/operations/build/cycle.rs +++ b/crates/fj-core/src/operations/build/cycle.rs @@ -2,7 +2,7 @@ use fj_math::{Point, Scalar, Vector}; use itertools::Itertools; use crate::{ - operations::{build::BuildHalfEdge, update::UpdateCycle}, + operations::build::BuildHalfEdge, storage::Handle, topology::{Cycle, HalfEdge, Surface}, Core, @@ -59,7 +59,7 @@ pub trait BuildCycle { let cd = HalfEdge::arc(c, d, angle, surface.clone(), core); let da = HalfEdge::arc(d, a, angle, surface.clone(), core); - Cycle::empty().add_half_edges([ab, bc, cd, da], core) + Cycle::new([ab, bc, cd, da]) } /// Build a polygon From 681f71c4176d8511e5528b3115bd20964b47815e Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:32:53 +0200 Subject: [PATCH 5/6] Consolidate duplicated code --- crates/fj-core/src/operations/build/cycle.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/fj-core/src/operations/build/cycle.rs b/crates/fj-core/src/operations/build/cycle.rs index fccad454a..e9fa3f736 100644 --- a/crates/fj-core/src/operations/build/cycle.rs +++ b/crates/fj-core/src/operations/build/cycle.rs @@ -54,12 +54,14 @@ pub trait BuildCycle { let angle = Scalar::TAU / 4.; - let ab = HalfEdge::arc(a, b, angle, surface.clone(), core); - let bc = HalfEdge::arc(b, c, angle, surface.clone(), core); - let cd = HalfEdge::arc(c, d, angle, surface.clone(), core); - let da = HalfEdge::arc(d, a, angle, surface.clone(), core); + let half_edges = + [[a, b], [b, c], [c, d], [d, a]] + .into_iter() + .map(|[start, end]| { + HalfEdge::arc(start, end, angle, surface.clone(), core) + }); - Cycle::new([ab, bc, cd, da]) + Cycle::new(half_edges) } /// Build a polygon From 0f1669c5a024d60b9bfa35dbe899641c27ccfcaa Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Wed, 26 Jun 2024 18:44:52 +0200 Subject: [PATCH 6/6] Simplify `BuildHalfEdge::line_segment` --- crates/fj-core/src/operations/build/cycle.rs | 7 +------ crates/fj-core/src/operations/build/half_edge.rs | 3 +-- crates/fj-core/src/operations/split/face.rs | 1 - .../fj-core/src/validation/checks/half_edge_connection.rs | 1 - 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/fj-core/src/operations/build/cycle.rs b/crates/fj-core/src/operations/build/cycle.rs index e9fa3f736..b6515ad7e 100644 --- a/crates/fj-core/src/operations/build/cycle.rs +++ b/crates/fj-core/src/operations/build/cycle.rs @@ -80,12 +80,7 @@ pub trait BuildCycle { .map(Into::into) .circular_tuple_windows() .map(|(start, end)| { - HalfEdge::line_segment( - [start, end], - None, - surface.clone(), - core, - ) + HalfEdge::line_segment([start, end], surface.clone(), core) }); Cycle::new(half_edges) diff --git a/crates/fj-core/src/operations/build/half_edge.rs b/crates/fj-core/src/operations/build/half_edge.rs index bdf1abf64..6631c2c3a 100644 --- a/crates/fj-core/src/operations/build/half_edge.rs +++ b/crates/fj-core/src/operations/build/half_edge.rs @@ -83,11 +83,10 @@ pub trait BuildHalfEdge { /// Create a line segment fn line_segment( points_surface: [impl Into>; 2], - boundary: Option>>, surface: Handle, core: &mut Core, ) -> Handle { - let boundary = boundary.unwrap_or_default(); + let boundary = CurveBoundary::default(); let half_edge = HalfEdge::unjoined(core).insert(core); diff --git a/crates/fj-core/src/operations/split/face.rs b/crates/fj-core/src/operations/split/face.rs index b46e241c6..09b12e893 100644 --- a/crates/fj-core/src/operations/split/face.rs +++ b/crates/fj-core/src/operations/split/face.rs @@ -126,7 +126,6 @@ impl SplitFace for Shell { .path, ), ], - None, face.surface().clone(), core, ); diff --git a/crates/fj-core/src/validation/checks/half_edge_connection.rs b/crates/fj-core/src/validation/checks/half_edge_connection.rs index 9142e9ef3..6aa15f477 100644 --- a/crates/fj-core/src/validation/checks/half_edge_connection.rs +++ b/crates/fj-core/src/validation/checks/half_edge_connection.rs @@ -180,7 +180,6 @@ mod tests { |_, core| { [HalfEdge::line_segment( [[0., 0.], [2., 0.]], - None, surface, core, )]