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 <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 <io_mgr.h>
#include <string_utils.h>
#include <macros.h>
#include <project.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)
 
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 SaveBoard (wxString &aFileName, BOARD *aBoard)
 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 194 of file pcbnew_scripting_helpers.cpp.

195 {
196  // Creating a new board is not possible if running inside KiCad
197  if( s_PcbEditFrame )
198  return nullptr;
199 
200  BOARD* brd = new BOARD();
201 
202  brd->SetProject( GetDefaultProject() );
203 
204  return brd;
205 }
PROJECT * GetDefaultProject()
void SetProject(PROJECT *aProject)
Link a board to a given project.
Definition: board.cpp:142
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
static PCB_EDIT_FRAME * s_PcbEditFrame

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 345 of file pcbnew_scripting_helpers.cpp.

346 {
347  if( s_PcbEditFrame )
348  {
349  s_PcbEditFrame->ExportFootprintsToLibrary( aStoreInNewLib, aLibName, aLibPath );
350  return true;
351  }
352  else
353  {
354  return false;
355  }
356 }
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=nullptr)
Save footprints in a library:
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_EDIT_FRAME::ExportFootprintsToLibrary(), and s_PcbEditFrame.

◆ ExportSpecctraDSN() [1/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 286 of file pcbnew_scripting_helpers.cpp.

287 {
288  if( s_PcbEditFrame )
289  {
290  bool ok = s_PcbEditFrame->ExportSpecctraFile( aFullFilename );
291  return ok;
292  }
293  else
294  {
295  return false;
296  }
297 }
static PCB_EDIT_FRAME * s_PcbEditFrame
bool ExportSpecctraFile(const wxString &aFullFilename)
Export the current BOARD to a specctra dsn file.

References PCB_EDIT_FRAME::ExportSpecctraFile(), and s_PcbEditFrame.

◆ ExportSpecctraDSN() [2/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 300 of file pcbnew_scripting_helpers.cpp.

301 {
302  try
303  {
304  ExportBoardToSpecctraFile( aBoard, aFullFilename );
305  }
306  catch( ... )
307  {
308  return false;
309  }
310 
311  return true;
312 }
void ExportBoardToSpecctraFile(BOARD *aBoard, const wxString &aFullFilename)
Helper method to export board to DSN file.

References ExportBoardToSpecctraFile().

◆ 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 315 of file pcbnew_scripting_helpers.cpp.

317 {
318  if( s_PcbEditFrame )
319  {
320  bool ok = s_PcbEditFrame->ExportVRML_File( aFullFileName, aMMtoWRMLunit,
321  aExport3DFiles, aUseRelativePaths,
322  a3D_Subdir, aXRef, aYRef );
323  return ok;
324  }
325  else
326  {
327  return false;
328  }
329 }
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.
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_EDIT_FRAME::ExportVRML_File(), and s_PcbEditFrame.

Referenced by VRML_WRITER::ExportVRML_File().

◆ GetBoard()

BOARD* GetBoard ( )

Definition at line 60 of file pcbnew_scripting_helpers.cpp.

61 {
62  if( s_PcbEditFrame )
63  return s_PcbEditFrame->GetBoard();
64  else
65  return nullptr;
66 }
BOARD * GetBoard() const
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_BASE_FRAME::GetBoard(), and s_PcbEditFrame.

Referenced by PCB_EDIT_FRAME::canCloseWindow(), ZONE_FILLER_TOOL::CheckAllZones(), DISPLAY_FOOTPRINTS_FRAME::DISPLAY_FOOTPRINTS_FRAME(), PCB_EDIT_FRAME::doCloseWindow(), EVT_GRID_CMD_CELL_CHANGED(), EVT_TOOL_RANGE(), PCB_EDIT_FRAME::ExportSpecctraFile(), PCB_EDIT_FRAME::ExportSVG(), EDIT_TOOL::FilletTracks(), FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME(), PCB_EDIT_FRAME::GetCurrentFileName(), PCB_BASE_FRAME::GetFootprintFromBoardByReference(), GetFootprintLibraryTable(), PCB_EDIT_FRAME::GetLastPath(), PCB_EDIT_FRAME::ImportSpecctraSession(), PCB_EDIT_FRAME::IsElementVisible(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), PCB_EDIT_FRAME::onBoardLoaded(), PCB_EDIT_FRAME::OnExportHyperlynx(), PCB_EDIT_FRAME::OnNetlistChanged(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), PCB_EDIT_FRAME::RecordDRCExclusions(), PCB_EDIT_FRAME::RecreateBOMFileFromBoard(), PCB_EDIT_FRAME::ResolveDRCExclusions(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), ROUTER_TOOL::SelectCopperLayerPair(), PCB_EDIT_FRAME::SetElementVisibility(), PCB_EDIT_FRAME::SetLastPath(), PCB_EDIT_FRAME::SetPageSettings(), PCB_EDIT_FRAME::setupUIConditions(), PCB_EDIT_FRAME::ShowBoardSetupDialog(), GLOBAL_EDIT_TOOL::SwapLayers(), PCB_EDIT_FRAME::UpdateTitle(), PCB_EDIT_FRAME::UpdateUserInterface(), and PCB_EDIT_FRAME::~PCB_EDIT_FRAME().

◆ 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 }
Container for project specific data.
Definition: project.h:62
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:40
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:72
SETTINGS_MANAGER * GetSettingsManager()
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.

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 255 of file pcbnew_scripting_helpers.cpp.

256 {
257  wxArrayString footprintLibraryNames;
258 
260 
261  if( !tbl )
262  return footprintLibraryNames;
263 
264  for( const wxString& name : tbl->GetLogicalLibs() )
265  footprintLibraryNames.Add( name );
266 
267  return footprintLibraryNames;
268 }
FP_LIB_TABLE * GetFootprintLibraryTable()
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.

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

◆ GetFootprintLibraryTable()

FP_LIB_TABLE* GetFootprintLibraryTable ( )

Definition at line 239 of file pcbnew_scripting_helpers.cpp.

240 {
241  BOARD* board = GetBoard();
242 
243  if( !board )
244  return nullptr;
245 
246  PROJECT* project = board->GetProject();
247 
248  if( !project )
249  return nullptr;
250 
251  return project->PcbFootprintLibs();
252 }
Container for project specific data.
Definition: project.h:62
PROJECT * GetProject() const
Definition: board.h:360
BOARD * GetBoard()
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190

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 271 of file pcbnew_scripting_helpers.cpp.

272 {
273  wxArrayString footprintNames;
274 
276 
277  if( !tbl )
278  return footprintNames;
279 
280  tbl->FootprintEnumerate( footprintNames, aNickName, true );
281 
282  return footprintNames;
283 }
void FootprintEnumerate(wxArrayString &aFootprintNames, const wxString &aNickname, bool aBestEfforts)
Return a list of footprint names contained within the library given by aNickname.
FP_LIB_TABLE * GetFootprintLibraryTable()

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 379 of file pcbnew_scripting_helpers.cpp.

380 {
381  if( s_PcbEditFrame )
382  return static_cast<int>( s_PcbEditFrame->GetUserUnits() );
383 
384  return -1;
385 }
EDA_UNITS GetUserUnits() const
Return the user units currently in use.
static PCB_EDIT_FRAME * s_PcbEditFrame

References EDA_BASE_FRAME::GetUserUnits(), and s_PcbEditFrame.

Referenced by DRAWING_TOOL::drawArc(), and PCB_CONTROL::placeBoardItems().

◆ 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 331 of file pcbnew_scripting_helpers.cpp.

332 {
333  if( s_PcbEditFrame )
334  {
335  bool ok = s_PcbEditFrame->ImportSpecctraSession( aFullFilename );
336  return ok;
337  }
338  else
339  {
340  return false;
341  }
342 }
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 ...
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_EDIT_FRAME::ImportSpecctraSession(), and s_PcbEditFrame.

◆ IsActionRunning()

bool IsActionRunning ( )

Are we currently in an action plugin?

Definition at line 388 of file pcbnew_scripting_helpers.cpp.

389 {
391 }
static bool IsActionRunning()

References ACTION_PLUGINS::IsActionRunning().

◆ LoadBoard() [1/2]

BOARD* LoadBoard ( wxString &  aFileName)

Definition at line 75 of file pcbnew_scripting_helpers.cpp.

76 {
77  // Loading a new board is not possible if running inside KiCad
78  if( s_PcbEditFrame )
79  return nullptr;
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 }
BOARD * LoadBoard(wxString &aFileName)
const std::string LegacyPcbFileExtension
const std::string KiCadPcbFileExtension
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:55
static PCB_EDIT_FRAME * s_PcbEditFrame
S-expression Pcbnew file format.
Definition: io_mgr.h:56

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

Referenced by 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  // Loading a new board is not possible if running inside KiCad
132  wxASSERT( !s_PcbEditFrame );
133 
134  wxFileName pro = aFileName;
135  pro.SetExt( ProjectFileExtension );
136  pro.MakeAbsolute();
137  wxString projectPath = pro.GetFullPath();
138 
139  // Ensure the "C" locale is temporary set, before reading any file
140  // It also avoid wxWidget alerts about locale issues, later, when using Python 3
142 
143  PROJECT* project = GetSettingsManager()->GetProject( projectPath );
144 
145  if( !project )
146  {
147  GetSettingsManager()->LoadProject( projectPath );
148  project = GetSettingsManager()->GetProject( projectPath );
149  }
150 
151  // Board cannot be loaded without a project, so create the default project
152  if( !project )
154 
155  BOARD* brd = IO_MGR::Load( aFormat, aFileName );
156 
157  if( brd )
158  {
159  brd->SetProject( project );
160 
161  // Move legacy view settings to local project settings
162  if( !brd->m_LegacyVisibleLayers.test( Rescue ) )
163  project->GetLocalSettings().m_VisibleLayers = brd->m_LegacyVisibleLayers;
164 
166  project->GetLocalSettings().m_VisibleItems = brd->m_LegacyVisibleItems;
167 
169  bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( brd, &bds );
170 
171  try
172  {
173  wxFileName rules = pro;
174  rules.SetExt( DesignRulesFileExtension );
175  bds.m_DRCEngine->InitEngine( rules );
176  }
177  catch( ... )
178  {
179  // Best efforts...
180  }
181 
182  for( PCB_MARKER* marker : brd->ResolveDRCExclusions() )
183  brd->Add( marker );
184 
185  brd->BuildConnectivity();
186  brd->BuildListOfNets();
188  }
189 
190  return brd;
191 }
void BuildListOfNets()
Definition: board.h:663
Container for project specific data.
Definition: project.h:62
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:40
const std::string ProjectFileExtension
const std::string DesignRulesFileExtension
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:589
This is the end of the layers used for visibility bit masks in Pcbnew.
Definition: layer_ids.h:221
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:72
void SynchronizeNetsAndNetClasses()
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:1410
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Adds an item to the container.
Definition: board.cpp:607
std::vector< PCB_MARKER * > ResolveDRCExclusions()
Rebuild DRC markers from the serialized data in BOARD_DESIGN_SETTINGS.
Definition: board.cpp:207
#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:248
void BuildConnectivity()
Build or rebuild the board connectivity database for the board, especially the list of connected item...
Definition: board.cpp:136
SETTINGS_MANAGER * GetSettingsManager()
PROJECT * GetDefaultProject()
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Loads a project or sets up a new project with a specified path.
void SetProject(PROJECT *aProject)
Link a board to a given project.
Definition: board.cpp:142
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
static BOARD * Load(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aAppendToMe=nullptr, const PROPERTIES *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:158
LSET m_LegacyVisibleLayers
Visibility settings stored in board prior to 6.0, only used for loading legacy files.
Definition: board.h:264
std::shared_ptr< DRC_ENGINE > m_DRCEngine
PROJECT * GetProject(const wxString &aFullPath) const
Retrieves a loaded project by name.
static PCB_EDIT_FRAME * s_PcbEditFrame
Container for design settings for a BOARD object.
GAL_SET m_LegacyVisibleItems
Definition: board.h:265

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

◆ 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 358 of file pcbnew_scripting_helpers.cpp.

359 {
360  if( s_PcbEditFrame )
361  {
362  auto board = s_PcbEditFrame->GetBoard();
363  board->BuildConnectivity();
364 
365  // Re-init everything: this is the easy way to do that
368  }
369 }
void ActivateGalCanvas() override
Set the #m_Pcb member in such as way as to ensure deleting any previous BOARD.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
void BuildConnectivity()
Build or rebuild the board connectivity database for the board, especially the list of connected item...
Definition: board.cpp:136
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...
BOARD * GetBoard() const
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_EDIT_FRAME::ActivateGalCanvas(), BOARD::BuildConnectivity(), PCB_BASE_FRAME::GetBoard(), PCB_BASE_FRAME::GetCanvas(), EDA_DRAW_PANEL_GAL::Refresh(), and s_PcbEditFrame.

Referenced by EDA_MSG_PANEL::AppendMessage(), BITMAP_BUTTON::Check(), EDA_3D_MODEL_VIEWER::Clear3DModel(), ACTION_TOOLBAR::doSelectAction(), SYMBOL_EDIT_FRAME::emptyScreen(), SPLIT_BUTTON::Enable(), BITMAP_BUTTON::Enable(), EDA_MSG_PANEL::EraseMsgBox(), PCB_EDIT_FRAME::ImportSpecctraSession(), ACTION_TOOLBAR::KiRealize(), SYMBOL_EDIT_FRAME::LoadOneLibrarySymbolAux(), SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic(), PCB_CALCULATOR_FRAME::OnAttenuatorSelection(), APPEARANCE_CONTROLS::OnBoardChanged(), PCB_EDIT_FRAME::onBoardLoaded(), WX_COLLAPSIBLE_PANE_HEADER::onEnterWindow(), EDA_3D_CANVAS::OnEvent(), WX_COLLAPSIBLE_PANE_HEADER::onFocus(), SPLIT_BUTTON::OnKillFocus(), BITMAP_BUTTON::OnKillFocus(), APPEARANCE_CONTROLS::OnLayerChanged(), PANEL_SETUP_BOARD_STACKUP::OnLayersOptionsChanged(), WX_COLLAPSIBLE_PANE_HEADER::onLeaveWindow(), SPLIT_BUTTON::OnLeftButtonDown(), BITMAP_BUTTON::OnLeftButtonDown(), SPLIT_BUTTON::OnLeftButtonUp(), BITMAP_BUTTON::OnLeftButtonUp(), BM2CMP_FRAME::OnLoadFile(), SPLIT_BUTTON::OnMouseEnter(), BITMAP_BUTTON::OnMouseEnter(), SPLIT_BUTTON::OnMouseLeave(), BITMAP_BUTTON::OnMouseLeave(), EDA_3D_MODEL_VIEWER::OnMouseMove(), EDA_3D_MODEL_VIEWER::OnMouseWheel(), BM2CMP_FRAME::OnNegativeClicked(), BITMAP_BUTTON::OnSetFocus(), BM2CMP_FRAME::OnThresholdChange(), ACTION_TOOLBAR::RefreshBitmaps(), DIALOG_JUNCTION_PROPS::resetDefaults(), DIALOG_LINE_WIRE_BUS_PROPERTIES::resetDefaults(), TEMPLATE_WIDGET::Select(), EDA_3D_MODEL_VIEWER::Set3DModel(), WX_COLLAPSIBLE_PANE_HEADER::SetCollapsed(), EDA_MSG_PANEL::SetMessage(), PANEL_PACKAGE::SetSelected(), FOOTPRINTS_LISTBOX::SetSelection(), LIBRARY_LISTBOX::SetSelection(), TEMPLATE_WIDGET::Unselect(), mpWindow::UpdateAll(), KIGFX::OPENGL_GAL::updatedGalDisplayOptions(), KIGFX::CAIRO_GAL::updatedGalDisplayOptions(), DIALOG_PAGES_SETTINGS::UpdateDrawingSheetExample(), and NUMBER_BADGE::UpdateNumber().

◆ SaveBoard() [1/2]

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

Definition at line 208 of file pcbnew_scripting_helpers.cpp.

209 {
210  aBoard->BuildConnectivity();
212 
213  try
214  {
215  IO_MGR::Save( aFormat, aFileName, aBoard, nullptr );
216  }
217  catch( ... )
218  {
219  return false;
220  }
221 
222  wxFileName pro = aFileName;
223  pro.SetExt( ProjectFileExtension );
224  pro.MakeAbsolute();
225  wxString projectPath = pro.GetFullPath();
226 
227  GetSettingsManager()->SaveProjectAs( pro.GetFullPath() );
228 
229  return true;
230 }
void SaveProjectAs(const wxString &aFullPath)
Sets the currently loaded project path and saves it (pointers remain valid) Note that this will not m...
const std::string ProjectFileExtension
void SynchronizeNetsAndNetClasses()
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:1410
void BuildConnectivity()
Build or rebuild the board connectivity database for the board, especially the list of connected item...
Definition: board.cpp:136
SETTINGS_MANAGER * GetSettingsManager()
static void Save(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aBoard, const PROPERTIES *aProperties=nullptr)
Write either a full aBoard to a storage file in a format that this implementation knows about,...
Definition: io_mgr.cpp:174

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

Referenced by SaveBoard().

◆ SaveBoard() [2/2]

bool SaveBoard ( wxString &  aFileName,
BOARD aBoard 
)

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.
Returns
true if the save was completed.

Definition at line 233 of file pcbnew_scripting_helpers.cpp.

234 {
235  return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP );
236 }
bool SaveBoard(wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat)
S-expression Pcbnew file format.
Definition: io_mgr.h:56

