Copy ratsnest flags when exchanging modules.

Fixes: lp:1834214
* https://bugs.launchpad.net/kicad/+bug/1834214

(cherry picked from commit 2ca379b281)
This commit is contained in:
Jeff Young 2019-07-21 19:48:38 -06:00
parent b56855c542
commit ca0d4511a9
1 changed files with 20 additions and 5 deletions

View File

@ -410,8 +410,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() );
@ -419,9 +419,24 @@ void PCB_EDIT_FRAME::Exchange_Module( MODULE* aSrc, MODULE* aDest, BOARD_COMMIT&
* when all modules are on board */ * when all modules are on board */
PlaceModule( aDest, nullptr, false ); PlaceModule( aDest, nullptr, false );
// Copy full placement and pad net names (when possible) if( aDest->GetLayer() != aSrc->GetLayer() )
// but not local settings like clearances (use library values) aDest->Flip( aSrc->GetPosition() );
aSrc->CopyNetlistSettings( aDest, false );
if( aDest->GetOrientation() != aSrc->GetOrientation() )
aDest->Rotate( aDest->GetPosition(), aSrc->GetOrientation() );
aDest->SetLocked( aSrc->IsLocked() );
for( auto pad : aDest->Pads() )
{
D_PAD* oldPad = aSrc->FindPadByName( pad->GetName() );
if( oldPad )
{
pad->SetLocalRatsnestVisible( oldPad->GetLocalRatsnestVisible() );
pad->SetNetCode( oldPad->GetNetCode() );
}
}
// Copy reference // Copy reference
processTextItem( aSrc->Reference(), aDest->Reference(), processTextItem( aSrc->Reference(), aDest->Reference(),