KiCad PCB EDA Suite
pcbnew_scripting_helpers.cpp File Reference

Scripting helper functions for pcbnew functionality. More...

#include <Python.h>
#include "pcbnew_scripting_helpers.h"
#include <tool/tool_manager.h>
#include <action_plugin.h>
#include <board.h>
#include <board_design_settings.h>
#include <pcb_marker.h>
#include <cstdlib>
#include <drc/drc_engine.h>
#include <drc/drc_item.h>
#include <fp_lib_table.h>
#include <ignore.h>
#include <io_mgr.h>
#include <string_utils.h>
#include <macros.h>
#include <project.h>
#include <project/net_settings.h>
#include <project/project_file.h>
#include <settings/settings_manager.h>
#include <specctra.h>
#include <project/project_local_settings.h>
#include <wildcards_and_files_ext.h>
#include <locale_io.h>
#include <wx/app.h>

Go to the source code of this file.

Functions

BOARDGetBoard ()
 
void ScriptingSetPcbEditFrame (PCB_EDIT_FRAME *aPcbEditFrame)
 
BOARDLoadBoard (wxString &aFileName)
 
SETTINGS_MANAGERGetSettingsManager ()
 
PROJECTGetDefaultProject ()
 
BOARDLoadBoard (wxString &aFileName, IO_MGR::PCB_FILE_T aFormat)
 
BOARDNewBoard (wxString &aFileName)
 Creates a new board and project with the given filename (will overwrite existing files!) More...
 
BOARDCreateEmptyBoard ()
 Construct a default BOARD with a temporary (no filename) project. More...
 
bool SaveBoard (wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat, bool aSkipSettings)
 
bool SaveBoard (wxString &aFileName, BOARD *aBoard, bool aSkipSettings)
 Saves a copy of the given board and its associated project to the given path. More...
 
FP_LIB_TABLEGetFootprintLibraryTable ()
 
wxArrayString GetFootprintLibraries ()
 Get the nicknames of all of the footprint libraries configured in pcbnew in both the project and global library tables. More...
 
wxArrayString GetFootprints (const wxString &aNickName)
 Get the names of all of the footprints available in a footprint library. More...
 
bool ExportSpecctraDSN (wxString &aFullFilename)
 Will export the current BOARD to a specctra dsn file. More...
 
bool ExportSpecctraDSN (BOARD *aBoard, wxString &aFullFilename)
 Will export the BOARD to a specctra dsn file. More...
 
bool ExportVRML (const wxString &aFullFileName, double aMMtoWRMLunit, bool aExport3DFiles, bool aUseRelativePaths, const wxString &a3D_Subdir, double aXRef, double aYRef)
 Export the current BOARD to a VRML (wrl) file. More...
 
bool ImportSpecctraSES (wxString &aFullFilename)
 Import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and tracks in an existing and loaded BOARD. More...
 
bool ExportFootprintsToLibrary (bool aStoreInNewLib, const wxString &aLibName, wxString *aLibPath)
 Save footprints in a library: More...
 
