diff --git a/src/bow.rs b/src/bow.rs index 555e9b2..decb6ee 100644 --- a/src/bow.rs +++ b/src/bow.rs @@ -1,6 +1,6 @@ use petgraph::stable_graph::StableDiGraph; -use crate::graph::{BendIndex, DotIndex, Label, Path, SegIndex, TaggedIndex, TaggedWeight}; +use crate::graph::{BendIndex, DotIndex, Label, SegIndex, TaggedIndex, TaggedWeight, Walk}; use crate::primitive::{Bend, Dot, Seg}; pub struct Bow<'a> { @@ -18,13 +18,21 @@ impl<'a> Bow<'a> { pub fn new(index: BendIndex, graph: &'a StableDiGraph) -> Self { let bend = index; - let seg1_dot2 = *Bend::new(bend, graph).prev().unwrap().as_dot().unwrap(); - let seg1 = *Dot::new(seg1_dot2, graph).prev().unwrap().as_seg().unwrap(); - let seg1_dot1 = *Seg::new(seg1, graph).prev().unwrap().as_dot().unwrap(); + let seg1_dot2 = Bend::new(bend, graph).prev().unwrap(); + let seg1 = *Dot::new(seg1_dot2, graph) + .tagged_prev() + .unwrap() + .as_seg() + .unwrap(); + let seg1_dot1 = Seg::new(seg1, graph).prev().unwrap(); - let seg2_dot1 = *Bend::new(bend, graph).next().unwrap().as_dot().unwrap(); - let seg2 = *Dot::new(seg2_dot1, graph).next().unwrap().as_seg().unwrap(); - let seg2_dot2 = *Seg::new(seg2, graph).next().unwrap().as_dot().unwrap(); + let seg2_dot1 = Bend::new(bend, graph).next().unwrap(); + let seg2 = *Dot::new(seg2_dot1, graph) + .tagged_next() + .unwrap() + .as_seg() + .unwrap(); + let seg2_dot2 = Seg::new(seg2, graph).next().unwrap(); Self { seg1_dot1, @@ -39,7 +47,7 @@ impl<'a> Bow<'a> { } } -impl<'a> Path for Bow<'a> { +impl<'a> Walk for Bow<'a> { fn interior(&self) -> Vec { vec![ TaggedIndex::Seg(self.seg1), diff --git a/src/graph.rs b/src/graph.rs index 783d953..58c0b56 100644 --- a/src/graph.rs +++ b/src/graph.rs @@ -4,7 +4,7 @@ use std::marker::PhantomData; use crate::math::Circle; -pub trait Path { +pub trait Walk { fn interior(&self) -> Vec; fn closure(&self) -> Vec; fn ends(&self) -> [DotIndex; 2]; diff --git a/src/layout.rs b/src/layout.rs index 3d62782..b0479fd 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -8,8 +8,8 @@ use spade::{DelaunayTriangulation, HasPosition, Point2, Triangulation}; use crate::bow::Bow; use crate::graph::{ - BendIndex, BendWeight, DotIndex, DotWeight, Index, Label, Path, SegIndex, SegWeight, Tag, - TaggedIndex, TaggedWeight, + BendIndex, BendWeight, DotIndex, DotWeight, Index, Label, SegIndex, SegWeight, Tag, + TaggedIndex, TaggedWeight, Walk, }; use crate::primitive::Primitive; use crate::shape::Shape; @@ -261,8 +261,7 @@ impl Layout { } pub fn dots(&self) -> impl Iterator + '_ { - self.nodes() - .filter_map(|ni| ni.as_dot().and_then(|di| Some(*di))) + self.nodes().filter_map(|ni| ni.as_dot().map(|di| *di)) } pub fn shapes(&self) -> impl Iterator + '_ { diff --git a/src/primitive.rs b/src/primitive.rs index 1b8f4b9..6908ecd 100644 --- a/src/primitive.rs +++ b/src/primitive.rs @@ -1,11 +1,11 @@ use std::mem::{self, swap}; -use petgraph::stable_graph::StableDiGraph; +use petgraph::stable_graph::{NodeIndex, StableDiGraph}; use petgraph::Direction::{Incoming, Outgoing}; use crate::graph::{ - BendIndex, BendWeight, DotIndex, DotWeight, Index, Label, Path, SegIndex, SegWeight, Tag, - TaggedIndex, TaggedWeight, + BendIndex, BendWeight, DotIndex, DotWeight, Index, Label, SegIndex, SegWeight, Tag, + TaggedIndex, TaggedWeight, Walk, }; use crate::math::{self, Circle}; use crate::shape::{BendShape, DotShape, SegShape, Shape}; @@ -80,20 +80,7 @@ impl<'a, Weight> Primitive<'a, Weight> { .map(|index| Index::