From 5b32797022879ed5373c166b750521fe56b51d8c Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Thu, 1 Aug 2024 12:22:46 +0200 Subject: [PATCH] autorouter: return a different status every time routing a band finishes --- src/autorouter/autoroute.rs | 16 ++++++++-------- src/autorouter/autorouter.rs | 3 ++- src/autorouter/invoker.rs | 1 + 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/autorouter/autoroute.rs b/src/autorouter/autoroute.rs index 7c07a92..b2d1188 100644 --- a/src/autorouter/autoroute.rs +++ b/src/autorouter/autoroute.rs @@ -41,9 +41,9 @@ impl Autoroute { Ok(this) } - pub fn step( + pub fn step( &mut self, - autorouter: &mut Autorouter, + autorouter: &mut Autorouter, ) -> Result { let Some(ref mut route) = self.route else { // Shouldn't happen. @@ -56,13 +56,13 @@ impl Autoroute { let (source, target) = autorouter.ratline_endpoints(curr_ratline); - let band_last_seg = { + let band_termseg = { let mut router = Router::new(autorouter.board.layout_mut()); - let RouterStatus::Finished(band_last_seg) = route.step(&mut router)? else { + let RouterStatus::Finished(band_termseg) = route.step(&mut router)? else { return Ok(AutorouterStatus::Running); }; - band_last_seg + band_termseg }; let band = autorouter @@ -70,11 +70,11 @@ impl Autoroute { .layout() .drawing() .collect() - .loose_band_uid(band_last_seg.into()); + .loose_band_uid(band_termseg.into()); autorouter .ratsnest - .assign_band_termseg_to_ratline(self.curr_ratline.unwrap(), band_last_seg); + .assign_band_termseg_to_ratline(self.curr_ratline.unwrap(), band_termseg); autorouter .board @@ -91,7 +91,7 @@ impl Autoroute { self.curr_ratline = Some(new_ratline); self.route = Some(router.route_walk(source, target, 100.0)?); - Ok(AutorouterStatus::Running) + Ok(AutorouterStatus::Routed(band_termseg)) } } diff --git a/src/autorouter/autorouter.rs b/src/autorouter/autorouter.rs index ae5aeac..7a01d95 100644 --- a/src/autorouter/autorouter.rs +++ b/src/autorouter/autorouter.rs @@ -4,7 +4,7 @@ use thiserror::Error; use crate::{ board::{mesadata::AccessMesadata, Board}, - drawing::{dot::FixedDotIndex, Infringement}, + drawing::{band::BandTermsegIndex, dot::FixedDotIndex, Infringement}, layout::via::ViaWeight, router::{navmesh::NavmeshError, RouterError}, triangulation::GetTrianvertexNodeIndex, @@ -32,6 +32,7 @@ pub enum AutorouterError { pub enum AutorouterStatus { Running, + Routed(BandTermsegIndex), Finished, } diff --git a/src/autorouter/invoker.rs b/src/autorouter/invoker.rs index 1fb504e..a0b3181 100644 --- a/src/autorouter/invoker.rs +++ b/src/autorouter/invoker.rs @@ -96,6 +96,7 @@ impl Execute { match self { Execute::Autoroute(autoroute) => match autoroute.step(&mut invoker.autorouter)? { AutorouterStatus::Running => Ok(InvokerStatus::Running), + AutorouterStatus::Routed(..) => Ok(InvokerStatus::Running), AutorouterStatus::Finished => Ok(InvokerStatus::Finished), }, Execute::PlaceVia(place_via) => {