From 44bee471d8f87bd9e7b47532a05b1eac6ac0e186 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 28 Jun 2022 14:19:09 +0200 Subject: [PATCH 1/5] Remove `Shape::clone_shape` It's no longer being used within the code base. --- crates/fj-kernel/src/shape/api.rs | 36 ------------------------------- 1 file changed, 36 deletions(-) diff --git a/crates/fj-kernel/src/shape/api.rs b/crates/fj-kernel/src/shape/api.rs index 9e29b0969..f9b8547cd 100644 --- a/crates/fj-kernel/src/shape/api.rs +++ b/crates/fj-kernel/src/shape/api.rs @@ -156,42 +156,6 @@ impl Shape { Update::new(&mut self.stores) } - /// Clone the shape - /// - /// Returns a [`Mapping`] that maps each object from the original shape to - /// the respective object in the cloned shape. - pub fn clone_shape(&self) -> (Shape, Mapping) { - let mut target = Shape::new(); - let mut mapping = Mapping::new(); - - for original in self.curves() { - let cloned = target.merge(original.get()); - mapping.curves.insert(original, cloned); - } - for original in self.surfaces() { - let cloned = target.merge(original.get()); - mapping.surfaces.insert(original, cloned); - } - for original in self.vertices() { - let cloned = target.merge(original.get()); - mapping.vertices.insert(original, cloned); - } - for original in self.edges() { - let cloned = target.merge(original.get()); - mapping.edges.insert(original, cloned); - } - for original in self.cycles() { - let cloned = target.merge(original.get()); - mapping.cycles.insert(original, cloned); - } - for original in self.faces() { - let cloned = target.merge(original.get()); - mapping.faces.insert(original, cloned); - } - - (target, mapping) - } - /// Access an iterator over all curves /// /// The caller must not make any assumptions about the order of curves. From 9ae80a8eae641c550a004cb2e90912e5a4c8bdf7 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 28 Jun 2022 14:20:41 +0200 Subject: [PATCH 2/5] Don't return `Mapping` from `Shape::merge_shape` That capability is no longer being used. --- crates/fj-kernel/src/shape/api.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/fj-kernel/src/shape/api.rs b/crates/fj-kernel/src/shape/api.rs index f9b8547cd..65a9fb547 100644 --- a/crates/fj-kernel/src/shape/api.rs +++ b/crates/fj-kernel/src/shape/api.rs @@ -123,7 +123,7 @@ impl Shape { /// /// Returns a [`Mapping`] that maps each object from the merged shape to the /// merged objects in this shape. - pub fn merge_shape(&mut self, other: &Shape) -> Mapping { + pub fn merge_shape(&mut self, other: &Shape) { let mut mapping = Mapping::new(); for object in other.curves() { @@ -144,8 +144,6 @@ impl Shape { for object in other.faces() { object.get().merge_into(Some(object), self, &mut mapping); } - - mapping } /// Update objects in the shape From f269333e99294851f5acea85e0dd3715498cd12e Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 28 Jun 2022 14:31:28 +0200 Subject: [PATCH 3/5] Remove `Mapping` from merge infrastructure This capability is no longer being used by `Shape`'s merge methods. --- crates/fj-kernel/src/shape/api.rs | 18 ++--- crates/fj-kernel/src/shape/mapping.rs | 11 --- crates/fj-kernel/src/shape/object.rs | 108 +++++++------------------- 3 files changed, 36 insertions(+), 101 deletions(-) diff --git a/crates/fj-kernel/src/shape/api.rs b/crates/fj-kernel/src/shape/api.rs index 65a9fb547..479fe2f93 100644 --- a/crates/fj-kernel/src/shape/api.rs +++ b/crates/fj-kernel/src/shape/api.rs @@ -4,7 +4,7 @@ use crate::objects::{Curve, Cycle, Edge, Face, Surface, Vertex}; use super::{ stores::{Store, Stores}, - Handle, Iter, Mapping, Object, Update, + Handle, Iter, Object, Update, }; /// The boundary representation of a shape @@ -116,7 +116,7 @@ impl Shape { /// /// This is done recursively. pub fn merge(&mut self, object: T) -> Handle { - object.merge_into(None, self, &mut Mapping::new()) + object.merge_into(None, self) } /// Merge the provided shape into this one @@ -124,25 +124,23 @@ impl Shape { /// Returns a [`Mapping`] that maps each object from the merged shape to the /// merged objects in this shape. pub fn merge_shape(&mut self, other: &Shape) { - let mut mapping = Mapping::new(); - for object in other.curves() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } for object in other.surfaces() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } for object in other.vertices() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } for object in other.edges() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } for object in other.cycles() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } for object in other.faces() { - object.get().merge_into(Some(object), self, &mut mapping); + object.get().merge_into(Some(object), self); } } diff --git a/crates/fj-kernel/src/shape/mapping.rs b/crates/fj-kernel/src/shape/mapping.rs index 3cd317f4e..8a3d00ce9 100644 --- a/crates/fj-kernel/src/shape/mapping.rs +++ b/crates/fj-kernel/src/shape/mapping.rs @@ -15,17 +15,6 @@ pub struct Mapping { } impl Mapping { - pub(super) fn new() -> Self { - Self { - curves: OneMapping::new(), - surfaces: OneMapping::new(), - vertices: OneMapping::new(), - edges: OneMapping::new(), - cycles: OneMapping::new(), - faces: OneMapping::new(), - } - } - /// Access the curve mapped from the provided curve /// /// # Panics diff --git a/crates/fj-kernel/src/shape/object.rs b/crates/fj-kernel/src/shape/object.rs index 19897bb27..e1114fb21 100644 --- a/crates/fj-kernel/src/shape/object.rs +++ b/crates/fj-kernel/src/shape/object.rs @@ -2,7 +2,7 @@ use crate::objects::{ Curve, Cycle, Edge, Face, Surface, Vertex, VerticesOfEdge, }; -use super::{Handle, LocalForm, Mapping, Shape}; +use super::{Handle, LocalForm, Shape}; /// Marker trait for geometric and topological objects pub trait Object: 'static + Clone + PartialEq + private::Sealed { @@ -13,7 +13,6 @@ pub trait Object: 'static + Clone + PartialEq + private::Sealed { self, handle: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle; } @@ -28,143 +27,98 @@ impl private::Sealed for Face {} impl Object for Curve<3> { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { - let merged = shape.get_handle_or_insert(self); - - if let Some(handle) = handle { - mapping.curves.insert(handle, merged.clone()); - } - - merged + shape.get_handle_or_insert(self) } } impl Object for Surface { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { - let merged = shape.get_handle_or_insert(self); - - if let Some(handle) = handle { - mapping.surfaces.insert(handle, merged.clone()); - } - - merged + shape.get_handle_or_insert(self) } } impl Object for Vertex { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { - let merged = shape.get_handle_or_insert(Vertex { point: self.point }); - - if let Some(handle) = handle { - mapping.vertices.insert(handle, merged.clone()); - } - - merged + shape.get_handle_or_insert(Vertex { point: self.point }) } } impl Object for Edge<3> { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { - let curve = self.curve().merge_into( - Some(self.curve.canonical()), - shape, - mapping, - ); + let curve = + self.curve().merge_into(Some(self.curve.canonical()), shape); let vertices = self.vertices.convert(|vertex| { let canonical = vertex.canonical(); - let canonical = - canonical.get().merge_into(Some(canonical), shape, mapping); + let canonical = canonical.get().merge_into(Some(canonical), shape); LocalForm::new(*vertex.local(), canonical) }); - let merged = shape.get_handle_or_insert(Edge { + shape.get_handle_or_insert(Edge { curve: LocalForm::canonical_only(curve), vertices: VerticesOfEdge::new(vertices), - }); - - if let Some(handle) = handle { - mapping.edges.insert(handle, merged.clone()); - } - - merged + }) } } impl Object for Cycle<3> { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { let mut edges = Vec::new(); for edge in self.edges { let edge = edge.canonical(); - let edge = edge.get().merge_into(Some(edge), shape, mapping); + let edge = edge.get().merge_into(Some(edge), shape); edges.push(edge); } - let merged = shape.get_handle_or_insert(Cycle::new(edges)); - - if let Some(handle) = handle { - mapping.cycles.insert(handle, merged.clone()); - } - - merged + shape.get_handle_or_insert(Cycle::new(edges)) } } impl Object for Face { fn merge_into( self, - handle: Option>, + _: Option>, shape: &mut Shape, - mapping: &mut Mapping, ) -> Handle { - let merged = match self { + match self { Face::Face(face) => { - let surface = face.surface.get().merge_into( - Some(face.surface), - shape, - mapping, - ); + let surface = + face.surface.get().merge_into(Some(face.surface), shape); let mut exts = Vec::new(); for cycle in face.exteriors.as_local_form() { - let merged = cycle.canonical().get().merge_into( - Some(cycle.canonical()), - shape, - mapping, - ); + let merged = cycle + .canonical() + .get() + .merge_into(Some(cycle.canonical()), shape); exts.push(LocalForm::new(cycle.local().clone(), merged)); } let mut ints = Vec::new(); for cycle in face.interiors.as_local_form() { - let merged = cycle.canonical().get().merge_into( - Some(cycle.canonical()), - shape, - mapping, - ); + let merged = cycle + .canonical() + .get() + .merge_into(Some(cycle.canonical()), shape); ints.push(LocalForm::new(cycle.local().clone(), merged)); } @@ -173,13 +127,7 @@ impl Object for Face { )) } Face::Triangles(_) => shape.get_handle_or_insert(self), - }; - - if let Some(handle) = handle { - mapping.faces.insert(handle, merged.clone()); } - - merged } } From 763e1ee8d85ca1ba375e24e6f6cdeeeba48fca19 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 28 Jun 2022 14:32:51 +0200 Subject: [PATCH 4/5] Remove `Mapping` It's no longer being used anywhere. --- crates/fj-kernel/src/shape/mapping.rs | 91 --------------------------- crates/fj-kernel/src/shape/mod.rs | 2 - 2 files changed, 93 deletions(-) delete mode 100644 crates/fj-kernel/src/shape/mapping.rs diff --git a/crates/fj-kernel/src/shape/mapping.rs b/crates/fj-kernel/src/shape/mapping.rs deleted file mode 100644 index 8a3d00ce9..000000000 --- a/crates/fj-kernel/src/shape/mapping.rs +++ /dev/null @@ -1,91 +0,0 @@ -use std::collections::HashMap; - -use crate::objects::{Curve, Cycle, Edge, Face, Surface, Vertex}; - -use super::Handle; - -/// A mapping between objects in different shapes -pub struct Mapping { - pub(super) curves: OneMapping>, - pub(super) surfaces: OneMapping, - pub(super) vertices: OneMapping, - pub(super) edges: OneMapping>, - pub(super) cycles: OneMapping>, - pub(super) faces: OneMapping, -} - -impl Mapping { - /// Access the curve mapped from the provided curve - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn curve(&self, object: &Handle>) -> Handle> { - self.curves - .get(object) - .expect("Could not find curve in mapping") - .clone() - } - - /// Access the surface mapped from the provided surface - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn surface(&self, object: &Handle) -> Handle { - self.surfaces - .get(object) - .expect("Could not find surface in mapping") - .clone() - } - - /// Access the vertex mapped from the provided vertex - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn vertex(&self, object: &Handle) -> Handle { - self.vertices - .get(object) - .expect("Could not find vertex in mapping") - .clone() - } - - /// Access the edge mapped from the provided edge - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn edge(&self, object: &Handle>) -> Handle> { - self.edges - .get(object) - .expect("Could not find edge in mapping") - .clone() - } - - /// Access the cycle mapped from the provided cycle - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn cycle(&self, object: &Handle>) -> Handle> { - self.cycles - .get(object) - .expect("Could not find vertex in mapping") - .clone() - } - - /// Access the face mapped from the provided face - /// - /// # Panics - /// - /// Panics, if `object` can not be found in the mapping. - pub fn face(&self, object: &Handle) -> Handle { - self.faces - .get(object) - .expect("Could not find face in mapping") - .clone() - } -} - -type OneMapping = HashMap, Handle>; diff --git a/crates/fj-kernel/src/shape/mod.rs b/crates/fj-kernel/src/shape/mod.rs index 2db0ed8b6..a410d6731 100644 --- a/crates/fj-kernel/src/shape/mod.rs +++ b/crates/fj-kernel/src/shape/mod.rs @@ -4,7 +4,6 @@ mod api; mod local; -mod mapping; mod object; mod stores; mod update; @@ -12,7 +11,6 @@ mod update; pub use self::{ api::Shape, local::LocalForm, - mapping::Mapping, object::Object, stores::{Handle, Iter}, update::Update, From 45877ee802337248829080a5624838ba08fcbec0 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Tue, 28 Jun 2022 14:27:41 +0200 Subject: [PATCH 5/5] Remove unused trait method argument --- crates/fj-kernel/src/shape/api.rs | 14 +++---- crates/fj-kernel/src/shape/object.rs | 62 ++++++---------------------- 2 files changed, 20 insertions(+), 56 deletions(-) diff --git a/crates/fj-kernel/src/shape/api.rs b/crates/fj-kernel/src/shape/api.rs index 479fe2f93..b7efff6b5 100644 --- a/crates/fj-kernel/src/shape/api.rs +++ b/crates/fj-kernel/src/shape/api.rs @@ -116,7 +116,7 @@ impl Shape { /// /// This is done recursively. pub fn merge(&mut self, object: T) -> Handle { - object.merge_into(None, self) + object.merge_into(self) } /// Merge the provided shape into this one @@ -125,22 +125,22 @@ impl Shape { /// merged objects in this shape. pub fn merge_shape(&mut self, other: &Shape) { for object in other.curves() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } for object in other.surfaces() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } for object in other.vertices() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } for object in other.edges() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } for object in other.cycles() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } for object in other.faces() { - object.get().merge_into(Some(object), self); + object.get().merge_into(self); } } diff --git a/crates/fj-kernel/src/shape/object.rs b/crates/fj-kernel/src/shape/object.rs index e1114fb21..5193ecacf 100644 --- a/crates/fj-kernel/src/shape/object.rs +++ b/crates/fj-kernel/src/shape/object.rs @@ -9,11 +9,7 @@ pub trait Object: 'static + Clone + PartialEq + private::Sealed { /// Internal function /// /// Please consider using [`Shape::merge`] instead. - fn merge_into( - self, - handle: Option>, - shape: &mut Shape, - ) -> Handle; + fn merge_into(self, shape: &mut Shape) -> Handle; } impl private::Sealed for Curve<3> {} @@ -25,47 +21,30 @@ impl private::Sealed for Cycle<3> {} impl private::Sealed for Face {} impl Object for Curve<3> { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { + fn merge_into(self, shape: &mut Shape) -> Handle { shape.get_handle_or_insert(self) } } impl Object for Surface { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { + fn merge_into(self, shape: &mut Shape) -> Handle { shape.get_handle_or_insert(self) } } impl Object for Vertex { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { + fn merge_into(self, shape: &mut Shape) -> Handle { shape.get_handle_or_insert(Vertex { point: self.point }) } } impl Object for Edge<3> { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { - let curve = - self.curve().merge_into(Some(self.curve.canonical()), shape); + fn merge_into(self, shape: &mut Shape) -> Handle { + let curve = self.curve().merge_into(shape); let vertices = self.vertices.convert(|vertex| { let canonical = vertex.canonical(); - let canonical = canonical.get().merge_into(Some(canonical), shape); + let canonical = canonical.get().merge_into(shape); LocalForm::new(*vertex.local(), canonical) }); @@ -77,15 +56,11 @@ impl Object for Edge<3> { } impl Object for Cycle<3> { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { + fn merge_into(self, shape: &mut Shape) -> Handle { let mut edges = Vec::new(); for edge in self.edges { let edge = edge.canonical(); - let edge = edge.get().merge_into(Some(edge), shape); + let edge = edge.get().merge_into(shape); edges.push(edge); } @@ -94,31 +69,20 @@ impl Object for Cycle<3> { } impl Object for Face { - fn merge_into( - self, - _: Option>, - shape: &mut Shape, - ) -> Handle { + fn merge_into(self, shape: &mut Shape) -> Handle { match self { Face::Face(face) => { - let surface = - face.surface.get().merge_into(Some(face.surface), shape); + let surface = face.surface.get().merge_into(shape); let mut exts = Vec::new(); for cycle in face.exteriors.as_local_form() { - let merged = cycle - .canonical() - .get() - .merge_into(Some(cycle.canonical()), shape); + let merged = cycle.canonical().get().merge_into(shape); exts.push(LocalForm::new(cycle.local().clone(), merged)); } let mut ints = Vec::new(); for cycle in face.interiors.as_local_form() { - let merged = cycle - .canonical() - .get() - .merge_into(Some(cycle.canonical()), shape); + let merged = cycle.canonical().get().merge_into(shape); ints.push(LocalForm::new(cycle.local().clone(), merged)); }