diff --git a/src/band.rs b/src/band.rs index ab4d64c..af7cb49 100644 --- a/src/band.rs +++ b/src/band.rs @@ -1,9 +1,4 @@ -use petgraph::stable_graph::StableDiGraph; - -use crate::{ - graph::{DotIndex, Ends, FixedDotIndex, Index, Interior, Label, MakePrimitive, Weight}, - primitive::TaggedPrevTaggedNext, -}; +use crate::graph::{Ends, FixedDotIndex, Index, Interior}; pub struct Band { from: FixedDotIndex, @@ -11,7 +6,7 @@ pub struct Band { interior: Vec, } -impl Band { +/*impl Band { pub fn from_dot_prev( dot: FixedDotIndex, graph: &StableDiGraph, @@ -57,7 +52,7 @@ impl Band { }) } } -} +}*/ impl Interior for Band { fn interior(&self) -> Vec { diff --git a/src/bow.rs b/src/bow.rs index d54c5cd..1e46cc7 100644 --- a/src/bow.rs +++ b/src/bow.rs @@ -1,10 +1,9 @@ use petgraph::stable_graph::StableDiGraph; use crate::graph::{ - BendIndex, DotIndex, Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, - Label, SegIndex, Weight, + Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, Label, Weight, }; -use crate::primitive::{FixedBend, FixedDot, FixedSeg, TaggedPrevTaggedNext}; +use crate::primitive::{FixedBend, FixedDot, FixedSeg}; #[derive(Debug, Clone, Copy)] pub struct Bow { @@ -22,19 +21,11 @@ impl Bow { let bend = index; let seg1_dot2 = FixedBend::new(bend, graph).prev().unwrap(); - let seg1 = FixedDot::new(seg1_dot2, graph) - .tagged_prev() - .unwrap() - .into_fixed_seg() - .unwrap(); + let seg1 = FixedDot::new(seg1_dot2, graph).seg().unwrap(); let seg1_dot1 = FixedSeg::new(seg1, graph).prev().unwrap(); let seg2_dot1 = FixedBend::new(bend, graph).next().unwrap(); - let seg2 = FixedDot::new(seg2_dot1, graph) - .tagged_next() - .unwrap() - .into_fixed_seg() - .unwrap(); + let seg2 = FixedDot::new(seg2_dot1, graph).seg().unwrap(); let seg2_dot2 = FixedSeg::new(seg2, graph).next().unwrap(); Self { diff --git a/src/draw.rs b/src/draw.rs index 6b55b2f..c162137 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -4,8 +4,8 @@ use geo::{EuclideanLength, Point}; use crate::{ graph::{ - BendIndex, DotIndex, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, - FixedSegIndex, FixedSegWeight, Index, SegIndex, + Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex, + FixedSegWeight, Index, }, guide::Guide, layout::Layout, diff --git a/src/layout.rs b/src/layout.rs index 79cde3f..84e68ea 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -6,16 +6,13 @@ use petgraph::Direction::Incoming; use rstar::primitives::GeomWithData; use rstar::{RTree, RTreeObject}; -use crate::band::Band; use crate::bow::Bow; use crate::graph::{ - BendIndex, DotIndex, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, - FixedSegIndex, FixedSegWeight, GenericIndex, GetNodeIndex, HalfLooseSegWeight, Index, Interior, - Label, LooseDotIndex, LooseDotWeight, MakePrimitive, Retag, SegIndex, Weight, -}; -use crate::primitive::{ - GenericPrimitive, GetConnectable, GetWeight, MakeShape, TaggedPrevTaggedNext, + FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex, FixedSegWeight, + GenericIndex, GetNodeIndex, HalfLooseSegWeight, Index, Interior, Label, LooseDotIndex, + LooseDotWeight, MakePrimitive, Retag, Weight, }; +use crate::primitive::{GenericPrimitive, GetConnectable, GetWeight, MakeShape}; use crate::segbend::Segbend; use crate::shape::{Shape, ShapeTrait}; @@ -339,13 +336,13 @@ impl Layout { Segbend::from_dot_next(dot, &self.graph) } - pub fn prev_band(&self, to: FixedDotIndex) -> Option { + /*pub fn prev_band(&self, to: FixedDotIndex) -> Option { Band::from_dot_prev(to, &self.graph) } pub fn next_band(&self, from: FixedDotIndex) -> Option { 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.edge_count() == old(self.graph.edge_count()))] @@ -386,11 +383,11 @@ impl Layout { #[debug_ensures(self.graph.edge_count() == old(self.graph.edge_count()))] pub fn move_dot(&mut self, dot: FixedDotIndex, to: Point) -> Result<(), ()> { self.primitive(dot) - .tagged_prev() - .map(|prev| self.remove_from_rtree(prev)); + .seg() + .map(|seg| self.remove_from_rtree(seg.into())); self.primitive(dot) - .tagged_next() - .map(|next| self.remove_from_rtree(next)); + .bend() + .map(|bend| self.remove_from_rtree(bend.into())); self.remove_from_rtree(dot.into()); let mut dot_weight = self.primitive(dot).weight(); @@ -405,21 +402,21 @@ impl Layout { self.insert_into_rtree(dot.into()); self.primitive(dot) - .tagged_prev() - .map(|prev| self.insert_into_rtree(prev)); + .seg() + .map(|prev| self.insert_into_rtree(prev.into())); self.primitive(dot) - .tagged_next() - .map(|next| self.insert_into_rtree(next)); + .bend() + .map(|next| self.insert_into_rtree(next.into())); return Err(()); } self.insert_into_rtree(dot.into()); self.primitive(dot) - .tagged_prev() - .map(|prev| self.insert_into_rtree(prev)); + .seg() + .map(|prev| self.insert_into_rtree(prev.into())); self.primitive(dot) - .tagged_next() - .map(|next| self.insert_into_rtree(next)); + .bend() + .map(|next| self.insert_into_rtree(next.into())); Ok(()) } diff --git a/src/primitive.rs b/src/primitive.rs index 6b3d6c4..3ac0dd2 100644 --- a/src/primitive.rs +++ b/src/primitive.rs @@ -5,7 +5,7 @@ use petgraph::stable_graph::{NodeIndex, StableDiGraph}; use petgraph::Direction::{Incoming, Outgoing}; use crate::graph::{ - BendIndex, DotIndex, Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, + Ends, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex, FixedSegWeight, FullyLooseSegWeight, GenericIndex, GetNet, GetNodeIndex, HalfLooseSegWeight, Index, Interior, Label, LooseBendIndex, LooseBendWeight, LooseDotWeight, MakePrimitive, Retag, Weight, @@ -28,12 +28,6 @@ pub trait GetConnectable: GetNet + GetGraph { } } -#[enum_dispatch] -pub trait TaggedPrevTaggedNext { - fn tagged_prev(&self) -> Option; - fn tagged_next(&self) -> Option; -} - #[enum_dispatch] pub trait GetWeight { fn weight(&self) -> W; @@ -174,21 +168,28 @@ where } } -impl<'a, W> TaggedPrevTaggedNext for GenericPrimitive<'a, W> { - fn tagged_prev(&self) -> Option { - self.prev_node() - .map(|ni| self.graph.node_weight(ni).unwrap().retag(ni)) - } - - fn tagged_next(&self) -> Option { - self.next_node() - .map(|ni| self.graph.node_weight(ni).unwrap().retag(ni)) - } -} - pub type FixedDot<'a> = GenericPrimitive<'a, FixedDotWeight>; impl<'a> FixedDot<'a> { + pub fn seg(&self) -> Option { + 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 { self.graph .neighbors_undirected(self.index.node_index()) diff --git a/src/router.rs b/src/router.rs index 0250401..0294ea2 100644 --- a/src/router.rs +++ b/src/router.rs @@ -3,12 +3,11 @@ use petgraph::visit::EdgeRef; use spade::InsertionError; use crate::astar::{astar, AstarStrategy, PathTracker}; -use crate::graph::{DotIndex, Ends, FixedDotIndex, FixedDotWeight}; +use crate::graph::{DotIndex, FixedDotIndex}; use crate::layout::Layout; -use crate::math::Circle; use crate::mesh::{Mesh, MeshEdgeReference, VertexIndex}; -use crate::primitive::GetWeight; + use crate::rules::Rules; use crate::tracer::{Trace, Tracer}; @@ -114,11 +113,11 @@ impl Router { pub fn reroute( &mut self, - from: FixedDotIndex, - to: Point, - observer: &mut impl RouterObserver, + _from: FixedDotIndex, + _to: Point, + _observer: &mut impl RouterObserver, ) -> Result { - 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; self.layout.remove_interior(&band); @@ -134,7 +133,8 @@ impl Router { .unwrap() // TODO. }; - self.enroute(from, to_dot, observer) + self.enroute(from, to_dot, observer)*/ + Ok(Mesh::new()) } /*pub fn squeeze_around_dot( diff --git a/src/segbend.rs b/src/segbend.rs index c630baa..1667b7d 100644 --- a/src/segbend.rs +++ b/src/segbend.rs @@ -1,11 +1,8 @@ use petgraph::stable_graph::StableDiGraph; use crate::{ - graph::{ - BendIndex, DotIndex, Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, - Label, SegIndex, Weight, - }, - primitive::{FixedBend, FixedDot, TaggedPrevTaggedNext}, + graph::{Ends, FixedBendIndex, FixedDotIndex, FixedSegIndex, Index, Interior, Label, Weight}, + primitive::{FixedBend, FixedDot}, }; #[derive(Debug, Clone, Copy)] @@ -24,13 +21,9 @@ impl Segbend { dot: FixedDotIndex, graph: &StableDiGraph, ) -> Option { - 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 seg = FixedDot::new(dot, graph) - .tagged_prev() - .unwrap() - .into_fixed_seg() - .unwrap(); + let seg = FixedDot::new(dot, graph).seg().unwrap(); Some(Self { bend, dot, seg }) } @@ -38,13 +31,9 @@ impl Segbend { dot: FixedDotIndex, graph: &StableDiGraph, ) -> Option { - 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 seg = FixedDot::new(dot, graph) - .tagged_next() - .unwrap() - .into_fixed_seg() - .unwrap(); + let seg = FixedDot::new(dot, graph).seg().unwrap(); Some(Self { bend, dot, seg }) } } diff --git a/src/tracer.rs b/src/tracer.rs index 9d1d7ce..3ff2c72 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -6,7 +6,7 @@ use crate::{ graph::{Ends, FixedBendIndex, FixedDotIndex}, layout::Layout, mesh::{Mesh, VertexIndex}, - primitive::{GetWeight, MakeShape}, + primitive::GetWeight, rules::Rules, }; @@ -124,11 +124,11 @@ impl<'a> Tracer<'a> { fn is_under( &mut self, - head: Head, + _head: Head, around: FixedDotIndex, - layer: FixedBendIndex, + _layer: FixedBendIndex, ) -> Option { - 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() { Some(