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 <kicad_string.h>
#include <macros.h>
#include <project.h>
#include <settings/settings_manager.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 ()
 Constructs a default BOARD with a tempoary (no filename) project. More...
 
bool SaveBoard (wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat)
 
bool SaveBoard (wxString &aFileName, BOARD *aBoard)
 
FP_LIB_TABLEGetFootprintLibraryTable ()
 
wxArrayString GetFootprintLibraries ()
 will 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)
 will 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 ExportVRML (const wxString &aFullFileName, double aMMtoWRMLunit, bool aExport3DFiles, bool aUseRelativePaths, const wxString &a3D_Subdir, double aXRef, double aYRef)
 will export the current BOARD to a VRML (wrl) file. More...
 
bool ImportSpecctraSES (wxString &aFullFilename)
 will 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)
 Function ExportFootprintsToLibrary 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 ()
 Returns 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)
 Runs the DRC check on the given board and writes the results to a report file. More...
 

Variables

static PCB_EDIT_FRAMEs_PcbEditFrame = NULL
 
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 ( )

Constructs a default BOARD with a tempoary (no filename) project.

Returns
the created board

Definition at line 176 of file pcbnew_scripting_helpers.cpp.

177 {
178  BOARD* brd = new BOARD();
179 
180  brd->SetProject( GetDefaultProject() );
181 
182  return brd;
183 }
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

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

◆ ExportFootprintsToLibrary()

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

Function ExportFootprintsToLibrary Save footprints in a library:

Parameters
aStoreInNewLibtrue : 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 false: save footprints in a new lib. It it is an existing lib, previous footprints will be removed
aLibNameoptional library name to create, stops dialog call. must be called with aStoreInNewLib as true

Definition at line 302 of file pcbnew_scripting_helpers.cpp.

303 {
304  if( s_PcbEditFrame )
305  {
306  s_PcbEditFrame->ExportFootprintsToLibrary( aStoreInNewLib, aLibName, aLibPath );
307  return true;
308  }
309  else
310  {
311  return false;
312  }
313 }
void ExportFootprintsToLibrary(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=NULL)
Save footprints in a library:
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_EDIT_FRAME::ExportFootprintsToLibrary(), and s_PcbEditFrame.

◆ ExportSpecctraDSN()

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

258 {
259  if( s_PcbEditFrame )
260  {
261  bool ok = s_PcbEditFrame->ExportSpecctraFile( aFullFilename );
262  return ok;
263  }
264  else
265  {
266  return false;
267  }
268 }
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.

◆ ExportVRML()

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

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

274 {
275  if( s_PcbEditFrame )
276  {
277  bool ok = s_PcbEditFrame->ExportVRML_File( aFullFileName, aMMtoWRMLunit,
278  aExport3DFiles, aUseRelativePaths,
279  a3D_Subdir, aXRef, aYRef );
280  return ok;
281  }
282  else
283  {
284  return false;
285  }
286 }
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 NULL;
66 }
#define NULL
BOARD * GetBoard() const
static PCB_EDIT_FRAME * s_PcbEditFrame

References PCB_BASE_FRAME::GetBoard(), NULL, 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 100 of file pcbnew_scripting_helpers.cpp.

101 {
103 
104  if( !project )
105  {
108  }
109 
110  return project;
111 }
Container for project specific data.
Definition: project.h:62
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 SETTINGS_MANAGER::GetProject(), GetSettingsManager(), SETTINGS_MANAGER::LoadProject(), and project.

Referenced by CreateEmptyBoard(), and LoadBoard().

◆ GetFootprintLibraries()

wxArrayString GetFootprintLibraries ( )

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

227 {
228  wxArrayString footprintLibraryNames;
229 
231 
232  if( !tbl )
233  return footprintLibraryNames;
234 
235  for( const wxString& name : tbl->GetLogicalLibs() )
236  footprintLibraryNames.Add( name );
237 
238  return footprintLibraryNames;
239 }
FP_LIB_TABLE * GetFootprintLibraryTable()
const char * name
Definition: DXF_plotter.cpp:59
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 210 of file pcbnew_scripting_helpers.cpp.

211 {
212  BOARD* board = GetBoard();
213 
214  if( !board )
215  return nullptr;
216 
217  PROJECT* project = board->GetProject();
218 
219  if( !project )
220  return nullptr;
221 
222  return project->PcbFootprintLibs();
223 }
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)

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

243 {
244  wxArrayString footprintNames;
245 
247 
248  if( !tbl )
249  return footprintNames;
250 
251  tbl->FootprintEnumerate( footprintNames, aNickName, true );
252 
253  return footprintNames;
254 }
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 ( )

Returns the currently selected user unit value for the interface.

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

Definition at line 336 of file pcbnew_scripting_helpers.cpp.

