autorouter: return a different status every time routing a band finishes

This commit is contained in:
Mikolaj Wielgus 2024-08-01 12:22:46 +02:00
parent 49bfbf1ed7
commit 5b32797022
3 changed files with 11 additions and 9 deletions

View File

@ -41,9 +41,9 @@ impl Autoroute {
Ok(this) Ok(this)
} }
pub fn step<M: AccessMesadata>( pub fn step(
&mut self, &mut self,
autorouter: &mut Autorouter<M>, autorouter: &mut Autorouter<impl AccessMesadata>,
) -> Result<AutorouterStatus, AutorouterError> { ) -> Result<AutorouterStatus, AutorouterError> {
let Some(ref mut route) = self.route else { let Some(ref mut route) = self.route else {
// Shouldn't happen. // Shouldn't happen.
@ -56,13 +56,13 @@ impl Autoroute {
let (source, target) = autorouter.ratline_endpoints(curr_ratline); 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 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); return Ok(AutorouterStatus::Running);
}; };
band_last_seg band_termseg
}; };
let band = autorouter let band = autorouter
@ -70,11 +70,11 @@ impl Autoroute {
.layout() .layout()
.drawing() .drawing()
.collect() .collect()
.loose_band_uid(band_last_seg.into()); .loose_band_uid(band_termseg.into());
autorouter autorouter
.ratsnest .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 autorouter
.board .board
@ -91,7 +91,7 @@ impl Autoroute {
self.curr_ratline = Some(new_ratline); self.curr_ratline = Some(new_ratline);
self.route = Some(router.route_walk(source, target, 100.0)?); self.route = Some(router.route_walk(source, target, 100.0)?);
Ok(AutorouterStatus::Running) Ok(AutorouterStatus::Routed(band_termseg))
} }
} }

View File

@ -4,7 +4,7 @@ use thiserror::Error;
use crate::{ use crate::{
board::{mesadata::AccessMesadata, Board}, board::{mesadata::AccessMesadata, Board},
drawing::{dot::FixedDotIndex, Infringement}, drawing::{band::BandTermsegIndex, dot::FixedDotIndex, Infringement},
layout::via::ViaWeight, layout::via::ViaWeight,
router::{navmesh::NavmeshError, RouterError}, router::{navmesh::NavmeshError, RouterError},
triangulation::GetTrianvertexNodeIndex, triangulation::GetTrianvertexNodeIndex,
@ -32,6 +32,7 @@ pub enum AutorouterError {
pub enum AutorouterStatus { pub enum AutorouterStatus {
Running, Running,
Routed(BandTermsegIndex),
Finished, Finished,
} }

View File

@ -96,6 +96,7 @@ impl Execute {
match self { match self {
Execute::Autoroute(autoroute) => match autoroute.step(&mut invoker.autorouter)? { Execute::Autoroute(autoroute) => match autoroute.step(&mut invoker.autorouter)? {
AutorouterStatus::Running => Ok(InvokerStatus::Running), AutorouterStatus::Running => Ok(InvokerStatus::Running),
AutorouterStatus::Routed(..) => Ok(InvokerStatus::Running),
AutorouterStatus::Finished => Ok(InvokerStatus::Finished), AutorouterStatus::Finished => Ok(InvokerStatus::Finished),
}, },
Execute::PlaceVia(place_via) => { Execute::PlaceVia(place_via) => {