Add all non-shape properties to dummy hole pad.

This is required in case there are DRC Rules that are matching against
the properties.  It also allows any local clearance overrides to take
effect.

Fixes https://gitlab.com/kicad/code/kicad/issues/5468
This commit is contained in:
Jeff Young 2020-09-03 14:21:20 +01:00
parent b0081606f7
commit 8609180406
1 changed files with 20 additions and 1 deletions

View File

@ -426,11 +426,30 @@ bool hasThermalConnection( D_PAD* pad, const ZONE_CONTAINER* aZone )
*/ */
static void setupDummyPadForHole( const D_PAD* aPad, D_PAD& aDummyPad ) static void setupDummyPadForHole( const D_PAD* aPad, D_PAD& aDummyPad )
{ {
// People may author clearance rules that look at a bunch of different stuff so we need
// to copy over pretty much everything except the shape info, which we fill from the drill
// info.
aDummyPad.SetLayerSet( aPad->GetLayerSet() );
aDummyPad.SetAttribute( aPad->GetAttribute() );
aDummyPad.SetProperty( aPad->GetProperty() );
aDummyPad.SetNetCode( aPad->GetNetCode() ); aDummyPad.SetNetCode( aPad->GetNetCode() );
aDummyPad.SetLocalClearance( aPad->GetLocalClearance() );
aDummyPad.SetLocalSolderMaskMargin( aPad->GetLocalSolderMaskMargin() );
aDummyPad.SetLocalSolderPasteMargin( aPad->GetLocalSolderPasteMargin() );
aDummyPad.SetLocalSolderPasteMarginRatio( aPad->GetLocalSolderPasteMarginRatio() );
aDummyPad.SetZoneConnection( aPad->GetEffectiveZoneConnection() );
aDummyPad.SetThermalWidth( aPad->GetThermalWidth() );
aDummyPad.SetThermalGap( aPad->GetThermalGap() );
aDummyPad.SetCustomShapeInZoneOpt( aPad->GetCustomShapeInZoneOpt() );
aDummyPad.SetOffset( wxPoint( 0, 0 ) );
aDummyPad.SetSize( aPad->GetDrillSize() ); aDummyPad.SetSize( aPad->GetDrillSize() );
aDummyPad.SetOrientation( aPad->GetOrientation() );
aDummyPad.SetShape( aPad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL aDummyPad.SetShape( aPad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL
: PAD_SHAPE_CIRCLE ); : PAD_SHAPE_CIRCLE );
aDummyPad.SetOrientation( aPad->GetOrientation() );
aDummyPad.SetPosition( aPad->GetPosition() ); aDummyPad.SetPosition( aPad->GetPosition() );
} }