From 5fe55348227a51ec0ed4e04f9abcc5b2b659c1a8 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 25 Oct 2022 12:30:25 +0100 Subject: [PATCH] Clean up layer handling and normalize to remove magic numbers. Fixes https://gitlab.com/kicad/code/kicad/issues/12747 --- pcbnew/router/pns_kicad_iface.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index cbc0924b8c..1fadfa331e 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -309,7 +309,7 @@ bool PNS_PCBNEW_RULE_RESOLVER::QueryConstraint( PNS::CONSTRAINT_TYPE aType, if( parentA ) { - parentA->SetLayer( (PCB_LAYER_ID) aLayer ); + parentA->SetLayer( ToLAYER_ID( aLayer ) ); static_cast( parentA )->SetNetCode( aItemA->Net(), true ); } } @@ -327,13 +327,13 @@ bool PNS_PCBNEW_RULE_RESOLVER::QueryConstraint( PNS::CONSTRAINT_TYPE aType, if( parentB ) { - parentB->SetLayer( (PCB_LAYER_ID) aLayer ); + parentB->SetLayer( ToLAYER_ID( aLayer ) ); static_cast( parentB )->SetNetCode( aItemB->Net(), true ); } } if( parentA ) - hostConstraint = drcEngine->EvalRules( hostType, parentA, parentB, (PCB_LAYER_ID) aLayer ); + hostConstraint = drcEngine->EvalRules( hostType, parentA, parentB, ToLAYER_ID( aLayer ) ); if( hostConstraint.IsNull() ) return false; @@ -399,6 +399,9 @@ int PNS_PCBNEW_RULE_RESOLVER::Clearance( const PNS::ITEM* aA, const PNS::ITEM* a else layers = aA->Layers().Intersection( aB->Layers() ); + // Normalize layer range (no -1 magic numbers) + layers = layers.Intersection( LAYER_RANGE( PCBNEW_LAYER_ID_START, GAL_LAYER_ID_END ) ); + for( int layer = layers.Start(); layer <= layers.End(); ++layer ) { if( isCopper( aA ) && ( !aB || isCopper( aB ) ) ) @@ -1290,14 +1293,14 @@ bool PNS_KICAD_IFACE_BASE::IsFlashedOnLayer( const PNS::ITEM* aItem, int aLayer { const PCB_VIA* via = static_cast( aItem->Parent() ); - return via->FlashLayer( static_cast( aLayer ) ); + return via->FlashLayer( ToLAYER_ID( aLayer ) ); } case PCB_PAD_T: { const PAD* pad = static_cast( aItem->Parent() ); - return pad->FlashLayer( static_cast( aLayer ) ); + return pad->FlashLayer( ToLAYER_ID( aLayer ) ); } default: