diff --git a/topola-egui/src/display.rs b/topola-egui/src/display.rs index 65cbb62..a023aaf 100644 --- a/topola-egui/src/display.rs +++ b/topola-egui/src/display.rs @@ -3,7 +3,10 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use crate::{viewport::Viewport, workspace::Workspace}; -use topola::{Joint, JointId, Polygon, PolygonId, Segment, SegmentId, Vector2}; +use topola::{ + Joint, JointId, PinSelection, Polygon, PolygonId, PrimitiveId, Ratline, Segment, SegmentId, + Vector2, +}; pub struct Display {} @@ -23,7 +26,7 @@ impl Display { self.display_layout(ctx, ui, /*menu_bar,*/ viewport, workspace); self.display_bboxes(ctx, ui, viewport, workspace); self.display_navmeshes(ctx, ui, viewport, workspace); - //self.display_ratsnest(ctx, ui, viewport, workspace); + self.display_ratsnest(ctx, ui, viewport, workspace); } fn display_layout( @@ -317,11 +320,31 @@ impl Display { } fn display_ratsnest( - ctx: &egui::Context, + &mut self, + _ctx: &egui::Context, ui: &egui::Ui, - viewport: &Viewport, + _viewport: &Viewport, workspace: &Workspace, ) { - // + for ratline in workspace.autorouter.ratsnest().ratlines() { + let layers = *ratline.endpoint_layers(); + let endpoints = *ratline.endpoints(); + + if !workspace.appearance_panel.visible[layers[0]] + || !workspace.appearance_panel.visible[layers[1]] + { + continue; + } + + //let stroke_width = 2.0 / viewport.scale_factor().max(1e-6); + + ui.painter().line_segment( + [ + egui::pos2(endpoints[0].x as f32, endpoints[0].y as f32), + egui::pos2(endpoints[1].x as f32, endpoints[1].y as f32), + ], + egui::Stroke::new(10.0, egui::Color32::BLUE), + ); + } } } diff --git a/topola/src/autorouter.rs b/topola/src/autorouter.rs index 059bf33..495373c 100644 --- a/topola/src/autorouter.rs +++ b/topola/src/autorouter.rs @@ -6,13 +6,14 @@ use derive_getters::Getters; use undoredo::Recorder; use crate::{ - Board, Joint, JointId, Polygon, PolygonId, Segment, SegmentId, Vector2, Via, ViaId, + Board, Joint, JointId, Polygon, PolygonId, Ratsnest, Segment, SegmentId, Vector2, Via, ViaId, navmesher::{MultiObstacleId, Navmesher}, }; #[derive(Clone, Debug, Getters)] pub struct Autorouter { navmesher: Navmesher, + ratsnest: Ratsnest, board: Board, joint_multiobstacles: Recorder>, @@ -31,6 +32,7 @@ impl Autorouter { .map(|p| Vector2::new(p[0], p[1])), *board.layout().layer_count(), ), + ratsnest: Ratsnest::new(&board), board, joint_multiobstacles: Recorder::new(Vec::new()),