|
|
|
@ -200,11 +200,12 @@ bool CN_CONNECTIVITY_ALGO::Add( BOARD_ITEM* aItem ) |
|
|
|
BOARD* board = zone->GetBoard(); |
|
|
|
LSET layerset = board->GetEnabledLayers() & zone->GetLayerSet(); |
|
|
|
|
|
|
|
for( PCB_LAYER_ID layer : layerset.Seq() ) |
|
|
|
{ |
|
|
|
for( CN_ITEM* zitem : m_itemList.Add( zone, layer ) ) |
|
|
|
m_itemMap[zone].Link( zitem ); |
|
|
|
} |
|
|
|
layerset.RunOnLayers( |
|
|
|
[&]( PCB_LAYER_ID layer ) |
|
|
|
{ |
|
|
|
for( CN_ITEM* zitem : m_itemList.Add( zone, layer ) ) |
|
|
|
m_itemMap[zone].Link( zitem ); |
|
|
|
} ); |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
@ -456,11 +457,12 @@ void CN_CONNECTIVITY_ALGO::Build( BOARD* aBoard, PROGRESS_REPORTER* aReporter ) |
|
|
|
BOARD* board = zone->GetBoard(); |
|
|
|
LSET layerset = board->GetEnabledLayers() & zone->GetLayerSet() & LSET::AllCuMask(); |
|
|
|
|
|
|
|
for( PCB_LAYER_ID layer : layerset.Seq() ) |
|
|
|
{ |
|
|
|
for( int j = 0; j < zone->GetFilledPolysList( layer )->OutlineCount(); j++ ) |
|
|
|
zitems.push_back( new CN_ZONE_LAYER( zone, layer, j ) ); |
|
|
|
} |
|
|
|
layerset.RunOnLayers( |
|
|
|
[&]( PCB_LAYER_ID layer ) |
|
|
|
{ |
|
|
|
for( int j = 0; j < zone->GetFilledPolysList( layer )->OutlineCount(); j++ ) |
|
|
|
zitems.push_back( new CN_ZONE_LAYER( zone, layer, j ) ); |
|
|
|
} ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -899,39 +901,43 @@ bool CN_VISITOR::operator()( CN_ITEM* aCandidate ) |
|
|
|
|
|
|
|
LSET commonLayers = parentA->GetLayerSet() & parentB->GetLayerSet(); |
|
|
|
|
|
|
|
for( PCB_LAYER_ID layer : commonLayers.Seq() ) |
|
|
|
for( size_t ii = 0; ii < commonLayers.size(); ++ii ) |
|
|
|
{ |
|
|
|
FLASHING flashingA = FLASHING::NEVER_FLASHED; |
|
|
|
FLASHING flashingB = FLASHING::NEVER_FLASHED; |
|
|
|
|
|
|
|
if( parentA->Type() == PCB_PAD_T ) |
|
|
|
if( commonLayers.test( ii ) ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PAD*>( parentA )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingA = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
else if( parentA->Type() == PCB_VIA_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PCB_VIA*>( parentA )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingA = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
PCB_LAYER_ID layer = PCB_LAYER_ID( ii ); |
|
|
|
FLASHING flashingA = FLASHING::NEVER_FLASHED; |
|
|
|
FLASHING flashingB = FLASHING::NEVER_FLASHED; |
|
|
|
|
|
|
|
if( parentB->Type() == PCB_PAD_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PAD*>( parentB )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingB = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
else if( parentB->Type() == PCB_VIA_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PCB_VIA*>( parentB )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingB = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
if( parentA->Type() == PCB_PAD_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PAD*>( parentA )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingA = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
else if( parentA->Type() == PCB_VIA_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PCB_VIA*>( parentA )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingA = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
|
|
|
|
if( parentA->GetEffectiveShape( layer, flashingA )->Collide( |
|
|
|
parentB->GetEffectiveShape( layer, flashingB ).get() ) ) |
|
|
|
{ |
|
|
|
m_item->Connect( aCandidate ); |
|
|
|
aCandidate->Connect( m_item ); |
|
|
|
return true; |
|
|
|
if( parentB->Type() == PCB_PAD_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PAD*>( parentB )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingB = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
else if( parentB->Type() == PCB_VIA_T ) |
|
|
|
{ |
|
|
|
if( !static_cast<const PCB_VIA*>( parentB )->ConditionallyFlashed( layer ) ) |
|
|
|
flashingB = FLASHING::ALWAYS_FLASHED; |
|
|
|
} |
|
|
|
|
|
|
|
if( parentA->GetEffectiveShape( layer, flashingA )->Collide( |
|
|
|
parentB->GetEffectiveShape( layer, flashingB ).get() ) ) |
|
|
|
{ |
|
|
|
m_item->Connect( aCandidate ); |
|
|
|
aCandidate->Connect( m_item ); |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|