337 {
338  if( s_PcbEditFrame )
339  return static_cast<int>( s_PcbEditFrame->GetUserUnits() );
340 
341  return -1;
342 }
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)

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

289 {
290  if( s_PcbEditFrame )
291  {
292  bool ok = s_PcbEditFrame->ImportSpecctraSession( aFullFilename );
293  return ok;
294  }
295  else
296  {
297  return false;
298  }
299 }
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 345 of file pcbnew_scripting_helpers.cpp.

346 {
348 }
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  if( aFileName.EndsWith( KiCadPcbFileExtension ) )
78  return LoadBoard( aFileName, IO_MGR::KICAD_SEXP );
79  else if( aFileName.EndsWith( LegacyPcbFileExtension ) )
80  return LoadBoard( aFileName, IO_MGR::LEGACY );
81 
82  // as fall back for any other kind use the legacy format
83  return LoadBoard( aFileName, IO_MGR::LEGACY );
84 }
BOARD * LoadBoard(wxString &aFileName)
const std::string LegacyPcbFileExtension
const std::string KiCadPcbFileExtension
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:54
S-expression Pcbnew file format.
Definition: io_mgr.h:55

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

Referenced by LoadBoard().

◆ LoadBoard() [2/2]

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

Definition at line 114 of file pcbnew_scripting_helpers.cpp.

115 {
116  wxFileName pro = aFileName;
117  pro.SetExt( ProjectFileExtension );
118  pro.MakeAbsolute();
119  wxString projectPath = pro.GetFullPath();
120 
121  // Ensure the "C" locale is temporary set, before reading any file
122  // It also avoid wxWidget alerts about locale issues, later, when using Python 3
124 
125  PROJECT* project = GetSettingsManager()->GetProject( projectPath );
126 
127  if( !project )
128  {
129  GetSettingsManager()->LoadProject( projectPath );
130  project = GetSettingsManager()->GetProject( projectPath );
131  }
132 
133  // Board cannot be loaded without a project, so create the default project
134  if( !project )
136 
137  BOARD* brd = IO_MGR::Load( aFormat, aFileName );
138 
139  if( brd )
140  {
141  brd->SetProject( project );
142 
143  // Move legacy view settings to local project settings
144  if( !brd->m_LegacyVisibleLayers.test( Rescue ) )
145  project->GetLocalSettings().m_VisibleLayers = brd->m_LegacyVisibleLayers;
146 
148  project->GetLocalSettings().m_VisibleItems = brd->m_LegacyVisibleItems;
149 
151  bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( brd, &bds );
152 
153  try
154  {
155  wxFileName rules = pro;
156  rules.SetExt( DesignRulesFileExtension );
157  bds.m_DRCEngine->InitEngine( rules );
158  }
159  catch( ... )
160  {
161  // Best efforts...
162  }
163 
164  for( PCB_MARKER* marker : brd->ResolveDRCExclusions() )
165  brd->Add( marker );
166 
167  brd->BuildConnectivity();
168  brd->BuildListOfNets();
170  }
171 
172  return brd;
173 }
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
This is the end of the layers used for visibility bit masks in Pcbnew.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:588
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:70
void SynchronizeNetsAndNetClasses()
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:1488
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Adds an item to the container.
Definition: board.cpp:606
std::vector< PCB_MARKER * > ResolveDRCExclusions()
Rebuild DRC markers from the serialized data in BOARD_DESIGN_SETTINGS.
Definition: board.cpp:206
#define GAL_LAYER_INDEX(x)
Use this macro to convert a GAL layer to a 0-indexed offset from LAYER_VIAS.
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()
static BOARD * Load(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aAppendToMe=nullptr, const PROPERTIES *aProperties=nullptr, PROJECT *aProject=nullptr)
Find the requested PLUGIN and if found, calls the PLUGIN::Load() function on it using the arguments p...
Definition: io_mgr.cpp:158
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
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.
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(), 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 315 of file pcbnew_scripting_helpers.cpp.

316 {
317  if( s_PcbEditFrame )
318  {
319  auto board = s_PcbEditFrame->GetBoard();
320  board->BuildConnectivity();
321 
322  // Re-init everything: this is the easy way to do that
325  }
326 }
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=NULL) 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_EDIT_LINE_STYLE::resetDefaults(), TEMPLATE_WIDGET::Select(), EDA_3D_MODEL_VIEWER::Set3DModel(), WX_COLLAPSIBLE_PANE_HEADER::SetCollapsed(), EDA_MSG_PANEL::SetMessage(), 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 186 of file pcbnew_scripting_helpers.cpp.