void Refresh ()
 Update the board display after modifying it by a python script (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins. More...
 
void UpdateUserInterface ()
 Update the layer manager and other widgets from the board setup (layer and items visibility, colors ...) (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins. More...
 
int GetUserUnits ()
 Return the currently selected user unit value for the interface. More...
 
bool IsActionRunning ()
 Are we currently in an action plugin? More...
 
bool WriteDRCReport (BOARD *aBoard, const wxString &aFileName, EDA_UNITS aUnits, bool aReportAllTrackErrors)
 Run the DRC check on the given board and writes the results to a report file. More...
 

Variables

static PCB_EDIT_FRAMEs_PcbEditFrame = nullptr
 
static SETTINGS_MANAGERs_SettingsManager = nullptr
 

Detailed Description

Scripting helper functions for pcbnew functionality.

Definition in file pcbnew_scripting_helpers.cpp.

Function Documentation

◆ CreateEmptyBoard()

BOARD * CreateEmptyBoard ( )

Construct a default BOARD with a temporary (no filename) project.

Returns
the created board.

Definition at line 227 of file pcbnew_scripting_helpers.cpp.

228{
229 // Creating a new board is not possible if running inside KiCad
230 if( s_PcbEditFrame )
231 return nullptr;
232
233 BOARD* brd = new BOARD();
234
236
237 return brd;
238}
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:265
void SetProject(PROJECT *aProject, bool aReferenceOnly=false)
Link a board to a given project.
Definition: board.cpp:169
static PCB_EDIT_FRAME * s_PcbEditFrame
PROJECT * GetDefaultProject()

References GetDefaultProject(), s_PcbEditFrame, and BOARD::SetProject().

◆ ExportFootprintsToLibrary()

bool ExportFootprintsToLibrary ( bool  aStoreInNewLib,
const wxString &  aLibName = wxEmptyString,
wxString *  aLibPath = nullptr 
)

Save footprints in a library:

Parameters
aStoreInNewLibset to true to save footprints in a existing lib. Existing footprints will be kept or updated. This lib should be in fp lib table, and is type is .pretty. Set to false to save footprints in a new lib. If it is an existing lib, previous footprints will be removed.
aLibNameis the optional library name to create, stops dialog call. Must be called with aStoreInNewLib as true.

Definition at line 384 of file pcbnew_scripting_helpers.cpp.

385{
386 if( s_PcbEditFrame )
387 {
388 s_PcbEditFrame->ExportFootprintsToLibrary( aStoreInNewLib, aLibName, aLibPath );
389 return true;
390 }
391 else
392 {
393 return false;
394 }
395}
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=nullptr)
Save footprints in a library:

References PCB_EDIT_FRAME::ExportFootprintsToLibrary(), and s_PcbEditFrame.

◆ ExportSpecctraDSN() [1/2]

bool ExportSpecctraDSN ( BOARD aBoard,
wxString &  aFullFilename 
)

Will export the BOARD to a specctra dsn file.

Unlike first overload doesn't need a valid PCB_EDIT_FRAME set and can be used in a standalone python script.

See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the specification.

Returns
true if OK

Definition at line 339 of file pcbnew_scripting_helpers.cpp.

340{
341 try
342 {
343 ExportBoardToSpecctraFile( aBoard, aFullFilename );
344 }
345 catch( ... )
346 {
347 return false;
348 }
349
350 return true;
351}
void ExportBoardToSpecctraFile(BOARD *aBoard, const wxString &aFullFilename)
Helper method to export board to DSN file.

References ExportBoardToSpecctraFile().

◆ ExportSpecctraDSN() [2/2]

bool ExportSpecctraDSN ( wxString &  aFullFilename)

Will export the current BOARD to a specctra dsn file.

See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the specification.

Returns
true if OK

Definition at line 325 of file pcbnew_scripting_helpers.cpp.

326{
327 if( s_PcbEditFrame )
328 {
329 bool ok = s_PcbEditFrame->ExportSpecctraFile( aFullFilename );
330 return ok;
331 }
332 else
333 {
334 return false;
335 }
336}
bool ExportSpecctraFile(const wxString &aFullFilename)
Export the current BOARD to a specctra dsn file.

References PCB_EDIT_FRAME::ExportSpecctraFile(), and s_PcbEditFrame.

◆ ExportVRML()

bool ExportVRML ( const wxString &  aFullFileName,
double  aMMtoWRMLunit,
bool  aExport3DFiles,
bool  aUseRelativePaths,
const wxString &  a3D_Subdir,
double  aXRef,
double  aYRef 
)

Export the current BOARD to a VRML (wrl) file.

See ExportVRML_File in pcb_edit_frame.h for detailed documentation.

Returns
true if OK.

Definition at line 354 of file pcbnew_scripting_helpers.cpp.

356{
357 if( s_PcbEditFrame )
358 {
359 bool ok = s_PcbEditFrame->ExportVRML_File( aFullFileName, aMMtoWRMLunit,
360 aExport3DFiles, aUseRelativePaths,
361 a3D_Subdir, aXRef, aYRef );
362 return ok;
363 }
364 else
365 {
366 return false;
367 }
368}
bool ExportVRML_File(const wxString &aFullFileName, double aMMtoWRMLunit, bool aExport3DFiles, bool aUseRelativePaths, const wxString &a3D_Subdir, double aXRef, double aYRef)
Create the file(s) exporting current BOARD to a VRML file.

References PCB_EDIT_FRAME::ExportVRML_File(), and s_PcbEditFrame.

◆ GetBoard()

◆ GetDefaultProject()

PROJECT * GetDefaultProject ( )

Definition at line 111 of file pcbnew_scripting_helpers.cpp.

112{
113 // For some reasons, LoadProject() needs a C locale, so ensure we have the right locale
114 // This is mainly when running QA Python tests
116
118
119 if( !project )
120 {
123 }
124
125 return project;
126}
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:41
Container for project specific data.
Definition: project.h:63
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Loads a project or sets up a new project with a specified path.
PROJECT * GetProject(const wxString &aFullPath) const
Retrieves a loaded project by name.
SETTINGS_MANAGER * GetSettingsManager()
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:74

References dummy(), SETTINGS_MANAGER::GetProject(), GetSettingsManager(), SETTINGS_MANAGER::LoadProject(), and project.

Referenced by CreateEmptyBoard(), and LoadBoard().

◆ GetFootprintLibraries()

wxArrayString GetFootprintLibraries ( )

Get the nicknames of all of the footprint libraries configured in pcbnew in both the project and global library tables.

Returns
the list of footprint library nicknames, empty on error.

Definition at line 294 of file pcbnew_scripting_helpers.cpp.

295{
296 wxArrayString footprintLibraryNames;
297
299
300 if( !tbl )
301 return footprintLibraryNames;
302
303 for( const wxString& name : tbl->GetLogicalLibs() )
304 footprintLibraryNames.Add( name );
305
306 return footprintLibraryNames;
307}
const char * name
Definition: DXF_plotter.cpp:56
std::vector< wxString > GetLogicalLibs()
Return the logical library names, all of them that are pertinent to a look up done on this LIB_TABLE.
FP_LIB_TABLE * GetFootprintLibraryTable()

References GetFootprintLibraryTable(), LIB_TABLE::GetLogicalLibs(), and name.

◆ GetFootprintLibraryTable()

FP_LIB_TABLE * GetFootprintLibraryTable ( )

Definition at line 278 of file pcbnew_scripting_helpers.cpp.

279{
280 BOARD* board = GetBoard();
281
282 if( !board )
283 return nullptr;
284
285 PROJECT* project = board->GetProject();
286
287 if( !project )
288 return nullptr;
289
290 return project->PcbFootprintLibs();
291}
PROJECT * GetProject() const
Definition: board.h:440
BOARD * GetBoard()

References GetBoard(), BOARD::GetProject(), and project.

Referenced by GetFootprintLibraries(), and GetFootprints().

◆ GetFootprints()

wxArrayString GetFootprints ( const wxString &  aNickName)

Get the names of all of the footprints available in a footprint library.

Parameters
aNickNameis the nickname specifying which footprint library to fetch from.
Returns
the list of footprint names, empty on error.

Definition at line 310 of file pcbnew_scripting_helpers.cpp.

311{
312 wxArrayString footprintNames;
313
315
316 if( !tbl )
317 return footprintNames;
318
319 tbl->FootprintEnumerate( footprintNames, aNickName, true );
320
321 return footprintNames;
322}
void FootprintEnumerate(wxArrayString &aFootprintNames, const wxString &aNickname, bool aBestEfforts)
Return a list of footprint names contained within the library given by aNickname.

References FP_LIB_TABLE::FootprintEnumerate(), and GetFootprintLibraryTable().

◆ GetSettingsManager()

◆ GetUserUnits()

int GetUserUnits ( )

Return the currently selected user unit value for the interface.

Returns
0 = Inches, 1=mm, -1 if the frame isn't set

Definition at line 433 of file pcbnew_scripting_helpers.cpp.

434{
435 if( s_PcbEditFrame )
436 return static_cast<int>( s_PcbEditFrame->GetUserUnits() );
437
438 return -1;
439}
EDA_UNITS GetUserUnits() const

References UNITS_PROVIDER::GetUserUnits(), and s_PcbEditFrame.

Referenced by DRAWING_TOOL::drawArc(), and DRAWING_TOOL::drawShape().

◆ ImportSpecctraSES()

bool ImportSpecctraSES ( wxString &  aFullFilename)

Import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and tracks in an existing and loaded BOARD.

See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the specification.

Returns
true if OK

Definition at line 370 of file pcbnew_scripting_helpers.cpp.

371{
372 if( s_PcbEditFrame )
373 {
374 bool ok = s_PcbEditFrame->ImportSpecctraSession( aFullFilename );
375 return ok;
376 }
377 else
378 {
379 return false;
380 }
381}
bool ImportSpecctraSession(const wxString &aFullFilename)
Import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and tracks in an ...

References PCB_EDIT_FRAME::ImportSpecctraSession(), and s_PcbEditFrame.

◆ IsActionRunning()

bool IsActionRunning ( )

Are we currently in an action plugin?

Definition at line 442 of file pcbnew_scripting_helpers.cpp.

443{
445}
static bool IsActionRunning()

References ACTION_PLUGINS::IsActionRunning().

◆ LoadBoard() [1/2]

BOARD * LoadBoard ( wxString &  aFileName)

Definition at line 79 of file pcbnew_scripting_helpers.cpp.

80{
81 if( aFileName.EndsWith( KiCadPcbFileExtension ) )
82 return LoadBoard( aFileName, IO_MGR::KICAD_SEXP );
83 else if( aFileName.EndsWith( LegacyPcbFileExtension ) )
84 return LoadBoard( aFileName, IO_MGR::LEGACY );
85
86 // as fall back for any other kind use the legacy format
87 return LoadBoard( aFileName, IO_MGR::LEGACY );
88}
@ LEGACY
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:55
@ KICAD_SEXP
S-expression Pcbnew file format.
Definition: io_mgr.h:56
const std::string LegacyPcbFileExtension
const std::string KiCadPcbFileExtension
BOARD * LoadBoard(wxString &aFileName)

References IO_MGR::KICAD_SEXP, KiCadPcbFileExtension, IO_MGR::LEGACY, LegacyPcbFileExtension, and LoadBoard().

Referenced by PCBNEW_JOBS_HANDLER::JobExportDrill(), PCBNEW_JOBS_HANDLER::JobExportDxf(), PCBNEW_JOBS_HANDLER::JobExportGerber(), PCBNEW_JOBS_HANDLER::JobExportPdf(), PCBNEW_JOBS_HANDLER::JobExportPos(), PCBNEW_JOBS_HANDLER::JobExportStep(), PCBNEW_JOBS_HANDLER::JobExportSvg(), and LoadBoard().

◆ LoadBoard() [2/2]

BOARD * LoadBoard ( wxString &  aFileName,
IO_MGR::PCB_FILE_T  aFormat 
)

Definition at line 129 of file pcbnew_scripting_helpers.cpp.

130{
131 wxFileName pro = aFileName;
132 pro.SetExt( ProjectFileExtension );
133 pro.MakeAbsolute();
134 wxString projectPath = pro.GetFullPath();
135
136 // Ensure the "C" locale is temporary set, before reading any file
137 // It also avoid wxWidget alerts about locale issues, later, when using Python 3
139
140 PROJECT* project = GetSettingsManager()->GetProject( projectPath );
141
142 if( !project )
143 {
144 if( wxFileExists( projectPath ) )
145 {
146 GetSettingsManager()->LoadProject( projectPath, false );
147 project = GetSettingsManager()->GetProject( projectPath );
148 }
149 }
150 else if( s_PcbEditFrame && project == &GetSettingsManager()->Prj() )
151 {
152 // Project is already loaded? Then so is the board
153 return s_PcbEditFrame->GetBoard();
154 }
155
156 // Board cannot be loaded without a project, so create the default project
157 if( !project )
159
160 BOARD* brd = IO_MGR::Load( aFormat, aFileName );
161
162 if( brd )
163 {
164 brd->SetProject( project );
165
166 // Move legacy view settings to local project settings
167 if( !brd->m_LegacyVisibleLayers.test( Rescue ) )
168 project->GetLocalSettings().m_VisibleLayers = brd->m_LegacyVisibleLayers;
169
171 project->GetLocalSettings().m_VisibleItems = brd->m_LegacyVisibleItems;
172
174 bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( brd, &bds );
175
176 try
177 {
178 wxFileName rules = pro;
179 rules.SetExt( DesignRulesFileExtension );
180 bds.m_DRCEngine->InitEngine( rules );
181 }
182 catch( ... )
183 {
184 // Best efforts...
185 }
186
187 for( PCB_MARKER* marker : brd->ResolveDRCExclusions() )
188 brd->Add( marker );
189
190 brd->BuildConnectivity();
191 brd->BuildListOfNets();
193 }
194
195 return brd;
196}
Container for design settings for a BOARD object.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
Definition: board.cpp:696
GAL_SET m_LegacyVisibleItems
Definition: board.h:339
void BuildListOfNets()
Definition: board.h:742
void SynchronizeNetsAndNetClasses()
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:1470
LSET m_LegacyVisibleLayers
Visibility settings stored in board prior to 6.0, only used for loading legacy files.
Definition: board.h:338
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:628
std::vector< PCB_MARKER * > ResolveDRCExclusions()
Rebuild DRC markers from the serialized data in BOARD_DESIGN_SETTINGS.
Definition: board.cpp:275
void BuildConnectivity(PROGRESS_REPORTER *aReporter=nullptr)
Build or rebuild the board connectivity database for the board, especially the list of connected item...
Definition: board.cpp:162
static BOARD * Load(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aAppendToMe=nullptr, const STRING_UTF8_MAP *aProperties=nullptr, PROJECT *aProject=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr)
Find the requested PLUGIN and if found, calls the PLUGIN::Load() function on it using the arguments p...
Definition: io_mgr.cpp:162
const std::string ProjectFileExtension
const std::string DesignRulesFileExtension
PROJECT & Prj()
Definition: kicad.cpp:555
@ GAL_LAYER_ID_BITMASK_END
This is the end of the layers used for visibility bit masks in legacy board files.
Definition: layer_ids.h:226
@ Rescue
Definition: layer_ids.h:133
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
Definition: layer_ids.h:264

References BOARD::Add(), BOARD::BuildConnectivity(), BOARD::BuildListOfNets(), DesignRulesFileExtension, dummy(), GAL_LAYER_ID_BITMASK_END, GAL_LAYER_INDEX, PCB_BASE_FRAME::GetBoard(), GetDefaultProject(), BOARD::GetDesignSettings(), SETTINGS_MANAGER::GetProject(), GetSettingsManager(), IO_MGR::Load(), SETTINGS_MANAGER::LoadProject(), BOARD_DESIGN_SETTINGS::m_DRCEngine, BOARD::m_LegacyVisibleItems, BOARD::m_LegacyVisibleLayers, Prj(), project, ProjectFileExtension, Rescue, BOARD::ResolveDRCExclusions(), s_PcbEditFrame, BOARD::SetProject(), and BOARD::SynchronizeNetsAndNetClasses().

◆ NewBoard()

BOARD * NewBoard ( wxString &  aFileName)

Creates a new board and project with the given filename (will overwrite existing files!)

Parameters
aFileNameis the filename (including full path if desired) of the kicad_pcb to create
Returns
a pointer to the board if it was created, or None if not

Definition at line 199 of file pcbnew_scripting_helpers.cpp.

200{
201 wxFileName boardFn = aFileName;
202 wxFileName proFn = aFileName;
203 proFn.SetExt( ProjectFileExtension );
204 proFn.MakeAbsolute();
205
206 wxString projectPath = proFn.GetFullPath();
207
208 // Ensure the "C" locale is temporary set, before reading any file
209 // It also avoids wxWidgets alerts about locale issues, later, when using Python 3
211
212 GetSettingsManager()->LoadProject( projectPath, false );
213 PROJECT* project = GetSettingsManager()->GetProject( projectPath );
214
215 BOARD* brd = new BOARD();
216
217 brd->SetProject( project );
219 bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( brd, &bds );
220
221 SaveBoard( aFileName, brd );
222
223 return brd;
224}
bool SaveBoard(wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat, bool aSkipSettings)

References dummy(), BOARD::GetDesignSettings(), SETTINGS_MANAGER::GetProject(), GetSettingsManager(), SETTINGS_MANAGER::LoadProject(), BOARD_DESIGN_SETTINGS::m_DRCEngine, project, ProjectFileExtension, SaveBoard(), and BOARD::SetProject().

◆ Refresh()

void Refresh ( )

Update the board display after modifying it by a python script (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins.

Could be deprecated because modifying a board (especially deleting items) outside a action plugin can crash Pcbnew.

Definition at line 397 of file pcbnew_scripting_helpers.cpp.

398{
399 if( s_PcbEditFrame )
400 {
402 BOARD* board = s_PcbEditFrame->GetBoard();
404
405 canvas->SyncLayersVisibility( board );
406
407 canvas->GetView()->Clear();
408 canvas->GetView()->InitPreview();
409 canvas->GetGAL()->SetGridOrigin( VECTOR2D( board->GetDesignSettings().GetGridOrigin() ) );
410 canvas->DisplayBoard( board );
411
412 // allow tools to re-add their view items (selection previews, grids, etc.)
413 if( toolMgr )
415
416 // reload the drawing-sheet
418
419 board->BuildConnectivity();
420
421 canvas->Refresh();
422 }
423}
const VECTOR2I & GetGridOrigin()
const PAGE_INFO & GetPageSettings() const
Definition: board.h:624
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
Update the board display after modifying it by a python script (note: it is automatically called by a...
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
void SetGridOrigin(const VECTOR2D &aGridOrigin)
Set the origin point for the grid.
void Clear()
Remove all items from the view.
Definition: view.cpp:1096
void InitPreview()
Definition: view.cpp:1611
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
void DisplayBoard(BOARD *aBoard, PROGRESS_REPORTER *aReporter=nullptr)
Add all items from the current board to the VIEW, so they can be displayed by GAL.
void SyncLayersVisibility(const BOARD *aBoard)
Update "visibility" property of each layer of a given BOARD.
void SetPageSettings(const PAGE_INFO &aPageSettings) override
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:54
@ GAL_SWITCH
Rendering engine changes.
Definition: tool_base.h:81
Master controller class:
Definition: tool_manager.h:55
void ResetTools(TOOL_BASE::RESET_REASON aReason)
Reset all tools (i.e.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:617

References BOARD::BuildConnectivity(), KIGFX::VIEW::Clear(), PCB_DRAW_PANEL_GAL::DisplayBoard(), TOOL_BASE::GAL_SWITCH, PCB_BASE_FRAME::GetBoard(), PCB_BASE_FRAME::GetCanvas(), BOARD::GetDesignSettings(), EDA_DRAW_PANEL_GAL::GetGAL(), BOARD_DESIGN_SETTINGS::GetGridOrigin(), BOARD::GetPageSettings(), TOOLS_HOLDER::GetToolManager(), PCB_DRAW_PANEL_GAL::GetView(), KIGFX::VIEW::InitPreview(), EDA_DRAW_PANEL_GAL::Refresh(), TOOL_MANAGER::ResetTools(), s_PcbEditFrame, KIGFX::GAL::SetGridOrigin(), PCB_EDIT_FRAME::SetPageSettings(), and PCB_DRAW_PANEL_GAL::SyncLayersVisibility().

Referenced by EDA_MSG_PANEL::AppendMessage(), BITMAP_BUTTON::Check(), EDA_3D_MODEL_VIEWER::Clear3DModel(), ACTION_TOOLBAR::doSelectAction(), SYMBOL_EDIT_FRAME::emptyScreen(), BITMAP_BUTTON::Enable(), SPLIT_BUTTON::Enable(), EDA_MSG_PANEL::EraseMsgBox(), PANEL_CORROSION::FillTable(), PCB_EDIT_FRAME::ImportSpecctraSession(), ACTION_TOOLBAR::KiRealize(), SYMBOL_EDIT_FRAME::LoadOneLibrarySymbolAux(), SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic(), PANEL_ATTENUATORS::OnAttenuatorSelection(), APPEARANCE_CONTROLS::OnBoardChanged(), PCB_EDIT_FRAME::onBoardLoaded(), WX_COLLAPSIBLE_PANE_HEADER::onEnterWindow(), EDA_3D_CANVAS::OnEvent(), WX_COLLAPSIBLE_PANE_HEADER::onFocus(), BITMAP_BUTTON::OnKillFocus(), SPLIT_BUTTON::OnKillFocus(), APPEARANCE_CONTROLS::OnLanguageChanged(), APPEARANCE_CONTROLS::OnLayerChanged(), PANEL_SETUP_BOARD_STACKUP::OnLayersOptionsChanged(), WX_COLLAPSIBLE_PANE_HEADER::onLeaveWindow(), BITMAP_BUTTON::OnLeftButtonDown(), SPLIT_BUTTON::OnLeftButtonDown(), BITMAP_BUTTON::OnLeftButtonUp(), SPLIT_BUTTON::OnLeftButtonUp(), BM2CMP_FRAME::OnLoadFile(), BITMAP_BUTTON::OnMouseEnter(), SPLIT_BUTTON::OnMouseEnter(), BITMAP_BUTTON::OnMouseLeave(), SPLIT_BUTTON::OnMouseLeave(), EDA_3D_MODEL_VIEWER::OnMouseMove(), EDA_3D_MODEL_VIEWER::OnMouseWheel(), BM2CMP_FRAME::OnNegativeClicked(), DIALOG_TEMPLATE_SELECTOR::onNotebookResize(), LAYERS_MAP_DIALOG::OnResetClick(), LAYERS_MAP_DIALOG::OnSelectLayer(), BITMAP_BUTTON::OnSetFocus(), PANEL_PACKAGES_VIEW::OnSizeInfoBox(), SPLIT_BUTTON::onThemeChanged(), BM2CMP_FRAME::OnThresholdChange(), PANEL_TRANSLINE::OnTransLineResetButtonClick(), PANEL_TRANSLINE::OnTranslineSelection(), ACTION_TOOLBAR::RefreshBitmaps(), PANEL_REGULATOR::RegulatorPageUpdate(), DIALOG_JUNCTION_PROPS::resetDefaults(), DIALOG_LINE_PROPERTIES::resetDefaults(), DIALOG_WIRE_BUS_PROPERTIES::resetDefaults(), TEMPLATE_WIDGET::Select(), EDA_3D_MODEL_VIEWER::Set3DModel(), WX_COLLAPSIBLE_PANE_HEADER::SetCollapsed(), SPLIT_BUTTON::SetLabel(), EDA_MSG_PANEL::SetMessage(), PANEL_PACKAGE::SetSelected(), FOOTPRINTS_LISTBOX::SetSelection(), LIBRARY_LISTBOX::SetSelection(), PANEL_ATTENUATORS::ThemeChanged(), PANEL_COLOR_CODE::ThemeChanged(), PANEL_COLOR_CODE::ToleranceSelection(), TEMPLATE_WIDGET::Unselect(), mpWindow::UpdateAll(), KIGFX::CAIRO_GAL::updatedGalDisplayOptions(), KIGFX::OPENGL_GAL::updatedGalDisplayOptions(), DIALOG_PAGES_SETTINGS::UpdateDrawingSheetExample(), and NUMBER_BADGE::UpdateNumber().

◆ SaveBoard() [1/2]

bool SaveBoard ( wxString &  aFileName,
BOARD aBoard,
bool  aSkipSettings = false 
)

Saves a copy of the given board and its associated project to the given path.

Boards can only be saved in KiCad native format.

Parameters
aFileNameis the full path to save a copy to.
aBoardis a pointer to a loaded BOARD to save.
aSkipSettingsif true, only save the board file. This will lose settings changes that are saved in the project file
Returns
true if the save was completed.

Definition at line 272 of file pcbnew_scripting_helpers.cpp.

273{
274 return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP, aSkipSettings );
275}

References IO_MGR::KICAD_SEXP, and SaveBoard().

◆ SaveBoard() [2/2]

bool SaveBoard ( wxString &  aFileName,
BOARD aBoard,
IO_MGR::PCB_FILE_T  aFormat,
bool  aSkipSettings 
)

Definition at line 241 of file pcbnew_scripting_helpers.cpp.

242{
243 aBoard->BuildConnectivity();
245
246 // Ensure the "C" locale is temporary set, before saving any file
247 // It also avoid wxWidget alerts about locale issues, later, when using Python 3
249
250 try
251 {
252 IO_MGR::Save( aFormat, aFileName, aBoard, nullptr );
253 }
254 catch( ... )
255 {
256 return false;
257 }
258
259 if( !aSkipSettings )
260 {
261 wxFileName pro = aFileName;
262 pro.SetExt( ProjectFileExtension );
263 pro.MakeAbsolute();
264
265 GetSettingsManager()->SaveProjectAs( pro.GetFullPath(), aBoard->GetProject() );
266 }
267
268 return true;
269}
static void Save(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aBoard, const STRING_UTF8_MAP *aProperties=nullptr)
Write either a full aBoard to a storage file in a format that this implementation knows about,...
Definition: io_mgr.cpp:178
void SaveProjectAs(const wxString &aFullPath, PROJECT *aProject=nullptr)
Sets the currently loaded project path and saves it (pointers remain valid) Note that this will not m...

References BOARD::BuildConnectivity(), dummy(), BOARD::GetProject(), GetSettingsManager(), ProjectFileExtension, IO_MGR::Save(), SETTINGS_MANAGER::SaveProjectAs(), and BOARD::SynchronizeNetsAndNetClasses().

Referenced by NewBoard(), and SaveBoard().

◆ ScriptingSetPcbEditFrame()

void ScriptingSetPcbEditFrame ( PCB_EDIT_FRAME aPcbEditFrame)

Definition at line 73 of file pcbnew_scripting_helpers.cpp.

74{
75 s_PcbEditFrame = aPcbEditFrame;
76}

References s_PcbEditFrame.

Referenced by PCB::IFACE::CreateKiWindow().

◆ UpdateUserInterface()

void UpdateUserInterface ( )

Update the layer manager and other widgets from the board setup (layer and items visibility, colors ...) (note: it is automatically called by action plugins, after running the plugin, so call this function is usually not needed inside action plugins.

Definition at line 426 of file pcbnew_scripting_helpers.cpp.

427{
428 if( s_PcbEditFrame )
430}
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...

References s_PcbEditFrame, and PCB_EDIT_FRAME::UpdateUserInterface().

◆ WriteDRCReport()

bool WriteDRCReport ( BOARD aBoard,
const wxString &  aFileName,
EDA_UNITS  aUnits,
bool  aReportAllTrackErrors 
)

Run the DRC check on the given board and writes the results to a report file.

Requires that the project for the board be loaded, and note that unlike the DRC dialog this does not attempt to fill zones, so zones must be valid before calling.

Parameters
aBoardis a valid loaded board.
aFileNameis the full path and name of the report file to write.
aUnitsis the units to use in the report.
aReportAllTrackErrorscontrols whether all errors or just the first error is reported for each track.
Returns
true if successful, false if not.

Definition at line 448 of file pcbnew_scripting_helpers.cpp.

450{
451 wxCHECK( aBoard, false );
452
454 std::shared_ptr<DRC_ENGINE> engine = bds.m_DRCEngine;
455 UNITS_PROVIDER unitsProvider( pcbIUScale, aUnits );
456
457 if( !engine )
458 {
459 bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( aBoard, &bds );
460 engine = bds.m_DRCEngine;
461 }
462
463 wxCHECK( engine, false );
464
465 wxFileName fn = aBoard->GetFileName();
466 fn.SetExt( DesignRulesFileExtension );
467 PROJECT* prj = nullptr;
468
469 if( aBoard->GetProject() )
470 prj = aBoard->GetProject();
471 else if( s_SettingsManager )
472 prj = &s_SettingsManager->Prj();
473
474 wxCHECK( prj, false );
475
476 wxString drcRulesPath = prj->AbsolutePath( fn.GetFullName() );
477
478 try
479 {
480 engine->InitEngine( drcRulesPath );
481 }
482 catch( PARSE_ERROR& )
483 {
484 return false;
485 }
486
487 std::vector<std::shared_ptr<DRC_ITEM>> footprints;
488 std::vector<std::shared_ptr<DRC_ITEM>> unconnected;
489 std::vector<std::shared_ptr<DRC_ITEM>> violations;
490
491 engine->SetProgressReporter( nullptr );
492
493 engine->SetViolationHandler(
494 [&]( const std::shared_ptr<DRC_ITEM>& aItem, VECTOR2D aPos, int aLayer )
495 {
496 if( aItem->GetErrorCode() == DRCE_MISSING_FOOTPRINT
497 || aItem->GetErrorCode() == DRCE_DUPLICATE_FOOTPRINT
498 || aItem->GetErrorCode() == DRCE_EXTRA_FOOTPRINT
499 || aItem->GetErrorCode() == DRCE_NET_CONFLICT )
500 {
501 footprints.push_back( aItem );
502 }
503 else if( aItem->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
504 {
505 unconnected.push_back( aItem );
506 }
507 else
508 {
509 violations.push_back( aItem );
510 }
511 } );
512
513 engine->RunTests( aUnits, aReportAllTrackErrors, false );
514 engine->ClearViolationHandler();
515
516 // TODO: Unify this with DIALOG_DRC::writeReport
517
518 FILE* fp = wxFopen( aFileName, wxT( "w" ) );
519
520 if( fp == nullptr )
521 return false;
522
523 std::map<KIID, EDA_ITEM*> itemMap;
524 aBoard->FillItemMap( itemMap );
525
526 fprintf( fp, "** Drc report for %s **\n", TO_UTF8( aBoard->GetFileName() ) );
527
528 wxDateTime now = wxDateTime::Now();
529
530 fprintf( fp, "** Created on %s **\n", TO_UTF8( now.Format( wxT( "%F %T" ) ) ) );
531
532 fprintf( fp, "\n** Found %d DRC violations **\n", static_cast<int>( violations.size() ) );
533
534 for( const std::shared_ptr<DRC_ITEM>& item : violations )
535 {
536 SEVERITY severity = item->GetParent()->GetSeverity();
537 fprintf( fp, "%s", TO_UTF8( item->ShowReport( &unitsProvider, severity, itemMap ) ) );
538 }
539
540 fprintf( fp, "\n** Found %d unconnected pads **\n", static_cast<int>( unconnected.size() ) );
541
542 for( const std::shared_ptr<DRC_ITEM>& item : unconnected )
543 {
544 SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
545 fprintf( fp, "%s", TO_UTF8( item->ShowReport( &unitsProvider, severity, itemMap ) ) );
546 }
547
548 fprintf( fp, "\n** Found %d Footprint errors **\n", static_cast<int>( footprints.size() ) );
549
550 for( const std::shared_ptr<DRC_ITEM>& item : footprints )
551 {
552 SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
553 fprintf( fp, "%s", TO_UTF8( item->ShowReport( &unitsProvider, severity, itemMap ) ) );
554 }
555
556 fprintf( fp, "\n** End of Report **\n" );
557 fclose( fp );
558
559 return true;
560}
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:109
SEVERITY GetSeverity(int aDRCErrorCode)
const wxString & GetFileName() const
Definition: board.h:302
void FillItemMap(std::map< KIID, EDA_ITEM * > &aMap)
Definition: board.cpp:1022
virtual const wxString AbsolutePath(const wxString &aFileName) const
Fix up aFileName if it is relative to the project's directory to be an absolute path and filename.
Definition: project.cpp:305
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
@ DRCE_UNCONNECTED_ITEMS
Definition: drc_item.h:39
@ DRCE_DUPLICATE_FOOTPRINT
Definition: drc_item.h:71
@ DRCE_EXTRA_FOOTPRINT
Definition: drc_item.h:72
@ DRCE_NET_CONFLICT
Definition: drc_item.h:73
@ DRCE_MISSING_FOOTPRINT
Definition: drc_item.h:70
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
SEVERITY
A filename or source description, a problem input line, a line number, a byte offset,...
Definition: ki_exception.h:119

References PROJECT::AbsolutePath(), DesignRulesFileExtension, DRCE_DUPLICATE_FOOTPRINT, DRCE_EXTRA_FOOTPRINT, DRCE_MISSING_FOOTPRINT, DRCE_NET_CONFLICT, DRCE_UNCONNECTED_ITEMS, BOARD::FillItemMap(), BOARD::GetDesignSettings(), BOARD::GetFileName(), BOARD::GetProject(), BOARD_DESIGN_SETTINGS::GetSeverity(), BOARD_DESIGN_SETTINGS::m_DRCEngine, pcbIUScale, SETTINGS_MANAGER::Prj(), s_SettingsManager, and TO_UTF8.

Variable Documentation

◆ s_PcbEditFrame

◆ s_SettingsManager

SETTINGS_MANAGER* s_SettingsManager = nullptr
static

Definition at line 61 of file pcbnew_scripting_helpers.cpp.

Referenced by GetSettingsManager(), and WriteDRCReport().