kicad/pcbnew/python/scripting/pcbnew_scripting_helpers.h

265 lines
8.9 KiB
C++

/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2013 NBEE Embedded Systems SL, Miguel Angel Ajo <miguelangel@ajo.es>
* Copyright (C) 2013-2023 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __PCBNEW_SCRIPTING_HELPERS_H
#define __PCBNEW_SCRIPTING_HELPERS_H
#include <deque>
#include <pcb_io/pcb_io_mgr.h>
#include <layer_ids.h>
class PCB_EDIT_FRAME;
class BOARD;
class SETTINGS_MANAGER;
class BOARD_ITEM;
enum class EDA_UNITS;
enum PCB_LAYER_ID : int;
/* we could be including all these methods as static in a class, but
* we want plain pcbnew.<method_name> access from python
*/
#ifndef SWIG
void ScriptingSetPcbEditFrame( PCB_EDIT_FRAME* aPCBEdaFrame );
void ScriptingOnDestructPcbEditFrame( PCB_EDIT_FRAME* aPCBEdaFrame );
#endif
// For Python scripts: return the current board.
BOARD* GetBoard();
/**
* Loads a board from file using the specified file io handler
*
* This function does not set the board project as the active one
* @return a pointer to the board if it was created, or None if not
*/
BOARD* LoadBoard( wxString& aFileName, PCB_IO_MGR::PCB_FILE_T aFormat );
#ifndef SWIG
/**
* Loads a board from file using the specified file io handler
*
* Hidden from SWIG as aSetActive should not be used by python, but cli also leverages this function
*/
BOARD* LoadBoard( wxString& aFileName, PCB_IO_MGR::PCB_FILE_T aFormat, bool aSetActive );
#endif
// Default LoadBoard() to load .kicad_pcb files:.
#ifndef SWIG
/**
* Loads a board from file
* This function identifies the file type by extension and determines the correct file io to use
*
* Hidden from SWIG as aSetActive should not be used by python, but cli also leverages this function
*/
BOARD* LoadBoard( wxString& aFileName, bool aSetActive );
#endif
/**
* Loads a board from file
* This function identifies the file type by extension and determines the correct file io to use
*
* This function does not set the board project as the active one
* @return a pointer to the board if it was created, or None if not
*/
BOARD* LoadBoard( wxString& aFileName );
/**
* Creates a new board and project with the given filename (will overwrite existing files!)
*
* @param aFileName is the filename (including full path if desired) of the kicad_pcb to create
* @return a pointer to the board if it was created, or None if not
*/
BOARD* NewBoard( wxString& aFileName );
SETTINGS_MANAGER* GetSettingsManager();
/**
* Construct a default BOARD with a temporary (no filename) project.
*
* @return the created board.
*/
BOARD* CreateEmptyBoard();
/**
* Saves a copy of the given board and its associated project to the given path.
* Boards can only be saved in KiCad native format.
* @param aFileName is the full path to save a copy to.
* @param aBoard is a pointer to a loaded BOARD to save.
* @param aSkipSettings if true, only save the board file. This will lose settings changes
* that are saved in the project file
* @return true if the save was completed.
*/
bool SaveBoard( wxString& aFileName, BOARD* aBoard, bool aSkipSettings = false );
/**
* Get the nicknames of all of the footprint libraries configured in
* pcbnew in both the project and global library tables.
*
* @return the list of footprint library nicknames, empty on error.
*/
wxArrayString GetFootprintLibraries();
/**
* Get the names of all of the footprints available in a footprint library.
*
* @param aNickName is the nickname specifying which footprint library to fetch from.
* @return the list of footprint names, empty on error.
*/
wxArrayString GetFootprints( const wxString& aNickName );
/**
* Will export the current BOARD to a specctra dsn file.
*
* See http://www.autotraxeda.com/docs/SPECCTRA/SPECCTRA.pdf for the specification.
*
* @return true if OK
*/
bool ExportSpecctraDSN( 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.
*
* @return true if OK
*/
bool ExportSpecctraDSN( BOARD* aBoard, wxString& aFullFilename );
/**
* Export the current BOARD to a VRML (wrl) file.
*
* See ExportVRML_File in pcb_edit_frame.h for detailed documentation.
* @return true if OK.
*/
bool ExportVRML( const wxString& aFullFileName, double aMMtoWRMLunit, bool aIncludeUnspecified,
bool aIncludeDNP, bool aExport3DFiles,
bool aUseRelativePaths, const wxString& a3D_Subdir, double aXRef, double aYRef );
/**
* 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.
*
* @return true if OK
*/
bool ImportSpecctraSES( wxString& aFullFilename );
/**
* Import a specctra *.ses file and use it to relocate MODULEs and to replace all vias and
* 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.
*
* @return true if OK
*/
bool ImportSpecctraSES( BOARD* aBoard, wxString& aFullFilename );
/**
* Save footprints in a library:
*
* @param aStoreInNewLib set 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.
*
* @param aLibName is the optional library name to create, stops dialog call. Must be called
* with \a aStoreInNewLib as true.
*/
bool ExportFootprintsToLibrary( bool aStoreInNewLib, const wxString& aLibName = wxEmptyString,
wxString* aLibPath = nullptr );
/**
* 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.
*/
void Refresh();
/**
* 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
*/
void UpdateUserInterface();
/**
* Return the currently selected user unit value for the interface.
*
* @return 0 = Inches, 1=mm, -1 if the frame isn't set
*/
int GetUserUnits();
/**
* Get the list of selected objects.
*/
std::deque<BOARD_ITEM*> GetCurrentSelection();
/**
* Focus the view on the target item.
*
* @param aItem is the target board item.
* @param aLayer is the layer ID of the target item.
*/
void FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer = UNDEFINED_LAYER );
/**
* Are we currently in an action plugin?
*/
bool IsActionRunning();
/**
* 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.
*
* @param aBoard is a valid loaded board.
* @param aFileName is the full path and name of the report file to write.
* @param aUnits is the units to use in the report.
* @param aReportAllTrackErrors controls whether all errors or just the first error is reported
* for each track.
* @return true if successful, false if not.
*/
bool WriteDRCReport( BOARD* aBoard, const wxString& aFileName, EDA_UNITS aUnits,
bool aReportAllTrackErrors );
/**
* Get the language string from COMMON_SETTINGS.
*
* @return the current language string.
*/
wxString GetLanguage();
#endif // __PCBNEW_SCRIPTING_HELPERS_H