Incremental updates should not clear globals
Netclass assignments are stored in the project level but
CONNECTION_GRAPH updates would clear the assignments. This keeps
existing netname->netclass assignments but updates any netnames that
were changed by the incremental updates. Absolute updates are not
affected and fully recreate the net name to netclass map
Fixes https://gitlab.com/kicad/code/kicad/-/issues/17720
(cherry picked from commit e538b98286
)
This commit is contained in:
parent
55c864ec45
commit
26629928c3
|
@ -689,7 +689,7 @@ void CONNECTION_GRAPH::Recalculate( const SCH_SHEET_LIST& aSheetList, bool aUnco
|
||||||
|
|
||||||
PROF_TIMER build_graph( "buildConnectionGraph" );
|
PROF_TIMER build_graph( "buildConnectionGraph" );
|
||||||
|
|
||||||
buildConnectionGraph( aChangedItemHandler );
|
buildConnectionGraph( aChangedItemHandler, aUnconditional );
|
||||||
|
|
||||||
if( wxLog::IsAllowedTraceMask( DanglingProfileMask ) )
|
if( wxLog::IsAllowedTraceMask( DanglingProfileMask ) )
|
||||||
build_graph.Show();
|
build_graph.Show();
|
||||||
|
@ -1928,7 +1928,7 @@ void CONNECTION_GRAPH::processSubGraphs()
|
||||||
// on some portion of the items.
|
// on some portion of the items.
|
||||||
|
|
||||||
|
|
||||||
void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* aChangedItemHandler )
|
void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* aChangedItemHandler, bool aUnconditional )
|
||||||
{
|
{
|
||||||
// Recache all bus aliases for later use
|
// Recache all bus aliases for later use
|
||||||
wxCHECK_RET( m_schematic, wxT( "Connection graph cannot be built without schematic pointer" ) );
|
wxCHECK_RET( m_schematic, wxT( "Connection graph cannot be built without schematic pointer" ) );
|
||||||
|
@ -2286,6 +2286,17 @@ void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* a
|
||||||
|
|
||||||
for( const auto& [ netname, subgraphs ] : m_net_name_to_subgraphs_map )
|
for( const auto& [ netname, subgraphs ] : m_net_name_to_subgraphs_map )
|
||||||
checkNetclassDrivers( subgraphs );
|
checkNetclassDrivers( subgraphs );
|
||||||
|
|
||||||
|
if( !aUnconditional )
|
||||||
|
{
|
||||||
|
for( auto& [ netname, netclass ] : oldAssignments )
|
||||||
|
{
|
||||||
|
if( netSettings->m_NetClassLabelAssignments.count( netname ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
netSettings->m_NetClassLabelAssignments[ netname ] = netclass;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -499,8 +499,12 @@ private:
|
||||||
* the driver is first selected by CONNECTION_SUBGRAPH::ResolveDrivers(),
|
* the driver is first selected by CONNECTION_SUBGRAPH::ResolveDrivers(),
|
||||||
* and then the connection for the chosen driver is propagated to all the
|
* and then the connection for the chosen driver is propagated to all the
|
||||||
* other items in the subgraph.
|
* other items in the subgraph.
|
||||||
|
*
|
||||||
|
* If the unconitional flag is set, all existing net classes will be removed
|
||||||
|
* and re-created. Otherwise, we will preserve existing net classes that do not
|
||||||
|
* conflict with the new net classes.
|
||||||
*/
|
*/
|
||||||
void buildConnectionGraph( std::function<void( SCH_ITEM* )>* aChangedItemHandler );
|
void buildConnectionGraph( std::function<void( SCH_ITEM* )>* aChangedItemHandler, bool aUnconditional );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate individual item subgraphs on a per-sheet basis.
|
* Generate individual item subgraphs on a per-sheet basis.
|
||||||
|
|
Loading…
Reference in New Issue