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 
44 
46 {
47  if( s_PcbEditFrame )
48  return s_PcbEditFrame->GetBoard();
49  else
50  return NULL;
51 }
52 
53 
55 {
56  s_PcbEditFrame = aPcbEditFrame;
57 }
58 
59 
60 BOARD* LoadBoard( wxString& aFileName )
61 {
62  if( aFileName.EndsWith( wxT( ".kicad_pcb" ) ) )
63  return LoadBoard( aFileName, IO_MGR::KICAD_SEXP );
64 
65  else if( aFileName.EndsWith( wxT( ".brd" ) ) )
66  return LoadBoard( aFileName, IO_MGR::LEGACY );
67 
68  // as fall back for any other kind use the legacy format
69  return LoadBoard( aFileName, IO_MGR::LEGACY );
70 }
71 
72 
73 BOARD* LoadBoard( wxString& aFileName, IO_MGR::PCB_FILE_T aFormat )
74 {
75  BOARD* brd = IO_MGR::Load( aFormat, aFileName );
76 
77  if( brd )
78  brd->BuildConnectivity();
79 
80  return brd;
81 }
82 
83 
84 bool SaveBoard( wxString& aFileName, BOARD* aBoard, IO_MGR::PCB_FILE_T aFormat )
85 {
86  aBoard->BuildConnectivity();
89 
90  IO_MGR::Save( aFormat, aFileName, aBoard, NULL );
91 
92  return true;
93 }
94 
95 
96 bool SaveBoard( wxString& aFileName, BOARD* aBoard )
97 {
98  return SaveBoard( aFileName, aBoard, IO_MGR::KICAD_SEXP );
99 }
100 
101 
102 void Refresh()
103 {
104  if( s_PcbEditFrame )
105  {
106  if( s_PcbEditFrame->IsGalCanvasActive() )
107  s_PcbEditFrame->GetGalCanvas()->Refresh();
108  else
109  // first argument is erase background, second is a wxRect that
110  // defines a reftresh area (all canvas if null)
111  s_PcbEditFrame->GetCanvas()->Refresh( true, NULL );
112  }
113 }
114 
115 
116 void WindowZoom( int xl, int yl, int width, int height )
117 {
118  EDA_RECT Rect( wxPoint( xl, yl ), wxSize( width, height )) ;
119 
120  if( s_PcbEditFrame )
121  s_PcbEditFrame->Window_Zoom( Rect );
122 }
123 
124 
126 {
127  if( s_PcbEditFrame )
128  s_PcbEditFrame->UpdateUserInterface();
129 }
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)
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:332
EDA_DRAW_PANEL * GetCanvas()
Definition: draw_frame.h:331
Class BOARD to handle a board.
BOARD * GetBoard() const
void ScriptingSetPcbEditFrame(PCB_EDIT_FRAME *aPcbEditFrame)
This file contains miscellaneous commonly used macros and functions.
void SynchronizeNetsAndNetClasses()
Function SynchronizeNetsAndNetClasses copies NETCLASS info to each NET, based on NET membership in a ...
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
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:179
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
bool IsGalCanvasActive() const
Function IsGalCanvasActive is used to check which canvas (GAL-based or standard) is currently in use...
Definition: draw_frame.h:856
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 ...)
Definition: pcbframe.cpp:1051
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:194
bool SaveBoard(wxString &aFileName, BOARD *aBoard, IO_MGR::PCB_FILE_T aFormat)
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:53
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:169
Class EDA_RECT handles the component boundary box.
void Window_Zoom(EDA_RECT &Rect)
Compute the zoom factor and the new draw offset to draw the selected area (Rect) in full window scree...
Definition: zoom.cpp:103
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:864
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:51
static PCB_EDIT_FRAME * s_PcbEditFrame
S-expression Pcbnew file format.
Definition: io_mgr.h:54