Allow a single net collision with a free pad.
(cherry picked from commit 3534cfbba8
)
This commit is contained in:
parent
9d401b00d8
commit
e083cbaf50
|
@ -532,6 +532,7 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances()
|
||||||
|
|
||||||
reportAux( wxT( "Testing %d tracks & vias..." ), m_board->Tracks().size() );
|
reportAux( wxT( "Testing %d tracks & vias..." ), m_board->Tracks().size() );
|
||||||
|
|
||||||
|
std::map<BOARD_ITEM*, int> freePadsUsageMap;
|
||||||
std::map< std::pair<BOARD_ITEM*, BOARD_ITEM*>, LSET> checkedPairs;
|
std::map< std::pair<BOARD_ITEM*, BOARD_ITEM*>, LSET> checkedPairs;
|
||||||
|
|
||||||
for( PCB_TRACK* track : m_board->Tracks() )
|
for( PCB_TRACK* track : m_board->Tracks() )
|
||||||
|
@ -580,6 +581,24 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances()
|
||||||
// Visitor:
|
// Visitor:
|
||||||
[&]( BOARD_ITEM* other ) -> bool
|
[&]( BOARD_ITEM* other ) -> bool
|
||||||
{
|
{
|
||||||
|
if( other->Type() == PCB_PAD_T && static_cast<PAD*>( other )->IsFreePad() )
|
||||||
|
{
|
||||||
|
if( other->GetEffectiveShape( layer )->Collide( trackShape.get() ) )
|
||||||
|
{
|
||||||
|
auto it = freePadsUsageMap.find( other );
|
||||||
|
|
||||||
|
if( it == freePadsUsageMap.end() )
|
||||||
|
{
|
||||||
|
freePadsUsageMap[ other ] = track->GetNetCode();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if( it->second == track->GetNetCode() )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return testTrackAgainstItem( track, trackShape.get(), layer, other );
|
return testTrackAgainstItem( track, trackShape.get(), layer, other );
|
||||||
},
|
},
|
||||||
m_largestClearance );
|
m_largestClearance );
|
||||||
|
|
Loading…
Reference in New Issue