feat(autorouter/multilayer_preconfigurer): At first autoroute ratlines on their layers

This commit is contained in:
Mikolaj Wielgus 2025-10-28 00:08:07 +01:00
parent 81e27f0f60
commit 23f9eb3e35
2 changed files with 25 additions and 15 deletions

View File

@ -39,7 +39,7 @@ impl MultilayerPreconfigurer {
.ratlines
.iter()
.enumerate()
.map(|(i, ratline)| (*ratline, i % 2))
.map(|(_i, ratline)| (*ratline, ratline.ref_(autorouter).preferred_layer()))
.collect(),
)
}

View File

@ -106,31 +106,41 @@ impl<'a, M: AccessMesadata> RatlineRef<'a, M> {
.unwrap()
}
fn cut_primitives(&self) -> Box<dyn Iterator<Item = PrimitiveIndex> + '_> {
pub fn layer(&self) -> Option<usize> {
let endpoint_dots = self.endpoint_dots();
if endpoint_dots
(endpoint_dots
.0
.primitive_ref(self.autorouter.board().layout().drawing())
.layer()
== endpoint_dots
.1
.primitive_ref(self.autorouter.board().layout().drawing())
.layer()
{
let layer = endpoint_dots
.layer())
.then_some(
endpoint_dots
.0
.primitive_ref(self.autorouter.board().layout().drawing())
.layer();
.layer(),
)
}
Box::new(self.autorouter.board().layout().drawing().cut(
self.line_segment(),
0.0,
layer,
))
} else {
Box::new(std::iter::empty())
}
pub fn preferred_layer(&self) -> usize {
self.layer().unwrap_or(self.uid.principal_layer)
}
fn cut_primitives(&self) -> Box<dyn Iterator<Item = PrimitiveIndex> + '_> {
let Some(layer) = self.layer() else {
return Box::new(std::iter::empty());
};
Box::new(
self.autorouter
.board()
.layout()
.drawing()
.cut(self.line_segment(), 0.0, layer),
)
}
pub fn cut_other_net_primitives(&self) -> impl Iterator<Item = PrimitiveIndex> + '_ {