mirror of https://codeberg.org/topola/topola.git
Add methods to unroute or undraw segbends
This commit is contained in:
parent
f2346eedb8
commit
247b78087c
|
|
@ -63,10 +63,9 @@ impl<'a, 'b> Guide<'a, 'b> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn head_cw(&self, head: &Head) -> Option<bool> {
|
pub fn head_cw(&self, head: &Head) -> Option<bool> {
|
||||||
match &head.segbend {
|
head.segbend
|
||||||
Some(segbend) => Some(self.layout.primitive(segbend.bend).weight().cw),
|
.as_ref()
|
||||||
None => None,
|
.map(|segbend| self.layout.primitive(segbend.bend).weight().cw)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn head_circle(&self, head: &Head, width: f64) -> Circle {
|
fn head_circle(&self, head: &Head, width: f64) -> Circle {
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,6 @@ use geo::geometry::Point;
|
||||||
use petgraph::visit::{EdgeRef, IntoEdgeReferences};
|
use petgraph::visit::{EdgeRef, IntoEdgeReferences};
|
||||||
use spade::InsertionError;
|
use spade::InsertionError;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
use crate::astar::astar;
|
use crate::astar::astar;
|
||||||
use crate::bow::Bow;
|
use crate::bow::Bow;
|
||||||
use crate::graph::{BendIndex, DotIndex, Ends, SegIndex, TaggedIndex};
|
use crate::graph::{BendIndex, DotIndex, Ends, SegIndex, TaggedIndex};
|
||||||
|
|
@ -16,7 +14,6 @@ use crate::mesh::{Mesh, VertexIndex};
|
||||||
use crate::rules::{Conditions, Rules};
|
use crate::rules::{Conditions, Rules};
|
||||||
use crate::segbend::Segbend;
|
use crate::segbend::Segbend;
|
||||||
|
|
||||||
|
|
||||||
pub struct Router {
|
pub struct Router {
|
||||||
pub layout: Layout,
|
pub layout: Layout,
|
||||||
mesh: Mesh,
|
mesh: Mesh,
|
||||||
|
|
@ -90,12 +87,33 @@ impl Router {
|
||||||
Ok(())
|
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, ()> {
|
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.head = self.draw_around_dot(route.head, to, true, route.width)?;
|
||||||
route.path.push(self.mesh.vertex(to));
|
route.path.push(self.mesh.vertex(to));
|
||||||
Ok(route)
|
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 {
|
pub fn draw_start(&mut self, from: DotIndex) -> Head {
|
||||||
Head {
|
Head {
|
||||||
dot: from,
|
dot: from,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use petgraph::stable_graph::StableDiGraph;
|
use petgraph::stable_graph::StableDiGraph;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
graph::{BendIndex, DotIndex, Interior, Label, SegIndex, TaggedIndex, TaggedWeight},
|
graph::{BendIndex, DotIndex, Ends, Interior, Label, SegIndex, TaggedIndex, TaggedWeight},
|
||||||
primitive::{Bend, Dot},
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue