KiCad PCB EDA Suite
DIALOG_PAD_PROPERTIES Class Reference

class DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, created by wxFormBuilder More...

#include <dialog_pad_properties.h>

Inheritance diagram for DIALOG_PAD_PROPERTIES:
DIALOG_PAD_PROPERTIES_BASE DIALOG_SHIM KIWAY_HOLDER

Public Member Functions

 DIALOG_PAD_PROPERTIES (PCB_BASE_FRAME *aParent, D_PAD *aPad)
 
 ~DIALOG_PAD_PROPERTIES ()
 
void SetInitialFocus (wxWindow *aWindow)
 Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown. More...
 
int ShowQuasiModal ()
 
void EndQuasiModal (int retCode)
 
bool IsQuasiModal ()
 
bool Show (bool show) override
 
bool Enable (bool enable) override
 
void OnPaint (wxPaintEvent &event)
 
EDA_UNITS_T GetUserUnits () const override
 
KIWAYKiway () const
 Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in. More...
 
PROJECTPrj () const
 Function Prj returns a reference to the PROJECT "associated with" this KIWAY. More...
 
void SetKiway (wxWindow *aDest, KIWAY *aKiway)
 Function SetKiway. More...
 

Protected Types

enum  { wxID_DIALOG_EDIT_PAD = 1000, wxID_PADNUMCTRL }
 

Protected Member Functions

void FinishDialogSettings ()
 In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls. More...
 
void SetSizeInDU (int x, int y)
 Set the dialog to the given dimensions in "dialog units". More...
 
int HorizPixelsFromDU (int x)
 Convert an integer number of dialog units to pixels, horizontally. More...
 
int VertPixelsFromDU (int y)
 Convert an integer number of dialog units to pixels, vertically. More...
 

Protected Attributes

wxNotebook * m_notebook
 
wxPanel * m_panelGeneral
 
wxStaticText * m_PadNumText
 
wxTextCtrl * m_PadNumCtrl
 
wxStaticText * m_PadNameText
 
NET_SELECTORm_PadNetSelector
 
wxStaticText * m_staticText44
 
wxChoice * m_PadType
 
wxStaticText * m_staticText45
 
wxChoice * m_PadShape
 
wxStaticText * m_posXLabel
 
wxTextCtrl * m_posXCtrl
 
wxStaticText * m_posXUnits
 
wxStaticText * m_posYLabel
 
wxTextCtrl * m_posYCtrl
 
wxStaticText * m_posYUnits
 
wxStaticText * m_sizeXLabel
 
wxTextCtrl * m_sizeXCtrl
 
wxStaticText * m_sizeXUnits
 
wxStaticText * m_sizeYLabel
 
wxTextCtrl * m_sizeYCtrl
 
wxStaticText * m_sizeYUnits
 
wxStaticText * m_PadOrientText
 
wxComboBox * m_orientation
 
wxStaticText * m_staticText491
 
wxStaticText * m_offsetXLabel
 
wxTextCtrl * m_offsetXCtrl
 
wxStaticText * m_offsetXUnits
 
wxStaticText * m_offsetYLabel
 
wxTextCtrl * m_offsetYCtrl
 
wxStaticText * m_offsetYUnits
 
wxStaticText * m_padToDieLabel
 
wxTextCtrl * m_padToDieCtrl
 
wxStaticText * m_padToDieUnits
 
wxStaticText * m_trapDeltaLabel
 
wxTextCtrl * m_trapDeltaCtrl
 
wxStaticText * m_trapDeltaUnits
 
wxStaticText * m_trapAxisLabel
 
wxChoice * m_trapAxisCtrl
 
wxStaticText * m_staticTextCornerSizeRatio
 
TEXT_CTRL_EVALm_tcCornerSizeRatio
 
wxStaticText * m_staticTextCornerSizeRatioUnit
 
wxStaticText * m_cornerRadiusLabel
 
TEXT_CTRL_EVALm_tcCornerRadius
 
wxStaticText * m_cornerRadiusUnits
 
wxStaticText * m_holeShapeLabel
 
wxChoice * m_holeShapeCtrl
 
wxStaticText * m_staticText51
 
wxStaticText * m_holeXLabel
 
wxTextCtrl * m_holeXCtrl
 
wxStaticText * m_holeXUnits
 
wxStaticText * m_holeYLabel
 
wxTextCtrl * m_holeYCtrl
 
wxStaticText * m_holeYUnits
 
wxBoxSizer * m_FlippedWarningSizer
 
wxStaticBitmap * m_FlippedWarningIcon
 
wxStaticText * m_staticText86
 
wxStaticText * m_staticText511
 
wxChoice * m_rbCopperLayersSel
 
wxStaticText * m_techLayersLabel
 
wxCheckBox * m_PadLayerAdhCmp
 
wxCheckBox * m_PadLayerAdhCu
 
wxCheckBox * m_PadLayerPateCmp
 
wxCheckBox * m_PadLayerPateCu
 
wxCheckBox * m_PadLayerSilkCmp
 
wxCheckBox * m_PadLayerSilkCu
 
wxCheckBox * m_PadLayerMaskCmp
 
wxCheckBox * m_PadLayerMaskCu
 
wxCheckBox * m_PadLayerDraft
 
wxCheckBox * m_PadLayerECO1
 
wxCheckBox * m_PadLayerECO2
 
wxPanel * m_localSettingsPanel
 
wxStaticText * m_staticTextInfoPosValue
 
wxStaticText * m_staticTextInfoNegVal
 
wxStaticText * m_clearanceLabel
 
wxTextCtrl * m_clearanceCtrl
 
wxStaticText * m_clearanceUnits
 
wxStaticText * m_maskClearanceLabel
 
wxTextCtrl * m_maskClearanceCtrl
 
wxStaticText * m_maskClearanceUnits
 
wxStaticText * m_pasteClearanceLabel
 
wxTextCtrl * m_pasteClearanceCtrl
 
wxStaticText * m_pasteClearanceUnits
 
wxStaticText * m_staticTextRatio
 
TEXT_CTRL_EVALm_SolderPasteMarginRatioCtrl
 
wxStaticText * m_SolderPasteRatioMarginUnits
 
wxSimplebook * m_nonCopperWarningBook
 
wxStaticText * m_nonCopperNote
 
wxStaticBitmap * m_nonCopperWarningIcon
 
wxStaticText * m_nonCopperWarningText
 
wxStaticBoxSizer * m_sbSizerZonesSettings
 
wxStaticText * m_staticText40
 
wxChoice * m_ZoneConnectionChoice
 
wxStaticText * m_spokeWidthLabel
 
wxTextCtrl * m_spokeWidthCtrl
 
wxStaticText * m_spokeWidthUnits
 
wxStaticText * m_thermalGapLabel
 
wxTextCtrl * m_thermalGapCtrl
 
wxStaticText * m_thermalGapUnits
 
wxStaticBoxSizer * m_sbSizerCustomShapedZonesSettings
 
wxStaticText * m_staticTextCsZconnTitle
 
wxChoice * m_ZoneConnectionCustom
 
wxStaticText * m_staticTextcps
 
wxChoice * m_ZoneCustomPadShape
 
wxPanel * m_panelCustomShapePrimitives
 
wxBoxSizer * m_bSizerPanelPrimitives
 
wxStaticText * m_staticTextPrimitivesList
 
wxStaticText * m_staticTextPrimitiveListWarning
 
wxListView * m_listCtrlPrimitives
 
wxButton * m_buttonDel
 
wxButton * m_buttonEditShape
 
wxButton * m_buttonAddShape
 
wxButton * m_buttonDup
 
wxButton * m_buttonGeometry
 
wxStaticText * m_parentInfoLine1
 
wxStaticText * m_parentInfoLine2
 
wxPanel * m_panelShowPad
 
PCB_DRAW_PANEL_GALm_panelShowPadGal
 
KIGFX::GAL_DISPLAY_OPTIONS m_galOptions
 
wxCheckBox * m_cbShowPadOutline
 
wxStaticLine * m_staticline13
 
wxStdDialogButtonSizer * m_sdbSizer
 
wxButton * m_sdbSizerOK
 
wxButton * m_sdbSizerCancel
 
EDA_UNITS_T m_units
 
std::string m_hash_key
 
bool m_firstPaintEvent
 
wxWindow * m_initialFocusTarget
 
WX_EVENT_LOOPm_qmodal_loop
 
bool m_qmodal_showing
 
WDO_ENABLE_DISABLEm_qmodal_parent_disabler
 

Private Member Functions

void prepareCanvas ()
 
void initValues ()
 
void displayPrimitivesList ()
 
bool padValuesOK ()
 test if all values are acceptable for the pad More...
 
void redraw ()
 
void editPrimitive ()
 
void updateRoundRectCornerValues ()
 
void enablePrimitivePage (bool aEnable)
 enable (or disable) the primitive page editor More...
 
void setPadLayersList (LSET layer_mask)
 Function setPadLayersList updates the CheckBox states in pad layers list,. More...
 
bool transferDataToPad (D_PAD *aPad)
 Copy values from dialog field to aPad's members. More...
 
void OnInitDialog (wxInitDialogEvent &event) override
 
void OnResize (wxSizeEvent &event)
 
void OnCancel (wxCommandEvent &event) override
 
virtual void OnUpdateUI (wxUpdateUIEvent &event) override
 
void OnUpdateUINonCopperWarning (wxUpdateUIEvent &event) override
 
void OnPadShapeSelection (wxCommandEvent &event) override
 
void OnDrillShapeSelected (wxCommandEvent &event) override
 
void onChangePadMode (wxCommandEvent &event) override
 
void PadOrientEvent (wxCommandEvent &event) override
 
void PadTypeSelected (wxCommandEvent &event) override
 
void OnSetLayers (wxCommandEvent &event) override
 
void OnPaintShowPanel (wxPaintEvent &event) override
 
void onCornerSizePercentChange (wxCommandEvent &event) override
 
void onCornerRadiusChange (wxCommandEvent &event) override
 
void OnValuesChanged (wxCommandEvent &event) override
 Called when a dimension has changed. More...
 
bool TransferDataFromWindow () override
 Updates the different parameters for the component being edited. More...
 
bool TransferDataToWindow () override
 
void onDeletePrimitive (wxCommandEvent &event) override
 Event handlers of basic shapes list panel. More...
 
void onEditPrimitive (wxCommandEvent &event) override
 
void onAddPrimitive (wxCommandEvent &event) override
 
void onGeometryTransform (wxCommandEvent &event) override
 
void onDuplicatePrimitive (wxCommandEvent &event) override
 
void onPrimitiveDClick (wxMouseEvent &event) override
 Called on a double click on the basic shapes list. More...
 
void OnPrimitiveSelection (wxListEvent &event) override
 Called on selection/deselection of a basic shape. More...
 

Private Attributes

PCB_BASE_FRAMEm_parent
 
D_PADm_currentPad
 
D_PADm_dummyPad
 
D_PADm_padMaster
 
BOARDm_board
 
bool m_isFlipped
 
bool m_canUpdate
 
bool m_canEditNetName
 
std::vector< PAD_CS_PRIMITIVEm_primitives
 
COLOR4D m_selectedColor
 
std::vector< DRAWSEGMENT * > m_highlight
 
KIGFX::ORIGIN_VIEWITEMm_axisOrigin
 
UNIT_BINDER m_posX
 
UNIT_BINDER m_posY
 
UNIT_BINDER m_sizeX
 
UNIT_BINDER m_sizeY
 
UNIT_BINDER m_offsetX
 
UNIT_BINDER m_offsetY
 
UNIT_BINDER m_padToDie
 
UNIT_BINDER m_trapDelta
 
UNIT_BINDER m_cornerRadius
 
UNIT_BINDER m_holeX
 
UNIT_BINDER m_holeY
 
wxFloatingPointValidator< double > m_OrientValidator
 
double m_OrientValue
 
UNIT_BINDER m_clearance
 
UNIT_BINDER m_maskClearance
 
UNIT_BINDER m_pasteClearance
 
UNIT_BINDER m_spokeWidth
 
UNIT_BINDER m_thermalGap
 

Static Private Attributes

static bool m_sketchPreview = false
 

Detailed Description

class DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, created by wxFormBuilder

Definition at line 56 of file dialog_pad_properties.h.

Member Enumeration Documentation

anonymous enum
protectedinherited

Constructor & Destructor Documentation

DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES ( PCB_BASE_FRAME aParent,
D_PAD aPad 
)

Definition at line 103 of file dialog_pad_properties.cpp.

References BRIGHTENED, EDA_ITEM::ClearFlags(), DIALOG_SHIM::FinishDialogSettings(), PCB_BASE_FRAME::GetBoard(), PCB_BASE_FRAME::GetDesignSettings(), BOARD::GetNetInfo(), HIGHLIGHTED, initValues(), KiBitmap(), m_board, m_canUpdate, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, m_currentPad, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_FlippedWarningIcon, DIALOG_PAD_PROPERTIES_BASE::m_nonCopperNote, DIALOG_PAD_PROPERTIES_BASE::m_nonCopperWarningIcon, DIALOG_PAD_PROPERTIES_BASE::m_orientation, m_OrientValidator, BOARD_DESIGN_SETTINGS::m_Pad_Master, m_padMaster, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, m_parent, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine1, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine2, DIALOG_PAD_PROPERTIES_BASE::m_sdbSizerOK, m_sketchPreview, DIALOG_PAD_PROPERTIES_BASE::m_staticTextInfoNegVal, DIALOG_PAD_PROPERTIES_BASE::m_staticTextInfoPosValue, DIALOG_PAD_PROPERTIES_BASE::m_techLayersLabel, OnValuesChanged(), prepareCanvas(), SELECTED, DIALOG_SHIM::SetInitialFocus(), NET_SELECTOR::SetNetInfo(), and TransferDataToWindow().

103  :
104  DIALOG_PAD_PROPERTIES_BASE( aParent ),
105  m_parent( aParent ),
106  m_canUpdate( false ),
109  m_sizeX( aParent, m_sizeXLabel, m_sizeXCtrl, m_sizeXUnits, true ),
110  m_sizeY( aParent, m_sizeYLabel, m_sizeYCtrl, m_sizeYUnits, true ),
116  m_holeX( aParent, m_holeXLabel, m_holeXCtrl, m_holeXUnits, true, 0 ),
117  m_holeY( aParent, m_holeYLabel, m_holeYCtrl, m_holeYUnits, true, 0 ),
124 {
125  m_currentPad = aPad; // aPad can be NULL, if the dialog is called
126  // from the footprint editor to set default pad setup
127 
129 
131 
132  m_OrientValidator.SetRange( -360.0, 360.0 );
133  m_orientation->SetValidator( m_OrientValidator );
134  m_OrientValidator.SetWindow( m_orientation );
135 
136  m_cbShowPadOutline->SetValue( m_sketchPreview );
137 
138  m_FlippedWarningIcon->SetBitmap( KiBitmap( dialog_warning_xpm ) );
139  m_nonCopperWarningIcon->SetBitmap( KiBitmap( dialog_warning_xpm ) );
140 
142  m_dummyPad = new D_PAD( (MODULE*) NULL );
143 
144  if( aPad )
145  {
146  *m_dummyPad = *aPad;
148  }
149  else // We are editing a "master" pad, i.e. a template to create new pads
151 
152  initValues();
153 
154  wxFont infoFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
155  infoFont.SetSymbolicSize( wxFONTSIZE_SMALL );
156  m_techLayersLabel->SetFont( infoFont );
157  m_parentInfoLine1->SetFont( infoFont );
158  m_parentInfoLine2->SetFont( infoFont );
159  m_staticTextInfoNegVal->SetFont( infoFont );
160  m_staticTextInfoPosValue->SetFont( infoFont );
161  m_nonCopperNote->SetFont( infoFont );
162 
163  // Usually, TransferDataToWindow is called by OnInitDialog
164  // calling it here fixes all widget sizes so FinishDialogSettings can safely fix minsizes
166 
167  // Initialize canvas to be able to display the dummy pad:
168  prepareCanvas();
169 
171  m_sdbSizerOK->SetDefault();
172  m_canUpdate = true;
173 
174  m_PadNetSelector->Connect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
175 
176  // Now all widgets have the size fixed, call FinishDialogSettings
178 }
void OnValuesChanged(wxCommandEvent &event) override
Called when a dimension has changed.
void FinishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
wxFloatingPointValidator< double > m_OrientValidator
BOARD * GetBoard() const
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:115
wxBitmap KiBitmap(BITMAP_DEF aBitmap)
Construct a wxBitmap from a memory record, held in a BITMAP_DEF.
Definition: bitmap.cpp:79
#define SELECTED
Definition: base_struct.h:121
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:138
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings returns the BOARD_DESIGN_SETTINGS for the BOARD owned by this frame...
void SetNetInfo(NETINFO_LIST *aNetInfoList)
DIALOG_PAD_PROPERTIES_BASE(wxWindow *parent, wxWindowID id=wxID_DIALOG_EDIT_PAD, const wxString &title=_("Pad Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
NETINFO_LIST & GetNetInfo()
Definition: class_board.h:750
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:137
D_PAD m_Pad_Master
A dummy pad to store all default parameters.
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:257
DIALOG_PAD_PROPERTIES::~DIALOG_PAD_PROPERTIES ( )

Definition at line 181 of file dialog_pad_properties.cpp.

References m_axisOrigin, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, m_sketchPreview, and OnValuesChanged().

182 {
183  m_PadNetSelector->Disconnect( NET_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES::OnValuesChanged ), NULL, this );
184 
185  delete m_dummyPad;
186  delete m_axisOrigin;
187 }
void OnValuesChanged(wxCommandEvent &event) override
Called when a dimension has changed.
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin

Member Function Documentation

void DIALOG_PAD_PROPERTIES::displayPrimitivesList ( )
private

Definition at line 767 of file dialog_pad_properties.cpp.

References FMT_ANGLE, Format(), formatCoord(), PAD_CS_PRIMITIVE::m_ArcAngle, PAD_CS_PRIMITIVE::m_End, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, PAD_CS_PRIMITIVE::m_Poly, m_primitives, PAD_CS_PRIMITIVE::m_Radius, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, DIALOG_SHIM::m_units, MessageTextFromValue(), S_ARC, S_CIRCLE, S_POLYGON, and S_SEGMENT.

Referenced by editPrimitive(), initValues(), onAddPrimitive(), onDeletePrimitive(), onDuplicatePrimitive(), and onGeometryTransform().

768 {
769  m_listCtrlPrimitives->ClearAll();
770 
771  wxListItem itemCol;
772  itemCol.SetImage(-1);
773 
774  for( int ii = 0; ii < 5; ++ii )
775  m_listCtrlPrimitives->InsertColumn(ii, itemCol);
776 
777  wxString bs_info[5];
778 
779  for( unsigned ii = 0; ii < m_primitives.size(); ++ii )
780  {
781  const PAD_CS_PRIMITIVE& primitive = m_primitives[ii];
782 
783  for( unsigned jj = 0; jj < 5; ++jj )
784  bs_info[jj].Empty();
785 
786  bs_info[4] = wxString::Format( _( "width %s" ),
787  MessageTextFromValue( m_units, primitive.m_Thickness, true ) );
788 
789  switch( primitive.m_Shape )
790  {
791  case S_SEGMENT: // usual segment : line with rounded ends
792  bs_info[0] = _( "Segment" );
793  bs_info[1] = _( "from " ) + formatCoord( m_units, primitive.m_Start );
794  bs_info[2] = _( "to " ) + formatCoord( m_units, primitive.m_End );
795  break;
796 
797  case S_ARC: // Arc with rounded ends
798  bs_info[0] = _( "Arc" );
799  bs_info[1] = _( "center " ) + formatCoord( m_units, primitive.m_Start );// Center
800  bs_info[2] = _( "start " ) + formatCoord( m_units, primitive.m_End ); // Start point
801  bs_info[3] = wxString::Format( _( "angle %s" ), FMT_ANGLE( primitive.m_ArcAngle ) );
802  break;
803 
804  case S_CIRCLE: // ring or circle
805  if( primitive.m_Thickness )
806  bs_info[0] = _( "ring" );
807  else
808  bs_info[0] = _( "circle" );
809 
810  bs_info[1] = formatCoord( m_units, primitive.m_Start );
811  bs_info[2] = wxString::Format( _( "radius %s" ),
812  MessageTextFromValue( m_units, primitive.m_Radius, true ) );
813  break;
814 
815  case S_POLYGON: // polygon
816  bs_info[0] = "Polygon";
817  bs_info[1] = wxString::Format( _( "corners count %d" ), (int) primitive.m_Poly.size() );
818  break;
819 
820  default:
821  bs_info[0] = "Unknown primitive";
822  break;
823  }
824 
825  long tmp = m_listCtrlPrimitives->InsertItem(ii, bs_info[0]);
826  m_listCtrlPrimitives->SetItemData(tmp, ii);
827 
828  for( int jj = 0, col = 0; jj < 5; ++jj )
829  {
830  m_listCtrlPrimitives->SetItem(tmp, col++, bs_info[jj]);
831  }
832  }
833 
834  // Now columns are filled, ensure correct width of columns
835  for( unsigned ii = 0; ii < 5; ++ii )
836  m_listCtrlPrimitives->SetColumnWidth( ii, wxLIST_AUTOSIZE );
837 }
wxPoint m_Start
angle of an arc, from its starting point, in 0.1 deg
Definition: class_pad.h:100
polygon (not yet used for tracks, but could be in microwave apps)
usual segment : line with rounded ends
wxString MessageTextFromValue(EDA_UNITS_T aUnits, int aValue, bool aUseMils)
Definition: base_units.cpp:125
static wxString formatCoord(EDA_UNITS_T aUnits, wxPoint aCoord)
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:98
std::vector< wxPoint > m_Poly
is also the start point of the arc
Definition: class_pad.h:102
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
wxPoint m_End
is also the center of the circle and arc
Definition: class_pad.h:101
STROKE_T m_Shape
Definition: class_pad.h:94
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:95
std::vector< PAD_CS_PRIMITIVE > m_primitives
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
EDA_UNITS_T m_units
Definition: dialog_shim.h:172
#define FMT_ANGLE
double m_ArcAngle
radius of a circle
Definition: class_pad.h:99
void DIALOG_PAD_PROPERTIES::editPrimitive ( )
private

Definition at line 1808 of file dialog_pad_properties.cpp.

References displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Shape, redraw(), S_POLYGON, DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataFromWindow(), and transferDataToPad().

Referenced by onEditPrimitive(), and onPrimitiveDClick().

1809 {
1810  long select = m_listCtrlPrimitives->GetFirstSelected();
1811 
1812  if( select < 0 )
1813  {
1814  wxMessageBox( _( "No shape selected" ) );
1815  return;
1816  }
1817 
1818  PAD_CS_PRIMITIVE& shape = m_primitives[select];
1819 
1820  if( shape.m_Shape == S_POLYGON )
1821  {
1822  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &shape );
1823 
1824  if( dlg.ShowModal() != wxID_OK )
1825  return;
1826 
1827  dlg.TransferDataFromWindow();
1828  }
1829 
1830  else
1831  {
1832  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &shape );
1833 
1834  if( dlg.ShowModal() != wxID_OK )
1835  return;
1836 
1837  dlg.TransferDataFromWindow();
1838  }
1839 
1841 
1842  if( m_canUpdate )
1843  {
1845  redraw();
1846  }
1847 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
polygon (not yet used for tracks, but could be in microwave apps)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
STROKE_T m_Shape
Definition: class_pad.h:94
a dialog to edit basic polygonal shape parameters
std::vector< PAD_CS_PRIMITIVE > m_primitives
a dialog to edit basics shapes parameters.
bool DIALOG_SHIM::Enable ( bool  enable)
overrideinherited