References IO_MGR::KICAD_SEXP, and SaveBoard().

◆ ScriptingSetPcbEditFrame()

void ScriptingSetPcbEditFrame ( PCB_EDIT_FRAME aPcbEditFrame)

Definition at line 69 of file pcbnew_scripting_helpers.cpp.

70 {
71  s_PcbEditFrame = aPcbEditFrame;
72 }
static PCB_EDIT_FRAME * s_PcbEditFrame

References s_PcbEditFrame.

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

◆ 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 372 of file pcbnew_scripting_helpers.cpp.

373 {
374  if( s_PcbEditFrame )
376 }
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...
static PCB_EDIT_FRAME * s_PcbEditFrame

References s_PcbEditFrame, and PCB_EDIT_FRAME::UpdateUserInterface().

Referenced by PCB_EDIT_FRAME::ShowBoardSetupDialog().

◆ 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 394 of file pcbnew_scripting_helpers.cpp.

396 {
397  wxCHECK( aBoard, false );
398 
399  BOARD_DESIGN_SETTINGS& bds = aBoard->GetDesignSettings();
400  std::shared_ptr<DRC_ENGINE> engine = bds.m_DRCEngine;
401 
402  if( !engine )
403  {
404  bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( aBoard, &bds );
405  engine = bds.m_DRCEngine;
406  }
407 
408  wxCHECK( engine, false );
409 
410  wxFileName fn = aBoard->GetFileName();
411  fn.SetExt( DesignRulesFileExtension );
412  wxString drcRulesPath = s_SettingsManager->Prj().AbsolutePath( fn.GetFullName() );
413 
414  try
415  {
416  engine->InitEngine( drcRulesPath );
417  }
418  catch( PARSE_ERROR& )
419  {
420  return false;
421  }
422 
423  std::vector<std::shared_ptr<DRC_ITEM>> footprints;
424  std::vector<std::shared_ptr<DRC_ITEM>> unconnected;
425  std::vector<std::shared_ptr<DRC_ITEM>> violations;
426 
427  engine->SetProgressReporter( nullptr );
428 
429  engine->SetViolationHandler(
430  [&]( const std::shared_ptr<DRC_ITEM>& aItem, wxPoint aPos )
431  {
432  if( aItem->GetErrorCode() == DRCE_MISSING_FOOTPRINT
433  || aItem->GetErrorCode() == DRCE_DUPLICATE_FOOTPRINT
434  || aItem->GetErrorCode() == DRCE_EXTRA_FOOTPRINT
435  || aItem->GetErrorCode() == DRCE_NET_CONFLICT )
436  {
437  footprints.push_back( aItem );
438  }
439  else if( aItem->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
440  {
441  unconnected.push_back( aItem );
442  }
443  else
444  {
445  violations.push_back( aItem );
446  }
447  } );
448 
449  engine->RunTests( aUnits, aReportAllTrackErrors, false );
450  engine->ClearViolationHandler();
451 
452  // TODO: Unify this with DIALOG_DRC::writeReport
453 
454  FILE* fp = wxFopen( aFileName, wxT( "w" ) );
455 
456  if( fp == nullptr )
457  return false;
458 
459  std::map<KIID, EDA_ITEM*> itemMap;
460  aBoard->FillItemMap( itemMap );
461 
462  fprintf( fp, "** Drc report for %s **\n", TO_UTF8( aBoard->GetFileName() ) );
463 
464  wxDateTime now = wxDateTime::Now();
465 
466  fprintf( fp, "** Created on %s **\n", TO_UTF8( now.Format( wxT( "%F %T" ) ) ) );
467 
468  fprintf( fp, "\n** Found %d DRC violations **\n", static_cast<int>( violations.size() ) );
469 
470  for( const std::shared_ptr<DRC_ITEM>& item : violations )
471  {
472  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
473  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
474  }
475 
476  fprintf( fp, "\n** Found %d unconnected pads **\n", static_cast<int>( unconnected.size() ) );
477 
478  for( const std::shared_ptr<DRC_ITEM>& item : unconnected )
479  {
480  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
481  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
482  }
483 
484  fprintf( fp, "\n** Found %d Footprint errors **\n", static_cast<int>( footprints.size() ) );
485 
486  for( const std::shared_ptr<DRC_ITEM>& item : footprints )
487  {
488  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
489  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
490  }
491 
492  fprintf( fp, "\n** End of Report **\n" );
493  fclose( fp );
494 
495  return true;
496 }
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
const std::string DesignRulesFileExtension
const wxString & GetFileName() const
Definition: board.h:228
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:589
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:269
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
static SETTINGS_MANAGER * s_SettingsManager
SEVERITY GetSeverity(int aDRCErrorCode)
SEVERITY
A filename or source description, a problem input line, a line number, a byte offset,...
Definition: ki_exception.h:118
void FillItemMap(std::map< KIID, EDA_ITEM * > &aMap)
Definition: board.cpp:947
std::shared_ptr< DRC_ENGINE > m_DRCEngine
Container for design settings for a BOARD object.

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_DESIGN_SETTINGS::GetSeverity(), BOARD_DESIGN_SETTINGS::m_DRCEngine, SETTINGS_MANAGER::Prj(), s_SettingsManager, and TO_UTF8.

Variable Documentation

◆ s_PcbEditFrame

◆ s_SettingsManager

SETTINGS_MANAGER* s_SettingsManager = nullptr
static

Definition at line 57 of file pcbnew_scripting_helpers.cpp.

Referenced by GetSettingsManager(), and WriteDRCReport().