51#include <wx/choicdlg.h>
100#define CONN_DLG_TYPE 2
101#define NPTH_DLG_TYPE 3
102#define APERTURE_DLG_TYPE 4
116 m_canUpdate( false ),
117 m_posX( aParent, m_posXLabel, m_posXCtrl, m_posXUnits ),
118 m_posY( aParent, m_posYLabel, m_posYCtrl, m_posYUnits ),
119 m_sizeX( aParent, m_sizeXLabel, m_sizeXCtrl, m_sizeXUnits ),
120 m_sizeY( aParent, m_sizeYLabel, m_sizeYCtrl, m_sizeYUnits ),
121 m_offsetX( aParent, m_offsetXLabel, m_offsetXCtrl, m_offsetXUnits ),
122 m_offsetY( aParent, m_offsetYLabel, m_offsetYCtrl, m_offsetYUnits ),
123 m_padToDie( aParent, m_padToDieLabel, m_padToDieCtrl, m_padToDieUnits ),
124 m_trapDelta( aParent, m_trapDeltaLabel, m_trapDeltaCtrl, m_trapDeltaUnits ),
125 m_cornerRadius( aParent, m_cornerRadiusLabel, m_cornerRadiusCtrl, m_cornerRadiusUnits ),
126 m_cornerRatio( aParent, m_cornerRatioLabel, m_cornerRatioCtrl, m_cornerRatioUnits ),
127 m_chamferRatio( aParent, m_chamferRatioLabel, m_chamferRatioCtrl, m_chamferRatioUnits ),
128 m_mixedCornerRatio( aParent, m_mixedCornerRatioLabel, m_mixedCornerRatioCtrl,
129 m_mixedCornerRatioUnits ),
130 m_mixedChamferRatio( aParent, m_mixedChamferRatioLabel, m_mixedChamferRatioCtrl,
131 m_mixedChamferRatioUnits ),
132 m_holeX( aParent, m_holeXLabel, m_holeXCtrl, m_holeXUnits ),
133 m_holeY( aParent, m_holeYLabel, m_holeYCtrl, m_holeYUnits ),
134 m_clearance( aParent, m_clearanceLabel, m_clearanceCtrl, m_clearanceUnits ),
135 m_maskMargin( aParent, m_maskMarginLabel, m_maskMarginCtrl, m_maskMarginUnits ),
136 m_pasteMargin( aParent, m_pasteMarginLabel, m_pasteMarginCtrl, m_pasteMarginUnits ),
137 m_pasteMarginRatio( aParent, m_pasteMarginRatioLabel, m_pasteMarginRatioCtrl,
138 m_pasteMarginRatioUnits ),
139 m_thermalGap( aParent, m_thermalGapLabel, m_thermalGapCtrl, m_thermalGapUnits ),
140 m_spokeWidth( aParent, m_spokeWidthLabel, m_spokeWidthCtrl, m_spokeWidthUnits ),
141 m_spokeAngle( aParent, m_spokeAngleLabel, m_spokeAngleCtrl, m_spokeAngleUnits ),
142 m_pad_orientation( aParent, m_PadOrientText, m_cb_padrotation, m_orientationUnits ),
143 m_teardropMaxLenSetting( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
144 m_teardropMaxHeightSetting( aParent, m_stTdMaxSize, m_tcMaxHeight, m_stMaxHeightUnits )
172 SetTitle(
_(
"Pad Properties" ) );
180 SetTitle(
_(
"Default Pad Properties for Add Pad Tool" ) );
221 infoFont.SetStyle( wxFONTSTYLE_ITALIC );
255 wxUpdateUIEvent dummyUI;
346 settings->SetHighContrast(
false );
347 settings->m_ContrastModeDisplay = HIGH_CONTRAST_MODE::NORMAL;
407 wxObject* ctrl =
event.GetEventObject();
408 wxString value =
event.GetString();
409 bool changed =
false;
415 if( value.ToDouble( &ratioPercent ) )
418 if( ratioPercent < 0.0 )
423 else if( ratioPercent > 50.0 )
441 if( value.ToDouble( &ratioPercent ) )
444 if( ratioPercent < 0.0 )
449 else if( ratioPercent > 50.0 )
497 if( footprint->IsFlipped() )
501 relPos.
y = - relPos.
y;
508 msg.Printf(
_(
"Footprint %s (%s), %s, rotated %g deg"),
509 footprint->Reference().GetShownText(
false ),
510 footprint->Value().GetShownText(
false ),
511 footprint->IsFlipped() ?
_(
"back side (mirrored)" ) :
_(
"front side" ),
512 footprint->GetOrientation().AsDegrees() );
609 case PAD_SHAPE::CHAMFERED_RECT:
616 case PAD_SHAPE::CUSTOM:
683 wxCommandEvent cmd_event;
695 return wxString::Format( wxT(
"(X:%s Y:%s)" ),
706 itemCol.SetImage(-1);
708 for(
int ii = 0; ii < 5; ++ii )
715 const std::shared_ptr<PCB_SHAPE>& primitive =
m_primitives[ii];
717 for( wxString& s : bs_info )
721 primitive->GetWidth() );
723 switch( primitive->GetShape() )
725 case SHAPE_T::SEGMENT:
726 bs_info[0] =
_(
"Segment" );
731 case SHAPE_T::BEZIER:
732 bs_info[0] =
_(
"Bezier" );
738 bs_info[0] =
_(
"Arc" );
744 case SHAPE_T::CIRCLE:
745 if( primitive->GetWidth() )
746 bs_info[0] =
_(
"Ring" );
748 bs_info[0] =
_(
"Circle" );
752 primitive->GetRadius() );
756 bs_info[0] =
_(
"Polygon" );
757 bs_info[1] = wxString::Format(
_(
"corners count %d" ),
758 primitive->GetPolyShape().Outline( 0 ).PointCount() );
762 if( primitive->IsAnnotationProxy() )
763 bs_info[0] =
_(
"Number box" );
765 bs_info[0] =
_(
"Rectangle" );
772 bs_info[0] =
_(
"Unknown primitive" );
779 for(
int jj = 0, col = 0; jj < 5; ++jj )
784 for(
unsigned ii = 0; ii < 5; ++ii )
806 settings->SetHighContrast(
false );
807 settings->m_ContrastModeDisplay = HIGH_CONTRAST_MODE::NORMAL;
925 for(
size_t i = 0; i <
m_notebook->GetPageCount(); ++i )
992 bool hasConnection =
true;
993 bool hasProperty =
true;
997 case PTH_DLG_TYPE: hasHole =
true; hasConnection =
true; hasProperty =
true;
break;
998 case SMD_DLG_TYPE: hasHole =
false; hasConnection =
true; hasProperty =
true;
break;
999 case CONN_DLG_TYPE: hasHole =
false; hasConnection =
true; hasProperty =
true;
break;
1000 case NPTH_DLG_TYPE: hasHole =
true; hasConnection =
false; hasProperty =
false;
break;
1001 case APERTURE_DLG_TYPE: hasHole =
false; hasConnection =
false; hasProperty =
true;
break;
1021 if( !hasConnection )
1048 bool hasHole =
true;
1049 bool hasConnection =
true;
1053 case PTH_DLG_TYPE: hasHole =
true; hasConnection =
true;
break;
1054 case SMD_DLG_TYPE: hasHole =
false; hasConnection =
true;
break;
1055 case CONN_DLG_TYPE: hasHole =
false; hasConnection =
true;
break;
1056 case NPTH_DLG_TYPE: hasHole =
true; hasConnection =
false;
break;
1107 if( cu_set.test(
F_Cu ) && cu_set.test(
B_Cu ) )
1109 else if( cu_set.test(
F_Cu ) )
1111 else if( cu_set.test(
B_Cu ) )
1149 bool keep_top_bottom )
1156 if( !layer_mask.any() )
1161 else if( !remove_unconnected )
1163 else if( keep_top_bottom )
1171 if( !layer_mask.any() )
1174 if( layer_mask.test(
F_Cu ) )
1182 if( !layer_mask.any() )
1185 if( layer_mask.test(
F_Cu ) )
1193 if( !layer_mask.any() )
1196 if( layer_mask.test(
F_Cu ) && layer_mask.test(
B_Cu ) )
1198 else if( layer_mask.test(
F_Cu ) )
1200 else if( layer_mask.test(
B_Cu ) )
1208 if( !layer_mask.any() )
1276 wxArrayString error_msgs;
1277 wxArrayString warning_msgs;
1287 if( pad_size.
x <= 0 )
1288 error_msgs.Add(
_(
"Error: Pad must have a positive size." ) );
1292 if( pad_size.
x <= 0 || pad_size.
y <= 0 )
1293 error_msgs.Add(
_(
"Error: Pad must have a positive size." ) );
1307 warning_msgs.Add(
_(
"Warning: Pad hole not inside pad shape." ) );
1320 warning_msgs.Add(
_(
"Warning: Pad hole will leave no copper." ) );
1325 warning_msgs.Add(
_(
"Warning: Negative local clearance values will have no effect." ) );
1338 BOX2I shapeBBox = shape->GetBoundingBox();
1342 warning_msgs.Add(
_(
"Warning: Negative solder mask clearances larger than "
1343 "some shape primitives. Results may be surprising." ) );
1349 else if( absMargin > pad_size.
x || absMargin > pad_size.
y )
1351 warning_msgs.Add(
_(
"Warning: Negative solder mask clearance larger than pad. No "
1352 "solder mask will be generated." ) );
1365 paste_size.x = pad_size.
x + paste_margin +
KiROUND( pad_size.
x * paste_ratio );
1366 paste_size.y = pad_size.
y + paste_margin +
KiROUND( pad_size.
y * paste_ratio );
1368 if( paste_size.x <= 0 || paste_size.y <= 0 )
1370 warning_msgs.Add(
_(
"Warning: Negative solder paste margins larger than pad. No solder "
1371 "paste mask will be generated." ) );
1376 if( padlayers_mask == 0 )
1377 error_msgs.Add(
_(
"Error: pad has no layer." ) );
1379 if( !padlayers_mask[
F_Cu] && !padlayers_mask[
B_Cu] )
1383 warning_msgs.Add(
_(
"Warning: Plated through holes should normally have a copper pad "
1384 "on at least one layer." ) );
1389 error_msgs.Add(
_(
"Error: Trapazoid delta is too large." ) );
1393 case PAD_ATTRIB::NPTH:
1394 case PAD_ATTRIB::PTH:
1395 if( drill_size.
x <= 0
1398 error_msgs.Add(
_(
"Error: Through hole pad has no hole." ) );
1402 case PAD_ATTRIB::CONN:
1405 warning_msgs.Add(
_(
"Warning: Connector pads normally have no solder paste. Use a "
1406 "SMD pad instead." ) );
1410 case PAD_ATTRIB::SMD:
1412 if( drill_size.
x > 0 || drill_size.
y > 0 )
1414 error_msgs.Add(
_(
"Error: SMD pad has a hole." ) );
1419 if( ( padlayers_mask[
F_Cu] && padlayers_mask[
B_Cu] ) || innerlayers_mask.count() != 0 )
1420 warning_msgs.Add(
_(
"Warning: SMD pad has no outer layers." ) );
1428 warning_msgs.Add(
_(
"Warning: Fiducial property makes no sense on NPTH pads." ) );
1434 warning_msgs.Add(
_(
"Warning: Testpoint property makes no sense on NPTH pads." ) );
1440 warning_msgs.Add(
_(
"Warning: Heatsink property makes no sense of NPTH pads." ) );
1446 warning_msgs.Add(
_(
"Warning: Castellated property is for PTH pads." ) );
1452 warning_msgs.Add(
_(
"Warning: BGA property is for SMD pads." ) );
1461 error_msgs.Add(
_(
"Error: Negative corner size." ) );
1463 warning_msgs.Add(
_(
"Warning: Corner size will make pad circular." ) );
1473 error_msgs.Add(
_(
"Error: Custom pad shape must resolve to a single polygon." ) );
1477 if( error_msgs.GetCount() || warning_msgs.GetCount() )
1479 wxString title = error_msgs.GetCount() ?
_(
"Pad Properties Errors" )
1480 :
_(
"Pad Properties Warnings" );
1483 wxArrayString msgs = error_msgs;
1485 for(
const wxString& msg : warning_msgs )
1493 return error_msgs.GetCount() == 0;
1507 #define SELECTED_ITEMS_LAYER Dwgs_User
1526 while( select >= 0 )
1533 view->
Add( dummyShape );
1546 int maxXExtent = std::max( abs( bbox.
GetLeft() ), abs( bbox.
GetRight() ) );
1547 int maxYExtent = std::max( abs( bbox.
GetTop() ), abs( bbox.
GetBottom() ) );
1550 if( maxXExtent > INT_MAX / 4 )
1551 maxXExtent = INT_MAX / 4;
1553 if( maxYExtent > INT_MAX / 4 )
1554 maxYExtent = INT_MAX / 4;
1558 viewBox.
Inflate( maxXExtent * 1.4, maxYExtent * 1.4 );
1559 canvasBox.
Inflate( maxXExtent * 2.0, maxYExtent * 2.0 );
1574 if( !wxDialog::TransferDataToWindow() )
1591 if( !wxDialog::TransferDataFromWindow() )
1688 relPos.
y = -relPos.
y;
1699 commit.
Push(
_(
"Modify pad" ) );
1711 case 0: prop = PAD_PROP::NONE;
break;
1712 case 1: prop = PAD_PROP::BGA;
break;
1713 case 2: prop = PAD_PROP::FIDUCIAL_LOCAL;
break;
1714 case 3: prop = PAD_PROP::FIDUCIAL_GLBL;
break;
1715 case 4: prop = PAD_PROP::TESTPOINT;
break;
1716 case 5: prop = PAD_PROP::HEATSINK;
break;
1717 case 6: prop = PAD_PROP::CASTELLATED;
break;
1781 if( aPad->
GetShape() == PAD_SHAPE::CUSTOM )
1833 if( aPad->
GetShape() == PAD_SHAPE::CIRCLE )
1843 if( aPad->
GetShape() == PAD_SHAPE::TRAPEZOID )
1924 if( aPad->
GetShape() == PAD_SHAPE::CUSTOM )
1943 case PAD_ATTRIB::PTH:
1946 case PAD_ATTRIB::CONN:
1947 case PAD_ATTRIB::SMD:
1957 case PAD_ATTRIB::NPTH:
1965 wxFAIL_MSG( wxT(
"DIALOG_PAD_PROPERTIES::transferDataToPad: unknown pad type" ) );
1969 if( aPad->
GetShape() == PAD_SHAPE::ROUNDRECT )
1973 else if( aPad->
GetShape() == PAD_SHAPE::CHAMFERED_RECT )
1998 switch( copperLayersChoice )
2026 switch( copperLayersChoice )
2028 case 0: padLayerMask.set(
F_Cu ).set(
B_Cu );
break;
2029 case 1: padLayerMask.set(
F_Cu );
break;
2030 case 2: padLayerMask.set(
B_Cu );
break;
2038 switch( copperLayersChoice )
2040 case 0: padLayerMask.set(
F_Cu );
break;
2041 case 1: padLayerMask.set(
B_Cu );
break;
2070 padLayerMask.set(
F_Mask );
2073 padLayerMask.set(
B_Mask );
2102 for(
size_t i = 0; i <
m_notebook->GetPageCount(); ++i )
2138 wxMessageBox(
_(
"No shape selected" ) );
2142 std::shared_ptr<PCB_SHAPE>& shape =
m_primitives[select];
2144 if( shape->GetShape() == SHAPE_T::POLY )
2148 if( dlg.ShowModal() != wxID_OK )
2158 if( dlg.ShowModal() != wxID_OK )
2199 std::vector<long> indexes;
2200 indexes.push_back( select );
2203 indexes.push_back( select );
2206 for(
unsigned ii = indexes.size(); ii > 0; --ii )
2219 wxString shapelist[] = {
2228 int type = wxGetSingleChoiceIndex(
_(
"Shape type:" ),
_(
"Add Primitive" ),
2229 arrayDim( shapelist ), shapelist, 0,
this );
2235 SHAPE_T listtype[] = { SHAPE_T::SEGMENT, SHAPE_T::ARC, SHAPE_T::BEZIER, SHAPE_T::CIRCLE,
2236 SHAPE_T::POLY, SHAPE_T::RECT };
2239 primitive->
SetShape( listtype[type] );
2241 if( type ==
static_cast<int>(
arrayDim( shapelist ) ) - 1 )
2245 PLOT_DASH_TYPE::SOLID ) );
2248 if( listtype[type] == SHAPE_T::POLY )
2252 if( dlg.ShowModal() != wxID_OK )
2259 if( dlg.ShowModal() != wxID_OK )
2278 wxMessageBox(
_(
"No shape selected" ) );
2283 std::vector<std::shared_ptr<PCB_SHAPE>> shapeList;
2291 if( dlg.ShowModal() != wxID_OK )
2309 wxMessageBox(
_(
"No shape selected" ) );
2314 std::vector<std::shared_ptr<PCB_SHAPE>> shapeList;
2322 if( dlg.ShowModal() != wxID_OK )
2328 std::vector<std::shared_ptr<PCB_SHAPE>> duplicates;
2330 std::move( duplicates.begin(), duplicates.end(), std::back_inserter(
m_primitives ) );
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
constexpr EDA_IU_SCALE pcbIUScale
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Revert the commit by restoring the modified items state.
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
TEARDROP_PARAMETERS & GetTeardropParams()
std::unique_ptr< PAD > m_Pad_Master
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
FOOTPRINT * GetParentFootprint() const
VECTOR2I GetFPRelativePosition() const
void SetFPRelativePosition(const VECTOR2I &aPos)
const NETINFO_LIST & GetNetInfo() const
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
bool LegacyTeardrops() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
coord_type GetTop() const
coord_type GetHeight() const
coord_type GetWidth() const
void Move(const Vec &aMoveVector)
Move the rectangle by the aMoveVector.
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
coord_type GetRight() const
coord_type GetLeft() const
const Vec & GetSize() const
coord_type GetBottom() const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
A dialog to edit basic shape parameters.
bool TransferDataFromWindow() override
Transfer data out of the GUI.
A dialog to edit basic polygonal shape parameters.
bool TransferDataFromWindow() override
Transfer data out of the GUI.
Class DIALOG_PAD_PROPERTIES_BASE.
wxStaticText * m_techLayersLabel
wxStaticText * m_staticTextInfoPaste
wxCheckBox * m_cbBottomLeft
wxCheckBox * m_cbBottomRight1
wxStaticBitmap * m_legacyTeardropsIcon
wxSpinCtrlDouble * m_spTeardropHDPercent
wxCheckBox * m_cbTeardrops
wxCheckBox * m_cbTopRight1
wxCheckBox * m_cbPreferZoneConnection
wxPanel * m_boardViewPanel
wxStaticBitmap * m_stackupImage1
wxStaticText * m_offsetShapeOptLabel
wxChoice * m_ZoneConnectionChoice
wxStaticText * m_teardropShapeLabel
wxStaticBitmap * m_stackupImage2
wxFlexGridSizer * m_offsetCtrls
wxCheckBox * m_cbBottomLeft1
wxButton * m_buttonGeometry
wxSpinCtrlDouble * m_spTeardropSizePercent
wxCheckBox * m_layerBackSilk
wxSimplebook * m_shapePropsBook
wxBoxSizer * m_LeftBoxSizer
wxStaticText * m_parentInfo
wxCheckBox * m_layerFrontMask
wxStaticBitmap * m_stackupImage4
wxStaticText * m_copperLayersLabel
wxGridBagSizer * m_gbSizerHole
wxStaticLine * m_staticline6
wxChoice * m_PadShapeSelector
wxButton * m_buttonEditShape
wxChoice * m_holeShapeCtrl
wxStaticText * m_padNumLabel
TEXT_CTRL_EVAL * m_mixedCornerRatioCtrl
wxCheckBox * m_layerFrontAdhesive
wxCheckBox * m_layerBackMask
wxCheckBox * m_layerFrontPaste
wxCheckBox * m_layerBackAdhesive
wxChoice * m_ZoneCustomPadShape
wxSimplebook * m_stackupImagesBook
wxButton * m_buttonAddShape
wxCheckBox * m_cbTeardropsUseNextTrack
wxCheckBox * m_cbTopRight
wxCheckBox * m_layerFrontSilk
wxStaticText * m_holeShapeLabel
wxCheckBox * m_padToDieOpt
wxStaticBitmap * m_stackupImage0
wxStaticText * m_nonCopperNote
NET_SELECTOR * m_padNetSelector
wxBoxSizer * m_FlippedWarningSizer
wxTextCtrl * m_padNumCtrl
wxStaticBitmap * m_stackupImage7
wxTextCtrl * m_cornerRadiusCtrl
wxCheckBox * m_curvedEdges
wxCheckBox * m_cbBottomRight
wxChoice * m_trapAxisCtrl
wxStaticText * m_minTrackWidthHint
wxStaticBitmap * m_stackupImage6
wxCheckBox * m_cbTopLeft1
TEXT_CTRL_EVAL * m_chamferRatioCtrl
wxStaticBitmap * m_FlippedWarningIcon
wxListView * m_listCtrlPrimitives
wxCheckBox * m_layerUserDwgs
TEXT_CTRL_EVAL * m_mixedChamferRatioCtrl
wxSpinCtrlDouble * m_spTeardropLenPercent
wxStaticText * m_holeXLabel
wxStaticBitmap * m_stackupImage5
wxStaticText * m_sizeXLabel
wxSpinCtrl * m_curvePointsCtrl
wxBoxSizer * m_legacyTeardropsWarning
TEXT_CTRL_EVAL * m_cornerRatioCtrl
wxChoice * m_choiceFabProperty
wxCheckBox * m_offsetShapeOpt
wxStaticBitmap * m_nonCopperWarningIcon
wxBoxSizer * m_padPreviewSizer
wxCheckBox * m_cbShowPadOutline
wxStaticText * m_padNetLabel
wxStaticBitmap * m_bitmapTeardrop
wxCheckBox * m_layerBackPaste
wxSimplebook * m_nonCopperWarningBook
wxChoice * m_rbCopperLayersSel
wxStaticText * m_staticTextPrimitiveListWarning
wxPanel * m_localSettingsPanel
void OnUpdateUINonCopperWarning(wxUpdateUIEvent &event) override
void OnInitDialog(wxInitDialogEvent &event) override
void PadTypeSelected(wxCommandEvent &event) override
void OnPadShapeSelection(wxCommandEvent &event) override
UNIT_BINDER m_teardropMaxHeightSetting
bool transferDataToPad(PAD *aPad)
Copy values from dialog field to aPad's members.
void onAddPrimitive(wxCommandEvent &event) override
bool TransferDataFromWindow() override
Updates the different parameters for the component being edited.
bool Show(bool aShow) override
void updateHoleControls()
std::vector< std::shared_ptr< PCB_SHAPE > > m_primitives
UNIT_BINDER m_teardropMaxLenSetting
bool padValuesOK()
test if all values are acceptable for the pad
void onPrimitiveDClick(wxMouseEvent &event) override
Called on a double click on the basic shapes list.
void PadOrientEvent(wxCommandEvent &event) override
bool TransferDataToWindow() override
void OnResize(wxSizeEvent &event)
PCB_BASE_FRAME * m_parent
UNIT_BINDER m_mixedCornerRatio
void OnOffsetCheckbox(wxCommandEvent &event) override
PCB_DRAW_PANEL_GAL * m_padPreviewGAL
void OnValuesChanged(wxCommandEvent &event) override
Called when a dimension has changed.
void updateRoundRectCornerValues()
DIALOG_PAD_PROPERTIES(PCB_BASE_FRAME *aParent, PAD *aPad)
void displayPrimitivesList()
void onTeardropsUpdateUi(wxUpdateUIEvent &event) override
void UpdateLayersDropdown()
void onEditPrimitive(wxCommandEvent &event) override
void onChangePadMode(wxCommandEvent &event) override
UNIT_BINDER m_pasteMargin
void OnPrimitiveSelection(wxListEvent &event) override
Called on selection/deselection of a basic shape.
std::vector< PCB_SHAPE * > m_highlight
UNIT_BINDER m_pasteMarginRatio
KIGFX::ORIGIN_VIEWITEM * m_axisOrigin
UNIT_BINDER m_mixedChamferRatio
UNIT_BINDER m_cornerRadius
void OnSetCopperLayers(wxCommandEvent &event) override
void OnCancel(wxCommandEvent &event) override
void onCornerRadiusChange(wxCommandEvent &event) override
void updatePadLayersList(LSET layer_mask, bool remove_unconnected, bool keep_top_bottom)
Updates the CheckBox states in pad layers list, based on the layer_mask (if non-empty) or the default...
PAD_PROP getSelectedProperty()
Return the pad property currently selected.
void OnSetLayers(wxCommandEvent &event) override
void updatePadSizeControls()
void onCornerSizePercentChange(wxCommandEvent &event) override
void enablePrimitivePage(bool aEnable)
enable (or disable) the primitive page editor
UNIT_BINDER m_pad_orientation
void OnPadToDieCheckbox(wxCommandEvent &event) override
void onTeardropCurvePointsUpdateUi(wxUpdateUIEvent &event) override
void onGeometryTransform(wxCommandEvent &event) override
void onDuplicatePrimitive(wxCommandEvent &event) override
static bool m_sketchPreview
void OnDrillShapeSelected(wxCommandEvent &event) override
void onDeletePrimitive(wxCommandEvent &event) override
Event handlers of basic shapes list panel.
void OnUpdateUI(wxUpdateUIEvent &event) override
UNIT_BINDER m_cornerRatio
UNIT_BINDER m_chamferRatio
bool Show(bool show) override
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
bool IsType(FRAME_T aType) const
void SetMsgPanel(const std::vector< MSG_PANEL_ITEM > &aList)
Clear the message panel and populates it with the contents of aList.
KIGFX::GAL_DISPLAY_OPTIONS & GetGalDisplayOptions()
Return a reference to the gal rendering options used by GAL for rendering.
GAL_TYPE GetBackend() const
Return the type of backend currently used by GAL canvas.
void StopDrawing()
Prevent the GAL canvas from further drawing until it is recreated or StartDrawing() is called.
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
void StartDrawing()
Begin drawing if it was stopped previously.
void SetStealsFocus(bool aStealsFocus)
Set whether focus is taken on certain events (mouseover, keys, etc).
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
virtual void SetParent(EDA_ITEM *aParent)
void SetFilled(bool aFlag)
void SetShape(SHAPE_T aShape)
void SetIsAnnotationProxy(bool aIsProxy=true)
void ListSet(const wxString &aList)
Add a list of items.
A color representation with 4 components: red, green, blue, alpha.
void SetGridSize(const VECTOR2D &aGridSize)
Set the grid size.
void SetGridVisibility(bool aVisibility)
Set the visibility setting of the grid.
void SetDrawAtZero(bool aDrawFlag)
Set the draw at zero flag.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
bool m_ForcePadSketchModeOn
void SetLayerColor(int aLayer, const COLOR4D &aColor)
Change the color used to draw a layer.
An interface for classes handling user events controlling the view behavior such as zooming,...
void ApplySettings(const VC_SETTINGS &aSettings)
Load new settings from program common settings.
const VC_SETTINGS & GetSettings() const
Apply VIEW_CONTROLS settings from an object.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
void SetViewport(const BOX2D &aViewport)
Set the visible area of the VIEW.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
void SetBoundary(const BOX2D &aBoundary)
Set limits for view area.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
virtual void SetTopLayer(int aLayer, bool aEnabled=true)
Set given layer to be displayed on the top or sets back the default order of layers.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
LSET is a set of PCB_LAYER_IDs.
static LSET InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
void SetBoard(BOARD *aBoard)
void SetSelectedNetcode(int aNetcode)
void SetNetInfo(NETINFO_LIST *aNetInfoList)
int GetLocalClearance(wxString *aSource) const override
Return any local clearances set in the "classic" (ie: pre-rule) system.
bool IsAperturePad() const
void SetAttribute(PAD_ATTRIB aAttribute)
void SetLayerSet(LSET aLayers) override
PAD_PROP GetProperty() const
bool GetRemoveUnconnected() const
PAD_DRILL_SHAPE_T GetDrillShape() const
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
const VECTOR2I & GetDrillSize() const
PAD_ATTRIB GetAttribute() const
void SetLocalSolderPasteMargin(int aMargin)
static LSET PTHMask()
layer set for a through hole pad
ZONE_CONNECTION GetZoneConnection() const
void SetRemoveUnconnected(bool aSet)
Set the unconnected removal property.
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
Convert the pad shape to a closed polygon.
void SetThermalGap(int aGap)
void SetThermalSpokeAngle(const EDA_ANGLE &aAngle)
The orientation of the thermal spokes.
const wxString & GetNumber() const
void MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
Merge all basic shapes to a SHAPE_POLY_SET.
double GetLocalSolderPasteMarginRatio() const
int GetRoundRectCornerRadius() const
void DeletePrimitivesList()
Clear the basic shapes list.
void SetDrillShape(PAD_DRILL_SHAPE_T aShape)
VECTOR2I GetPosition() const override
void SetProperty(PAD_PROP aProperty)
const std::vector< std::shared_ptr< PCB_SHAPE > > & GetPrimitives() const
Accessor to the basic shape list for custom-shaped pads.
EDA_ANGLE GetThermalSpokeAngle() const
void SetOffset(const VECTOR2I &aOffset)
void SetChamferRectRatio(double aChamferScale)
Has meaning only for chamfered rectangular pads.
const VECTOR2I & GetOffset() const
static LSET UnplatedHoleMask()
layer set for a mechanical unplated through hole pad
void SetRoundRectCornerRadius(double aRadius)
Has meaning only for rounded rectangle pads.
void SetLocalClearance(int aClearance)
void SetKeepTopBottom(bool aSet)
Set whether we keep the top and bottom connections even if they are not connected.
void SetNumber(const wxString &aNumber)
Set the pad number (note that it can be alphanumeric, such as the array reference "AA12").
void SetZoneConnection(ZONE_CONNECTION aType)
int GetLocalSolderMaskMargin() const
bool GetKeepTopBottom() const
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt() const
FOOTPRINT * GetParent() const
void SetDelta(const VECTOR2I &aSize)
bool IsOnCopperLayer() const override
void SetPosition(const VECTOR2I &aPos) override
const VECTOR2I & GetDelta() const
static LSET ConnSMDMask()
layer set for a SMD pad on Front layer used for edge board connectors
void SetDrillSize(const VECTOR2I &aSize)
PAD_SHAPE GetShape() const
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
EDA_ANGLE GetFPRelativeOrientation()
void Flip(const VECTOR2I &VECTOR2I, bool aFlipLeftRight) override
Flip this object, i.e.
static LSET ApertureMask()
layer set for an aperture pad
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
static LSET SMDMask()
layer set for a SMD pad on Front layer
void SetLocalSolderPasteMarginRatio(double aRatio)
void SetShape(PAD_SHAPE aShape)
Set the new shape of this pad.
int GetThermalSpokeWidth() const
int GetLocalSolderPasteMargin() const
void SetFPRelativeOrientation(const EDA_ANGLE &aAngle)
void SetCustomShapeInZoneOpt(CUST_PAD_SHAPE_IN_ZONE aOption)
Set the option for the custom pad shape to use as clearance area in copper zones.
void SetRoundRectRadiusRatio(double aRadiusScale)
Has meaning only for rounded rectangle pads.
void SetAnchorPadShape(PAD_SHAPE aShape)
Set the shape of the anchor pad for custom shaped pads.
void SetOrientation(const EDA_ANGLE &aAngle)
Set the rotation angle of the pad.
int GetChamferPositions() const
void ReplacePrimitives(const std::vector< std::shared_ptr< PCB_SHAPE > > &aPrimitivesList)
Clear the current custom shape primitives list and import a new list.
void SetLocalSolderMaskMargin(int aMargin)
void SetThermalSpokeWidth(int aWidth)
Set the width of the thermal spokes connecting the pad to a zone.
void SetSize(const VECTOR2I &aSize)
double GetRoundRectRadiusRatio() const
int GetThermalGap() const
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const override
Return a SHAPE_SEGMENT object representing the pad's hole.
const VECTOR2I & GetSize() const
void SetChamferPositions(int aPositions)
Has meaning only for chamfered rectangular pads.
PAD_SHAPE GetAnchorPadShape() const
double GetChamferRectRatio() const
void SetPadToDieLength(int aLength)
int GetPadToDieLength() const
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
void ShowPadPropertiesDialog(PAD *aPad)
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project.
void UpdateColors()
Update the color settings in the painter and GAL.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
virtual void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
virtual void Move(const VECTOR2I &aMoveVector) override
Move this object.
void SetStroke(const STROKE_PARAMS &aStroke) override
Represent a set of closed polygons.
void BooleanSubtract(const SHAPE_POLY_SET &b, POLYGON_MODE aFastMode)
Perform boolean polyset difference For aFastMode meaning, see function booleanOp.
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
int OutlineCount() const
Return the number of outlines in the set.
Simple container to manage line stroke parameters.
int m_CurveSegCount
number of segments to build the curved sides of a teardrop area must be > 2.
double m_BestWidthRatio
The height of a teardrop as ratio between height and size of pad/via.
int m_TdMaxLen
max allowed length for teardrops in IU. <= 0 to disable
bool m_AllowUseTwoTracks
True to create teardrops using 2 track segments if the first in too small.
int m_TdMaxWidth
max allowed height for teardrops in IU. <= 0 to disable
double m_BestLengthRatio
The length of a teardrop as ratio between length and size of pad/via.
double m_WidthtoSizeFilterRatio
The ratio (H/D) between the via/pad size and the track width max value to create a teardrop 1....
bool m_TdOnPadsInZones
A filter to exclude pads inside zone fills.
virtual void ChangeDoubleValue(double aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion WITHOUT trigger...
virtual long long int GetValue()
Return the current value in Internal Units.
void Enable(bool aEnable)
Enable/disable the label, widget and units label.
virtual void SetPrecision(int aLength)
Normally not needed, but can be used to set the precision when using internal units that are floats (...
virtual void SetUnits(EDA_UNITS aUnits)
Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be used to set to DE...
virtual EDA_ANGLE GetAngleValue()
virtual void SetNegativeZero()
virtual double GetDoubleValue()
Return the current value in Internal Units.
virtual void SetAngleValue(const EDA_ANGLE &aValue)
virtual void ChangeAngleValue(const EDA_ANGLE &aValue)
virtual void SetDoubleValue(double aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
virtual bool Validate(double aMin, double aMax, EDA_UNITS aUnits=EDA_UNITS::UNSCALED)
Validate the control against the given range, informing the user of any errors found.
virtual void ChangeValue(int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion WITHOUT trigger...
virtual void SetValue(long long int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
void Show(bool aShow, bool aResize=false)
Show/hide the label, widget and units label.
void SetCoordType(ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
Set the current origin transform mode.
This file is part of the common library.
void TransformOvalToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, int aError, ERROR_LOC aErrorLoc, int aMinSegCount=0)
Convert a oblong shape to a polygon, using multiple segments.
@ RECT_CHAMFER_BOTTOM_RIGHT
@ RECT_CHAMFER_BOTTOM_LEFT
#define APERTURE_DLG_TYPE
static PAD_ATTRIB code_type[]
#define SELECTED_ITEMS_LAYER
static PAD_SHAPE code_shape[]
@ CHOICE_SHAPE_CUSTOM_RECT_ANCHOR
@ CHOICE_SHAPE_CHAMFERED_RECT
@ CHOICE_SHAPE_CUSTOM_CIRC_ANCHOR
@ CHOICE_SHAPE_CHAMFERED_ROUNDED_RECT
static wxString formatCoord(EDA_UNITS aUnits, const VECTOR2I &aCoord)
#define PAD_PROPERTIES_DLG_NAME
DIALOG_PAD_PROPERTIES, derived from DIALOG_PAD_PROPERTIES_BASE, created by wxFormBuilder.
static constexpr EDA_ANGLE & ANGLE_45
static constexpr EDA_ANGLE & ANGLE_90
#define BRIGHTENED
item is drawn with a bright contour
#define SELECTED
Item was manually selected by the user.
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
wxString MessageTextFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A helper to convert the double length aValue to a string in inches, millimeters, or unscaled units.
std::string FormatAngle(const EDA_ANGLE &aAngle)
Converts aAngle from board units to a string appropriate for writing to file.
wxFont GetInfoFont(wxWindow *aWindow)
@ CUST_PAD_SHAPE_IN_ZONE_OUTLINE
@ CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL
PAD_ATTRIB
The set of pad shapes, used with PAD::{Set,Get}Attribute().
@ NPTH
like PAD_PTH, but not plated
@ SMD
Smd pad, appears on the solder paste layer (default)
@ PTH
Plated through hole pad.
@ CONN
Like smd, does not appear on the solder paste layer (default)
PAD_SHAPE
The set of pad shapes, used with PAD::{Set,Get}Shape()
PAD_PROP
The set of pad properties used in Gerber files (Draw files, and P&P files) to define some properties ...
constexpr int mmToIU(double mm) const
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
VECTOR2< double > VECTOR2D