Definition at line 221 of file dialog_shim.cpp.

222 {
223  // so we can do logging of this state change:
224 
225 #if defined(DEBUG)
226  const char* type_id = typeid( *this ).name();
227  printf( "wxDialog %s: %s\n", type_id, enable ? "enabled" : "disabled" );
228 #endif
229 
230  return wxDialog::Enable( enable );
231 }
void DIALOG_PAD_PROPERTIES::enablePrimitivePage ( bool  aEnable)
private

enable (or disable) the primitive page editor

Definition at line 215 of file dialog_pad_properties.cpp.

References DIALOG_PAD_PROPERTIES_BASE::m_buttonAddShape, DIALOG_PAD_PROPERTIES_BASE::m_buttonDel, DIALOG_PAD_PROPERTIES_BASE::m_buttonDup, DIALOG_PAD_PROPERTIES_BASE::m_buttonEditShape, DIALOG_PAD_PROPERTIES_BASE::m_buttonGeometry, and DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives.

Referenced by initValues(), and OnPadShapeSelection().

216 {
217  // Enable or disable the widgets in page managing custom shape primitives
218  m_listCtrlPrimitives->Enable( aEnable );
219  m_buttonDel->Enable( aEnable );
220  m_buttonEditShape->Enable( aEnable );
221  m_buttonAddShape->Enable( aEnable );
222  m_buttonDup->Enable( aEnable );
223  m_buttonGeometry->Enable( aEnable );
224 }
void DIALOG_SHIM::EndQuasiModal ( int  retCode)
inherited

Definition at line 381 of file dialog_shim.cpp.

References DIALOG_SHIM::IsQuasiModal(), DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, and DIALOG_SHIM::Show().

Referenced by DIALOG_SHIM::OnButton(), DIALOG_LIB_EDIT_PIN_TABLE::OnClose(), DIALOG_PRINT_GENERIC::onCloseButton(), DIALOG_CHOOSE_FOOTPRINT::OnCloseTimer(), DIALOG_CHOOSE_COMPONENT::OnCloseTimer(), DIALOG_SHIM::OnCloseWindow(), DIALOG_CHOOSE_FOOTPRINT::OnUseBrowser(), DIALOG_CHOOSE_COMPONENT::OnUseBrowser(), and DIALOG_SHIM::~DIALOG_SHIM().

382 {
383  // Hook up validator and transfer data from controls handling so quasi-modal dialogs
384  // handle validation in the same way as other dialogs.
385  if( ( retCode == wxID_OK ) && ( !Validate() || !TransferDataFromWindow() ) )
386  return;
387 
388  SetReturnCode( retCode );
389 
390  if( !IsQuasiModal() )
391  {
392  wxFAIL_MSG( wxT( "either DIALOG_SHIM::EndQuasiModal called twice or ShowQuasiModal wasn't called" ) );
393  return;
394  }
395 
396  if( m_qmodal_loop )
397  {
398  if( m_qmodal_loop->IsRunning() )
399  m_qmodal_loop->Exit( 0 );
400  else
401  m_qmodal_loop->ScheduleExit( 0 );
402 
403  m_qmodal_loop = NULL;
404  }
405 
408 
409  Show( false );
410 }
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:182
bool IsQuasiModal()
Definition: dialog_shim.h:124
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:184
void DIALOG_SHIM::FinishDialogSettings ( )
protectedinherited

In all dialogs, we must call the same functions to fix minimal dlg size, the default position and perhaps some others to fix a few issues depending on Windows Managers this helper function does these calls.

FinishDialogSettings must be called from derived classes, when all widgets are initialized, and therefore their size fixed. If TransferDataToWindow() is used to initialize widgets, at end of TransferDataToWindow, or better at end of a wxInitDialogEvent handler

In any case, the best way is to call it in a wxInitDialogEvent handler after calling TransfertDataToWindow(), which is the default wxInitDialogEvent handler wxDialog

Definition at line 120 of file dialog_shim.cpp.

References PCAD2KICAD::Center.

