main: highlight nodes that made the probe fail

This commit is contained in:
Mikolaj Wielgus 2023-12-23 01:03:43 +00:00
parent 9a005c8ba3
commit da8af817bf
2 changed files with 36 additions and 21 deletions

View File

@ -706,16 +706,11 @@ impl Layout {
}
pub fn nodes(&self) -> impl Iterator<Item = Index> + '_ {
self.node_indices().map(|ni| {
self.graph
.node_weight(ni.node_index())
.unwrap()
.retag(ni.node_index())
})
self.rtree.iter().map(|wrapper| wrapper.data)
}
pub fn shapes(&self) -> impl Iterator<Item = Shape> + '_ {
self.node_indices().map(|ni| ni.primitive(self).shape())
self.nodes().map(|node| node.primitive(self).shape())
}
pub fn node_count(&self) -> usize {

View File

@ -27,7 +27,7 @@ mod triangulation;
use draw::DrawException;
use geo::point;
use graph::{FixedDotIndex, FixedSegWeight, Index, LooseDotIndex, MakePrimitive};
use layout::Layout;
use layout::{Infringement, Layout, LayoutException};
use mesh::{Mesh, MeshEdgeReference, VertexIndex};
use petgraph::visit::{EdgeRef, IntoEdgeReferences};
use primitive::MakeShape;
@ -115,6 +115,7 @@ impl<'a> RouterObserver for DebugRouterObserver<'a> {
None,
Some(tracer.mesh.clone()),
&trace.path,
&[],
40,
);
}
@ -132,6 +133,7 @@ impl<'a> RouterObserver for DebugRouterObserver<'a> {
None,
Some(tracer.mesh.clone()),
&path,
&[],
10,
);
}
@ -143,6 +145,17 @@ impl<'a> RouterObserver for DebugRouterObserver<'a> {
_edge: MeshEdgeReference,
result: Result<(), DrawException>,
) {
let highlight = match result {
Err(DrawException::CannotWrapAround(
..,
LayoutException::Infringement(Infringement(.., infringee1)),
LayoutException::Infringement(Infringement(.., infringee2)),
)) => {
vec![infringee1, infringee2]
}
_ => vec![],
};
render_times(
self.event_pump,
self.window,
@ -153,6 +166,7 @@ impl<'a> RouterObserver for DebugRouterObserver<'a> {
None,
Some(tracer.mesh.clone()),
&trace.path,
&highlight,
10,
);
}
@ -471,8 +485,8 @@ fn main() {
let _ = router.enroute(
dot_start,
dot_end,
&mut EmptyRouterObserver,
//&mut DebugRouterObserver::new(&mut event_pump, &window, &mut renderer, &font_context),
//&mut EmptyRouterObserver,
&mut DebugRouterObserver::new(&mut event_pump, &window, &mut renderer, &font_context),
);
render_times(
@ -485,6 +499,7 @@ fn main() {
None,
None,
&[],
&[],
-1,
);
@ -502,8 +517,8 @@ fn main() {
let _ = router.enroute(
dot_start2,
dot_end2,
&mut EmptyRouterObserver,
//&mut DebugRouterObserver::new(&mut event_pump, &window, &mut renderer, &font_context),
//&mut EmptyRouterObserver,
&mut DebugRouterObserver::new(&mut event_pump, &window, &mut renderer, &font_context),
);
render_times(
@ -516,6 +531,7 @@ fn main() {
None,
None,
&[],
&[],
-1,
);
@ -535,6 +551,7 @@ fn main() {
None,
None,
&[],
&[],
-1,
);
}
@ -549,6 +566,7 @@ fn render_times(
follower: Option<LooseDotIndex>,
mut mesh: Option<Mesh>,
path: &[VertexIndex],
highlight: &[Index],
times: i64,
) {
let mut i = 0;
@ -602,9 +620,17 @@ fn render_times(
};
//let result = panic::catch_unwind(|| {
for shape in layout.shapes() {
canvas.set_stroke_style(ColorU::new(200, 52, 52, 255));
canvas.set_fill_style(ColorU::new(200, 52, 52, 255));
for node in layout.nodes() {
let color = if highlight.contains(&node) {
ColorU::new(255, 100, 100, 255)
} else {
ColorU::new(200, 52, 52, 255)
};
canvas.set_stroke_style(color);
canvas.set_fill_style(color);
let shape = node.primitive(layout).shape();
match shape {
Shape::Dot(dot) => {
@ -658,12 +684,6 @@ fn render_times(
let start_point = edge.source().primitive(layout).shape().center();
let end_point = edge.target().primitive(layout).shape().center();
/*let color = if path.contains(&edge.source()) && path.contains(&edge.target()) {
ColorU::new(250, 250, 0, 255)
} else {
ColorU::new(125, 125, 125, 255)
};*/
let color = 'blk: {
if let (Some(source_pos), Some(target_pos)) = (
path.iter().position(|node| *node == edge.source()),