35#include <magic_enum.hpp>
120 wxASSERT( aStandaloneVia );
188 for(
auto& preset : magic_enum::enum_values<IPC4761_PRESET>() )
195 wxString
name =
_(
"Unknown choice" );
198 name = name_it->second;
220 bool hasLocked =
false;
221 bool hasUnlocked =
false;
227 int selection_first_layer = -1;
228 int selection_last_layer = -1;
231 int track_selection_layer = -1;
235 bool secondary_drill_end_layer_mixed =
false;
236 int secondary_drill_size = 0;
237 bool secondary_drill_size_mixed =
false;
240 bool tertiary_drill_end_layer_mixed =
false;
241 int tertiary_drill_size = 0;
242 bool tertiary_drill_size_mixed =
false;
245 bool backdrill_dir_mixed =
false;
247 std::optional<PAD_DRILL_POST_MACHINING_MODE> primary_post_machining_value;
248 bool primary_post_machining_set =
false;
249 bool primary_post_machining_mixed =
false;
250 int primary_post_machining_size = 0;
251 bool primary_post_machining_size_mixed =
false;
252 int primary_post_machining_depth = 0;
253 bool primary_post_machining_depth_mixed =
false;
254 int primary_post_machining_angle = 0;
255 bool primary_post_machining_angle_mixed =
false;
257 std::optional<PAD_DRILL_POST_MACHINING_MODE> secondary_post_machining_value;
258 bool secondary_post_machining_set =
false;
259 bool secondary_post_machining_mixed =
false;
260 int secondary_post_machining_size = 0;
261 bool secondary_post_machining_size_mixed =
false;
262 int secondary_post_machining_depth = 0;
263 bool secondary_post_machining_depth_mixed =
false;
264 int secondary_post_machining_angle = 0;
265 bool secondary_post_machining_angle_mixed =
false;
271 auto getAnnularRingSelection =
274 switch(
via->Padstack().UnconnectedLayerMode() )
316 switch( item->Type() )
330 track_selection_layer = t->
GetLayer();
357 if( track_selection_layer != t->
GetLayer() )
392 primary_post_machining_set =
true;
398 secondary_post_machining_set =
true;
405 getBackdrillDrills( v, topDrill, bottomDrill );
408 secondary_drill_end_layer = topDrill.
end;
409 tertiary_drill_end_layer = bottomDrill.
end;
411 secondary_drill_size = topDrill.
size.
x;
412 tertiary_drill_size = bottomDrill.
size.
x;
426 selection_first_layer = v->
TopLayer();
465 if( selection_first_layer != v->
TopLayer() )
503 if( primary_post_machining_set )
506 primary_post_machining_mixed =
true;
509 primary_post_machining_size_mixed =
true;
512 primary_post_machining_depth_mixed =
true;
515 primary_post_machining_angle_mixed =
true;
518 if( secondary_post_machining_set )
521 secondary_post_machining_mixed =
true;
524 secondary_post_machining_size_mixed =
true;
527 secondary_post_machining_depth_mixed =
true;
530 secondary_post_machining_angle_mixed =
true;
535 getBackdrillDrills( v, topDrill, bottomDrill );
551 if( secondary_drill_end_layer != topDrill.
end )
552 secondary_drill_end_layer_mixed =
true;
554 if( tertiary_drill_end_layer != bottomDrill.
end )
555 tertiary_drill_end_layer_mixed =
true;
557 if( backdrill_dir != new_backdrill_dir )
558 backdrill_dir_mixed =
true;
560 if( bottomDrill.
size.
x != tertiary_drill_size )
561 tertiary_drill_size_mixed =
true;
563 if( topDrill.
size.
x != secondary_drill_size )
564 secondary_drill_size_mixed =
true;
617 if( backdrill_dir_mixed )
621 if( tertiary_drill_size_mixed )
626 if( secondary_drill_size_mixed )
637 if( tertiary_drill_size_mixed )
649 if( secondary_drill_size_mixed )
662 if( secondary_drill_end_layer_mixed )
676 if( tertiary_drill_end_layer_mixed )
690 if( primary_post_machining_mixed )
697 else if( primary_post_machining_set && primary_post_machining_value.has_value() )
699 switch( primary_post_machining_value.value() )
704 if( primary_post_machining_size_mixed )
711 if( primary_post_machining_depth_mixed )
721 if( primary_post_machining_size_mixed )
728 if( primary_post_machining_angle_mixed )
751 if( secondary_post_machining_mixed )
758 else if( secondary_post_machining_set && secondary_post_machining_value.has_value() )
760 switch( secondary_post_machining_value.value() )
765 if( secondary_post_machining_size_mixed )
772 if( secondary_post_machining_depth_mixed )
782 if( secondary_post_machining_size_mixed )
789 if( secondary_post_machining_angle_mixed )
838 int viaSelection = wxNOT_FOUND;
841 for(
unsigned ii = 1; ii <
m_frame->GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
849 if( viaSelection == wxNOT_FOUND
853 viaSelection = ii - 1;
888 int widthSelection = wxNOT_FOUND;
891 for(
unsigned ii = 1; ii <
m_frame->GetDesignSettings().m_TrackWidthList.size(); ii++ )
893 int width =
m_frame->GetDesignSettings().m_TrackWidthList[ii];
894 wxString msg =
m_frame->StringFromValue( width );
897 if( widthSelection == wxNOT_FOUND &&
m_trackWidth.GetValue() == width )
898 widthSelection = ii - 1;
904 wxCommandEvent event;
912 if( hasLocked && hasUnlocked )
926 wxCommandEvent dummyEvent;
947 for(
unsigned ii = 1; ii <
m_frame->GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
967 for(
unsigned ii = 1; ii <
m_frame->GetDesignSettings().m_TrackWidthList.size(); ii++ )
969 int width =
m_frame->GetDesignSettings().m_TrackWidthList[ii];
970 wxString msg =
m_frame->StringFromValue( width );
986 if( shortingNets.size() == 1 )
988 msg.Printf(
_(
"Applying these changes will short net %s with %s." ),
990 m_frame->GetBoard()->FindNet( *shortingNets.begin() )->GetNetname() );
994 msg.Printf(
_(
"Applying these changes will short net %s with other nets." ),
998 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1010 if( changingPads.size() == 1 )
1012 PAD*
pad = *changingPads.begin();
1013 msg.Printf(
_(
"Changing the net will also update %s pad %s to %s." ),
1014 pad->GetParentFootprint()->GetReference(),
1018 else if( changingPads.size() == 2 )
1020 PAD* pad1 = *changingPads.begin();
1021 PAD* pad2 = *( ++changingPads.begin() );
1022 msg.Printf(
_(
"Changing the net will also update %s pad %s and %s pad %s to %s." ),
1031 msg.Printf(
_(
"Changing the net will also update %lu connected pads to %s." ),
1032 static_cast<unsigned long>( changingPads.size() ),
1036 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
1046 std::shared_ptr<CONNECTIVITY_DATA> connectivity =
m_frame->GetBoard()->GetConnectivity();
1047 std::vector<PCB_TRACK*> selected_tracks;
1048 std::set<PCB_TRACK*> connected_tracks;
1053 selected_tracks.push_back( track );
1056 for(
PCB_TRACK* selected_track : selected_tracks )
1058 connected_tracks.insert( selected_track );
1063 connectivity->GetConnectedItems( selected_track,
EXCLUDE_ZONES ) )
1066 connected_tracks.insert( track );
1077 std::optional<int> viaDiameter;
1082 std::optional<int> viaDrill;
1087 std::optional<PCB_LAYER_ID> startLayer;
1092 std::optional<PCB_LAYER_ID> endLayer;
1097 std::optional<int> secondaryDrill;
1098 std::optional<int> tertiaryDrill;
1099 std::optional<PCB_LAYER_ID> secondaryStartLayer;
1100 std::optional<PCB_LAYER_ID> secondaryEndLayer;
1101 std::optional<PCB_LAYER_ID> tertiaryStartLayer;
1102 std::optional<PCB_LAYER_ID> tertiaryEndLayer;
1113 tertiaryDrill =
m_viaStack->TertiaryDrill().size.x;
1117 tertiaryStartLayer =
B_Cu;
1129 secondaryDrill =
m_viaStack->SecondaryDrill().size.x;
1133 secondaryStartLayer =
F_Cu;
1145 secondaryDrill =
m_viaStack->SecondaryDrill().size.x;
1149 secondaryStartLayer =
F_Cu;
1158 tertiaryDrill =
m_viaStack->TertiaryDrill().size.x;
1162 tertiaryStartLayer =
B_Cu;
1175 std::optional<PADSTACK::POST_MACHINING_PROPS> frontPostMachining;
1176 std::optional<PADSTACK::POST_MACHINING_PROPS> backPostMachining;
1200 frontPostMachining = props;
1225 backPostMachining = props;
1228 int copperLayerCount =
m_frame->GetBoard() ?
m_frame->GetBoard()->GetCopperLayerCount() : 0;
1230 if( std::optional<PCB_VIA::VIA_PARAMETER_ERROR> error =
1232 secondaryDrill, secondaryStartLayer,
1233 secondaryEndLayer, tertiaryDrill, tertiaryStartLayer,
1234 tertiaryEndLayer, copperLayerCount ) )
1238 if( error->m_Field == PCB_VIA::VIA_PARAMETER_ERROR::FIELD::DRILL )
1243 else if( error->m_Field == PCB_VIA::VIA_PARAMETER_ERROR::FIELD::DIAMETER )
1267 bool changeLock =
m_lockedCbox->Get3StateValue() != wxCHK_UNDETERMINED;
1268 bool setLock =
m_lockedCbox->Get3StateValue() == wxCHK_CHECKED;
1270 for(
PCB_TRACK* track : selected_tracks )
1276 switch( track->Type() )
1309 track->SetLocalSolderMaskMargin( {} );
1315 track->SetLocked( setLock );
1329 if( !
m_viaX.IsIndeterminate() )
1332 if( !
m_viaY.IsIndeterminate() )
1335 if(
m_viaNotFree->Get3StateValue() != wxCHK_UNDETERMINED )
1343 if( currentSize.
x != newDiameter || currentSize.
y != newDiameter )
1346 updatePadstack =
true;
1356 secondaryDrill.
size = {0, 0};
1361 tertiaryDrill.
size = {0, 0};
1445 if(
via->Padstack().SecondaryDrill() != secondaryDrill )
1448 updatePadstack =
true;
1451 if(
via->Padstack().TertiaryDrill() != tertiaryDrill )
1454 updatePadstack =
true;
1466 updatePadstack =
true;
1477 updatePadstack =
true;
1497 props.
size =
via->Padstack().FrontPostMachining().size;
1508 props.
angle =
via->Padstack().FrontPostMachining().angle;
1509 props.
depth =
via->Padstack().FrontPostMachining().depth;
1512 if(
via->Padstack().FrontPostMachining() != props )
1515 updatePadstack =
true;
1533 props.
size =
via->Padstack().BackPostMachining().size;
1544 props.
angle =
via->Padstack().BackPostMachining().angle;
1545 props.
depth =
via->Padstack().BackPostMachining().depth;
1548 if(
via->Padstack().BackPostMachining() != props )
1551 updatePadstack =
true;
1569 if(
via->Padstack().Drill().start != startLayer )
1572 updatePadstack =
true;
1575 via->SetTopLayer( startLayer );
1580 if(
via->Padstack().Drill().end != endLayer )
1583 updatePadstack =
true;
1586 via->SetBottomLayer( endLayer );
1589 if( updatePadstack )
1591 via->SetPadstack( viaStack );
1592 via->SanitizeLayers();
1644 via->SetLocked( setLock );
1656 std::set<int> shortingNets;
1658 std::set<PAD*> changingPads;
1675 for(
PCB_TRACK* track : connected_tracks )
1679 if( other->GetNetCode() == track->GetNetCode() || other->GetNetCode() == newNetCode )
1683 shortingNets.insert( other->GetNetCode() );
1688 for(
PAD*
pad : footprint->Pads() )
1690 if(
pad->GetNetCode() == newNetCode )
1695 if(
pad->GetNetCode() == track->GetNetCode() )
1696 changingPads.insert(
pad );
1698 shortingNets.insert(
pad->GetNetCode() );
1714 for(
PCB_TRACK* track : connected_tracks )
1719 track->SetNetCode( newNetCode );
1722 for(
PAD*
pad : changingPads )
1725 pad->SetNetCode( newNetCode );
1731 commit.
Push(
_(
"Edit Track/Via Properties" ) );
1777 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in onPadstackModeChanged" );
1795 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in onEditLayerChanged" );
1803 if( currentSize.
x != diameter || currentSize.
y != diameter )
1850 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in afterPadstackModeChanged" );
1870 std::vector choices = {
1872 _(
"Inner Layers" ),
1922 return m_frame->GetBoard()->GetCopperLayerCount() - 1;
1927 if( startLayer < 0 || endLayer < 0 )
1928 return m_frame->GetBoard()->GetCopperLayerCount() - 1;
1979 event.Enable( !
m_frame->GetBoard()->LegacyTeardrops() );
1988 bool enableTop = ( selection == 2 || selection == 3 );
1989 bool enableBottom = ( selection == 1 || selection == 3 );
2030 bool enable = ( selection != 0 );
2036 if( selection == 1 )
2047 else if( selection == 2 )
2067 bool enable = ( selection != 0 );
2073 if( selection == 1 )
2084 else if( selection == 2 )
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
TEARDROP_PARAMETERS & GetTeardropParams()
bool IsLocked() const override
FOOTPRINT * GetParentFootprint() const
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
Information pertinent to a Pcbnew printed circuit board.
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
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...
wxStaticText * m_annularRingsLabel
wxChoice * m_protectionFeatures
wxBoxSizer * m_legacyTeardropsWarning
wxStaticText * m_stMaxWidthLabel
wxTextCtrl * m_topPostMachineSize2Ctrl
wxStaticText * m_TrackEndYLabel
wxStaticText * m_ViaYLabel
wxStaticText * m_topPostMachineSize1Units
wxStaticText * m_bottomPostMachineSize2Label
wxStaticText * m_backdrillBackLayerLabel
PCB_LAYER_BOX_SELECTOR * m_ViaStartLayer
wxCheckBox * m_lockedCbox
wxStaticText * m_backdrillBackSizeLabel
wxStaticText * m_backdrillBackSizeUnits
wxCheckBox * m_curvedEdges
wxStaticText * m_trackMaskMarginUnit
wxStaticText * m_TrackStartYUnit
wxStaticText * m_TrackEndXLabel
wxTextCtrl * m_TrackStartXCtrl
wxStaticText * m_topPostMachineSize1Label
wxStaticText * m_predefinedTrackWidthsUnits
wxStaticText * m_backdrillFrontSizeUnits
wxStaticText * m_TrackWidthLabel
DIALOG_TRACK_VIA_PROPERTIES_BASE(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Track & Via Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU)
PCB_LAYER_BOX_SELECTOR * m_backdrillBackLayer
PCB_LAYER_BOX_SELECTOR * m_backdrillFrontLayer
wxTextCtrl * m_topPostMachineSize1Ctrl
wxStaticText * m_stMaxLenUnits
PCB_LAYER_BOX_SELECTOR * m_ViaEndLayer
wxChoice * m_predefinedTrackWidthsCtrl
wxStaticText * m_trackMaskMarginLabel
wxStaticText * m_topPostMachineSize2Label
wxStaticBoxSizer * m_sbTrackSizer
wxChoice * m_annularRingsCtrl
wxStaticBoxSizer * m_sbViaSizer
wxTextCtrl * m_bottomPostMachineSize1Ctrl
wxStaticText * m_ViaDrillUnit
wxStaticText * m_TrackStartXLabel
wxTextCtrl * m_bottomPostMachineSize2Ctrl
wxStaticText * m_stWidthPercentLabel
wxTextCtrl * m_backdrillBackSizeCtrl
wxStaticText * m_backdrillFrontSizeLabel
wxCheckBox * m_trackHasSolderMask
PCB_LAYER_BOX_SELECTOR * m_TrackLayerCtrl
wxStaticText * m_TrackStartYLabel
wxStaticText * m_stMaxLen
wxStaticText * m_ViaDiameterUnit
wxTextCtrl * m_TrackEndXCtrl
wxCheckBox * m_cbTeardrops
wxTextCtrl * m_tcLenPercent
wxStaticText * m_minTrackWidthHint
wxStaticText * m_ViaDrillLabel
wxStaticText * m_ViaYUnit
wxStaticText * m_topPostMachineSize2Units
wxStaticText * m_stLenPercentLabel
wxChoice * m_cbPadstackMode
wxCheckBox * m_viaNotFree
wxStaticText * m_TrackWidthUnit
wxStaticText * m_bottomPostMachineSize1Units
wxTextCtrl * m_tcWidthPercent
wxChoice * m_bottomPostMachine
wxChoice * m_ViaTypeChoice
wxStaticText * m_postMachineSectionLabel
wxStaticText * m_stHDRatio
wxTextCtrl * m_ViaDiameterCtrl
wxChoice * m_predefinedViaSizesCtrl
wxStaticText * m_ViaXLabel
wxTextCtrl * m_trackMaskMarginCtrl
wxTextCtrl * m_backdrillFrontSizeCtrl
wxStaticText * m_bottomPostMachineSize1Label
wxChoice * m_topPostMachine
wxTextCtrl * m_ViaDrillCtrl
wxStaticText * m_TrackEndYUnit
wxStaticText * m_stMaxWidthUnits
wxStaticText * m_netSelectorLabel
wxStaticBitmap * m_bitmapTeardrop
wxTextCtrl * m_TrackEndYCtrl
wxStaticText * m_techLayersLabel
wxStaticText * m_backdrillFrontLayerLabel
wxTextCtrl * m_tcTdMaxLen
wxStaticText * m_bottomPostMachineSize2Units
wxTextCtrl * m_TrackStartYCtrl
wxChoice * m_backdrillChoice
wxStaticText * m_ViaDiameterLabel
wxStaticText * m_stHDRatioUnits
wxStaticBitmap * m_legacyTeardropsIcon
wxTextCtrl * m_TrackWidthCtrl
wxStaticText * m_predefinedViaSizesUnits
wxCheckBox * m_cbTeardropsUseNextTrack
wxTextCtrl * m_tcMaxWidth
NET_SELECTOR * m_netSelector
UNIT_BINDER m_bottomPostMachineSize1
void onWidthEdit(wxCommandEvent &aEvent) override
const PCB_SELECTION & m_items
UNIT_BINDER m_bottomPostMachineSize2
bool TransferDataFromWindow() override
void onUnitsChanged(wxCommandEvent &aEvent)
UNIT_BINDER m_viaDiameter
void onNetSelector(wxCommandEvent &aEvent)
UNIT_BINDER m_trackMaskMargin
void afterPadstackModeChanged()
Get data from the PCB board and display it to dialog.
void onWidthSelect(wxCommandEvent &aEvent) override
UNIT_BINDER m_teardropWidthPercent
bool confirmShortingNets(int aNet, const std::set< int > &shortingNets)
UNIT_BINDER m_teardropLenPercent
UNIT_BINDER m_teardropMaxWidth
bool m_standalone
Dialog was constructed for a standalone via (via stitching.
UNIT_BINDER m_topPostMachineSize1
void onTeardropsUpdateUi(wxUpdateUIEvent &event) override
void onPadstackModeChanged(wxCommandEvent &aEvent) override
void onBackdrillChange(wxCommandEvent &aEvent) override
void onViaEdit(wxCommandEvent &aEvent) override
std::map< int, PCB_LAYER_ID > m_editLayerCtrlMap
UNIT_BINDER m_backdrillBackSize
PCB_LAYER_ID m_editLayer
The currently-shown copper layer of the edited via(s)
UNIT_BINDER m_trackStartY
void onViaSelect(wxCommandEvent &aEvent) override
bool TransferDataToWindow() override
void onBottomPostMachineChange(wxCommandEvent &aEvent) override
void onEditLayerChanged(wxCommandEvent &aEvent) override
void onTopPostMachineChange(wxCommandEvent &aEvent) override
PCB_BASE_EDIT_FRAME * m_frame
void onViaNotFreeClicked(wxCommandEvent &aEvent) override
void commonInit(PCB_BASE_EDIT_FRAME *aParent)
DIALOG_TRACK_VIA_PROPERTIES(PCB_BASE_EDIT_FRAME *aParent, const PCB_SELECTION &aItems)
std::unique_ptr< PADSTACK > m_viaStack
Temporary padstack of the edited via(s)
UNIT_BINDER m_backdrillFrontSize
UNIT_BINDER m_teardropMaxLen
UNIT_BINDER m_trackStartX
PCB_SELECTION m_viaStandaloneSelection
Used for standalone via mode to flow through the normal update logic.
UNIT_BINDER m_teardropHDPercent
bool confirmPadChange(const std::set< PAD * > &connectedPads)
UNIT_BINDER m_topPostMachineSize2
~DIALOG_TRACK_VIA_PROPERTIES()
void onTrackEdit(wxCommandEvent &aEvent) override
A base class for most all the KiCad significant classes used in schematics and boards.
Helper class to create more flexible dialogs, including 'do not show again' checkbox handling.
void DoNotShowCheckbox(wxString file, int line)
Shows the 'do not show again' checkbox.
bool SetOKCancelLabels(const ButtonLabel &ok, const ButtonLabel &cancel) override
LSET is a set of PCB_LAYER_IDs.
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
LSEQ UIOrder() const
Return the copper, technical and user layers in the order shown in layer widget.
static LSET AllNonCuMask()
Return a mask holding all layer minus CU layers.
A PADSTACK defines the characteristics of a single or multi-layer pad, in the IPC sense of the word.
POST_MACHINING_PROPS & FrontPostMachining()
DRILL_PROPS & TertiaryDrill()
@ NORMAL
Shape is the same on all layers.
@ CUSTOM
Shapes can be defined on arbitrary layers.
@ FRONT_INNER_BACK
Up to three shapes can be defined (F_Cu, inner copper layers, B_Cu)
DRILL_PROPS & SecondaryDrill()
POST_MACHINING_PROPS & BackPostMachining()
void SetSize(const VECTOR2I &aSize, PCB_LAYER_ID aLayer)
static constexpr PCB_LAYER_ID ALL_LAYERS
! The layer identifier to use for the single defintion on normal padstacks
static constexpr PCB_LAYER_ID INNER_LAYERS
! The layer identifier to use for "inner layers" on top/inner/bottom padstacks
const wxString & GetNumber() const
Common, abstract interface for edit frames.
bool HasSolderMask() const
std::optional< int > GetLocalSolderMaskMargin() const
virtual int GetWidth() const
bool GetIsFree() const
Check if the via is a free via (as opposed to one created on a track by the router).
PCB_LAYER_ID BottomLayer() const
VECTOR2I GetPosition() const override
const PADSTACK & Padstack() const
static std::optional< VIA_PARAMETER_ERROR > ValidateViaParameters(std::optional< int > aDiameter, std::optional< int > aPrimaryDrill, std::optional< PCB_LAYER_ID > aPrimaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aPrimaryEndLayer=std::nullopt, std::optional< int > aSecondaryDrill=std::nullopt, std::optional< PCB_LAYER_ID > aSecondaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aSecondaryEndLayer=std::nullopt, std::optional< int > aTertiaryDrill=std::nullopt, std::optional< PCB_LAYER_ID > aTertiaryStartLayer=std::nullopt, std::optional< PCB_LAYER_ID > aTertiaryEndLayer=std::nullopt, int aCopperLayerCount=0)
int GetWidth() const override
PCB_LAYER_ID TopLayer() const
int GetDrillValue() const
Calculate the drill value for vias (m_drill if > 0, or default drill value for the board).
VIATYPE GetViaType() const
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const
Check if the boundary of shape (this) lies closer to the point aP than aClearance,...
TEARDROP_PARAMETARS is a helper class to handle parameters needed to build teardrops for a board thes...
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_Enabled
Flag to enable teardrops.
bool m_CurvedEdges
True if the teardrop should be curved.
IPC4761_PRESET getViaConfiguration(const PCB_VIA *aVia)
const std::map< IPC4761_PRESET, wxString > m_IPC4761Names
void setViaConfiguration(PCB_VIA *aVia, const IPC4761_PRESET &aPreset)
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
This file contains miscellaneous commonly used macros and functions.
#define UNIMPLEMENTED_FOR(type)
KICOMMON_API wxString GetLabel(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
KICOMMON_API wxFont GetSmallInfoFont(wxWindow *aWindow)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
@ REMOVE_EXCEPT_START_AND_END
#define GEOMETRY_MIN_SIZE
bool collide(T aObject, U aAnotherObject, int aLayer, int aMinDistance)
Used by SHAPE_INDEX to implement Query().
The properties of a padstack drill.
VECTOR2I size
Drill diameter (x == y) or slot dimensions (x != y)
std::optional< PAD_DRILL_POST_MACHINING_MODE > mode
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
KIBIS top(path, &reporter)
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
#define INDETERMINATE_ACTION
#define INDETERMINATE_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...
VECTOR2< int32_t > VECTOR2I