45 m_trackStartX( aParent, m_TrackStartXLabel, m_TrackStartXCtrl, nullptr ),
46 m_trackStartY( aParent, m_TrackStartYLabel, m_TrackStartYCtrl, m_TrackStartYUnit ),
47 m_trackEndX( aParent, m_TrackEndXLabel, m_TrackEndXCtrl, nullptr ),
48 m_trackEndY( aParent, m_TrackEndYLabel, m_TrackEndYCtrl, m_TrackEndYUnit ),
49 m_trackWidth( aParent, m_TrackWidthLabel, m_TrackWidthCtrl, m_TrackWidthUnit ),
50 m_trackMaskMargin( aParent, m_trackMaskMarginLabel, m_trackMaskMarginCtrl, m_trackMaskMarginUnit ),
51 m_viaX( aParent, m_ViaXLabel, m_ViaXCtrl, nullptr ),
52 m_viaY( aParent, m_ViaYLabel, m_ViaYCtrl, m_ViaYUnit ),
53 m_viaDiameter( aParent, m_ViaDiameterLabel, m_ViaDiameterCtrl, m_ViaDiameterUnit ),
54 m_viaDrill( aParent, m_ViaDrillLabel, m_ViaDrillCtrl, m_ViaDrillUnit ),
55 m_teardropHDPercent( aParent, m_stHDRatio, m_tcHDRatio, m_stHDRatioUnits ),
56 m_teardropLenPercent( aParent, m_stLenPercentLabel, m_tcLenPercent, nullptr ),
57 m_teardropMaxLen( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
58 m_teardropWidthPercent( aParent, m_stWidthPercentLabel, m_tcWidthPercent, nullptr ),
59 m_teardropMaxWidth( aParent, m_stMaxWidthLabel, m_tcMaxWidth, m_stMaxWidthUnits ),
87 VIATYPE viaType = VIATYPE::NOT_DEFINED;
114 bool hasLocked =
false;
115 bool hasUnlocked =
false;
120 int selection_first_layer = -1;
121 int selection_last_layer = -1;
124 int track_selection_layer = -1;
126 auto getAnnularRingSelection =
129 switch(
via->Padstack().UnconnectedLayerMode() )
138 auto getTentingSelection =
141 std::optional<bool> tentingOverride =
via->Padstack().IsTented( aLayer );
143 if( tentingOverride.has_value() )
145 if( *tentingOverride )
167 switch( item->Type() )
181 track_selection_layer = t->
GetLayer();
208 if( track_selection_layer != t->
GetLayer() )
252 selection_first_layer = v->
TopLayer();
279 viaType = VIATYPE::NOT_DEFINED;
284 if( selection_first_layer != v->
TopLayer() )
394 int viaSelection = wxNOT_FOUND;
397 for(
unsigned ii = 1; ii < aParent->
GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
405 if( viaSelection == wxNOT_FOUND
409 viaSelection = ii - 1;
423 case VIATYPE::NOT_DEFINED:
m_ViaTypeChoice->SetSelection( wxNOT_FOUND );
break;
442 int widthSelection = wxNOT_FOUND;
445 for(
unsigned ii = 1; ii < aParent->
GetDesignSettings().m_TrackWidthList.size(); ii++ )
452 widthSelection = ii - 1;
458 wxCommandEvent event;
466 if( hasLocked && hasUnlocked )
544 if( changingPads.size() == 1 )
546 PAD*
pad = *changingPads.begin();
547 msg.Printf(
_(
"Changing the net will also update %s pad %s to %s." ),
548 pad->GetParentFootprint()->GetReference(),
552 else if( changingPads.size() == 2 )
554 PAD* pad1 = *changingPads.begin();
555 PAD* pad2 = *( ++changingPads.begin() );
556 msg.Printf(
_(
"Changing the net will also update %s pad %s and %s pad %s to %s." ),
565 msg.Printf(
_(
"Changing the net will also update %lu connected pads to %s." ),
566 static_cast<unsigned long>( changingPads.size() ),
570 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
596 DisplayError( GetParent(),
_(
"Via hole size must be smaller than via diameter" ) );
605 DisplayError( GetParent(),
_(
"Via start layer and end layer cannot be the same" ) );
628 bool changeLock =
m_lockedCbox->Get3StateValue() != wxCHK_UNDETERMINED;
629 bool setLock =
m_lockedCbox->Get3StateValue() == wxCHK_CHECKED;
635 switch( item->Type() )
675 t->SetLocked( setLock );
691 if(
m_viaNotFree->Get3StateValue() != wxCHK_UNDETERMINED )
811 commit.Push(
_(
"Edit Track/Via Properties" ) );
816 auto connectivity = m_frame->GetBoard()->GetConnectivity();
817 int newNetCode = m_netSelector->GetSelectedNetcode();
818 bool updateNets =
false;
819 std::vector<PAD*> changingPads;
821 if ( !m_netSelector->IsIndeterminate() )
828 auto connectedItems = connectivity->GetConnectedItems( boardItem,
837 if(
pad->GetNetCode() != newNetCode && !
alg::contains( changingPads, citem ) )
838 changingPads.push_back(
pad );
844 if( changingPads.size() && !confirmPadChange( changingPads ) )
851 commit.Modify( item );
853 switch( item->Type() )
857 static_cast<PCB_TRACK*
>( item )->SetNetCode( newNetCode );
861 static_cast<PCB_VIA*
>( item )->SetNetCode( newNetCode );
870 for(
PAD*
pad : changingPads )
872 commit.Modify(
pad );
873 pad->SetNetCode( newNetCode );
876 commit.Push(
_(
"Update Nets" ) );
923 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in onPadstackModeChanged" );
939 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in onEditLayerChanged" );
988 wxCHECK_MSG(
m_viaStack, ,
"Expected valid via stack in afterPadstackModeChanged" );
1008 std::vector choices = {
1010 _(
"Inner Layers" ),
1065 if( startLayer < 0 || endLayer < 0 )
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
TEARDROP_PARAMETERS & GetTeardropParams()
std::vector< int > m_TrackWidthList
std::vector< VIA_DIMENSION > m_ViasDimensionsList
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
virtual void SetLocked(bool aLocked)
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
FOOTPRINT * GetParentFootprint() const
virtual bool IsLocked() const
Information pertinent to a Pcbnew printed circuit board.
const NETINFO_LIST & GetNetInfo() const
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
int GetCopperLayerCount() const
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
int LayerDepth(PCB_LAYER_ID aStartLayer, PCB_LAYER_ID aEndLayer) const
bool LegacyTeardrops() const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Create an undo entry for an item that has been already modified.
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...
Class DIALOG_TRACK_VIA_PROPERTIES_BASE.
wxChoice * m_tentingFrontCtrl
wxStaticText * m_annularRingsLabel
wxBoxSizer * m_legacyTeardropsWarning
wxStaticText * m_tentingBackLabel
PCB_LAYER_BOX_SELECTOR * m_ViaStartLayer
wxCheckBox * m_lockedCbox
wxChoice * m_tentingBackCtrl
wxCheckBox * m_curvedEdges
wxStaticText * m_trackMaskMarginUnit
wxStaticText * m_predefinedTrackWidthsUnits
PCB_LAYER_BOX_SELECTOR * m_ViaEndLayer
wxChoice * m_predefinedTrackWidthsCtrl
wxStaticText * m_trackMaskMarginLabel
wxStaticBoxSizer * m_sbTrackSizer
wxChoice * m_annularRingsCtrl
wxStaticBoxSizer * m_sbViaSizer
wxBitmapToggleButton * m_btnLinkTenting
wxCheckBox * m_trackHasSolderMask
PCB_LAYER_BOX_SELECTOR * m_TrackLayerCtrl
wxCheckBox * m_cbTeardrops
wxStaticText * m_minTrackWidthHint
wxChoice * m_cbPadstackMode
wxCheckBox * m_viaNotFree
wxChoice * m_ViaTypeChoice
wxTextCtrl * m_ViaDiameterCtrl
wxChoice * m_predefinedViaSizesCtrl
wxTextCtrl * m_trackMaskMarginCtrl
wxTextCtrl * m_ViaDrillCtrl
wxStaticText * m_netSelectorLabel
wxStaticBitmap * m_bitmapTeardrop
wxStaticText * m_techLayersLabel
wxStaticBitmap * m_legacyTeardropsIcon
wxTextCtrl * m_TrackWidthCtrl
wxStaticText * m_predefinedViaSizesUnits
wxCheckBox * m_cbTeardropsUseNextTrack
NET_SELECTOR * m_netSelector
void onWidthEdit(wxCommandEvent &aEvent) override
const PCB_SELECTION & m_items
bool TransferDataFromWindow() override
void onUnitsChanged(wxCommandEvent &aEvent)
UNIT_BINDER m_viaDiameter
void onNetSelector(wxCommandEvent &aEvent)
void onTentingLinkToggle(wxCommandEvent &event) override
UNIT_BINDER m_trackMaskMargin
void afterPadstackModeChanged()
void onWidthSelect(wxCommandEvent &aEvent) override
UNIT_BINDER m_teardropWidthPercent
UNIT_BINDER m_teardropLenPercent
UNIT_BINDER m_teardropMaxWidth
void onTeardropsUpdateUi(wxUpdateUIEvent &event) override
void onPadstackModeChanged(wxCommandEvent &aEvent) override
void onViaEdit(wxCommandEvent &aEvent) override
bool confirmPadChange(const std::vector< PAD * > &connectedPads)
std::map< int, PCB_LAYER_ID > m_editLayerCtrlMap
void onFrontTentingChanged(wxCommandEvent &event) override
PCB_LAYER_ID m_editLayer
The currently-shown copper layer of the edited via(s)
UNIT_BINDER m_trackStartY
void onViaSelect(wxCommandEvent &aEvent) override
void onEditLayerChanged(wxCommandEvent &aEvent) override
void onViaNotFreeClicked(wxCommandEvent &aEvent) override
std::unique_ptr< PADSTACK > m_viaStack
Temporary padstack of the edited via(s)
UNIT_BINDER m_teardropMaxLen
UNIT_BINDER m_trackStartX
UNIT_BINDER m_teardropHDPercent
DIALOG_TRACK_VIA_PROPERTIES(PCB_BASE_FRAME *aParent, const PCB_SELECTION &aItems)
~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)
Checks the 'do not show again' setting for the dialog.
bool SetOKCancelLabels(const ButtonLabel &ok, const ButtonLabel &cancel) override
Shows the 'do not show again' checkbox.
int GetLayerSelection() const
int SetLayerSelection(int layer)
bool SetLayersHotkeys(bool value)
LSET is a set of PCB_LAYER_IDs.
LSEQ UIOrder() const
Returns 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.
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
void SetNetInfo(const NETINFO_LIST *aNetInfoList)
void SetBoard(BOARD *aBoard)
void SetIndeterminateString(const wxString &aString)
void SetSelectedNetcode(int aNetcode)
A PADSTACK defines the characteristics of a single or multi-layer pad, in the IPC sense of the word.
MASK_LAYER_PROPS & FrontOuterLayers()
void SetUnconnectedLayerMode(UNCONNECTED_LAYER_MODE aMode)
@ 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)
@ REMOVE_EXCEPT_START_AND_END
MASK_LAYER_PROPS & BackOuterLayers()
static constexpr PCB_LAYER_ID ALL_LAYERS
! Temporary layer identifier to identify code that is not padstack-aware
static constexpr PCB_LAYER_ID INNER_LAYERS
! The layer identifier to use for "inner layers" on top/inner/bottom padstacks
const wxString & GetNumber() const
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Returns the BOARD_DESIGN_SETTINGS for the open project.
void SetBoardFrame(PCB_BASE_FRAME *aFrame)
void SetNotAllowedLayerSet(LSET aMask)
void SetUndefinedLayerName(const wxString &aName)
void SetHasSolderMask(bool aVal)
bool HasSolderMask() const
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
std::optional< int > GetLocalSolderMaskMargin() const
virtual void SetWidth(int aWidth)
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
void SetBottomLayer(PCB_LAYER_ID aLayer)
void SetDrill(int aDrill)
Set the drill value for vias.
void SetIsFree(bool aFree=true)
void SetTopLayer(PCB_LAYER_ID aLayer)
void SetPosition(const VECTOR2I &aPoint) override
void SanitizeLayers()
Check so that the layers are correct depending on the type of via, and so that the top actually is on...
int GetWidth() const override
void SetViaType(VIATYPE aViaType)
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
void SetPadstack(const PADSTACK &aPadstack)
bool Empty() const
Checks if there is anything selected.
TEARDROP_PARAMETARS is a helper class to handle parameters needed to build teardrops for a board thes...
int m_CurveSegCount
True if the teardrop should be curved.
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.
EDA_UNITS GetUserUnits() const
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
Converts aValue in internal units into a united string.
virtual long long int GetValue()
Return the current value in Internal Units.
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 double GetDoubleValue()
Return the current value in Internal Units.
bool IsIndeterminate() const
Return true if the control holds the indeterminate value (for instance, if it represents a multiple s...
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 SetCoordType(ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
Set the current origin transform mode.
bool IsNull() const
Return true if the control holds no value (ie: empty string, not 0).
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
This file is part of the common library.
This file is part of the common library.
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
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)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
#define GEOMETRY_MIN_SIZE
std::optional< bool > has_solder_mask
True if this outer layer has mask (is not tented)
Container to handle a stock of specific vias each with unique diameter and drill sizes in the BOARD c...
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_PAD_T
class PAD, a pad in a footprint
@ 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_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...