Careful of skipping non-flashed pads for performance: they might still have a hole.

This commit is contained in:
Jeff Young 2022-04-04 15:00:15 +01:00
parent dad31f50b7
commit fd9fd1df05
1 changed files with 5 additions and 3 deletions

View File

@ -570,7 +570,7 @@ void ZONE_FILLER::knockoutThermalReliefs( const ZONE* aZone, PCB_LAYER_ID aLayer
EDA_RECT padBBox = pad->GetBoundingBox();
padBBox.Inflate( m_worstClearance );
if( !pad->IsOnLayer( aLayer ) || !padBBox.Intersects( aZone->GetCachedBoundingBox() ) )
if( !padBBox.Intersects( aZone->GetCachedBoundingBox() ) )
continue;
if( pad->GetNetCode() != aZone->GetNetCode() || pad->GetNetCode() <= 0 )
@ -669,15 +669,17 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE* aZone, PCB_LAYER_ID aLa
[&]( PAD* aPad )
{
int gap = 0;
bool hasHole = aPad->GetDrillSize().x > 0;
bool flashLayer = aPad->FlashLayer( aLayer );
bool platedHole = hasHole && aPad->GetAttribute() == PAD_ATTRIB::PTH;
if( flashLayer || aPad->GetDrillSize().x > 0 )
if( flashLayer || platedHole )
gap = evalRulesForItems( CLEARANCE_CONSTRAINT, aZone, aPad, aLayer );
if( flashLayer )
addKnockout( aPad, aLayer, gap + extra_margin, aHoles );
if( aPad->GetDrillSize().x > 0 )
if( hasHole )
{
gap = std::max( gap, evalRulesForItems( HOLE_CLEARANCE_CONSTRAINT, aZone,
aPad, aLayer ) );