Be very careful when "doing what I mean".
Just wanting a SMD pad isn't enough -- the user may have already set SMD settings into the master pad and changing the SizeX is then very unexpected. Make sure the settings directly conflict before making any "do what I mean" adjustments. Also fixes the parent-footprint info when no parent exists. Also gives a better title to the dialog when used to edit the masterPad properties. Fixes https://gitlab.com/kicad/code/kicad/issues/9427
This commit is contained in:
parent
b37664092d
commit
463b82cf46
|
@ -477,6 +477,8 @@ void DIALOG_PAD_PROPERTIES::initValues()
|
||||||
|
|
||||||
if( m_currentPad )
|
if( m_currentPad )
|
||||||
{
|
{
|
||||||
|
SetTitle( _( "Pad Properties" ) );
|
||||||
|
|
||||||
m_locked->SetValue( m_currentPad->IsLocked() );
|
m_locked->SetValue( m_currentPad->IsLocked() );
|
||||||
m_isFlipped = m_currentPad->IsFlipped();
|
m_isFlipped = m_currentPad->IsFlipped();
|
||||||
|
|
||||||
|
@ -501,6 +503,8 @@ void DIALOG_PAD_PROPERTIES::initValues()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
SetTitle( _( "Default Pad Properties for Add Pad Tool" ) );
|
||||||
|
|
||||||
m_locked->Hide();
|
m_locked->Hide();
|
||||||
m_isFlipped = false;
|
m_isFlipped = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -950,7 +950,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
wxBoxSizer* bottomSizer;
|
wxBoxSizer* bottomSizer;
|
||||||
bottomSizer = new wxBoxSizer( wxHORIZONTAL );
|
bottomSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_parentInfo = new wxStaticText( this, wxID_ANY, _("Footprint R1 (300K), back side (mirrored), rotated 180.0º"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_parentInfo = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_parentInfo->Wrap( -1 );
|
m_parentInfo->Wrap( -1 );
|
||||||
bottomSizer->Add( m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
|
bottomSizer->Add( m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
|
||||||
|
|
||||||
|
@ -961,7 +961,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind
|
||||||
bottomSizer->Add( m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
bottomSizer->Add( m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
|
bottomSizer->Add( 40, 0, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
m_sdbSizer = new wxStdDialogButtonSizer();
|
m_sdbSizer = new wxStdDialogButtonSizer();
|
||||||
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
m_sdbSizerOK = new wxButton( this, wxID_OK );
|
||||||
|
|
|
@ -10761,7 +10761,7 @@
|
||||||
<property name="gripper">0</property>
|
<property name="gripper">0</property>
|
||||||
<property name="hidden">0</property>
|
<property name="hidden">0</property>
|
||||||
<property name="id">wxID_ANY</property>
|
<property name="id">wxID_ANY</property>
|
||||||
<property name="label">Footprint R1 (300K), back side (mirrored), rotated 180.0º</property>
|
<property name="label"></property>
|
||||||
<property name="markup">0</property>
|
<property name="markup">0</property>
|
||||||
<property name="max_size"></property>
|
<property name="max_size"></property>
|
||||||
<property name="maximize_button">0</property>
|
<property name="maximize_button">0</property>
|
||||||
|
@ -10868,11 +10868,11 @@
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="0">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND</property>
|
<property name="flag">wxEXPAND</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">0</property>
|
||||||
<object class="spacer" expanded="0">
|
<object class="spacer" expanded="0">
|
||||||
<property name="height">0</property>
|
<property name="height">0</property>
|
||||||
<property name="permission">protected</property>
|
<property name="permission">protected</property>
|
||||||
<property name="width">20</property>
|
<property name="width">40</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="0">
|
||||||
|
|
|
@ -64,9 +64,7 @@ PAD::PAD( FOOTPRINT* parent ) :
|
||||||
m_lengthPadToDie = 0;
|
m_lengthPadToDie = 0;
|
||||||
|
|
||||||
if( m_parent && m_parent->Type() == PCB_FOOTPRINT_T )
|
if( m_parent && m_parent->Type() == PCB_FOOTPRINT_T )
|
||||||
{
|
|
||||||
m_pos = GetParent()->GetPosition();
|
m_pos = GetParent()->GetPosition();
|
||||||
}
|
|
||||||
|
|
||||||
SetShape( PAD_SHAPE::CIRCLE ); // Default pad shape is PAD_CIRCLE.
|
SetShape( PAD_SHAPE::CIRCLE ); // Default pad shape is PAD_CIRCLE.
|
||||||
SetAnchorPadShape( PAD_SHAPE::CIRCLE ); // Default shape for custom shaped pads
|
SetAnchorPadShape( PAD_SHAPE::CIRCLE ); // Default shape for custom shaped pads
|
||||||
|
@ -86,14 +84,14 @@ PAD::PAD( FOOTPRINT* parent ) :
|
||||||
m_chamferScale = 0.2; // Size of chamfer: ratio of smallest of X,Y size
|
m_chamferScale = 0.2; // Size of chamfer: ratio of smallest of X,Y size
|
||||||
m_chamferPositions = RECT_NO_CHAMFER; // No chamfered corner
|
m_chamferPositions = RECT_NO_CHAMFER; // No chamfered corner
|
||||||
|
|
||||||
m_zoneConnection = ZONE_CONNECTION::INHERITED; // Use parent setting by default
|
m_zoneConnection = ZONE_CONNECTION::INHERITED; // Use parent setting by default
|
||||||
m_thermalWidth = 0; // Use parent setting by default
|
m_thermalWidth = 0; // Use parent setting by default
|
||||||
m_thermalGap = 0; // Use parent setting by default
|
m_thermalGap = 0; // Use parent setting by default
|
||||||
|
|
||||||
m_customShapeClearanceArea = CUST_PAD_SHAPE_IN_ZONE_OUTLINE;
|
m_customShapeClearanceArea = CUST_PAD_SHAPE_IN_ZONE_OUTLINE;
|
||||||
|
|
||||||
// Set layers mask to default for a standard thru hole pad.
|
// Set layers mask to default for a standard thru hole pad.
|
||||||
m_layerMask = PTHMask();
|
m_layerMask = PTHMask();
|
||||||
|
|
||||||
SetSubRatsnest( 0 ); // used in ratsnest calculations
|
SetSubRatsnest( 0 ); // used in ratsnest calculations
|
||||||
|
|
||||||
|
@ -1367,9 +1365,9 @@ void PAD::ImportSettingsFrom( const PAD& aMasterPad )
|
||||||
// I am not sure the m_LengthPadToDie must be imported, because this is
|
// I am not sure the m_LengthPadToDie must be imported, because this is
|
||||||
// a parameter really specific to a given pad (JPC).
|
// a parameter really specific to a given pad (JPC).
|
||||||
// So this is currently non imported
|
// So this is currently non imported
|
||||||
#if 0
|
#if 0
|
||||||
SetPadToDieLength( aMasterPad.GetPadToDieLength() );
|
SetPadToDieLength( aMasterPad.GetPadToDieLength() );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The pad orientation, for historical reasons is the
|
// The pad orientation, for historical reasons is the
|
||||||
// pad rotation + parent rotation.
|
// pad rotation + parent rotation.
|
||||||
|
|
|
@ -481,18 +481,28 @@ int PAD_TOOL::PlacePad( const TOOL_EVENT& aEvent )
|
||||||
std::unique_ptr<BOARD_ITEM> CreateItem() override
|
std::unique_ptr<BOARD_ITEM> CreateItem() override
|
||||||
{
|
{
|
||||||
PAD* pad = new PAD( m_board->GetFirstFootprint() );
|
PAD* pad = new PAD( m_board->GetFirstFootprint() );
|
||||||
|
PAD* master = m_frame->GetDesignSettings().m_Pad_Master.get();
|
||||||
|
|
||||||
pad->ImportSettingsFrom( *(m_frame->GetDesignSettings().m_Pad_Master.get()) );
|
pad->ImportSettingsFrom( *master );
|
||||||
|
|
||||||
// If the user has set the footprint type to SMD, we assume that they would like to place
|
// If the footprint type and master pad type directly conflict then make some
|
||||||
// SMD pads
|
// adjustments. Otherwise assume the user set what they wanted.
|
||||||
if( m_board->GetFirstFootprint()->GetAttributes() & FP_SMD )
|
if( ( m_board->GetFirstFootprint()->GetAttributes() & FP_SMD )
|
||||||
|
&& master->GetAttribute() == PAD_ATTRIB::PTH )
|
||||||
{
|
{
|
||||||
pad->SetAttribute( PAD_ATTRIB::SMD );
|
pad->SetAttribute( PAD_ATTRIB::SMD );
|
||||||
pad->SetShape( PAD_SHAPE::ROUNDRECT );
|
pad->SetShape( PAD_SHAPE::ROUNDRECT );
|
||||||
pad->SetSizeX( 1.5 * pad->GetSizeY() );
|
pad->SetSizeX( 1.5 * pad->GetSizeY() );
|
||||||
pad->SetLayerSet( PAD::SMDMask() );
|
pad->SetLayerSet( PAD::SMDMask() );
|
||||||
}
|
}
|
||||||
|
else if( ( m_board->GetFirstFootprint()->GetAttributes() & FP_THROUGH_HOLE )
|
||||||
|
&& master->GetAttribute() == PAD_ATTRIB::SMD )
|
||||||
|
{
|
||||||
|
pad->SetAttribute( PAD_ATTRIB::PTH );
|
||||||
|
pad->SetShape( PAD_SHAPE::CIRCLE );
|
||||||
|
pad->SetSize( wxSize( pad->GetSizeX(), pad->GetSizeX() ) );
|
||||||
|
pad->SetLayerSet( PAD::PTHMask() );
|
||||||
|
}
|
||||||
|
|
||||||
if( pad->CanHaveNumber() )
|
if( pad->CanHaveNumber() )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue