primitive: Remove Option<...> as loose dot is always adjacent to a seg

This commit is contained in:
Mikolaj Wielgus 2023-10-28 19:11:59 +00:00
parent c163716a6a
commit 0cf7c718f3
6 changed files with 26 additions and 43 deletions

View File

@ -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 {

View File

@ -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(),
}

View File

@ -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(())
}

View File

@ -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()
}
}

View File

@ -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 }
}
}

View File

@ -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,
};