KiCad PCB EDA Suite
pcbnew_scripting_helpers.cpp
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2012 NBEE Embedded Systems, Miguel Angel Ajo <miguelangel@nbee.es>
5  * Copyright (C) 1992-2017 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
30 #include <Python.h>
31 #undef HAVE_CLOCK_GETTIME // macro is defined in Python.h and causes redefine warning
32 
34 #include <pcbnew.h>
35 #include <pcbnew_id.h>
36 #include <build_version.h>
37 #include <class_board.h>
38 #include <kicad_string.h>
39 #include <io_mgr.h>
40 #include <macros.h>
41 #include <stdlib.h>
42 #include <pcb_draw_panel_gal.h>
43 #include <action_plugin.h>
44 
46 
48 {
49  if( s_PcbEditFrame )
50  return s_PcbEditFrame->GetBoard();
51  else
52  return NULL;
53 }
54 
55 
57 {
58  s_PcbEditFrame = aPcbEditFrame;
59 }
60 
61 
62 BOARD* LoadBoard( wxString& aFileName )
63 {
64  if( aFileName.EndsWith( wxT( ".kicad_pcb" ) ) )
65  return LoadBoard( aFileName, IO_MGR::KICAD_SEXP );
66 
67  else if( aFileName.EndsWith( wxT( ".brd" ) ) )
68  return LoadBoard( aFileName, IO_MGR::LEGACY );
69 
70  // as fall back for any other kind use the legacy format
71  return LoadBoard( aFileName, IO_MGR::LEGACY );
72 }
73 
74 
75 BOARD* LoadBoard( wxString& aFileName, IO_MGR::PCB_FILE_T aFormat )
76 {
77  BOARD* brd = IO_MGR::Load( aFormat, aFileName );
78 
79  if( brd )
80  {
81  brd->BuildConnectivity();
82  brd->BuildListOfNets();
84  }
85 
86 
87  return brd;
88 }
89 
90 
91 bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat )
92 {
93  aBoard->BuildConnectivity();
96 
97  IO_MGR::Save( aFormat, aFileName, aBoard, NULL );
98 
99  return true;
100 }
101 
102 
103 bool SaveBoard( wxString& aFileName, BOARD* aBoard )
104 {
105  return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP );
106 }
107 
108 
109 bool ExportSpecctraDSN( wxString& aFullFilename )
110 {
111  if( s_PcbEditFrame )
112  {
113  bool ok = s_PcbEditFrame->ExportSpecctraFile( aFullFilename );
114  return ok;
115  }
116  else
117  {
118  return false;
119  }
120 }
121 
122 
123 bool ImportSpecctraSES( wxString& aFullFilename )
124 {
125  if( s_PcbEditFrame )
126  {
127  bool ok = s_PcbEditFrame->ImportSpecctraSession( aFullFilename );
128  return ok;
129  }
130  else
131  {
132  return false;
133  }
134 }
135 
136 
137 bool ArchiveModulesOnBoard( bool aStoreInNewLib, const wxString& aLibName, wxString* aLibPath )
138 {
139  if( s_PcbEditFrame )
140  {
141  s_PcbEditFrame->ArchiveModulesOnBoard( aStoreInNewLib, aLibName, aLibPath );
142  return true;
143  }
144  else
145  {
146  return false;
147  }
148 }
149 
150 void Refresh()
151 {
152  if( s_PcbEditFrame )
153  {
154  auto board = s_PcbEditFrame->GetBoard();
155  board->BuildConnectivity();
156 
157  // Re-init everything: this is the easy way to do that
160  }
161 }
162 
163 
165 {
166  if( s_PcbEditFrame )
168 }
169 
170 
172 {
173  if( s_PcbEditFrame )
174  return s_PcbEditFrame->GetUserUnits();
175 
176  return -1;
177 }
178 
179 
181 {
183 }
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...
bool ArchiveModulesOnBoard(bool aStoreInNewLib, const wxString &aLibName, wxString *aLibPath)
Function ArchiveModulesOnBoard Save modules in a library:
BOARD * LoadBoard(wxString &aFileName)
void BuildListOfNets()
Definition: class_board.h:717
static bool IsActionRunning()
Function IsActionRunning.
int GetUserUnits()
Returns the currently selected user unit value for the interface.
void ActivateGalCanvas() override
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:531
void ScriptingSetPcbEditFrame(PCB_EDIT_FRAME *aPcbEditFrame)
This file contains miscellaneous commonly used macros and functions.
bool IsActionRunning()
Are we currently in an action plugin?
void SynchronizeNetsAndNetClasses()
Function SynchronizeNetsAndNetClasses copies NETCLASS info to each NET, based on NET membership in a ...
Definition: netclass.cpp:155
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
static const char Default[]
the name of the default NETCLASS
Definition: netclass.h:80
static BOARD * Load(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aAppendToMe=NULL, const PROPERTIES *aProperties=NULL)
Function Load finds the requested PLUGIN and if found, calls the PLUGIN->Load(..) funtion on it using...
Definition: io_mgr.cpp:173
bool ImportSpecctraSES(wxString &aFullFilename)
will import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and tracks i...
void BuildConnectivity()
Builds or rebuilds the board connectivity database for the board, especially the list of connected it...
void UpdateUserInterface()
Update the layer manager and other widgets from the board setup (layer and items visibility,...
bool ExportSpecctraDSN(wxString &aFullFilename)
will export the current BOARD to a specctra dsn file.
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()
static void Save(PCB_FILE_T aFileType, const wxString &aFileName, BOARD *aBoard, const PROPERTIES *aProperties=NULL)
Function Save will write either a full aBoard to a storage file in a format that this implementation ...
Definition: io_mgr.cpp:188
bool ImportSpecctraSession(const wxString &aFullFilename)
Function ImportSpecctraSession will import a specctra *.ses file and use it to relocate MODULEs and t...
bool SaveBoard(wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat)
Class PCBNEW_ACTION_PLUGINS.
bool SetCurrentNetClass(const wxString &aNetClassName)
Function SetCurrentNetClass Must be called after a netclass selection (or after a netclass parameter ...
Legacy Pcbnew file formats prior to s-expression.
Definition: io_mgr.h:56
void ArchiveModulesOnBoard(bool aStoreInNewLib, const wxString &aLibName=wxEmptyString, wxString *aLibPath=NULL)
Function ArchiveModulesOnBoard Save modules in a library:
EDA_UNITS_T GetUserUnits() const
Return the user units currently in use.
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:161
Class PCB_EDIT_FRAME is the main frame for Pcbnew.
BOARD * GetBoard() const
PCB_FILE_T
Enum PCB_FILE_T is a set of file types that the IO_MGR knows about, and for which there has been a pl...
Definition: io_mgr.h:54
static PCB_EDIT_FRAME * s_PcbEditFrame
bool ExportSpecctraFile(const wxString &aFullFilename)
Function ExportSpecctraFile will export the current BOARD to a specctra dsn file.
S-expression Pcbnew file format.
Definition: io_mgr.h:57