From 91fb18b1660aac056874de23ac43f66012a09534 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Fri, 24 Oct 2025 15:26:53 +0200 Subject: [PATCH] refactor(autorouter/ratline): Don't store `layer` in ratlines Translayer ratlines exist, so it makes no sense to assign them a layer. --- src/autorouter/planar_reconfigurer.rs | 1 - src/autorouter/ratline.rs | 44 ++++++++++++++++----------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/autorouter/planar_reconfigurer.rs b/src/autorouter/planar_reconfigurer.rs index 3e396d7..a29bd04 100644 --- a/src/autorouter/planar_reconfigurer.rs +++ b/src/autorouter/planar_reconfigurer.rs @@ -11,7 +11,6 @@ use specctra_core::mesadata::AccessMesadata; use crate::autorouter::{ planar_autoroute::{PlanarAutorouteConfiguration, PlanarAutorouteExecutionStepper}, planar_preconfigurer::SccIntersectionsAndLengthRatlinePlanarAutoroutePreconfigurer, - ratline::RatlineUid, scc::Scc, Autorouter, PlanarAutorouteOptions, }; diff --git a/src/autorouter/ratline.rs b/src/autorouter/ratline.rs index e50e03d..7f6c170 100644 --- a/src/autorouter/ratline.rs +++ b/src/autorouter/ratline.rs @@ -13,7 +13,7 @@ use crate::{ dot::FixedDotIndex, graph::{GetMaybeNet, MakePrimitiveRef, PrimitiveIndex}, }, - geometry::shape::MeasureLength, + geometry::{shape::MeasureLength, GetLayer}, graph::MakeRef, triangulation::GetTrianvertexNodeIndex, }; @@ -26,7 +26,6 @@ pub struct RatlineUid { #[derive(Debug, Default, Clone, Copy)] pub struct RatlineWeight { - pub layer: usize, pub band_termseg: Option, } @@ -99,16 +98,6 @@ impl<'a, M: AccessMesadata> RatlineRef<'a, M> { (source_dot, target_dot) } - pub fn layer(&self) -> usize { - self.autorouter - .ratsnests() - .on_principal_layer(self.uid.principal_layer) - .graph() - .edge_weight(self.uid.index) - .unwrap() - .layer - } - pub fn net(&self) -> usize { self.endpoint_dots() .0 @@ -117,12 +106,31 @@ impl<'a, M: AccessMesadata> RatlineRef<'a, M> { .unwrap() } - fn cut_primitives(&self) -> impl Iterator + '_ { - self.autorouter - .board() - .layout() - .drawing() - .cut(self.line_segment(), 0.0, self.layer()) + fn cut_primitives(&self) -> Box + '_> { + let endpoint_dots = self.endpoint_dots(); + + if 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 + .0 + .primitive_ref(self.autorouter.board().layout().drawing()) + .layer(); + + Box::new(self.autorouter.board().layout().drawing().cut( + self.line_segment(), + 0.0, + layer, + )) + } else { + Box::new(std::iter::empty()) + } } pub fn cut_other_net_primitives(&self) -> impl Iterator + '_ {