49 m_trackStartX( aParent, m_TrackStartXLabel, m_TrackStartXCtrl, nullptr ),
50 m_trackStartY( aParent, m_TrackStartYLabel, m_TrackStartYCtrl, m_TrackStartYUnit ),
51 m_trackEndX( aParent, m_TrackEndXLabel, m_TrackEndXCtrl, nullptr ),
52 m_trackEndY( aParent, m_TrackEndYLabel, m_TrackEndYCtrl, m_TrackEndYUnit ),
53 m_trackWidth( aParent, m_TrackWidthLabel, m_TrackWidthCtrl, m_TrackWidthUnit ),
54 m_viaX( aParent, m_ViaXLabel, m_ViaXCtrl, nullptr ),
55 m_viaY( aParent, m_ViaYLabel, m_ViaYCtrl, m_ViaYUnit ),
56 m_viaDiameter( aParent, m_ViaDiameterLabel, m_ViaDiameterCtrl, m_ViaDiameterUnit ),
57 m_viaDrill( aParent, m_ViaDrillLabel, m_ViaDrillCtrl, m_ViaDrillUnit ),
58 m_teardropHDPercent( aParent, m_stHDRatio, m_tcHDRatio, m_stHDRatioUnits ),
59 m_teardropLenPercent( aParent, m_stLenPercentLabel, m_tcLenPercent, m_stLenPercentUnits ),
60 m_teardropMaxLen( aParent, m_stMaxLen, m_tcTdMaxLen, m_stMaxLenUnits ),
61 m_teardropHeightPercent( aParent, m_stHeightPercentLabel, m_tcHeightPercent, m_stHeightPercentUnits ),
62 m_teardropMaxHeight( aParent, m_stMaxHeight, m_tcMaxHeight, m_stMaxHeightUnits ),
89 VIATYPE viaType = VIATYPE::NOT_DEFINED;
108 bool hasLocked =
false;
109 bool hasUnlocked =
false;
114 int selection_first_layer = -1;
115 int selection_last_layer = -1;
118 int track_selection_layer = -1;
120 auto getAnnularRingSelection =
123 if( !
via->GetRemoveUnconnected() )
125 else if(
via->GetKeepStartEnd() )
144 switch( item->Type() )
159 track_selection_layer = t->
GetLayer();
179 if( track_selection_layer != t->
GetLayer() )
205 selection_first_layer = v->
TopLayer();
233 viaType = VIATYPE::NOT_DEFINED;
238 if( selection_first_layer != v->
TopLayer() )
356 int viaSelection = wxNOT_FOUND;
359 for(
unsigned ii = 1; ii < aParent->
GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
367 if( viaSelection == wxNOT_FOUND
371 viaSelection = ii - 1;
384 case VIATYPE::NOT_DEFINED:
m_ViaTypeChoice->SetSelection( wxNOT_FOUND );
break;
403 int widthSelection = wxNOT_FOUND;
406 for(
unsigned ii = 1; ii < aParent->
GetDesignSettings().m_TrackWidthList.size(); ii++ )
413 widthSelection = ii - 1;
423 if( hasLocked && hasUnlocked )
501 if( changingPads.size() == 1 )
503 PAD*
pad = *changingPads.begin();
504 msg.Printf(
_(
"Changing the net will also update %s pad %s to %s." ),
505 pad->GetParent()->GetReference(),
509 else if( changingPads.size() == 2 )
511 PAD* pad1 = *changingPads.begin();
512 PAD* pad2 = *( ++changingPads.begin() );
513 msg.Printf(
_(
"Changing the net will also update %s pad %s and %s pad %s to %s." ),
522 msg.Printf(
_(
"Changing the net will also update %lu connected pads to %s." ),
523 static_cast<unsigned long>( changingPads.size() ),
527 KIDIALOG dlg(
this, msg,
_(
"Confirmation" ), wxOK | wxCANCEL | wxICON_WARNING );
551 DisplayError( GetParent(),
_(
"Via hole size must be smaller than via diameter" ) );
560 DisplayError( GetParent(),
_(
"Via start layer and end layer cannot be the same" ) );
576 bool changeLock =
m_lockedCbox->Get3StateValue() != wxCHK_UNDETERMINED;
577 bool setLock =
m_lockedCbox->Get3StateValue() == wxCHK_CHECKED;
583 switch( item->Type() )
639 if(
m_viaNotFree->Get3StateValue() != wxCHK_UNDETERMINED )
693 wxFAIL_MSG( wxT(
"Unhandled via type" ) );
696 case VIATYPE::THROUGH:
697 case VIATYPE::BLIND_BURIED:
702 case VIATYPE::MICROVIA:
767 bool updateNets =
false;
768 std::vector<PAD*> changingPads;
777 auto connectedItems = connectivity->GetConnectedItems( boardItem,
786 if(
pad->GetNetCode() != newNetCode && !
alg::contains( changingPads, citem ) )
787 changingPads.push_back(
pad );
802 switch( item->Type() )
806 static_cast<PCB_TRACK*
>( item )->SetNetCode( newNetCode );
810 static_cast<PCB_VIA*
>( item )->SetNetCode( newNetCode );
819 for(
PAD*
pad : changingPads )
822 pad->SetNetCode( newNetCode );
850 bool enableNC = aEvent.IsChecked();
875 bool enableNC = aEvent.IsChecked();
905 if( startLayer < 0 || endLayer < 0 )
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.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
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.
virtual bool IsLocked() const
const NETINFO_LIST & GetNetInfo() const
int GetCopperLayerCount() const
int LayerDepth(PCB_LAYER_ID aStartLayer, PCB_LAYER_ID aEndLayer) const
bool LegacyTeardrops() const
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
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.
wxStaticText * m_annularRingsLabel
wxBoxSizer * m_legacyTeardropsWarning
PCB_LAYER_BOX_SELECTOR * m_ViaStartLayer
wxCheckBox * m_lockedCbox
wxCheckBox * m_curvedEdges
wxChoice * m_DesignRuleViasCtrl
wxCheckBox * m_trackNetclass
wxStaticText * m_DesignRuleVias
PCB_LAYER_BOX_SELECTOR * m_ViaEndLayer
wxStaticBoxSizer * m_sbTrackSizer
wxChoice * m_annularRingsCtrl
wxStaticBoxSizer * m_sbViaSizer
wxCheckBox * m_viaNetclass
PCB_LAYER_BOX_SELECTOR * m_TrackLayerCtrl
wxSpinCtrl * m_curvePointsCtrl
wxStaticText * m_DesignRuleViasUnit
wxCheckBox * m_cbTeardrops
wxStaticText * m_minTrackWidthHint
wxCheckBox * m_viaNotFree
wxChoice * m_ViaTypeChoice
wxTextCtrl * m_ViaDiameterCtrl
wxStaticText * m_DesignRuleWidths
wxTextCtrl * m_ViaDrillCtrl
wxStaticText * m_netSelectorLabel
wxStaticBitmap * m_bitmapTeardrop
wxChoice * m_DesignRuleWidthsCtrl
wxStaticBitmap * m_legacyTeardropsIcon
wxTextCtrl * m_TrackWidthCtrl
wxCheckBox * m_cbTeardropsUseNextTrack
wxStaticText * m_DesignRuleWidthsUnits
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
UNIT_BINDER m_teardropHeightPercent
void onNetSelector(wxCommandEvent &aEvent)
void onWidthSelect(wxCommandEvent &aEvent) override
UNIT_BINDER m_teardropLenPercent
void onTeardropsUpdateUi(wxUpdateUIEvent &event) override
void onViaEdit(wxCommandEvent &aEvent) override
bool confirmPadChange(const std::vector< PAD * > &connectedPads)
UNIT_BINDER m_teardropMaxHeight
DIALOG_TRACK_VIA_PROPERTIES(PCB_BASE_FRAME *aParent, const PCB_SELECTION &aItems, BOARD_COMMIT &aCommit)
void onCurvedEdgesUpdateUi(wxUpdateUIEvent &event) override
UNIT_BINDER m_trackStartY
void onViaSelect(wxCommandEvent &aEvent) override
void onViaNotFreeClicked(wxCommandEvent &aEvent) override
void onTrackNetclassCheck(wxCommandEvent &aEvent) override
UNIT_BINDER m_teardropMaxLen
UNIT_BINDER m_trackStartX
UNIT_BINDER m_teardropHDPercent
void onViaNetclassCheck(wxCommandEvent &aEvent) override
~DIALOG_TRACK_VIA_PROPERTIES()
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)
static LSET AllNonCuMask()
Return a mask holding all layer minus CU layers.
A collection of nets and the parameters used to route or test these nets.
int GetViaDiameter() const
int GetuViaDiameter() const
void SetBoard(BOARD *aBoard)
void SetIndeterminateString(const wxString &aString)
void SetSelectedNetcode(int aNetcode)
void SetNetInfo(NETINFO_LIST *aNetInfoList)
const wxString & GetNumber() const
FOOTPRINT * GetParent() 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 SetWidth(int aWidth)
void SetEnd(const VECTOR2I &aEnd)
void SetStart(const VECTOR2I &aStart)
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
MINOPTMAX< int > GetWidthConstraint(wxString *aSource=nullptr) const
void SetRemoveUnconnected(bool aSet)
Sets the unconnected removal property.
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
void SetKeepStartEnd(bool aSet)
Sets whether we keep the start and end annular rings even if they are not connected.
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...
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
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
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....
wxString StringFromValue(double aValue, bool aAddUnitLabel=false, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Converts aValue in internal units into a united string.
EDA_UNITS GetUserUnits() const
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 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.
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.
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 KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
wxString GetLabel(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
wxFont GetInfoFont(wxWindow *aWindow)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
#define GEOMETRY_MIN_SIZE
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...