From db0b733be538a6048e1c6d580b0a39aaaf94072f Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 12 Mar 2022 15:57:29 +0000 Subject: [PATCH] Clear DRC caches before running soldermask tests again. Fixes https://gitlab.com/kicad/code/kicad/issues/10922 --- pcbnew/drc/drc_test_provider_solder_mask.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pcbnew/drc/drc_test_provider_solder_mask.cpp b/pcbnew/drc/drc_test_provider_solder_mask.cpp index f70c047478..5cd36071a5 100644 --- a/pcbnew/drc/drc_test_provider_solder_mask.cpp +++ b/pcbnew/drc/drc_test_provider_solder_mask.cpp @@ -122,7 +122,7 @@ void DRC_TEST_PROVIDER_SOLDER_MASK::addItemToRTrees( BOARD_ITEM* item ) } } - if( ( zone->GetLayerSet() & LSET::AllCuMask() ).any() && !zone->GetIsRuleArea() ) + if( zone->IsOnCopperLayer() && !zone->GetIsRuleArea() ) m_copperZones.push_back( zone ); } else if( item->Type() == PCB_PAD_T ) @@ -190,6 +190,9 @@ void DRC_TEST_PROVIDER_SOLDER_MASK::buildRTrees() m_itemTree = std::make_unique(); m_copperZones.clear(); + // Unlikely to be correct, but better than starting at 0 + m_copperZones.reserve( m_board->Zones().size() ); + forEachGeometryItem( s_allBasicItems, layers, [&]( BOARD_ITEM* item ) -> bool { @@ -647,6 +650,9 @@ bool DRC_TEST_PROVIDER_SOLDER_MASK::Run() if( !reportPhase( _( "Building solder mask..." ) ) ) return false; // DRC cancelled + m_checkedPairs.clear(); + m_maskApertureNetMap.clear(); + buildRTrees(); if( !reportPhase( _( "Checking solder mask to silk clearance..." ) ) )