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