From 5bf90b39cb097b967f6e51d7000fa505d0d377d9 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 25 Jan 2024 13:17:52 +0100 Subject: [PATCH 1/2] Refactor to prepare for follow-on change --- crates/fj-core/src/operations/split/face.rs | 36 ++++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/crates/fj-core/src/operations/split/face.rs b/crates/fj-core/src/operations/split/face.rs index 07683674c..ebbc50851 100644 --- a/crates/fj-core/src/operations/split/face.rs +++ b/crates/fj-core/src/operations/split/face.rs @@ -132,18 +132,20 @@ impl SplitFace for Shell { services, ) .update_region(|region| { - let mut region = region.update_exterior(|cycle| { - cycle - .add_half_edges(half_edges_b_to_c_inclusive) - .add_half_edges([dividing_half_edge_c_to_b]) - .insert(services) - }); + let mut region = region + .update_exterior(|cycle| { + cycle + .add_half_edges(half_edges_b_to_c_inclusive) + .add_half_edges([dividing_half_edge_c_to_b]) + .insert(services) + }) + .insert(services); if let Some(color) = face.region().color() { - region = region.set_color(color); + region = region.set_color(color).insert(services); } - region.insert(services) + region }) .insert(services); @@ -157,18 +159,20 @@ impl SplitFace for Shell { services, ) .update_region(|region| { - let mut region = region.update_exterior(|cycle| { - cycle - .add_half_edges(half_edges_d_to_a_inclusive) - .add_half_edges([dividing_half_edge_a_to_d]) - .insert(services) - }); + let mut region = region + .update_exterior(|cycle| { + cycle + .add_half_edges(half_edges_d_to_a_inclusive) + .add_half_edges([dividing_half_edge_a_to_d]) + .insert(services) + }) + .insert(services); if let Some(color) = face.region().color() { - region = region.set_color(color); + region = region.set_color(color).insert(services); } - region.insert(services) + region }) .insert(services); From 2bfb010dba6b619276ad9020a26645476863d25b Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Thu, 25 Jan 2024 13:20:58 +0100 Subject: [PATCH 2/2] Implement `SetColor` for `Handle` instead This is required to extract appearance into a separate layer, as associating attributes to objects can only work, if we have a unique `Handle` to that object. --- crates/fj-core/src/operations/presentation.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/crates/fj-core/src/operations/presentation.rs b/crates/fj-core/src/operations/presentation.rs index b2e9c9211..e58323531 100644 --- a/crates/fj-core/src/operations/presentation.rs +++ b/crates/fj-core/src/operations/presentation.rs @@ -2,16 +2,19 @@ use fj_interop::Color; -use crate::objects::Region; +use crate::{ + objects::{IsObject, Region}, + storage::Handle, +}; /// Set the color of an object -pub trait SetColor { +pub trait SetColor: IsObject { /// Set the color of the object - fn set_color(&self, color: impl Into) -> Self; + fn set_color(&self, color: impl Into) -> Self::BareObject; } -impl SetColor for Region { - fn set_color(&self, color: impl Into) -> Self { +impl SetColor for Handle { + fn set_color(&self, color: impl Into) -> Self::BareObject { Region::new( self.exterior().clone(), self.interiors().into_iter().cloned(),