diff --git a/pcbnew/class_drawsegment.cpp b/pcbnew/class_drawsegment.cpp index 8f2535cd06..6b3f1cac05 100644 --- a/pcbnew/class_drawsegment.cpp +++ b/pcbnew/class_drawsegment.cpp @@ -1,7 +1,7 @@ /* * This program source code file is part of KiCad, a free EDA CAD application. * - * Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com + * Copyright (C) 2004 Jean-Pierre Charras, jean-pierre.charras@gipsa-lab.inpg.fr * Copyright (C) 2011 Wayne Stambaugh * Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors. * diff --git a/pcbnew/dialogs/dialog_pad_properties.cpp b/pcbnew/dialogs/dialog_pad_properties.cpp index b4cfcf6d73..20c0352886 100644 --- a/pcbnew/dialogs/dialog_pad_properties.cpp +++ b/pcbnew/dialogs/dialog_pad_properties.cpp @@ -1,8 +1,32 @@ /*******************************************************************/ /* dialog_pad_properties.cpp: Pad editing functions and dialog box */ -/* see also dialog_pad_properties.xxx (built with wxFormBuilder) */ +/* see also dialog_pad_properties_base.xxx (built with wxFormBuilder) */ /*******************************************************************/ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2012 Jean-Pierre Charras + * Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + #include #include #include @@ -19,6 +43,7 @@ #include #include +#include #include #include @@ -58,7 +83,7 @@ static long Std_Pad_Layers[] = { * class DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, * created by wxFormBuilder */ -class DIALOG_PAD_PROPERTIES : public DIALOG_PAD_PROPERTIES_BASE +DIALOG_EXTEND_WITH_SHIM( DIALOG_PAD_PROPERTIES, DIALOG_PAD_PROPERTIES_BASE ) { public: DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, D_PAD* aPad ); @@ -69,23 +94,14 @@ public: private: PCB_BASE_FRAME* m_Parent; - D_PAD* m_CurrentPad; // pad currently being edited - D_PAD* m_dummyPad; // a working copy used to show changes - BOARD* m_Board; - D_PAD& m_Pad_Master; - bool m_isFlipped; // true if the parent footprint (therefore pads) is flipped (mirrored) // in this case, some Y coordinates values must be negated - bool m_canUpdate; - static wxPoint prevPosition; - static wxSize prevSize; - void initValues(); bool PadValuesOK(); ///< test if all values are acceptable for the pad @@ -116,12 +132,8 @@ private: }; -wxPoint DIALOG_PAD_PROPERTIES::prevPosition( -1, -1 ); -wxSize DIALOG_PAD_PROPERTIES::prevSize; - - DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, D_PAD* aPad ) : - DIALOG_PAD_PROPERTIES_BASE( aParent ), + DIALOG_PAD_PROPERTIES_BASE_SHIM( aParent ), m_Pad_Master( aParent->GetBoard()->GetDesignSettings().m_Pad_Master ) { m_canUpdate = false; @@ -140,12 +152,6 @@ DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES( PCB_BASE_FRAME* aParent, D_PAD* aP m_sdbSizer1OK->SetDefault(); GetSizer()->SetSizeHints( this ); - if( prevPosition.x != -1 ) - SetSize( prevPosition.x, prevPosition.y, - prevSize.x, prevSize.y ); - else - Center(); - m_PadNumCtrl->SetFocus(); m_canUpdate = true; } @@ -208,6 +214,13 @@ void DIALOG_PAD_PROPERTIES::OnPaintShowPanel( wxPaintEvent& event ) GRResetPenAndBrush( &dc ); m_dummyPad->DrawShape( NULL, &dc, drawInfo ); + // Draw X and Y axis. + // this is particularly useful to show the reference position of pads + // with offset and no hole + int width = 0; + GRLine( NULL, &dc, -dim, 0, dim, 0, width, BLUE ); // X axis + GRLine( NULL, &dc, 0, -dim, 0, dim, width, BLUE ); // Y axis + event.Skip(); } @@ -673,8 +686,13 @@ if you do not want this pad plotted in gerber files"); } } - if( m_dummyPad->GetSize().x / 2 <= ABS( m_dummyPad->GetOffset().x ) || - m_dummyPad->GetSize().y / 2 <= ABS( m_dummyPad->GetOffset().y ) ) + wxPoint max_size; + max_size.x = ABS( m_dummyPad->GetOffset().x ); + max_size.y = ABS( m_dummyPad->GetOffset().y ); + max_size.x += m_dummyPad->GetDrillSize().x / 2; + max_size.y += m_dummyPad->GetDrillSize().y / 2; + if( ( m_dummyPad->GetSize().x / 2 <= max_size.x ) || + ( m_dummyPad->GetSize().y / 2 <= max_size.y ) ) { error_msgs.Add( _( "Incorrect value for pad offset" ) ); } @@ -719,9 +737,6 @@ void DIALOG_PAD_PROPERTIES::PadPropertiesAccept( wxCommandEvent& event ) bool rastnestIsChanged = false; int isign = m_isFlipped ? -1 : 1; - prevPosition = GetPosition(); - prevSize = GetSize(); - TransfertDataToPad( &m_Pad_Master ); if( m_CurrentPad ) // Set current Pad parameters @@ -999,8 +1014,12 @@ bool DIALOG_PAD_PROPERTIES::TransfertDataToPad( D_PAD* aPad ) case PAD_CONN: case PAD_SMD: - // Offset is a translation of border relative to hole. SMD has no hole. - aPad->SetOffset( wxPoint( 0, 0 ) ); + // SMD and PAD_CONN has no hole. + // basically, SMD and PAD_CONN are same type of pads + // PAD_CONN has just a default non technical layers that differs frm SMD + // and are intended to be used in virtual edge board connectors + // However we can accept a non null offset, + // mainly to allow complex pads build from a set of from basic pad shapes aPad->SetDrillSize( wxSize( 0, 0 ) ); break; @@ -1078,7 +1097,5 @@ void DIALOG_PAD_PROPERTIES::OnValuesChanged( wxCommandEvent& event ) void DIALOG_PAD_PROPERTIES::OnCancelButtonClick( wxCommandEvent& event ) { - prevPosition = GetPosition(); - prevSize = GetSize(); EndModal( wxID_CANCEL ); }