187 {
188  aBoard->BuildConnectivity();
190 
191  IO_MGR::Save( aFormat, aFileName, aBoard, NULL );
192 
193  wxFileName pro = aFileName;
194  pro.SetExt( ProjectFileExtension );
195  pro.MakeAbsolute();
196  wxString projectPath = pro.GetFullPath();
197 
198  GetSettingsManager()->SaveProject( pro.GetFullPath() );
199 
200  return true;
201 }
const std::string ProjectFileExtension
void SynchronizeNetsAndNetClasses()
Copy NETCLASS info to each NET, based on NET membership in a NETCLASS.
Definition: board.cpp:1488
#define NULL
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:173
bool SaveProject(const wxString &aFullPath=wxEmptyString)
Saves a loaded project.

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

Referenced by SaveBoard().

◆ SaveBoard() [2/2]

bool SaveBoard ( wxString &  aFileName,
BOARD aBoard 
)

Definition at line 204 of file pcbnew_scripting_helpers.cpp.

205 {
206  return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP );
207 }
bool SaveBoard(wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat)
S-expression Pcbnew file format.
Definition: io_mgr.h:55

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

330 {
331  if( s_PcbEditFrame )
333 }
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 
)

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

353 {
354  wxCHECK( aBoard, false );
355 
356  BOARD_DESIGN_SETTINGS& bds = aBoard->GetDesignSettings();
357  std::shared_ptr<DRC_ENGINE> engine = bds.m_DRCEngine;
358 
359  if( !engine )
360  {
361  bds.m_DRCEngine = std::make_shared<DRC_ENGINE>( aBoard, &bds );
362  engine = bds.m_DRCEngine;
363  }
364 
365  wxCHECK( engine, false );
366 
367  wxFileName fn = aBoard->GetFileName();
368  fn.SetExt( DesignRulesFileExtension );
369  wxString drcRulesPath = s_SettingsManager->Prj().AbsolutePath( fn.GetFullName() );
370 
371  try
372  {
373  engine->InitEngine( drcRulesPath );
374  }
375  catch( PARSE_ERROR& )
376  {
377  return false;
378  }
379 
380  std::vector<std::shared_ptr<DRC_ITEM>> footprints;
381  std::vector<std::shared_ptr<DRC_ITEM>> unconnected;
382  std::vector<std::shared_ptr<DRC_ITEM>> violations;
383 
384  engine->SetProgressReporter( nullptr );
385 
386  engine->SetViolationHandler(
387  [&]( const std::shared_ptr<DRC_ITEM>& aItem, wxPoint aPos )
388  {
389  if( aItem->GetErrorCode() == DRCE_MISSING_FOOTPRINT
390  || aItem->GetErrorCode() == DRCE_DUPLICATE_FOOTPRINT
391  || aItem->GetErrorCode() == DRCE_EXTRA_FOOTPRINT
392  || aItem->GetErrorCode() == DRCE_NET_CONFLICT )
393  {
394  footprints.push_back( aItem );
395  }
396  else if( aItem->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
397  {
398  unconnected.push_back( aItem );
399  }
400  else
401  {
402  violations.push_back( aItem );
403  }
404  } );
405 
406  engine->RunTests( aUnits, aReportAllTrackErrors, false );
407  engine->ClearViolationHandler();
408 
409  // TODO: Unify this with DIALOG_DRC::writeReport
410 
411  FILE* fp = wxFopen( aFileName, wxT( "w" ) );
412 
413  if( fp == nullptr )
414  return false;
415 
416  std::map<KIID, EDA_ITEM*> itemMap;
417  aBoard->FillItemMap( itemMap );
418 
419  fprintf( fp, "** Drc report for %s **\n", TO_UTF8( aBoard->GetFileName() ) );
420 
421  wxDateTime now = wxDateTime::Now();
422 
423  fprintf( fp, "** Created on %s **\n", TO_UTF8( now.Format( wxT( "%F %T" ) ) ) );
424 
425  fprintf( fp, "\n** Found %d DRC violations **\n", static_cast<int>( violations.size() ) );
426 
427  for( const std::shared_ptr<DRC_ITEM>& item : violations )
428  {
429  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
430  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
431  }
432 
433  fprintf( fp, "\n** Found %d unconnected pads **\n", static_cast<int>( unconnected.size() ) );
434 
435  for( const std::shared_ptr<DRC_ITEM>& item : unconnected )
436  {
437  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
438  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
439  }
440 
441  fprintf( fp, "\n** Found %d Footprint errors **\n", static_cast<int>( footprints.size() ) );
442 
443  for( const std::shared_ptr<DRC_ITEM>& item : footprints )
444  {
445  SEVERITY severity = bds.GetSeverity( item->GetErrorCode() );
446  fprintf( fp, "%s", TO_UTF8( item->ShowReport( aUnits, severity, itemMap ) ) );
447  }
448 
449  fprintf( fp, "\n** End of Report **\n" );
450  fclose( fp );
451 
452  return true;
453 }
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
SEVERITY
Definition: ui_common.h:83
const std::string DesignRulesFileExtension
const wxString & GetFileName() const
Definition: board.h:228
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Definition: board.cpp:588
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:271
#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)
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:946
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().