diff --git a/src/bow.rs b/src/bow.rs index 0044c94..4a535ec 100644 --- a/src/bow.rs +++ b/src/bow.rs @@ -1,9 +1,4 @@ -use petgraph::stable_graph::StableDiGraph; - -use crate::graph::{ - GetEnds, Index, Interior, Label, LooseBendIndex, LooseDotIndex, LooseSegIndex, Weight, -}; -use crate::primitive::{GetOtherEnd, LooseBend, LooseDot, LooseSeg}; +use crate::graph::{GetEnds, Index, Interior, LooseBendIndex, LooseDotIndex, LooseSegIndex}; #[derive(Debug, Clone, Copy)] pub struct Bow { diff --git a/src/draw.rs b/src/draw.rs index 31c35b3..889fbd2 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -1,4 +1,4 @@ -use contracts::{debug_ensures, debug_requires}; +use contracts::debug_ensures; use enum_dispatch::enum_dispatch; use geo::{EuclideanLength, Point}; @@ -334,7 +334,7 @@ impl<'a> Draw<'a> { DotIndex::Fixed(loose) => BareHead { dot: loose }.into(), DotIndex::Loose(fixed) => SegbendHead { dot: fixed, - segbend: self.layout.segbend(fixed).unwrap(), + segbend: self.layout.segbend(fixed), } .into(), } diff --git a/src/layout.rs b/src/layout.rs index ba319ba..7204a80 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -6,12 +6,11 @@ use petgraph::Direction::Incoming; use rstar::primitives::GeomWithData; use rstar::{RTree, RTreeObject}; -use crate::bow::Bow; use crate::graph::{ - BendWeight, DotIndex, DotWeight, FixedBendIndex, FixedBendWeight, FixedDotIndex, - FixedDotWeight, FixedSegIndex, FixedSegWeight, GenericIndex, GetNetMut, GetNodeIndex, Index, - Interior, Label, LooseBendIndex, LooseBendWeight, LooseDotIndex, LooseDotWeight, LooseSegIndex, - LooseSegWeight, MakePrimitive, Retag, SegWeight, Weight, + BendWeight, DotIndex, DotWeight, FixedBendIndex, FixedDotIndex, FixedDotWeight, FixedSegIndex, + FixedSegWeight, GenericIndex, GetNetMut, GetNodeIndex, Index, Interior, Label, LooseBendIndex, + LooseBendWeight, LooseDotIndex, LooseDotWeight, LooseSegIndex, LooseSegWeight, MakePrimitive, + Retag, SegWeight, Weight, }; use crate::primitive::{GenericPrimitive, GetConnectable, GetWeight, MakeShape}; use crate::segbend::Segbend; @@ -301,7 +300,7 @@ impl Layout { Bow::from_bend(bend, &self.graph) }*/ - pub fn segbend(&self, dot: LooseDotIndex) -> Option { + pub fn segbend(&self, dot: LooseDotIndex) -> Segbend { Segbend::from_dot(dot, &self.graph) } @@ -346,9 +345,7 @@ impl Layout { self.primitive(dot) .seg() .map(|seg| self.remove_from_rtree(seg.into())); - self.primitive(dot) - .bend() - .map(|bend| self.remove_from_rtree(bend.into())); + self.remove_from_rtree(self.primitive(dot).bend().into()); self.remove_from_rtree(dot.into()); let mut dot_weight = self.primitive(dot).weight(); @@ -364,20 +361,16 @@ impl Layout { self.insert_into_rtree(dot.into()); self.primitive(dot) .seg() - .map(|prev| self.insert_into_rtree(prev.into())); - self.primitive(dot) - .bend() - .map(|next| self.insert_into_rtree(next.into())); + .map(|seg| self.remove_from_rtree(seg.into())); + self.insert_into_rtree(self.primitive(dot).bend().into()); return Err(()); } self.insert_into_rtree(dot.into()); self.primitive(dot) .seg() - .map(|prev| self.insert_into_rtree(prev.into())); - self.primitive(dot) - .bend() - .map(|next| self.insert_into_rtree(next.into())); + .map(|seg| self.remove_from_rtree(seg.into())); + self.insert_into_rtree(self.primitive(dot).bend().into()); Ok(()) } diff --git a/src/primitive.rs b/src/primitive.rs index d5ca60f..f533c01 100644 --- a/src/primitive.rs +++ b/src/primitive.rs @@ -5,10 +5,10 @@ use petgraph::stable_graph::{NodeIndex, StableDiGraph}; use petgraph::Direction::{Incoming, Outgoing}; use crate::graph::{ - DotIndex, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegIndex, - FixedSegWeight, GenericIndex, GetEnds, GetNet, GetNodeIndex, GetWidth, Index, Interior, Label, - LooseBendIndex, LooseBendWeight, LooseDotIndex, LooseDotWeight, LooseSegIndex, LooseSegWeight, - MakePrimitive, Retag, Weight, + DotIndex, FixedBendIndex, FixedBendWeight, FixedDotIndex, FixedDotWeight, FixedSegWeight, + GenericIndex, GetEnds, GetNet, GetNodeIndex, GetWidth, Index, Interior, Label, LooseBendIndex, + LooseBendWeight, LooseDotIndex, LooseDotWeight, LooseSegIndex, LooseSegWeight, MakePrimitive, + Retag, Weight, }; use crate::math::{self, Circle}; use crate::shape::{BendShape, DotShape, SegShape, Shape, ShapeTrait}; @@ -204,7 +204,7 @@ impl<'a> LooseDot<'a> { .next() } - pub fn bend(&self) -> Option { + pub fn bend(&self) -> LooseBendIndex { self.graph .neighbors_undirected(self.index.node_index()) .filter(|ni| { @@ -221,6 +221,7 @@ impl<'a> LooseDot<'a> { .filter(|ni| self.graph.node_weight(*ni).unwrap().is_loose_bend()) .map(|ni| LooseBendIndex::new(ni)) .next() + .unwrap() } } diff --git a/src/segbend.rs b/src/segbend.rs index 81881b6..8729a9a 100644 --- a/src/segbend.rs +++ b/src/segbend.rs @@ -2,10 +2,9 @@ use petgraph::stable_graph::StableDiGraph; use crate::{ graph::{ - FixedBendIndex, FixedDotIndex, FixedSegIndex, GetEnds, Index, Interior, Label, - LooseBendIndex, LooseDotIndex, LooseSegIndex, Weight, + GetEnds, Index, Interior, Label, LooseBendIndex, LooseDotIndex, LooseSegIndex, Weight, }, - primitive::{FixedBend, FixedDot, GetOtherEnd, LooseBend, LooseDot}, + primitive::{GetOtherEnd, LooseBend, LooseDot}, }; #[derive(Debug, Clone, Copy)] @@ -16,14 +15,11 @@ pub struct Segbend { } impl Segbend { - pub fn from_dot( - dot: LooseDotIndex, - graph: &StableDiGraph, - ) -> Option { - let bend = LooseDot::new(dot, graph).bend()?; + pub fn from_dot(dot: LooseDotIndex, graph: &StableDiGraph) -> Self { + let bend = LooseDot::new(dot, graph).bend(); let dot = LooseBend::new(bend, graph).other_end(dot); - let seg = LooseDot::new(dot, graph).seg()?; - Some(Self { bend, dot, seg }) + let seg = LooseDot::new(dot, graph).seg().unwrap(); + Self { bend, dot, seg } } } diff --git a/src/tracer.rs b/src/tracer.rs index d7930de..6b20ce1 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -1,12 +1,10 @@ use contracts::debug_ensures; use crate::{ - bow::Bow, draw::{BareHead, Draw, Head, HeadTrait, SegbendHead}, - graph::{FixedBendIndex, FixedDotIndex, GetEnds}, + graph::FixedDotIndex, layout::Layout, mesh::{Mesh, VertexIndex}, - primitive::GetWeight, rules::Rules, };