From 2197017f5415700adf529db12f6b025417e8d419 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Tue, 13 Feb 2024 04:45:39 +0000 Subject: [PATCH] layout: terminology improvements - "connected" is renamed to "joined" (more local term), - primitives whose clearance area neighbors another's are now called "abutters", - primitives whose geometries depend on a bend are now called "posteriors" of said bend. --- src/layout/collect.rs | 47 ++++++++++++++++--------------- src/layout/geometry/geometry.rs | 43 +++++++++++----------------- src/layout/geometry/with_rtree.rs | 12 ++++---- src/layout/layout.rs | 22 +++++++-------- src/layout/primitive.rs | 10 +++---- 5 files changed, 61 insertions(+), 73 deletions(-) diff --git a/src/layout/collect.rs b/src/layout/collect.rs index 01206e7..029dbb5 100644 --- a/src/layout/collect.rs +++ b/src/layout/collect.rs @@ -19,27 +19,12 @@ impl<'a, R: RulesTrait> Collect<'a, R> { Self { layout } } - pub fn inner_bow_and_outer_bow(&self, bend: LooseBendIndex) -> Vec { - let bend_primitive = self.layout.primitive(bend); + pub fn bend_abutters_and_posteriors(&self, bend: LooseBendIndex) -> Vec { + // Bend's posteriors are the outer abutters and afterouter bows. + // Bend's afterouter bows are the bows of bend's afterouters. + // Bend's afterouters are the bends outer to the outer bend of said bend. let mut v = vec![]; - - if let Some(inner) = bend_primitive.inner() { - v.append(&mut self.bow(inner.into())); - } else { - let core = bend_primitive.core(); - v.push(core.into()); - } - - if let Some(outer) = bend_primitive.outer() { - v.append(&mut self.bow(outer.into())); - } - - v - } - - pub fn inner_bow_and_outer_bows(&self, bend: LooseBendIndex) -> Vec { let bend_primitive = self.layout.primitive(bend); - let mut v = vec![]; if let Some(inner) = bend_primitive.inner() { v.append(&mut self.bow(inner.into())); @@ -58,16 +43,32 @@ impl<'a, R: RulesTrait> Collect<'a, R> { v } - pub fn segbend_inner_and_outer_bibows( + pub fn bend_abutters(&self, bend: LooseBendIndex) -> Vec { + let mut v = vec![]; + let bend_primitive = self.layout.primitive(bend); + + if let Some(inner) = bend_primitive.inner() { + v.append(&mut self.bow(inner.into())); + } else { + let core = bend_primitive.core(); + v.push(core.into()); + } + + if let Some(outer) = bend_primitive.outer() { + v.append(&mut self.bow(outer.into())); + } + + v + } + + pub fn potential_segbend_abutters( &self, from: DotIndex, around: WraparoundableIndex, ) -> Vec { let mut v = match from { DotIndex::Fixed(..) => vec![], - DotIndex::Loose(dot) => { - self.inner_bow_and_outer_bow(self.layout.primitive(dot).bend().into()) - } + DotIndex::Loose(dot) => self.bend_abutters(self.layout.primitive(dot).bend().into()), }; v.append(&mut self.this_and_wraparound_bow(around)); v diff --git a/src/layout/geometry/geometry.rs b/src/layout/geometry/geometry.rs index 0f31ce1..bb5eafc 100644 --- a/src/layout/geometry/geometry.rs +++ b/src/layout/geometry/geometry.rs @@ -46,7 +46,7 @@ pub trait SetOffset { #[derive(Debug, Clone, Copy, PartialEq)] pub enum GeometryLabel { - Connection, + Joined, Outer, Core, } @@ -114,13 +114,10 @@ impl< ) -> GenericIndex { let seg = GenericIndex::::new(self.graph.add_node(weight.into())); - self.graph.update_edge( - from.node_index(), - seg.node_index(), - GeometryLabel::Connection, - ); self.graph - .update_edge(seg.node_index(), to.node_index(), GeometryLabel::Connection); + .update_edge(from.node_index(), seg.node_index(), GeometryLabel::Joined); + self.graph + .update_edge(seg.node_index(), to.node_index(), GeometryLabel::Joined); seg } @@ -134,16 +131,10 @@ impl< ) -> GenericIndex { let bend = GenericIndex::::new(self.graph.add_node(weight.into())); - self.graph.update_edge( - from.node_index(), - bend.node_index(), - GeometryLabel::Connection, - ); - self.graph.update_edge( - bend.node_index(), - to.node_index(), - GeometryLabel::Connection, - ); + self.graph + .update_edge(from.node_index(), bend.node_index(), GeometryLabel::Joined); + self.graph + .update_edge(bend.node_index(), to.node_index(), GeometryLabel::Joined); self.graph .update_edge(bend.node_index(), core.node_index(), GeometryLabel::Core); @@ -381,7 +372,7 @@ impl< .next() } - pub fn connecteds(&self, node: GI) -> impl Iterator + '_ { + pub fn joineds(&self, node: GI) -> impl Iterator + '_ { self.graph .neighbors_undirected(node.node_index()) .filter(move |ni| { @@ -394,7 +385,7 @@ impl< .0, ) .unwrap(), - GeometryLabel::Connection + GeometryLabel::Joined ) }) .map(|ni| { @@ -406,7 +397,7 @@ impl< } pub fn seg_joints(&self, seg: SI) -> (DI, DI) { - let v: Vec<_> = self.connecteds(seg.into()).collect(); + let v: Vec<_> = self.joineds(seg.into()).collect(); ( v[0].try_into().unwrap_or_else(|_| unreachable!()), v[1].try_into().unwrap_or_else(|_| unreachable!()), @@ -414,21 +405,19 @@ impl< } pub fn bend_joints(&self, bend: BI) -> (DI, DI) { - let v: Vec<_> = self.connecteds(bend.into()).collect(); + let v: Vec<_> = self.joineds(bend.into()).collect(); ( v[0].try_into().unwrap_or_else(|_| unreachable!()), v[1].try_into().unwrap_or_else(|_| unreachable!()), ) } - pub fn connected_segs(&self, dot: DI) -> impl Iterator + '_ { - self.connecteds(dot.into()) - .filter_map(|ni| ni.try_into().ok()) + pub fn joined_segs(&self, dot: DI) -> impl Iterator + '_ { + self.joineds(dot.into()).filter_map(|ni| ni.try_into().ok()) } - pub fn connected_bends(&self, dot: DI) -> impl Iterator + '_ { - self.connecteds(dot.into()) - .filter_map(|ni| ni.try_into().ok()) + pub fn joined_bends(&self, dot: DI) -> impl Iterator + '_ { + self.joineds(dot.into()).filter_map(|ni| ni.try_into().ok()) } pub fn graph(&self) -> &StableDiGraph { diff --git a/src/layout/geometry/with_rtree.rs b/src/layout/geometry/with_rtree.rs index 6c298f1..6333eae 100644 --- a/src/layout/geometry/with_rtree.rs +++ b/src/layout/geometry/with_rtree.rs @@ -114,11 +114,11 @@ impl< } pub fn remove_dot(&mut self, dot: DI) -> Result<(), ()> { - if self.geometry.connected_segs(dot).next().is_some() { + if self.geometry.joined_segs(dot).next().is_some() { return Err(()); } - if self.geometry.connected_bends(dot).next().is_some() { + if self.geometry.joined_bends(dot).next().is_some() { return Err(()); } @@ -138,11 +138,11 @@ impl< } pub fn move_dot(&mut self, dot: DI, to: Point) { - for seg in self.geometry.connected_segs(dot) { + for seg in self.geometry.joined_segs(dot) { self.rtree.remove(&self.make_seg_bbox(seg)); } - for bend in self.geometry.connected_bends(dot) { + for bend in self.geometry.joined_bends(dot) { self.rtree.remove(&self.make_bend_bbox(bend)); } @@ -150,11 +150,11 @@ impl< self.geometry.move_dot(dot, to); self.rtree.insert(self.make_dot_bbox(dot)); - for bend in self.geometry.connected_bends(dot) { + for bend in self.geometry.joined_bends(dot) { self.rtree.insert(self.make_bend_bbox(bend)); } - for seg in self.geometry.connected_segs(dot) { + for seg in self.geometry.joined_segs(dot) { self.rtree.insert(self.make_seg_bbox(seg)); } } diff --git a/src/layout/layout.rs b/src/layout/layout.rs index c8a383b..431dcb8 100644 --- a/src/layout/layout.rs +++ b/src/layout/layout.rs @@ -260,7 +260,7 @@ impl Layout { cw: bool, ) -> Result { let maybe_wraparound = self.wraparoundable(around).wraparound(); - let mut infringables = self.collect().segbend_inner_and_outer_bibows(from, around); + let mut infringables = self.collect().potential_segbend_abutters(from, around); if let Some(wraparound) = maybe_wraparound { infringables.append(&mut self.collect().outer_bows(wraparound)); @@ -345,18 +345,18 @@ impl Layout { self.move_dot_infringably( joints.0.into(), from, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; self.move_dot_infringably( joints.1.into(), to, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; self.shift_bend_infringably( rail.into(), offset, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; // Update offsets in case the rule conditions changed. @@ -387,18 +387,18 @@ impl Layout { self.move_dot_infringably( joints.0.into(), from, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; self.move_dot_infringably( joints.1.into(), to, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; self.shift_bend_infringably( rail.into(), offset, - &self.collect().inner_bow_and_outer_bows(rail), + &self.collect().bend_abutters_and_posteriors(rail), )?; } @@ -428,7 +428,7 @@ impl Layout { seg_weight, bend_weight, cw, - &self.collect().segbend_inner_and_outer_bibows(from, around), + &self.collect().potential_segbend_abutters(from, around), ) } @@ -522,7 +522,7 @@ impl Layout { weight, &self .collect() - .inner_bow_and_outer_bow(self.primitive(to).bend().into()), + .bend_abutters(self.primitive(to).bend().into()), )?; if let DotIndex::Fixed(dot) = from { @@ -742,9 +742,7 @@ impl Layout { DotIndex::Loose(loose) => self.move_dot_infringably( dot, to, - &self - .collect() - .inner_bow_and_outer_bow(self.primitive(loose).bend()), + &self.collect().bend_abutters(self.primitive(loose).bend()), ), } } diff --git a/src/layout/primitive.rs b/src/layout/primitive.rs index a54ed24..2da35b0 100644 --- a/src/layout/primitive.rs +++ b/src/layout/primitive.rs @@ -249,7 +249,7 @@ impl<'a, R: RulesTrait> FixedDot<'a, R> { pub fn first_loose(&self, _band: BandIndex) -> Option { self.layout .geometry() - .connecteds(self.index.into()) + .joineds(self.index.into()) .into_iter() .find_map(|ni| { let weight = self @@ -279,14 +279,14 @@ impl<'a, R: RulesTrait> GetLimbs for FixedDot<'a, R> { fn segs(&self) -> Vec { self.layout .geometry() - .connected_segs(self.index.into()) + .joined_segs(self.index.into()) .collect() } fn bends(&self) -> Vec { self.layout .geometry() - .connected_bends(self.index.into()) + .joined_bends(self.index.into()) .collect() } } @@ -300,7 +300,7 @@ impl<'a, R: RulesTrait> LooseDot<'a, R> { pub fn seg(&self) -> Option { self.layout .geometry() - .connected_segs(self.index.into()) + .joined_segs(self.index.into()) .map(|ni| SeqLooseSegIndex::new(ni.node_index())) .next() } @@ -308,7 +308,7 @@ impl<'a, R: RulesTrait> LooseDot<'a, R> { pub fn bend(&self) -> LooseBendIndex { self.layout .geometry() - .connected_bends(self.index.into()) + .joined_bends(self.index.into()) .map(|ni| LooseBendIndex::new(ni.node_index())) .next() .unwrap()