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::{
|
||||
autorouter::{Autorouter, AutorouterError, AutorouterStatus},
|
||||
board::mesadata::MesadataTrait,
|
||||
router::navmesh::Navmesh,
|
||||
router::{navmesh::Navmesh, Router},
|
||||
};
|
||||
|
||||
pub struct Autoroute {
|
||||
|
|
@ -54,23 +54,24 @@ impl Autoroute {
|
|||
(None, None)
|
||||
};
|
||||
|
||||
match autorouter.board.route_band(
|
||||
std::mem::replace(&mut self.navmesh, new_navmesh).unwrap(),
|
||||
100.0,
|
||||
) {
|
||||
Ok(band) => {
|
||||
autorouter
|
||||
.ratsnest
|
||||
.assign_band_to_ratline(self.cur_ratline.unwrap(), band);
|
||||
self.cur_ratline = new_ratline;
|
||||
let navmesh = std::mem::replace(&mut self.navmesh, new_navmesh).unwrap();
|
||||
let mut router = Router::new(autorouter.board.layout_mut());
|
||||
|
||||
if self.navmesh.is_some() {
|
||||
Ok(AutorouterStatus::Running)
|
||||
} else {
|
||||
Ok(AutorouterStatus::Finished)
|
||||
}
|
||||
}
|
||||
Err(err) => Err(AutorouterError::Router(err)),
|
||||
let band = router.route(navmesh.source(), navmesh.target(), 100.0)?;
|
||||
|
||||
autorouter
|
||||
.ratsnest
|
||||
.assign_band_to_ratline(self.cur_ratline.unwrap(), band);
|
||||
self.cur_ratline = new_ratline;
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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 {
|
||||
if let Some(apex) = self.layout.zone(zone).maybe_apex() {
|
||||
apex
|
||||
|
|
@ -162,6 +137,24 @@ impl<M: MesadataTrait> Board<M> {
|
|||
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> {
|
||||
if let Some(band) = self
|
||||
.pinname_pair_to_band
|
||||
|
|
|
|||
Loading…
Reference in New Issue