Route to goal immediately if a straight path exists at any vertex

This commit is contained in:
Mikolaj Wielgus 2023-09-03 05:41:21 +02:00
parent 73a831ba6d
commit 7d76051cbf
3 changed files with 18 additions and 13 deletions

View File

@ -23,7 +23,7 @@ mod rules;
mod segbend;
mod shape;
use graph::{Tag, TaggedIndex};
use graph::{SegWeight, Tag, TaggedIndex};
use layout::Layout;
use mesh::{MeshEdgeReference, VertexIndex};
use route::Route;
@ -224,7 +224,7 @@ fn main() {
})
.unwrap();
let _barrier2_dot1 = router
let barrier2_dot1 = router
.layout
.add_dot(DotWeight {
net: 20,
@ -234,7 +234,7 @@ fn main() {
},
})
.unwrap();
let _barrier2_dot2 = router
let barrier2_dot2 = router
.layout
.add_dot(DotWeight {
net: 20,
@ -244,20 +244,20 @@ fn main() {
},
})
.unwrap();
/*let _ = router.layout.add_seg(
let _ = router.layout.add_seg(
barrier2_dot1,
barrier2_dot2,
SegWeight {
net: 20,
width: 16.0,
},
);*/
);
/*let head = router.draw_start(dot5);
let head = router.draw_around_dot(head, dot6, false, 5.0).unwrap();
let _ = router.draw_finish(head, dot7, 5.0);*/
router.enroute(
let _ = router.enroute(
dot1_1,
dot1_2,
DebugRouteStrategy::new(DefaultRouteStrategy::new(), &mut event_pump, &mut canvas),

View File

@ -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> {
let new_path = tracker.reconstruct_path_to(vertex);
if vertex == self.to {
/*if vertex == self.to {
self.route
.rework_path(&mut self.trace, &new_path[..new_path.len() - 1], 5.0)
.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)
.ok();
None
} else {
} else {*/
//}
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 {

View File

@ -2,7 +2,6 @@ use enum_as_inner::EnumAsInner;
use geo::{point, polygon, EuclideanDistance, Intersects, Point, Polygon, Rotate};
use rstar::{RTreeObject, AABB};
use crate::math::{self, Circle};
#[derive(Debug, Clone, Copy, PartialEq)]
@ -101,8 +100,8 @@ impl Shape {
fn priority(&self) -> i64 {
match self {
Shape::Dot(..) => 3,
Shape::Bend(..) => 2,
Shape::Seg(..) => 1,
Shape::Seg(..) => 2,
Shape::Bend(..) => 1,
}
}