Pcbnew: Commit patch (with very minor changes) about SVG file export with the layers ordered from bottom to top. ( bug 1286646 ), from Thiadmer Riemersma.
This commit is contained in:
parent
cd85ee626b
commit
84a985f8af
|
@ -381,6 +381,66 @@ LSEQ LSET::Seq() const
|
|||
}
|
||||
|
||||
|
||||
LSEQ LSET::SeqStackupBottom2Top() const
|
||||
{
|
||||
// bottom-to-top stack-up layers
|
||||
static const LAYER_ID sequence[] = {
|
||||
B_Fab,
|
||||
B_CrtYd,
|
||||
B_Adhes,
|
||||
B_SilkS,
|
||||
B_Paste,
|
||||
B_Mask,
|
||||
B_Cu,
|
||||
In30_Cu,
|
||||
In29_Cu,
|
||||
In28_Cu,
|
||||
In27_Cu,
|
||||
In26_Cu,
|
||||
In25_Cu,
|
||||
In24_Cu,
|
||||
In23_Cu,
|
||||
In22_Cu,
|
||||
In21_Cu,
|
||||
In20_Cu,
|
||||
In19_Cu,
|
||||
In18_Cu,
|
||||
In17_Cu,
|
||||
In16_Cu,
|
||||
In15_Cu,
|
||||
In14_Cu,
|
||||
In13_Cu,
|
||||
In12_Cu,
|
||||
In11_Cu,
|
||||
In10_Cu,
|
||||
In9_Cu,
|
||||
In8_Cu,
|
||||
In7_Cu,
|
||||
In6_Cu,
|
||||
In5_Cu,
|
||||
In4_Cu,
|
||||
In3_Cu,
|
||||
In2_Cu,
|
||||
In1_Cu,
|
||||
F_Cu,
|
||||
F_Mask,
|
||||
F_Paste,
|
||||
F_SilkS,
|
||||
F_Adhes,
|
||||
F_CrtYd,
|
||||
F_Fab,
|
||||
Dwgs_User,
|
||||
Cmts_User,
|
||||
Eco1_User,
|
||||
Eco2_User,
|
||||
Margin,
|
||||
Edge_Cuts,
|
||||
};
|
||||
|
||||
return Seq( sequence, DIM( sequence ) );
|
||||
}
|
||||
|
||||
|
||||
LAYER_ID FlipLayer( LAYER_ID aLayerId )
|
||||
{
|
||||
switch( aLayerId )
|
||||
|
|
|
@ -367,11 +367,11 @@ public:
|
|||
LSEQ Seq() const;
|
||||
|
||||
/**
|
||||
* Function SVG
|
||||
* returns the sequence used to output an SVG plot.
|
||||
LSEQ SVG() const;
|
||||
put this in the needed source file using Seq() there.
|
||||
*/
|
||||
* Function SeqStackBottom2Top
|
||||
* returns the sequence that is typical for a bottom-to-top stack-up.
|
||||
* For instance, to plot multiple layers in a single image, the top layers output last.
|
||||
*/
|
||||
LSEQ SeqStackupBottom2Top() const;
|
||||
|
||||
/**
|
||||
* Function FmtHex
|
||||
|
|
|
@ -62,10 +62,8 @@ private:
|
|||
wxCheckBox* m_boxSelectLayer[LAYER_ID_COUNT];
|
||||
bool m_printBW;
|
||||
wxString m_outputDirectory;
|
||||
|
||||
// Static member to store options
|
||||
static bool m_printMirror;
|
||||
static bool m_oneFileOnly;
|
||||
bool m_printMirror;
|
||||
bool m_oneFileOnly;
|
||||
|
||||
void initDialog();
|
||||
|
||||
|
@ -88,7 +86,7 @@ private:
|
|||
return m_rbSvgPageSizeOpt->GetSelection() == 0;
|
||||
}
|
||||
|
||||
bool CreateSVGFile( const wxString& FullFileName );
|
||||
bool CreateSVGFile( const wxString& FullFileName, bool aOnlyOneFile );
|
||||
|
||||
LSET getCheckBoxSelectedLayers() const;
|
||||
};
|
||||
|
@ -97,6 +95,8 @@ private:
|
|||
|
||||
// Keys for configuration
|
||||
#define PLOTSVGMODECOLOR_KEY wxT( "PlotSVGModeColor" )
|
||||
#define PLOTSVGMODEMIRROR_KEY wxT( "PlotSVGModeMirror" )
|
||||
#define PLOTSVGMODEONEFILE_KEY wxT( "PlotSVGModeOneFile" )
|
||||
#define PLOTSVGPAGESIZEOPT_KEY wxT( "PlotSVGPageOpt" )
|
||||
#define PLOTSVGPLOT_BRD_EDGE_KEY wxT( "PlotSVGBrdEdge" )
|
||||
|
||||
|
@ -125,9 +125,6 @@ DIALOG_SVG_PRINT::DIALOG_SVG_PRINT( wxTopLevelWindow* aParent, BOARD* aBoard, PC
|
|||
Centre();
|
||||
}
|
||||
|
||||
bool DIALOG_SVG_PRINT::m_printMirror = false;
|
||||
bool DIALOG_SVG_PRINT::m_oneFileOnly = false;
|
||||
|
||||
|
||||
void DIALOG_SVG_PRINT::initDialog()
|
||||
{
|
||||
|
@ -136,6 +133,8 @@ void DIALOG_SVG_PRINT::initDialog()
|
|||
m_config->Read( PLOTSVGMODECOLOR_KEY, &m_printBW, false );
|
||||
long ltmp;
|
||||
m_config->Read( PLOTSVGPAGESIZEOPT_KEY, <mp, 0 );
|
||||
m_config->Read( PLOTSVGMODEMIRROR_KEY, &m_printMirror, false );
|
||||
m_config->Read( PLOTSVGMODEONEFILE_KEY, &m_oneFileOnly, false);
|
||||
m_rbSvgPageSizeOpt->SetSelection( ltmp );
|
||||
m_config->Read( PLOTSVGPLOT_BRD_EDGE_KEY, <mp, 1 );
|
||||
m_PrintBoardEdgesCtrl->SetValue( ltmp );
|
||||
|
@ -144,11 +143,7 @@ void DIALOG_SVG_PRINT::initDialog()
|
|||
m_outputDirectory = m_callers_params->GetOutputDirectory();
|
||||
m_outputDirectoryName->SetValue( m_outputDirectory );
|
||||
|
||||
if( m_printBW )
|
||||
m_ModeColorOption->SetSelection( 1 );
|
||||
else
|
||||
m_ModeColorOption->SetSelection( 0 );
|
||||
|
||||
m_ModeColorOption->SetSelection( m_printBW ? 1 : 0 );
|
||||
m_printMirrorOpt->SetValue( m_printMirror );
|
||||
m_rbFileOpt->SetSelection( m_oneFileOnly ? 1 : 0 );
|
||||
|
||||
|
@ -307,7 +302,7 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile )
|
|||
if( m_PrintBoardEdgesCtrl->IsChecked() )
|
||||
m_printMaskLayer.set( Edge_Cuts );
|
||||
|
||||
if( CreateSVGFile( fn.GetFullPath() ) )
|
||||
if( CreateSVGFile( fn.GetFullPath(), aOnlyOneFile ) )
|
||||
{
|
||||
m_messagesBox->AppendText(
|
||||
wxString::Format( _( "Plot: '%s' OK\n" ), GetChars( fn.GetFullPath() ) )
|
||||
|
@ -327,7 +322,7 @@ void DIALOG_SVG_PRINT::ExportSVGFile( bool aOnlyOneFile )
|
|||
|
||||
|
||||
// Actual SVG file export function.
|
||||
bool DIALOG_SVG_PRINT::CreateSVGFile( const wxString& aFullFileName )
|
||||
bool DIALOG_SVG_PRINT::CreateSVGFile( const wxString& aFullFileName, bool aOnlyOneFile )
|
||||
{
|
||||
PCB_PLOT_PARAMS plot_opts;
|
||||
|
||||
|
@ -372,15 +367,22 @@ bool DIALOG_SVG_PRINT::CreateSVGFile( const wxString& aFullFileName )
|
|||
|
||||
if( plotter )
|
||||
{
|
||||
plotter->SetColorMode( m_ModeColorOption->GetSelection() == 0 );
|
||||
PlotStandardLayer( m_board, plotter, m_printMaskLayer, plot_opts );
|
||||
plotter->SetColorMode( !m_printBW );
|
||||
if( aOnlyOneFile )
|
||||
{
|
||||
for( LSEQ seq = m_printMaskLayer.SeqStackupBottom2Top(); seq; ++seq )
|
||||
PlotOneBoardLayer( m_board, plotter, *seq, plot_opts );
|
||||
}
|
||||
else
|
||||
{
|
||||
PlotStandardLayer( m_board, plotter, m_printMaskLayer, plot_opts );
|
||||
}
|
||||
plotter->EndPlot();
|
||||
}
|
||||
|
||||
delete plotter;
|
||||
|
||||
m_board->SetAuxOrigin( axisorigin ); // really, without a message saying so?
|
||||
|
||||
m_board->SetAuxOrigin( axisorigin ); // reset to the values saved earlier
|
||||
m_board->SetPageSettings( pageInfo );
|
||||
|
||||
return true;
|
||||
|
@ -410,10 +412,9 @@ void DIALOG_SVG_PRINT::OnCloseWindow( wxCloseEvent& event )
|
|||
m_printBW = m_ModeColorOption->GetSelection();
|
||||
m_oneFileOnly = m_rbFileOpt->GetSelection() == 1;
|
||||
|
||||
// 1) Why is configuration data saved in two places: m_config and PCB_PLOT_OPTIONS?
|
||||
// 2) Why are SVG layer choices co-mingled with other plot layer choices in the config file?
|
||||
// The string OPTKEY_LAYERBASE is used in multiple places.
|
||||
// fix these.
|
||||
// Why are SVG layer choices co-mingled with other plot layer choices in the config file?
|
||||
// The string OPTKEY_LAYERBASE is used in multiple places.
|
||||
// fix this.
|
||||
|
||||
wxString dirStr = m_outputDirectoryName->GetValue();
|
||||
dirStr.Replace( wxT( "\\" ), wxT( "/" ) );
|
||||
|
@ -423,6 +424,8 @@ void DIALOG_SVG_PRINT::OnCloseWindow( wxCloseEvent& event )
|
|||
if( m_config )
|
||||
{
|
||||
m_config->Write( PLOTSVGMODECOLOR_KEY, m_printBW );
|
||||
m_config->Write( PLOTSVGMODEMIRROR_KEY, m_printMirror );
|
||||
m_config->Write( PLOTSVGMODEONEFILE_KEY, m_oneFileOnly );
|
||||
m_config->Write( PLOTSVGPAGESIZEOPT_KEY, m_rbSvgPageSizeOpt->GetSelection() );
|
||||
m_config->Write( PLOTSVGPLOT_BRD_EDGE_KEY, m_PrintBoardEdgesCtrl->GetValue() );
|
||||
|
||||
|
|
|
@ -89,6 +89,8 @@ DIALOG_SVG_PRINT_base::DIALOG_SVG_PRINT_base( wxWindow* parent, wxWindowID id, c
|
|||
sbOptionsSizer->Add( m_PrintBoardEdgesCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_printMirrorOpt = new wxCheckBox( this, wxID_ANY, _("Print mirrored"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_printMirrorOpt->SetToolTip( _("Print the layer(s) horizontally mirrored") );
|
||||
|
||||
sbOptionsSizer->Add( m_printMirrorOpt, 0, wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
|
|
|
@ -925,7 +925,7 @@
|
|||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="tooltip">Print the layer(s) horizontally mirrored</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
|
|
|
@ -334,7 +334,7 @@ bool PLOT_CONTROLLER::PlotLayer( LAYER_NUM aLayer )
|
|||
return false;
|
||||
|
||||
// Fully delegated to the parent
|
||||
PlotOneBoardLayer( m_board, m_plotter, aLayer, m_plotOpts );
|
||||
PlotOneBoardLayer( m_board, m_plotter, ToLAYER_ID( aLayer ), m_plotOpts );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -176,7 +176,7 @@ PLOTTER* StartPlotBoard( BOARD* aBoard,
|
|||
* @param aLayer = the layer id to plot
|
||||
* @param aPlotOpt = the plot options (files, sketch). Has meaning for some formats only
|
||||
*/
|
||||
void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, LAYER_NUM aLayer,
|
||||
void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, LAYER_ID aLayer,
|
||||
const PCB_PLOT_PARAMS& aPlotOpt );
|
||||
|
||||
/**
|
||||
|
|
|
@ -142,7 +142,7 @@ void PlotSilkScreen( BOARD *aBoard, PLOTTER* aPlotter, LSET aLayerMask,
|
|||
}
|
||||
}
|
||||
|
||||
void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, LAYER_NUM aLayer,
|
||||
void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, LAYER_ID aLayer,
|
||||
const PCB_PLOT_PARAMS& aPlotOpt )
|
||||
{
|
||||
PCB_PLOT_PARAMS plotOpt = aPlotOpt;
|
||||
|
@ -154,7 +154,7 @@ void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, LAYER_NUM aLayer,
|
|||
|
||||
// Specify that the contents of the "Edges Pcb" layer are to be plotted
|
||||
// in addition to the contents of the currently specified layer.
|
||||
LSET layer_mask( ToLAYER_ID( aLayer ) );
|
||||
LSET layer_mask( aLayer );
|
||||
|
||||
if( !aPlotOpt.GetExcludeEdgeLayer() )
|
||||
layer_mask.set( Edge_Cuts );
|
||||
|
|
Loading…
Reference in New Issue