diff --git a/src/autorouter/multilayer_preconfigurer.rs b/src/autorouter/multilayer_preconfigurer.rs index ba249d7..7251151 100644 --- a/src/autorouter/multilayer_preconfigurer.rs +++ b/src/autorouter/multilayer_preconfigurer.rs @@ -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(), ) } diff --git a/src/autorouter/ratline.rs b/src/autorouter/ratline.rs index 7f6c170..6bb035c 100644 --- a/src/autorouter/ratline.rs +++ b/src/autorouter/ratline.rs @@ -106,31 +106,41 @@ impl<'a, M: AccessMesadata> RatlineRef<'a, M> { .unwrap() } - fn cut_primitives(&self) -> Box + '_> { + pub fn layer(&self) -> Option { 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 + '_> { + 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 + '_ {