Add methods to unroute or undraw segbends

This commit is contained in:
Mikolaj Wielgus 2023-08-29 21:11:03 +02:00
parent f2346eedb8
commit 247b78087c
3 changed files with 31 additions and 8 deletions

View File

@ -63,10 +63,9 @@ impl<'a, 'b> Guide<'a, 'b> {
}
pub fn head_cw(&self, head: &Head) -> Option<bool> {
match &head.segbend {
Some(segbend) => Some(self.layout.primitive(segbend.bend).weight().cw),
None => None,
}
head.segbend
.as_ref()
.map(|segbend| self.layout.primitive(segbend.bend).weight().cw)
}
fn head_circle(&self, head: &Head, width: f64) -> Circle {

View File

@ -2,8 +2,6 @@ use geo::geometry::Point;
use petgraph::visit::{EdgeRef, IntoEdgeReferences};
use spade::InsertionError;
use crate::astar::astar;
use crate::bow::Bow;
use crate::graph::{BendIndex, DotIndex, Ends, SegIndex, TaggedIndex};
@ -16,7 +14,6 @@ use crate::mesh::{Mesh, VertexIndex};
use crate::rules::{Conditions, Rules};
use crate::segbend::Segbend;
pub struct Router {
pub layout: Layout,
mesh: Mesh,
@ -90,12 +87,33 @@ impl Router {
Ok(())
}
fn unroute_step(&mut self, mut route: Route) -> Result<Route, ()> {
route.head = self.undraw_segbend(route.head).unwrap();
route.path.pop();
Ok(route)
}
fn route_step(&mut self, mut route: Route, to: DotIndex) -> Result<Route, ()> {
route.head = self.draw_around_dot(route.head, to, true, route.width)?;
route.path.push(self.mesh.vertex(to));
Ok(route)
}
pub fn undraw_segbend(&mut self, head: Head) -> Option<Head> {
let segbend = head.segbend.unwrap();
if let Some(prev_dot) = self.layout.primitive(segbend.ends().0).prev() {
self.layout.remove_interior(&segbend);
Some(Head {
dot: prev_dot,
segbend: self.layout.prev_segbend(prev_dot),
})
} else {
None
}
}
pub fn draw_start(&mut self, from: DotIndex) -> Head {
Head {
dot: from,

View File

@ -1,7 +1,7 @@
use petgraph::stable_graph::StableDiGraph;
use crate::{
graph::{BendIndex, DotIndex, Interior, Label, SegIndex, TaggedIndex, TaggedWeight},
graph::{BendIndex, DotIndex, Ends, Interior, Label, SegIndex, TaggedIndex, TaggedWeight},
primitive::{Bend, Dot},
};
@ -64,3 +64,9 @@ impl Interior<TaggedIndex> for Segbend {
]
}
}
impl Ends<SegIndex, BendIndex> for Segbend {
fn ends(&self) -> (SegIndex, BendIndex) {
(self.seg, self.bend)
}
}