Keep track of which nets are currently in use.

Fixes: lp:1798006
* https://bugs.launchpad.net/kicad/+bug/1798006
This commit is contained in:
Jeff Young 2018-10-18 10:35:59 +01:00
parent 8a54b1b3b7
commit ff992f4a64
6 changed files with 48 additions and 32 deletions

View File

@ -236,14 +236,15 @@ protected:
for( NETINFO_ITEM* netinfo : *m_netinfoList )
{
if( netinfo->GetNet() == 0 )
continue; // we'll insert NO_NET after sorting
if( filter.IsEmpty() || wxString( netinfo->GetNetname() ).MakeLower().Matches( filter ) )
netNames.push_back( netinfo->GetNetname() );
if( netinfo->GetNet() > 0 && netinfo->IsCurrent() )
{
if( filter.IsEmpty() || wxString( netinfo->GetNetname() ).MakeLower().Matches( filter ) )
netNames.push_back( netinfo->GetNetname() );
}
}
std::sort( netNames.begin(), netNames.end() );
// Special handling for <no net>
if( filter.IsEmpty() || wxString( NO_NET ).MakeLower().Matches( filter ) )
netNames.insert( netNames.begin(), NO_NET );

View File

@ -306,10 +306,14 @@ bool BOARD_NETLIST_UPDATER::updateComponentPadConnections( MODULE* aPcbComponent
}
else // New footprint pad has a net.
{
if( net.GetNetName() != pad->GetNetname() )
const wxString& netName = net.GetNetName();
NETINFO_ITEM* netinfo = m_board->FindNet( netName );
if( netinfo && !m_isDryRun )
netinfo->SetIsCurrent( true );
if( pad->GetNetname() != netName )
{
const wxString& netName = net.GetNetName();
NETINFO_ITEM* netinfo = m_board->FindNet( netName );
if( netinfo == nullptr )
{
@ -326,9 +330,9 @@ bool BOARD_NETLIST_UPDATER::updateComponentPadConnections( MODULE* aPcbComponent
changed = true;
netinfo = new NETINFO_ITEM( m_board, netName );
m_commit.Add( netinfo );
m_addedNets[netName] = netinfo;
}
m_addedNets[netName] = netinfo;
msg.Printf( _( "Add net %s." ), netName );
m_reporter->Report( msg, REPORTER::RPT_ACTION );
}
@ -626,6 +630,11 @@ bool BOARD_NETLIST_UPDATER::UpdateNetlist( NETLIST& aNetlist )
if( !m_isDryRun )
{
m_board->SetStatus( 0 );
// Mark all nets (except <no net>) as stale; we'll update those to current that
// we find in the netlist
for( NETINFO_ITEM* net : m_board->GetNetInfo() )
net->SetIsCurrent( net->GetNet() == 0 );
}
for( unsigned i = 0; i < aNetlist.GetCount(); i++ )

View File

@ -2484,19 +2484,23 @@ void BOARD::updateComponentPadConnections( NETLIST& aNetlist, MODULE* footprint,
}
else // Footprint pad has a net.
{
if( net.GetNetName() != pad->GetNetname() )
const wxString& netName = net.GetNetName();
NETINFO_ITEM* netinfo = FindNet( netName );
if( netinfo && !aNetlist.IsDryRun() )
netinfo->SetIsCurrent( true );
if( pad->GetNetname() != netName )