From 7fc9fc5f58e4b51e5732e79bf3ad3e9114a816f0 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 4 Jul 2025 19:34:20 -0600 Subject: [PATCH] Remove double-layer-processing. (The caller already handles cycling through the layers.) --- pcbnew/pcbexpr_functions.cpp | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/pcbnew/pcbexpr_functions.cpp b/pcbnew/pcbexpr_functions.cpp index b6080a5348..21da288a3a 100644 --- a/pcbnew/pcbexpr_functions.cpp +++ b/pcbnew/pcbexpr_functions.cpp @@ -462,7 +462,7 @@ static void intersectsBackCourtyardFunc( LIBEVAL::CONTEXT* aCtx, void* self ) } -bool collidesWithArea( BOARD_ITEM* aItem, PCBEXPR_CONTEXT* aCtx, ZONE* aArea ) +bool collidesWithArea( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer, PCBEXPR_CONTEXT* aCtx, ZONE* aArea ) { BOARD* board = aArea->GetBoard(); BOX2I areaBBox = aArea->GetBoundingBox(); @@ -552,40 +552,18 @@ bool collidesWithArea( BOARD_ITEM* aItem, PCBEXPR_CONTEXT* aCtx, ZONE* aArea ) if( zoneRTree ) { - for( PCB_LAYER_ID layer : aArea->GetLayerSet().Seq() ) - { - if( aCtx->GetLayer() == layer || aCtx->GetLayer() == UNDEFINED_LAYER ) - { - if( zoneRTree->QueryColliding( areaBBox, &areaOutline, layer ) ) - return true; - } - } + if( zoneRTree->QueryColliding( areaBBox, &areaOutline, aLayer ) ) + return true; } return false; } - else if( aItem->Type() == PCB_PAD_T ) - { - PAD* pad = static_cast( aItem ); - bool collision = false; - - pad->Padstack().ForEachUniqueLayer( - [&]( PCB_LAYER_ID layer ) - { - if( !collision && aArea->IsOnLayer( layer ) ) - collision = areaOutline.Collide( pad->GetEffectiveShape( layer ).get() ); - } ); - - return collision; - } else { - PCB_LAYER_ID layer = aCtx->GetLayer(); - - if( layer != UNDEFINED_LAYER && !( aArea->GetLayerSet().Contains( layer ) ) ) + if( !aArea->GetLayerSet().Contains( aLayer ) ) return false; - return areaOutline.Collide( aItem->GetEffectiveShape( layer ).get() ); + return areaOutline.Collide( aItem->GetEffectiveShape( aLayer ).get() ); } } @@ -761,7 +739,7 @@ static void intersectsAreaFunc( LIBEVAL::CONTEXT* aCtx, void* self ) return true; } - bool collides = collidesWithArea( item, context, aArea ); + bool collides = collidesWithArea( item, layer, context, aArea ); if( ( item->GetFlags() & ROUTER_TRANSIENT ) == 0 ) {