diff --git a/src/geometry/geometry.rs b/src/geometry/geometry.rs index 981fd9b..91f04d9 100644 --- a/src/geometry/geometry.rs +++ b/src/geometry/geometry.rs @@ -132,7 +132,11 @@ impl< ) -> GenericIndex { let seg = GenericIndex::::new(self.graph.add_node(GenericNode::Primitive(weight.into()))); + self.init_seg_joints(seg, from, to); + seg + } + fn init_seg_joints>(&mut self, seg: GenericIndex, from: DI, to: DI) { self.graph.update_edge( from.petgraph_index(), seg.petgraph_index(), @@ -143,8 +147,6 @@ impl< to.petgraph_index(), GeometryLabel::Joined, ); - - seg } pub fn add_bend>( @@ -156,7 +158,17 @@ impl< ) -> GenericIndex { let bend = GenericIndex::::new(self.graph.add_node(GenericNode::Primitive(weight.into()))); + self.init_bend_joints_and_core(bend, from, to, core); + bend + } + fn init_bend_joints_and_core>( + &mut self, + bend: GenericIndex, + from: DI, + to: DI, + core: DI, + ) { self.graph.update_edge( from.petgraph_index(), bend.petgraph_index(), @@ -172,8 +184,6 @@ impl< core.petgraph_index(), GeometryLabel::Core, ); - - bend } pub fn remove_primitive(&mut self, primitive: PI) { diff --git a/src/geometry/with_rtree.rs b/src/geometry/with_rtree.rs index f70d3b1..42b9201 100644 --- a/src/geometry/with_rtree.rs +++ b/src/geometry/with_rtree.rs @@ -79,17 +79,18 @@ impl< GenericIndex: Into, { let dot = self.geometry.add_dot(weight); - self.rtree.insert(BboxedIndex::new( - Bbox::new( - self.geometry - .dot_shape(dot.into().try_into().unwrap_or_else(|_| unreachable!())) - .envelope_3d(0.0, weight.layer()), - ), - GenericNode::Primitive(dot.into()), - )); + self.init_dot_bbox(dot, weight); dot } + fn init_dot_bbox + GetLayer>(&mut self, dot: GenericIndex, weight: W) + where + GenericIndex: Into, + { + self.rtree + .insert(self.make_dot_bbox(dot.into().try_into().unwrap_or_else(|_| unreachable!()))); + } + pub fn add_seg + GetLayer>( &mut self, from: DI, @@ -100,17 +101,18 @@ impl< GenericIndex: Into, { let seg = self.geometry.add_seg(from, to, weight); - self.rtree.insert(BboxedIndex::new( - Bbox::new( - self.geometry - .seg_shape(seg.into().try_into().unwrap_or_else(|_| unreachable!())) - .envelope_3d(0.0, weight.layer()), - ), - GenericNode::Primitive(seg.into()), - )); + self.init_seg_bbox(seg, weight); seg } + fn init_seg_bbox + GetLayer>(&mut self, seg: GenericIndex, weight: W) + where + GenericIndex: Into, + { + self.rtree + .insert(self.make_seg_bbox(seg.into().try_into().unwrap_or_else(|_| unreachable!()))); + } + pub fn add_bend + GetLayer>( &mut self, from: DI, @@ -122,17 +124,21 @@ impl< GenericIndex: Into, { let bend = self.geometry.add_bend(from, to, core, weight); - self.rtree.insert(BboxedIndex::new( - Bbox::new( - self.geometry - .bend_shape(bend.into().try_into().unwrap_or_else(|_| unreachable!())) - .envelope_3d(0.0, weight.layer()), - ), - GenericNode::Primitive(bend.into()), - )); + self.init_bend_bbox(bend, weight); bend } + fn init_bend_bbox + GetLayer>( + &mut self, + bend: GenericIndex, + weight: W, + ) where + GenericIndex: Into, + { + self.rtree + .insert(self.make_bend_bbox(bend.into().try_into().unwrap_or_else(|_| unreachable!()))); + } + pub fn add_to_compound(&mut self, primitive: GenericIndex, compound: GenericIndex) { self.rtree.remove(&self.make_compound_bbox(compound)); self.geometry.add_to_compound(primitive, compound);