Handle netclasses assigned to bus labels.

Fixes https://gitlab.com/kicad/code/kicad/issues/12546
This commit is contained in:
Jeff Young 2022-10-02 14:59:47 +01:00
parent 1fc5ecae6e
commit eea8c7a8fd

View File

@ -1701,25 +1701,48 @@ void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* a
auto checkNetclassDrivers = auto checkNetclassDrivers =
[&]( const std::vector<CONNECTION_SUBGRAPH*>& subgraphs ) [&]( const std::vector<CONNECTION_SUBGRAPH*>& subgraphs )
{ {
const CONNECTION_SUBGRAPH* driverSubgraph;
wxString netclass;
for( const CONNECTION_SUBGRAPH* subgraph : subgraphs ) for( const CONNECTION_SUBGRAPH* subgraph : subgraphs )
{ {
for( SCH_ITEM* item : subgraph->m_items ) for( SCH_ITEM* item : subgraph->m_items )
{ {
const wxString netclass = subgraph->GetNetclassForDriver( item ); netclass = subgraph->GetNetclassForDriver( item );
if( !netclass.IsEmpty() ) if( !netclass.IsEmpty() )
{ break;
const wxString netname = subgraph->GetNetName(); }
netSettings->m_NetClassLabelAssignments[ netname ] = netclass; if( !netclass.IsEmpty() )
{
if( oldAssignments[ netname ] != netclass ) driverSubgraph = subgraph;
dirtySubgraphs( subgraphs ); break;
return;
}
} }
} }
if( netclass.IsEmpty() )
return;
const wxString netname = driverSubgraph->GetNetName();
if( driverSubgraph->m_driver_connection->IsBus() )
{
for( const auto& member : driverSubgraph->m_driver_connection->Members() )
{
netSettings->m_NetClassLabelAssignments[ member->Name() ] = netclass;
auto ii = m_net_name_to_subgraphs_map.find( member->Name() );
if( ii != m_net_name_to_subgraphs_map.end() )
dirtySubgraphs( ii->second );
}
}
netSettings->m_NetClassLabelAssignments[ netname ] = netclass;
if( oldAssignments[ netname ] != netclass )
dirtySubgraphs( subgraphs );
}; };
for( const auto& [ netname, subgraphs ] : m_net_name_to_subgraphs_map ) for( const auto& [ netname, subgraphs ] : m_net_name_to_subgraphs_map )