void MODULE::CopyNetlistSettings( MODULE* aModule ) { // Don't do anything foolish like trying to copy to yourself. wxCHECK_RET( aModule != NULL && aModule != this, wxT( "Cannot copy to NULL or yourself." ) ); // Not sure what to do with the value field. Use netlist for now. aModule->SetPosition( GetPosition() ); if( aModule->GetLayer() != GetLayer() ) aModule->Flip( aModule->GetPosition() ); if( aModule->GetOrientation() != GetOrientation() ) aModule->Rotate( aModule->GetPosition(), GetOrientation() ); aModule->SetLocalSolderMaskMargin( GetLocalSolderMaskMargin() ); aModule->SetLocalClearance( GetLocalClearance() ); aModule->SetLocalSolderPasteMargin( GetLocalSolderPasteMargin() ); aModule->SetLocalSolderPasteMarginRatio( GetLocalSolderPasteMarginRatio() ); aModule->SetZoneConnection( GetZoneConnection() ); aModule->SetThermalWidth( GetThermalWidth() ); aModule->SetThermalGap( GetThermalGap() ); for( D_PAD* pad = Pads(); pad; pad = pad->Next() ) { D_PAD* newPad = aModule->FindPadByName( pad->GetPadName() ); if( newPad ) pad->CopyNetlistSettings( newPad ); } // Not sure about copying description, keywords, 3D models or any other // local user changes to footprint. Stick with the new footprint settings // called out in the footprint loaded in the netlist. aModule->CalculateBoundingBox(); }
void MODULE::CopyNetlistSettings( MODULE* aModule, bool aCopyLocalSettings ) { // Don't do anything foolish like trying to copy to yourself. wxCHECK_RET( aModule != NULL && aModule != this, wxT( "Cannot copy to NULL or yourself." ) ); // Not sure what to do with the value field. Use netlist for now. aModule->SetPosition( GetPosition() ); if( aModule->GetLayer() != GetLayer() ) aModule->Flip( aModule->GetPosition() ); if( aModule->GetOrientation() != GetOrientation() ) aModule->Rotate( aModule->GetPosition(), GetOrientation() ); aModule->SetLocked( IsLocked() ); if( aCopyLocalSettings ) { aModule->SetLocalSolderMaskMargin( GetLocalSolderMaskMargin() ); aModule->SetLocalClearance( GetLocalClearance() ); aModule->SetLocalSolderPasteMargin( GetLocalSolderPasteMargin() ); aModule->SetLocalSolderPasteMarginRatio( GetLocalSolderPasteMarginRatio() ); aModule->SetZoneConnection( GetZoneConnection() ); aModule->SetThermalWidth( GetThermalWidth() ); aModule->SetThermalGap( GetThermalGap() ); } for( D_PAD* pad = aModule->Pads(); pad; pad = pad->Next() ) { // Fix me: if aCopyLocalSettings == true, for "multiple" pads // (set of pads having the same name/number) this is broken // because we copy settings from the first pad found. // When old and new footprints have very few differences, a better // algo can be used. D_PAD* oldPad = FindPadByName( pad->GetPadName() ); if( oldPad ) oldPad->CopyNetlistSettings( pad, aCopyLocalSettings ); } // Not sure about copying description, keywords, 3D models or any other // local user changes to footprint. Stick with the new footprint settings // called out in the footprint loaded in the netlist. aModule->CalculateBoundingBox(); }