23#include <wx/zipstrm.h>
24#include <wx/filename.h>
25#include <wx/tokenzr.h>
26#include <wx/wfstream.h>
28#include <nlohmann/json.hpp>
135 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
142 wxCHECK( svgJob && editFrame,
false );
149 [](
JOB* job, wxWindow* aParent ) ->
bool
153 wxCHECK( renderJob,
false );
159 [](
JOB* job, wxWindow* aParent ) ->
bool
164 [](
JOB* job, wxWindow* aParent ) ->
bool
169 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
176 wxCHECK( svgJob && editFrame,
false );
183 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
190 wxCHECK( gencadJob && editFrame,
false );
196 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
203 wxCHECK( dxfJob && editFrame,
false );
209 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
216 wxCHECK( pdfJob && editFrame,
false );
222 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
229 wxCHECK( pngJob && editFrame,
false );
235 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
242 wxCHECK( psJob && editFrame,
false );
249 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
256 wxCHECK( statsJob && editFrame,
false );
261 statsJob->
m_filename = boardName.GetFullPath();
264 wxWindow* parent = aParent ? aParent :
static_cast<wxWindow*
>( editFrame );
272 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
279 wxCHECK( gJob && editFrame,
false );
286 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
293 wxCHECK( gJob && editFrame,
false );
301 m_reporter->Report(
_(
"Plotting to HPGL is no longer supported as of KiCad 10.0.\n" ),
305 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
310 wxCHECK( editFrame,
false );
313 _(
"Plotting to HPGL is no longer supported as of KiCad 10.0." ) );
318 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
325 wxCHECK( drillJob && editFrame,
false );
331 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
338 wxCHECK( posJob && editFrame,
false );
345 [](
JOB* job, wxWindow* aParent ) ->
bool
351 [](
JOB* job, wxWindow* aParent ) ->
bool
356 [](
JOB* job, wxWindow* aParent ) ->
bool
360 wxCHECK( drcJob,
false );
367 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
374 wxCHECK( ipcJob && editFrame,
false );
381 [](
JOB* job, wxWindow* aParent ) ->
bool
387 [aKiway](
JOB* job, wxWindow* aParent ) ->
bool
394 wxCHECK( odbJob && editFrame,
false );
443 BOARD* brd =
nullptr;
446 auto getProjectForBoard =
447 [&](
const wxString& aBoardPath ) ->
PROJECT*
449 wxFileName pro = aBoardPath;
457 settingsManager.
LoadProject( pro.GetFullPath(),
true );
464 auto loadBoardFromPath =
465 [&](
const wxString& aBoardPath ) ->
BOARD*
479 return loadedBoard.release();
487 if( !
Pgm().IsGUI() &&
Pgm().GetSettingsManager().IsProjectOpen() )
489 wxString pcbPath = aPath;
491 if( pcbPath.IsEmpty() )
496 pcbPath =
path.GetFullPath();
504 else if(
Pgm().IsGUI() &&
Pgm().GetSettingsManager().IsProjectOpen() )
513 brd = loadBoardFromPath( aPath );
525 std::map<wxString, LSET> layerUserMasks;
526 std::map<wxString, LSET> layerMasks;
527 std::map<wxString, LSET> layerGuiMasks;
562 [&](
const LSET& layerSet )
565 layerMask.push_back( layer );
568 if( !aLayerString.IsEmpty() )
570 wxStringTokenizer layerTokens( aLayerString,
"," );
572 while( layerTokens.HasMoreTokens() )
574 std::string token =
TO_UTF8( layerTokens.GetNextToken().Trim(
true ).Trim(
false ) );
576 if( layerUserMasks.contains( token ) )
577 pushLayers( layerUserMasks.at( token ) );
578 else if( layerMasks.count( token ) )
579 pushLayers( layerMasks.at( token ) );
580 else if( layerGuiMasks.count( token ) )
581 pushLayers( layerGuiMasks.at( token ) );
583 m_reporter->Report( wxString::Format(
_(
"Invalid layer name '%s'\n" ), token ) );
595 if( aStepJob ==
nullptr )
609 fn.SetName( fn.GetName() );
677 m_reporter->Report( wxString::Format(
_(
"Successfully exported VRML to %s" ),
710 if( !stepExporter.
Export() )
722 if( aRenderJob ==
nullptr )
757 fn.SetName( wxString::Format(
"%s-%d", fn.GetName(),
static_cast<int>( aRenderJob->
m_side ) ) );
849 lightColor, lightColor, lightColor, lightColor,
850 lightColor, lightColor, lightColor, lightColor,
856 sideElevation, sideElevation, sideElevation, sideElevation,
857 -sideElevation, -sideElevation, -sideElevation, -sideElevation,
861 45, 135, 225, 315, 45, 135, 225, 315,
866 boardAdapter.
m_Cfg = &cfg;
882 if( preset->name.Lower() ==
_(
"legacy colors" ) )
897 static std::map<JOB_PCB_RENDER::SIDE, VIEW3D_TYPE> s_viewCmdMap = {
945 uint8_t* rgbaBuffer = raytrace.
GetBuffer();
947 bool success = !!rgbaBuffer;
951 const unsigned int wxh = realSize.x * realSize.y;
953 unsigned char* rgbBuffer = (
unsigned char*) malloc( wxh * 3 );
954 unsigned char* alphaBuffer = (
unsigned char*) malloc( wxh );
956 unsigned char* rgbaPtr = rgbaBuffer;
957 unsigned char* rgbPtr = rgbBuffer;
958 unsigned char* alphaPtr = alphaBuffer;
960 for(
int y = 0; y < realSize.y; y++ )
962 for(
int x = 0; x < realSize.x; x++ )
964 rgbPtr[0] = rgbaPtr[0];
965 rgbPtr[1] = rgbaPtr[1];
966 rgbPtr[2] = rgbaPtr[2];
967 alphaPtr[0] = rgbaPtr[3];
975 wxImage
image( realSize );
976 image.SetData( rgbBuffer );
977 image.SetAlpha( alphaBuffer );
980 image.SetOption( wxIMAGE_OPTION_QUALITY, 90 );
982 : wxBITMAP_TYPE_JPEG );
1002 if( aSvgJob ==
nullptr )
1019 fn.SetName( fn.GetName() );
1059 std::optional<wxString> layerName;
1060 std::optional<wxString> sheetName;
1061 std::optional<wxString> sheetPath;
1062 std::vector<wxString> outputPaths;
1078 layerName, sheetName, sheetPath, &outputPaths ) )
1083 for(
const wxString& outputPath : outputPaths )
1094 if( aDxfJob ==
nullptr )
1132 fn.SetName( fn.GetName() );
1152 std::optional<wxString> layerName;
1153 std::optional<wxString> sheetName;
1154 std::optional<wxString> sheetPath;
1168 std::vector<wxString> outputPaths;
1172 layerName, sheetName, sheetPath, &outputPaths ) )
1177 for(
const wxString& outputPath : outputPaths )
1186 bool plotAllLayersOneFile =
false;
1189 if( pdfJob ==
nullptr )
1217 plotAllLayersOneFile =
true;
1225 const bool outputIsSingle = plotAllLayersOneFile || pdfJob->
m_pdfSingle;
1230 fn.SetName( fn.GetName() );
1249 std::optional<wxString> layerName;
1250 std::optional<wxString> sheetName;
1251 std::optional<wxString> sheetPath;
1253 if( plotAllLayersOneFile )
1265 std::vector<wxString> outputPaths;
1269 layerName, sheetName, sheetPath, &outputPaths ) )
1274 for(
const wxString& outputPath : outputPaths )
1285 if( pngJob ==
nullptr )
1321 fn.SetName( fn.GetName() );
1340 std::vector<wxString> outputPaths;
1344 std::nullopt, std::nullopt, std::nullopt, &outputPaths ) )
1349 for(
const wxString& outputPath : outputPaths )
1360 if( psJob ==
nullptr )
1400 fn.SetName( fn.GetName() );
1420 std::optional<wxString> layerName;
1421 std::optional<wxString> sheetName;
1422 std::optional<wxString> sheetPath;
1436 std::vector<wxString> outputPaths;
1439 layerName, sheetName, sheetPath, &outputPaths ) )
1444 for(
const wxString& outputPath : outputPaths )
1456 if( aGerberJob ==
nullptr )
1485 bool hasLayerListSpecified =
false;
1492 hasLayerListSpecified =
true;
1535 plotSequence.push_back( layer );
1541 if(
find( plotSequence.begin(), plotSequence.end(), layer_all ) != plotSequence.end() )
1544 plotSequence.push_back( layer_all );
1555 plotOpts = boardPlotOptions;
1565 wxString fullname = fn.GetFullName();
1573 jobfile_writer.
AddGbrFile( layer, fullname );
1587 fn.GetFullPath(), sheetName, sheetPath );
1591 m_reporter->Report( wxString::Format(
_(
"Plotted to '%s'.\n" ), fn.GetFullPath() ),
1600 m_reporter->Report( wxString::Format(
_(
"Failed to plot to '%s'.\n" ), fn.GetFullPath() ),
1626 if( aGencadJob ==
nullptr )
1650 fn.SetName( fn.GetName() );
1666 m_reporter->Report( wxString::Format(
_(
"Failed to create file '%s'.\n" ), outPath ),
1683 if( statsJob ==
nullptr )
1701 wxString projectName;
1708 if( boardFile.GetName().IsEmpty() )
1709 boardFile = wxFileName( statsJob->
m_filename );
1732 FILE* outFile = wxFopen( outPath, wxS(
"wt" ) );
1740 if( fprintf( outFile,
"%s",
TO_UTF8( report ) ) < 0 )
1762 if( aGerberJob ==
nullptr )
1790 fn.SetName( fn.GetName() );
1845 m_reporter->Report( wxString::Format(
_(
"Failed to plot to '%s'.\n" ), outPath ),
1863 if( aDrillJob ==
nullptr )
1879 std::unique_ptr<GENDRILL_WRITER_BASE> drillWriter;
1882 drillWriter = std::make_unique<EXCELLON_WRITER>( brd );
1884 drillWriter = std::make_unique<GERBER_WRITER>( brd );
1908 wxFileName fn = outPath;
1910 fn.SetName( fn.GetName() +
"-drill" );
1949 if( excellonWriter ==
nullptr )
1984 if( gerberWriter ==
nullptr )
2023 if( aPosJob ==
nullptr )
2034 fn.SetName( fn.GetName() );
2057 wxFileName fn( outPath );
2058 wxString baseName = fn.GetName();
2060 auto exportPlaceFile =
2061 [&](
bool frontSide,
bool backSide,
const wxString& curr_outPath ) ->
bool
2063 FILE* file = wxFopen( curr_outPath, wxS(
"wt" ) );
2064 wxCHECK( file,
false );
2082 fputs( data.c_str(), file );
2095 if( exportPlaceFile(
true,
false, fn.GetFullPath() ) )
2097 m_reporter->Report( wxString::Format(
_(
"Wrote front position data to '%s'.\n" ),
2113 if( exportPlaceFile(
false,
true, fn.GetFullPath() ) )
2115 m_reporter->Report( wxString::Format(
_(
"Wrote back position data to '%s'.\n" ),
2142 if( exportPlaceFile( front, back, fn.GetFullPath() ) )
2144 m_reporter->Report( wxString::Format(
_(
"Wrote position data to '%s'.\n" ),
2164 wxString outPath_base = outPath;
2175 m_reporter->Report( wxString::Format(
_(
"Wrote front position data to '%s'.\n" ), outPath ),
2191 outPath = outPath_base;
2199 m_reporter->Report( wxString::Format(
_(
"Wrote back position data to '%s'.\n" ), outPath ),
2219 if( upgradeJob ==
nullptr )
2229 m_reporter->Report(
_(
"Output path must not conflict with existing path\n" ),
2236 m_reporter->Report(
_(
"Output path must be specified to convert legacy and non-KiCad libraries\n" ),
2246 m_reporter->Report(
_(
"Footprint library path does not exist or is not accessible\n" ),
2267 bool shouldSave = upgradeJob->
m_force;
2313 if( svgJob ==
nullptr )
2346 bool singleFpPlotted =
false;
2348 for(
const auto& [fpName, fpCacheEntry] : fpLib.
GetFootprints() )
2362 singleFpPlotted =
true;
2365 exitCode =
doFpExportSvg( svgJob, fpCacheEntry->GetFootprint().get() );
2371 if( !svgJob->
m_footprint.IsEmpty() && !singleFpPlotted )
2373 m_reporter->Report(
_(
"The given footprint could not be found to export." ) + wxS(
"\n" ),
2387 brd->SynchronizeProperties();
2400 pad->SetLocalRatsnestVisible(
false );
2401 pad->SetNetCode( 0 );
2409 wxFileName outputFile;
2414 m_reporter->Report( wxString::Format(
_(
"Plotting footprint '%s' to '%s'\n" ),
2416 outputFile.GetFullPath() ),
2435 if( !plotter.
Plot( outputFile.GetFullPath(),
2440 wxEmptyString, wxEmptyString,
2447 aSvgJob->
AddOutput( outputFile.GetFullPath() );
2457 if( drcJob ==
nullptr )
2473 fn.SetName( fn.GetName() + wxS(
"-drc" ) );
2502 std::unique_ptr<NETLIST>
netlist = std::make_unique<NETLIST>();
2510 bool checkParity = drcJob->
m_parity;
2511 std::string netlist_str;
2515 wxString annotateMsg =
_(
"Schematic parity tests require a fully annotated schematic." );
2516 netlist_str = annotateMsg;
2528 wxFileName schematicPath( drcJob->
m_filename );
2529 schematicPath.MakeAbsolute();
2532 if( !schematicPath.Exists() )
2535 if( !schematicPath.Exists() )
2537 m_reporter->Report(
_(
"Failed to fetch schematic netlist for parity tests.\n" ),
2539 checkParity =
false;
2543 typedef bool ( *NETLIST_FN_PTR )(
const wxString&, std::string& );
2545 NETLIST_FN_PTR netlister =
2547 ( *netlister )( schematicPath.GetFullPath(), netlist_str );
2551 if( netlist_str == annotateMsg )
2554 checkParity =
false;
2563 _(
"Eeschema netlist" ) );
2570 m_reporter->Report(
_(
"Failed to fetch schematic netlist for parity tests.\n" ),
2572 checkParity =
false;
2575 drcEngine->SetSchematicNetlist(
netlist.get() );
2587 drcEngine->SetViolationHandler(
2588 [&](
const std::shared_ptr<DRC_ITEM>& aItem,
const VECTOR2I& aPos,
int aLayer,
2589 const std::function<
void(
PCB_MARKER* )>& aPathGenerator )
2592 aPathGenerator( marker );
2593 commit.
Add( marker );
2599 drcEngine->ClearViolationHandler();
2606 std::shared_ptr<DRC_ITEMS_PROVIDER> markersProvider = std::make_shared<DRC_ITEMS_PROVIDER>(
2609 std::shared_ptr<DRC_ITEMS_PROVIDER> ratsnestProvider =
2612 std::shared_ptr<DRC_ITEMS_PROVIDER> fpWarningsProvider =
2615 markersProvider->SetSeverities( drcJob->
m_severity );
2616 ratsnestProvider->SetSeverities( drcJob->
m_severity );
2617 fpWarningsProvider->SetSeverities( drcJob->
m_severity );
2619 m_reporter->Report( wxString::Format(
_(
"Found %d violations\n" ),
2620 markersProvider->GetCount() ),
2622 m_reporter->Report( wxString::Format(
_(
"Found %d unconnected items\n" ),
2623 ratsnestProvider->GetCount() ),
2628 m_reporter->Report( wxString::Format(
_(
"Found %d schematic parity issues\n" ),
2629 fpWarningsProvider->GetCount() ),
2633 DRC_REPORT reportWriter( brd, units, markersProvider, ratsnestProvider, fpWarningsProvider );
2635 bool wroteReport =
false;
2644 m_reporter->Report( wxString::Format(
_(
"Unable to save DRC report to %s\n" ), outPath ),
2651 m_reporter->Report( wxString::Format(
_(
"Saved DRC Report to %s\n" ), outPath ),
2670 if( markersProvider->GetCount() > 0 || ratsnestProvider->GetCount() > 0
2671 || fpWarningsProvider->GetCount() > 0 )
2685 if( job ==
nullptr )
2723 if( job ==
nullptr )
2734 fn.SetName( fn.GetName() );
2750 bool success = exporter.
Write( outPath );
2770 if( job ==
nullptr )
2791 fn.SetName( fn.GetName() + wxS(
"-odb" ) );
2833 if( job ==
nullptr )
2836 bool shouldSave = job->
m_force;
2858 wxString::Format(
_(
"Error saving board file '%s'.\n%s" ), job->
m_filename, ioe.
What().GetData() );
2872 if( aDrawingSheet && !aDrawingSheet->IsEmpty() )
2905 return drawingSheet;
2912 if( aSheetPath.IsEmpty() )
2916 [&](
const wxString&
path ) ->
bool
2925 { aBrd->GetEmbeddedFiles() } );
2930 m_reporter->Report( wxString::Format(
_(
"Error loading drawing sheet '%s'." ),
2932 + wxS(
"\n" ) + msg + wxS(
"\n" ),
2940 if( loadSheet( aSheetPath ) )
2995 m_reporter->Report( wxString::Format(
_(
"Unable to determine file format for '%s'\n" ),
3004 m_reporter->Report( wxString::Format(
_(
"Input file not found: '%s'\n" ),
3013 if( outputPath.IsEmpty() )
3017 outputPath = fn.GetFullPath();
3020 BOARD* board =
nullptr;
3022 std::vector<wxString> warnings;
3030 m_reporter->Report( wxString::Format(
_(
"No plugin found for file type '%s'\n" ),
3036 m_reporter->Report( wxString::Format(
_(
"Importing '%s' using %s format...\n" ),
3040 board = pi->LoadBoard( job->
m_inputFile,
nullptr,
nullptr,
nullptr );
3050 kicadPlugin->SaveBoard( outputPath, board );
3052 m_reporter->Report( wxString::Format(
_(
"Successfully saved imported board to '%s'\n" ),
3060 wxFileName outputFn( outputPath );
3063 size_t footprintCount = board->
Footprints().size();
3064 size_t trackCount = 0;
3065 size_t viaCount = 0;
3066 size_t zoneCount = board->
Zones().size();
3077 nlohmann::json layerMappings = nlohmann::json::object();
3084 layerMappings[layerName.ToStdString()] = {
3085 {
"kicad_layer",
LSET::Name( layer ).ToStdString() },
3086 {
"method",
"auto" }
3092 nlohmann::json report;
3094 report[
"source_file"] = inputFn.GetFullName().ToStdString();
3095 report[
"source_format"] = formatName.ToStdString();
3096 report[
"output_file"] = outputFn.GetFullName().ToStdString();
3097 report[
"layer_mapping"] = layerMappings;
3098 report[
"statistics"] = {
3099 {
"footprints", footprintCount },
3100 {
"tracks", trackCount },
3101 {
"vias", viaCount },
3102 {
"zones", zoneCount }
3105 nlohmann::json warningsJson = nlohmann::json::array();
3107 for(
const wxString& warning : warnings )
3108 warningsJson.push_back( warning.ToStdString() );
3110 report[
"warnings"] = warningsJson;
3111 report[
"errors"] = nlohmann::json::array();
3113 wxString reportOutput = wxString::FromUTF8( report.dump( 2 ) );
3119 if( file.IsOpened() )
3121 file.Write( reportOutput );
3134 text += wxString::Format( wxS(
"Import Report\n" ) );
3135 text += wxString::Format( wxS(
"=============\n\n" ) );
3136 text += wxString::Format( wxS(
"Source file: %s\n" ), inputFn.GetFullName() );
3137 text += wxString::Format( wxS(
"Source format: %s\n" ), formatName );
3138 text += wxString::Format( wxS(
"Output file: %s\n\n" ), outputFn.GetFullName() );
3139 text += wxS(
"Statistics:\n" );
3140 text += wxString::Format( wxS(
" Footprints: %zu\n" ), footprintCount );
3141 text += wxString::Format( wxS(
" Tracks: %zu\n" ), trackCount );
3142 text += wxString::Format( wxS(
" Vias: %zu\n" ), viaCount );
3143 text += wxString::Format( wxS(
" Zones: %zu\n" ), zoneCount );
3145 if( !warnings.empty() )
3147 text += wxS(
"\nWarnings:\n" );
3149 for(
const wxString& warning : warnings )
3150 text += wxString::Format( wxS(
" - %s\n" ), warning );
3157 if( file.IsOpened() )
3174 m_reporter->Report( wxString::Format(
_(
"Error during import: %s\n" ), ioe.
What() ),
constexpr EDA_IU_SCALE pcbIUScale
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
#define RANGE_SCALE_3D
This defines the range that all coord will have to be rendered.
wxString FormatBoardStatisticsJson(const BOARD_STATISTICS_DATA &aData, BOARD *aBoard, const UNITS_PROVIDER &aUnitsProvider, const wxString &aProjectName, const wxString &aBoardName)
void ComputeBoardStatistics(BOARD *aBoard, const BOARD_STATISTICS_OPTIONS &aOptions, BOARD_STATISTICS_DATA &aData)
wxString FormatBoardStatisticsReport(const BOARD_STATISTICS_DATA &aData, BOARD *aBoard, const UNITS_PROVIDER &aUnitsProvider, const wxString &aProjectName, const wxString &aBoardName)
void InitializeBoardStatisticsData(BOARD_STATISTICS_DATA &aData)
static wxString m_DrawingSheetFileName
the name of the drawing sheet file, or empty to use the default drawing sheet
Helper class to handle information needed to display 3D board.
double BiuTo3dUnits() const noexcept
Board integer units To 3D units.
void SetVisibleLayers(const std::bitset< LAYER_3D_END > &aLayers)
std::bitset< LAYER_3D_END > GetVisibleLayers() const
void SetBoard(BOARD *aBoard) noexcept
Set current board to be rendered.
void SetLayerColors(const std::map< int, COLOR4D > &aColors)
EDA_3D_VIEWER_SETTINGS * m_Cfg
std::map< int, COLOR4D > m_ColorOverrides
allows to override color scheme colors
void Set3dCacheManager(S3D_CACHE *aCacheMgr) noexcept
Update the cache manager pointer.
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
const VECTOR2I & GetAuxOrigin() const
static std::unique_ptr< BOARD > CreateEmptyBoard(PROJECT *aProject)
static std::unique_ptr< BOARD > Load(const wxString &aFileName, PCB_IO_MGR::PCB_FILE_T aFormat, PROJECT *aProject, const OPTIONS &aOptions)
static bool SaveBoard(wxString &aFileName, BOARD *aBoard, PCB_IO_MGR::PCB_FILE_T aFormat)
Information pertinent to a Pcbnew printed circuit board.
void SetCurrentVariant(const wxString &aVariant)
const PAGE_INFO & GetPageSettings() const
const ZONES & Zones() const
void RecordDRCExclusions()
Scan existing markers and record data from any that are Excluded.
TITLE_BLOCK & GetTitleBlock()
const std::map< wxString, wxString > & GetProperties() const
const FOOTPRINTS & Footprints() const
const TRACKS & Tracks() const
const wxString & GetFileName() const
std::vector< PCB_MARKER * > ResolveDRCExclusions(bool aCreateMarkers)
Rebuild DRC markers from the serialized data in BOARD_DESIGN_SETTINGS.
wxString GetVariantDescription(const wxString &aVariantName) const
int GetFileFormatVersionAtLoad() const
const PCB_PLOT_PARAMS & GetPlotOptions() const
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
wxString GetCurrentVariant() const
PROJECT * GetProject() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
void SynchronizeProperties()
Copy the current project's text variables into the boards property cache.
BOX2I ComputeBoundingBox(bool aBoardEdgesOnly=false, bool aPhysicalLayersOnly=false) const
Calculate the bounding box containing all board items (or board edge segments).
void DeleteMARKERs()
Delete all MARKERS from the board.
constexpr const Vec GetCenter() const
void SetProjection(PROJECTION_TYPE aProjection)
void RotateY_T1(float aAngleInRadians)
bool Zoom_T1(float aFactor)
bool SetCurWindowSize(const wxSize &aSize)
Update the windows size of the camera.
bool ViewCommand_T1(VIEW3D_TYPE aRequestedView)
void RotateX_T1(float aAngleInRadians)
void SetLookAtPos_T1(const SFVEC3F &aLookAtPos)
const SFVEC3F & GetLookAtPos_T1() const
void RotateZ_T1(float aAngleInRadians)
Reporter forwarding messages to stdout or stderr as appropriate.
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
static bool GenerateFile(JOB_EXPORT_PCB_IPC2581 &aJob, BOARD *aBoard, PROGRESS_REPORTER *aProgressReporter, REPORTER *aReporter)
static void GenerateODBPPFiles(const JOB_EXPORT_PCB_ODB &aJob, BOARD *aBoard, PCB_EDIT_FRAME *aParentFrame=nullptr, PROGRESS_REPORTER *aProgressReporter=nullptr, REPORTER *aErrorReporter=nullptr)
A dialog to set the plot options and create plot files in various formats.
bool WriteJsonReport(const wxString &aFullFileName)
bool WriteTextReport(const wxString &aFullFileName)
Helper to handle drill precision format in excellon files.
static DS_DATA_MODEL & GetTheInstance()
Return the instance of DS_DATA_MODEL used in the application.
void SetSheetPath(const std::string &aSheetPath)
Set the sheet path displayed in the title block.
void SetVariantName(const std::string &aVariant)
Set the current variant name and description to be shown on the drawing sheet.
void SetVariantDesc(const std::string &aVariantDesc)
void SetSheetName(const std::string &aSheetName)
Set the sheet name displayed in the title block.
void SetIsFirstPage(bool aIsFirstPage)
Change if this is first page.
void SetFileName(const std::string &aFileName)
Set the file name displayed in the title block.
LAYER_PRESET_3D * FindPreset(const wxString &aName)
std::vector< LAYER_PRESET_3D > m_LayerPresets
void SetFlags(EDA_ITEM_FLAGS aMask)
virtual void SetParent(EDA_ITEM *aParent)
Create Excellon drill, drill map, and drill report files.
void SetFormat(bool aMetric, ZEROS_FMT aZerosFmt=DECIMAL_FORMAT, int aLeftDigits=0, int aRightDigits=0)
Initialize internal parameters to match the given format.
bool CreateDrillandMapFilesSet(const wxString &aPlotDirectory, bool aGenDrill, bool aGenMap, REPORTER *aReporter=nullptr)
Create the full set of Excellon drill file for the board.
void SetOptions(bool aMirror, bool aMinimalHeader, const VECTOR2I &aOffset, bool aMerge_PTH_NPTH)
Initialize internal parameters to match drill options.
void SetRouteModeForOvalHoles(bool aUseRouteModeForOvalHoles)
bool m_IncludeUnspecified
Wrapper to expose an API for writing VRML files, without exposing all the many structures used in the...
bool ExportVRML_File(PROJECT *aProject, wxString *aMessages, const wxString &aFullFileName, double aMMtoWRMLunit, bool aIncludeUnspecified, bool aIncludeDNP, bool aExport3DFiles, bool aUseRelativePaths, const wxString &a3D_Subdir, double aXRef, double aYRef)
Exports the board and its footprint shapes 3D (vrml files only) as a vrml file.
Provide an extensible class to resolve 3D model paths.
void SetPath(const wxString &aPath)
void Save(FOOTPRINT *aFootprintFilter=nullptr)
Save the footprint cache or a single footprint from it to disk.
boost::ptr_map< wxString, FP_CACHE_ENTRY > & GetFootprints()
Export board to GenCAD file format.
void UseIndividualShapes(bool aUnique)
Make pad shapes unique.
void UsePinNamesUnique(bool aUnique)
Make pin names unique.
void StoreOriginCoordsInFile(bool aStore)
Store origin coordinate in GenCAD file.
void FlipBottomPads(bool aFlip)
Flip pad shapes on the bottom side.
void SetPlotOffet(VECTOR2I aOffset)
Set the coordinates offset when exporting items.
bool WriteFile(const wxString &aFullFileName)
Export a GenCAD file.
void SetMapFileFormat(PLOT_FORMAT aMapFmt)
Initialize the format for the drill map file.
bool GenDrillReportFile(const wxString &aFullFileName, REPORTER *aReporter=nullptr)
Create a plain text report file giving a list of drill values and drill count for through holes,...
GERBER_JOBFILE_WRITER is a class used to create Gerber job file a Gerber job file stores info to make...
bool CreateJobFile(const wxString &aFullFilename)
Creates a Gerber job file.
void AddGbrFile(PCB_LAYER_ID aLayer, wxString &aFilename)
add a gerber file name and type in job file list
virtual bool EndPlot() override
Used to create Gerber drill files.
bool CreateDrillandMapFilesSet(const wxString &aPlotDirectory, bool aGenDrill, bool aGenMap, bool aGenTenting, REPORTER *aReporter=nullptr)
Create the full set of Excellon drill file for the board filenames are computed from the board name,...
void SetOptions(const VECTOR2I &aOffset)
Initialize internal parameters to match drill options.
void SetFormat(int aRightDigits=6)
Initialize internal parameters to match the given format.
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()
Wrapper to expose an API for writing IPC-D356 files.
bool Write(const wxString &aFilename)
Generates and writes the netlist to a given path.
void Register(const std::string &aJobTypeName, std::function< int(JOB *job)> aHandler, std::function< bool(JOB *job, wxWindow *aParent)> aConfigHandler)
JOB_DISPATCHER(KIWAY *aKiway)
PROGRESS_REPORTER * m_progressReporter
JOB_EXPORT_PCB_3D::FORMAT m_format
EXPORTER_STEP_PARAMS m_3dparams
Despite the name; also used for other formats.
ZEROS_FORMAT m_zeroFormat
bool m_excellonOvalDrillRoute
DRILL_ORIGIN m_drillOrigin
bool m_excellonCombinePTHNPTH
bool m_excellonMinimalHeader
wxString GetSettingsDialogTitle() const override
bool m_useIndividualShapes
bool m_useBoardPlotParams
ODB_COMPRESSION m_compressionMode
@ ALL_LAYERS_ONE_FILE
DEPRECATED MODE.
bool m_pdfSingle
This is a hack to deal with cli having the wrong behavior We will deprecate out the wrong behavior,...
GEN_MODE m_pdfGenMode
The background color specified in a hex string.
LSEQ m_plotOnAllLayersSequence
Used by SVG & PDF.
bool m_checkZonesBeforePlot
std::optional< wxString > m_argLayers
std::optional< wxString > m_argCommonLayers
LSEQ m_plotLayerSequence
Layers to include on all individual layer prints.
wxString m_variant
Variant name for variant-aware filtering.
bool m_useDrillPlaceFileOrigin
bool m_excludeFootprintsWithTh
bool m_subtractHolesFromBoardArea
void SetDefaultOutputPath(const wxString &aReferenceName)
bool m_excludeFootprintsWithoutPads
bool m_subtractHolesFromCopperAreas
wxString m_outputLibraryPath
bool m_reportAllTrackErrors
Job to import a non-KiCad PCB file to KiCad format.
REPORT_FORMAT m_reportFormat
VECTOR3D m_lightBottomIntensity
VECTOR3D m_lightTopIntensity
VECTOR3D m_lightCameraIntensity
bool m_proceduralTextures
bool m_useBoardStackupColors
VECTOR3D m_lightSideIntensity
std::string m_appearancePreset
bool m_exitCodeViolations
An simple container class that lets us dispatch output jobs to kifaces.
wxString ResolveOutputPath(const wxString &aPath, bool aPathIsDirectory, PROJECT *aProject) const
void AddOutput(wxString aOutputPath)
wxString GetFullOutputPath(PROJECT *aProject) const
Returns the full output path for the job, taking into account the configured output path,...
wxString GetWorkingOutputPath() const
Returns the working output path for the job, if one has been set.
wxString GetConfiguredOutputPath() const
Returns the configured output path for the job.
void SetTitleBlock(const TITLE_BLOCK &aTitleBlock)
void SetWorkingOutputPath(const wxString &aPath)
Sets a transient output path for the job, it takes priority over the configured output path when GetF...
const std::map< wxString, wxString > & GetVarOverrides() const
Read the new s-expression based KiCad netlist format.
virtual void LoadNetlist() override
Load the contents of the netlist file into aNetlist.
A color representation with 4 components: red, green, blue, alpha.
A minimalistic software bus for communications between various DLLs/DSOs (DSOs) within the same KiCad...
virtual KIWAY_PLAYER * Player(FRAME_T aFrameType, bool doCreate=true, wxTopLevelWindow *aParent=nullptr)
Return the KIWAY_PLAYER* given a FRAME_T.
void AsyncLoad()
Loads all available libraries for this adapter type in the background.
const UTF8 & GetLibItemName() const
LSEQ is a sequence (and therefore also a set) of PCB_LAYER_IDs.
LSET is a set of PCB_LAYER_IDs.
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
LSEQ UIOrder() const
Return the copper, technical and user layers in the order shown in layer widget.
LSEQ SeqStackupForPlotting() const
Return the sequence that is typical for a bottom-to-top stack-up.
static LSET AllNonCuMask()
Return a mask holding all layer minus CU layers.
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static const LSET & AllLayersMask()
static const LSET & InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
static bool EnsurePathExists(const wxString &aPath, bool aPathToFile=false)
Attempts to create a given path if it does not exist.
int JobExportStep(JOB *aJob)
int JobExportPs(JOB *aJob)
int JobExportPos(JOB *aJob)
int JobExportFpSvg(JOB *aJob)
int JobExportOdb(JOB *aJob)
int JobExportDrc(JOB *aJob)
int JobUpgrade(JOB *aJob)
int JobExportFpUpgrade(JOB *aJob)
int JobExportGerber(JOB *aJob)
DS_PROXY_VIEW_ITEM * getDrawingSheetProxyView(BOARD *aBrd)
wxString resolveJobOutputPath(JOB *aJob, BOARD *aBoard, const wxString *aDrawingSheet=nullptr)
int JobExportPng(JOB *aJob)
int JobExportDxf(JOB *aJob)
int JobExportPdf(JOB *aJob)
int JobExportDrill(JOB *aJob)
int JobExportSvg(JOB *aJob)
void loadOverrideDrawingSheet(BOARD *brd, const wxString &aSheetPath)
PCBNEW_JOBS_HANDLER(KIWAY *aKiway)
TOOL_MANAGER * getToolManager(BOARD *aBrd)
int JobExportGerbers(JOB *aJob)
int JobExportGencad(JOB *aJob)
BOARD * getBoard(const wxString &aPath=wxEmptyString)
int JobExportIpc2581(JOB *aJob)
virtual ~PCBNEW_JOBS_HANDLER()
std::unique_ptr< TOOL_MANAGER > m_toolManager
LSEQ convertLayerArg(wxString &aLayerString, BOARD *aBoard) const
void ClearCachedBoard()
Clear the cached CLI board so the next job reloads from the current project.
int JobExportRender(JOB *aJob)
int JobExportIpcD356(JOB *aJob)
int doFpExportSvg(JOB_FP_EXPORT_SVG *aSvgJob, const FOOTPRINT *aFootprint)
int JobExportStats(JOB *aJob)
The main frame for Pcbnew.
A #PLUGIN derivation for saving and loading Pcbnew s-expression formatted files.
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.
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.
@ PCB_FILE_UNKNOWN
0 is not a legal menu id on Mac
static PCB_IO * FindPlugin(PCB_FILE_T aFileType)
Return a #PLUGIN 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 PCB_FILE_T GuessPluginTypeFromLibPath(const wxString &aLibPath, int aCtl=0)
Return a plugin type given a footprint library's libPath.
static const wxString ShowType(PCB_FILE_T aFileType)
Return a brief name for a plugin given aFileType enum.
static void PlotJobToPlotOpts(PCB_PLOT_PARAMS &aOpts, JOB_EXPORT_PCB_PLOT *aJob, REPORTER &aReporter)
Translate a JOB to PCB_PLOT_PARAMS.
bool Plot(const wxString &aOutputPath, const LSEQ &aLayersToPlot, const LSEQ &aCommonLayers, bool aUseGerberFileExtensions, bool aOutputPathIsSingle=false, std::optional< wxString > aLayerName=std::nullopt, std::optional< wxString > aSheetName=std::nullopt, std::optional< wxString > aSheetPath=std::nullopt, std::vector< wxString > *aOutputFiles=nullptr)
static void BuildPlotFileName(wxFileName *aFilename, const wxString &aOutputDir, const wxString &aSuffix, const wxString &aExtension)
Complete a plot filename.
Parameters and options when plotting/printing a board.
LSEQ GetPlotOnAllLayersSequence() const
void SetSkipPlotNPTH_Pads(bool aSkip)
void SetLayerSelection(const LSET &aSelection)
void SetPlotOnAllLayersSequence(LSEQ aSeq)
void SetPlotFrameRef(bool aFlag)
void SetPlotPadNumbers(bool aFlag)
LSET GetLayerSelection() const
void SetMirror(bool aFlag)
bool GetSketchPadsOnFabLayers() const
void SetSvgFitPageToBoard(int aSvgFitPageToBoard)
bool GetUseGerberProtelExtensions() const
virtual SETTINGS_MANAGER & GetSettingsManager() const
Used to create Gerber drill files.
const wxString GetPlaceFileName(const wxString &aFullBaseFilename, PCB_LAYER_ID aLayer) const
void SetVariant(const wxString &aVariant)
Set the variant name for variant-aware filtering.
int CreatePlaceFile(const wxString &aFullFilename, PCB_LAYER_ID aLayer, bool aIncludeBrdEdges, bool aExcludeDNP, bool aExcludeBOM)
Create an pnp gerber file.
The ASCII format of the kicad place file is:
static wxString DecorateFilename(const wxString &aBaseName, bool aFront, bool aBack)
std::string GenPositionData()
build a string filled with the position data
void SetVariant(const wxString &aVariant)
Set the variant name for variant-aware export.
Base plotter engine class.
wxString m_BoardDrawingSheetFile
PcbNew params.
static S3D_CACHE * Get3DCacheManager(PROJECT *aProject, bool updateProjDir=false)
Return a pointer to an instance of the 3D cache manager.
static FOOTPRINT_LIBRARY_ADAPTER * FootprintLibAdapter(PROJECT *aProject)
Container for project specific data.
virtual const wxString GetProjectFullName() const
Return the full path and name of the project.
virtual const wxString GetProjectPath() const
Return the full path of the project.
virtual const wxString GetProjectName() const
Return the short name of the project.
virtual PROJECT_FILE & GetProjectFile() const
bool Redraw(bool aIsMoving, REPORTER *aStatusReporter, REPORTER *aWarningReporter) override
Redraw the view.
wxSize GetRealBufferSize()
void SetCurWindowSize(const wxSize &aSize) override
Before each render, the canvas will tell the render what is the size of its windows,...
bool LoadProject(const wxString &aFullPath, bool aSetActive=true)
Load a project or sets up a new project with a specified path.
PROJECT * GetProject(const wxString &aFullPath) const
Retrieve a loaded project by name.
PROJECT & Prj() const
A helper while we are not MDI-capable – return the one and only project.
Is a LINE_READER that reads from a multiline 8 bit wide std::string.
void Pan_T1(const SFVEC3F &aDeltaOffsetInc) override
void SetT0_and_T1_current_T() override
This will set T0 and T1 with the current values.
void Interpolate(float t) override
It will update the matrix to interpolate between T0 and T1 values.
wxString GetDefaultPlotExtension(PLOT_FORMAT aFormat)
Return the default plot extension for a format.
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
This file is part of the common library.
static DRILL_PRECISION precisionListForInches(2, 4)
static DRILL_PRECISION precisionListForMetric(3, 3)
#define FOLLOW_PLOT_SETTINGS
static constexpr EDA_ANGLE ANGLE_0
#define IS_NEW
New item, just created.
static FILENAME_RESOLVER * resolver
Classes used in drill files, map files and report files generation.
Classes used in drill files, map files and report files generation.
Classes used to generate a Gerber job file in JSON.
Classes used in place file generation.
static const std::string LegacySchematicFileExtension
static const std::string BrepFileExtension
static const std::string JpegFileExtension
static const std::string GerberJobFileExtension
static const std::string GerberFileExtension
static const std::string XaoFileExtension
static const std::string ReportFileExtension
static const std::string GltfBinaryFileExtension
static const std::string ProjectFileExtension
static const std::string PngFileExtension
static const std::string FootprintPlaceFileExtension
static const std::string JsonFileExtension
static const std::string KiCadSchematicFileExtension
static const std::string CsvFileExtension
static const std::string U3DFileExtension
static const std::string PdfFileExtension
static const std::string Ipc2581FileExtension
static const std::string GencadFileExtension
static const std::string StlFileExtension
static const std::string IpcD356FileExtension
static const std::string PlyFileExtension
static const std::string StepFileExtension
static const std::string SVGFileExtension
static const std::string VrmlFileExtension
static const std::string ArchiveFileExtension
static const std::string KiCadPcbFileExtension
std::unique_ptr< T > IO_RELEASER
Helper to hold and release an IO_BASE object when exceptions are thrown.
@ KIFACE_NETLIST_SCHEMATIC
#define KICTL_KICAD_ONLY
chosen file is from KiCad according to user
wxString LayerName(int aLayer)
Returns the default display name for a given layer.
@ LAYER_3D_BACKGROUND_TOP
@ LAYER_3D_BACKGROUND_BOTTOM
PCB_LAYER_ID
A quick note on layer IDs:
This file contains miscellaneous commonly used macros and functions.
static const int ERR_ARGS
static const int ERR_RC_VIOLATIONS
Rules check violation count was greater than 0.
static const int ERR_INVALID_INPUT_FILE
static const int ERR_INVALID_OUTPUT_CONFLICT
static const int ERR_UNKNOWN
#define SEXPR_BOARD_FILE_VERSION
Current s-expression file format version. 2 was the last legacy format version.
#define CTL_FOR_LIBRARY
Format output for a footprint library instead of clipboard or BOARD.
static DRILL_PRECISION precisionListForInches(2, 4)
static DRILL_PRECISION precisionListForMetric(3, 3)
const wxString GetGerberProtelExtension(int aLayer)
PLOTTER * StartPlotBoard(BOARD *aBoard, const PCB_PLOT_PARAMS *aPlotOpts, int aLayer, const wxString &aLayerName, const wxString &aFullFileName, const wxString &aSheetName, const wxString &aSheetPath, const wxString &aPageName=wxT("1"), const wxString &aPageNumber=wxEmptyString, const int aPageCount=1)
Open a new plotfile using the options (and especially the format) specified in the options and prepar...
void PlotBoardLayers(BOARD *aBoard, PLOTTER *aPlotter, const LSEQ &aLayerSequence, const PCB_PLOT_PARAMS &aPlotOptions)
Plot a sequence of board layer IDs.
PGM_BASE & Pgm()
The global program "get" accessor.
PLOT_FORMAT
The set of supported output plot formats.
Plotting engines similar to ps (PostScript, Gerber, svg)
T * GetAppSettings(const char *aFilename)
MODEL3D_FORMAT_TYPE fileType(const char *aFileName)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
bool subtractHolesFromCopperAreas
bool subtractHolesFromBoardArea
bool excludeFootprintsWithoutPads
std::vector< int > raytrace_lightElevation
bool show_footprints_normal
KIGFX::COLOR4D raytrace_lightColorCamera
bool raytrace_post_processing
std::vector< KIGFX::COLOR4D > raytrace_lightColor
KIGFX::COLOR4D raytrace_lightColorBottom
bool raytrace_reflections
bool show_footprints_virtual
bool differentiate_plated_copper
std::vector< int > raytrace_lightAzimuth
bool raytrace_refractions
bool show_footprints_not_in_posfile
bool raytrace_procedural_textures
bool show_footprints_insert
int raytrace_recursivelevel_refractions
KIGFX::COLOR4D raytrace_lightColorTop
bool raytrace_anti_aliasing
Implement a participant in the KIWAY alchemy.
Declaration for a track ball camera.
double DEG2RAD(double deg)
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
VECTOR2< int32_t > VECTOR2I
Definition of file extensions used in Kicad.