Eeschema: fix isssues in net names selection for not named nets (i.e. nets without labels)
This commit is contained in:
parent
f2e5da63e3
commit
1ae681454a
|
@ -347,12 +347,14 @@ wxString NETLIST_OBJECT::GetShortNetName() const
|
||||||
|
|
||||||
if( m_netNameCandidate->m_Type == NET_PIN )
|
if( m_netNameCandidate->m_Type == NET_PIN )
|
||||||
{
|
{
|
||||||
if( m_Link )
|
SCH_COMPONENT* link = (SCH_COMPONENT*)m_netNameCandidate->m_Link;
|
||||||
|
if( link ) // Should be always true
|
||||||
{
|
{
|
||||||
netName = wxT("Net-<");
|
netName = wxT("Net-<");
|
||||||
netName << ( (SCH_COMPONENT*) m_Link )->GetRef( &m_SheetList );
|
netName << link->GetRef( &m_netNameCandidate->m_SheetList );
|
||||||
netName << wxT("-Pad") << LIB_PIN::ReturnPinStringNum( m_PinNum );
|
netName << wxT("-Pad")
|
||||||
netName << wxT(">");
|
<< LIB_PIN::ReturnPinStringNum( m_netNameCandidate->m_PinNum )
|
||||||
|
<< wxT(">");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -164,6 +164,12 @@ public:
|
||||||
*/
|
*/
|
||||||
void SetNetNameCandidate( NETLIST_OBJECT* aCandidate );
|
void SetNetNameCandidate( NETLIST_OBJECT* aCandidate );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if an item has already a net name candidate
|
||||||
|
* and false if not ( m_netNameCandidate == NULL )
|
||||||
|
*/
|
||||||
|
bool HasNetNameCandidate() { return m_netNameCandidate != NULL; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function GetPinNum
|
* Function GetPinNum
|
||||||
* returns a pin number in wxString form. Pin numbers are not always
|
* returns a pin number in wxString form. Pin numbers are not always
|
||||||
|
|
|
@ -467,26 +467,40 @@ void NETLIST_OBJECT_LIST::findBestNetNameForEachNet()
|
||||||
// (to avoid net names changes when the net is not modified,
|
// (to avoid net names changes when the net is not modified,
|
||||||
// even if components are moved or deleted and undelete or replaced, as long
|
// even if components are moved or deleted and undelete or replaced, as long
|
||||||
// the reference is kept)
|
// the reference is kept)
|
||||||
netcode = 0;
|
|
||||||
|
// Build the list of items with no net names
|
||||||
|
NETLIST_OBJECT_LIST list;
|
||||||
|
for( unsigned ii = 0; ii < size(); ii++ )
|
||||||
|
{
|
||||||
|
item = GetItem( ii );
|
||||||
|
if( !item->HasNetNameCandidate() )
|
||||||
|
list.push_back( item );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( list.size() == 0 )
|
||||||
|
return;
|
||||||
|
|
||||||
idxstart = 0;
|
idxstart = 0;
|
||||||
candidate = NULL;
|
candidate = NULL;
|
||||||
item = NULL;
|
netcode = list.GetItemNet( 0 );
|
||||||
for( unsigned ii = 0; ii <= size(); ii++ )
|
|
||||||
{
|
|
||||||
if( ii == size() ) // last item already found
|
|
||||||
netcode = -2;
|
|
||||||
else
|
|
||||||
item = GetItem( ii );
|
|
||||||
|
|
||||||
if( netcode != item->GetNet() ) // End of net found
|
for( unsigned ii = 0; ii <= list.size(); ii++ )
|
||||||
|
{
|
||||||
|
if( ii < list.size() )
|
||||||
|
item = list.GetItem( ii );
|
||||||
|
|
||||||
|
if( netcode != item->GetNet() || ii >= list.size() ) // End of net found
|
||||||
{
|
{
|
||||||
if( candidate )
|
if( candidate )
|
||||||
{
|
{
|
||||||
for (unsigned jj = idxstart; jj < ii; jj++ )
|
for (unsigned jj = idxstart; jj < ii; jj++ )
|
||||||
GetItem( jj )->SetNetNameCandidate( candidate );
|
{
|
||||||
|
NETLIST_OBJECT* obj = list.GetItem( jj );
|
||||||
|
obj->SetNetNameCandidate( candidate );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( netcode == -2 )
|
if( ii >= list.size() )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
netcode = item->GetNet();
|
netcode = item->GetNet();
|
||||||
|
@ -494,17 +508,26 @@ void NETLIST_OBJECT_LIST::findBestNetNameForEachNet()
|
||||||
idxstart = ii;
|
idxstart = ii;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( item->m_Type == NET_PIN && item->GetShortNetName().IsEmpty() )
|
// Search all pins having no net name candidate yet, i.e. on nets
|
||||||
|
// having no labels
|
||||||
|
if( item->m_Type == NET_PIN )
|
||||||
{
|
{
|
||||||
// A candidate is found: select the better between the previous
|
// A candidate is found, however components which are not in
|
||||||
// and this one
|
// netlist are not candidate because some have their reference
|
||||||
item->SetNetNameCandidate( item ); // Needed to calculate GetShortNetName
|
// is changed each time the netlist is built (power components)
|
||||||
if( candidate == NULL )
|
// and anyway they are not a good candidate
|
||||||
candidate = item;
|
SCH_COMPONENT* link = (SCH_COMPONENT*)item->m_Link;
|
||||||
else
|
if( link->IsInNetlist() )
|
||||||
{
|
{
|
||||||
if( item->GetShortNetName().Cmp( candidate->GetShortNetName() ) < 0 )
|
// select the better between the previous and this one
|
||||||
|
item->SetNetNameCandidate( item ); // Needed to calculate GetShortNetName
|
||||||
|
if( candidate == NULL )
|
||||||
candidate = item;
|
candidate = item;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( item->GetShortNetName().Cmp( candidate->GetShortNetName() ) < 0 )
|
||||||
|
candidate = item;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1888,6 +1888,15 @@ bool SCH_COMPONENT::doIsConnected( const wxPoint& aPosition ) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return true if the component is in netlist
|
||||||
|
* which means this is not a power component, or something
|
||||||
|
* like a component reference starting by #
|
||||||
|
*/
|
||||||
|
bool SCH_COMPONENT::IsInNetlist() const
|
||||||
|
{
|
||||||
|
SCH_FIELD* rf = GetField( REFERENCE );
|
||||||
|
return ! rf->GetText().StartsWith("#");
|
||||||
|
}
|
||||||
|
|
||||||
void SCH_COMPONENT::Plot( PLOTTER* aPlotter )
|
void SCH_COMPONENT::Plot( PLOTTER* aPlotter )
|
||||||
{
|
{
|
||||||
|
|
|
@ -365,6 +365,13 @@ public:
|
||||||
|
|
||||||
bool IsConnectable() const { return true; }
|
bool IsConnectable() const { return true; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the component is in netlist
|
||||||
|
* which means this is not a power component, or something
|
||||||
|
* like a component reference starting by #
|
||||||
|
*/
|
||||||
|
bool IsInNetlist() const;
|
||||||
|
|
||||||
void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
|
void GetConnectionPoints( vector< wxPoint >& aPoints ) const;
|
||||||
|
|
||||||
SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
|
SEARCH_RESULT Visit( INSPECTOR* inspector, const void* testData,
|
||||||
|
|
Loading…
Reference in New Issue