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.
This commit is contained in:
Mikolaj Wielgus 2024-02-13 04:45:39 +00:00
parent e1f3d3ede4
commit 2197017f54
5 changed files with 61 additions and 73 deletions

View File

@ -19,27 +19,12 @@ impl<'a, R: RulesTrait> Collect<'a, R> {
Self { layout }
}
pub fn inner_bow_and_outer_bow(&self, bend: LooseBendIndex) -> Vec<GeometryIndex> {
let bend_primitive = self.layout.primitive(bend);
pub fn bend_abutters_and_posteriors(&self, bend: LooseBendIndex) -> Vec<GeometryIndex> {
// 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<GeometryIndex> {
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<GeometryIndex> {
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<GeometryIndex> {
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

View File

@ -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<W> {
let seg = GenericIndex::<W>::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<W> {
let bend = GenericIndex::<W>::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<Item = GI> + '_ {
pub fn joineds(&self, node: GI) -> impl Iterator<Item = GI> + '_ {
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<Item = SI> + '_ {
self.connecteds(dot.into())
.filter_map(|ni| ni.try_into().ok())
pub fn joined_segs(&self, dot: DI) -> impl Iterator<Item = SI> + '_ {
self.joineds(dot.into()).filter_map(|ni| ni.try_into().ok())
}
pub fn connected_bends(&self, dot: DI) -> impl Iterator<Item = BI> + '_ {
self.connecteds(dot.into())
.filter_map(|ni| ni.try_into().ok())
pub fn joined_bends(&self, dot: DI) -> impl Iterator<Item = BI> + '_ {
self.joineds(dot.into()).filter_map(|ni| ni.try_into().ok())
}
pub fn graph(&self) -> &StableDiGraph<GW, GeometryLabel, usize> {

View File

@ -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));
}
}

View File

@ -260,7 +260,7 @@ impl<R: RulesTrait> Layout<R> {
cw: bool,
) -> Result<Segbend, LayoutException> {
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<R: RulesTrait> Layout<R> {
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<R: RulesTrait> Layout<R> {
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<R: RulesTrait> Layout<R> {
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<R: RulesTrait> Layout<R> {
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<R: RulesTrait> Layout<R> {
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()),
),
}
}

View File

@ -249,7 +249,7 @@ impl<'a, R: RulesTrait> FixedDot<'a, R> {
pub fn first_loose(&self, _band: BandIndex) -> Option<LooseIndex> {
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<SegIndex> {
self.layout
.geometry()
.connected_segs(self.index.into())
.joined_segs(self.index.into())
.collect()
}
fn bends(&self) -> Vec<BendIndex> {
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<SeqLooseSegIndex> {
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()