mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-05 00:15:30 +00:00
Move the fp svg cli to more similar plot code
This commit is contained in:
parent
fdcfa8f354
commit
4f4ece61bb
common/jobs
kicad/cli
pcbnew
@ -22,13 +22,13 @@
|
||||
|
||||
|
||||
JOB_FP_EXPORT_SVG::JOB_FP_EXPORT_SVG() :
|
||||
JOB( "fpsvg", true ),
|
||||
JOB_EXPORT_PCB_PLOT( JOB_EXPORT_PCB_PLOT::PLOT_FORMAT::SVG, "fpsvg", true ),
|
||||
m_libraryPath(),
|
||||
m_footprint(),
|
||||
m_blackAndWhite( false ),
|
||||
m_sketchPadsOnFabLayers( false ),
|
||||
m_hideDNPFPsOnFabLayers( false ),
|
||||
m_sketchDNPFPsOnFabLayers( true ),
|
||||
m_crossoutDNPFPsOnFabLayers( true )
|
||||
m_footprint()
|
||||
{
|
||||
m_blackAndWhite = false;
|
||||
m_sketchPadsOnFabLayers = false;
|
||||
m_hideDNPFPsOnFabLayers = false;
|
||||
m_sketchDNPFPsOnFabLayers = true;
|
||||
m_crossoutDNPFPsOnFabLayers = true;
|
||||
}
|
@ -25,27 +25,16 @@
|
||||
#include <layer_ids.h>
|
||||
#include <lseq.h>
|
||||
#include <wx/string.h>
|
||||
#include <jobs/job_export_pcb_plot.h>
|
||||
#include "job.h"
|
||||
|
||||
class KICOMMON_API JOB_FP_EXPORT_SVG : public JOB
|
||||
class KICOMMON_API JOB_FP_EXPORT_SVG : public JOB_EXPORT_PCB_PLOT
|
||||
{
|
||||
public:
|
||||
JOB_FP_EXPORT_SVG();
|
||||
|
||||
wxString m_libraryPath;
|
||||
wxString m_footprint;
|
||||
|
||||
wxString m_outputDirectory;
|
||||
|
||||
wxString m_colorTheme;
|
||||
|
||||
bool m_blackAndWhite;
|
||||
bool m_sketchPadsOnFabLayers;
|
||||
bool m_hideDNPFPsOnFabLayers;
|
||||
bool m_sketchDNPFPsOnFabLayers;
|
||||
bool m_crossoutDNPFPsOnFabLayers;
|
||||
|
||||
LSEQ m_printMaskLayer;
|
||||
};
|
||||
|
||||
#endif
|
@ -81,7 +81,7 @@ int CLI::FP_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway )
|
||||
std::unique_ptr<JOB_FP_EXPORT_SVG> svgJob = std::make_unique<JOB_FP_EXPORT_SVG>();
|
||||
|
||||
svgJob->m_libraryPath = m_argInput;
|
||||
svgJob->m_outputDirectory = m_argOutput;
|
||||
svgJob->SetConfiguredOutputPath( m_argOutput );
|
||||
svgJob->m_blackAndWhite = m_argParser.get<bool>( ARG_BLACKANDWHITE );
|
||||
svgJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
|
||||
svgJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
|
||||
@ -99,9 +99,9 @@ int CLI::FP_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway )
|
||||
svgJob->m_colorTheme = From_UTF8( m_argParser.get<std::string>( ARG_THEME ).c_str() );
|
||||
|
||||
if( !m_selectedLayers.empty() )
|
||||
svgJob->m_printMaskLayer = m_selectedLayers;
|
||||
svgJob->m_plotLayerSequence = m_selectedLayers;
|
||||
else
|
||||
svgJob->m_printMaskLayer = LSET::AllLayersMask().SeqStackupForPlotting();
|
||||
svgJob->m_plotLayerSequence = LSET::AllLayersMask().SeqStackupForPlotting();
|
||||
|
||||
int exitCode = aKiway.ProcessJob( KIWAY::FACE_PCB, svgJob.get() );
|
||||
|
||||
|
@ -232,7 +232,6 @@ set( PCBNEW_EXPORTERS
|
||||
exporters/export_gencad.cpp
|
||||
exporters/export_gencad_writer.cpp
|
||||
exporters/export_idf.cpp
|
||||
exporters/export_svg.cpp
|
||||
exporters/step/exporter_step.cpp
|
||||
exporters/step/step_pcb_model.cpp
|
||||
exporters/step/KI_XCAFDoc_AssemblyGraph.cxx
|
||||
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright The 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "board.h"
|
||||
#include "locale_io.h"
|
||||
#include "export_svg.h"
|
||||
#include "pcbplot.h"
|
||||
#include "pgm_base.h"
|
||||
#include "plotters/plotters_pslike.h"
|
||||
|
||||
|
||||
bool EXPORT_SVG::Plot( BOARD* aBoard, const PCB_PLOT_SVG_OPTIONS& aSvgPlotOptions )
|
||||
{
|
||||
PCB_PLOT_PARAMS plot_opts;
|
||||
wxString outputFile = aSvgPlotOptions.m_outputFile;
|
||||
|
||||
plot_opts.SetPlotFrameRef( aSvgPlotOptions.m_plotFrame );
|
||||
|
||||
if( aSvgPlotOptions.m_sketchPadsOnFabLayers )
|
||||
{
|
||||
plot_opts.SetSketchPadsOnFabLayers( true );
|
||||
plot_opts.SetPlotPadNumbers( true );
|
||||
}
|
||||
|
||||
plot_opts.SetHideDNPFPsOnFabLayers( aSvgPlotOptions.m_hideDNPFPsOnFabLayers );
|
||||
plot_opts.SetSketchDNPFPsOnFabLayers( aSvgPlotOptions.m_sketchDNPFPsOnFabLayers );
|
||||
plot_opts.SetCrossoutDNPFPsOnFabLayers( aSvgPlotOptions.m_crossoutDNPFPsOnFabLayers );
|
||||
|
||||
// Adding drill marks, for copper layers
|
||||
if( ( LSET( { aSvgPlotOptions.m_printMaskLayer } ) & LSET::AllCuMask() ).any() )
|
||||
{
|
||||
switch( aSvgPlotOptions.m_drillShapeOption )
|
||||
{
|
||||
default:
|
||||
case 0: plot_opts.SetDrillMarksType( DRILL_MARKS::NO_DRILL_SHAPE ); break;
|
||||
case 1: plot_opts.SetDrillMarksType( DRILL_MARKS::SMALL_DRILL_SHAPE ); break;
|
||||
case 2: plot_opts.SetDrillMarksType( DRILL_MARKS::FULL_DRILL_SHAPE ); break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
plot_opts.SetDrillMarksType( DRILL_MARKS::NO_DRILL_SHAPE );
|
||||
}
|
||||
|
||||
plot_opts.SetSkipPlotNPTH_Pads( false );
|
||||
|
||||
plot_opts.SetMirror( aSvgPlotOptions.m_mirror );
|
||||
plot_opts.SetNegative( aSvgPlotOptions.m_negative );
|
||||
plot_opts.SetFormat( PLOT_FORMAT::SVG );
|
||||
plot_opts.SetSvgPrecision( aSvgPlotOptions.m_precision );
|
||||
|
||||
PAGE_INFO savedPageInfo = aBoard->GetPageSettings();
|
||||
VECTOR2I savedAuxOrigin = aBoard->GetDesignSettings().GetAuxOrigin();
|
||||
|
||||
if( aSvgPlotOptions.m_pageSizeMode == 2 ) // Page is board boundary size
|
||||
{
|
||||
BOX2I bbox = aBoard->ComputeBoundingBox( false );
|
||||
PAGE_INFO currpageInfo = aBoard->GetPageSettings();
|
||||
|
||||
currpageInfo.SetWidthMils( bbox.GetWidth() / pcbIUScale.IU_PER_MILS );
|
||||
currpageInfo.SetHeightMils( bbox.GetHeight() / pcbIUScale.IU_PER_MILS );
|
||||
aBoard->SetPageSettings( currpageInfo );
|
||||
plot_opts.SetUseAuxOrigin( true );
|
||||
VECTOR2I origin = bbox.GetOrigin();
|
||||
aBoard->GetDesignSettings().SetAuxOrigin( origin );
|
||||
}
|
||||
|
||||
if( outputFile.IsEmpty() )
|
||||
{
|
||||
wxFileName fn = aBoard->GetFileName();
|
||||
fn.SetName( fn.GetName() );
|
||||
fn.SetExt( wxS( "svg" ) );
|
||||
|
||||
outputFile = fn.GetFullName();
|
||||
}
|
||||
|
||||
SETTINGS_MANAGER& mgr = Pgm().GetSettingsManager();
|
||||
|
||||
plot_opts.SetColorSettings( mgr.GetColorSettings( aSvgPlotOptions.m_colorTheme ) );
|
||||
|
||||
LOCALE_IO toggle;
|
||||
PCB_LAYER_ID layer = UNDEFINED_LAYER;
|
||||
wxString layerName;
|
||||
//@todo allow controlling the sheet name and path that will be displayed in the title block
|
||||
// Leave blank for now
|
||||
wxString sheetName;
|
||||
wxString sheetPath;
|
||||
|
||||
if( aSvgPlotOptions.m_printMaskLayer.size() == 1 )
|
||||
{
|
||||
layer = aSvgPlotOptions.m_printMaskLayer.front();
|
||||
layerName = aBoard->GetLayerName( layer );
|
||||
}
|
||||
|
||||
SVG_PLOTTER* plotter = (SVG_PLOTTER*) StartPlotBoard( aBoard, &plot_opts, layer, layerName,
|
||||
outputFile, sheetName, sheetPath );
|
||||
|
||||
if( plotter )
|
||||
{
|
||||
plotter->SetColorMode( !aSvgPlotOptions.m_blackAndWhite );
|
||||
PlotBoardLayers( aBoard, plotter, aSvgPlotOptions.m_printMaskLayer, plot_opts );
|
||||
plotter->EndPlot();
|
||||
|
||||
delete plotter;
|
||||
|
||||
// reset to the values saved earlier
|
||||
aBoard->GetDesignSettings().SetAuxOrigin( savedAuxOrigin );
|
||||
aBoard->SetPageSettings( savedPageInfo );
|
||||
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright The 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef PCB_PLOT_SVG_H
|
||||
#define PCB_PLOT_SVG_H
|
||||
|
||||
struct PCB_PLOT_SVG_OPTIONS
|
||||
{
|
||||
wxString m_outputFile;
|
||||
wxString m_colorTheme;
|
||||
|
||||
bool m_mirror;
|
||||
bool m_blackAndWhite;
|
||||
bool m_plotFrame;
|
||||
bool m_negative;
|
||||
|
||||
int m_pageSizeMode;
|
||||
|
||||
LSEQ m_printMaskLayer;
|
||||
bool m_sketchPadsOnFabLayers;
|
||||
bool m_hideDNPFPsOnFabLayers;
|
||||
bool m_sketchDNPFPsOnFabLayers;
|
||||
bool m_crossoutDNPFPsOnFabLayers;
|
||||
|
||||
// How holes in pads/vias are plotted:
|
||||
// 0 = no hole, 1 = small shape, 2 = actual shape
|
||||
// Not used in some plotters (Gerber)
|
||||
int m_drillShapeOption;
|
||||
|
||||
// coord format: 4 digits in mantissa (units always in mm). This is a good choice.
|
||||
unsigned int m_precision = 4;
|
||||
};
|
||||
|
||||
class EXPORT_SVG
|
||||
{
|
||||
public:
|
||||
static bool Plot( BOARD* aBoard, const PCB_PLOT_SVG_OPTIONS& aSvgPlotOptions );
|
||||
};
|
||||
|
||||
#endif
|
@ -61,7 +61,6 @@
|
||||
#include <pad.h>
|
||||
#include <pcb_marker.h>
|
||||
#include <project/project_file.h>
|
||||
#include <exporters/export_svg.h>
|
||||
#include <exporters/export_gencad_writer.h>
|
||||
#include <exporters/export_d356.h>
|
||||
#include <kiface_ids.h>
|
||||
@ -1668,9 +1667,12 @@ int PCBNEW_JOBS_HANDLER::JobExportFpSvg( JOB* aJob )
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
if( !svgJob->m_outputDirectory.IsEmpty() && !wxDir::Exists( svgJob->m_outputDirectory ) )
|
||||
wxString outPath = svgJob->GetFullOutputPath( nullptr );
|
||||
|
||||
if( !PATHS::EnsurePathExists( outPath, true ) )
|
||||
{
|
||||
wxFileName::Mkdir( svgJob->m_outputDirectory );
|
||||
m_reporter->Report( _( "Failed to create output directory\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_INVALID_OUTPUT_CONFLICT;
|
||||
}
|
||||
|
||||
int exitCode = CLI::EXIT_CODES::OK;
|
||||
@ -1733,7 +1735,7 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR
|
||||
brd->Add( fp, ADD_MODE::INSERT, true );
|
||||
|
||||
wxFileName outputFile;
|
||||
outputFile.SetPath( aSvgJob->m_outputDirectory );
|
||||
outputFile.SetPath( aSvgJob->GetFullOutputPath(nullptr) );
|
||||
outputFile.SetName( aFootprint->GetFPID().GetLibItemName().wx_str() );
|
||||
outputFile.SetExt( FILEEXT::SVGFileExtension );
|
||||
|
||||
@ -1742,22 +1744,35 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR
|
||||
outputFile.GetFullPath() ),
|
||||
RPT_SEVERITY_ACTION );
|
||||
|
||||
PCB_PLOT_PARAMS plotOpts;
|
||||
PCB_PLOTTER::PlotJobToPlotOpts( plotOpts, aSvgJob, *m_reporter );
|
||||
|
||||
PCB_PLOT_SVG_OPTIONS svgPlotOptions;
|
||||
svgPlotOptions.m_blackAndWhite = aSvgJob->m_blackAndWhite;
|
||||
svgPlotOptions.m_colorTheme = aSvgJob->m_colorTheme;
|
||||
svgPlotOptions.m_outputFile = outputFile.GetFullPath();
|
||||
svgPlotOptions.m_mirror = false;
|
||||
svgPlotOptions.m_pageSizeMode = 2; // board bounding box
|
||||
svgPlotOptions.m_printMaskLayer = aSvgJob->m_printMaskLayer;
|
||||
svgPlotOptions.m_sketchPadsOnFabLayers = aSvgJob->m_sketchPadsOnFabLayers;
|
||||
svgPlotOptions.m_hideDNPFPsOnFabLayers = aSvgJob->m_hideDNPFPsOnFabLayers;
|
||||
svgPlotOptions.m_sketchDNPFPsOnFabLayers = aSvgJob->m_sketchDNPFPsOnFabLayers;
|
||||
svgPlotOptions.m_crossoutDNPFPsOnFabLayers = aSvgJob->m_crossoutDNPFPsOnFabLayers;
|
||||
svgPlotOptions.m_plotFrame = false;
|
||||
// always fixed for the svg plot
|
||||
plotOpts.SetPlotFrameRef( false );
|
||||
plotOpts.SetSvgFitPageToBoard( true );
|
||||
plotOpts.SetMirror( false );
|
||||
plotOpts.SetSkipPlotNPTH_Pads( false );
|
||||
|
||||
if( !EXPORT_SVG::Plot( brd.get(), svgPlotOptions ) )
|
||||
if( plotOpts.GetSketchPadsOnFabLayers() )
|
||||
{
|
||||
plotOpts.SetPlotPadNumbers( true );
|
||||
}
|
||||
|
||||
PCB_PLOTTER plotter( brd.get(), m_reporter, plotOpts );
|
||||
|
||||
LOCALE_IO dummy;
|
||||
|
||||
if( !plotter.Plot( outputFile.GetFullPath(),
|
||||
aSvgJob->m_plotLayerSequence,
|
||||
aSvgJob->m_plotOnAllLayersSequence,
|
||||
false,
|
||||
true,
|
||||
wxEmptyString, wxEmptyString,
|
||||
wxEmptyString ) )
|
||||
{
|
||||
m_reporter->Report( _( "Error creating svg file" ) + wxS( "\n" ), RPT_SEVERITY_ERROR );
|
||||
return CLI::EXIT_CODES::ERR_UNKNOWN;
|
||||
}
|
||||
|
||||
return CLI::EXIT_CODES::OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user