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> {
|
||||
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 {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue