KiCad PCB EDA Suite
Loading...
Searching...
No Matches
footprint_editor_utils.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20#include <board_commit.h>
21#include <confirm.h>
24#include <footprint_info.h>
25#include <footprint_tree_pane.h>
27#include <functional>
28#include <kiway_mail.h>
29#include <pcb_group.h>
30#include <pcb_marker.h>
31#include <pcb_textbox.h>
32#include <pcb_barcode.h>
33#include <pcb_table.h>
34#include <pcb_shape.h>
35#include <pad.h>
36#include <zone.h>
38#include <tool/tool_manager.h>
39#include <tools/pcb_actions.h>
43#include <widgets/lib_tree.h>
45#include <pcb_dimension.h>
46#include <project_pcb.h>
47#include <view/view_controls.h>
50
51using namespace std::placeholders;
52
53
55{
56 bool is_last_fp_from_brd = IsCurrentFPFromBoard();
57
58 // The legacy path wipes the shared board; the tab path leaves other tabs untouched.
59 const bool useTabs = ( m_tabsPanel != nullptr ) && aFPID.IsValid();
60
61 if( useTabs )
62 {
63 const wxString key = aFPID.GetLibNickname().wx_str() + wxT( ':' ) + aFPID.GetLibItemName().wx_str();
64
65 // Reactivate rather than reload, which would discard in-tab edits.
66 if( int existing = m_tabsPanel->FindTab( key ); existing >= 0 )
67 {
68 m_tabsPanel->SelectTab( existing );
69
70 m_treePane->GetLibTree()->ExpandLibId( aFPID );
71
72 m_centerItemOnIdle = aFPID;
73 Bind( wxEVT_IDLE, &FOOTPRINT_EDIT_FRAME::centerItemIdleHandler, this );
74
75 m_treePane->GetLibTree()->RefreshLibTree(); // update highlighting
76
77 return;
78 }
79 }
80
81 FOOTPRINT* footprint = LoadFootprint( aFPID );
82
83 if( !footprint )
84 return;
85
86 if( useTabs )
87 {
88 // A board-sourced or new footprint occupies the frame-owned board with no backing tab.
89 // Switching to the library footprint's tab frees that board, so prompt to save those edits
90 // first, the same way the legacy single-board path does. A tab-owned board survives the
91 // switch untouched and needs no prompt.
93 {
95 this, _( "The current footprint has been modified. Save changes?" ),
96 [&]() -> bool
97 {
98 return SaveFootprint( GetBoard()->Footprints().front() );
99 } ) )
100 {
101 // AddFootprintToBoard would have taken ownership; on cancel we still own the clone.
102 delete footprint;
103 return;
104 }
105 }
106
108 AddFootprintToBoard( footprint );
109 }
110 else
111 {
112 if( !Clear_Pcb( true ) )
113 {
114 // AddFootprintToBoard would have taken ownership; on cancel we still own the clone.
115 delete footprint;
116 return;
117 }
118
120 AddFootprintToBoard( footprint );
121 }
122
123 footprint->ClearFlags();
124
125 // if either reference or value are missing, reinstall them -
126 // otherwise you cannot see what you are doing on board
127 if( footprint->Reference().GetText().IsEmpty() )
128 footprint->SetReference( wxT( "Ref**" ) );
129
130 if( footprint->Value().GetText().IsEmpty() )
131 footprint->SetValue( wxT( "Val**" ) );
132
133 Zoom_Automatique( false );
134
135 Update3DView( true, true );
136
137 GetScreen()->SetContentModified( false );
138
139 UpdateView();
140 GetCanvas()->Refresh();
141
142 // Update the save items if needed.
143 if( is_last_fp_from_brd )
144 {
147 }
148
149 m_treePane->GetLibTree()->ExpandLibId( aFPID );
150
151 m_centerItemOnIdle = aFPID;
152 Bind( wxEVT_IDLE, &FOOTPRINT_EDIT_FRAME::centerItemIdleHandler, this );
153
154 m_treePane->GetLibTree()->RefreshLibTree(); // update highlighting
155}
156
157
158bool FOOTPRINT_EDIT_FRAME::BeginNewFootprint( const wxString& aLibrary )
159{
160 // No tab strip or target library to key a tab on, so use the legacy single-board clear.
161 if( !m_tabsPanel || aLibrary.IsEmpty() )
162 return Clear_Pcb( true );
163
164 // The new footprint opens in its own tab. Only a dirty tab-less frame board needs saving.
166 {
167 if( !HandleUnsavedChanges( this, _( "The current footprint has been modified. Save changes?" ),
168 [&]() -> bool
169 {
170 return SaveFootprint( GetBoard()->Footprints().front() );
171 } ) )
172 {
173 return false;
174 }
175 }
176
177 return true;
178}
179
180
182{
183 m_treePane->GetLibTree()->CenterLibId( m_centerItemOnIdle );
184 Unbind( wxEVT_IDLE, &FOOTPRINT_EDIT_FRAME::centerItemIdleHandler, this );
185}
186
187
188void FOOTPRINT_EDIT_FRAME::OnTabCharHook( wxKeyEvent& aEvent )
189{
190 const bool isTab = aEvent.GetKeyCode() == WXK_TAB;
191 const bool ctrlOnly = aEvent.ControlDown() && !aEvent.AltDown() && !aEvent.MetaDown();
192
193 // Ctrl+W arrives as 'W' or the control char depending on platform, so accept both.
194 const int keyCode = aEvent.GetKeyCode();
195 const bool isCtrlW = ctrlOnly && !aEvent.ShiftDown()
196 && ( keyCode == 'W' || keyCode == ( 'W' - '@' ) );
197
198 if( isCtrlW && m_tabsPanel && m_tabsPanel->Model().Entries().size() >= 1 )
199 {
201 return;
202 }
203
204 if( !isTab || !ctrlOnly || !m_tabsPanel )
205 {
206 aEvent.Skip();
207 return;
208 }
209
210 // The appearance panel owns Ctrl+Tab for its layer-preset cycle while focused, so defer to it.
211 if( APPEARANCE_CONTROLS* appearance = GetAppearancePanel() )
212 {
213 for( wxWindow* focus = wxWindow::FindFocus(); focus; focus = focus->GetParent() )
214 {
215 if( focus == appearance )
216 {
217 aEvent.Skip();
218 return;
219 }
220 }
221 }
222
223 AdvanceFootprintTab( !aEvent.ShiftDown() );
224
225 // Do not Skip, so the GTK default Tab focus-traversal does not also run.
226}
227
228
230{
231public:
233 {
234 wxASSERT( aFootprint );
235
236 m_nickname = aFootprint->GetFPID().GetLibNickname().wx_str();
237 m_fpname = aFootprint->GetFPID().GetLibItemName().wx_str();
240 m_keywords = aFootprint->GetKeywords();
241 m_doc = aFootprint->GetLibDescription();
242 m_loaded = true;
243 }
244};
245
246
247void FOOTPRINT_EDIT_FRAME::UpdateLibraryTree( const wxDataViewItem& aTreeItem,
248 FOOTPRINT* aFootprint )
249{
250 wxCHECK( aFootprint, /* void */ );
251
252 BASIC_FOOTPRINT_INFO footprintInfo( aFootprint );
253
254 if( aTreeItem.IsOk() ) // Can be not found in tree if the current footprint is imported
255 // from file therefore not yet in tree.
256 {
257 static_cast<LIB_TREE_NODE_ITEM*>( aTreeItem.GetID() )->Update( &footprintInfo );
258 m_treePane->GetLibTree()->RefreshLibTree();
259 }
260}
261
262
264{
265 LIB_ID oldFPID = aFootprint->GetFPID();
266
267 DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR dialog( this, aFootprint );
268 dialog.ShowQuasiModal();
269
270 // Update design settings for footprint layers
272
273 // Update library tree and title in case of a name change
274 wxDataViewItem treeItem = m_adapter->FindItem( oldFPID );
275 UpdateLibraryTree( treeItem, aFootprint );
276 UpdateTitle();
277
280}
281
282
284{
285 switch( aItem->Type() )
286 {
289 break;
290
291 case PCB_BARCODE_T:
292 ShowBarcodePropertiesDialog( static_cast<PCB_BARCODE*>( aItem ) );
293 break;
294
295 case PCB_PAD_T:
296 ShowPadPropertiesDialog( static_cast<PAD*>( aItem ) );
297 break;
298
299 case PCB_FOOTPRINT_T:
300 editFootprintProperties( static_cast<FOOTPRINT*>( aItem ) );
301 GetCanvas()->Refresh();
302 break;
303
304 case PCB_FIELD_T:
305 case PCB_TEXT_T:
306 ShowTextPropertiesDialog( static_cast<PCB_TEXT*>( aItem ) );
307 break;
308
309 case PCB_TEXTBOX_T:
310 ShowTextBoxPropertiesDialog( static_cast<PCB_TEXTBOX*>( aItem ) );
311 break;
312
313 case PCB_TABLE_T:
314 {
315 DIALOG_TABLE_PROPERTIES dlg( this, static_cast<PCB_TABLE*>( aItem ) );
316
317 //QuasiModal required for Scintilla auto-complete
318 dlg.ShowQuasiModal();
319 break;
320 }
321
322 case PCB_SHAPE_T :
323 ShowGraphicItemPropertiesDialog( static_cast<PCB_SHAPE*>( aItem ) );
324 break;
325
327 case PCB_DIM_CENTER_T:
328 case PCB_DIM_RADIAL_T:
330 case PCB_DIM_LEADER_T:
331 {
332 DIALOG_DIMENSION_PROPERTIES dlg( this, static_cast<PCB_DIMENSION_BASE*>( aItem ) );
333
334 dlg.ShowModal();
335 break;
336 }
337
338 case PCB_ZONE_T:
339 {
340 ZONE* zone = static_cast<ZONE*>( aItem );
341 bool success = false;
342 ZONE_SETTINGS zoneSettings;
343
344 zoneSettings << *static_cast<ZONE*>( aItem );
345
346 if( zone->GetIsRuleArea() )
347 success = InvokeRuleAreaEditor( this, &zoneSettings ) == wxID_OK;
348 else if( zone->IsOnCopperLayer() )
349 success = InvokeCopperZonesEditor( this, zone, &zoneSettings ) == wxID_OK;
350 else
351 success = InvokeNonCopperZonesEditor( this, &zoneSettings ) == wxID_OK;
352
353 if( success )
354 {
355 BOARD_COMMIT commit( this );
356 commit.Modify( zone );
357 commit.Push( _( "Edit Zone" ) );
358 zoneSettings.ExportSetting( *static_cast<ZONE*>( aItem ) );
359 }
360
361 break;
362 }
363
364 case PCB_GROUP_T:
366 static_cast<EDA_GROUP*>( static_cast<PCB_GROUP*>( aItem ) ) );
367 break;
368
369 case PCB_MARKER_T:
370 m_toolManager->GetTool<FOOTPRINT_EDITOR_CONTROL>()->CrossProbe( static_cast<PCB_MARKER*>( aItem ) );
371 break;
372
373 case PCB_POINT_T:
374 break;
375
376 default:
377 wxFAIL_MSG( wxT( "FOOTPRINT_EDIT_FRAME::OnEditItemRequest: unsupported item type " )
378 + aItem->GetClass() );
379 break;
380 }
381}
382
383
388
389
391{
392 const PCB_LAYER_ID oldLayer = GetActiveLayer();
393
394 if( oldLayer == aLayer )
395 return;
396
398
399 /*
400 * Follow the PCB editor logic for showing/hiding clearance layers: show only for
401 * the active copper layer or a front/back non-copper layer.
402 */
403 const auto getClearanceLayerForActive = []( PCB_LAYER_ID aActiveLayer ) -> std::optional<int>
404 {
405 if( IsCopperLayer( aActiveLayer ) )
406 return CLEARANCE_LAYER_FOR( aActiveLayer );
407
408 return std::nullopt;
409 };
410
411 if( std::optional<int> oldClearanceLayer = getClearanceLayerForActive( oldLayer ) )
412 GetCanvas()->GetView()->SetLayerVisible( *oldClearanceLayer, false );
413
414 if( std::optional<int> newClearanceLayer = getClearanceLayerForActive( aLayer ) )
415 GetCanvas()->GetView()->SetLayerVisible( *newClearanceLayer, true );
416
417 m_appearancePanel->OnLayerChanged();
418
419 m_toolManager->RunAction( PCB_ACTIONS::layerChanged ); // notify other tools
420 GetCanvas()->SetFocus(); // allow capture of hotkeys
421 GetCanvas()->SetHighContrastLayer( aLayer );
422 GetCanvas()->Refresh();
423}
424
425
426bool FOOTPRINT_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
427{
428 if( !Clear_Pcb( true ) )
429 return false; // this command is aborted
430
432 ImportFootprint( aFileSet[ 0 ] );
433
434 if( GetBoard()->GetFirstFootprint() )
436
437 GetScreen()->SetContentModified( false );
438 Zoom_Automatique( false );
439 GetCanvas()->Refresh();
440
441 return true;
442}
443
444
446{
447 const std::string& payload = mail.GetPayload();
448
449 switch( mail.Command() )
450 {
451 case MAIL_FP_EDIT:
452 if( !payload.empty() )
453 {
454 wxFileName fpFileName( payload );
455 wxString libNickname;
456 wxString msg;
457
459 std::optional<LIBRARY_TABLE_ROW*> optRow = adapter->FindRowByURI( fpFileName.GetPath() );
460
461 if( !optRow )
462 {
463 msg.Printf( _( "The current configuration does not include the footprint library '%s'." ),
464 fpFileName.GetPath() );
465 msg += wxS( "\n" ) + _( "Use Manage Footprint Libraries to edit the configuration." );
466 DisplayErrorMessage( this, _( "Library not found in footprint library table." ),
467 msg );
468 break;
469 }
470
471 libNickname = ( *optRow )->Nickname();
472
473 if( !adapter->HasLibrary( libNickname, true ) )
474 {
475 msg.Printf( _( "The footprint library '%s' is not enabled in the current configuration." ),
476 libNickname );
477 msg += wxS( "\n" ) + _( "Use Manage Footprint Libraries to edit the configuration." );
478 DisplayErrorMessage( this, _( "Footprint library not enabled." ), msg );
479 break;
480 }
481
482 LIB_ID fpId( libNickname, fpFileName.GetName() );
483
484 if( m_treePane )
485 {
486 m_treePane->GetLibTree()->SelectLibId( fpId );
487 wxCommandEvent event( EVT_LIBITEM_CHOSEN );
488 wxPostEvent( m_treePane, event );
489 }
490 }
491
492 break;
493
494 case MAIL_RELOAD_LIB:
495 SyncLibraryTree( true );
497 break;
498
499 default:
500 break;
501 }
502}
static TOOL_ACTION groupProperties
Definition actions.h:243
void SetContentModified(bool aModified=true)
Definition base_screen.h:55
BASIC_FOOTPRINT_INFO(FOOTPRINT *aFootprint)
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:81
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
Definition board.h:587
COLOR4D GetColor(int aLayer) const
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
Definition commit.h:102
int ShowModal() override
void ReCreateMenuBar()
Recreate the menu bar.
virtual void ReCreateHToolbar()
virtual void Zoom_Automatique(bool aWarpPointer)
Redraw the screen with best zoom level and the best centering that shows all the page or the board.
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 SetFocus() override
A set of EDA_ITEMs (i.e., without duplicates).
Definition eda_group.h:42
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:108
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition eda_item.h:154
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:110
Module editor specific tools.
void editFootprintProperties(FOOTPRINT *aFootprint)
Run the Footprint Properties dialog and handle changes made in it.
void UpdateLibraryTree(const wxDataViewItem &treeItem, FOOTPRINT *aFootprint)
Update a single node in the library tree.
void SyncLibraryTree(bool aProgress)
Synchronize the footprint library tree to the current state of the footprint library table.
void UpdateMsgPanel() override
Redraw the message panel.
EDITOR_TABS_PANEL * m_tabsPanel
bool SaveFootprint(FOOTPRINT *aFootprint)
Save in an existing library a given footprint.
void OnTabCharHook(wxKeyEvent &aEvent)
Cycle footprint tabs from the CHAR_HOOK stream, since GTK cannot register WXK_TAB as a menu accelerat...
void LoadFootprintFromLibrary(LIB_ID aFPID)
bool BeginNewFootprint(const wxString &aLibrary)
Prepare the editor for a new footprint, returning false if the user cancels.
FOOTPRINT * ImportFootprint(const wxString &aName=wxT(""))
Read a file containing only one footprint.
bool IsContentModified() const override
Get if any footprints or libraries have been modified but not saved.
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...
wxObjectDataPtr< LIB_TREE_MODEL_ADAPTER > m_adapter
void centerItemIdleHandler(wxIdleEvent &aEvent)
bool Clear_Pcb(bool doAskAboutUnsavedChanges)
Delete all and reinitialize the current board.
Definition initpcb.cpp:104
void KiwayMailIn(KIWAY_MAIL_EVENT &mail) override
Receive #KIWAY_ROUTED_EVENT messages from other players.
void OnEditItemRequest(BOARD_ITEM *aItem) override
Install the corresponding dialog editor for the given item.
void AdvanceFootprintTab(bool aForward)
Advance the active tab forward or backward in MRU order.
void SetActiveLayer(PCB_LAYER_ID aLayer) override
void AddFootprintToBoard(FOOTPRINT *aFootprint) override
Override from PCB_BASE_EDIT_FRAME which adds a footprint to the editor's dummy board,...
bool activeBoardOwnedByTab() const
True when a tab context owns the frame's borrowed board, so the frame must not delete it.
void CloseActiveFootprintTab()
Request closing the active tab, prompting to save if it is modified.
FOOTPRINT_TREE_PANE * m_treePane
void RefreshLibraryTree()
Redisplay the library tree.
bool OpenProjectFiles(const std::vector< wxString > &aFileSet, int aCtl=0) override
Load a KiCad board (.kicad_pcb) from aFileName.
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Helper to retrieve the current color settings.
wxString m_doc
Footprint description.
wxString m_fpname
Module name.
wxString m_keywords
Footprint keywords.
unsigned m_unique_pad_count
Number of unique pads.
unsigned m_pad_count
Number of pads.
wxString m_nickname
library as known in FP_LIB_TABLE
An interface to the global shared library manager that is schematic-specific and linked to one projec...
wxString GetLibDescription() const
Definition footprint.h:458
unsigned GetPadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of pads.
PCB_FIELD & Value()
read/write accessors:
Definition footprint.h:877
const LIB_ID & GetFPID() const
Definition footprint.h:441
void SetReference(const wxString &aReference)
Definition footprint.h:847
unsigned GetUniquePadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of unique non-blank pads.
void SetValue(const wxString &aValue)
Definition footprint.h:868
PCB_FIELD & Reference()
Definition footprint.h:878
wxString GetKeywords() const
Definition footprint.h:461
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
virtual wxString GetClass() const =0
Return the class name.
void SetLayerVisible(int aLayer, bool aVisible=true)
Control the visibility of a particular layer.
Definition view.h:405
Carry a payload from one KIWAY_PLAYER to another within a PROJECT.
Definition kiway_mail.h:34
std::string & GetPayload()
Return the payload, which can be any text but it typically self identifying s-expression.
Definition kiway_mail.h:52
MAIL_T Command()
Returns the MAIL_T associated with this mail.
Definition kiway_mail.h:44
std::optional< LIBRARY_TABLE_ROW * > FindRowByURI(const wxString &aUri, LIBRARY_TABLE_SCOPE aScope=LIBRARY_TABLE_SCOPE::BOTH) const
Like LIBRARY_MANAGER::FindRowByURI but filtered to the LIBRARY_TABLE_TYPE of this adapter.
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library tables.
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:45
bool IsValid() const
Check if this LID_ID is valid.
Definition lib_id.h:168
const UTF8 & GetLibItemName() const
Definition lib_id.h:98
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition lib_id.h:83
Node type: LIB_ID.
void Update(LIB_TREE_ITEM *aItem)
Update the node using data from a LIB_ALIAS object.
Definition pad.h:61
static TOOL_ACTION layerChanged
int ShowTextBoxPropertiesDialog(PCB_TEXTBOX *aTextBox)
APPEARANCE_CONTROLS * GetAppearancePanel()
APPEARANCE_CONTROLS * m_appearancePanel
void ShowReferenceImagePropertiesDialog(BOARD_ITEM *aBitmap)
void ShowBarcodePropertiesDialog(PCB_BARCODE *aText)
void ShowGraphicItemPropertiesDialog(PCB_SHAPE *aShape)
void ShowPadPropertiesDialog(PAD *aPad)
virtual void SetActiveLayer(PCB_LAYER_ID aLayer)
FOOTPRINT * LoadFootprint(const LIB_ID &aFootprintId)
Attempt to load aFootprintId from the footprint library table.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
BOARD * GetBoard() const
virtual void Update3DView(bool aMarkDirty, bool aRefresh, const wxString *aTitle=nullptr)
Update the 3D view, if the viewer is opened by this frame.
Abstract dimension API.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
virtual void SetHighContrastLayer(int aLayer) override
SetHighContrastLayer(), with some extra smarts for PCB.
A set of BOARD_ITEMs (i.e., without duplicates).
Definition pcb_group.h:49
static FOOTPRINT_LIBRARY_ADAPTER * FootprintLibAdapter(PROJECT *aProject)
TOOL_MANAGER * m_toolManager
wxString wx_str() const
Definition utf8.cpp:41
ZONE_SETTINGS handles zones parameters.
void ExportSetting(ZONE &aTarget, bool aFullExport=true) const
Function ExportSetting copy settings to a given zone.
Handle a list of polygons defining a copper zone.
Definition zone.h:70
bool GetIsRuleArea() const
Accessors to parameters used in Rule Area zones:
Definition zone.h:811
bool IsOnCopperLayer() const override
Definition zone.cpp:574
bool HandleUnsavedChanges(wxWindow *aParent, const wxString &aMessage, const std::function< bool()> &aSaveFunction)
Display a dialog with Save, Cancel and Discard Changes buttons.
Definition confirm.cpp:146
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition confirm.cpp:217
This file is part of the common library.
int InvokeCopperZonesEditor(PCB_BASE_FRAME *aCaller, ZONE *aZone, ZONE_SETTINGS *aSettings, CONVERT_SETTINGS *aConvertSettings)
Function InvokeCopperZonesEditor invokes up a modal dialog window for copper zone editing.
int InvokeNonCopperZonesEditor(PCB_BASE_FRAME *aParent, ZONE_SETTINGS *aSettings, CONVERT_SETTINGS *aConvertSettings)
Function InvokeNonCopperZonesEditor invokes up a modal dialog window for non-copper zone editing.
int InvokeRuleAreaEditor(PCB_BASE_FRAME *aCaller, ZONE_SETTINGS *aZoneSettings, BOARD *aBoard, CONVERT_SETTINGS *aConvertSettings)
Function InvokeRuleAreaEditor invokes up a modal dialog window for copper zone editing.
#define _(s)
@ DO_NOT_INCLUDE_NPTH
Definition footprint.h:72
PROJECT & Prj()
Definition kicad.cpp:730
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
Definition layer_ids.h:675
@ LAYER_GRID
Definition layer_ids.h:250
#define CLEARANCE_LAYER_FOR(boardLayer)
Definition layer_ids.h:369
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ MAIL_FP_EDIT
Definition mail_type.h:53
@ MAIL_RELOAD_LIB
Definition mail_type.h:54
BARCODE class definition.
Class to handle a set of BOARD_ITEMs.
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition typeinfo.h:81
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition typeinfo.h:99
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition typeinfo.h:96
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition typeinfo.h:97
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition typeinfo.h:104
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition typeinfo.h:86
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition typeinfo.h:101
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition typeinfo.h:85
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
Definition typeinfo.h:82
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition typeinfo.h:83
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
Definition typeinfo.h:92
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:94
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:79
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition typeinfo.h:95
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition typeinfo.h:80
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
Definition typeinfo.h:87
@ PCB_POINT_T
class PCB_POINT, a 0-dimensional point
Definition typeinfo.h:106
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
Definition typeinfo.h:98
VECTOR2< double > VECTOR2D
Definition vector2d.h:682