Implement dynamic assignment of component classes

This commit is contained in:
JamesJCode
2025-03-15 14:33:47 +00:00
parent bb62444fe9
commit ede5faee72
56 changed files with 14041 additions and 1605 deletions
+34 -2
View File
@@ -42,6 +42,7 @@
#include <teardrop/teardrop.h>
#include <functional>
#include <project/project_file.h>
using namespace std::placeholders;
@@ -317,6 +318,15 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
if( !staleTeardropPadsAndVias.empty() || !staleTeardropTracks.empty() )
teardropMgr.RemoveTeardrops( *this, &staleTeardropPadsAndVias, &staleTeardropTracks );
auto updateComponentClasses = [this]( BOARD_ITEM* boardItem )
{
if( boardItem->Type() != PCB_FOOTPRINT_T )
return;
FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem );
GetBoard()->GetComponentClassManager().RebuildRequiredCaches( footprint );
};
for( COMMIT_LINE& ent : m_changes )
{
if( !ent.m_item || !ent.m_item->IsBOARD_ITEM() )
@@ -367,6 +377,8 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
if( view && boardItem->Type() != PCB_NETINFO_T )
view->Add( boardItem );
updateComponentClasses( boardItem );
break;
case CHT_REMOVE:
@@ -510,6 +522,8 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
propagateDamage( boardItem, staleZones, &staleHatchedShapes ); // after
}
updateComponentClasses( boardItem );
if( view )
view->Update( boardItem );
@@ -533,7 +547,10 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
{
item->ClearEditFlags();
} );
}
} // ... and regenerate them.
// Invalidate component classes
board->GetComponentClassManager().InvalidateComponentClasses();
if( m_isBoardEditor )
{
@@ -703,6 +720,15 @@ void BOARD_COMMIT::Revert()
board->IncrementTimeStamp(); // clear caches
auto updateComponentClasses = [this]( BOARD_ITEM* boardItem )
{
if( boardItem->Type() != PCB_FOOTPRINT_T )
return;
FOOTPRINT* footprint = static_cast<FOOTPRINT*>( boardItem );
GetBoard()->GetComponentClassManager().RebuildRequiredCaches( footprint );
};
std::vector<BOARD_ITEM*> bulkAddedItems;
std::vector<BOARD_ITEM*> bulkRemovedItems;
std::vector<BOARD_ITEM*> itemsChanged;
@@ -767,6 +793,8 @@ void BOARD_COMMIT::Revert()
bulkAddedItems.push_back( boardItem );
}
updateComponentClasses( boardItem );
break;
}
@@ -792,6 +820,8 @@ void BOARD_COMMIT::Revert()
connectivity->Add( boardItem );
itemsChanged.push_back( boardItem );
updateComponentClasses( boardItem );
delete entry.m_copy;
break;
}
@@ -804,6 +834,9 @@ void BOARD_COMMIT::Revert()
boardItem->ClearEditFlags();
}
// Invalidate component classes
board->GetComponentClassManager().InvalidateComponentClasses();
if( bulkAddedItems.size() > 0 || bulkRemovedItems.size() > 0 || itemsChanged.size() > 0 )
board->OnItemsCompositeUpdate( bulkAddedItems, bulkRemovedItems, itemsChanged );
@@ -822,4 +855,3 @@ void BOARD_COMMIT::Revert()
clear();
}