Referenced by DIALOG_3D_VIEW_OPTIONS::DIALOG_3D_VIEW_OPTIONS(), DIALOG_ANNOTATE::DIALOG_ANNOTATE(), DIALOG_BOM::DIALOG_BOM(), DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE(), DIALOG_DRC_CONTROL::DIALOG_DRC_CONTROL(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::DIALOG_EDIT_COMPONENT_IN_LIBRARY(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::DIALOG_EDIT_COMPONENT_IN_SCHEMATIC(), DIALOG_EDIT_COMPONENTS_LIBID::DIALOG_EDIT_COMPONENTS_LIBID(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_ENUM_PADS::DIALOG_ENUM_PADS(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), DIALOG_EXPORT_3DFILE::DIALOG_EXPORT_3DFILE(), DIALOG_EXPORT_IDF3::DIALOG_EXPORT_IDF3(), DIALOG_EXPORT_STEP::DIALOG_EXPORT_STEP(), DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST(), DIALOG_FOOTPRINTS_DISPLAY_OPTIONS::DIALOG_FOOTPRINTS_DISPLAY_OPTIONS(), DIALOG_FP_BROWSER_DISPLAY_OPTIONS::DIALOG_FP_BROWSER_DISPLAY_OPTIONS(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS(), DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG::DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG(), DIALOG_IMAGE_EDITOR::DIALOG_IMAGE_EDITOR(), DIALOG_KEEPOUT_AREA_PROPERTIES::DIALOG_KEEPOUT_AREA_PROPERTIES(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_LIB_NEW_COMPONENT::DIALOG_LIB_NEW_COMPONENT(), DIALOG_LIST_HOTKEYS::DIALOG_LIST_HOTKEYS(), DIALOG_MOVE_EXACT::DIALOG_MOVE_EXACT(), DIALOG_NETLIST::DIALOG_NETLIST(), DIALOG_NON_COPPER_ZONES_EDITOR::DIALOG_NON_COPPER_ZONES_EDITOR(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES(), DIALOG_PLOT_SCHEMATIC::DIALOG_PLOT_SCHEMATIC(), DIALOG_POSITION_RELATIVE::DIALOG_POSITION_RELATIVE(), DIALOG_PRINT_GENERIC::DIALOG_PRINT_GENERIC(), DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER(), DIALOG_PUSH_PAD_PROPERTIES::DIALOG_PUSH_PAD_PROPERTIES(), DIALOG_SCH_EDIT_SHEET_PIN::DIALOG_SCH_EDIT_SHEET_PIN(), DIALOG_SCH_SHEET_PROPS::DIALOG_SCH_SHEET_PROPS(), DIALOG_SELECT_NET_FROM_LIST::DIALOG_SELECT_NET_FROM_LIST(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_SWAP_LAYERS::DIALOG_SWAP_LAYERS(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_TRACK_VIA_SIZE::DIALOG_TRACK_VIA_SIZE(), DIALOG_UPDATE_PCB::DIALOG_UPDATE_PCB(), PAGED_DIALOG::finishInitialization(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EDIT_LIBRARY_TABLES::InstallPanel(), NETLIST_DIALOG::NETLIST_DIALOG(), DIALOG_GRAPHIC_ITEM_PROPERTIES::OnInitDlg(), DIALOG_SIM_SETTINGS::onInitDlg(), DIALOG_SPICE_MODEL::onInitDlg(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnInitDlg(), DIALOG_SIGNAL_LIST::TransferDataToWindow(), DIALOG_UPDATE_FIELDS::TransferDataToWindow(), and DIALOG_COLOR_PICKER::TransferDataToWindow().

121 {
122  // must be called from the constructor of derived classes,
123  // when all widgets are initialized, and therefore their size fixed
124 
125  // SetSizeHints fixes the minimal size of sizers in the dialog
126  // (SetSizeHints calls Fit(), so no need to call it)
127  GetSizer()->SetSizeHints( this );
128 
129  // the default position, when calling the first time the dlg
130  Center();
131 }
int DIALOG_SHIM::HorizPixelsFromDU ( int  x)
protectedinherited

Convert an integer number of dialog units to pixels, horizontally.

See SetSizeInDU or wxDialog documentation for more information.

Definition at line 141 of file dialog_shim.cpp.

Referenced by DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), and DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT().

142 {
143  wxSize sz( x, 0 );
144  return ConvertDialogToPixels( sz ).x;
145 }
void DIALOG_PAD_PROPERTIES::initValues ( )
private

Definition at line 529 of file dialog_pad_properties.cpp.

References PNS::angle(), B_Adhes, B_Cu, B_Mask, B_Paste, B_SilkS, CHOICE_SHAPE_CIRCLE, CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR, CHOICE_SHAPE_CUSTOM_RECT_ANCHOR, CHOICE_SHAPE_OVAL, CHOICE_SHAPE_RECT, CHOICE_SHAPE_ROUNDRECT, CHOICE_SHAPE_TRAPEZOID, CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL, DEGREES, displayPrimitivesList(), Dwgs_User, Eco1_User, Eco2_User, UNIT_BINDER::Enable(), enablePrimitivePage(), F_Adhes, F_Cu, F_Mask, F_Paste, F_SilkS, FlipLayerMask(), D_PAD::FlipPrimitives(), FRAME_PCB, D_PAD::GetAnchorPadShape(), D_PAD::GetAttribute(), D_PAD::GetCustomShapeInZoneOpt(), D_PAD::GetDelta(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), BOARD::GetLayerName(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetLocalSolderPasteMargin(), D_PAD::GetLocalSolderPasteMarginRatio(), D_PAD::GetName(), BOARD_CONNECTED_ITEM::GetNetCode(), D_PAD::GetOffset(), MODULE::GetOrientation(), D_PAD::GetOrientation(), D_PAD::GetPadToDieLength(), D_PAD::GetParent(), D_PAD::GetPosition(), D_PAD::GetPrimitives(), MODULE::GetReference(), D_PAD::GetShape(), D_PAD::GetSize(), D_PAD::GetThermalGap(), D_PAD::GetThermalWidth(), MODULE::GetValue(), D_PAD::GetZoneConnection(), D_PAD::IsAperturePad(), D_PAD::IsFlipped(), MODULE::IsFlipped(), EDA_BASE_FRAME::IsType(), m_board, m_canEditNetName, m_clearance, m_currentPad, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_FlippedWarningSizer, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeCtrl, m_holeX, m_holeY, m_isFlipped, m_maskClearance, m_offsetX, m_offsetY, DIALOG_PAD_PROPERTIES_BASE::m_orientation, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerDraft, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO1, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO2, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCu, DIALOG_PAD_PROPERTIES_BASE::m_PadNameText, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, DIALOG_PAD_PROPERTIES_BASE::m_PadNumText, DIALOG_PAD_PROPERTIES_BASE::m_PadShape, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, m_parent, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine1, DIALOG_PAD_PROPERTIES_BASE::m_parentInfoLine2, m_pasteClearance, DIALOG_PAD_PROPERTIES_BASE::m_pasteClearanceCtrl, m_posX, m_posY, m_primitives, DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel, m_sizeX, m_sizeY, DIALOG_PAD_PROPERTIES_BASE::m_SolderPasteMarginRatioCtrl, m_spokeWidth, m_thermalGap, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisCtrl, m_trapDelta, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionChoice, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionCustom, DIALOG_PAD_PROPERTIES_BASE::m_ZoneCustomPadShape, NORMALIZE_ANGLE_180(), OnDrillShapeSelected(), OnPadShapeSelection(), PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_OBLONG, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, PAD_ZONE_CONN_FULL, PAD_ZONE_CONN_INHERITED, PAD_ZONE_CONN_NONE, PAD_ZONE_CONN_THERMAL, D_PAD::SetDelta(), D_PAD::SetLayerSet(), D_PAD::SetOffset(), D_PAD::SetOrientation(), setPadLayersList(), NET_SELECTOR::SetSelectedNetcode(), TEXT_CTRL_EVAL::SetValue(), UNIT_BINDER::SetValue(), StringFromValue(), updateRoundRectCornerValues(), wxPoint::x, and wxPoint::y.

Referenced by DIALOG_PAD_PROPERTIES().

530 {
531  wxString msg;
532  double angle;
533 
534  // Disable pad net name wxTextCtrl if the caller is the footprint editor
535  // because nets are living only in the board managed by the board editor
537 
538 
539  // Setup layers names from board
540  // Should be made first, before calling m_rbCopperLayersSel->SetSelection()
541  m_rbCopperLayersSel->SetString( 0, m_board->GetLayerName( F_Cu ) );
542  m_rbCopperLayersSel->SetString( 1, m_board->GetLayerName( B_Cu ) );
543 
544  m_PadLayerAdhCmp->SetLabel( m_board->GetLayerName( F_Adhes ) );
545  m_PadLayerAdhCu->SetLabel( m_board->GetLayerName( B_Adhes ) );
547  m_PadLayerPateCu->SetLabel( m_board->GetLayerName( B_Paste ) );
549  m_PadLayerSilkCu->SetLabel( m_board->GetLayerName( B_SilkS ) );
550  m_PadLayerMaskCmp->SetLabel( m_board->GetLayerName( F_Mask ) );
551  m_PadLayerMaskCu->SetLabel( m_board->GetLayerName( B_Mask ) );
552  m_PadLayerECO1->SetLabel( m_board->GetLayerName( Eco1_User ) );
553  m_PadLayerECO2->SetLabel( m_board->GetLayerName( Eco2_User ) );
555 
556  m_isFlipped = false;
557 
558  if( m_currentPad )
559  {
561 
562  // Diplay parent footprint info
563  MODULE* footprint = m_currentPad->GetParent();
564  wxString msg1, msg2;
565 
566  if( footprint )
567  {
568  wxString side = footprint->IsFlipped() ? _( "back side (mirrored)" ) : _( "front side" );
569  msg1.Printf( _("Footprint %s (%s),"), footprint->GetReference(), footprint->GetValue() );
570  msg2.Printf( _("%s, rotated %.1f deg"), side, footprint->GetOrientation() / 10.0 );
571  }
572 
573  m_parentInfoLine1->SetLabel( msg1 );
574  m_parentInfoLine2->SetLabel( msg2 );
575  }
576 
577  if( m_isFlipped )
578  {
579  wxPoint pt = m_dummyPad->GetOffset();
580  pt.y = -pt.y;
581  m_dummyPad->SetOffset( pt );
582 
583  wxSize sz = m_dummyPad->GetDelta();
584  sz.y = -sz.y;
585  m_dummyPad->SetDelta( sz );
586 
587  // flip pad's layers
589 
590  // flip custom pad shapes
592  }
593 
595 
597 
598  m_PadNumCtrl->SetValue( m_dummyPad->GetName() );
600 
601  // Display current pad parameters units:
604 
607 
610 
613 
614  if( m_dummyPad->GetDelta().x )
615  {
617  m_trapAxisCtrl->SetSelection( 0 );
618  }
619  else
620  {
622  m_trapAxisCtrl->SetSelection( 1 );
623  }
624 
626 
632 
633  // Prefer "-0" to "0" for normally negative values
635  m_pasteClearanceCtrl->SetValue( wxT( "-" ) + m_pasteClearanceCtrl->GetValue() );
636 
637  msg.Printf( wxT( "%f" ), m_dummyPad->GetLocalSolderPasteMarginRatio() * 100.0 );
638 
639  if( m_dummyPad->GetLocalSolderPasteMarginRatio() == 0.0 && msg[0] == '0' )
640  // Sometimes Printf adds a sign if the value is small
641  m_SolderPasteMarginRatioCtrl->SetValue( wxT( "-" ) + msg );
642  else
644 
645  switch( m_dummyPad->GetZoneConnection() )
646  {
647  default:
649  m_ZoneConnectionChoice->SetSelection( 0 );
650  m_ZoneConnectionCustom->SetSelection( 0 );
651  break;
652 
653  case PAD_ZONE_CONN_FULL:
654  m_ZoneConnectionChoice->SetSelection( 1 );
655  m_ZoneConnectionCustom->SetSelection( 1 );
656  break;
657 
659  m_ZoneConnectionChoice->SetSelection( 2 );
660  m_ZoneConnectionCustom->SetSelection( 0 );
661  break;
662 
663  case PAD_ZONE_CONN_NONE:
664  m_ZoneConnectionChoice->SetSelection( 3 );
665  m_ZoneConnectionCustom->SetSelection( 0 );
666  break;
667  }
668 
670  m_ZoneCustomPadShape->SetSelection( 1 );
671  else
672  m_ZoneCustomPadShape->SetSelection( 0 );
673 
674  if( m_currentPad )
675  {
676  angle = m_currentPad->GetOrientation();
677  MODULE* footprint = m_currentPad->GetParent();
678 
679  if( footprint )
680  angle -= footprint->GetOrientation();
681 
682  if( m_isFlipped )
683  angle = -angle;
684 
685  m_dummyPad->SetOrientation( angle );
686  }
687 
688  angle = m_dummyPad->GetOrientation();
689 
690  NORMALIZE_ANGLE_180( angle ); // ? normalizing is in D_PAD::SetOrientation()
691 
692  // Set layers used by this pad: :
694 
695  // Pad Orient
696  // Note: use ChangeValue() instead of SetValue() so that we don't generate events
697  m_orientation->ChangeValue( StringFromValue( DEGREES, angle ) );
698 
699  switch( m_dummyPad->GetShape() )
700  {
701  default:
702  case PAD_SHAPE_CIRCLE: m_PadShape->SetSelection( CHOICE_SHAPE_CIRCLE ); break;
703  case PAD_SHAPE_OVAL: m_PadShape->SetSelection( CHOICE_SHAPE_OVAL ); break;
704  case PAD_SHAPE_RECT: m_PadShape->SetSelection( CHOICE_SHAPE_RECT ); break;
705  case PAD_SHAPE_TRAPEZOID: m_PadShape->SetSelection( CHOICE_SHAPE_TRAPEZOID ); break;
706  case PAD_SHAPE_ROUNDRECT: m_PadShape->SetSelection( CHOICE_SHAPE_ROUNDRECT ); break;
707 
708  case PAD_SHAPE_CUSTOM:
711  else
713  break;
714  }
715 
717 
718  // Type of pad selection
720  {
721  m_PadType->SetSelection( 4 );
722  }
723  else
724  {
725  switch( m_dummyPad->GetAttribute() )
726  {
727  case PAD_ATTRIB_STANDARD: m_PadType->SetSelection( 0 ); break;
728  case PAD_ATTRIB_SMD: m_PadType->SetSelection( 1 ); break;
729  case PAD_ATTRIB_CONN: m_PadType->SetSelection( 2 ); break;
730  case PAD_ATTRIB_HOLE_NOT_PLATED: m_PadType->SetSelection( 3 ); break;
731  }
732  }
733 
734  // Disable Pad name,and pad to die length for NPTH pads (mechanical pads)
736 
737  m_PadNumText->Enable( enable );
738  m_PadNumCtrl->Enable( enable );
739  m_PadNameText->Enable( enable && m_canEditNetName && m_currentPad );
740  m_PadNetSelector->Enable( enable && m_canEditNetName && m_currentPad );
741  m_padToDie.Enable( enable );
742 
744  m_holeShapeCtrl->SetSelection( 0 );
745  else
746  m_holeShapeCtrl->SetSelection( 1 );
747 
748  // Update some dialog widgets state (Enable/disable options):
749  wxCommandEvent cmd_event;
751  OnDrillShapeSelected( cmd_event );
752  OnPadShapeSelection( cmd_event );
754 
755  // Update basic shapes list
757 }
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:226
LSET FlipLayerMask(LSET aMask, int aCopperLayersCount)
Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask, paste, solder layers are swapped internal layers are flipped only if the copper layers count is known.
Definition: lset.cpp:518
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:336
bool IsAperturePad() const
Definition: class_pad.h:409
void enablePrimitivePage(bool aEnable)
enable (or disable) the primitive page editor
void FlipPrimitives()
Flip the basic shapes, in custom pads.
Definition: class_pad.cpp:451
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
int GetPadToDieLength() const
Definition: class_pad.h:412
void setPadLayersList(LSET layer_mask)
Function setPadLayersList updates the CheckBox states in pad layers list,.
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:414
MODULE * GetParent() const
Definition: class_pad.h:162
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
const wxString & GetValue() const
Function GetValue.
Definition: class_module.h:497
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
void NORMALIZE_ANGLE_180(T &Angle)
Definition: trigo.h:335
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
void SetValue(const wxString &aValue) override
Set a new value in evaluator buffer, and display it in the wxTextCtrl.
Pads are not covered.
Definition: zones.h:52
double GetOrientation() const
Definition: class_module.h:189
bool IsFlipped() const
function IsFlipped
Definition: class_module.h:259
ZoneConnection GetZoneConnection() const
Definition: class_pad.cpp:687
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
void SetSelectedNetcode(int aNetcode)
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Function GetLayerName returns the name of a layer given by aLayer.
int GetThermalWidth() const
Definition: class_pad.cpp:698
void OnPadShapeSelection(wxCommandEvent &event) override
int GetThermalGap() const
Definition: class_pad.cpp:709
const wxSize & GetSize() const
Definition: class_pad.h:269
const wxString & GetName() const
Definition: class_pad.h:190
void OnDrillShapeSelected(wxCommandEvent &event) override
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:420
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:62
bool IsFlipped() const
Definition: class_pad.cpp:134
int GetLocalClearance() const
Definition: class_pad.h:417
double GetLocalSolderPasteMarginRatio() const
Definition: class_pad.h:423
int GetNetCode() const
Function GetNetCode.
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:401
std::vector< PAD_CS_PRIMITIVE > m_primitives
const wxString & GetReference() const
Function GetReference.
Definition: class_module.h:463
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:232
virtual void SetValue(int aValue)
Function SetValue Sets new value (in Internal Units) for the text field, taking care of units convers...
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
const wxSize & GetDelta() const
Definition: class_pad.h:272
Usual pad.
Definition: pad_shapes.h:60
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:418
wxString StringFromValue(EDA_UNITS_T aUnits, int aValue, bool aAddUnitSymbol, bool aUseMils)
Function StringFromValue returns the string from aValue according to units (inch, mm ...
Definition: base_units.cpp:210
bool IsType(FRAME_T aType) const
const wxPoint GetPosition() const override
Definition: class_pad.h:220
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:277
Use thermal relief for pads.
Definition: zones.h:53
const wxPoint & GetOffset() const
Definition: class_pad.h:278
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.
void SetDelta(const wxSize &aSize)
Definition: class_pad.h:271
pads are covered by copper
Definition: zones.h:54
KIWAY& KIWAY_HOLDER::Kiway ( ) const
inlineinherited

Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in.

A KIWAY_HOLDER is not necessarily a KIWAY_PLAYER.

Definition at line 60 of file kiway_player.h.

References KIWAY_HOLDER::GetUserUnits(), KIWAY_HOLDER::m_kiway, KIWAY_HOLDER::Prj(), KIWAY_HOLDER::SetKiway(), and VTBL_ENTRY.

Referenced by TREEPROJECT_ITEM::Activate(), PCB_BASE_EDIT_FRAME::AddLibrary(), SCH_EDIT_FRAME::AppendSchematic(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), DIALOG_CHOOSE_FOOTPRINT::ConstructRightPanel(), DIALOG_CHOOSE_COMPONENT::ConstructRightPanel(), PCB_BASE_FRAME::CreateAndShow3D_Frame(), CVPCB_MAINFRAME::CreateScreenCmp(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), DIALOG_SHIM::DIALOG_SHIM(), FIELDS_GRID_TRICKS::doPopupSelection(), FIELDS_EDITOR_GRID_TRICKS::doPopupSelection(), EDIT_TOOL::editFootprintInFpEditor(), SCH_EDIT_FRAME::EditSheet(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), LIB_MANAGER::GetBufferedPart(), LIB_MANAGER::getLibraryBuffer(), FOOTPRINT_EDIT_FRAME::GetPlotSettings(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::KiwayMailIn(), KIWAY_PLAYER::language_change(), KICAD_MANAGER_FRAME::language_change(), CVPCB_MAINFRAME::LoadFootprintFiles(), KICAD_MANAGER_FRAME::LoadProject(), TEXT_BUTTON_SYMBOL_CHOOSER::OnButtonClick(), TEXT_BUTTON_FP_CHOOSER::OnButtonClick(), KICAD_MANAGER_FRAME::OnCloseWindow(), CVPCB_MAINFRAME::OnEditFootprintLibraryTable(), KICAD_MANAGER_FRAME::OnEditFpLibTable(), SCH_BASE_FRAME::OnEditSymbolLibTable(), KICAD_MANAGER_FRAME::OnEditSymLibTable(), KICAD_MANAGER_FRAME::OnImportEagleFiles(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), SCH_EDIT_FRAME::OnLeftClick(), SCH_BASE_FRAME::OnOpenLibraryViewer(), KICAD_MANAGER_FRAME::OnRunPcbFpEditor(), KICAD_MANAGER_FRAME::OnRunSchLibEditor(), SCH_EDIT_FRAME::OnSimulate(), DIALOG_EDIT_ONE_FIELD::OnTextValueSelectButtonClick(), FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard(), FOOTPRINT_EDIT_FRAME::OnUpdateLoadModuleFromBoard(), SCH_EDIT_FRAME::OpenProjectFiles(), KIWAY_HOLDER::Prj(), PCB_EDIT_FRAME::Process_Config(), PCB_EDIT_FRAME::Process_Special_Functions(), FOOTPRINT_EDIT_FRAME::ProcessPreferences(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), FOOTPRINT_WIZARD_FRAME::ReCreateVToolbar(), LIB_EDIT_FRAME::refreshSchematic(), KICAD_MANAGER_FRAME::RunEeschema(), KICAD_MANAGER_FRAME::RunPcbNew(), SCH_EDIT_FRAME::SaveEEFile(), CVPCB_MAINFRAME::SaveFootprintAssociation(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_BASE_FRAME::SelectComponentFromLibBrowser(), SCH_EDIT_FRAME::SendCrossProbeNetName(), PCB_EDIT_FRAME::SendCrossProbeNetName(), CVPCB_MAINFRAME::SendMessageToEESCHEMA(), PCB_EDIT_FRAME::SendMessageToEESCHEMA(), SCH_EDIT_FRAME::SendMessageToPCBNEW(), SCH_EDIT_FRAME::sendNetlist(), FOOTPRINT_EDIT_FRAME::SetPlotSettings(), FOOTPRINT_VIEWER_FRAME::Show3D_Frame(), FOOTPRINT_WIZARD_FRAME::Show3D_Frame(), EDA_BASE_FRAME::ShowPreferences(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::UpdatePart(), and DIALOG_EXCHANGE_FOOTPRINTS::ViewAndSelectFootprint().

61  {
62  wxASSERT( m_kiway ); // smoke out bugs in Debug build, then Release runs fine.
63  return *m_kiway;
64  }
KIWAY * m_kiway
Definition: kiway_player.h:94
void DIALOG_PAD_PROPERTIES::onAddPrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1900 of file dialog_pad_properties.cpp.

References DIM, displayPrimitivesList(), m_canUpdate, m_dummyPad, m_parent, m_primitives, redraw(), S_ARC, S_CIRCLE, S_POLYGON, S_SEGMENT, and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

1901 {
1902  // Ask user for shape type
1903  wxString shapelist[] = { _( "Segment" ), _( "Arc" ), _( "Ring/Circle" ), _( "Polygon" ) };
1904 
1905  int type = wxGetSingleChoiceIndex( _( "Shape type:" ), _( "Add Primitive" ),
1906  DIM( shapelist ), shapelist, 0, this );
1907 
1908  STROKE_T listtype[] = { S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON };
1909 
1910  PAD_CS_PRIMITIVE primitive( listtype[type] );
1911 
1912  if( listtype[type] == S_POLYGON )
1913  {
1914  DIALOG_PAD_PRIMITIVE_POLY_PROPS dlg( this, m_parent, &primitive );
1915 
1916  if( dlg.ShowModal() != wxID_OK )
1917  return;
1918  }
1919  else
1920  {
1921  DIALOG_PAD_PRIMITIVES_PROPERTIES dlg( this, m_parent, &primitive );
1922 
1923  if( dlg.ShowModal() != wxID_OK )
1924  return;
1925  }
1926 
1927  m_primitives.push_back( primitive );
1928 
1930 
1931  if( m_canUpdate )
1932  {
1934  redraw();
1935  }
1936 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
polygon (not yet used for tracks, but could be in microwave apps)
usual segment : line with rounded ends
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
STROKE_T
Enum STROKE_T is the set of shapes for segments (graphic segments and tracks) which are often in the ...
a dialog to edit basic polygonal shape parameters
std::vector< PAD_CS_PRIMITIVE > m_primitives
a dialog to edit basics shapes parameters.
void DIALOG_PAD_PROPERTIES::OnCancel ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 203 of file dialog_pad_properties.cpp.

References EDA_DRAW_FRAME::IsGalCanvasActive(), DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, and EDA_DRAW_PANEL_GAL::StopDrawing().

204 {
205  // Mandatory to avoid m_panelShowPadGal trying to draw something
206  // in a non valid context during closing process:
207  if( m_parent->IsGalCanvasActive() )
209 
210  // Now call default handler for wxID_CANCEL command event
211  event.Skip();
212 }
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:911
void StopDrawing()
Function StopDrawing() Prevents the GAL canvas from further drawing till it is recreated or StartDraw...
void DIALOG_PAD_PROPERTIES::onChangePadMode ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 846 of file dialog_pad_properties.cpp.

References KIGFX::VIEW::GetPainter(), KIGFX::PAINTER::GetSettings(), EDA_DRAW_PANEL_GAL::GetView(), EDA_DRAW_FRAME::IsGalCanvasActive(), LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PADS_TH, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, m_sketchPreview, redraw(), KIGFX::PCB_RENDER_SETTINGS::SetSketchMode(), and KIGFX::PCB_RENDER_SETTINGS::SetSketchModeGraphicItems().

Referenced by OnUpdateUINonCopperWarning().

847 {
848  m_sketchPreview = m_cbShowPadOutline->GetValue();
849 
850  if( m_parent->IsGalCanvasActive() )
851  {
853 
854  // fix the pad render mode (filled/not filled)
855  KIGFX::PCB_RENDER_SETTINGS* settings =
856  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
857 
862  }
863 
864  redraw();
865 }
multilayer pads, usually with holes
KIGFX::VIEW * GetView() const
Function GetView() Returns a pointer to the VIEW instance used in the panel.
smd pads, back layer
void SetSketchModeGraphicItems(bool aEnabled)
Turns on/off sketch mode for graphic items (DRAWSEGMENTs, texts).
Definition: pcb_painter.h:134
Class PCB_RENDER_SETTINGS Stores PCB specific render settings.
Definition: pcb_painter.h:62
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:911
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
smd pads, front layer
void SetSketchMode(int aItemLayer, bool aEnabled)
Function SetSketchMode Turns on/off sketch mode for given item layer.
Definition: pcb_painter.h:114
Class VIEW.
Definition: view.h:61
void DIALOG_PAD_PROPERTIES::onCornerRadiusChange ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 473 of file dialog_pad_properties.cpp.

References Format(), D_PAD::GetRoundRectRadiusRatio(), D_PAD::GetShape(), m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerRadius, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, PAD_SHAPE_ROUNDRECT, redraw(), D_PAD::SetRoundRectCornerRadius(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

474 {
476  return;
477 
478  wxString value = m_tcCornerRadius->GetValue();
479  double rrRadius;
480 
481  if( value.ToDouble( &rrRadius ) )
482  {
483  if( rrRadius < 0.0 )
484  {
485  rrRadius = 0.0;
486  m_tcCornerRadius->ChangeValue( "0.0" );
487  }
488 
490  m_dummyPad->SetRoundRectCornerRadius( Millimeter2iu( rrRadius ) );
491 
492  auto ratio = wxString::Format( "%.1f", m_dummyPad->GetRoundRectRadiusRatio() * 100 );
493  m_tcCornerSizeRatio->ChangeValue( ratio );
494  redraw();
495  }
496 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
void SetRoundRectCornerRadius(double aRadius)
Set the rounded rectangle radius ratio based on a given radius.
Definition: class_pad.cpp:207
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:634
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
void DIALOG_PAD_PROPERTIES::onCornerSizePercentChange ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 499 of file dialog_pad_properties.cpp.

References UNIT_BINDER::ChangeValue(), D_PAD::GetRoundRectCornerRadius(), D_PAD::GetShape(), m_cornerRadius, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, PAD_SHAPE_ROUNDRECT, redraw(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

500 {
502  return;
503 
504  wxString value = m_tcCornerSizeRatio->GetValue();
505  double rrRadiusRatioPercent;
506 
507  if( value.ToDouble( &rrRadiusRatioPercent ) )
508  {
509  // Clamp rrRadiusRatioPercent to acceptable value (0.0 to 50.0)
510  if( rrRadiusRatioPercent < 0.0 )
511  {
512  rrRadiusRatioPercent = 0.0;
513  m_tcCornerSizeRatio->ChangeValue( "0.0" );
514  }
515 
516  if( rrRadiusRatioPercent > 50.0 )
517  {
518  rrRadiusRatioPercent = 0.5;
519  m_tcCornerSizeRatio->ChangeValue( "50.0" );
520  }
521 
524  redraw();
525  }
526 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
int GetRoundRectCornerRadius() const
Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.
Definition: class_pad.h:531
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
virtual void ChangeValue(int aValue)
Function ChangeValue Changes the value (in Internal Units) for the text field, taking care of units c...
void DIALOG_PAD_PROPERTIES::onDeletePrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Event handlers of basic shapes list panel.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1872 of file dialog_pad_properties.cpp.

References displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_primitives, redraw(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

1873 {
1874  long select = m_listCtrlPrimitives->GetFirstSelected();
1875 
1876  if( select < 0 )
1877  return;
1878 
1879  // Multiple selections are allowed. get them and remove corresponding shapes
1880  std::vector<long> indexes;
1881  indexes.push_back( select );
1882 
1883  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1884  indexes.push_back( select );
1885 
1886  // Erase all select shapes
1887  for( unsigned ii = indexes.size(); ii > 0; --ii )
1888  m_primitives.erase( m_primitives.begin() + indexes[ii-1] );
1889 
1891 
1892  if( m_canUpdate )
1893  {
1895  redraw();
1896  }
1897 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
std::vector< PAD_CS_PRIMITIVE > m_primitives
void DIALOG_PAD_PROPERTIES::OnDrillShapeSelected ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 960 of file dialog_pad_properties.cpp.

References m_dummyPad, redraw(), and transferDataToPad().

Referenced by initValues(), and OnUpdateUINonCopperWarning().

961 {
963  redraw();
964 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
void DIALOG_PAD_PROPERTIES::onDuplicatePrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1974 of file dialog_pad_properties.cpp.

References displayPrimitivesList(), DIALOG_PAD_PRIMITIVES_TRANSFORM::GetDuplicateCount(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, redraw(), transferDataToPad(), and DIALOG_PAD_PRIMITIVES_TRANSFORM::Transform().

Referenced by OnUpdateUINonCopperWarning().

1975 {
1976  long select = m_listCtrlPrimitives->GetFirstSelected();
1977 
1978  if( select < 0 )
1979  {
1980  wxMessageBox( _( "No shape selected" ) );
1981  return;
1982  }
1983 
1984  // Multiple selections are allowed. Build selected shapes list
1985  std::vector<PAD_CS_PRIMITIVE*> shapeList;
1986  shapeList.push_back( &m_primitives[select] );
1987 
1988  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1989  shapeList.push_back( &m_primitives[select] );
1990 
1991  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, true );
1992 
1993  if( dlg.ShowModal() != wxID_OK )
1994  return;
1995 
1996  // Transfer new settings
1997  // save duplicates to a separate vector to avoid m_primitives reallocation,
1998  // as shapeList contains pointers to its elements
1999  std::vector<PAD_CS_PRIMITIVE> duplicates;
2000  dlg.Transform( &duplicates, dlg.GetDuplicateCount() );
2001  std::move( duplicates.begin(), duplicates.end(), std::back_inserter( m_primitives ) );
2002 
2004 
2005  if( m_canUpdate )
2006  {
2008  redraw();
2009  }
2010 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
std::vector< PAD_CS_PRIMITIVE > m_primitives
A dialog to apply geometry transforms to a shape or set of shapes (move, rotate around origin...
void DIALOG_PAD_PROPERTIES::onEditPrimitive ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1866 of file dialog_pad_properties.cpp.

References editPrimitive().

Referenced by OnUpdateUINonCopperWarning().

1867 {
1868  editPrimitive();
1869 }
void DIALOG_PAD_PROPERTIES::onGeometryTransform ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1939 of file dialog_pad_properties.cpp.

References displayPrimitivesList(), m_canUpdate, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, m_parent, m_primitives, redraw(), transferDataToPad(), and DIALOG_PAD_PRIMITIVES_TRANSFORM::Transform().

Referenced by OnUpdateUINonCopperWarning().

1940 {
1941  long select = m_listCtrlPrimitives->GetFirstSelected();
1942 
1943  if( select < 0 )
1944  {
1945  wxMessageBox( _( "No shape selected" ) );
1946  return;
1947  }
1948 
1949  // Multiple selections are allowed. Build selected shapes list
1950  std::vector<PAD_CS_PRIMITIVE*> shapeList;
1951  shapeList.push_back( &m_primitives[select] );
1952 
1953  while( ( select = m_listCtrlPrimitives->GetNextSelected( select ) ) >= 0 )
1954  shapeList.push_back( &m_primitives[select] );
1955 
1956  DIALOG_PAD_PRIMITIVES_TRANSFORM dlg( this, m_parent, shapeList, false );
1957 
1958  if( dlg.ShowModal() != wxID_OK )
1959  return;
1960 
1961  // Transfert new settings:
1962  dlg.Transform();
1963 
1965 
1966  if( m_canUpdate )
1967  {
1969  redraw();
1970  }
1971 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
std::vector< PAD_CS_PRIMITIVE > m_primitives
A dialog to apply geometry transforms to a shape or set of shapes (move, rotate around origin...
void DIALOG_PAD_PROPERTIES::OnInitDialog ( wxInitDialogEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 193 of file dialog_pad_properties.cpp.

References m_selectedColor, and redraw().

194 {
195  m_selectedColor = COLOR4D( 1.0, 1.0, 1.0, 0.7 );
196 
197  // Needed on some WM to be sure the pad is redrawn according to the final size
198  // of the canvas, with the right zoom factor
199  redraw();
200 }
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void DIALOG_PAD_PROPERTIES::OnPadShapeSelection ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 868 of file dialog_pad_properties.cpp.

References CHOICE_SHAPE_CIRCLE, CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR, CHOICE_SHAPE_CUSTOM_RECT_ANCHOR, CHOICE_SHAPE_OVAL, CHOICE_SHAPE_RECT, CHOICE_SHAPE_ROUNDRECT, CHOICE_SHAPE_TRAPEZOID, UNIT_BINDER::Enable(), enablePrimitivePage(), Format(), D_PAD::GetRoundRectRadiusRatio(), m_cornerRadius, m_dummyPad, m_offsetX, m_offsetY, DIALOG_PAD_PROPERTIES_BASE::m_PadShape, DIALOG_PAD_PROPERTIES_BASE::m_sbSizerCustomShapedZonesSettings, DIALOG_PAD_PROPERTIES_BASE::m_sbSizerZonesSettings, m_sizeY, m_spokeWidth, DIALOG_PAD_PROPERTIES_BASE::m_staticTextCornerSizeRatio, DIALOG_PAD_PROPERTIES_BASE::m_staticTextCornerSizeRatioUnit, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, m_thermalGap, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisCtrl, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisLabel, m_trapDelta, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionChoice, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionCustom, redraw(), transferDataToPad(), and updateRoundRectCornerValues().

Referenced by initValues(), and OnUpdateUINonCopperWarning().

869 {
870  bool is_custom = false;
871 
872  switch( m_PadShape->GetSelection() )
873  {
874  case CHOICE_SHAPE_CIRCLE:
875  m_trapDelta.Enable( false );
876  m_trapAxisLabel->Enable( false );
877  m_trapAxisCtrl->Enable( false );
878  m_sizeY.Enable( false );
879  m_offsetX.Enable( false );
880  m_offsetY.Enable( false );
881  break;
882 
883  case CHOICE_SHAPE_OVAL:
884  m_trapDelta.Enable( false );
885  m_trapAxisLabel->Enable( false );
886  m_trapAxisCtrl->Enable( false );
887  m_sizeY.Enable( true );
888  m_offsetX.Enable( true );
889  m_offsetY.Enable( true );
890  break;
891 
892  case CHOICE_SHAPE_RECT:
893  m_trapDelta.Enable( false );
894  m_trapAxisLabel->Enable( false );
895  m_trapAxisCtrl->Enable( false );
896  m_sizeY.Enable( true );
897  m_offsetX.Enable( true );
898  m_offsetY.Enable( true );
899  break;
900 
902  m_trapDelta.Enable( true );
903  m_trapAxisLabel->Enable( true );
904  m_trapAxisCtrl->Enable( true );
905  m_sizeY.Enable( true );
906  m_offsetX.Enable( true );
907  m_offsetY.Enable( true );
908  break;
909 
911  m_trapDelta.Enable( false );
912  m_trapAxisLabel->Enable( false );
913  m_trapAxisCtrl->Enable( false );
914  m_sizeY.Enable( true );
915  m_offsetX.Enable( true );
916  m_offsetY.Enable( true );
917  // Ensure m_tcCornerSizeRatio contains the right value:
918  m_tcCornerSizeRatio->ChangeValue( wxString::Format( "%.1f",
920  break;
921 
922  case CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR: // PAD_SHAPE_CUSTOM, circular anchor
923  case CHOICE_SHAPE_CUSTOM_RECT_ANCHOR: // PAD_SHAPE_CUSTOM, rect anchor
924  is_custom = true;
925  m_trapDelta.Enable( false );
926  m_trapAxisLabel->Enable( false );
927  m_trapAxisCtrl->Enable( false );
929  m_offsetX.Enable( false );
930  m_offsetY.Enable( false );
931  break;
932  }
933 
934  enablePrimitivePage( is_custom );
935 
936  // A few widgets are enabled only for rounded rect pads:
937  m_staticTextCornerSizeRatio->Enable( m_PadShape->GetSelection() == CHOICE_SHAPE_ROUNDRECT );
938  m_tcCornerSizeRatio->Enable( m_PadShape->GetSelection() == CHOICE_SHAPE_ROUNDRECT );
941 
942  // PAD_SHAPE_CUSTOM type has constraints for zone connection and thermal shape:
943  // only not connected or solid connection is allowed to avoid destroying the shape.
944  // Enable/disable options only available for custom shaped pads
945  m_ZoneConnectionChoice->Enable( !is_custom );
946  m_ZoneConnectionCustom->Enable( is_custom );
947  m_spokeWidth.Enable( !is_custom );
948  m_thermalGap.Enable( !is_custom );
949 
950  m_sbSizerZonesSettings->Show( !is_custom );
951  m_sbSizerCustomShapedZonesSettings->Show( is_custom );
952 
954 
956  redraw();
957 }
void enablePrimitivePage(bool aEnable)
enable (or disable) the primitive page editor
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
wxStaticBoxSizer * m_sbSizerCustomShapedZonesSettings
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:634
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.
void DIALOG_SHIM::OnPaint ( wxPaintEvent &  event)
inherited

Definition at line 283 of file dialog_shim.cpp.

References DIALOG_SHIM::m_firstPaintEvent, and DIALOG_SHIM::m_initialFocusTarget.

Referenced by DIALOG_SHIM::DIALOG_SHIM().

284 {
285  if( m_firstPaintEvent )
286  {
287 #ifdef __WXMAC__
288  fixOSXCancelButtonIssue( this );
289  selectAllInTextCtrls( GetChildren() );
290 #endif
291 
293  m_initialFocusTarget->SetFocus();
294  else
295  SetFocus(); // Focus the dialog itself
296 
297  m_firstPaintEvent = false;
298  }
299 
300  event.Skip();
301 }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:179
bool m_firstPaintEvent
Definition: dialog_shim.h:178
void DIALOG_PAD_PROPERTIES::OnPaintShowPanel ( wxPaintEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 279 of file dialog_pad_properties.cpp.

References abs, B_Cu, BLACK, DRAWSEGMENT::BuildPolyPointsList(), color, PCB_GENERAL_SETTINGS::Colors(), DARKGRAY, D_PAD::DrawShape(), PAD_CS_PRIMITIVE::ExportTo(), F_Cu, DRAWSEGMENT::GetArcEnd(), DRAWSEGMENT::GetArcStart(), D_PAD::GetAttribute(), D_PAD::GetBoundingRadius(), DRAWSEGMENT::GetCenter(), D_PAD::GetDelta(), D_PAD::GetDrillSize(), DRAWSEGMENT::GetEnd(), COLORS_DESIGN_SETTINGS::GetItemColor(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetOrientation(), D_PAD::GetPosition(), D_PAD::GetShape(), D_PAD::GetSize(), DRAWSEGMENT::GetStart(), GRArc1(), GRCircle(), GRClosedPoly(), GRCSegm(), GRFilledCircle(), GRFilledSegment(), GRLine(), GRResetPenAndBrush(), LAYER_PAD_BK, LAYER_PAD_FR, LIGHTBLUE, LIGHTGRAY, PAD_DRAWINFO::m_Color, PAD_DRAWINFO::m_Display_netname, PAD_DRAWINFO::m_Display_padnum, m_dummyPad, PAD_DRAWINFO::m_HoleColor, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, PAD_DRAWINFO::m_Offset, PAD_DRAWINFO::m_PadClearance, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPad, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Radius, m_selectedColor, PAD_CS_PRIMITIVE::m_Shape, PAD_DRAWINFO::m_ShowNotPlatedHole, PAD_DRAWINFO::m_ShowPadFilled, m_sketchPreview, PAD_CS_PRIMITIVE::m_Thickness, min, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_SHAPE_CIRCLE, DRAWSEGMENT::Rotate(), S_ARC, S_CIRCLE, S_POLYGON, S_SEGMENT, scale, and PCB_BASE_FRAME::Settings().

Referenced by OnUpdateUINonCopperWarning().

280 {
281  wxPaintDC dc( m_panelShowPad );
282  PAD_DRAWINFO drawInfo;
283 
285 
286  if( m_dummyPad->GetLayerSet()[F_Cu] )
288 
289  if( m_dummyPad->GetLayerSet()[B_Cu] )
290  color = color.LegacyMix( m_parent->Settings().Colors().GetItemColor( LAYER_PAD_BK ) );
291 
292  // What could happen: the pad color is *actually* black, or no copper was selected
293  if( color == BLACK )
294  color = LIGHTGRAY;
295 
296  drawInfo.m_Color = color;
297  drawInfo.m_HoleColor = DARKGRAY;
298  drawInfo.m_Offset = m_dummyPad->GetPosition();
299  drawInfo.m_Display_padnum = true;
300  drawInfo.m_Display_netname = true;
301  drawInfo.m_ShowPadFilled = !m_sketchPreview;
302 
304  drawInfo.m_ShowNotPlatedHole = true;
305 
306  // Shows the local pad clearance
308 
309  wxSize dc_size = dc.GetSize();
310  dc.SetDeviceOrigin( dc_size.x / 2, dc_size.y / 2 );
311 
312  // Calculate a suitable scale to fit the available draw area
313  int dim = m_dummyPad->GetBoundingRadius() *2;
314 
315  // Invalid x size. User could enter zero, or have deleted all text prior to
316  // entering a new value; this is also treated as zero. If dim is left at
317  // zero, the drawing scale is zero and we get a crash.
318  if( dim == 0 )
319  {
320  // If drill size has been set, use that. Otherwise default to 1mm.
321  dim = m_dummyPad->GetDrillSize().x;
322  if( dim == 0 )
323  dim = Millimeter2iu( 1.0 );
324  }
325 
326  if( m_dummyPad->GetLocalClearance() > 0 )
327  dim += m_dummyPad->GetLocalClearance() * 2;
328 
329  double scale = (double) dc_size.x / dim;
330 
331  // If the pad is a circle, use the x size here instead.
332  int ysize;
333 
335  ysize = m_dummyPad->GetSize().x;
336  else
337  ysize = m_dummyPad->GetSize().y;
338 
339  dim = ysize + std::abs( m_dummyPad->GetDelta().x );
340 
341  // Invalid y size. See note about x size above.
342  if( dim == 0 )
343  {
344  dim = m_dummyPad->GetDrillSize().y;
345  if( dim == 0 )
346  dim = Millimeter2iu( 0.1 );
347  }
348 
349  if( m_dummyPad->GetLocalClearance() > 0 )
350  dim += m_dummyPad->GetLocalClearance() * 2;
351 
352  double altscale = (double) dc_size.y / dim;
353  scale = std::min( scale, altscale );
354 
355  // Give a margin
356  scale *= 0.7;
357  dc.SetUserScale( scale, scale );
358 
359  GRResetPenAndBrush( &dc );
360  m_dummyPad->DrawShape( NULL, &dc, drawInfo );
361 
362  // draw selected primitives:
363  long select = m_listCtrlPrimitives->GetFirstSelected();
364 
365  while( select >= 0 )
366  {
367  PAD_CS_PRIMITIVE& primitive = m_primitives[select];
368 
369  // The best way to calculate parameters to draw a primitive is to
370  // use a dummy DRAWSEGMENT and use its methods
371  // Note: in legacy canvas, the pad has the 0,0 position
372  DRAWSEGMENT dummySegment;
373  primitive.ExportTo( &dummySegment );
374  dummySegment.Rotate( wxPoint( 0, 0), m_dummyPad->GetOrientation() );
375 
376  switch( primitive.m_Shape )
377  {
378  case S_SEGMENT: // usual segment : line with rounded ends
379  if( !m_sketchPreview )
380  GRFilledSegment( NULL, &dc, dummySegment.GetStart(), dummySegment.GetEnd(),
381  primitive.m_Thickness, m_selectedColor );
382  else
383  GRCSegm( NULL, &dc, dummySegment.GetStart(), dummySegment.GetEnd(),
384  primitive.m_Thickness, m_selectedColor );
385  break;
386 
387  case S_ARC: // Arc with rounded ends
388  if( !m_sketchPreview )
389  GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
390  dummySegment.GetCenter(), primitive.m_Thickness, m_selectedColor );
391  else
392  {
393  GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
394  dummySegment.GetCenter(), 0, m_selectedColor );
395 /* GRArc1( NULL, &dc, dummySegment.GetArcEnd(), dummySegment.GetArcStart(),
396  dummySegment.GetCenter() - primitive.m_Thickness, 0, m_selectedColor );*/
397  }
398  break;
399 
400  case S_CIRCLE: // ring or circle
401  if( primitive.m_Thickness )
402  {
403  if( !m_sketchPreview )
404  GRCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius,
405  primitive.m_Thickness, m_selectedColor );
406  else
407  {
408  GRCircle( nullptr, &dc, dummySegment.GetCenter(),
409  primitive.m_Radius + primitive.m_Thickness/2, 0, m_selectedColor );
410  GRCircle( nullptr, &dc, dummySegment.GetCenter(),
411  primitive.m_Radius - primitive.m_Thickness/2, 0, m_selectedColor );
412  }
413  }
414  else
415  {
416  if( !m_sketchPreview )
417  GRFilledCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius,
418  m_selectedColor );
419  else
420  GRCircle( nullptr, &dc, dummySegment.GetCenter(), primitive.m_Radius, 0,
421  m_selectedColor );
422  }
423  break;
424 
425  case S_POLYGON: // polygon
426  {
427  std::vector<wxPoint> poly = dummySegment.BuildPolyPointsList();
428  GRClosedPoly( nullptr, &dc, poly.size(), &poly[0], !m_sketchPreview,
430  }
431  break;
432 
433  default:
434  break;
435  }
436 
437  select = m_listCtrlPrimitives->GetNextSelected( select );
438  }
439 
440  // Draw X and Y axis. This is particularly useful to show the
441  // reference position of pads with offset and no hole, or custom pad shapes
442  const int t = 0; // line thickness
443  GRLine( nullptr, &dc, -int( dc_size.x/scale ), 0, int( dc_size.x/scale ), 0, t, LIGHTBLUE );
444  GRLine( nullptr, &dc, 0, -int( dc_size.y/scale ), 0, int( dc_size.y/scale ), t, LIGHTBLUE );
445 
446  event.Skip();
447 }
void GRResetPenAndBrush(wxDC *DC)
Definition: gr_basic.cpp:123
bool m_Display_padnum
Definition: class_pad.h:75
const std::vector< wxPoint > BuildPolyPointsList() const
Build and return the list of corners in a std::vector<wxPoint> It must be used only to convert the SH...
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
const wxPoint GetCenter() const override
Function GetCenter()
void ExportTo(DRAWSEGMENT *aTarget)
Export the PAD_CS_PRIMITIVE parameters to a DRAWSEGMENT useful to draw a primitive shape...
int color
Definition: DXF_plotter.cpp:62
polygon (not yet used for tracks, but could be in microwave apps)
void GRCSegm(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, int aPenSize, COLOR4D Color)
Definition: gr_basic.cpp:415
usual segment : line with rounded ends
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
void GRFilledCircle(EDA_RECT *ClipBox, wxDC *DC, int x, int y, int r, int width, COLOR4D Color, COLOR4D BgColor)
Definition: gr_basic.cpp:778
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
#define abs(a)
Definition: auxiliary.h:84
smd pads, back layer
void GRClosedPoly(EDA_RECT *ClipBox, wxDC *DC, int n, wxPoint Points[], bool Fill, COLOR4D Color, COLOR4D BgColor)
Function GRClosedPoly draws a closed polygon onto the drawing context aDC and optionally fills and/or...
Definition: gr_basic.cpp:711
const wxPoint & GetArcStart() const
COLOR4D GetItemColor(int aItemIdx) const
Function GetItemColor.
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:98
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
int GetBoundingRadius() const
Function GetBoundingRadius returns the radius of a minimum sized circle which fully encloses this pad...
Definition: class_pad.h:612
PCB_GENERAL_SETTINGS & Settings()
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
COLOR4D m_HoleColor
Definition: class_pad.h:70
const wxSize & GetSize() const
Definition: class_pad.h:269
bool m_ShowNotPlatedHole
Definition: class_pad.h:80
void DrawShape(EDA_RECT *aClipBox, wxDC *aDC, PAD_DRAWINFO &aDrawInfo)
Function DrawShape basic function to draw a pad.
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:285
STROKE_T m_Shape
Definition: class_pad.h:94
int m_PadClearance
Definition: class_pad.h:73
int GetLocalClearance() const
Definition: class_pad.h:417
COLORS_DESIGN_SETTINGS & Colors()
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:95
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
wxPoint m_Offset
Definition: class_pad.h:83
const int scale
smd pads, front layer
std::vector< PAD_CS_PRIMITIVE > m_primitives
void GRFilledSegment(EDA_RECT *aClipBox, wxDC *aDC, wxPoint aStart, wxPoint aEnd, int aWidth, COLOR4D aColor)
Definition: gr_basic.cpp:526
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:755
const wxPoint GetArcEnd() const
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
const wxSize & GetDelta() const
Definition: class_pad.h:272
bool m_ShowPadFilled
Definition: class_pad.h:77
COLOR4D m_Color
Definition: class_pad.h:68
Definition: colors.h:45
bool m_Display_netname
Definition: class_pad.h:76
const wxPoint GetPosition() const override
Definition: class_pad.h:220
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
#define min(a, b)
Definition: auxiliary.h:85
void GRArc1(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int xc, int yc, COLOR4D Color)
Definition: gr_basic.cpp:799
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void DIALOG_PAD_PROPERTIES::onPrimitiveDClick ( wxMouseEvent &  event)
overrideprivatevirtual

Called on a double click on the basic shapes list.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1859 of file dialog_pad_properties.cpp.

References editPrimitive().

Referenced by OnUpdateUINonCopperWarning().

1860 {
1861  editPrimitive();
1862 }
void DIALOG_PAD_PROPERTIES::OnPrimitiveSelection ( wxListEvent &  event)
overrideprivatevirtual

Called on selection/deselection of a basic shape.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1850 of file dialog_pad_properties.cpp.

References redraw().

Referenced by OnUpdateUINonCopperWarning().

1851 {
1852  // Called on a double click on the basic shapes list
1853  // To Do: highligth the primitive(s) currently selected.
1854  redraw();
1855 }
void DIALOG_PAD_PROPERTIES::OnResize ( wxSizeEvent &  event)
private

Definition at line 839 of file dialog_pad_properties.cpp.

References redraw().

Referenced by prepareCanvas().

840 {
841  redraw();
842  event.Skip();
843 }
void DIALOG_PAD_PROPERTIES::OnSetLayers ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1094 of file dialog_pad_properties.cpp.

References m_dummyPad, redraw(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

1095 {
1097  redraw();
1098 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
void DIALOG_PAD_PROPERTIES::OnUpdateUI ( wxUpdateUIEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1024 of file dialog_pad_properties.cpp.

References code_type, DIM, UNIT_BINDER::Enable(), m_canEditNetName, m_currentPad, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeCtrl, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeLabel, m_holeX, m_holeY, DIALOG_PAD_PROPERTIES_BASE::m_PadNameText, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, DIALOG_PAD_PROPERTIES_BASE::m_PadNumText, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, and DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel.

1025 {
1026  int ii = m_PadType->GetSelection();
1027 
1028  if( (unsigned)ii >= DIM( code_type ) ) // catches < 0 also
1029  ii = 0;
1030 
1031  bool hasHole, hasConnection;
1032 
1033  switch( ii )
1034  {
1035  default:
1036  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
1037  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
1038  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
1039  case 3: /* NPTH */ hasHole = true; hasConnection = false; break;
1040  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
1041  }
1042 
1043  // Enable/disable hole controls
1044  m_holeShapeLabel->Enable( hasHole );
1045  m_holeShapeCtrl->Enable( hasHole );
1046  m_holeX.Enable( hasHole );
1047  m_holeY.Enable( hasHole && m_holeShapeCtrl->GetSelection() == 1 );
1048 
1049  // Enable/disable Pad number, net and pad length-to-die
1050  m_PadNumText->Enable( hasConnection );
1051  m_PadNumCtrl->Enable( hasConnection );
1052  m_PadNameText->Enable( hasConnection );
1053  m_PadNetSelector->Enable( hasConnection && m_canEditNetName && m_currentPad );
1054  m_padToDie.Enable( hasConnection );
1055 
1056  // Enable/disable Copper Layers control
1057  m_rbCopperLayersSel->Enable( ii != 4 );
1058 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
static PAD_ATTR_T code_type[]
void Enable(bool aEnable)
Function Enable Enables/diasables the label, widget and units label.
void DIALOG_PAD_PROPERTIES::OnUpdateUINonCopperWarning ( wxUpdateUIEvent &  event)
inlineoverrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 123 of file dialog_pad_properties.h.

References LSET::AllCuMask(), D_PAD::GetLayerSet(), DIALOG_PAD_PROPERTIES_BASE::m_nonCopperWarningBook, onAddPrimitive(), onChangePadMode(), onCornerRadiusChange(), onCornerSizePercentChange(), onDeletePrimitive(), OnDrillShapeSelected(), onDuplicatePrimitive(), onEditPrimitive(), onGeometryTransform(), OnPadShapeSelection(), OnPaintShowPanel(), onPrimitiveDClick(), OnPrimitiveSelection(), OnSetLayers(), OnValuesChanged(), PadOrientEvent(), PadTypeSelected(), TransferDataFromWindow(), and TransferDataToWindow().

124  {
125  bool isOnCopperLayer = ( m_dummyPad->GetLayerSet() & LSET::AllCuMask() ).any();
126  m_nonCopperWarningBook->SetSelection( isOnCopperLayer ? 0 : 1 );
127  }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
void DIALOG_PAD_PROPERTIES::OnValuesChanged ( wxCommandEvent &  event)
overrideprivatevirtual

Called when a dimension has changed.

Update the graphical pad shown in the panel.

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 1795 of file dialog_pad_properties.cpp.

References m_canUpdate, m_dummyPad, redraw(), transferDataToPad(), and updateRoundRectCornerValues().

Referenced by DIALOG_PAD_PROPERTIES(), OnUpdateUINonCopperWarning(), and ~DIALOG_PAD_PROPERTIES().

1796 {
1797  if( m_canUpdate )
1798  {
1800  // If the pad size has changed, update the displayed values
1801  // for rounded rect pads
1803 
1804  redraw();
1805  }
1806 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
void DIALOG_PAD_PROPERTIES::PadOrientEvent ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 967 of file dialog_pad_properties.cpp.

References m_dummyPad, redraw(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

968 {
970  redraw();
971 }
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
void DIALOG_PAD_PROPERTIES::PadTypeSelected ( wxCommandEvent &  event)
overrideprivatevirtual

Reimplemented from DIALOG_PAD_PROPERTIES_BASE.

Definition at line 974 of file dialog_pad_properties.cpp.

References code_type, DIM, D_PAD::GetDrillSize(), D_PAD::GetName(), BOARD_CONNECTED_ITEM::GetNetCode(), UNIT_BINDER::GetValue(), m_currentPad, m_dummyPad, m_holeX, m_holeY, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, redraw(), setPadLayersList(), NET_SELECTOR::SetSelectedNetcode(), UNIT_BINDER::SetValue(), and transferDataToPad().

Referenced by OnUpdateUINonCopperWarning().

975 {
976  int ii = m_PadType->GetSelection();
977 
978  if( (unsigned)ii >= DIM( code_type ) ) // catches < 0 also
979  ii = 0;
980 
981  bool hasHole, hasConnection;
982 
983  switch( ii )
984  {
985  default:
986  case 0: /* PTH */ hasHole = true; hasConnection = true; break;
987  case 1: /* SMD */ hasHole = false; hasConnection = true; break;
988  case 2: /* CONN */ hasHole = false; hasConnection = true; break;
989  case 3: /* NPTH */ hasHole = true; hasConnection = false; break;
990  case 4: /* Aperture */ hasHole = false; hasConnection = false; break;
991  }
992 
993  LSET layer_mask = std_pad_layers[ii];
994  setPadLayersList( layer_mask );
995 
996  if( !hasHole )
997  {
998  m_holeX.SetValue( 0 );
999  m_holeY.SetValue( 0 );
1000  }
1001  else if ( m_holeX.GetValue() == 0 && m_currentPad )
1002  {
1005  }
1006 
1007  if( !hasConnection )
1008  {
1009  m_PadNumCtrl->SetValue( wxEmptyString );
1011  m_padToDie.SetValue( 0 );
1012  }
1013  else if( m_PadNumCtrl->GetValue().IsEmpty() && m_currentPad )
1014  {
1015  m_PadNumCtrl->SetValue( m_currentPad->GetName() );
1017  }
1018 
1020  redraw();
1021 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
void setPadLayersList(LSET layer_mask)
Function setPadLayersList updates the CheckBox states in pad layers list,.
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
virtual int GetValue()
Function GetValue Returns the current value in Internal Units.
static PAD_ATTR_T code_type[]
Class LSET is a set of PCB_LAYER_IDs.
void SetSelectedNetcode(int aNetcode)
const wxString & GetName() const
Definition: class_pad.h:190
int GetNetCode() const
Function GetNetCode.
static const LSET std_pad_layers[]
virtual void SetValue(int aValue)
Function SetValue Sets new value (in Internal Units) for the text field, taking care of units convers...
bool DIALOG_PAD_PROPERTIES::padValuesOK ( )
private

test if all values are acceptable for the pad

Definition at line 1102 of file dialog_pad_properties.cpp.

References abs, B_Cu, B_Paste, F_Cu, F_Paste, Format(), D_PAD::GetAttribute(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetOffset(), D_PAD::GetShape(), D_PAD::GetSize(), DIALOG_SHIM::GetUserUnits(), LSET::InternalCuMask(), HTML_MESSAGE_BOX::ListSet(), m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, D_PAD::MergePrimitivesAsPolygon(), min, PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_OBLONG, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_ROUNDRECT, StringFromValue(), transferDataToPad(), wxPoint::x, and wxPoint::y.

Referenced by TransferDataFromWindow().

1103 {
1104  bool error = transferDataToPad( m_dummyPad );
1105  bool skip_tstoffset = false; // the offset prm is not always tested
1106 
1107  wxArrayString error_msgs;
1108  wxString msg;
1109 
1110  // Test for incorrect values
1111  if( (m_dummyPad->GetSize().x <= 0) ||
1112  ((m_dummyPad->GetSize().y <= 0) && (m_dummyPad->GetShape() != PAD_SHAPE_CIRCLE)) )
1113  {
1114  error_msgs.Add( _( "Pad size must be greater than zero" ) );
1115  }
1116 
1117  if( (m_dummyPad->GetSize().x < m_dummyPad->GetDrillSize().x) ||
1118  (m_dummyPad->GetSize().y < m_dummyPad->GetDrillSize().y) )
1119  {
1120  error_msgs.Add( _( "Incorrect value for pad drill: pad drill bigger than pad size" ) );
1121  skip_tstoffset = true; // offset prm will be not tested because if the drill value
1122  // is incorrect the offset prm is always seen as incorrect, even if it is 0
1123  }
1124 
1125  if( m_dummyPad->GetLocalClearance() < 0 )
1126  {
1127  error_msgs.Add( _( "Pad local clearance must be zero or greater than zero" ) );
1128  }
1129 
1130  // Some pads need a negative solder mask clearance (mainly for BGA with small pads)
1131  // However the negative solder mask clearance must not create negative mask size
1132  // Therefore test for minimal acceptable negative value
1133  // Hovewer, a negative value can give strange result with custom shapes, so it is not
1134  // allowed for custom pad shape
1136  {
1138  error_msgs.Add( _( "Pad local solder mask clearance must be zero or greater than zero" ) );
1139  else
1140  {
1141  int min_smClearance = -std::min( m_dummyPad->GetSize().x, m_dummyPad->GetSize().y )/2;
1142 
1143  if( m_dummyPad->GetLocalSolderMaskMargin() <= min_smClearance )
1144  {
1145  error_msgs.Add( wxString::Format(
1146  _( "Pad local solder mask clearance must be greater than %s" ),
1147  StringFromValue( GetUserUnits(), min_smClearance, true, true ) ) );
1148  }
1149  }
1150  }
1151 
1152  // Some pads need a positive solder paste clearance (mainly for BGA with small pads)
1153  // Hovewer, a positive value can create issues if the resulting shape is too big.
1154  // (like a solder paste creating a solder paste area on a neighbour pad or on the solder mask)
1155  // So we could ask for user to confirm the choice
1156  // Currently there are no test
1157 
1158  LSET padlayers_mask = m_dummyPad->GetLayerSet();
1159 
1160  if( padlayers_mask == 0 )
1161  error_msgs.Add( _( "Error: pad has no layer" ) );
1162 
1163  if( !padlayers_mask[F_Cu] && !padlayers_mask[B_Cu] )
1164  {
1165  if( m_dummyPad->GetDrillSize().x || m_dummyPad->GetDrillSize().y )
1166  {
1167  // Note: he message is shown in an HTML window
1168  msg = _( "Error: the pad is not on a copper layer and has a hole" );
1169 
1171  {
1172  msg += wxT( "<br><br><i>" );
1173  msg += _( "For NPTH pad, set pad size value to pad drill value,"
1174  " if you do not want this pad plotted in gerber files" );
1175  }
1176 
1177  error_msgs.Add( msg );
1178  }
1179  }
1180 
1181  if( !skip_tstoffset )
1182  {
1183  wxPoint max_size;
1184  max_size.x = std::abs( m_dummyPad->GetOffset().x );
1185  max_size.y = std::abs( m_dummyPad->GetOffset().y );
1186  max_size.x += m_dummyPad->GetDrillSize().x / 2;
1187  max_size.y += m_dummyPad->GetDrillSize().y / 2;
1188 
1189  if( ( m_dummyPad->GetSize().x / 2 < max_size.x ) ||
1190  ( m_dummyPad->GetSize().y / 2 < max_size.y ) )
1191  {
1192  error_msgs.Add( _( "Incorrect value for pad offset" ) );
1193  }
1194  }
1195 
1196  if( error )
1197  error_msgs.Add( _( "Too large value for pad delta size" ) );
1198 
1199  switch( m_dummyPad->GetAttribute() )
1200  {
1201  case PAD_ATTRIB_HOLE_NOT_PLATED: // Not plated, but through hole, a hole is expected
1202  case PAD_ATTRIB_STANDARD : // Pad through hole, a hole is also expected
1203  if( m_dummyPad->GetDrillSize().x <= 0 ||
1205  error_msgs.Add( _( "Error: Through hole pad: drill diameter set to 0" ) );
1206  break;
1207 
1208  case PAD_ATTRIB_CONN: // Connector pads are smd pads, just they do not have solder paste.
1209  if( padlayers_mask[B_Paste] || padlayers_mask[F_Paste] )
1210  error_msgs.Add( _( "Error: Connector pads are not on the solder paste layer\n"
1211  "Use SMD pads instead" ) );
1212  // Fall trough
1213  case PAD_ATTRIB_SMD: // SMD and Connector pads (One external copper layer only)
1214  {
1215  LSET innerlayers_mask = padlayers_mask & LSET::InternalCuMask();
1216 
1217  if( ( padlayers_mask[F_Cu] && padlayers_mask[B_Cu] ) ||
1218  innerlayers_mask.count() != 0 )
1219  error_msgs.Add( _( "Error: only one external copper layer allowed for SMD or Connector pads" ) );
1220  }
1221  break;
1222  }
1223 
1224 
1226  {
1227  wxString value = m_tcCornerSizeRatio->GetValue();
1228  double rrRadiusRatioPercent;
1229 
1230  if( !value.ToDouble( &rrRadiusRatioPercent ) )
1231  error_msgs.Add( _( "Incorrect corner size value" ) );
1232  else
1233  {
1234  if( rrRadiusRatioPercent < 0.0 )
1235  error_msgs.Add( _( "Incorrect (negative) corner size value" ) );
1236  else if( rrRadiusRatioPercent > 50.0 )
1237  error_msgs.Add( _( "Corner size value must be smaller than 50%" ) );
1238  }
1239  }
1240 
1242  {
1244  error_msgs.Add( _( "Incorrect pad shape: the shape must be equivalent to only one polygon" ) );
1245  }
1246 
1247 
1248  if( error_msgs.GetCount() )
1249  {
1250  HTML_MESSAGE_BOX dlg( this, _("Pad setup errors list" ) );
1251  dlg.ListSet( error_msgs );
1252  dlg.ShowModal();
1253  }
1254 
1255  return error_msgs.GetCount() == 0;
1256 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:414
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
#define abs(a)
Definition: auxiliary.h:84
Class LSET is a set of PCB_LAYER_IDs.
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
static LSET InternalCuMask()
Function InternalCuMask() returns a complete set of internal copper layers, which is all Cu layers ex...
Definition: lset.cpp:633
const wxSize & GetSize() const
Definition: class_pad.h:269
Class HTML_MESSAGE_BOX.
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:62
int GetLocalClearance() const
Definition: class_pad.h:417
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
Usual pad.
Definition: pad_shapes.h:60
wxString StringFromValue(EDA_UNITS_T aUnits, int aValue, bool aAddUnitSymbol, bool aUseMils)
Function StringFromValue returns the string from aValue according to units (inch, mm ...
Definition: base_units.cpp:210
const wxPoint & GetOffset() const
Definition: class_pad.h:278
#define min(a, b)
Definition: auxiliary.h:85
EDA_UNITS_T GetUserUnits() const override
Definition: dialog_shim.h:132
void DIALOG_PAD_PROPERTIES::prepareCanvas ( )
private

Definition at line 227 of file dialog_pad_properties.cpp.

References KIGFX::VIEW::Add(), PCB_GENERAL_SETTINGS::Colors(), KIGFX::ORIGIN_VIEWITEM::CROSS, KIGFX::VIEW_CONTROLS::EnableMousewheelPan(), EDA_DRAW_PANEL_GAL::GetBackend(), EDA_DRAW_FRAME::GetCanvas(), EDA_DRAW_PANEL::GetEnableMousewheelPan(), KIGFX::VIEW::GetGAL(), EDA_DRAW_FRAME::GetGalCanvas(), KIGFX::VIEW::GetPainter(), D_PAD::GetPosition(), KIGFX::PAINTER::GetSettings(), EDA_DRAW_PANEL_GAL::GetView(), EDA_DRAW_PANEL_GAL::GetViewControls(), EDA_DRAW_FRAME::IsGalCanvasActive(), LAYER_PAD_BK, LAYER_PAD_FR, LAYER_PADS_TH, LIGHTBLUE, m_axisOrigin, DIALOG_PAD_PROPERTIES_BASE::m_cbShowPadOutline, m_dummyPad, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPad, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, OnResize(), KIGFX::ORIGIN_VIEWITEM::SetDrawAtZero(), KIGFX::GAL::SetGridSize(), EDA_DRAW_PANEL_GAL::SetStealsFocus(), PCB_BASE_FRAME::Settings(), EDA_DRAW_PANEL_GAL::StartDrawing(), PCB_DRAW_PANEL_GAL::SwitchBackend(), and PCB_DRAW_PANEL_GAL::UseColorScheme().

Referenced by DIALOG_PAD_PROPERTIES().

228 {
229  // Initialize the canvases (legacy or gal) to display the pad
230 
231  // Show the X and Y axis. It is usefull because pad shape can have an offset
232  // or be a complex shape.
233  KIGFX::COLOR4D axis_color = LIGHTBLUE;
234 
236  Millimeter2iu( 0.2 ),
238  m_axisOrigin->SetDrawAtZero( true );
239 
240  if( m_parent->IsGalCanvasActive() )
241  {
245 
246  bool mousewheelPan = m_parent->GetCanvas()->GetEnableMousewheelPan();
248 
249  m_panelShowPadGal->Show();
250  m_panelShowPad->Hide();
251 
253 
254  // fix the pad render mode (filled/not filled)
255  auto settings = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
256  bool sketchMode = m_cbShowPadOutline->IsChecked();
257  settings->SetSketchMode( LAYER_PADS_TH, sketchMode );
258  settings->SetSketchMode( LAYER_PAD_FR, sketchMode );
259  settings->SetSketchMode( LAYER_PAD_BK, sketchMode );
260  settings->SetSketchModeGraphicItems( sketchMode );
261 
262  // gives a non null grid size (0.001mm) because GAL layer does not like a 0 size grid:
263  double gridsize = 0.001 * IU_PER_MM;
264  view->GetGAL()->SetGridSize( VECTOR2D( gridsize, gridsize ) );
265  view->Add( m_dummyPad );
266  view->Add( m_axisOrigin );
267 
269  Connect( wxEVT_SIZE, wxSizeEventHandler( DIALOG_PAD_PROPERTIES::OnResize ) );
270  }
271  else
272  {
273  m_panelShowPad->Show();
274  m_panelShowPadGal->Hide();
275  }
276 }
virtual EDA_DRAW_PANEL * GetCanvas() const
Definition: draw_frame.h:388
multilayer pads, usually with holes
GAL_TYPE GetBackend() const
Function GetBackend Returns the type of backend currently used by GAL canvas.
virtual void EnableMousewheelPan(bool aEnable)
Function EnableMousewheelPan() Enables or disables mousewheel panning.
KIGFX::VIEW * GetView() const
Function GetView() Returns a pointer to the VIEW instance used in the panel.
smd pads, back layer
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin
Class PCB_RENDER_SETTINGS Stores PCB specific render settings.
Definition: pcb_painter.h:62
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
GAL * GetGAL() const
Function GetGAL() Returns the GAL this view is using to draw graphical primitives.
Definition: view.h:180
PCB_GENERAL_SETTINGS & Settings()
void SetDrawAtZero(bool aDrawFlag)
Function SetDrawAtZero() Set the draw at zero flag.
void SetStealsFocus(bool aStealsFocus)
Set whether focus is taken on certain events (mouseover, keys, etc).
void OnResize(wxSizeEvent &event)
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:911
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
void SetGridSize(const VECTOR2D &aGridSize)
Set the grid size.
void StartDrawing()
Function StartDrawing() Begins drawing if it was stopped previously.
void UseColorScheme(const COLORS_DESIGN_SETTINGS *aSettings)
Function UseColorScheme Applies layer color settings.
COLORS_DESIGN_SETTINGS & Colors()
bool SwitchBackend(GAL_TYPE aGalType) override
Function SwitchBackend Switches method of rendering graphics.
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
smd pads, front layer
bool GetEnableMousewheelPan() const
KIGFX::VIEW_CONTROLS * GetViewControls() const
Function GetViewControls() Returns a pointer to the VIEW_CONTROLS instance used in the panel...
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Return a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:918
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:335
Class VIEW.
Definition: view.h:61
const wxPoint GetPosition() const override
Definition: class_pad.h:220
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
PROJECT & KIWAY_HOLDER::Prj ( ) const
inherited

Function Prj returns a reference to the PROJECT "associated with" this KIWAY.

Definition at line 34 of file kiway_holder.cpp.

References KIWAY_HOLDER::Kiway(), and KIWAY::Prj().

Referenced by PCB_BASE_EDIT_FRAME::AddLibrary(), LIB_MANAGER::addLibrary(), SCH_EDIT_FRAME::AppendSchematic(), PCB_EDIT_FRAME::ArchiveModulesOnBoard(), DIALOG_SYMBOL_REMAP::backupProject(), LIB_VIEW_FRAME::BestZoom(), CVPCB_MAINFRAME::BuildLIBRARY_LISTBOX(), DIALOG_FOOTPRINT_FP_EDITOR::Cfg3DPath(), DIALOG_FOOTPRINT_BOARD_EDITOR::Cfg3DPath(), DIALOG_EDIT_COMPONENT_IN_LIBRARY::checkAliasName(), PCB_BASE_EDIT_FRAME::CreateNewLibrary(), KICAD_MANAGER_FRAME::CreateNewProject(), DIALOG_PLOT_SCHEMATIC::createPlotFileName(), DIALOG_SYMBOL_REMAP::createProjectSymbolLibTable(), FOOTPRINT_EDIT_FRAME::DeleteModuleFromLibrary(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIG_EQUFILES::DIALOG_CONFIG_EQUFILES(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS(), DIALOG_SYMBOL_REMAP::DIALOG_SYMBOL_REMAP(), LIB_VIEW_FRAME::DisplayLibInfos(), SCH_BASE_FRAME::DisplayListComponentsInLib(), PCB_EDIT_FRAME::doAutoSave(), SCH_EDIT_FRAME::EditSheet(), PCB_EDIT_FRAME::Export_IDF3(), PCB_EDIT_FRAME::Files_io_from_id(), NETLIST_DIALOG::GenNetlist(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), FOOTPRINT_VIEWER_FRAME::getCurFootprintName(), LIB_EDIT_FRAME::GetCurLib(), FOOTPRINT_VIEWER_FRAME::getCurNickname(), SCH_BASE_FRAME::GetLibAlias(), SCH_BASE_FRAME::GetLibPart(), DIALOG_SYMBOL_REMAP::getLibsNotInGlobalSymbolLibTable(), DIALOG_BOM::getPluginFileName(), KICAD_MANAGER_FRAME::GetProjectFileName(), LIB_VIEW_FRAME::getSelectedAlias(), FP_THREAD_IFACE::GetTable(), PCB_EDIT_FRAME::importFile(), SCH_EDIT_FRAME::importFile(), FOOTPRINT_EDIT_FRAME::initLibraryTree(), PCB_EDIT_FRAME::InstallNetlistFrame(), SCH_EDIT_FRAME::IsSearchCacheObsolete(), KIWAY_HOLDER::Kiway(), LIB_EDIT_FRAME::KiwayMailIn(), EDA_DRAW_FRAME::LibraryFileBrowser(), SCH_EDIT_FRAME::Load_Component(), SCH_EDIT_FRAME::LoadCmpToFootprintLinkFile(), LIB_EDIT_FRAME::LoadComponentFromCurrentLib(), CVPCB_MAINFRAME::LoadFootprintFiles(), DIALOG_SPICE_MODEL::loadLibrary(), LIB_EDIT_FRAME::LoadOneSymbol(), KICAD_MANAGER_FRAME::LoadProject(), CVPCB_MAINFRAME::LoadProjectFile(), SCH_EDIT_FRAME::LoadProjectFile(), PCB_EDIT_FRAME::LoadProjectSettings(), DIALOG_DRC_CONTROL::makeValidFileNameReport(), DIALOG_FOOTPRINT_FP_EDITOR::On3DModelCellChanged(), DIALOG_FOOTPRINT_BOARD_EDITOR::On3DModelCellChanged(), FOOTPRINT_VIEWER_FRAME::OnActivate(), DIALOG_FOOTPRINT_FP_EDITOR::OnAdd3DModel(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAdd3DModel(), DIALOG_GENCAD_EXPORT_OPTIONS::onBrowse(), KICAD_MANAGER_FRAME::OnBrowseInFileExplorer(), DIALOG_DRC_CONTROL::OnButtonBrowseRptFileClick(), DIALOG_EDIT_COMPONENTS_LIBID::onClickOrphansButton(), CVPCB_MAINFRAME::OnConfigurePaths(), FOOTPRINT_EDIT_FRAME::OnConfigurePaths(), KICAD_MANAGER_FRAME::OnCreateProjectFromTemplate(), CVPCB_MAINFRAME::OnEditFootprintLibraryTable(), DIALOG_GENDRILL::OnGenReportFile(), SCH_EDIT_FRAME::OnImportProject(), DIALOG_CHOOSE_COMPONENT::OnInitDialog(), KICAD_MANAGER_FRAME::OnOpenFileInTextEditor(), DIALOG_NETLIST::OnOpenNetlistClick(), DIALOG_EXPORT_SVG::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT::OnOutputDirectoryBrowseClicked(), DIALOG_GENDRILL::OnOutputDirectoryBrowseClicked(), DIALOG_PLOT_SCHEMATIC::OnOutputDirectoryBrowseClicked(), LIB_EDIT_FRAME::OnPlotCurrentComponent(), DIALOG_SYMBOL_REMAP::OnRemapSymbols(), SCH_EDIT_FRAME::OnRightClick(), KICAD_MANAGER_FRAME::OnRunGerbview(), DIALOG_BOM::OnRunPlugin(), FOOTPRINT_EDIT_FRAME::OnSaveFootprintAsPng(), KICAD_MANAGER_FRAME::OnSaveProject(), DIALOG_SPICE_MODEL::onSelectLibrary(), LIB_VIEW_FRAME::OnSelectSymbol(), KICAD_MANAGER_FRAME::OnUnarchiveFiles(), LIB_EDIT_FRAME::OnViewEntryDoc(), LIB_VIEW_FRAME::onViewSymbolDocument(), SCH_EDIT_FRAME::OpenProjectFiles(), PCB_EDIT_FRAME::OpenProjectFiles(), PANEL_PREV_3D::PANEL_PREV_3D(), SCH_EDIT_FRAME::PasteListOfItems(), PCB_BASE_EDIT_FRAME::PCB_BASE_EDIT_FRAME(), DIALOG_CHOOSE_COMPONENT::PopulateFootprintSelector(), SCH_EDIT_FRAME::Process_Config(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), PCB_EDIT_FRAME::RecreateCmpFileFromBoard(), FOOTPRINT_VIEWER_FRAME::ReCreateFootprintList(), FOOTPRINT_VIEWER_FRAME::ReCreateLibraryList(), LIB_VIEW_FRAME::ReCreateListCmp(), LIB_VIEW_FRAME::ReCreateListLib(), EDA_3D_VIEWER::ReloadRequest(), DIALOG_SYMBOL_REMAP::remapSymbolToLibTable(), FOOTPRINT_EDIT_FRAME::restoreLastFootprint(), FOOTPRINT_EDIT_FRAME::retainLastFootprint(), SCH_EDIT_FRAME::SaveEEFile(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), FOOTPRINT_EDIT_FRAME::saveFootprintInLibrary(), LIB_EDIT_FRAME::saveLibrary(), LIB_EDIT_FRAME::SaveOneSymbol(), LIB_EDIT_FRAME::savePartAs(), SCH_EDIT_FRAME::SaveProject(), CVPCB_MAINFRAME::SaveProjectFile(), SCH_EDIT_FRAME::SaveProjectSettings(), PCB_EDIT_FRAME::SaveProjectSettings(), SCH_BASE_FRAME::saveSymbolLibTables(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), SCH_BASE_FRAME::SelectComponentFromLibTree(), PCB_BASE_FRAME::SelectLibrary(), SCH_BASE_FRAME::SelectLibraryFromList(), LIB_EDIT_FRAME::selectSymLibTable(), FOOTPRINT_VIEWER_FRAME::setCurFootprintName(), LIB_EDIT_FRAME::SetCurLib(), FOOTPRINT_VIEWER_FRAME::setCurNickname(), LIB_EDIT_FRAME::SetCurPart(), KICAD_MANAGER_FRAME::SetProjectFileName(), DIALOG_CHOOSE_COMPONENT::ShowFootprintFor(), FOOTPRINT_VIEWER_FRAME::ShowModal(), SIM_PLOT_FRAME::SIM_PLOT_FRAME(), LIB_MANAGER::symTable(), FOOTPRINT_EDIT_FRAME::SyncLibraryTree(), EDA_3D_VIEWER::takeScreenshot(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), SIM_PLOT_FRAME::updateNetlistExporter(), SCH_SCREEN::UpdateSymbolLinks(), FOOTPRINT_VIEWER_FRAME::UpdateTitle(), FOOTPRINT_EDIT_FRAME::updateTitle(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::Validate(), SCH_EDIT_FRAME::WriteNetListFile(), DIALOG_FOOTPRINT_BOARD_EDITOR::~DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::~DIALOG_FOOTPRINT_FP_EDITOR(), LAUNCHER_PANEL::~LAUNCHER_PANEL(), and PCB_BASE_EDIT_FRAME::~PCB_BASE_EDIT_FRAME().

35 {
36  return Kiway().Prj();
37 }
KIWAY & Kiway() const
Function Kiway returns a reference to the KIWAY that this object has an opportunity to participate in...
Definition: kiway_player.h:60
VTBL_ENTRY PROJECT & Prj() const
Function Prj returns the PROJECT associated with this KIWAY.
Definition: kiway.cpp:142
void DIALOG_PAD_PROPERTIES::redraw ( )
private

Definition at line 1259 of file dialog_pad_properties.cpp.

References KIGFX::VIEW::Add(), PAD_CS_PRIMITIVE::ExportTo(), DRAWSEGMENT::GetCenter(), D_PAD::GetOrientation(), BOX2< Vec >::GetOrigin(), KIGFX::VIEW::GetPainter(), D_PAD::GetPosition(), KIGFX::VIEW::GetScale(), KIGFX::PAINTER::GetSettings(), BOX2< Vec >::GetSize(), EDA_DRAW_PANEL_GAL::GetView(), BOX2< Vec >::Inflate(), EDA_DRAW_FRAME::IsGalCanvasActive(), m_dummyPad, m_highlight, DIALOG_PAD_PROPERTIES_BASE::m_listCtrlPrimitives, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPad, DIALOG_PAD_PROPERTIES_BASE::m_panelShowPadGal, m_parent, m_primitives, PAD_CS_PRIMITIVE::m_Radius, m_selectedColor, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Thickness, BOX2< Vec >::Move(), DRAWSEGMENT::Move(), EDA_DRAW_PANEL_GAL::Refresh(), DRAWSEGMENT::Rotate(), S_ARC, S_CIRCLE, S_POLYGON, S_SEGMENT, SELECTED_ITEMS_LAYER, KIGFX::VIEW::SetBoundary(), DRAWSEGMENT::SetEnd(), BOARD_ITEM::SetLayer(), KIGFX::RENDER_SETTINGS::SetLayerColor(), KIGFX::VIEW::SetScale(), KIGFX::VIEW::SetTopLayer(), KIGFX::VIEW::SetViewport(), DRAWSEGMENT::SetWidth(), EDA_DRAW_PANEL_GAL::StartDrawing(), EDA_DRAW_PANEL_GAL::StopDrawing(), KIGFX::VIEW::Update(), D_PAD::ViewBBox(), wxPoint::x, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by editPrimitive(), onAddPrimitive(), onChangePadMode(), onCornerRadiusChange(), onCornerSizePercentChange(), onDeletePrimitive(), OnDrillShapeSelected(), onDuplicatePrimitive(), onGeometryTransform(), OnInitDialog(), OnPadShapeSelection(), OnPrimitiveSelection(), OnResize(), OnSetLayers(), OnValuesChanged(), PadOrientEvent(), and PadTypeSelected().

1260 {
1261  if( m_parent->IsGalCanvasActive() )
1262  {
1265 
1266  // The layer used to place primitive items selected when editing custom pad shapes
1267  // we use here a layer never used in a pad:
1268  #define SELECTED_ITEMS_LAYER Dwgs_User
1269 
1271  KIGFX::PCB_RENDER_SETTINGS* settings =
1272  static_cast<KIGFX::PCB_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
1274 
1275  view->Update( m_dummyPad );
1276 
1277  // delete previous items if highlight list
1278  while( m_highlight.size() )
1279  {
1280  delete m_highlight.back(); // the dtor also removes item from view
1281  m_highlight.pop_back();
1282  }
1283 
1284  // highlight selected primitives:
1285  long select = m_listCtrlPrimitives->GetFirstSelected();
1286 
1287  while( select >= 0 )
1288  {
1289  PAD_CS_PRIMITIVE& primitive = m_primitives[select];
1290 
1291  DRAWSEGMENT* dummySegment = new DRAWSEGMENT;
1292  dummySegment->SetLayer( SELECTED_ITEMS_LAYER );
1293  primitive.ExportTo( dummySegment );
1294  dummySegment->Rotate( wxPoint( 0, 0), m_dummyPad->GetOrientation() );
1295  dummySegment->Move( m_dummyPad->GetPosition() );
1296 
1297  // Update selected primitive (highligth selected)
1298  switch( primitive.m_Shape )
1299  {
1300  case S_SEGMENT:
1301  case S_ARC:
1302  break;
1303 
1304  case S_CIRCLE: // ring or circle
1305  if( primitive.m_Thickness == 0 ) // filled circle
1306  { // the filled circle option does not exist in a DRAWSEGMENT
1307  // but it is easy to create it with a circle having the
1308  // right radius and outline width
1309  wxPoint end = dummySegment->GetCenter();
1310  end.x += primitive.m_Radius/2;
1311  dummySegment->SetEnd( end );
1312  dummySegment->SetWidth( primitive.m_Radius );
1313  }
1314  break;
1315 
1316  case S_POLYGON:
1317  break;
1318 
1319  default:
1320  delete dummySegment;
1321  dummySegment = nullptr;
1322  break;
1323  }
1324 
1325  if( dummySegment )
1326  {
1327  view->Add( dummySegment );
1328  m_highlight.push_back( dummySegment );
1329  }
1330 
1331  select = m_listCtrlPrimitives->GetNextSelected( select );
1332  }
1333 
1334  BOX2I bbox = m_dummyPad->ViewBBox();
1335 
1336  if( bbox.GetSize().x > 0 && bbox.GetSize().y > 0 )
1337  {
1338  // gives a size to the full drawable area
1339  BOX2I drawbox;
1340  drawbox.Move( m_dummyPad->GetPosition() );
1341  drawbox.Inflate( bbox.GetSize().x*2, bbox.GetSize().y*2 );
1342 
1343  view->SetBoundary( drawbox );
1344 
1345  // Autozoom
1346  view->SetViewport( BOX2D( bbox.GetOrigin(), bbox.GetSize() ) );
1347 
1348  // Add a margin
1349  view->SetScale( m_panelShowPadGal->GetView()->GetScale() * 0.7 );
1350 
1353  }
1354  }
1355  else
1356  {
1357  m_panelShowPad->Refresh();
1358  }
1359 }
const Vec & GetOrigin() const
Definition: box2.h:191
void Move(const Vec &aMoveVector)
Function Move moves the rectangle by the aMoveVector.
Definition: box2.h:118
void SetViewport(const BOX2D &aViewport)
Function SetViewport() Sets the visible area of the VIEW.
Definition: view.cpp:539
virtual void Move(const wxPoint &aMoveVector) override
Function Move move this object.
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Function SetTopLayer() Sets given layer to be displayed on the top or sets back the default order of ...
Definition: view.cpp:848
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
const wxPoint GetCenter() const override
Function GetCenter()
void ExportTo(DRAWSEGMENT *aTarget)
Export the PAD_CS_PRIMITIVE parameters to a DRAWSEGMENT useful to draw a primitive shape...
polygon (not yet used for tracks, but could be in microwave apps)
BOX2< VECTOR2D > BOX2D
Definition: box2.h:521
usual segment : line with rounded ends
KIGFX::VIEW * GetView() const
Function GetView() Returns a pointer to the VIEW instance used in the panel.
const Vec & GetSize() const
Definition: box2.h:187
void SetScale(double aScale)
Function SetScale() Sets the scaling factor.
Definition: view.h:250
Class PCB_RENDER_SETTINGS Stores PCB specific render settings.
Definition: pcb_painter.h:62
virtual const BOX2I ViewBBox() const override
Function ViewBBox() returns the bounding box of the item covering all its layers. ...
Definition: class_pad.cpp:1353
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:98
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Function SetLayerColor Changes the color used to draw a layer.
Definition: painter.h:230
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:911
PAINTER * GetPainter() const
Function GetPainter() Returns the painter object used by the view for drawing VIEW_ITEMS.
Definition: view.h:199
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1521
STROKE_T m_Shape
Definition: class_pad.h:94
void StartDrawing()
Function StartDrawing() Begins drawing if it was stopped previously.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:95
virtual RENDER_SETTINGS * GetSettings()=0
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:300
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Function Rotate Rotate this object.
std::vector< PAD_CS_PRIMITIVE > m_primitives
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
#define SELECTED_ITEMS_LAYER
void SetEnd(const wxPoint &aEnd)
double GetScale() const
Function GetScale()
Definition: view.h:268
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:335
Class VIEW.
Definition: view.h:61
void SetBoundary(const BOX2D &aBoundary)
Function SetBoundary() Sets limits for view area.
Definition: view.h:278
const wxPoint GetPosition() const override
Definition: class_pad.h:220
std::vector< DRAWSEGMENT * > m_highlight
void StopDrawing()
Function StopDrawing() Prevents the GAL canvas from further drawing till it is recreated or StartDraw...
void SetWidth(int aWidth)
void DIALOG_SHIM::SetInitialFocus ( wxWindow *  aWindow)
inlineinherited

Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.

Definition at line 115 of file dialog_shim.h.

Referenced by DIALOG_BOM::DIALOG_BOM(), DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_CONFIGURE_PATHS::DIALOG_CONFIGURE_PATHS(), DIALOG_EDIT_LINE_STYLE::DIALOG_EDIT_LINE_STYLE(), DIALOG_FIELDS_EDITOR_GLOBAL::DIALOG_FIELDS_EDITOR_GLOBAL(), DIALOG_FOOTPRINT_BOARD_EDITOR::DIALOG_FOOTPRINT_BOARD_EDITOR(), DIALOG_FOOTPRINT_FP_EDITOR::DIALOG_FOOTPRINT_FP_EDITOR(), DIALOG_FP_PLUGIN_OPTIONS::DIALOG_FP_PLUGIN_OPTIONS(), DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES(), DIALOG_LABEL_EDITOR::DIALOG_LABEL_EDITOR(), DIALOG_LIB_EDIT_DRAW_ITEM::DIALOG_LIB_EDIT_DRAW_ITEM(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_LIB_EDIT_TEXT::DIALOG_LIB_EDIT_TEXT(), DIALOG_PAD_PRIMITIVES_PROPERTIES::DIALOG_PAD_PRIMITIVES_PROPERTIES(), DIALOG_PAD_PROPERTIES(), DIALOG_SET_GRID::DIALOG_SET_GRID(), DIALOG_TARGET_PROPERTIES::DIALOG_TARGET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), DIALOG_EDIT_ONE_FIELD::init(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchAllClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchIDClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchRefClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchSelectedClicked(), DIALOG_EXCHANGE_FOOTPRINTS::OnMatchValueClicked(), PANEL_FP_LIB_TABLE::PANEL_FP_LIB_TABLE(), PANEL_SYM_LIB_TABLE::PANEL_SYM_LIB_TABLE(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), and LIB_EDIT_FRAME::savePartAs().

116  {
117  m_initialFocusTarget = aWindow;
118  }
wxWindow * m_initialFocusTarget
Definition: dialog_shim.h:179
void KIWAY_HOLDER::SetKiway ( wxWindow *  aDest,
KIWAY aKiway 
)
inherited

Function SetKiway.

Parameters
aDestis the recipient of aKiway pointer. It is only used for debugging, since "this" is not a wxWindow*. "this" is a KIWAY_HOLDER mix-in.
aKiwayis often from a parent window, or from KIFACE::CreateWindow().

Definition at line 47 of file kiway_holder.cpp.

References KIWAY_HOLDER::m_kiway, and name.

Referenced by DIALOG_SHIM::DIALOG_SHIM(), InvokePcbLibTableEditor(), KIWAY_HOLDER::Kiway(), and SIM_PLOT_FRAME::SIM_PLOT_FRAME().

48 {
49 #if defined(DEBUG)
50  // offer a trap point for debugging most any window
51  wxASSERT( aDest );
52  if( !strcmp( typeid(aDest).name(), "DIALOG_EDIT_LIBENTRY_FIELDS_IN_LIB" ) )
53  {
54  int breakhere=1;
55  (void) breakhere;
56  }
57 #endif
58 
59  (void) aDest;
60 
61  m_kiway = aKiway;
62 }
KIWAY * m_kiway
Definition: kiway_player.h:94
const char * name
Definition: DXF_plotter.cpp:61
void DIALOG_PAD_PROPERTIES::setPadLayersList ( LSET  layer_mask)
private

Function setPadLayersList updates the CheckBox states in pad layers list,.

Parameters
layer_mask= pad layer mask (ORed layers bit mask)

Definition at line 1061 of file dialog_pad_properties.cpp.

References LSET::AllCuMask(), B_Adhes, B_Cu, B_Mask, B_Paste, B_SilkS, Dwgs_User, Eco1_User, Eco2_User, F_Adhes, F_Cu, F_Mask, F_Paste, F_SilkS, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerDraft, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO1, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO2, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCu, and DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel.

Referenced by initValues(), and PadTypeSelected().

1062 {
1063  LSET cu_set = layer_mask & LSET::AllCuMask();
1064 
1065  if( cu_set == LSET( F_Cu ) )
1066  m_rbCopperLayersSel->SetSelection( 0 );
1067  else if( cu_set == LSET( B_Cu ) )
1068  m_rbCopperLayersSel->SetSelection( 1 );
1069  else if( cu_set.any() )
1070  m_rbCopperLayersSel->SetSelection( 2 );
1071  else
1072  m_rbCopperLayersSel->SetSelection( 3 );
1073 
1074  m_PadLayerAdhCmp->SetValue( layer_mask[F_Adhes] );
1075  m_PadLayerAdhCu->SetValue( layer_mask[B_Adhes] );
1076 
1077  m_PadLayerPateCmp->SetValue( layer_mask[F_Paste] );
1078  m_PadLayerPateCu->SetValue( layer_mask[B_Paste] );
1079 
1080  m_PadLayerSilkCmp->SetValue( layer_mask[F_SilkS] );
1081  m_PadLayerSilkCu->SetValue( layer_mask[B_SilkS] );
1082 
1083  m_PadLayerMaskCmp->SetValue( layer_mask[F_Mask] );
1084  m_PadLayerMaskCu->SetValue( layer_mask[B_Mask] );
1085 
1086  m_PadLayerECO1->SetValue( layer_mask[Eco1_User] );
1087  m_PadLayerECO2->SetValue( layer_mask[Eco2_User] );
1088 
1089  m_PadLayerDraft->SetValue( layer_mask[Dwgs_User] );
1090 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
Class LSET is a set of PCB_LAYER_IDs.
void DIALOG_SHIM::SetSizeInDU ( int  x,
int  y 
)
protectedinherited

Set the dialog to the given dimensions in "dialog units".

These are units equivalent to 4* the average character width and 8* the average character height, allowing a dialog to be sized in a way that scales it with the system font.

Definition at line 134 of file dialog_shim.cpp.

Referenced by DIALOG_CHOOSE_COMPONENT::DIALOG_CHOOSE_COMPONENT(), DIALOG_CHOOSE_FOOTPRINT::DIALOG_CHOOSE_FOOTPRINT(), DIALOG_RESCUE_EACH::DIALOG_RESCUE_EACH(), HTML_MESSAGE_BOX::HTML_MESSAGE_BOX(), and HTML_MESSAGE_BOX::SetDialogSizeInDU().

135 {
136  wxSize sz( x, y );
137  SetSize( ConvertDialogToPixels( sz ) );
138 }
bool DIALOG_SHIM::Show ( bool  show)
overrideinherited

Definition at line 162 of file dialog_shim.cpp.

References class_map, EDA_RECT::GetPosition(), EDA_RECT::GetSize(), DIALOG_SHIM::m_hash_key, max, wxPoint::x, and wxPoint::y.

Referenced by DIALOG_SHIM::EndQuasiModal(), InvokeDialogERC(), SCH_EDIT_FRAME::OnAnnotate(), DIALOG_SCH_FIND::OnCancel(), DIALOG_DRC_CONTROL::OnLeftDClickClearance(), DIALOG_DRC_CONTROL::OnLeftDClickUnconnected(), POSITION_RELATIVE_TOOL::PositionRelative(), CVPCB_MAINFRAME::ReadNetListAndFpFiles(), DRC::ShowDRCDialog(), DIALOG_SHIM::ShowQuasiModal(), and DIALOG_POSITION_RELATIVE::UpdateAnchor().

163 {
164  bool ret;
165  const char* hash_key;
166 
167  if( m_hash_key.size() )
168  {
169  // a special case like EDA_LIST_DIALOG, which has multiple uses.
170  hash_key = m_hash_key.c_str();
171  }
172  else
173  {
174  hash_key = typeid(*this).name();
175  }
176 
177  // Show or hide the window. If hiding, save current position and size.
178  // If showing, use previous position and size.
179  if( show )
180  {
181 #ifndef __WINDOWS__
182  wxDialog::Raise(); // Needed on OS X and some other window managers (i.e. Unity)
183 #endif
184  ret = wxDialog::Show( show );
185 
186  // classname is key, returns a zeroed out default EDA_RECT if none existed before.
187  EDA_RECT savedDialogRect = class_map[ hash_key ];
188 
189  if( savedDialogRect.GetSize().x != 0 && savedDialogRect.GetSize().y != 0 )
190  {
191  SetSize( savedDialogRect.GetPosition().x,
192  savedDialogRect.GetPosition().y,
193  std::max( wxDialog::GetSize().x, savedDialogRect.GetSize().x ),
194  std::max( wxDialog::GetSize().y, savedDialogRect.GetSize().y ),
195  0 );
196  }
197 
198  // Be sure that the dialog appears in a visible area
199  // (the dialog position might have been stored at the time when it was
200  // shown on another display)
201  if( wxDisplay::GetFromWindow( this ) == wxNOT_FOUND )
202  Centre();
203  }
204  else
205  {
206  // Save the dialog's position & size before hiding, using classname as key
207  class_map[ hash_key ] = EDA_RECT( wxDialog::GetPosition(), wxDialog::GetSize() );
208 
209 #ifdef __WXMAC__
210  if ( m_eventLoop )
211  m_eventLoop->Exit( GetReturnCode() ); // Needed for APP-MODAL dlgs on OSX
212 #endif
213 
214  ret = wxDialog::Show( show );
215  }
216 
217  return ret;
218 }
const wxSize GetSize() const
Definition: eda_rect.h:101
std::string m_hash_key
Definition: dialog_shim.h:173
static RECT_MAP class_map
const wxPoint GetPosition() const
Definition: eda_rect.h:113
#define max(a, b)
Definition: auxiliary.h:86
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
int DIALOG_SHIM::ShowQuasiModal ( )
inherited

Definition at line 327 of file dialog_shim.cpp.

References DBG, DIALOG_SHIM::m_qmodal_loop, DIALOG_SHIM::m_qmodal_parent_disabler, DIALOG_SHIM::m_qmodal_showing, DIALOG_SHIM::Show(), and WX_EVENT_LOOP.

Referenced by SCH_EDIT_FRAME::EditComponent(), SCH_EDIT_FRAME::EditComponentFieldText(), LIB_EDIT_FRAME::EditField(), EDIT_TOOL::ExchangeFootprints(), PCB_EDIT_FRAME::InstallExchangeModuleFrame(), SCH_EDIT_FRAME::InstallHierarchyFrame(), PCB_BASE_FRAME::InstallPadOptionsFrame(), InvokeDialogEditComponentsLibId(), InvokeDialogUpdateFields(), LIB_EDIT_FRAME::OnEditComponentProperties(), PCB_EDIT_FRAME::OnEditTracksAndVias(), SCH_EDIT_FRAME::OnLaunchBomManager(), SCH_EDIT_FRAME::OnRemapSymbols(), LIB_VIEW_FRAME::OnSelectSymbol(), SCH_EDIT_FRAME::OpenProjectFiles(), EDIT_TOOL::Properties(), SCH_BASE_FRAME::SelectComponentFromLibTree(), and PCB_BASE_FRAME::SelectFootprintFromLibTree().

328 {
329  // This is an exception safe way to zero a pointer before returning.
330  // Yes, even though DismissModal() clears this first normally, this is
331  // here in case there's an exception before the dialog is dismissed.
332  struct NULLER
333  {
334  void*& m_what;
335  NULLER( void*& aPtr ) : m_what( aPtr ) {}
336  ~NULLER() { m_what = 0; } // indeed, set it to NULL on destruction
337  } clear_this( (void*&) m_qmodal_loop );
338 
339  // release the mouse if it's currently captured as the window having it
340  // will be disabled when this dialog is shown -- but will still keep the
341  // capture making it impossible to do anything in the modal dialog itself
342  wxWindow* win = wxWindow::GetCapture();
343  if( win )
344  win->ReleaseMouse();
345 
346  // Get the optimal parent
347  wxWindow* parent = GetParentForModalDialog( GetParent(), GetWindowStyle() );
348 
349  // Show the optimal parent
350  DBG( if( parent ) printf( "%s: optimal parent: %s\n", __func__, typeid(*parent).name() );)
351 
352  wxASSERT_MSG( !m_qmodal_parent_disabler,
353  wxT( "Caller using ShowQuasiModal() twice on same window?" ) );
354 
355  // quasi-modal: disable only my "optimal" parent
357 
358 #ifdef __WXMAC__
359  // Apple in its infinite wisdom will raise a disabled window before even passing
360  // us the event, so we have no way to stop it. Instead, we must set an order on
361  // the windows so that the quasi-modal will be pushed in front of the disabled
362  // window when it is raised.
363  ReparentQuasiModal();
364 #endif
365  Show( true );
366 
367  m_qmodal_showing = true;
368 
369  WX_EVENT_LOOP event_loop;
370 
371  m_qmodal_loop = &event_loop;
372 
373  event_loop.Run();
374 
375  m_qmodal_showing = false;
376 
377  return GetReturnCode();
378 }
bool m_qmodal_showing
Definition: dialog_shim.h:183
#define WX_EVENT_LOOP
Definition: kiway_player.h:100
WX_EVENT_LOOP * m_qmodal_loop
Definition: dialog_shim.h:182
bool Show(bool show) override
WDO_ENABLE_DISABLE * m_qmodal_parent_disabler
Definition: dialog_shim.h:184
Toggle a window&#39;s "enable" status to disabled, then enabled on destruction.
Definition: dialog_shim.cpp:33
#define DBG(x)
Definition: fctsys.h:33
bool DIALOG_PAD_PROPERTIES::TransferDataFromWindow ( )
overrideprivate

Updates the different parameters for the component being edited.

Automatically fired from the OK button click.

Definition at line 1377 of file dialog_pad_properties.cpp.

References MODULE::CalculateBoundingBox(), EDA_ITEM::ClearFlags(), D_PAD::DeletePrimitivesList(), DO_NOT_DRAW, FlipLayerMask(), D_PAD::FlipPrimitives(), D_PAD::GetAnchorPadShape(), D_PAD::GetAttribute(), D_PAD::GetBoundingBox(), EDA_DRAW_FRAME::GetCanvas(), D_PAD::GetCustomShapeInZoneOpt(), D_PAD::GetDelta(), D_PAD::GetDrillShape(), D_PAD::GetDrillSize(), D_PAD::GetLayerSet(), D_PAD::GetLocalClearance(), D_PAD::GetLocalSolderMaskMargin(), D_PAD::GetLocalSolderPasteMargin(), D_PAD::GetLocalSolderPasteMarginRatio(), D_PAD::GetName(), BOARD_CONNECTED_ITEM::GetNetCode(), D_PAD::GetOffset(), MODULE::GetOrientation(), D_PAD::GetOrientation(), D_PAD::GetPadToDieLength(), D_PAD::GetParent(), MODULE::GetPosition(), D_PAD::GetPosition(), D_PAD::GetPrimitives(), D_PAD::GetRoundRectRadiusRatio(), NET_SELECTOR::GetSelectedNetcode(), D_PAD::GetShape(), D_PAD::GetSize(), D_PAD::GetThermalGap(), D_PAD::GetThermalWidth(), D_PAD::GetZoneConnection(), m_board, m_currentPad, m_isFlipped, DIALOG_PAD_PROPERTIES_BASE::m_localSettingsPanel, m_padMaster, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_panelGeneral, m_parent, BOARD::m_Status_Pcb, COMMIT::Modify(), PAD_ATTRIB_HOLE_NOT_PLATED, PAD_SHAPE_CUSTOM, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_ZONE_CONN_FULL, PAD_ZONE_CONN_NONE, padValuesOK(), BOARD_COMMIT::Push(), EDA_DRAW_PANEL::RefreshDrawingRect(), RotatePoint(), D_PAD::SetAnchorPadShape(), D_PAD::SetAttribute(), D_PAD::SetCustomShapeInZoneOpt(), D_PAD::SetDelta(), D_PAD::SetDrillShape(), D_PAD::SetDrillSize(), EDA_ITEM::SetFlags(), MODULE::SetLastEditTime(), D_PAD::SetLayerSet(), D_PAD::SetLocalClearance(), D_PAD::SetLocalSolderMaskMargin(), D_PAD::SetLocalSolderPasteMargin(), D_PAD::SetLocalSolderPasteMarginRatio(), EDA_DRAW_FRAME::SetMsgPanel(), D_PAD::SetName(), BOARD_CONNECTED_ITEM::SetNetCode(), D_PAD::SetOffset(), D_PAD::SetOrientation(), D_PAD::SetPadToDieLength(), D_PAD::SetPos0(), D_PAD::SetPosition(), D_PAD::SetPrimitives(), D_PAD::SetRoundRectRadiusRatio(), D_PAD::SetShape(), D_PAD::SetSize(), D_PAD::SetThermalGap(), D_PAD::SetThermalWidth(), D_PAD::SetZoneConnection(), transferDataToPad(), NETINFO_LIST::UNCONNECTED, and wxPoint::y.

Referenced by OnUpdateUINonCopperWarning().

1378 {
1379  BOARD_COMMIT commit( m_parent );
1380 
1381  if( !wxDialog::TransferDataFromWindow() )
1382  return false;
1383 
1384  if( !m_panelGeneral->TransferDataFromWindow() )
1385  return false;
1386 
1387  if( !m_localSettingsPanel->TransferDataFromWindow() )
1388  return false;
1389 
1390  if( !padValuesOK() )
1391  return false;
1392 
1393  bool rastnestIsChanged = false;
1394  int isign = m_isFlipped ? -1 : 1;
1395 
1397  // m_padMaster is a pattern: ensure there is no net for this pad:
1399 
1400  if( !m_currentPad ) // Set current Pad parameters
1401  return true;
1402 
1403  commit.Modify( m_currentPad );
1404 
1405  // redraw the area where the pad was, without pad (delete pad on screen)
1409 
1410  // Update values
1413 
1415  {
1417  rastnestIsChanged = true;
1418  }
1419 
1420  wxSize size;
1421  MODULE* footprint = m_currentPad->GetParent();
1422 
1423  if( footprint )
1424  {
1425  footprint->SetLastEditTime();
1426 
1427  // compute the pos 0 value, i.e. pad position for footprint with orientation = 0
1428  // i.e. relative to footprint origin (footprint position)
1429  wxPoint pt = m_currentPad->GetPosition() - footprint->GetPosition();
1430  RotatePoint( &pt, -footprint->GetOrientation() );
1431  m_currentPad->SetPos0( pt );
1433  + footprint->GetOrientation() );
1434  }
1435 
1437 
1438  size = m_padMaster->GetDelta();
1439  size.y *= isign;
1440  m_currentPad->SetDelta( size );
1441 
1444 
1445  wxPoint offset = m_padMaster->GetOffset();
1446  offset.y *= isign;
1447  m_currentPad->SetOffset( offset );
1448 
1450 
1453 
1454 
1457 
1458  if( m_isFlipped )
1459  {
1462  }
1463 
1465  {
1466  rastnestIsChanged = true;
1468  }
1469 
1470  if( m_isFlipped )
1471  {
1473  }
1474 
1476 
1477  int padNetcode = NETINFO_LIST::UNCONNECTED;
1478 
1479  // For PAD_ATTRIB_HOLE_NOT_PLATED, ensure there is no net name selected
1481  padNetcode = m_PadNetSelector->GetSelectedNetcode();
1482 
1483  if( m_currentPad->GetNetCode() != padNetcode )
1484  {
1485  rastnestIsChanged = true;
1486  m_currentPad->SetNetCode( padNetcode );
1487  }
1488 
1496 
1498  {
1501  else
1503  }
1504  else
1506 
1507 
1508  // rounded rect pads with radius ratio = 0 are in fact rect pads.
1509  // So set the right shape (and perhaps issues with a radius = 0)
1512  {
1514  }
1515 
1516  // define the way the clearance area is defined in zones
1518 
1519  if( footprint )
1520  footprint->CalculateBoundingBox();
1521 
1523 
1524  // redraw the area where the pad was
1526 
1527  commit.Push( _( "Modify pad" ) );
1528 
1529  if( rastnestIsChanged ) // The net ratsnest must be recalculated
1530  m_board->m_Status_Pcb = 0;
1531 
1532  return true;
1533 }
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:226
LSET FlipLayerMask(LSET aMask, int aCopperLayersCount)
Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask, paste, solder layers are swapped internal layers are flipped only if the copper layers count is known.
Definition: lset.cpp:518
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives() const
Accessor to the basic shape list.
Definition: class_pad.h:336
void FlipPrimitives()
Flip the basic shapes, in custom pads.
Definition: class_pad.cpp:451
virtual EDA_DRAW_PANEL * GetCanvas() const
Definition: draw_frame.h:388
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
void CalculateBoundingBox()
Function CalculateBoundingBox calculates the bounding box in board coordinates.
int GetPadToDieLength() const
Definition: class_pad.h:412
bool transferDataToPad(D_PAD *aPad)
Copy values from dialog field to aPad&#39;s members.
int GetLocalSolderMaskMargin() const
Definition: class_pad.h:414
MODULE * GetParent() const
Definition: class_pad.h:162
void SetPosition(const wxPoint &aPos) override
Definition: class_pad.h:219
virtual void RefreshDrawingRect(const EDA_RECT &aRect, bool aEraseBackground=true)
Function RefreshDrawingRect redraws the contents of aRect in drawing units.
int GetSelectedNetcode()
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
void SetDrillSize(const wxSize &aSize)
Definition: class_pad.h:274
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
void SetRoundRectRadiusRatio(double aRadiusScale)
has meaning only for rounded rect pads Set the scaling factor between the smaller Y or Y size and the...
Definition: class_pad.h:646
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
Pads are not covered.
Definition: zones.h:52
void SetAnchorPadShape(PAD_SHAPE_T aShape)
Function SetAnchorPadShape Set the shape of the anchor pad for custm shped pads.
Definition: class_pad.h:253
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:256
void SetZoneConnection(ZoneConnection aType)
Definition: class_pad.h:489
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
void SetName(const wxString &aName)
Set the pad name (sometimes called pad number, although it can be an array reference like AA12)...
Definition: class_pad.h:182
double GetOrientation() const
Definition: class_module.h:189
void SetPos0(const wxPoint &aPos)
Definition: class_pad.h:262
ZoneConnection GetZoneConnection() const
Definition: class_pad.cpp:687
LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
Definition: class_pad.h:402
void SetLastEditTime(timestamp_t aTime)
Definition: class_module.h:314
int GetThermalWidth() const
Definition: class_pad.cpp:698
int GetThermalGap() const
Definition: class_pad.cpp:709
void SetThermalWidth(int aWidth)
Definition: class_pad.h:492
const wxSize & GetSize() const
Definition: class_pad.h:269
void SetSize(const wxSize &aSize)
Definition: class_pad.h:268
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Function SetNetCode sets net using a net code.
const wxString & GetName() const
Definition: class_pad.h:190
int GetLocalSolderPasteMargin() const
Definition: class_pad.h:420
void SetPadToDieLength(int aLength)
Definition: class_pad.h:411
void SetAttribute(PAD_ATTR_T aAttribute)
Definition: class_pad.cpp:409
int GetLocalClearance() const
Definition: class_pad.h:417
void SetLocalClearance(int aClearance)
Definition: class_pad.h:418
double GetLocalSolderPasteMarginRatio() const
Definition: class_pad.h:423
void SetLocalSolderPasteMarginRatio(double aRatio)
Definition: class_pad.h:424
int GetNetCode() const
Function GetNetCode.
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:401
double GetRoundRectRadiusRatio() const
has meaning only for rounded rect pads
Definition: class_pad.h:634
void SetDrillShape(PAD_DRILL_SHAPE_T aDrillShape)
Definition: class_pad.h:386
void SetLocalSolderMaskMargin(int aMargin)
Definition: class_pad.h:415
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
Definition: class_pad.h:232
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
const wxSize & GetDelta() const
Definition: class_pad.h:272
void SetShape(PAD_SHAPE_T aShape)
Definition: class_pad.h:217
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:418
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:257
bool padValuesOK()
test if all values are acceptable for the pad
void SetLocalSolderPasteMargin(int aMargin)
Definition: class_pad.h:421
void SetCustomShapeInZoneOpt(CUST_PAD_SHAPE_IN_ZONE aOption)
Set the option for the custom pad shape to use as clearance area in copper zones. ...
Definition: class_pad.h:242
const wxPoint GetPosition() const override
Definition: class_pad.h:220
void SetOffset(const wxPoint &aOffset)
Definition: class_pad.h:277
void SetThermalGap(int aGap)
Definition: class_pad.h:495
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
Definition: netinfo.h:469
const wxPoint GetPosition() const override
Definition: class_module.h:184
bool SetPrimitives(const std::vector< PAD_CS_PRIMITIVE > &aPrimitivesList)
Import to the basic shape list.
void DeletePrimitivesList()
clear the basic shapes list
const EDA_RECT GetBoundingBox() const override
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
Definition: class_pad.cpp:216
const wxPoint & GetOffset() const
Definition: class_pad.h:278
#define DO_NOT_DRAW
Used to disable draw function.
Definition: base_struct.h:126
void SetDelta(const wxSize &aSize)
Definition: class_pad.h:271
pads are covered by copper
Definition: zones.h:54
int m_Status_Pcb
Flags used in ratsnest calculation and update.
Definition: class_board.h:240
bool DIALOG_PAD_PROPERTIES::transferDataToPad ( D_PAD aPad)
private

Copy values from dialog field to aPad's members.

Definition at line 1536 of file dialog_pad_properties.cpp.

References LSET::AllCuMask(), B_Adhes, B_Cu, B_Mask, B_Paste, B_SilkS, CHOICE_SHAPE_CUSTOM_RECT_ANCHOR, code_shape, code_type, CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL, CUST_PAD_SHAPE_IN_ZONE_OUTLINE, delta, DisplayError(), Dwgs_User, Eco1_User, Eco2_User, F_Adhes, F_Cu, F_Mask, F_Paste, F_SilkS, D_PAD::GetAnchorPadShape(), D_PAD::GetAttribute(), NET_SELECTOR::GetSelectedNetcode(), D_PAD::GetShape(), D_PAD::GetSize(), UNIT_BINDER::GetValue(), m_clearance, DIALOG_PAD_PROPERTIES_BASE::m_holeShapeCtrl, m_holeX, m_holeY, DIALOG_PAD_PROPERTIES_BASE::m_localSettingsPanel, m_maskClearance, m_offsetX, m_offsetY, m_OrientValidator, m_OrientValue, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerAdhCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerDraft, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO1, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerECO2, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerMaskCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerPateCu, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCmp, DIALOG_PAD_PROPERTIES_BASE::m_PadLayerSilkCu, DIALOG_PAD_PROPERTIES_BASE::m_PadNetSelector, DIALOG_PAD_PROPERTIES_BASE::m_PadNumCtrl, DIALOG_PAD_PROPERTIES_BASE::m_PadShape, m_padToDie, DIALOG_PAD_PROPERTIES_BASE::m_PadType, DIALOG_PAD_PROPERTIES_BASE::m_panelGeneral, m_pasteClearance, m_posX, m_posY, m_primitives, DIALOG_PAD_PROPERTIES_BASE::m_rbCopperLayersSel, m_sizeX, m_sizeY, DIALOG_PAD_PROPERTIES_BASE::m_SolderPasteMarginRatioCtrl, m_spokeWidth, DIALOG_PAD_PROPERTIES_BASE::m_tcCornerSizeRatio, m_thermalGap, DIALOG_PAD_PROPERTIES_BASE::m_trapAxisCtrl, m_trapDelta, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionChoice, DIALOG_PAD_PROPERTIES_BASE::m_ZoneConnectionCustom, DIALOG_PAD_PROPERTIES_BASE::m_ZoneCustomPadShape, PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_CIRCLE, PAD_DRILL_SHAPE_OBLONG, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, PAD_ZONE_CONN_FULL, PAD_ZONE_CONN_INHERITED, PAD_ZONE_CONN_NONE, PAD_ZONE_CONN_THERMAL, D_PAD::SetAnchorPadShape(), D_PAD::SetAttribute(), D_PAD::SetCustomShapeInZoneOpt(), D_PAD::SetDelta(), D_PAD::SetDrillShape(), D_PAD::SetDrillSize(), D_PAD::SetLayerSet(), D_PAD::SetLocalClearance(), D_PAD::SetLocalSolderMaskMargin(), D_PAD::SetLocalSolderPasteMargin(), D_PAD::SetLocalSolderPasteMarginRatio(), D_PAD::SetName(), BOARD_CONNECTED_ITEM::SetNetCode(), D_PAD::SetOffset(), D_PAD::SetOrientation(), D_PAD::SetPadToDieLength(), D_PAD::SetPos0(), D_PAD::SetPosition(), D_PAD::SetPrimitives(), D_PAD::SetRoundRectRadiusRatio(), D_PAD::SetShape(), D_PAD::SetSize(), D_PAD::SetThermalGap(), D_PAD::SetThermalWidth(), D_PAD::SetZoneConnection(), and NETINFO_LIST::UNCONNECTED.

Referenced by editPrimitive(), onAddPrimitive(), onCornerRadiusChange(), onCornerSizePercentChange(), onDeletePrimitive(), OnDrillShapeSelected(), onDuplicatePrimitive(), onGeometryTransform(), OnPadShapeSelection(), OnSetLayers(), OnValuesChanged(), PadOrientEvent(), PadTypeSelected(), padValuesOK(), and TransferDataFromWindow().

1537 {
1538  wxString msg;
1539 
1540  if( !Validate() )
1541  return true;
1542  if( !m_panelGeneral->Validate() )
1543  return true;
1544  if( !m_localSettingsPanel->Validate() )
1545  return true;
1546 
1547  m_OrientValidator.TransferFromWindow();
1548 
1549  aPad->SetAttribute( code_type[m_PadType->GetSelection()] );
1550  aPad->SetShape( code_shape[m_PadShape->GetSelection()] );
1553 
1554  if( aPad->GetShape() == PAD_SHAPE_CUSTOM )
1555  aPad->SetPrimitives( m_primitives );
1556 
1557  // Read pad clearances values:
1562  aPad->SetThermalGap( m_thermalGap.GetValue() );
1563  double dtmp = 0.0;
1564  msg = m_SolderPasteMarginRatioCtrl->GetValue();
1565  msg.ToDouble( &dtmp );
1566 
1567  // A -50% margin ratio means no paste on a pad, the ratio must be >= -50%
1568  if( dtmp < -50.0 )
1569  dtmp = -50.0;
1570  // A margin ratio is always <= 0
1571  // 0 means use full pad copper area
1572  if( dtmp > 0.0 )
1573  dtmp = 0.0;
1574 
1575  aPad->SetLocalSolderPasteMarginRatio( dtmp / 100 );
1576 
1577  switch( m_ZoneConnectionChoice->GetSelection() )
1578  {
1579  default:
1580  case 0: aPad->SetZoneConnection( PAD_ZONE_CONN_INHERITED ); break;
1581  case 1: aPad->SetZoneConnection( PAD_ZONE_CONN_FULL ); break;
1582  case 2: aPad->SetZoneConnection( PAD_ZONE_CONN_THERMAL ); break;
1583  case 3: aPad->SetZoneConnection( PAD_ZONE_CONN_NONE ); break;
1584  }
1585 
1586  // Custom shape has only 2 options:
1587  if( aPad->GetShape() == PAD_SHAPE_CUSTOM )
1588  {
1589  if( m_ZoneConnectionCustom->GetSelection() == 0 )
1591  else
1593  }
1594 
1595  aPad->SetPosition( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) );
1596  aPad->SetPos0( wxPoint( m_posX.GetValue(), m_posY.GetValue() ) );
1597 
1598  if( m_holeShapeCtrl->GetSelection() == 0 )
1599  {
1601  aPad->SetDrillSize( wxSize( m_holeX.GetValue(), m_holeX.GetValue() ) );
1602  }
1603  else
1604  {
1606  aPad->SetDrillSize( wxSize( m_holeX.GetValue(), m_holeY.GetValue() ) );
1607  }
1608 
1609  if( aPad->GetShape() == PAD_SHAPE_CIRCLE )
1610  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
1611  else
1612  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeY.GetValue() ) );
1613 
1614  // Read pad length die
1616 
1617  // For a trapezoid, test delta value (be sure delta is not too large for pad size)
1618  // remember DeltaSize.x is the Y size variation
1619  bool error = false;
1620 
1621  if( aPad->GetShape() == PAD_SHAPE_TRAPEZOID )
1622  {
1623  wxSize delta;
1624 
1625  // For a trapezoid, only one of delta.x or delta.y is not 0, depending on
1626  // the direction.
1627  if( m_trapAxisCtrl->GetSelection() == 0 )
1628  delta.x = m_trapDelta.GetValue();
1629  else
1630  delta.y = m_trapDelta.GetValue();
1631 
1632  if( delta.x < 0 && delta.x <= -aPad->GetSize().y )
1633  {
1634  delta.x = -aPad->GetSize().y + 2;
1635  error = true;
1636  }
1637 
1638  if( delta.x > 0 && delta.x >= aPad->GetSize().y )
1639  {
1640  delta.x = aPad->GetSize().y - 2;
1641  error = true;
1642  }
1643 
1644  if( delta.y < 0 && delta.y <= -aPad->GetSize().x )
1645  {
1646  delta.y = -aPad->GetSize().x + 2;
1647  error = true;
1648  }
1649 
1650  if( delta.y > 0 && delta.y >= aPad->GetSize().x )
1651  {
1652  delta.y = aPad->GetSize().x - 2;
1653  error = true;
1654  }
1655 
1656  aPad->SetDelta( delta );
1657  }
1658 
1660  aPad->SetOrientation( m_OrientValue * 10.0 );
1661  aPad->SetName( m_PadNumCtrl->GetValue() );
1663 
1664  // Clear some values, according to the pad type and shape
1665  switch( aPad->GetShape() )
1666  {
1667  case PAD_SHAPE_CIRCLE:
1668  aPad->SetOffset( wxPoint( 0, 0 ) );
1669  aPad->SetDelta( wxSize( 0, 0 ) );
1670  break;
1671 
1672  case PAD_SHAPE_RECT:
1673  aPad->SetDelta( wxSize( 0, 0 ) );
1674  break;
1675 
1676  case PAD_SHAPE_OVAL:
1677  aPad->SetDelta( wxSize( 0, 0 ) );
1678  break;
1679 
1680  case PAD_SHAPE_TRAPEZOID:
1681  break;
1682 
1683  case PAD_SHAPE_ROUNDRECT:
1684  aPad->SetDelta( wxSize( 0, 0 ) );
1685  break;
1686 
1687  case PAD_SHAPE_CUSTOM:
1688  aPad->SetOffset( wxPoint( 0, 0 ) );
1689  aPad->SetDelta( wxSize( 0, 0 ) );
1690 
1691  // The pad custom has a "anchor pad" (a basic shape: round or rect pad)
1692  // that is the minimal area of this pad, and is usefull to ensure a hole
1693  // diameter is acceptable, and is used in Gerber files as flashed area
1694  // reference
1695  if( aPad->GetAnchorPadShape() == PAD_SHAPE_CIRCLE )
1696  aPad->SetSize( wxSize( m_sizeX.GetValue(), m_sizeX.GetValue() ) );
1697 
1698  // define the way the clearance area is defined in zones
1699  aPad->SetCustomShapeInZoneOpt( m_ZoneCustomPadShape->GetSelection() == 0 ?
1702  break;
1703 
1704  default:
1705  ;
1706  }
1707 
1708  switch( aPad->GetAttribute() )
1709  {
1710  case PAD_ATTRIB_STANDARD:
1711  break;
1712 
1713  case PAD_ATTRIB_CONN:
1714  case PAD_ATTRIB_SMD:
1715  // SMD and PAD_ATTRIB_CONN has no hole.
1716  // basically, SMD and PAD_ATTRIB_CONN are same type of pads
1717  // PAD_ATTRIB_CONN has just a default non technical layers that differs from SMD
1718  // and are intended to be used in virtual edge board connectors
1719  // However we can accept a non null offset,
1720  // mainly to allow complex pads build from a set of basic pad shapes
1721  aPad->SetDrillSize( wxSize( 0, 0 ) );
1722  break;
1723 
1725  // Mechanical purpose only:
1726  // no offset, no net name, no pad name allowed
1727  aPad->SetOffset( wxPoint( 0, 0 ) );
1728  aPad->SetName( wxEmptyString );
1730  break;
1731 
1732  default:
1733  DisplayError( NULL, wxT( "Error: unknown pad type" ) );
1734  break;
1735  }
1736 
1737  if( aPad->GetShape() == PAD_SHAPE_ROUNDRECT )
1738  {
1739  wxString value = m_tcCornerSizeRatio->GetValue();
1740  double rrRadiusRatioPercent;
1741 
1742  if( value.ToDouble( &rrRadiusRatioPercent ) )
1743  aPad->SetRoundRectRadiusRatio( rrRadiusRatioPercent / 100.0 );
1744  }
1745 
1746  LSET padLayerMask;
1747 
1748  switch( m_rbCopperLayersSel->GetSelection() )
1749  {
1750  case 0: padLayerMask.set( F_Cu ); break;
1751  case 1: padLayerMask.set( B_Cu ); break;
1752  case 2: padLayerMask |= LSET::AllCuMask(); break;
1753  case 3: break; // No copper layers
1754  }
1755 
1756  if( m_PadLayerAdhCmp->GetValue() )
1757  padLayerMask.set( F_Adhes );
1758 
1759  if( m_PadLayerAdhCu->GetValue() )
1760  padLayerMask.set( B_Adhes );
1761 
1762  if( m_PadLayerPateCmp->GetValue() )
1763  padLayerMask.set( F_Paste );
1764 
1765  if( m_PadLayerPateCu->GetValue() )
1766  padLayerMask.set( B_Paste );
1767 
1768  if( m_PadLayerSilkCmp->GetValue() )
1769  padLayerMask.set( F_SilkS );
1770 
1771  if( m_PadLayerSilkCu->GetValue() )
1772  padLayerMask.set( B_SilkS );
1773 
1774  if( m_PadLayerMaskCmp->GetValue() )
1775  padLayerMask.set( F_Mask );
1776 
1777  if( m_PadLayerMaskCu->GetValue() )
1778  padLayerMask.set( B_Mask );
1779 
1780  if( m_PadLayerECO1->GetValue() )
1781  padLayerMask.set( Eco1_User );
1782 
1783  if( m_PadLayerECO2->GetValue() )
1784  padLayerMask.set( Eco2_User );
1785 
1786  if( m_PadLayerDraft->GetValue() )
1787  padLayerMask.set( Dwgs_User );
1788 
1789  aPad->SetLayerSet( padLayerMask );
1790 
1791  return error;
1792 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:226
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
wxFloatingPointValidator< double > m_OrientValidator
void SetPosition(const wxPoint &aPos) override
Definition: class_pad.h:219
int GetSelectedNetcode()