From 6cebbb2816eaa2ffc51eada34d85eadcc24c2136 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Wed, 3 Jun 2026 00:19:25 +0200 Subject: [PATCH] Add method to locate all component-component repulsions for given component --- topola/src/layout/infringement.rs | 125 +++++++++++++++++------------- topola/src/layout/overlap.rs | 72 ++++++++--------- topola/src/layout/repulsion.rs | 89 ++++++++++++--------- 3 files changed, 158 insertions(+), 128 deletions(-) diff --git a/topola/src/layout/infringement.rs b/topola/src/layout/infringement.rs index 1df5d37..b68050f 100644 --- a/topola/src/layout/infringement.rs +++ b/topola/src/layout/infringement.rs @@ -4,7 +4,6 @@ use std::collections::BTreeSet; -use derive_getters::Getters; use derive_more::Constructor; use rstar::{ AABB, RTree, @@ -12,18 +11,28 @@ use rstar::{ }; use serde::{Deserialize, Serialize}; -use crate::board::Board; use crate::primitives::PrimitiveId; +use super::Layout; use super::compounds::{ComponentId, NetId}; use super::primitives::{JointId, PolygonId, SegmentId, ViaId}; #[derive( - Clone, Copy, Constructor, Debug, Deserialize, Eq, Getters, Ord, PartialEq, PartialOrd, Serialize, + Clone, Copy, Constructor, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize, )] -pub struct Infringement { - infringer: I, - infringee: E, +pub struct Infringement { + infringer: T, + infringee: U, +} + +impl Infringement { + pub fn infringer(&self) -> T { + self.infringer + } + + pub fn infringee(&self) -> U { + self.infringee + } } mod sealed { @@ -39,12 +48,12 @@ mod sealed { impl IntoPrimitiveId for PolygonId {} } -impl From> - for Infringement +impl From> + for Infringement where - E: sealed::IntoPrimitiveId, + U: sealed::IntoPrimitiveId, { - fn from(from: Infringement) -> Self { + fn from(from: Infringement) -> Self { Infringement { infringer: from.infringer, infringee: from.infringee.into(), @@ -52,10 +61,10 @@ where } } -impl From> +impl From> for Infringement { - fn from(from: Infringement) -> Self { + fn from(from: Infringement) -> Self { Infringement { infringer: from.infringer.into(), infringee: from.infringee.into(), @@ -63,8 +72,8 @@ impl From From> for Infringement { - fn from(from: Infringement) -> Self { +impl From> for Infringement { + fn from(from: Infringement) -> Self { Infringement { infringer: from.infringer.into(), infringee: from.infringee, @@ -72,15 +81,16 @@ impl From> for Infringe } } -impl Board { - pub fn locate_component_component_infringements( +impl Layout { + pub fn locate_component_infringements( &self, infringer: ComponentId, ) -> impl Iterator> + '_ { let mut infringee_components = BTreeSet::new(); for infringement in self.locate_component_primitive_infringements(infringer) { - let Some(infringee_component) = self.primitive_component(*infringement.infringee()) else { + let Some(infringee_component) = self.primitive_component(infringement.infringee()) + else { continue; }; @@ -93,14 +103,17 @@ impl Board { infringee_components .into_iter() - .map(move |infringee| Infringement::new(infringer, infringee)) + .map(move |infringee| Infringement { + infringer, + infringee, + }) } pub fn locate_component_primitive_infringements( &self, infringer: ComponentId, ) -> impl Iterator + '_ { - let component = self.layout().component(infringer); + let component = self.component(infringer); let joint_infringements = component .joints @@ -151,28 +164,28 @@ impl Board { &self, infringer: JointId, ) -> impl Iterator> + '_ { - self.locate_same_infringements(infringer, self.layout().joints_rtree().as_ref()) + self.locate_same_infringements(infringer, self.joints_rtree().as_ref()) } pub fn locate_joint_segment_infringements( &self, infringer: JointId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().segments_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.segments_rtree().as_ref()) } pub fn locate_joint_via_infringements( &self, infringer: JointId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().vias_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.vias_rtree().as_ref()) } pub fn locate_joint_polygon_infringements( &self, infringer: JointId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().polygons_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.polygons_rtree().as_ref()) } pub fn locate_segment_infringements( @@ -199,28 +212,28 @@ impl Board { &self, infringer: SegmentId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().joints_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.joints_rtree().as_ref()) } pub fn locate_segment_segment_infringements( &self, infringer: SegmentId, ) -> impl Iterator> + '_ { - self.locate_same_infringements(infringer, self.layout().segments_rtree().as_ref()) + self.locate_same_infringements(infringer, self.segments_rtree().as_ref()) } pub fn locate_segment_via_infringements( &self, infringer: SegmentId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().vias_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.vias_rtree().as_ref()) } pub fn locate_segment_polygon_infringements( &self, infringer: SegmentId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().polygons_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.polygons_rtree().as_ref()) } pub fn locate_via_infringements( @@ -244,28 +257,28 @@ impl Board { &self, infringer: ViaId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().joints_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.joints_rtree().as_ref()) } pub fn locate_via_segment_infringements( &self, infringer: ViaId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().segments_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.segments_rtree().as_ref()) } pub fn locate_via_via_infringements( &self, infringer: ViaId, ) -> impl Iterator> + '_ { - self.locate_same_infringements(infringer, self.layout().vias_rtree().as_ref()) + self.locate_same_infringements(infringer, self.vias_rtree().as_ref()) } pub fn locate_via_polygon_infringements( &self, infringer: ViaId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().polygons_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.polygons_rtree().as_ref()) } pub fn locate_polygon_infringements( @@ -292,39 +305,39 @@ impl Board { &self, infringer: PolygonId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().joints_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.joints_rtree().as_ref()) } pub fn locate_polygon_segment_infringements( &self, infringer: PolygonId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().segments_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.segments_rtree().as_ref()) } pub fn locate_polygon_via_infringements( &self, infringer: PolygonId, ) -> impl Iterator> + '_ { - self.locate_cross_infringements(infringer, self.layout().vias_rtree().as_ref()) + self.locate_cross_infringements(infringer, self.vias_rtree().as_ref()) } pub fn locate_polygon_polygon_infringements( &self, infringer: PolygonId, ) -> impl Iterator> + '_ { - self.locate_same_infringements(infringer, self.layout().polygons_rtree().as_ref()) + self.locate_same_infringements(infringer, self.polygons_rtree().as_ref()) } fn locate_cross_infringements< 'a, - I: Copy + Into + 'a, - E: Copy + Into, + T: Copy + Into + 'a, + U: Copy + Into, >( &'a self, - infringer: I, - infringee_tree: &'a RTree, E>>, - ) -> impl Iterator> + 'a { + infringer: T, + infringee_tree: &'a RTree, U>>, + ) -> impl Iterator> + 'a { infringee_tree .locate_in_envelope_intersecting(&self.primitive_bbox_envelope(infringer.into())) .map(|infringee_geom| infringee_geom.data) @@ -340,11 +353,11 @@ impl Board { }) } - fn locate_same_infringements<'a, I: Copy + PartialEq + Into + 'a>( + fn locate_same_infringements<'a, T: Copy + PartialEq + Into + 'a>( &'a self, - infringer: I, - rtree: &'a RTree, I>>, - ) -> impl Iterator> + 'a { + infringer: T, + rtree: &'a RTree, T>>, + ) -> impl Iterator> + 'a { rtree .locate_in_envelope_intersecting(&self.primitive_bbox_envelope(infringer.into())) .map(|infringee_geom| infringee_geom.data) @@ -363,28 +376,28 @@ impl Board { fn primitive_component(&self, primitive: PrimitiveId) -> Option { match primitive { - PrimitiveId::Joint(joint_id) => self.layout().joint(joint_id).spec.component, - PrimitiveId::Segment(segment_id) => self.layout().segment(segment_id).spec.component, - PrimitiveId::Via(via_id) => self.layout().via(via_id).spec.component, - PrimitiveId::Polygon(polygon_id) => self.layout().polygon(polygon_id).component, + PrimitiveId::Joint(joint_id) => self.joint(joint_id).spec.component, + PrimitiveId::Segment(segment_id) => self.segment(segment_id).spec.component, + PrimitiveId::Via(via_id) => self.via(via_id).spec.component, + PrimitiveId::Polygon(polygon_id) => self.polygon(polygon_id).component, } } fn primitive_bbox_envelope(&self, primitive: PrimitiveId) -> AABB<[i64; 3]> { match primitive { - PrimitiveId::Joint(joint_id) => self.layout().joint(joint_id).bbox().aabb(), - PrimitiveId::Segment(segment_id) => self.layout().segment(segment_id).bbox().aabb(), - PrimitiveId::Via(via_id) => self.layout().via(via_id).bbox().aabb(), - PrimitiveId::Polygon(polygon_id) => self.layout().polygon(polygon_id).bbox().aabb(), + PrimitiveId::Joint(joint_id) => self.joint(joint_id).bbox().aabb(), + PrimitiveId::Segment(segment_id) => self.segment(segment_id).bbox().aabb(), + PrimitiveId::Via(via_id) => self.via(via_id).bbox().aabb(), + PrimitiveId::Polygon(polygon_id) => self.polygon(polygon_id).bbox().aabb(), } } fn primitive_net(&self, primitive: PrimitiveId) -> Option { match primitive { - PrimitiveId::Joint(joint_id) => self.layout().joint(joint_id).spec.net, - PrimitiveId::Segment(segment_id) => self.layout().segment(segment_id).net, - PrimitiveId::Via(via_id) => self.layout().via(via_id).net, - PrimitiveId::Polygon(polygon_id) => self.layout().polygon(polygon_id).net, + PrimitiveId::Joint(joint_id) => self.joint(joint_id).spec.net, + PrimitiveId::Segment(segment_id) => self.segment(segment_id).net, + PrimitiveId::Via(via_id) => self.via(via_id).net, + PrimitiveId::Polygon(polygon_id) => self.polygon(polygon_id).net, } } diff --git a/topola/src/layout/overlap.rs b/topola/src/layout/overlap.rs index 2c640eb..148ae38 100644 --- a/topola/src/layout/overlap.rs +++ b/topola/src/layout/overlap.rs @@ -4,18 +4,20 @@ use crate::{ Rect2, - board::Board, - primitives::{JointId, PolygonId, SegmentId, ViaId}, + layout::{ + Layout, + primitives::{JointId, PolygonId, SegmentId, ViaId}, + }, }; -impl Board { +impl Layout { pub fn joint_joint_rect_overlap( &self, infringer: JointId, infringee: JointId, ) -> Option> { - let infringer_bbox = self.layout().joint(infringer).bbox().xy(); - let infringee_bbox = self.layout().joint(infringee).bbox().xy(); + let infringer_bbox = self.joint(infringer).bbox().xy(); + let infringee_bbox = self.joint(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -25,8 +27,8 @@ impl Board { infringer: JointId, infringee: SegmentId, ) -> Option> { - let infringer_bbox = self.layout().joint(infringer).bbox().xy(); - let infringee_bbox = self.layout().segment(infringee).bbox().xy(); + let infringer_bbox = self.joint(infringer).bbox().xy(); + let infringee_bbox = self.segment(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -36,8 +38,8 @@ impl Board { infringer: JointId, infringee: ViaId, ) -> Option> { - let infringer_bbox = self.layout().joint(infringer).bbox().xy(); - let infringee_bbox = self.layout().via(infringee).bbox().xy(); + let infringer_bbox = self.joint(infringer).bbox().xy(); + let infringee_bbox = self.via(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -47,8 +49,8 @@ impl Board { infringer: JointId, infringee: PolygonId, ) -> Option> { - let infringer_bbox = self.layout().joint(infringer).bbox().xy(); - let infringee_bbox = self.layout().polygon(infringee).bbox().xy(); + let infringer_bbox = self.joint(infringer).bbox().xy(); + let infringee_bbox = self.polygon(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -58,8 +60,8 @@ impl Board { infringer: SegmentId, infringee: JointId, ) -> Option> { - let infringer_bbox = self.layout().segment(infringer).bbox().xy(); - let infringee_bbox = self.layout().joint(infringee).bbox().xy(); + let infringer_bbox = self.segment(infringer).bbox().xy(); + let infringee_bbox = self.joint(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -69,8 +71,8 @@ impl Board { infringer: SegmentId, infringee: SegmentId, ) -> Option> { - let infringer_bbox = self.layout().segment(infringer).bbox().xy(); - let infringee_bbox = self.layout().segment(infringee).bbox().xy(); + let infringer_bbox = self.segment(infringer).bbox().xy(); + let infringee_bbox = self.segment(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -80,8 +82,8 @@ impl Board { infringer: SegmentId, infringee: ViaId, ) -> Option> { - let infringer_bbox = self.layout().segment(infringer).bbox().xy(); - let infringee_bbox = self.layout().via(infringee).bbox().xy(); + let infringer_bbox = self.segment(infringer).bbox().xy(); + let infringee_bbox = self.via(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -91,8 +93,8 @@ impl Board { infringer: SegmentId, infringee: PolygonId, ) -> Option> { - let infringer_bbox = self.layout().segment(infringer).bbox().xy(); - let infringee_bbox = self.layout().polygon(infringee).bbox().xy(); + let infringer_bbox = self.segment(infringer).bbox().xy(); + let infringee_bbox = self.polygon(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -102,8 +104,8 @@ impl Board { infringer: ViaId, infringee: JointId, ) -> Option> { - let infringer_bbox = self.layout().via(infringer).bbox().xy(); - let infringee_bbox = self.layout().joint(infringee).bbox().xy(); + let infringer_bbox = self.via(infringer).bbox().xy(); + let infringee_bbox = self.joint(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -113,8 +115,8 @@ impl Board { infringer: ViaId, infringee: SegmentId, ) -> Option> { - let infringer_bbox = self.layout().via(infringer).bbox().xy(); - let infringee_bbox = self.layout().segment(infringee).bbox().xy(); + let infringer_bbox = self.via(infringer).bbox().xy(); + let infringee_bbox = self.segment(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -124,8 +126,8 @@ impl Board { infringer: ViaId, infringee: ViaId, ) -> Option> { - let infringer_bbox = self.layout().via(infringer).bbox().xy(); - let infringee_bbox = self.layout().via(infringee).bbox().xy(); + let infringer_bbox = self.via(infringer).bbox().xy(); + let infringee_bbox = self.via(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -135,8 +137,8 @@ impl Board { infringer: ViaId, infringee: PolygonId, ) -> Option> { - let infringer_bbox = self.layout().via(infringer).bbox().xy(); - let infringee_bbox = self.layout().polygon(infringee).bbox().xy(); + let infringer_bbox = self.via(infringer).bbox().xy(); + let infringee_bbox = self.polygon(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -146,8 +148,8 @@ impl Board { infringer: PolygonId, infringee: JointId, ) -> Option> { - let infringer_bbox = self.layout().polygon(infringer).bbox().xy(); - let infringee_bbox = self.layout().joint(infringee).bbox().xy(); + let infringer_bbox = self.polygon(infringer).bbox().xy(); + let infringee_bbox = self.joint(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -157,8 +159,8 @@ impl Board { infringer: PolygonId, infringee: SegmentId, ) -> Option> { - let infringer_bbox = self.layout().polygon(infringer).bbox().xy(); - let infringee_bbox = self.layout().segment(infringee).bbox().xy(); + let infringer_bbox = self.polygon(infringer).bbox().xy(); + let infringee_bbox = self.segment(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -168,8 +170,8 @@ impl Board { infringer: PolygonId, infringee: ViaId, ) -> Option> { - let infringer_bbox = self.layout().polygon(infringer).bbox().xy(); - let infringee_bbox = self.layout().via(infringee).bbox().xy(); + let infringer_bbox = self.polygon(infringer).bbox().xy(); + let infringee_bbox = self.via(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } @@ -179,8 +181,8 @@ impl Board { infringer: PolygonId, infringee: PolygonId, ) -> Option> { - let infringer_bbox = self.layout().polygon(infringer).bbox().xy(); - let infringee_bbox = self.layout().polygon(infringee).bbox().xy(); + let infringer_bbox = self.polygon(infringer).bbox().xy(); + let infringee_bbox = self.polygon(infringee).bbox().xy(); infringer_bbox.intersection(infringee_bbox) } diff --git a/topola/src/layout/repulsion.rs b/topola/src/layout/repulsion.rs index d6aecfe..b3a5b17 100644 --- a/topola/src/layout/repulsion.rs +++ b/topola/src/layout/repulsion.rs @@ -3,14 +3,29 @@ // SPDX-License-Identifier: MIT OR Apache-2.0 use crate::{ - Board, Rect2, Vector2, + Rect2, Vector2, compass::CompassDirection, - layout::compounds::ComponentId, + layout::{Layout, compounds::ComponentId}, orientation::Orientation, primitives::{JointId, PolygonId, PrimitiveId, SegmentId, ViaId}, }; -impl Board { +impl Layout { + pub fn locate_component_repulsions( + &self, + infringer: ComponentId, + orientation: Orientation, + ) -> impl Iterator> { + self.locate_component_infringements(infringer) + .map(move |infringement| { + self.component_component_repulsion( + infringement.infringer(), + infringement.infringee(), + orientation, + ) + }) + } + pub fn component_component_repulsion( &self, infringer: ComponentId, @@ -20,8 +35,8 @@ impl Board { let mut max_repulsion = Vector2::new(0, 0); let mut max_repulsion_magnitude = 0; - for infringer_primitive in self.layout().component(infringer).primitives() { - for infringee_primitive in self.layout().component(infringee).primitives() { + for infringer_primitive in self.component(infringer).primitives() { + for infringee_primitive in self.component(infringee).primitives() { let repulsion = self.primitive_primitive_repulsion( infringer_primitive, infringee_primitive, @@ -69,8 +84,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.joint_joint_rect_overlap(infringer, infringee), - self.layout().joint(infringer).center(), - self.layout().joint(infringee).center(), + self.joint(infringer).center(), + self.joint(infringee).center(), orientation, ) } @@ -83,8 +98,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.joint_segment_rect_overlap(infringer, infringee), - self.layout().joint(infringer).center(), - self.layout().segment(infringee).center(), + self.joint(infringer).center(), + self.segment(infringee).center(), orientation, ) } @@ -97,8 +112,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.joint_via_rect_overlap(infringer, infringee), - self.layout().joint(infringer).center(), - self.layout().via(infringee).position, + self.joint(infringer).center(), + self.via(infringee).position, orientation, ) } @@ -111,8 +126,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.joint_polygon_rect_overlap(infringer, infringee), - self.layout().joint(infringer).center(), - self.layout().polygon(infringee).center(), + self.joint(infringer).center(), + self.polygon(infringee).center(), orientation, ) } @@ -147,8 +162,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.segment_joint_rect_overlap(infringer, infringee), - self.layout().segment(infringer).center(), - self.layout().joint(infringee).center(), + self.segment(infringer).center(), + self.joint(infringee).center(), orientation, ) } @@ -161,8 +176,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.segment_segment_rect_overlap(infringer, infringee), - self.layout().segment(infringer).center(), - self.layout().segment(infringee).center(), + self.segment(infringer).center(), + self.segment(infringee).center(), orientation, ) } @@ -175,8 +190,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.segment_via_rect_overlap(infringer, infringee), - self.layout().segment(infringer).center(), - self.layout().via(infringee).position, + self.segment(infringer).center(), + self.via(infringee).position, orientation, ) } @@ -189,8 +204,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.segment_polygon_rect_overlap(infringer, infringee), - self.layout().segment(infringer).center(), - self.layout().polygon(infringee).center(), + self.segment(infringer).center(), + self.polygon(infringee).center(), orientation, ) } @@ -225,8 +240,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.via_joint_rect_overlap(infringer, infringee), - self.layout().via(infringer).position, - self.layout().joint(infringee).center(), + self.via(infringer).position, + self.joint(infringee).center(), orientation, ) } @@ -239,8 +254,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.via_segment_rect_overlap(infringer, infringee), - self.layout().via(infringer).position, - self.layout().segment(infringee).center(), + self.via(infringer).position, + self.segment(infringee).center(), orientation, ) } @@ -253,8 +268,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.via_via_rect_overlap(infringer, infringee), - self.layout().via(infringer).position, - self.layout().via(infringee).position, + self.via(infringer).position, + self.via(infringee).position, orientation, ) } @@ -267,8 +282,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.via_polygon_rect_overlap(infringer, infringee), - self.layout().via(infringer).position, - self.layout().polygon(infringee).center(), + self.via(infringer).position, + self.polygon(infringee).center(), orientation, ) } @@ -303,8 +318,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.polygon_joint_rect_overlap(infringer, infringee), - self.layout().polygon(infringer).center(), - self.layout().joint(infringee).center(), + self.polygon(infringer).center(), + self.joint(infringee).center(), orientation, ) } @@ -317,8 +332,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.polygon_segment_rect_overlap(infringer, infringee), - self.layout().polygon(infringer).center(), - self.layout().segment(infringee).center(), + self.polygon(infringer).center(), + self.segment(infringee).center(), orientation, ) } @@ -331,8 +346,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.polygon_via_rect_overlap(infringer, infringee), - self.layout().polygon(infringer).center(), - self.layout().via(infringee).position, + self.polygon(infringer).center(), + self.via(infringee).position, orientation, ) } @@ -345,8 +360,8 @@ impl Board { ) -> Vector2 { Self::repulsion_from_rect_overlap( self.polygon_polygon_rect_overlap(infringer, infringee), - self.layout().polygon(infringer).center(), - self.layout().polygon(infringee).center(), + self.polygon(infringer).center(), + self.polygon(infringee).center(), orientation, ) }