kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #05993
Re: [PATCH] Saving plot dialog settings
The previous patch has a bug. It incorrectly complains about no layers
being selected. This patch works better.
marco
On Sun, Jan 2, 2011 at 11:40 PM, Marco Mattila <marcom99@xxxxxxxxx> wrote:
> Hi,
>
> During previous discussions about subtracting masks from silkscreen
> layers when plotting gerbers, Dick mentioned that saving plot settings
> is not quite up to date. Currently some plot settings to be
> saved/loaded are defined in pcbnew_config.cpp. However, that requires
> that corresponding variables in the PCB_PLOT_PARAMS class are public.
> My proposal is to let the class itself take care of saving/loading the
> settings. That's mainly what the attached patch changes. In addition,
> all plot dialog settings should now be included. The wxConfig key
> names are also edited to start with "Plot", and layer selections are
> combined into a single bit mask. Moreover, some global variables in
> pcbplot.cpp have been moved into the class, too. g_PcbPlotOptions
> itself is still global. However, I think that it could be moved to be
> a member of the WinEDA_BasePcbFrame. That way it should be accessible
> where needed without being global. And if necessary, plot settings
> could still be loaded only once when pcbnew starts (now they are
> loaded every time the plot dialog constructor is called). In addition
> drill file generation settings could be included into PCB_PLOT_PARAMS.
> I can continue working on this if my approach sounds reasonable.
>
> marco
>
=== modified file 'pcbnew/pcbframe.cpp'
--- pcbnew/pcbframe.cpp 2010-12-21 15:13:09 +0000
+++ pcbnew/pcbframe.cpp 2011-01-01 10:25:26 +0000
@@ -56,7 +56,7 @@
extern int g_DrawDefaultLineThickness;
// Keys used in read/write config
-#define OPTKEY_DEFAULT_LINEWIDTH_VALUE wxT( "PlotLineWidth" )
+#define OPTKEY_PLOT_DEFAULT_LINEWIDTH_VALUE wxT( "PlotDefaultLineWidth" )
#define PCB_SHOW_FULL_RATSNET_OPT wxT( "PcbFulRatsnest" )
#define PCB_MAGNETIC_PADS_OPT wxT( "PcbMagPadOpt" )
#define PCB_MAGNETIC_TRACKS_OPT wxT( "PcbMagTrackOpt" )
@@ -513,7 +513,7 @@
WinEDA_BasePcbFrame::LoadSettings();
long tmp;
- config->Read( OPTKEY_DEFAULT_LINEWIDTH_VALUE, &g_DrawDefaultLineThickness );
+ config->Read( OPTKEY_PLOT_DEFAULT_LINEWIDTH_VALUE, &g_DrawDefaultLineThickness );
config->Read( PCB_SHOW_FULL_RATSNET_OPT, &tmp );
GetBoard()->SetElementVisibility(RATSNEST_VISIBLE, tmp);
config->Read( PCB_MAGNETIC_PADS_OPT, &g_MagneticPadOption );
@@ -539,7 +539,7 @@
wxRealPoint GridSize = GetScreen()->GetGridSize();
- config->Write( OPTKEY_DEFAULT_LINEWIDTH_VALUE, g_DrawDefaultLineThickness );
+ config->Write( OPTKEY_PLOT_DEFAULT_LINEWIDTH_VALUE, g_DrawDefaultLineThickness );
long tmp = GetBoard()->IsElementVisible(RATSNEST_VISIBLE);
config->Write( PCB_SHOW_FULL_RATSNET_OPT, tmp );
config->Write( PCB_MAGNETIC_PADS_OPT, (long) g_MagneticPadOption );
=== modified file 'pcbnew/pcbnew_config.cpp'
--- pcbnew/pcbnew_config.cpp 2010-12-11 18:40:39 +0000
+++ pcbnew/pcbnew_config.cpp 2010-12-29 19:02:06 +0000
@@ -398,34 +398,5 @@
&g_Show_Module_Ratsnest, TRUE ) );
m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "TwoSegT" ),
&g_TwoSegmentTrackBuild, TRUE ) );
- // Plot options:
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLnum" ),
- &g_PcbPlotOptions.m_HPGLPenNum,
- 1, 1, 16 ) );
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGdiam" ),
- &g_PcbPlotOptions.m_HPGLPenDiam,
- 15, 0, 100 ) );
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLSpd" ),
- &g_PcbPlotOptions.m_HPGLPenSpeed,
- 20, 0, 1000 ) );
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "HPGLrec" ),
- &g_PcbPlotOptions.m_HPGLPenOvr,
- 2, 0, 0x100 ) );
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "PlotOutputFormat" ),
- &g_PcbPlotOptions.m_PlotFormat, PLOT_FORMAT_GERBER ) );
- m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "EdgeLayerGerberOpt" ),
- &g_PcbPlotOptions.m_ExcludeEdgeLayer, true ) );
- m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "SubstractMasktoSilk" ),
- &g_PcbPlotOptions.m_SubtractMaskFromSilk, false ) );
- m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PlotPadsOnSilkscreen" ),
- &g_PcbPlotOptions.m_PlotPadsOnSilkLayer, false ) );
- m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PlotFrameRef" ),
- &g_PcbPlotOptions.m_PlotFrameRef, false ) );
- m_configSettings.push_back( new PARAM_CFG_BOOL( true, wxT( "PlotViasOnMask" ),
- &g_PcbPlotOptions.m_PlotViaOnMaskLayer, false ) );
- m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "PlotHolesOpt" ),
- (int*)&g_PcbPlotOptions.m_DrillShapeOpt,
- PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE ) );
-
return m_configSettings;
}
=== modified file 'pcbnew/pcbplot.cpp'
--- pcbnew/pcbplot.cpp 2010-12-21 15:13:09 +0000
+++ pcbnew/pcbplot.cpp 2011-01-03 13:06:25 +0000
@@ -21,40 +21,198 @@
#define PLOT_DEFAULT_MARGE 300 // mils
/* Keywords to r/w options in m_Config */
-#define OPTKEY_GERBER_EXTENSIONS wxT( "GerberOptUseLayersExt" )
-#define OPTKEY_XFINESCALE_ADJ wxT( "PlotXFineScaleAdj" )
-#define OPTKEY_YFINESCALE_ADJ wxT( "PlotYFineScaleAdj" )
+#define OPTKEY_PLOT_LAYER_SELECTION wxT( "PlotLayerSelection" )
+#define OPTKEY_PLOT_GERBER_EXTENSIONS wxT( "PlotUseGerberExtensions" )
+#define OPTKEY_PLOT_EXCLUDE_EDGE_LAYER wxT( "PlotExcludeEdgeLayer" )
+#define OPTKEY_PLOT_LINE_WIDTH wxT( "PlotLineWidth" )
+#define OPTKEY_PLOT_VIAS_ON_MASK wxT( "PlotViasOnMask" )
+#define OPTKEY_PLOT_MODE wxT( "PlotMode" )
+#define OPTKEY_PLOT_AUX_ORIGIN wxT( "PlotAuxOrigin" )
+#define OPTKEY_PLOT_HPGL_PEN_NUM wxT( "PlotHPGLPenNumber" )
+#define OPTKEY_PLOT_HPGL_PEN_SPEED wxT( "PlotHPGLPenSpeed" )
+#define OPTKEY_PLOT_HPGL_PEN_DIAMETER wxT( "PlotHPGLPenDiameter" )
+#define OPTKEY_PLOT_HPGL_PEN_OVERLAY wxT( "PlotHPGLPenOverlay" )
+#define OPTKEY_PLOT_PS_COLOR wxT( "PlotPSColor" )
+#define OPTKEY_PLOT_PS_NEGATIVE wxT( "PlotPSNegative" )
+#define OPTKEY_PLOT_FRAME_REFERENCE wxT( "PlotFrameRef" )
+#define OPTKEY_PLOT_VALUE wxT( "PlotValue" )
+#define OPTKEY_PLOT_REFERENCE wxT( "PlotReference" )
+#define OPTKEY_PLOT_TEXT_OTHER wxT( "PlotTextOther" )
+#define OPTKEY_PLOT_INVISIBLE_TEXTS wxT( "PlotInvisibleTexts" )
+#define OPTKEY_PLOT_PADS_ON_SILK wxT( "PlotPadsOnSilkscreen" )
+#define OPTKEY_PLOT_SUBTRACT_MASK wxT( "PlotSubtractMask" )
+#define OPTKEY_PLOT_OUTPUT_FORMAT wxT( "PlotOutputFormat" )
+#define OPTKEY_PLOT_MIRROR wxT( "PlotMirror" )
+#define OPTKEY_PLOT_DRILL_SHAPE wxT( "PlotDrillShape" )
+#define OPTKEY_PLOT_SCALE wxT( "PlotScaleSelection" )
+#define OPTKEY_PLOT_XFINESCALE_ADJ wxT( "PlotXFineScaleAdj" )
+#define OPTKEY_PLOT_YFINESCALE_ADJ wxT( "PlotYFineScaleAdj" )
// Define min and max reasonable values for print scale
#define MIN_SCALE 0.01
#define MAX_SCALE 100.0
+extern int g_DrawDefaultLineThickness;
+
+
// PCB_PLOT_PARAMS constructor: set the default values for plot options:
PCB_PLOT_PARAMS::PCB_PLOT_PARAMS()
{
- m_SubtractMaskFromSilk = false;
- m_PlotReference = true;
- m_PlotValue = true;
- m_PlotTextOther = true;
- m_DrillShapeOpt = PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE;
- m_PlotMode = FILLED;
- m_PlotScale = 1.0;
- m_AutoScale = false;
- m_FineScaleAdjustX = 1.0;
- m_FineScaleAdjustY = 1.0;
- outputDirectory = wxT( "" );
-}
-
-
-static long s_SelectedLayers = LAYER_BACK | LAYER_FRONT |
- SILKSCREEN_LAYER_FRONT | SILKSCREEN_LAYER_BACK;
-
-static bool s_PlotOriginIsAuxAxis = FALSE;
-
+ config = NULL;
+ layerSelection = LAYER_BACK | LAYER_FRONT
+ | SILKSCREEN_LAYER_FRONT | SILKSCREEN_LAYER_BACK;
+ useGerberExtensions = true;
+ m_ExcludeEdgeLayer = true;
+ m_PlotLineWidth = g_DrawDefaultLineThickness;
+ m_PlotFrameRef = false;
+ m_PlotViaOnMaskLayer = false;
+ m_PlotMode = FILLED;
+ auxOrigin = false;
+ m_HPGLPenNum = 1;
+ m_HPGLPenSpeed = 20;
+ m_HPGLPenDiam = 15;
+ m_HPGLPenOvr = 2;
+ m_PlotPSColorOpt = true;
+ m_PlotPSNegative = false;
+ m_PlotReference = true;
+ m_PlotValue = true;
+ m_PlotTextOther = true;
+ m_PlotInvisibleTexts = false;
+ m_PlotPadsOnSilkLayer = false;
+ subtractMaskFromSilk = false;
+ m_PlotFormat = PLOT_FORMAT_GERBER;
+ m_PlotMirror = false;
+ m_DrillShapeOpt = SMALL_DRILL_SHAPE;
+ m_AutoScale = false;
+ m_PlotScale = 1.0;
+ scaleSelection = 1;
+ m_FineScaleAdjustX = 1.0;
+ m_FineScaleAdjustY = 1.0;
+ outputDirectory = wxT( "" );
+}
+
+void PCB_PLOT_PARAMS::readConfigLong( wxString aKey, long* aLong )
+{
+ long temp;
+ wxASSERT( config );
+ if( !config->Read( aKey, &temp ) )
+ return;
+ *aLong = temp;
+}
+
+void PCB_PLOT_PARAMS::readConfigInt( wxString aKey, int* aInt,
+ int aMin, int aMax )
+{
+ long temp;
+ wxASSERT( config );
+ if( !config->Read( aKey, &temp ) )
+ return;
+ if( temp < aMin )
+ return;
+ if( temp > aMax )
+ return;
+ *aInt = (int)temp;
+}
+
+void PCB_PLOT_PARAMS::readConfigDouble( wxString aKey, double* aDouble,
+ double aMin, double aMax )
+{
+ double temp;
+ wxASSERT( config );
+ if( !config->Read( aKey, &temp ) )
+ return;
+ if( temp < aMin )
+ return;
+ if( temp > aMax )
+ return;
+ *aDouble = temp;
+}
+
+void PCB_PLOT_PARAMS::readConfigBool( wxString aKey, bool* aBool )
+{
+ bool temp;
+ wxASSERT( config );
+ if( !config->Read( aKey, &temp ) )
+ return;
+ *aBool = temp;
+}
+
+void PCB_PLOT_PARAMS::SaveSettings( wxConfig* aConfig )
+{
+ config = aConfig;
+ config->Write( OPTKEY_PLOT_LAYER_SELECTION, layerSelection );
+ config->Write( OPTKEY_PLOT_GERBER_EXTENSIONS, useGerberExtensions );
+ config->Write( OPTKEY_PLOT_EXCLUDE_EDGE_LAYER, m_ExcludeEdgeLayer );
+ config->Write( OPTKEY_PLOT_LINE_WIDTH, (long)m_PlotLineWidth );
+ config->Write( OPTKEY_PLOT_FRAME_REFERENCE, m_PlotFrameRef );
+ config->Write( OPTKEY_PLOT_VIAS_ON_MASK, m_PlotViaOnMaskLayer );
+ config->Write( OPTKEY_PLOT_MODE, (long)m_PlotMode );
+ config->Write( OPTKEY_PLOT_AUX_ORIGIN, auxOrigin );
+ config->Write( OPTKEY_PLOT_HPGL_PEN_NUM, (long)m_HPGLPenNum );
+ config->Write( OPTKEY_PLOT_HPGL_PEN_SPEED, (long)m_HPGLPenSpeed );
+ config->Write( OPTKEY_PLOT_HPGL_PEN_DIAMETER, (long)m_HPGLPenDiam );
+ config->Write( OPTKEY_PLOT_HPGL_PEN_OVERLAY, (long)m_HPGLPenOvr );
+ config->Write( OPTKEY_PLOT_PS_COLOR, (long)m_PlotPSColorOpt );
+ config->Write( OPTKEY_PLOT_PS_NEGATIVE, m_PlotPSNegative );
+ config->Write( OPTKEY_PLOT_VALUE, m_PlotValue );
+ config->Write( OPTKEY_PLOT_REFERENCE, m_PlotReference );
+ config->Write( OPTKEY_PLOT_TEXT_OTHER, m_PlotTextOther );
+ config->Write( OPTKEY_PLOT_INVISIBLE_TEXTS, m_PlotInvisibleTexts );
+ config->Write( OPTKEY_PLOT_PADS_ON_SILK, m_PlotPadsOnSilkLayer );
+ config->Write( OPTKEY_PLOT_SUBTRACT_MASK, subtractMaskFromSilk );
+ config->Write( OPTKEY_PLOT_OUTPUT_FORMAT, (long)m_PlotFormat );
+ config->Write( OPTKEY_PLOT_MIRROR, m_PlotMirror );
+ config->Write( OPTKEY_PLOT_DRILL_SHAPE, (long)m_DrillShapeOpt );
+ config->Write( OPTKEY_PLOT_SCALE, (long)scaleSelection );
+ config->Write( OPTKEY_PLOT_XFINESCALE_ADJ, m_FineScaleAdjustX );
+ config->Write( OPTKEY_PLOT_YFINESCALE_ADJ, m_FineScaleAdjustY );
+}
+
+void PCB_PLOT_PARAMS::LoadSettings( wxConfig* aConfig )
+{
+ config = aConfig;
+ readConfigLong( OPTKEY_PLOT_LAYER_SELECTION, &layerSelection );
+ readConfigBool( OPTKEY_PLOT_GERBER_EXTENSIONS, &useGerberExtensions );
+ readConfigBool( OPTKEY_PLOT_EXCLUDE_EDGE_LAYER, &m_ExcludeEdgeLayer );
+ readConfigInt( OPTKEY_PLOT_LINE_WIDTH, &m_PlotLineWidth,
+ 40, 200 );
+ readConfigBool( OPTKEY_PLOT_FRAME_REFERENCE, &m_PlotFrameRef );
+ readConfigBool( OPTKEY_PLOT_VIAS_ON_MASK, &m_PlotViaOnMaskLayer );
+ readConfigInt( OPTKEY_PLOT_MODE, (int*)&m_PlotMode,
+ 0, 2 );
+ readConfigBool( OPTKEY_PLOT_AUX_ORIGIN, &auxOrigin );
+ readConfigInt( OPTKEY_PLOT_HPGL_PEN_NUM, &m_HPGLPenNum,
+ 1, 16 );
+ readConfigInt( OPTKEY_PLOT_HPGL_PEN_SPEED, &m_HPGLPenSpeed,
+ 0, 1000 );
+ readConfigInt( OPTKEY_PLOT_HPGL_PEN_DIAMETER, &m_HPGLPenDiam,
+ 0, 100 );
+ readConfigInt( OPTKEY_PLOT_HPGL_PEN_OVERLAY, &m_HPGLPenOvr,
+ 0, 0x100 );
+ readConfigInt( OPTKEY_PLOT_PS_COLOR, &m_PlotPSColorOpt,
+ 0, 1 );
+ readConfigBool( OPTKEY_PLOT_PS_NEGATIVE, &m_PlotPSNegative );
+ readConfigBool( OPTKEY_PLOT_VALUE, &m_PlotValue );
+ readConfigBool( OPTKEY_PLOT_REFERENCE, &m_PlotReference );
+ readConfigBool( OPTKEY_PLOT_TEXT_OTHER, &m_PlotTextOther );
+ readConfigBool( OPTKEY_PLOT_INVISIBLE_TEXTS, &m_PlotInvisibleTexts );
+ readConfigBool( OPTKEY_PLOT_PADS_ON_SILK, &m_PlotPadsOnSilkLayer );
+ readConfigBool( OPTKEY_PLOT_SUBTRACT_MASK, &subtractMaskFromSilk );
+ readConfigInt( OPTKEY_PLOT_OUTPUT_FORMAT, &m_PlotFormat,
+ 0, 4 );
+ readConfigBool( OPTKEY_PLOT_MIRROR, &m_PlotMirror );
+ readConfigInt( OPTKEY_PLOT_DRILL_SHAPE, (int*)&m_DrillShapeOpt,
+ 0, 2 );
+ readConfigInt( OPTKEY_PLOT_SCALE, &scaleSelection,
+ 0, 4 );
+ readConfigDouble( OPTKEY_PLOT_XFINESCALE_ADJ, &m_FineScaleAdjustX,
+ MIN_SCALE, MAX_SCALE );
+ readConfigDouble( OPTKEY_PLOT_YFINESCALE_ADJ, &m_FineScaleAdjustY,
+ MIN_SCALE, MAX_SCALE );
+}
/* The group of plot options - sadly global XXX */
PCB_PLOT_PARAMS g_PcbPlotOptions;
-extern int g_DrawDefaultLineThickness;
/*******************************/
@@ -69,8 +227,6 @@
wxCheckBox* m_BoxSelectLayer[LAYER_COUNT]; // wxCheckBox list to select/deselec layers to plot
double m_XScaleAdjust;
double m_YScaleAdjust;
- static int m_dlgPlotScaleOpt; // Static to remember last selection
-
bool useA4()
{
@@ -117,8 +273,6 @@
void CreateDrillFile( wxCommandEvent& event );
};
-int DIALOG_PLOT::m_dlgPlotScaleOpt = 1;
-
const int UNITS_MILS = 1000;
@@ -128,6 +282,8 @@
m_Parent = parent;
m_Config = wxGetApp().m_EDA_Config;
+ g_PcbPlotOptions.LoadSettings( m_Config );
+
Init_Dialog();
GetSizer()->Fit( this );
@@ -143,13 +299,12 @@
BOARD* board = m_Parent->GetBoard();
- m_Config->Read( OPTKEY_XFINESCALE_ADJ, &m_XScaleAdjust );
- m_Config->Read( OPTKEY_YFINESCALE_ADJ, &m_YScaleAdjust );
+ m_XScaleAdjust = g_PcbPlotOptions.m_FineScaleAdjustX;
+ m_YScaleAdjust = g_PcbPlotOptions.m_FineScaleAdjustY;
m_plotFormatOpt->SetSelection( g_PcbPlotOptions.m_PlotFormat );
g_PcbPlotOptions.m_PlotLineWidth = g_DrawDefaultLineThickness;
-
// Set units and value for HPGL pen speed.
AddUnitSymbol( *m_textPenSize, g_UserUnit );
msg = ReturnStringFromValue( g_UserUnit, g_PcbPlotOptions.m_HPGLPenDiam, UNITS_MILS );
@@ -171,12 +326,9 @@
PCB_INTERNAL_UNIT );
m_linesWidth->AppendText( msg );
- if( s_PlotOriginIsAuxAxis )
+ if( g_PcbPlotOptions.GetAuxOrigin() )
m_choicePlotOffset->SetSelection( 1 );
- // Create scale adjust option
- m_XScaleAdjust = m_YScaleAdjust = 1.0;
-
// Test for a reasonable scale value. Set to 1 if problem
if( m_XScaleAdjust < MIN_SCALE || m_YScaleAdjust < MIN_SCALE
|| m_XScaleAdjust > MAX_SCALE || m_YScaleAdjust > MAX_SCALE )
@@ -190,10 +342,8 @@
m_plotPSNegativeOpt->SetValue( g_PcbPlotOptions.m_PlotPSNegative );
-
// Create layer list.
int layer;
- wxString layerKey;
for( layer = 0; layer < NB_LAYERS; ++layer )
{
if( !board->IsLayerEnabled( layer ) )
@@ -223,24 +373,14 @@
m_TechnicalLayersBoxSizer->Add( m_BoxSelectLayer[layer],
0, wxGROW | wxALL, 1 );
-
- layerKey.Printf( OPTKEY_LAYERBASE, layer );
- bool option;
- if( m_Config->Read( layerKey, &option ) )
- m_BoxSelectLayer[layer]->SetValue( option );
- else
- {
- long mask = 1 << layer;
- if( mask & s_SelectedLayers )
- m_BoxSelectLayer[layer]->SetValue( true );
- }
+ long mask = 1 << layer;
+ if( g_PcbPlotOptions.GetLayerSelection() & mask )
+ m_BoxSelectLayer[layer]->SetValue( true );
}
// Option for using proper Gerber extensions
- long ltmp;
- m_Config->Read( OPTKEY_GERBER_EXTENSIONS, <mp );
- m_useGerberExtensions->SetValue( ltmp );
+ m_useGerberExtensions->SetValue( g_PcbPlotOptions.GetUseGerberExtensions() );
// Option for excluding contents of "Edges Pcb" layer
m_excludeEdgeLayerOpt->SetValue( g_PcbPlotOptions.m_ExcludeEdgeLayer );
@@ -271,7 +411,7 @@
m_drillShapeOpt->SetSelection( g_PcbPlotOptions.m_DrillShapeOpt );
// Scale option
- m_scaleOpt->SetSelection( m_dlgPlotScaleOpt );
+ m_scaleOpt->SetSelection( g_PcbPlotOptions.GetScaleSelection() );
// Plot mode
m_plotModeOpt->SetSelection( g_PcbPlotOptions.m_PlotMode );
@@ -451,15 +591,18 @@
g_PcbPlotOptions.m_PlotPadsOnSilkLayer = m_plotPads_on_Silkscreen->GetValue();
- s_PlotOriginIsAuxAxis =
- (m_choicePlotOffset->GetSelection() == 0) ? FALSE : TRUE;
+ if( m_choicePlotOffset->GetSelection() == 0 )
+ g_PcbPlotOptions.SetAuxOrigin( false );
+ else
+ g_PcbPlotOptions.SetAuxOrigin( true );
g_PcbPlotOptions.m_PlotValue = m_plotModuleValueOpt->GetValue();
g_PcbPlotOptions.m_PlotReference = m_plotModuleRefOpt->GetValue();
g_PcbPlotOptions.m_PlotTextOther = m_plotTextOther->GetValue();
g_PcbPlotOptions.m_PlotInvisibleTexts = m_plotInvisibleText->GetValue();
- m_dlgPlotScaleOpt = m_scaleOpt->GetSelection();
+ g_PcbPlotOptions.SetScaleSelection( m_scaleOpt->GetSelection() );
+
g_PcbPlotOptions.m_DrillShapeOpt =
(PCB_PLOT_PARAMS::DrillShapeOptT) m_drillShapeOpt->GetSelection();
g_PcbPlotOptions.m_PlotMirror = m_plotMirrorOpt->GetValue();
@@ -471,7 +614,7 @@
g_PcbPlotOptions.m_HPGLPenDiam = tmp;
msg = m_HPGLPenSpeedOpt->GetValue();
- tmp = ReturnValueFromString( MILLIMETRES, msg, 1 );
+ tmp = ReturnValueFromString( UNSCALED_UNITS, msg, 1 );
g_PcbPlotOptions.m_HPGLPenSpeed = tmp;
msg = m_HPGLPenOverlayOpt->GetValue();
@@ -488,25 +631,29 @@
msg = m_fineAdjustYscaleOpt->GetValue();
msg.ToDouble( &m_YScaleAdjust );
- m_Config->Write( OPTKEY_GERBER_EXTENSIONS,
- m_useGerberExtensions->GetValue() );
- m_Config->Write( OPTKEY_XFINESCALE_ADJ, m_XScaleAdjust );
- m_Config->Write( OPTKEY_YFINESCALE_ADJ, m_YScaleAdjust );
+ g_PcbPlotOptions.SetUseGerberExtensions( m_useGerberExtensions->GetValue() );
+ g_PcbPlotOptions.m_FineScaleAdjustX = m_XScaleAdjust;
+ g_PcbPlotOptions.m_FineScaleAdjustY = m_YScaleAdjust;
g_PcbPlotOptions.m_PlotFormat = m_plotFormatOpt->GetSelection();
- wxString layerKey;
- for( int layer = 0; layer<NB_LAYERS; ++layer )
+ long selectedLayers = 0;
+ long mask = 1;
+ int layer;
+ for( layer = 0; layer < NB_LAYERS; layer++, mask <<= 1 )
{
if( m_BoxSelectLayer[layer] == NULL )
continue;
- layerKey.Printf( OPTKEY_LAYERBASE, layer );
- m_Config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() );
+ if( m_BoxSelectLayer[layer]->GetValue() )
+ selectedLayers |= mask;
}
+ g_PcbPlotOptions.SetLayerSelection( selectedLayers );
g_PcbPlotOptions.m_PlotPSNegative = m_plotPSNegativeOpt->GetValue();
g_PcbPlotOptions.SetOutputDirectory( m_outputDirectoryName->GetValue() );
+
+ g_PcbPlotOptions.SaveSettings( m_Config );
}
@@ -538,7 +685,7 @@
g_PcbPlotOptions.m_AutoScale = false;
g_PcbPlotOptions.m_PlotScale = 1;
- switch( m_dlgPlotScaleOpt )
+ switch( g_PcbPlotOptions.GetScaleSelection() )
{
default:
break;
@@ -601,8 +748,7 @@
DisplayInfoMessage( this,
_( "Warning: Scale option set to a very large value" ) );
- int mask = 1;
- s_SelectedLayers = 0;
+ long mask = 1;
for( layer = 0; layer < NB_LAYERS; layer++, mask <<= 1 )
{
if( m_BoxSelectLayer[layer] == NULL )
@@ -610,8 +756,6 @@
bool success = false;
if( m_BoxSelectLayer[layer]->GetValue() )
{
- s_SelectedLayers |= mask;
-
fn = m_Parent->GetScreen()->m_FileName;
fn.SetPath( m_outputDirectoryName->GetValue() );
@@ -711,7 +855,7 @@
case PLOT_FORMAT_GERBER:
success = m_Parent->Genere_GERBER( fn.GetFullPath(), layer,
- s_PlotOriginIsAuxAxis,
+ g_PcbPlotOptions.GetAuxOrigin(),
g_PcbPlotOptions.m_PlotMode );
break;
@@ -740,7 +884,7 @@
// If no layer selected, we have nothing plotted.
// Prompt user if it happens
// because he could think there is a bug in pcbnew:
- if( s_SelectedLayers == 0 )
+ if( !g_PcbPlotOptions.GetLayerSelection() )
DisplayError( this, _( "No layer selected" ) );
}
=== modified file 'pcbnew/pcbplot.h'
--- pcbnew/pcbplot.h 2010-12-12 11:41:18 +0000
+++ pcbnew/pcbplot.h 2010-12-30 12:43:17 +0000
@@ -51,8 +51,7 @@
bool m_PlotTextOther;
bool m_PlotInvisibleTexts;
bool m_PlotPadsOnSilkLayer; ///< allows pads outlines on silkscreen layer (when pads are also o, silk screen
- bool m_SubtractMaskFromSilk;
-
+public:
/// id for plot format (see enum PlotFormat in plot_common.h) */
int m_PlotFormat; // Gerber, HPGL ...
bool m_PlotMirror;
@@ -74,14 +73,47 @@
double m_FineScaleAdjustY; // dine scale adjust Y axis
private:
- wxString outputDirectory;
+ bool useGerberExtensions;
+ bool subtractMaskFromSilk;
+ bool auxOrigin;
+ long layerSelection;
+ int scaleSelection;
+ wxString outputDirectory;
+ wxConfig* config;
+
+ void readConfigLong( wxString aKey, long* aLong );
+ void readConfigInt( wxString aKey, int* aInt,
+ int aMin, int aMax );
+ void readConfigDouble( wxString aKey, double* aDouble,
+ double aMin, double aMax );
+ void readConfigBool( wxString aKey, bool* aBool );
public:
PCB_PLOT_PARAMS();
+ /**
+ Function LoadSettings
+ loads plot settings from wxConfig system.
+ @param aConfig is a pointer to a wxConfig.
+ */
+ void LoadSettings( wxConfig* aConfig );
+ /**
+ Function SaveSettings
+ saves current plot settings to wxConfig system.
+ @param aConfig is a pointer to a wxConfig.
+ */
+ void SaveSettings( wxConfig* aConfig );
void SetOutputDirectory( wxString aDir ) { outputDirectory = aDir; };
wxString GetOutputDirectory() { return outputDirectory; };
- void SetSubtractMaskFromSilk( bool aSubtract ) { m_SubtractMaskFromSilk = aSubtract; };
- bool GetSubtractMaskFromSilk() { return m_SubtractMaskFromSilk; };
+ void SetUseGerberExtensions( bool aUse ) { useGerberExtensions = aUse; };
+ bool GetUseGerberExtensions() { return useGerberExtensions; };
+ void SetSubtractMaskFromSilk( bool aSubtract ) { subtractMaskFromSilk = aSubtract; };
+ bool GetSubtractMaskFromSilk() { return subtractMaskFromSilk; };
+ void SetLayerSelection( long aSelection ) { layerSelection = aSelection; };
+ long GetLayerSelection() { return layerSelection; };
+ void SetAuxOrigin( bool aAux ) { auxOrigin = aAux; };
+ bool GetAuxOrigin() { return auxOrigin; };
+ void SetScaleSelection( int aSelection ) { scaleSelection = aSelection; };
+ int GetScaleSelection() { return scaleSelection; };
};
extern PCB_PLOT_PARAMS g_PcbPlotOptions;
Follow ups
References