primitive: Remove `.tagged_prev()`, `.tagged_next()` methods

Temporarily commented out band code which relied on tem.
This commit is contained in:
Mikolaj Wielgus 2023-10-23 03:30:51 +00:00
parent 62579d98ba
commit aaad590870
8 changed files with 65 additions and 92 deletions

View File

@ -1,9 +1,4 @@
use petgraph::stable_graph::StableDiGraph; use crate::graph::{Ends, FixedDotIndex, Index, Interior};
use crate::{
graph::{DotIndex, Ends, FixedDotIndex, Index, Interior, Label, MakePrimitive, Weight},
primitive::TaggedPrevTaggedNext,
};
pub struct Band { pub struct Band {
from: FixedDotIndex, from: FixedDotIndex,
@ -11,7 +6,7 @@ pub struct Band {
interior: Vec<Index>, interior: Vec<Index>,
} }
impl Band { /*impl Band {
pub fn from_dot_prev( pub fn from_dot_prev(
dot: FixedDotIndex, dot: FixedDotIndex,
graph: &StableDiGraph<Weight, Label, usize>, graph: &StableDiGraph<Weight, Label, usize>,
@ -57,7 +52,7 @@ impl Band {
}) })
} }
} }
} }*/
impl Interior<Index> for Band { impl Interior<Index> for Band {
fn interior(&self) -> Vec<Index> { fn interior(&self) -> Vec<Index> {

View File

@ -1,10 +1,9 @@
use petgraph::stable_graph::StableDiGraph; use petgraph::stable_graph::StableDiGraph;
use crate::graph::{ use crate::graph::{
BendIndex, DotIndex, Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, Label, Weight,
Label, SegIndex, Weight,
}; };
use crate::primitive::{FixedBend, FixedDot, FixedSeg, TaggedPrevTaggedNext}; use crate::primitive::{FixedBend, FixedDot, FixedSeg};
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub struct Bow { pub struct Bow {
@ -22,19 +21,11 @@ impl Bow {
let bend = index; let bend = index;
let seg1_dot2 = FixedBend::new(bend, graph).prev().unwrap(); let seg1_dot2 = FixedBend::new(bend, graph).prev().unwrap();
let seg1 = FixedDot::new(seg1_dot2, graph) let seg1 = FixedDot::new(seg1_dot2, graph).seg().unwrap();
.tagged_prev()
.unwrap()
.into_fixed_seg()
.unwrap();
let seg1_dot1 = FixedSeg::new(seg1, graph).prev().unwrap(); let seg1_dot1 = FixedSeg::new(seg1, graph).prev().unwrap();
let seg2_dot1 = FixedBend::new(bend, graph).next().unwrap(); let seg2_dot1 = FixedBend::new(bend, graph).next().unwrap();
let seg2 = FixedDot::new(seg2_dot1, graph) let seg2 = FixedDot::new(seg2_dot1, graph).seg().unwrap();
.tagged_next()
.unwrap()
.into_fixed_seg()
.unwrap();
let seg2_dot2 = FixedSeg::new(seg2, graph).next().unwrap(); let seg2_dot2 = FixedSeg::new(seg2, graph).next().unwrap();
Self { Self {

View File

@ -4,8 +4,8 @@ use geo::{EuclideanLength, Point};
use crate::{ use crate::{
graph::{ graph::{
BendIndex, DotIndex, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex,
FixedSegIndex, FixedSegWeight, Index, SegIndex, FixedSegWeight, Index,
}, },
guide::Guide, guide::Guide,
layout::Layout, layout::Layout,

View File

@ -6,16 +6,13 @@ use petgraph::Direction::Incoming;
use rstar::primitives::GeomWithData; use rstar::primitives::GeomWithData;
use rstar::{RTree, RTreeObject}; use rstar::{RTree, RTreeObject};
use crate::band::Band;
use crate::bow::Bow; use crate::bow::Bow;
use crate::graph::{ use crate::graph::{
BendIndex, DotIndex, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex, FixedSegWeight,
FixedSegIndex, FixedSegWeight, GenericIndex, GetNodeIndex, HalfLooseSegWeight, Index, Interior, GenericIndex, GetNodeIndex, HalfLooseSegWeight, Index, Interior, Label, LooseDotIndex,
Label, LooseDotIndex, LooseDotWeight, MakePrimitive, Retag, SegIndex, Weight, LooseDotWeight, MakePrimitive, Retag, Weight,
};
use crate::primitive::{
GenericPrimitive, GetConnectable, GetWeight, MakeShape, TaggedPrevTaggedNext,
}; };
use crate::primitive::{GenericPrimitive, GetConnectable, GetWeight, MakeShape};
use crate::segbend::Segbend; use crate::segbend::Segbend;
use crate::shape::{Shape, ShapeTrait}; use crate::shape::{Shape, ShapeTrait};
@ -339,13 +336,13 @@ impl Layout {
Segbend::from_dot_next(dot, &self.graph) Segbend::from_dot_next(dot, &self.graph)
} }
pub fn prev_band(&self, to: FixedDotIndex) -> Option<Band> { /*pub fn prev_band(&self, to: FixedDotIndex) -> Option<Band> {
Band::from_dot_prev(to, &self.graph) Band::from_dot_prev(to, &self.graph)
} }
pub fn next_band(&self, from: FixedDotIndex) -> Option<Band> { pub fn next_band(&self, from: FixedDotIndex) -> Option<Band> {
Band::from_dot_next(from, &self.graph) Band::from_dot_next(from, &self.graph)
} }*/
#[debug_ensures(ret.is_ok() -> self.graph.node_count() == old(self.graph.node_count()))] #[debug_ensures(ret.is_ok() -> self.graph.node_count() == old(self.graph.node_count()))]
#[debug_ensures(ret.is_ok() -> self.graph.edge_count() == old(self.graph.edge_count()))] #[debug_ensures(ret.is_ok() -> self.graph.edge_count() == old(self.graph.edge_count()))]
@ -386,11 +383,11 @@ impl Layout {
#[debug_ensures(self.graph.edge_count() == old(self.graph.edge_count()))] #[debug_ensures(self.graph.edge_count() == old(self.graph.edge_count()))]
pub fn move_dot(&mut self, dot: FixedDotIndex, to: Point) -> Result<(), ()> { pub fn move_dot(&mut self, dot: FixedDotIndex, to: Point) -> Result<(), ()> {
self.primitive(dot) self.primitive(dot)
.tagged_prev() .seg()
.map(|prev| self.remove_from_rtree(prev)); .map(|seg| self.remove_from_rtree(seg.into()));
self.primitive(dot) self.primitive(dot)
.tagged_next() .bend()
.map(|next| self.remove_from_rtree(next)); .map(|bend| self.remove_from_rtree(bend.into()));
self.remove_from_rtree(dot.into()); self.remove_from_rtree(dot.into());
let mut dot_weight = self.primitive(dot).weight(); let mut dot_weight = self.primitive(dot).weight();
@ -405,21 +402,21 @@ impl Layout {
self.insert_into_rtree(dot.into()); self.insert_into_rtree(dot.into());
self.primitive(dot) self.primitive(dot)
.tagged_prev() .seg()
.map(|prev| self.insert_into_rtree(prev)); .map(|prev| self.insert_into_rtree(prev.into()));
self.primitive(dot) self.primitive(dot)
.tagged_next() .bend()
.map(|next| self.insert_into_rtree(next)); .map(|next| self.insert_into_rtree(next.into()));
return Err(()); return Err(());
} }
self.insert_into_rtree(dot.into()); self.insert_into_rtree(dot.into());
self.primitive(dot) self.primitive(dot)
.tagged_prev() .seg()
.map(|prev| self.insert_into_rtree(prev)); .map(|prev| self.insert_into_rtree(prev.into()));
self.primitive(dot) self.primitive(dot)
.tagged_next() .bend()
.map(|next| self.insert_into_rtree(next)); .map(|next| self.insert_into_rtree(next.into()));
Ok(()) Ok(())
} }

View File

@ -5,7 +5,7 @@ use petgraph::stable_graph::{NodeIndex, StableDiGraph};
use petgraph::Direction::{Incoming, Outgoing}; use petgraph::Direction::{Incoming, Outgoing};
use crate::graph::{ use crate::graph::{
BendIndex, DotIndex, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex,
FixedSegWeight, FullyLooseSegWeight, GenericIndex, GetNet, GetNodeIndex, HalfLooseSegWeight, FixedSegWeight, FullyLooseSegWeight, GenericIndex, GetNet, GetNodeIndex, HalfLooseSegWeight,
Index, Interior, Label, LooseBendIndex, LooseBendWeight, LooseDotWeight, MakePrimitive, Retag, Index, Interior, Label, LooseBendIndex, LooseBendWeight, LooseDotWeight, MakePrimitive, Retag,
Weight, Weight,
@ -28,12 +28,6 @@ pub trait GetConnectable: GetNet + GetGraph {
} }
} }
#[enum_dispatch]
pub trait TaggedPrevTaggedNext {
fn tagged_prev(&self) -> Option<Index>;
fn tagged_next(&self) -> Option<Index>;
}
#[enum_dispatch] #[enum_dispatch]
pub trait GetWeight<W> { pub trait GetWeight<W> {
fn weight(&self) -> W; fn weight(&self) -> W;
@ -174,21 +168,28 @@ where
} }
} }
impl<'a, W> TaggedPrevTaggedNext for GenericPrimitive<'a, W> {
fn tagged_prev(&self) -> Option<Index> {
self.prev_node()
.map(|ni| self.graph.node_weight(ni).unwrap().retag(ni))
}
fn tagged_next(&self) -> Option<Index> {
self.next_node()
.map(|ni| self.graph.node_weight(ni).unwrap().retag(ni))
}
}
pub type FixedDot<'a> = GenericPrimitive<'a, FixedDotWeight>; pub type FixedDot<'a> = GenericPrimitive<'a, FixedDotWeight>;
impl<'a> FixedDot<'a> { impl<'a> FixedDot<'a> {
pub fn seg(&self) -> Option<FixedSegIndex> {
self.graph
.neighbors_undirected(self.index.node_index())
.filter(|ni| {
self.graph
.edge_weight(
self.graph
.find_edge_undirected(self.index.node_index(), *ni)
.unwrap()
.0,
)
.unwrap()
.is_adjacent()
})
.filter(|ni| self.graph.node_weight(*ni).unwrap().is_fixed_seg())
.map(|ni| FixedSegIndex::new(ni))
.next()
}
pub fn bend(&self) -> Option<FixedBendIndex> { pub fn bend(&self) -> Option<FixedBendIndex> {
self.graph self.graph
.neighbors_undirected(self.index.node_index()) .neighbors_undirected(self.index.node_index())

View File

@ -3,12 +3,11 @@ use petgraph::visit::EdgeRef;
use spade::InsertionError; use spade::InsertionError;
use crate::astar::{astar, AstarStrategy, PathTracker}; use crate::astar::{astar, AstarStrategy, PathTracker};
use crate::graph::{DotIndex, Ends, FixedDotIndex, FixedDotWeight}; use crate::graph::{DotIndex, FixedDotIndex};
use crate::layout::Layout; use crate::layout::Layout;
use crate::math::Circle;
use crate::mesh::{Mesh, MeshEdgeReference, VertexIndex}; use crate::mesh::{Mesh, MeshEdgeReference, VertexIndex};
use crate::primitive::GetWeight;
use crate::rules::Rules; use crate::rules::Rules;
use crate::tracer::{Trace, Tracer}; use crate::tracer::{Trace, Tracer};
@ -114,11 +113,11 @@ impl Router {
pub fn reroute( pub fn reroute(
&mut self, &mut self,
from: FixedDotIndex, _from: FixedDotIndex,
to: Point, _to: Point,
observer: &mut impl RouterObserver, _observer: &mut impl RouterObserver,
) -> Result<Mesh, InsertionError> { ) -> Result<Mesh, InsertionError> {
let to_dot = if let Some(band) = self.layout.next_band(from) { /*let to_dot = if let Some(band) = self.layout.next_band(from) {
let to_dot = band.ends().1; let to_dot = band.ends().1;
self.layout.remove_interior(&band); self.layout.remove_interior(&band);
@ -134,7 +133,8 @@ impl Router {
.unwrap() // TODO. .unwrap() // TODO.
}; };
self.enroute(from, to_dot, observer) self.enroute(from, to_dot, observer)*/
Ok(Mesh::new())
} }
/*pub fn squeeze_around_dot( /*pub fn squeeze_around_dot(

View File

@ -1,11 +1,8 @@
use petgraph::stable_graph::StableDiGraph; use petgraph::stable_graph::StableDiGraph;
use crate::{ use crate::{
graph::{ graph::{Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, Label, Weight},
BendIndex, DotIndex, Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, primitive::{FixedBend, FixedDot},
Label, SegIndex, Weight,
},
primitive::{FixedBend, FixedDot, TaggedPrevTaggedNext},
}; };
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@ -24,13 +21,9 @@ impl Segbend {
dot: FixedDotIndex, dot: FixedDotIndex,
graph: &StableDiGraph<Weight, Label, usize>, graph: &StableDiGraph<Weight, Label, usize>,
) -> Option<Self> { ) -> Option<Self> {
let bend = *FixedDot::new(dot, graph).tagged_prev()?.as_fixed_bend()?; let bend = FixedDot::new(dot, graph).bend()?;
let dot = FixedBend::new(bend, graph).prev().unwrap(); let dot = FixedBend::new(bend, graph).prev().unwrap();
let seg = FixedDot::new(dot, graph) let seg = FixedDot::new(dot, graph).seg().unwrap();
.tagged_prev()
.unwrap()
.into_fixed_seg()
.unwrap();
Some(Self { bend, dot, seg }) Some(Self { bend, dot, seg })
} }
@ -38,13 +31,9 @@ impl Segbend {
dot: FixedDotIndex, dot: FixedDotIndex,
graph: &StableDiGraph<Weight, Label, usize>, graph: &StableDiGraph<Weight, Label, usize>,
) -> Option<Self> { ) -> Option<Self> {
let bend = *FixedDot::new(dot, graph).tagged_next()?.as_fixed_bend()?; let bend = FixedDot::new(dot, graph).bend()?;
let dot = FixedBend::new(bend, graph).next().unwrap(); let dot = FixedBend::new(bend, graph).next().unwrap();
let seg = FixedDot::new(dot, graph) let seg = FixedDot::new(dot, graph).seg().unwrap();
.tagged_next()
.unwrap()
.into_fixed_seg()
.unwrap();
Some(Self { bend, dot, seg }) Some(Self { bend, dot, seg })
} }
} }

View File

@ -6,7 +6,7 @@ use crate::{
graph::{Ends, FixedBendIndex, FixedDotIndex}, graph::{Ends, FixedBendIndex, FixedDotIndex},
layout::Layout, layout::Layout,
mesh::{Mesh, VertexIndex}, mesh::{Mesh, VertexIndex},
primitive::{GetWeight, MakeShape}, primitive::GetWeight,
rules::Rules, rules::Rules,
}; };
@ -124,11 +124,11 @@ impl<'a> Tracer<'a> {
fn is_under( fn is_under(
&mut self, &mut self,
head: Head, _head: Head,
around: FixedDotIndex, around: FixedDotIndex,
layer: FixedBendIndex, _layer: FixedBendIndex,
) -> Option<bool> { ) -> Option<bool> {
let around_pos = self.layout.primitive(around).weight().circle.pos; let _around_pos = self.layout.primitive(around).weight().circle.pos;
/*if Some(layer) != self.layout.primitive(head.dot()).prev_bend() { /*if Some(layer) != self.layout.primitive(head.dot()).prev_bend() {
Some( Some(