mirror of https://codeberg.org/topola/topola.git
primitive: Remove Option<...> as loose dot is always adjacent to a seg
This commit is contained in:
parent
c163716a6a
commit
0cf7c718f3
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Segbend> {
|
||||
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(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<LooseBendIndex> {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Weight, Label, usize>,
|
||||
) -> Option<Self> {
|
||||
let bend = LooseDot::new(dot, graph).bend()?;
|
||||
pub fn from_dot(dot: LooseDotIndex, graph: &StableDiGraph<Weight, Label, usize>) -> 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 }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue