Copy ratsnest flags when exchanging modules.

Fixes: lp:1834214
* https://bugs.launchpad.net/kicad/+bug/1834214
This commit is contained in:
Jeff Young 2019-07-21 19:48:38 -06:00
parent b858fa38c4
commit 2ca379b281
2 changed files with 15 additions and 16 deletions

View File

@ -398,8 +398,8 @@ TEXTE_MODULE* getMatchingTextItem( TEXTE_MODULE* aRefItem, MODULE* aModule )
void PCB_EDIT_FRAME::Exchange_Module( MODULE* aSrc, MODULE* aDest, BOARD_COMMIT& aCommit, void PCB_EDIT_FRAME::Exchange_Module( MODULE* aSrc, MODULE* aDest, BOARD_COMMIT& aCommit,
bool deleteExtraTexts, bool deleteExtraTexts, bool resetTextLayers,
bool resetTextLayers, bool resetTextEffects ) bool resetTextEffects )
{ {
aDest->SetParent( GetBoard() ); aDest->SetParent( GetBoard() );
@ -423,7 +423,10 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aSrc, MODULE* aDest, BOARD_COMMIT&
D_PAD* oldPad = aSrc->FindPadByName( pad->GetName() ); D_PAD* oldPad = aSrc->FindPadByName( pad->GetName() );
if( oldPad ) if( oldPad )
{
pad->SetLocalRatsnestVisible( oldPad->GetLocalRatsnestVisible() );
pad->SetNetCode( oldPad->GetNetCode() ); pad->SetNetCode( oldPad->GetNetCode() );
}
} }
// Copy reference // Copy reference

View File

@ -1466,24 +1466,16 @@ void PCB_EDITOR_CONTROL::ratsnestTimer( wxTimerEvent& aEvent )
void PCB_EDITOR_CONTROL::calculateSelectionRatsnest() void PCB_EDITOR_CONTROL::calculateSelectionRatsnest()
{ {
auto selectionTool = m_toolMgr->GetTool<SELECTION_TOOL>(); SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<SELECTION_TOOL>();
auto& selection = selectionTool->GetSelection(); SELECTION& selection = selectionTool->GetSelection();
auto connectivity = board()->GetConnectivity(); std::shared_ptr<CONNECTIVITY_DATA> connectivity = board()->GetConnectivity();
std::vector<BOARD_ITEM*> items; std::vector<BOARD_ITEM*> items;
items.reserve( selection.Size() );
for( auto item : selection ) for( EDA_ITEM* item : selection )
{ {
auto board_item = static_cast<BOARD_CONNECTED_ITEM*>( item ); BOARD_CONNECTED_ITEM* boardItem = static_cast<BOARD_CONNECTED_ITEM*>( item );
if( board_item->Type() != PCB_MODULE_T if( boardItem->Type() == PCB_MODULE_T )
&& ( board_item->GetLocalRatsnestVisible()
|| displayOptions()->m_ShowModuleRatsnest ) )
{
items.push_back( board_item );
}
else if( board_item->Type() == PCB_MODULE_T )
{ {
for( auto pad : static_cast<MODULE*>( item )->Pads() ) for( auto pad : static_cast<MODULE*>( item )->Pads() )
{ {
@ -1491,6 +1483,10 @@ void PCB_EDITOR_CONTROL::calculateSelectionRatsnest()
items.push_back( pad ); items.push_back( pad );
} }
} }
else if( boardItem->GetLocalRatsnestVisible() || displayOptions()->m_ShowModuleRatsnest )
{
items.push_back( boardItem );
}
} }
connectivity->ComputeDynamicRatsnest( items ); connectivity->ComputeDynamicRatsnest( items );