26#include <wx/radiobut.h>
86 void displayNetsList(
const wxArrayString& netNamesList,
int selectIndex );
158 if( countA == countB )
161 return countB < countA;
205 case TEARDROP_TYPE::TD_NONE:
209 case TEARDROP_TYPE::TD_VIAPAD:
210 SetTitle( _(
"Teardrop on Vias/Pads Properties" ) );
213 case TEARDROP_TYPE::TD_TRACKEND:
214 SetTitle( _(
"Teardrop on Tracks Properties" ) );
218 SetTitle( _(
"Teardrop Properties" ) );
222 if( aConvertSettings )
224 wxStaticBox* bConvertBox = new wxStaticBox( this, wxID_ANY, _(
"Conversion Settings" ) );
225 wxStaticBoxSizer* bConvertSizer = new wxStaticBoxSizer( bConvertBox, wxVERTICAL );
227 m_rbCenterline = new wxRadioButton( this, wxID_ANY, _(
"Use centerlines" ) );
228 bConvertSizer->Add( m_rbCenterline, 0, wxLEFT|wxRIGHT, 5 );
230 bConvertSizer->AddSpacer( 2 );
231 m_rbEnvelope = new wxRadioButton( this, wxID_ANY, _(
"Create bounding hull" ) );
232 bConvertSizer->Add( m_rbEnvelope, 0, wxLEFT|wxRIGHT, 5 );
234 m_gapLabel = new wxStaticText( this, wxID_ANY, _(
"Gap:" ) );
235 m_gapCtrl = new wxTextCtrl( this, wxID_ANY );
236 m_gapUnits = new wxStaticText( this, wxID_ANY, _(
"mm" ) );
237 m_gap = new UNIT_BINDER( m_Parent, m_gapLabel, m_gapCtrl, m_gapUnits );
238 m_gap->SetValue( m_convertSettings->m_Gap );
240 wxBoxSizer* hullParamsSizer = new wxBoxSizer( wxHORIZONTAL );
241 hullParamsSizer->Add( m_gapLabel, 0, wxALIGN_CENTRE_VERTICAL|wxRIGHT, 5 );
242 hullParamsSizer->Add( m_gapCtrl, 1, wxALIGN_CENTRE_VERTICAL|wxLEFT|wxRIGHT, 5 );
243 hullParamsSizer->Add( m_gapUnits, 0, wxALIGN_CENTRE_VERTICAL|wxLEFT, 5 );
244 bConvertSizer->AddSpacer( 2 );
245 bConvertSizer->Add( hullParamsSizer, 0, wxLEFT, 26 );
247 bConvertSizer->AddSpacer( 6 );
248 m_cbDeleteOriginals = new wxCheckBox( this, wxID_ANY, _(
"Delete source objects after conversion" ) );
249 bConvertSizer->Add( m_cbDeleteOriginals, 0, wxALL, 5 );
251 GetSizer()->Insert( 0, bConvertSizer, 0, wxALL|wxEXPAND, 10 );
253 wxStaticLine* line = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
255 GetSizer()->Insert( 1, line, 0, wxLEFT|wxRIGHT|wxEXPAND, 10 );
257 SetTitle( _(
"Convert to Copper Zone" ) );
261 m_gapLabel = nullptr;
263 m_gapUnits = nullptr;
275 [&]( wxCommandEvent& )
383 wxCommandEvent event;
408 const int netCode = net->GetNetCode();
482 bool enabled = selection == 1 || selection == 2;
587 DisplayError(
this,
_(
"Thermal spoke width cannot be smaller than the minimum width." ) );
599 for(
int ii = 0; ii <
m_layers->GetItemCount(); ++ii )
601 if(
m_layers->GetToggleValue( (
unsigned) ii, 0 ) )
623 if( netSelection > 0 )
648 if( event.GetColumn() != 0 )
651 int row =
m_layers->ItemToRow( event.GetItem() );
653 bool checked =
m_layers->GetToggleValue( row, 0 );
656 m_layers->GetValue( layerID, row, 2 );
681 cfg->m_Zones.net_sort_mode = newConfig;
689 int sortMode = cfg->m_Zones.net_sort_mode;
734 if( netNameShowFilter.Len() == 0 )
735 netNameShowFilter = wxT(
"*" );
737 wxStringTokenizer showFilters( netNameShowFilter.Lower(),
"," );
741 while( showFilters.HasMoreTokens() )
743 wxString
filter = showFilters.GetNextToken().Trim(
false ).Trim(
true );
747 m_showNetsFilter.emplace_back( std::make_unique<EDA_PATTERN_MATCH_WILDCARD>() );
758 wxArrayString netNames;
769 if(
filter->Find( netName.Lower() ) )
771 netNames.Add( netName );
793 const int maxNetCode )
795 const std::vector<PAD*> pads =
m_Parent->GetBoard()->GetPads();
804 const int netCode =
pad->GetNetCode();
825 int selectedIndex = 0;
834 selectedIndex = netsList.Index( netName );
836 if( wxNOT_FOUND == selectedIndex )
840 netsList.Insert( netName, 1 );
846 return selectedIndex;
862 m_copperZoneInfo->ShowMessage(
_(
"<no net> will result in an isolated copper island." ),
constexpr EDA_IU_SCALE pcbIUScale
int GetCopperLayerCount() const
wxTextCtrl * m_tcGridStyleGap
wxStaticText * m_staticTextRotUnits
wxStaticText * m_cornerRadiusUnits
wxCheckBox * m_sortByPadsOpt
wxChoice * m_cornerSmoothingChoice
DIALOG_COPPER_ZONE_BASE(wxWindow *parent, wxWindowID id=ID_DIALOG_COPPER_ZONE_BASE, const wxString &title=_("Copper Zone Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
wxStaticText * m_outlineHatchUnits
wxCheckBox * m_hideAutoGenNetNamesOpt
wxSpinCtrl * m_PriorityLevelCtrl
wxStaticText * m_minWidthUnits
wxTextCtrl * m_tcGridStyleOrientation
wxTextCtrl * m_spokeWidthCtrl
wxListBox * m_ListNetNameSelection
wxStaticText * m_stBorderHatchPitchText
wxStaticText * m_minWidthLabel
wxStaticText * m_GridStyleGapUnits
wxTextCtrl * m_antipadCtrl
wxStaticText * m_staticTextGridGap
wxTextCtrl * m_minWidthCtrl
wxStaticText * m_antipadUnits
wxSpinCtrlDouble * m_spinCtrlSmoothValue
wxTextCtrl * m_tcIslandThreshold
wxTextCtrl * m_ShowNetNameFilter
wxTextCtrl * m_tcGridStyleThickness
wxStaticText * m_antipadLabel
wxDataViewListCtrl * m_layers
wxChoice * m_GridStyleCtrl
wxTextCtrl * m_outlineHatchPitchCtrl
wxStaticText * m_cornerRadiusLabel
wxChoice * m_OutlineDisplayCtrl
wxChoice * m_cbRemoveIslands
wxStaticText * m_spokeWidthUnits
wxStaticText * m_clearanceLabel
wxStaticText * m_staticText40
wxStaticText * m_GridStyleThicknessUnits
wxSpinCtrl * m_spinCtrlSmoothLevel
wxStaticText * m_islandThresholdLabel
wxStaticText * m_islandThresholdUnits
wxTextCtrl * m_clearanceCtrl
wxTextCtrl * m_cornerRadiusCtrl
wxStaticText * m_staticTextGrindOrient
wxStaticText * m_clearanceUnits
wxChoice * m_PadInZoneOpt
wxTextCtrl * m_tcZoneName
wxStaticText * m_staticTextStyleThickness
wxStaticText * m_spokeWidthLabel
wxInfoBar * m_copperZoneInfo
void loadPersistentNetSortConfigurations()
void updateDisplayedListOfNets()
UNIT_BINDER m_outlineHatchPitch
bool TransferDataFromWindow() override
void storePersistentNetSortConfigurations()
int m_cornerSmoothingType
void OnStyleSelection(wxCommandEvent &event) override
std::map< wxString, int > m_netNameToNetCode
NET_FILTER_LIST m_showNetsFilter
void OnNetSortingOptionSelected(wxCommandEvent &event) override
DIALOG_COPPER_ZONE(PCB_BASE_FRAME *aParent, ZONE_SETTINGS *aSettings, CONVERT_SETTINGS *aConvertSettings)
bool m_hideAutoGeneratedNets
wxArrayString buildListOfNetsToDisplay()
void sortNetsByPadCount(std::vector< NETINFO_ITEM * > &nets, const int maxNetCode)
int ensureSelectedNetIsVisible(int selectedNetCode, wxArrayString &netsList)
UNIT_BINDER m_gridStyleThickness
wxRadioButton * m_rbCenterline
UNIT_BINDER m_gridStyleGap
bool TransferDataToWindow() override
wxString getUnescapedNetName(const NETINFO_ITEM *net)
void readFilteringAndSortingCriteria()
void updateShowNetsFilter()
void OnLayerSelection(wxDataViewEvent &event) override
CONVERT_SETTINGS * m_convertSettings
bool m_netSortingByPadCount
void OnShowNetNameFilterChange(wxCommandEvent &event) override
void OnRemoveIslandsSelection(wxCommandEvent &event) override
static constexpr int HIDE_ANONYMOUS_NETS
void sortNetsIfRequired()
std::vector< NET_FILTER > NET_FILTER_LIST
wxCheckBox * m_cbDeleteOriginals
static constexpr int INVALID_NET_CODE
void OnPadInZoneSelection(wxCommandEvent &event) override
std::unique_ptr< EDA_PATTERN_MATCH > NET_FILTER
UNIT_BINDER m_antipadClearance
PCB_BASE_FRAME * m_Parent
static constexpr int SORT_BY_PAD_COUNT
static constexpr int DEFAULT_SORT_CONFIG
std::vector< NETINFO_ITEM * > m_netInfoItemList
void updateCurrentNetSelection()
void OnUpdateUI(wxUpdateUIEvent &) override
void readNetInformation()
int m_currentlySelectedNetcode
UNIT_BINDER m_cornerRadius
wxStaticText * m_gapLabel
UNIT_BINDER m_gridStyleRotation
wxStaticText * m_gapUnits
void displayNetsList(const wxArrayString &netNamesList, int selectIndex)
wxRadioButton * m_rbEnvelope
UNIT_BINDER m_islandThreshold
void OnNetSelectionUpdated(wxCommandEvent &event) override
static constexpr int NO_PERSISTENT_SORT_MODE
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...
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Handle the data for a net.
const wxString & GetNetname() const
Container for NETINFO_ITEM elements, which are the nets.
unsigned GetNetCount() const
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
ZONE_SETTINGS handles zones parameters.
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
This file is part of the common library.
static bool sortNetsByNodes(const NETINFO_ITEM *a, const NETINFO_ITEM *b)
int InvokeCopperZonesEditor(PCB_BASE_FRAME *aCaller, ZONE_SETTINGS *aSettings, CONVERT_SETTINGS *aConvertSettings)
Function InvokeCopperZonesEditor invokes up a modal dialog window for copper zone editing.
static bool sortNetsByNames(const NETINFO_ITEM *a, const NETINFO_ITEM *b)
static std::vector< int > padCountListByNet
Abstract pattern-matching tool and implementations.
PCB_LAYER_ID ToLAYER_ID(int aLayer)
wxString UnescapeString(const wxString &aSource)
T NormalizeAngle180(T Angle)
Normalize angle to be in the -180.0 .
ISLAND_REMOVAL_MODE
Whether or not to remove isolated islands from a zone.
#define ZONE_CLEARANCE_MAX_VALUE_MM
@ THERMAL
Use thermal relief for pads.
@ THT_THERMAL
Thermal relief only for THT pads.
@ NONE
Pads are not covered.
@ FULL
pads are covered by copper
#define ZONE_BORDER_HATCH_MINDIST_MM
#define ZONE_THICKNESS_MIN_VALUE_MM
#define ZONE_BORDER_HATCH_MAXDIST_MM