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 
33 #include <pcbnew.h>
34 #include <pcbnew_id.h>
35 #include <build_version.h>
36 #include <class_board.h>
37 #include <class_drawpanel.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  brd->BuildConnectivity();
81 
82  return brd;
83 }
84 
85 
86 bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat )
87 {
88  aBoard->BuildConnectivity();
91 
92  IO_MGR::Save( aFormat, aFileName, aBoard, NULL );
93 
94  return true;
95 }
96 
97 
98 bool SaveBoard( wxString& aFileName, BOARD* aBoard )
99 {
100  return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP );
101 }
102 
103 
104 void Refresh()
105 {
106  if( s_PcbEditFrame )
107  {
108  auto board = s_PcbEditFrame->GetBoard();
109  board->BuildConnectivity();
110 
111  if( s_PcbEditFrame->IsGalCanvasActive() )
112  {
113  auto panel = static_cast<PCB_DRAW_PANEL_GAL*>( s_PcbEditFrame->GetGalCanvas() );
114  panel->DisplayBoard(board);
115  s_PcbEditFrame->GetGalCanvas()->Refresh();
116  }
117  else
118  // first argument is erase background, second is a wxRect that
119  // defines a reftresh area (all canvas if null)
120  s_PcbEditFrame->GetCanvas()->Refresh( true, NULL );
121  }
122 }
123 
124 
125 void WindowZoom( int xl, int yl, int width, int height )
126 {
127  EDA_RECT Rect( wxPoint( xl, yl ), wxSize( width, height )) ;
128 
129  if( s_PcbEditFrame )
130  s_PcbEditFrame->Window_Zoom( Rect );
131 }
132 
133 
135 {
136  if( s_PcbEditFrame )
137  s_PcbEditFrame->UpdateUserInterface();
138 }
139 
140 
142 {
144 }
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.
BOARD * LoadBoard(wxString &aFileName)
static bool IsActionRunning()
Function IsActionRunning.
virtual void Refresh(bool eraseBackground=true, const wxRect *rect=NULL) override
Update the board display after modifying it bu a python script (note: it is automatically called by a...
Definition: draw_panel.cpp:338
EDA_DRAW_PANEL * GetCanvas()
Definition: draw_frame.h:359
Class BOARD to handle a board.
BOARD * GetBoard() const
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:158
void Refresh()
Update the board display after modifying it bu a python script (note: it is automatically called by a...
static const char Default[]
the name of the default NETCLASS
Definition: netclass.h:90
void DisplayBoard(BOARD *aBoard)
Function DisplayBoard adds all items from the current board to the VIEW, so they can be displayed by ...
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:171
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:533
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:895
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, colors ...)
void Refresh(bool aEraseBackground=true, const wxRect *aRect=NULL) override
Update the board display after modifying it bu 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:186
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:54
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:169
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
Class PCB_EDIT_FRAME is the main frame for Pcbnew.
void Window_Zoom(EDA_RECT &Rect)
Definition: zoom.cpp:124
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:903
void WindowZoom(int xl, int yl, int width, int height)
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:52
static PCB_EDIT_FRAME * s_PcbEditFrame
S-expression Pcbnew file format.
Definition: io_mgr.h:55