Pick better auto-generated netnames.
Fixes https://gitlab.com/kicad/code/kicad/issues/4312
This commit is contained in:
parent
c3552a940a
commit
e48d4a653a
|
@ -143,7 +143,7 @@ bool CONNECTION_SUBGRAPH::ResolveDrivers( bool aCheckMultipleDrivers )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// For all other driver types, sort by name
|
// For all other driver types, sort by quality of name
|
||||||
std::sort( candidates.begin(), candidates.end(),
|
std::sort( candidates.begin(), candidates.end(),
|
||||||
[&]( SCH_ITEM* a, SCH_ITEM* b ) -> bool
|
[&]( SCH_ITEM* a, SCH_ITEM* b ) -> bool
|
||||||
{
|
{
|
||||||
|
@ -160,10 +160,21 @@ bool CONNECTION_SUBGRAPH::ResolveDrivers( bool aCheckMultipleDrivers )
|
||||||
|
|
||||||
if( a == previousDriver )
|
if( a == previousDriver )
|
||||||
return true;
|
return true;
|
||||||
else if( b == previousDriver )
|
|
||||||
|
if( b == previousDriver )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
wxString a_name = GetNameForDriver( a );
|
||||||
|
wxString b_name = GetNameForDriver( b );
|
||||||
|
bool a_lowQualityName = a_name.Contains( "-Pad" );
|
||||||
|
bool b_lowQualityName = b_name.Contains( "-Pad" );
|
||||||
|
|
||||||
|
if( a_lowQualityName && !b_lowQualityName )
|
||||||
|
return false;
|
||||||
|
else if( b_lowQualityName && !a_lowQualityName )
|
||||||
|
return true;
|
||||||
else
|
else
|
||||||
return GetNameForDriver( a ) < GetNameForDriver( b );
|
return a_name < b_name;
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -271,18 +271,29 @@ wxString SCH_PIN::GetDefaultNetName( const SCH_SHEET_PATH& aPath, bool aForceNoC
|
||||||
if( aForceNoConnect || GetType() == ELECTRICAL_PINTYPE::PT_NC )
|
if( aForceNoConnect || GetType() == ELECTRICAL_PINTYPE::PT_NC )
|
||||||
name = ( "unconnected-(" );
|
name = ( "unconnected-(" );
|
||||||
|
|
||||||
name << GetParentSymbol()->GetRef( &aPath );
|
|
||||||
|
|
||||||
bool annotated = true;
|
bool annotated = true;
|
||||||
|
|
||||||
// Add timestamp for uninitialized symbols
|
// Use timestamp for unannotated symbols
|
||||||
if( name.Last() == '?' )
|
if( GetParentSymbol()->GetRef( &aPath, false ).Last() == '?' )
|
||||||
{
|
{
|
||||||
name << GetParentSymbol()->m_Uuid.AsString();
|
name << GetParentSymbol()->m_Uuid.AsString();
|
||||||
|
name << "-Pad" << m_libPin->GetNumber() << ")";
|
||||||
annotated = false;
|
annotated = false;
|
||||||
}
|
}
|
||||||
|
else if( !m_libPin->GetShownName().IsEmpty()
|
||||||
name << "-Pad" << m_libPin->GetNumber() << ")";
|
&& m_libPin->GetShownName() != m_libPin->GetShownNumber() )
|
||||||
|
{
|
||||||
|
// Pin names might not be unique between different units so we must have the
|
||||||
|
// unit token in the reference designator
|
||||||
|
name << GetParentSymbol()->GetRef( &aPath, true );
|
||||||
|
name << "-" << m_libPin->GetShownName() << ")";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Pin number are unique, so we skip the unit token
|
||||||
|
name << GetParentSymbol()->GetRef( &aPath, false );
|
||||||
|
name << "-Pad" << m_libPin->GetShownNumber() << ")";
|
||||||
|
}
|
||||||
|
|
||||||
if( annotated )
|
if( annotated )
|
||||||
m_net_name_map[ aPath ] = std::make_pair( name, aForceNoConnect );
|
m_net_name_map[ aPath ] = std::make_pair( name, aForceNoConnect );
|
||||||
|
|
Loading…
Reference in New Issue