mirror of https://codeberg.org/topola/topola.git
board: remove `.remove_band()` method
This commit is contained in:
parent
00b997b60e
commit
ea991314b2
|
|
@ -3,7 +3,7 @@ use petgraph::graph::EdgeIndex;
|
||||||
use crate::{
|
use crate::{
|
||||||
autorouter::{Autorouter, AutorouterError, AutorouterStatus},
|
autorouter::{Autorouter, AutorouterError, AutorouterStatus},
|
||||||
board::mesadata::MesadataTrait,
|
board::mesadata::MesadataTrait,
|
||||||
router::navmesh::Navmesh,
|
router::{navmesh::Navmesh, Router},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct Autoroute {
|
pub struct Autoroute {
|
||||||
|
|
@ -54,23 +54,24 @@ impl Autoroute {
|
||||||
(None, None)
|
(None, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
match autorouter.board.route_band(
|
let navmesh = std::mem::replace(&mut self.navmesh, new_navmesh).unwrap();
|
||||||
std::mem::replace(&mut self.navmesh, new_navmesh).unwrap(),
|
let mut router = Router::new(autorouter.board.layout_mut());
|
||||||
100.0,
|
|
||||||
) {
|
|
||||||
Ok(band) => {
|
|
||||||
autorouter
|
|
||||||
.ratsnest
|
|
||||||
.assign_band_to_ratline(self.cur_ratline.unwrap(), band);
|
|
||||||
self.cur_ratline = new_ratline;
|
|
||||||
|
|
||||||
if self.navmesh.is_some() {
|
let band = router.route(navmesh.source(), navmesh.target(), 100.0)?;
|
||||||
Ok(AutorouterStatus::Running)
|
|
||||||
} else {
|
autorouter
|
||||||
Ok(AutorouterStatus::Finished)
|
.ratsnest
|
||||||
}
|
.assign_band_to_ratline(self.cur_ratline.unwrap(), band);
|
||||||
}
|
self.cur_ratline = new_ratline;
|
||||||
Err(err) => Err(AutorouterError::Router(err)),
|
|
||||||
|
autorouter
|
||||||
|
.board
|
||||||
|
.try_set_band_between_nodes(navmesh.source(), navmesh.target(), band);
|
||||||
|
|
||||||
|
if self.navmesh.is_some() {
|
||||||
|
Ok(AutorouterStatus::Running)
|
||||||
|
} else {
|
||||||
|
Ok(AutorouterStatus::Finished)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,31 +115,6 @@ impl<M: MesadataTrait> Board<M> {
|
||||||
zone
|
zone
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn route_band(
|
|
||||||
&mut self,
|
|
||||||
navmesh: Navmesh,
|
|
||||||
width: f64,
|
|
||||||
) -> Result<BandFirstSegIndex, RouterError> {
|
|
||||||
let source_pinname = self
|
|
||||||
.node_pinname(GenericNode::Primitive(navmesh.source().into()))
|
|
||||||
.unwrap()
|
|
||||||
.to_string();
|
|
||||||
let target_pinname = self
|
|
||||||
.node_pinname(GenericNode::Primitive(navmesh.target().into()))
|
|
||||||
.unwrap()
|
|
||||||
.to_string();
|
|
||||||
|
|
||||||
let mut router = Router::new(self.layout_mut());
|
|
||||||
let result = router.route(navmesh.source(), navmesh.target(), width);
|
|
||||||
|
|
||||||
if let Ok(band) = result {
|
|
||||||
self.pinname_pair_to_band
|
|
||||||
.insert((source_pinname, target_pinname), band);
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn zone_apex(&mut self, zone: GenericIndex<ZoneWeight>) -> FixedDotIndex {
|
pub fn zone_apex(&mut self, zone: GenericIndex<ZoneWeight>) -> FixedDotIndex {
|
||||||
if let Some(apex) = self.layout.zone(zone).maybe_apex() {
|
if let Some(apex) = self.layout.zone(zone).maybe_apex() {
|
||||||
apex
|
apex
|
||||||
|
|
@ -162,6 +137,24 @@ impl<M: MesadataTrait> Board<M> {
|
||||||
self.node_to_pinname.get(&node)
|
self.node_to_pinname.get(&node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn try_set_band_between_nodes(
|
||||||
|
&mut self,
|
||||||
|
source: FixedDotIndex,
|
||||||
|
target: FixedDotIndex,
|
||||||
|
band: BandFirstSegIndex,
|
||||||
|
) {
|
||||||
|
let source_pinname = self
|
||||||
|
.node_pinname(GenericNode::Primitive(source.into()))
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
let target_pinname = self
|
||||||
|
.node_pinname(GenericNode::Primitive(target.into()))
|
||||||
|
.unwrap()
|
||||||
|
.to_string();
|
||||||
|
self.pinname_pair_to_band
|
||||||
|
.insert((source_pinname, target_pinname), band);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn band_between_pins(&self, pinname1: &str, pinname2: &str) -> Option<BandFirstSegIndex> {
|
pub fn band_between_pins(&self, pinname1: &str, pinname2: &str) -> Option<BandFirstSegIndex> {
|
||||||
if let Some(band) = self
|
if let Some(band) = self
|
||||||
.pinname_pair_to_band
|
.pinname_pair_to_band
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue