Commit 1ae68145 authored by jean-pierre charras's avatar jean-pierre charras

Eeschema: fix isssues in net names selection for not named nets (i.e. nets without labels)

parent f2e5da63
...@@ -347,12 +347,14 @@ wxString NETLIST_OBJECT::GetShortNetName() const ...@@ -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: ...@@ -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() ...@@ -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++ )
for( unsigned ii = 0; ii <= list.size(); ii++ )
{ {
if( ii == size() ) // last item already found if( ii < list.size() )
netcode = -2; item = list.GetItem( ii );
else
item = GetItem( ii );
if( netcode != item->GetNet() ) // End of net found 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,10 +508,18 @@ void NETLIST_OBJECT_LIST::findBestNetNameForEachNet() ...@@ -494,10 +508,18 @@ 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
// is changed each time the netlist is built (power components)
// and anyway they are not a good candidate
SCH_COMPONENT* link = (SCH_COMPONENT*)item->m_Link;
if( link->IsInNetlist() )
{
// select the better between the previous and this one
item->SetNetNameCandidate( item ); // Needed to calculate GetShortNetName item->SetNetNameCandidate( item ); // Needed to calculate GetShortNetName
if( candidate == NULL ) if( candidate == NULL )
candidate = item; candidate = item;
...@@ -508,6 +530,7 @@ void NETLIST_OBJECT_LIST::findBestNetNameForEachNet() ...@@ -508,6 +530,7 @@ void NETLIST_OBJECT_LIST::findBestNetNameForEachNet()
} }
} }
} }
}
} }
......
...@@ -1888,6 +1888,15 @@ bool SCH_COMPONENT::doIsConnected( const wxPoint& aPosition ) const ...@@ -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: ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment