From da8af817bf5c62aa1588d21408f6c85b30652786 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Sat, 23 Dec 2023 01:03:43 +0000 Subject: [PATCH] main: highlight nodes that made the probe fail --- src/layout.rs | 9 ++------- src/main.rs | 48 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/layout.rs b/src/layout.rs index 72e4aad..c0b7cd8 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -706,16 +706,11 @@ impl Layout { } pub fn nodes(&self) -> impl Iterator + '_ { - 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 + '_ { - self.node_indices().map(|ni| ni.primitive(self).shape()) + self.nodes().map(|node| node.primitive(self).shape()) } pub fn node_count(&self) -> usize { diff --git a/src/main.rs b/src/main.rs index b7bd48b..4715737 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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, mut mesh: Option, 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()),