mirror of https://codeberg.org/topola/topola.git
Route to goal immediately if a straight path exists at any vertex
This commit is contained in:
parent
73a831ba6d
commit
7d76051cbf
12
src/main.rs
12
src/main.rs
|
|
@ -23,7 +23,7 @@ mod rules;
|
||||||
mod segbend;
|
mod segbend;
|
||||||
mod shape;
|
mod shape;
|
||||||
|
|
||||||
use graph::{Tag, TaggedIndex};
|
use graph::{SegWeight, Tag, TaggedIndex};
|
||||||
use layout::Layout;
|
use layout::Layout;
|
||||||
use mesh::{MeshEdgeReference, VertexIndex};
|
use mesh::{MeshEdgeReference, VertexIndex};
|
||||||
use route::Route;
|
use route::Route;
|
||||||
|
|
@ -224,7 +224,7 @@ fn main() {
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let _barrier2_dot1 = router
|
let barrier2_dot1 = router
|
||||||
.layout
|
.layout
|
||||||
.add_dot(DotWeight {
|
.add_dot(DotWeight {
|
||||||
net: 20,
|
net: 20,
|
||||||
|
|
@ -234,7 +234,7 @@ fn main() {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let _barrier2_dot2 = router
|
let barrier2_dot2 = router
|
||||||
.layout
|
.layout
|
||||||
.add_dot(DotWeight {
|
.add_dot(DotWeight {
|
||||||
net: 20,
|
net: 20,
|
||||||
|
|
@ -244,20 +244,20 @@ fn main() {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
/*let _ = router.layout.add_seg(
|
let _ = router.layout.add_seg(
|
||||||
barrier2_dot1,
|
barrier2_dot1,
|
||||||
barrier2_dot2,
|
barrier2_dot2,
|
||||||
SegWeight {
|
SegWeight {
|
||||||
net: 20,
|
net: 20,
|
||||||
width: 16.0,
|
width: 16.0,
|
||||||
},
|
},
|
||||||
);*/
|
);
|
||||||
|
|
||||||
/*let head = router.draw_start(dot5);
|
/*let head = router.draw_start(dot5);
|
||||||
let head = router.draw_around_dot(head, dot6, false, 5.0).unwrap();
|
let head = router.draw_around_dot(head, dot6, false, 5.0).unwrap();
|
||||||
let _ = router.draw_finish(head, dot7, 5.0);*/
|
let _ = router.draw_finish(head, dot7, 5.0);*/
|
||||||
|
|
||||||
router.enroute(
|
let _ = router.enroute(
|
||||||
dot1_1,
|
dot1_1,
|
||||||
dot1_2,
|
dot1_2,
|
||||||
DebugRouteStrategy::new(DefaultRouteStrategy::new(), &mut event_pump, &mut canvas),
|
DebugRouteStrategy::new(DefaultRouteStrategy::new(), &mut event_pump, &mut canvas),
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ impl<'a, RS: RouteStrategy> AstarStrategy<&Mesh, u64> for RouterAstarStrategy<'a
|
||||||
fn reroute(&mut self, vertex: VertexIndex, tracker: &PathTracker<&Mesh>) -> Option<u64> {
|
fn reroute(&mut self, vertex: VertexIndex, tracker: &PathTracker<&Mesh>) -> Option<u64> {
|
||||||
let new_path = tracker.reconstruct_path_to(vertex);
|
let new_path = tracker.reconstruct_path_to(vertex);
|
||||||
|
|
||||||
if vertex == self.to {
|
/*if vertex == self.to {
|
||||||
self.route
|
self.route
|
||||||
.rework_path(&mut self.trace, &new_path[..new_path.len() - 1], 5.0)
|
.rework_path(&mut self.trace, &new_path[..new_path.len() - 1], 5.0)
|
||||||
.ok();
|
.ok();
|
||||||
|
|
@ -79,10 +79,16 @@ impl<'a, RS: RouteStrategy> AstarStrategy<&Mesh, u64> for RouterAstarStrategy<'a
|
||||||
.finish(&mut self.trace, new_path[new_path.len() - 1], 5.0)
|
.finish(&mut self.trace, new_path[new_path.len() - 1], 5.0)
|
||||||
.ok();
|
.ok();
|
||||||
None
|
None
|
||||||
} else {
|
} else {*/
|
||||||
|
//}
|
||||||
|
|
||||||
self.route.rework_path(&mut self.trace, &new_path, 5.0).ok();
|
self.route.rework_path(&mut self.trace, &new_path, 5.0).ok();
|
||||||
Some(self.strategy.route_cost(&self.route, &new_path))
|
|
||||||
|
if self.route.finish(&mut self.trace, self.to, 5.0).is_ok() {
|
||||||
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some(self.strategy.route_cost(&self.route, &new_path))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn edge_cost(&mut self, edge: MeshEdgeReference) -> u64 {
|
fn edge_cost(&mut self, edge: MeshEdgeReference) -> u64 {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ use enum_as_inner::EnumAsInner;
|
||||||
use geo::{point, polygon, EuclideanDistance, Intersects, Point, Polygon, Rotate};
|
use geo::{point, polygon, EuclideanDistance, Intersects, Point, Polygon, Rotate};
|
||||||
use rstar::{RTreeObject, AABB};
|
use rstar::{RTreeObject, AABB};
|
||||||
|
|
||||||
|
|
||||||
use crate::math::{self, Circle};
|
use crate::math::{self, Circle};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||||
|
|
@ -101,8 +100,8 @@ impl Shape {
|
||||||
fn priority(&self) -> i64 {
|
fn priority(&self) -> i64 {
|
||||||
match self {
|
match self {
|
||||||
Shape::Dot(..) => 3,
|
Shape::Dot(..) => 3,
|
||||||
Shape::Bend(..) => 2,
|
Shape::Seg(..) => 2,
|
||||||
Shape::Seg(..) => 1,
|
Shape::Bend(..) => 1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue