Clear board soldermask when undoing/redoing items that affect it.
Fixes https://gitlab.com/kicad/code/kicad/issues/13446
This commit is contained in:
parent
d01c023d5a
commit
4a3f77cd9d
|
@ -375,6 +375,7 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
|
||||||
bool not_found = false;
|
bool not_found = false;
|
||||||
bool reBuild_ratsnest = false;
|
bool reBuild_ratsnest = false;
|
||||||
bool deep_reBuild_ratsnest = false; // true later if pointers must be rebuilt
|
bool deep_reBuild_ratsnest = false; // true later if pointers must be rebuilt
|
||||||
|
bool solder_mask_dirty = false;
|
||||||
|
|
||||||
auto view = GetCanvas()->GetView();
|
auto view = GetCanvas()->GetView();
|
||||||
auto connectivity = GetBoard()->GetConnectivity();
|
auto connectivity = GetBoard()->GetConnectivity();
|
||||||
|
@ -445,6 +446,34 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch( eda_item->Type() )
|
||||||
|
{
|
||||||
|
case PCB_FOOTPRINT_T:
|
||||||
|
solder_mask_dirty = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PCB_VIA_T:
|
||||||
|
solder_mask_dirty = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PCB_ZONE_T:
|
||||||
|
case PCB_TRACE_T:
|
||||||
|
case PCB_ARC_T:
|
||||||
|
case PCB_PAD_T:
|
||||||
|
case PCB_SHAPE_T:
|
||||||
|
{
|
||||||
|
LSET layers = static_cast<BOARD_ITEM*>( eda_item )->GetLayerSet();
|
||||||
|
|
||||||
|
if( layers.test( F_Mask ) || layers.test( B_Mask ) )
|
||||||
|
solder_mask_dirty = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
switch( aList->GetPickedItemStatus( ii ) )
|
switch( aList->GetPickedItemStatus( ii ) )
|
||||||
{
|
{
|
||||||
case UNDO_REDO::CHANGED: /* Exchange old and new data for each item */
|
case UNDO_REDO::CHANGED: /* Exchange old and new data for each item */
|
||||||
|
@ -546,11 +575,13 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
|
||||||
if( not_found )
|
if( not_found )
|
||||||
wxMessageBox( _( "Incomplete undo/redo operation: some items not found" ) );
|
wxMessageBox( _( "Incomplete undo/redo operation: some items not found" ) );
|
||||||
|
|
||||||
// Rebuild pointers and connectivity that can be changed.
|
if( IsType( FRAME_PCB_EDITOR ) )
|
||||||
// connectivity can be rebuilt only in the board editor frame
|
|
||||||
if( IsType( FRAME_PCB_EDITOR ) && ( reBuild_ratsnest || deep_reBuild_ratsnest ) )
|
|
||||||
{
|
{
|
||||||
|
if( reBuild_ratsnest || deep_reBuild_ratsnest )
|
||||||
Compile_Ratsnest( false );
|
Compile_Ratsnest( false );
|
||||||
|
|
||||||
|
if( solder_mask_dirty )
|
||||||
|
HideSolderMask();
|
||||||
}
|
}
|
||||||
|
|
||||||
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
PCB_SELECTION_TOOL* selTool = m_toolManager->GetTool<PCB_SELECTION_TOOL>();
|
||||||
|
|
Loading…
Reference in New Issue