mirror of https://codeberg.org/topola/topola.git
autorouter: return a different status every time routing a band finishes
This commit is contained in:
parent
49bfbf1ed7
commit
5b32797022
|
|
@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue