21#include <wx/filename.h>
59#define FMT_UNIMPLEMENTED _( "Plugin '%s' does not implement the '%s' function." )
60#define FMT_NOTFOUND _( "Plugin type '%s' is not found." )
91 for(
const auto& plugin : plugins )
93 if ( plugin.m_type == aType )
97 return wxString::Format(
_(
"UNKNOWN (%d)" ), aType );
108 for(
const auto& plugin : plugins )
110 if( plugin.m_name.CmpNoCase( aType ) == 0 )
111 return plugin.m_type;
159 for(
const auto& plugin : plugins )
171 if( pi->CanReadBoard( aFileName ) )
172 return plugin.m_type;
183 if( parser.
Parse( aLibPath.ToStdString() ).has_value() )
188 for(
const auto& plugin : plugins )
200 if( pi->CanReadLibrary( aLibPath ) )
201 return plugin.m_type;
209 const std::map<std::string, UTF8>* aProperties,
PROJECT* aProject,
216 pi->SetProgressReporter( aProgressReporter );
217 return pi->LoadBoard( aFileName, aProperties, aProject );
225 const std::map<std::string, UTF8>* aProperties )
231 pi->SaveBoard( aFileName, aBoard, aProperties );
240 const wxString& aNewFilePath,
REPORTER* aReporter )
255 if( !oldFilePI || !kicadPI )
258 wxArrayString fpNames;
259 wxFileName newFileName( aNewFilePath );
261 if( newFileName.HasExt() )
263 wxString extraDir = newFileName.GetFullName();
264 newFileName.ClearExt();
265 newFileName.SetName(
"" );
266 newFileName.AppendDir( extraDir );
269 if( !newFileName.DirExists() && !wxFileName::Mkdir( aNewFilePath, wxS_DIR_DEFAULT ) )
274 bool bestEfforts =
false;
275 oldFilePI->FootprintEnumerate( fpNames, aOldFilePath, bestEfforts, &aOldFileProps );
276 std::map<std::string, UTF8> props { {
"skip_cache_validation",
"" } };
278 for (
const wxString& fpName : fpNames )
280 std::unique_ptr<const FOOTPRINT> fp( oldFilePI->GetEnumeratedFootprint( aOldFilePath, fpName,
285 kicadPI->FootprintSave( aNewFilePath, fp.get(), &props );
294 aReporter->
Report( wxString::Format(
"Footprint \"%s\" can't be saved. Skipped",
305 aReporter->
Report( wxString::Format(
"Library '%s' Convert err: \"%s\"",
345 wxT(
"Altium Circuit Maker" ),
350 wxT(
"Altium Circuit Studio" ),
355 wxT(
"Altium Designer" ),
360 wxT(
"CADSTAR PCB Archive" ),
370 wxT(
"EasyEDA / JLCEDA Std" ),
375 wxT(
"EasyEDA / JLCEDA Pro" ),
380 wxT(
"EasyEDA / JLCEDA Pro v3" ),
390 wxT(
"gEDA / Lepton EDA" ),
400 wxT(
"Solidworks PCB" ),
420 wxT(
"Sprint Layout" ),
435 wxT(
"Protel Autotrax" ),
440 wxT(
"PADS Binary" ),
Information pertinent to a Pcbnew printed circuit board.
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
virtual const wxString What() const
A composite of Problem() and Where()
tl::expected< LIBRARY_TABLE_IR, LIBRARY_PARSE_ERROR > Parse(const std::filesystem::path &aPath)
static const wxString TABLE_TYPE_NAME
Read-only importer for Protel Autotrax (.PCB, "PCB FILE 4") and Easytrax (.PCB, "PCB FILE 5") layout ...
Works with Eagle 6.x XML board files and footprints to implement the Pcbnew PCB_IO API or a portion o...
A PCB_IO derivation for saving and loading Geda PCB files.
A PCB_IO derivation which could possibly be put into a DLL/DSO.
A PCB_IO derivation for saving and loading Pcbnew s-expression formatted files.
PCB_IO * Create(PCB_FILE_T aFileType) const
const std::vector< ENTRY > & AllPlugins() const
static PLUGIN_REGISTRY * Instance()
static bool ConvertLibrary(const std::map< std::string, UTF8 > &aOldFileProps, const wxString &aOldFilePath, const wxString &aNewFilePath, REPORTER *aReporter)
Convert a schematic symbol library to the latest KiCad format.
static bool ImportPopulatesProjectSettings(PCB_FILE_T aFileType)
Return true when importing aFileType writes netclasses, rules or other settings that belong to the pr...
static PCB_FILE_T EnumFromStr(const wxString &aFileType)
Return the PCB_FILE_T from the corresponding plugin type name: "kicad", "legacy", etc.
PCB_FILE_T
The set of file types that the PCB_IO_MGR knows about, and for which there has been a plugin written,...
@ KICAD_SEXP
S-expression Pcbnew file format.
@ EASYPC
Easy-PC / DesignSpark PCB.
@ GEDA_PCB
Geda PCB file formats.
@ LEGACY
Legacy Pcbnew file formats prior to s-expression.
@ PCB_FILE_UNKNOWN
0 is not a legal menu id on Mac
static void Save(PCB_FILE_T aFileType, const wxString &aFileName, BOARD &aBoard, const std::map< std::string, UTF8 > *aProperties=nullptr)
Write either a full aBoard to a storage file in a format that this implementation knows about,...
static PCB_IO * FindPlugin(PCB_FILE_T aFileType)
Return a PCB_IO which the caller can use to import, export, save, or load design documents.
static PCB_FILE_T FindPluginTypeFromBoardPath(const wxString &aFileName, int aCtl=0)
Return a plugin type given a path for a board file.
static std::unique_ptr< BOARD > Load(PCB_FILE_T aFileType, const wxString &aFileName, const std::map< std::string, UTF8 > *aProperties=nullptr, PROJECT *aProject=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr)
Find the requested PCB_IO and if found, calls the PCB_IO::LoadBoard() function on it using the argume...
static PCB_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a footprint library's libPath.
static bool ImportGeneratesProjectLibrary(PCB_FILE_T aFileType)
Return true when importing aFileType should materialize a project footprint library.
static const wxString ShowType(PCB_FILE_T aFileType)
Return a brief name for a plugin given aFileType enum.
PCB I/O plugin for importing the native PADS Layout binary .pcb format, distinct from the ASCII forma...
A base class that BOARD loading and saving plugins should derive from.
A progress reporter interface for use in multi-threaded environments.
Container for project specific data.
A pure virtual class used to derive REPORTER objects from.
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)
Report a string with a given severity.
#define THROW_IO_ERROR(msg)
macro which captures the "call site" values of FILE_, __FUNCTION & LINE
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
#define KICTL_KICAD_ONLY
chosen file is from KiCad according to user
#define KICTL_NONKICAD_ONLY
chosen file is non-KiCad according to user
Pcbnew PCB_IO for DipTrace binary .dip board files.
PCB_IO for Number One Systems Easy-PC and RS DesignSpark PCB boards and symbol libraries (....
Geda PCB file plugin definition file.
static PCB_IO_MGR::REGISTER_PLUGIN registerODBPPPlugin(PCB_IO_MGR::ODBPP, wxT("ODB++"), []() -> PCB_IO *{ return new PCB_IO_ODBPP;})
static PCB_IO_MGR::REGISTER_PLUGIN registerEasyEDAProV3Plugin(PCB_IO_MGR::EASYEDAPRO_V3, wxT("EasyEDA / JLCEDA Pro v3"), []() -> PCB_IO *{ return new PCB_IO_EASYEDAPRO_V3;})
static PCB_IO_MGR::REGISTER_PLUGIN registerSolidworksPCBPlugin(PCB_IO_MGR::SOLIDWORKS_PCB, wxT("Solidworks PCB"), []() -> PCB_IO *{ return new PCB_IO_SOLIDWORKS;})
static PCB_IO_MGR::REGISTER_PLUGIN registerEasyEDAProPlugin(PCB_IO_MGR::EASYEDAPRO, wxT("EasyEDA / JLCEDA Pro"), []() -> PCB_IO *{ return new PCB_IO_EASYEDAPRO;})
static PCB_IO_MGR::REGISTER_PLUGIN registerPadsBinaryPlugin(PCB_IO_MGR::PADS_BINARY, wxT("PADS Binary"), []() -> PCB_IO *{ return new PCB_IO_PADS_BINARY();})
static PCB_IO_MGR::REGISTER_PLUGIN registerPadsPlugin(PCB_IO_MGR::PADS, wxT("PADS"), []() -> PCB_IO *{ return new PCB_IO_PADS();})
static PCB_IO_MGR::REGISTER_PLUGIN registerEasyEDAPlugin(PCB_IO_MGR::EASYEDA, wxT("EasyEDA / JLCEDA Std"), []() -> PCB_IO *{ return new PCB_IO_EASYEDA;})
static PCB_IO_MGR::REGISTER_PLUGIN registerGPCBPlugin(PCB_IO_MGR::GEDA_PCB, wxT("gEDA / Lepton EDA"), []() -> PCB_IO *{ return new PCB_IO_GEDA;})
static PCB_IO_MGR::REGISTER_PLUGIN registerKicadPlugin(PCB_IO_MGR::KICAD_SEXP, wxT("KiCad"), []() -> PCB_IO *{ return new PCB_IO_KICAD_SEXPR;})
static PCB_IO_MGR::REGISTER_PLUGIN registerIPC2581Plugin(PCB_IO_MGR::IPC2581, wxT("IPC-2581"), []() -> PCB_IO *{ return new PCB_IO_IPC2581;})
static PCB_IO_MGR::REGISTER_PLUGIN registerPcadPlugin(PCB_IO_MGR::PCAD, wxT("P-Cad"), []() -> PCB_IO *{ return new PCB_IO_PCAD;})
static PCB_IO_MGR::REGISTER_PLUGIN registerEaglePlugin(PCB_IO_MGR::EAGLE, wxT("Eagle"), []() -> PCB_IO *{ return new PCB_IO_EAGLE;})
static PCB_IO_MGR::REGISTER_PLUGIN registerEasyPcPlugin(PCB_IO_MGR::EASYPC, wxT("Easy-PC"), []() -> PCB_IO *{ return new PCB_IO_EASYPC;})
static PCB_IO_MGR::REGISTER_PLUGIN registerAltiumCircuitStudioPlugin(PCB_IO_MGR::ALTIUM_CIRCUIT_STUDIO, wxT("Altium Circuit Studio"), []() -> PCB_IO *{ return new PCB_IO_ALTIUM_CIRCUIT_STUDIO;})
static PCB_IO_MGR::REGISTER_PLUGIN registerAltiumDesignerPlugin(PCB_IO_MGR::ALTIUM_DESIGNER, wxT("Altium Designer"), []() -> PCB_IO *{ return new PCB_IO_ALTIUM_DESIGNER;})
static PCB_IO_MGR::REGISTER_PLUGIN registerCadstarArchivePlugin(PCB_IO_MGR::CADSTAR_PCB_ARCHIVE, wxT("CADSTAR PCB Archive"), []() -> PCB_IO *{ return new PCB_IO_CADSTAR_ARCHIVE;})
static PCB_IO_MGR::REGISTER_PLUGIN registerDipTracePlugin(PCB_IO_MGR::DIPTRACE, wxT("DipTrace"), []() -> PCB_IO *{ return new PCB_IO_DIPTRACE;})
static PCB_IO_MGR::REGISTER_PLUGIN registerLegacyPlugin(PCB_IO_MGR::LEGACY, wxT("Legacy"), []() -> PCB_IO *{ return new PCB_IO_KICAD_LEGACY;})
static PCB_IO_MGR::REGISTER_PLUGIN registerFabmasterPlugin(PCB_IO_MGR::FABMASTER, wxT("Fabmaster"), []() -> PCB_IO *{ return new PCB_IO_FABMASTER;})
static PCB_IO_MGR::REGISTER_PLUGIN registerAltiumCircuitMakerPlugin(PCB_IO_MGR::ALTIUM_CIRCUIT_MAKER, wxT("Altium Circuit Maker"), []() -> PCB_IO *{ return new PCB_IO_ALTIUM_CIRCUIT_MAKER;})
static PCB_IO_MGR::REGISTER_PLUGIN registerAutotraxPlugin(PCB_IO_MGR::AUTOTRAX, wxT("Protel Autotrax"), []() -> PCB_IO *{ return new PCB_IO_AUTOTRAX;})
static PCB_IO_MGR::REGISTER_PLUGIN registerSprintLayoutPlugin(PCB_IO_MGR::SPRINT_LAYOUT, wxT("Sprint Layout"), []() -> PCB_IO *{ return new PCB_IO_SPRINT_LAYOUT;})
static PCB_IO_MGR::REGISTER_PLUGIN registerAllegroPlugin(PCB_IO_MGR::ALLEGRO, wxT("Allegro"), []() -> PCB_IO *{ return new PCB_IO_ALLEGRO;})
Pcbnew PLUGIN for P-Cad 200x ASCII *.pcb format.
Definition of file extensions used in Kicad.