|
|
@ -288,6 +288,7 @@ wxString SCH_SYMBOL::GetDatasheet() const |
|
|
|
void SCH_SYMBOL::UpdatePins() |
|
|
|
{ |
|
|
|
std::map<wxString, wxString> altPinMap; |
|
|
|
std::map<wxString, SCH_PIN::ALT> altPinDefs; |
|
|
|
std::map<wxString, std::set<SCH_PIN*>> pinUuidMap; |
|
|
|
std::set<SCH_PIN*> unassignedSchPins; |
|
|
|
std::set<SCH_PIN*> unassignedLibPins; |
|
|
@ -299,8 +300,15 @@ void SCH_SYMBOL::UpdatePins() |
|
|
|
unassignedSchPins.insert( pin.get() ); |
|
|
|
|
|
|
|
if( !pin->GetAlt().IsEmpty() ) |
|
|
|
{ |
|
|
|
altPinMap[ pin->GetNumber() ] = pin->GetAlt(); |
|
|
|
|
|
|
|
auto altDefIt = pin->GetAlternates().find( pin->GetAlt() ); |
|
|
|
|
|
|
|
if( altDefIt != pin->GetAlternates().end() ) |
|
|
|
altPinDefs[ pin->GetNumber() ] = altDefIt->second; |
|
|
|
} |
|
|
|
|
|
|
|
pin->SetLibPin( nullptr ); |
|
|
|
} |
|
|
|
|
|
|
@ -329,6 +337,7 @@ void SCH_SYMBOL::UpdatePins() |
|
|
|
auto it = ii->second.begin(); |
|
|
|
pin = *it; |
|
|
|
ii->second.erase( it ); |
|
|
|
pin->GetAlternates() = libPin->GetAlternates(); |
|
|
|
pin->SetLibPin( libPin ); |
|
|
|
pin->SetPosition( libPin->GetPosition() ); |
|
|
|
|
|
|
@ -337,7 +346,28 @@ void SCH_SYMBOL::UpdatePins() |
|
|
|
auto iii = altPinMap.find( libPin->GetNumber() ); |
|
|
|
|
|
|
|
if( iii != altPinMap.end() ) |
|
|
|
pin->SetAlt( iii->second ); |
|
|
|
{ |
|
|
|
wxString altName = iii->second; |
|
|
|
|
|
|
|
if( pin->GetAlternates().find( altName ) == pin->GetAlternates().end() ) |
|
|
|
{ |
|
|
|
auto defIt = altPinDefs.find( libPin->GetNumber() ); |
|
|
|
|
|
|
|
if( defIt != altPinDefs.end() ) |
|
|
|
{ |
|
|
|
for( const auto& [ name, alt ] : pin->GetAlternates() ) |
|
|
|
{ |
|
|
|
if( alt.m_Shape == defIt->second.m_Shape && alt.m_Type == defIt->second.m_Type ) |
|
|
|
{ |
|
|
|
altName = name; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pin->SetAlt( altName ); |
|
|
|
} |
|
|
|
|
|
|
|
m_pinMap[ libPin ] = pin; |
|
|
|
} |
|
|
@ -361,6 +391,7 @@ void SCH_SYMBOL::UpdatePins() |
|
|
|
} |
|
|
|
|
|
|
|
m_pinMap[ libPin ] = pin; |
|
|
|
pin->GetAlternates() = libPin->GetAlternates(); |
|
|
|
pin->SetLibPin( libPin ); |
|
|
|
pin->SetPosition( libPin->GetPosition() ); |
|
|
|
pin->SetNumber( libPin->GetNumber() ); |
|
|
@ -368,7 +399,28 @@ void SCH_SYMBOL::UpdatePins() |
|
|
|
auto iii = altPinMap.find( libPin->GetNumber() ); |
|
|
|
|
|
|
|
if( iii != altPinMap.end() ) |
|
|
|
pin->SetAlt( iii->second ); |
|
|
|
{ |
|
|
|
wxString altName = iii->second; |
|
|
|
|
|
|
|
if( pin->GetAlternates().find( altName ) == pin->GetAlternates().end() ) |
|
|
|
{ |
|
|
|
auto defIt = altPinDefs.find( libPin->GetNumber() ); |
|
|
|
|
|
|
|
if( defIt != altPinDefs.end() ) |
|
|
|
{ |
|
|
|
for( const auto& [ name, alt ] : pin->GetAlternates() ) |
|
|
|
{ |
|
|
|
if( alt.m_Shape == defIt->second.m_Shape && alt.m_Type == defIt->second.m_Type ) |
|
|
|
{ |
|
|
|
altName = name; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pin->SetAlt( altName ); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// If we have any pins left in the symbol that were not found in the library, remove them.
|
|
|
|