diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt
index 1d5db529e4..5d8f434860 100644
--- a/pcbnew/CMakeLists.txt
+++ b/pcbnew/CMakeLists.txt
@@ -154,6 +154,8 @@ set(PCBNEW_SRCS
netlist.cpp
onleftclick.cpp
onrightclick.cpp
+ pcb_plot_params.cpp
+ pcb_plot_params_keywords.cpp
pcbnew.cpp
pcbnew_config.cpp
pcbplot.cpp
@@ -256,6 +258,15 @@ make_lexer(
)
+# auto-generate pcb_plot_params_lexer.h and pcb_plot_params_keywords.cpp
+make_lexer(
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params.keywords
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params_lexer.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/pcb_plot_params_keywords.cpp
+ PCBPLOTPARAMS_T
+ )
+
+
###
# Create the pcbnew executable
###
diff --git a/pcbnew/dialogs/dialog_plot_base.cpp b/pcbnew/dialogs/dialog_plot_base.cpp
index f1248fde33..3388034faf 100644
--- a/pcbnew/dialogs/dialog_plot_base.cpp
+++ b/pcbnew/dialogs/dialog_plot_base.cpp
@@ -1,271 +1,271 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Sep 8 2010)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#include "dialog_plot_base.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
-{
- this->SetSizeHints( wxSize( -1,350 ), wxDefaultSize );
-
- wxBoxSizer* bMainSizer;
- bMainSizer = new wxBoxSizer( wxVERTICAL );
-
- wxBoxSizer* bUpperSizer;
- bUpperSizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer* bLeftSizer;
- bLeftSizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbLayersSizer;
- sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Layers:") ), wxHORIZONTAL );
-
- m_CopperLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Copper Layers:") ), wxVERTICAL );
-
- sbLayersSizer->Add( m_CopperLayersBoxSizer, 1, wxALL, 5 );
-
- m_TechnicalLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Technical Layers:") ), wxVERTICAL );
-
- sbLayersSizer->Add( m_TechnicalLayersBoxSizer, 1, wxALL, 5 );
-
- bLeftSizer->Add( sbLayersSizer, 1, wxEXPAND, 5 );
-
- m_useGerberExtensions = new wxCheckBox( this, wxID_ANY, _("Use proper Gerber extensions"), wxDefaultPosition, wxDefaultSize, 0 );
- m_useGerberExtensions->SetToolTip( _("Use Proper Gerber Extensions - .GBL, .GTL, etc...") );
-
- bLeftSizer->Add( m_useGerberExtensions, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_excludeEdgeLayerOpt = new wxCheckBox( this, wxID_ANY, _("Exclude pcb edge layer"), wxDefaultPosition, wxDefaultSize, 0 );
- m_excludeEdgeLayerOpt->SetToolTip( _("Exclude contents of the pcb edge layer from all other layers") );
-
- bLeftSizer->Add( m_excludeEdgeLayerOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_subtractMaskFromSilk = new wxCheckBox( this, wxID_ANY, _("Subtract mask from silk"), wxDefaultPosition, wxDefaultSize, 0 );
- m_subtractMaskFromSilk->SetToolTip( _("Remove silkscreen from areas without soldermask") );
-
- bLeftSizer->Add( m_subtractMaskFromSilk, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotSheetRef = new wxCheckBox( this, wxID_ANY, _("Plot sheet reference"), wxDefaultPosition, wxDefaultSize, 0 );
- bLeftSizer->Add( m_plotSheetRef, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotPads_on_Silkscreen = new wxCheckBox( this, ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, _("Plot pads on silkscreen"), wxDefaultPosition, wxDefaultSize, 0 );
- m_plotPads_on_Silkscreen->SetToolTip( _("Enable/disable print/plot pads on silkscreen layers\nWhen disable, pads are never potted on silkscreen layers\nWhen enable, pads are potted only if they appear on silkscreen layers") );
-
- bLeftSizer->Add( m_plotPads_on_Silkscreen, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotModuleValueOpt = new wxCheckBox( this, wxID_ANY, _("Plot module value"), wxDefaultPosition, wxDefaultSize, 0 );
- bLeftSizer->Add( m_plotModuleValueOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotModuleRefOpt = new wxCheckBox( this, ID_PRINT_REF, _("Plot module reference"), wxDefaultPosition, wxDefaultSize, 0 );
- bLeftSizer->Add( m_plotModuleRefOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotTextOther = new wxCheckBox( this, wxID_ANY, _("Plot other module texts"), wxDefaultPosition, wxDefaultSize, 0 );
- m_plotTextOther->SetToolTip( _("Enable/disable print/plot module field texts on silkscreen layers") );
-
- bLeftSizer->Add( m_plotTextOther, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_plotInvisibleText = new wxCheckBox( this, wxID_ANY, _("Force plot invisible texts"), wxDefaultPosition, wxDefaultSize, 0 );
- m_plotInvisibleText->SetToolTip( _("Force print/plot module invisible texts on silkscreen layers") );
-
- bLeftSizer->Add( m_plotInvisibleText, 0, wxALL, 5 );
-
- bUpperSizer->Add( bLeftSizer, 2, wxEXPAND, 5 );
-
- wxBoxSizer* bPlotOptionsSizer;
- bPlotOptionsSizer = new wxBoxSizer( wxVERTICAL );
-
- wxString m_drillShapeOptChoices[] = { _("No drill mark"), _("Small mark"), _("Actual hole") };
- int m_drillShapeOptNChoices = sizeof( m_drillShapeOptChoices ) / sizeof( wxString );
- m_drillShapeOpt = new wxRadioBox( this, wxID_ANY, _("Holes Options"), wxDefaultPosition, wxDefaultSize, m_drillShapeOptNChoices, m_drillShapeOptChoices, 1, wxRA_SPECIFY_COLS );
- m_drillShapeOpt->SetSelection( 2 );
- bPlotOptionsSizer->Add( m_drillShapeOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- wxString m_scaleOptChoices[] = { _("Auto scale"), _("Scale 1"), _("Scale 1.5"), _("Scale 2"), _("Scale 3") };
- int m_scaleOptNChoices = sizeof( m_scaleOptChoices ) / sizeof( wxString );
- m_scaleOpt = new wxRadioBox( this, wxID_ANY, _("Scale Opt"), wxDefaultPosition, wxDefaultSize, m_scaleOptNChoices, m_scaleOptChoices, 1, wxRA_SPECIFY_COLS );
- m_scaleOpt->SetSelection( 0 );
- bPlotOptionsSizer->Add( m_scaleOpt, 0, wxEXPAND|wxALL, 5 );
-
- wxString m_plotModeOptChoices[] = { _("Line"), _("Filled"), _("Sketch") };
- int m_plotModeOptNChoices = sizeof( m_plotModeOptChoices ) / sizeof( wxString );
- m_plotModeOpt = new wxRadioBox( this, wxID_ANY, _("Plot Mode"), wxDefaultPosition, wxDefaultSize, m_plotModeOptNChoices, m_plotModeOptChoices, 1, wxRA_SPECIFY_COLS );
- m_plotModeOpt->SetSelection( 0 );
- bPlotOptionsSizer->Add( m_plotModeOpt, 0, wxALL|wxEXPAND, 5 );
-
- wxString m_choicePlotOffsetChoices[] = { _("Absolute"), _("Auxiliary axis") };
- int m_choicePlotOffsetNChoices = sizeof( m_choicePlotOffsetChoices ) / sizeof( wxString );
- m_choicePlotOffset = new wxRadioBox( this, wxID_ANY, _("Plot Origin"), wxDefaultPosition, wxDefaultSize, m_choicePlotOffsetNChoices, m_choicePlotOffsetChoices, 1, wxRA_SPECIFY_COLS );
- m_choicePlotOffset->SetSelection( 0 );
- bPlotOptionsSizer->Add( m_choicePlotOffset, 0, wxALL|wxEXPAND, 5 );
-
- bUpperSizer->Add( bPlotOptionsSizer, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizerFmtPlot;
- bSizerFmtPlot = new wxBoxSizer( wxVERTICAL );
-
- wxString m_plotFormatOptChoices[] = { _("HPGL"), _("Gerber"), _("Postscript"), _("Postscript A4"), _("DXF export") };
- int m_plotFormatOptNChoices = sizeof( m_plotFormatOptChoices ) / sizeof( wxString );
- m_plotFormatOpt = new wxRadioBox( this, wxID_ANY, _("Plot Format"), wxDefaultPosition, wxDefaultSize, m_plotFormatOptNChoices, m_plotFormatOptChoices, 1, wxRA_SPECIFY_COLS );
- m_plotFormatOpt->SetSelection( 4 );
- bSizerFmtPlot->Add( m_plotFormatOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- wxStaticBoxSizer* m_HPGL_OptionsBox;
- m_HPGL_OptionsBox = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("HPGL Options:") ), wxVERTICAL );
-
- m_textPenSize = new wxStaticText( this, wxID_ANY, _("Pen size"), wxDefaultPosition, wxDefaultSize, 0 );
- m_textPenSize->Wrap( -1 );
- m_HPGL_OptionsBox->Add( m_textPenSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_HPGLPenSizeOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_HPGL_OptionsBox->Add( m_HPGLPenSizeOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticText3 = new wxStaticText( this, wxID_ANY, _("Pen Speed (cm/s)"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText3->Wrap( -1 );
- m_HPGL_OptionsBox->Add( m_staticText3, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_HPGLPenSpeedOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_HPGLPenSpeedOpt->SetToolTip( _("Set pen speed in cm/s") );
-
- m_HPGL_OptionsBox->Add( m_HPGLPenSpeedOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- m_textPenOvr = new wxStaticText( this, wxID_ANY, _("Pen ovr"), wxDefaultPosition, wxDefaultSize, 0 );
- m_textPenOvr->Wrap( -1 );
- m_HPGL_OptionsBox->Add( m_textPenOvr, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_HPGLPenOverlayOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_HPGLPenOverlayOpt->SetToolTip( _("Set plot overlay for filling") );
-
- m_HPGL_OptionsBox->Add( m_HPGLPenOverlayOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- bSizerFmtPlot->Add( m_HPGL_OptionsBox, 0, wxEXPAND, 5 );
-
- bUpperSizer->Add( bSizerFmtPlot, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bButtonsSizer;
- bButtonsSizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBoxSizer* sbSizerPlotOpt;
- sbSizerPlotOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Plot Options:") ), wxVERTICAL );
-
- m_plotPSNegativeOpt = new wxCheckBox( this, wxID_ANY, _("Plot negative"), wxDefaultPosition, wxDefaultSize, 0 );
- sbSizerPlotOpt->Add( m_plotPSNegativeOpt, 0, wxALL, 5 );
-
- m_plotMirrorOpt = new wxCheckBox( this, ID_MIROR_OPT, _("Plot mirror"), wxDefaultPosition, wxDefaultSize, 0 );
- sbSizerPlotOpt->Add( m_plotMirrorOpt, 0, wxALL, 5 );
-
- m_plotNoViaOnMaskOpt = new wxCheckBox( this, wxID_ANY, _("Vias on mask"), wxDefaultPosition, wxDefaultSize, 0 );
- m_plotNoViaOnMaskOpt->SetToolTip( _("Print/plot vias on mask layers. They are in this case not protected") );
-
- sbSizerPlotOpt->Add( m_plotNoViaOnMaskOpt, 0, wxALL, 5 );
-
- bButtonsSizer->Add( sbSizerPlotOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticText6 = new wxStaticText( this, wxID_ANY, _("Default pen size"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText6->Wrap( -1 );
- m_staticText6->SetToolTip( _("Pen size used to draw items that have no pen size specified.\nUsed mainly to draw items in sketch mode.") );
-
- bButtonsSizer->Add( m_staticText6, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_linesWidth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- bButtonsSizer->Add( m_linesWidth, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bButtonsSizer->Add( 0, 20, 1, wxEXPAND, 5 );
-
- m_staticText7 = new wxStaticText( this, wxID_ANY, _("X scale adjust"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText7->Wrap( -1 );
- bButtonsSizer->Add( m_staticText7, 0, wxRIGHT|wxLEFT, 5 );
-
- m_fineAdjustXscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- m_fineAdjustXscaleOpt->SetToolTip( _("Set X scale adjust for exact scale plotting") );
-
- bButtonsSizer->Add( m_fineAdjustXscaleOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
- m_staticText8 = new wxStaticText( this, wxID_ANY, _("Y scale adjust"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText8->Wrap( -1 );
- bButtonsSizer->Add( m_staticText8, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_fineAdjustYscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- bButtonsSizer->Add( m_fineAdjustYscaleOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
-
-
- bButtonsSizer->Add( 0, 20, 1, wxEXPAND, 5 );
-
- m_plotButton = new wxButton( this, wxID_ANY, _("Plot"), wxDefaultPosition, wxDefaultSize, 0 );
- m_plotButton->SetDefault();
- bButtonsSizer->Add( m_plotButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_buttonSaveOpt = new wxButton( this, ID_SAVE_OPT_PLOT, _("Save Options"), wxDefaultPosition, wxDefaultSize, 0 );
- bButtonsSizer->Add( m_buttonSaveOpt, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_buttonDrill = new wxButton( this, ID_CREATE_DRILL_FILE, _("Generate drill file"), wxDefaultPosition, wxDefaultSize, 0 );
- bButtonsSizer->Add( m_buttonDrill, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Quit"), wxDefaultPosition, wxDefaultSize, 0 );
- bButtonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
-
- bUpperSizer->Add( bButtonsSizer, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
-
- bMainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 );
-
- wxBoxSizer* bSizerDirChoice;
- bSizerDirChoice = new wxBoxSizer( wxVERTICAL );
-
- m_staticTextDir = new wxStaticText( this, wxID_ANY, _("Output Directory:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticTextDir->Wrap( -1 );
- bSizerDirChoice->Add( m_staticTextDir, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- wxBoxSizer* bSizerDirNmae;
- bSizerDirNmae = new wxBoxSizer( wxHORIZONTAL );
-
- m_outputDirectoryName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
- bSizerDirNmae->Add( m_outputDirectoryName, 1, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
-
- m_browseButton = new wxButton( this, wxID_ANY, _("Browse..."), wxDefaultPosition, wxDefaultSize, 0 );
- bSizerDirNmae->Add( m_browseButton, 0, wxRIGHT|wxLEFT, 5 );
-
- bSizerDirChoice->Add( bSizerDirNmae, 0, wxRIGHT|wxEXPAND, 5 );
-
- bMainSizer->Add( bSizerDirChoice, 0, wxEXPAND, 5 );
-
- m_staticText2 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText2->Wrap( -1 );
- bMainSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
-
- m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
- m_messagesBox->SetMinSize( wxSize( -1,120 ) );
-
- bMainSizer->Add( m_messagesBox, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
-
- this->SetSizer( bMainSizer );
- this->Layout();
-
- // Connect Events
- this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
- this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
- m_plotFormatOpt->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
- m_plotButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
- m_buttonSaveOpt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::savePlotOptions ), NULL, this );
- m_buttonDrill->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
- m_buttonQuit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnQuit ), NULL, this );
- m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
-}
-
-DIALOG_PLOT_BASE::~DIALOG_PLOT_BASE()
-{
- // Disconnect Events
- this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
- this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
- m_plotFormatOpt->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
- m_plotButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
- m_buttonSaveOpt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::savePlotOptions ), NULL, this );
- m_buttonDrill->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
- m_buttonQuit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnQuit ), NULL, this );
- m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
-
-}
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 18 2010)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "dialog_plot_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
+{
+ this->SetSizeHints( wxSize( -1,350 ), wxDefaultSize );
+
+ wxBoxSizer* bMainSizer;
+ bMainSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxBoxSizer* bUpperSizer;
+ bUpperSizer = new wxBoxSizer( wxHORIZONTAL );
+
+ wxBoxSizer* bLeftSizer;
+ bLeftSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbLayersSizer;
+ sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Layers") ), wxHORIZONTAL );
+
+ m_CopperLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Copper Layers") ), wxVERTICAL );
+
+ sbLayersSizer->Add( m_CopperLayersBoxSizer, 1, wxALL, 5 );
+
+ m_TechnicalLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Technical Layers") ), wxVERTICAL );
+
+ sbLayersSizer->Add( m_TechnicalLayersBoxSizer, 1, wxALL, 5 );
+
+ bLeftSizer->Add( sbLayersSizer, 1, wxEXPAND, 5 );
+
+ m_useGerberExtensions = new wxCheckBox( this, wxID_ANY, _("Use proper Gerber extensions"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_useGerberExtensions->SetToolTip( _("Use Proper Gerber Extensions - .GBL, .GTL, etc...") );
+
+ bLeftSizer->Add( m_useGerberExtensions, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_excludeEdgeLayerOpt = new wxCheckBox( this, wxID_ANY, _("Exclude pcb edge layer"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_excludeEdgeLayerOpt->SetToolTip( _("Exclude contents of the pcb edge layer from all other layers") );
+
+ bLeftSizer->Add( m_excludeEdgeLayerOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_subtractMaskFromSilk = new wxCheckBox( this, wxID_ANY, _("Subtract mask from silk"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_subtractMaskFromSilk->SetToolTip( _("Remove silkscreen from areas without soldermask") );
+
+ bLeftSizer->Add( m_subtractMaskFromSilk, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotSheetRef = new wxCheckBox( this, wxID_ANY, _("Plot sheet reference"), wxDefaultPosition, wxDefaultSize, 0 );
+ bLeftSizer->Add( m_plotSheetRef, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotPads_on_Silkscreen = new wxCheckBox( this, ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, _("Plot pads on silkscreen"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_plotPads_on_Silkscreen->SetToolTip( _("Enable/disable print/plot pads on silkscreen layers\nWhen disable, pads are never potted on silkscreen layers\nWhen enable, pads are potted only if they appear on silkscreen layers") );
+
+ bLeftSizer->Add( m_plotPads_on_Silkscreen, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotModuleValueOpt = new wxCheckBox( this, wxID_ANY, _("Plot module value"), wxDefaultPosition, wxDefaultSize, 0 );
+ bLeftSizer->Add( m_plotModuleValueOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotModuleRefOpt = new wxCheckBox( this, ID_PRINT_REF, _("Plot module reference"), wxDefaultPosition, wxDefaultSize, 0 );
+ bLeftSizer->Add( m_plotModuleRefOpt, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotTextOther = new wxCheckBox( this, wxID_ANY, _("Plot other module texts"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_plotTextOther->SetToolTip( _("Enable/disable print/plot module field texts on silkscreen layers") );
+
+ bLeftSizer->Add( m_plotTextOther, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_plotInvisibleText = new wxCheckBox( this, wxID_ANY, _("Force plot invisible texts"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_plotInvisibleText->SetToolTip( _("Force print/plot module invisible texts on silkscreen layers") );
+
+ bLeftSizer->Add( m_plotInvisibleText, 0, wxALL, 5 );
+
+ bUpperSizer->Add( bLeftSizer, 2, wxEXPAND, 5 );
+
+ wxBoxSizer* bPlotOptionsSizer;
+ bPlotOptionsSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxString m_drillShapeOptChoices[] = { _("No drill mark"), _("Small mark"), _("Actual hole") };
+ int m_drillShapeOptNChoices = sizeof( m_drillShapeOptChoices ) / sizeof( wxString );
+ m_drillShapeOpt = new wxRadioBox( this, wxID_ANY, _("Hole Options"), wxDefaultPosition, wxDefaultSize, m_drillShapeOptNChoices, m_drillShapeOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_drillShapeOpt->SetSelection( 0 );
+ bPlotOptionsSizer->Add( m_drillShapeOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxString m_scaleOptChoices[] = { _("Auto scale"), _("Scale 1"), _("Scale 1.5"), _("Scale 2"), _("Scale 3") };
+ int m_scaleOptNChoices = sizeof( m_scaleOptChoices ) / sizeof( wxString );
+ m_scaleOpt = new wxRadioBox( this, wxID_ANY, _("Scale"), wxDefaultPosition, wxDefaultSize, m_scaleOptNChoices, m_scaleOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_scaleOpt->SetSelection( 0 );
+ bPlotOptionsSizer->Add( m_scaleOpt, 0, wxEXPAND|wxALL, 5 );
+
+ wxString m_plotModeOptChoices[] = { _("Line"), _("Filled"), _("Sketch") };
+ int m_plotModeOptNChoices = sizeof( m_plotModeOptChoices ) / sizeof( wxString );
+ m_plotModeOpt = new wxRadioBox( this, wxID_ANY, _("Plot Mode"), wxDefaultPosition, wxDefaultSize, m_plotModeOptNChoices, m_plotModeOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_plotModeOpt->SetSelection( 0 );
+ bPlotOptionsSizer->Add( m_plotModeOpt, 0, wxALL|wxEXPAND, 5 );
+
+ wxString m_choicePlotOffsetChoices[] = { _("Absolute"), _("Auxiliary axis") };
+ int m_choicePlotOffsetNChoices = sizeof( m_choicePlotOffsetChoices ) / sizeof( wxString );
+ m_choicePlotOffset = new wxRadioBox( this, wxID_ANY, _("Plot Origin"), wxDefaultPosition, wxDefaultSize, m_choicePlotOffsetNChoices, m_choicePlotOffsetChoices, 1, wxRA_SPECIFY_COLS );
+ m_choicePlotOffset->SetSelection( 1 );
+ bPlotOptionsSizer->Add( m_choicePlotOffset, 0, wxALL|wxEXPAND, 5 );
+
+ bUpperSizer->Add( bPlotOptionsSizer, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerFmtPlot;
+ bSizerFmtPlot = new wxBoxSizer( wxVERTICAL );
+
+ wxString m_plotFormatOptChoices[] = { _("HPGL"), _("Gerber"), _("Postscript"), _("Postscript A4"), _("DXF export") };
+ int m_plotFormatOptNChoices = sizeof( m_plotFormatOptChoices ) / sizeof( wxString );
+ m_plotFormatOpt = new wxRadioBox( this, wxID_ANY, _("Plot Format"), wxDefaultPosition, wxDefaultSize, m_plotFormatOptNChoices, m_plotFormatOptChoices, 1, wxRA_SPECIFY_COLS );
+ m_plotFormatOpt->SetSelection( 1 );
+ bSizerFmtPlot->Add( m_plotFormatOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ wxStaticBoxSizer* m_HPGL_OptionsBox;
+ m_HPGL_OptionsBox = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("HPGL Options") ), wxVERTICAL );
+
+ m_textPenSize = new wxStaticText( this, wxID_ANY, _("Pen size"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_textPenSize->Wrap( -1 );
+ m_HPGL_OptionsBox->Add( m_textPenSize, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_HPGLPenSizeOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_HPGL_OptionsBox->Add( m_HPGLPenSizeOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticText3 = new wxStaticText( this, wxID_ANY, _("Pen speed (cm/s)"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText3->Wrap( -1 );
+ m_HPGL_OptionsBox->Add( m_staticText3, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_HPGLPenSpeedOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_HPGLPenSpeedOpt->SetToolTip( _("Set pen speed in cm/s") );
+
+ m_HPGL_OptionsBox->Add( m_HPGLPenSpeedOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ m_textPenOvr = new wxStaticText( this, wxID_ANY, _("Pen overlay"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_textPenOvr->Wrap( -1 );
+ m_HPGL_OptionsBox->Add( m_textPenOvr, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_HPGLPenOverlayOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_HPGLPenOverlayOpt->SetToolTip( _("Set plot overlay for filling") );
+
+ m_HPGL_OptionsBox->Add( m_HPGLPenOverlayOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ bSizerFmtPlot->Add( m_HPGL_OptionsBox, 0, wxEXPAND, 5 );
+
+ bUpperSizer->Add( bSizerFmtPlot, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bButtonsSizer;
+ bButtonsSizer = new wxBoxSizer( wxVERTICAL );
+
+ wxStaticBoxSizer* sbSizerPlotOpt;
+ sbSizerPlotOpt = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Plot Options") ), wxVERTICAL );
+
+ m_plotPSNegativeOpt = new wxCheckBox( this, wxID_ANY, _("Plot negative"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizerPlotOpt->Add( m_plotPSNegativeOpt, 0, wxALL, 5 );
+
+ m_plotMirrorOpt = new wxCheckBox( this, ID_MIROR_OPT, _("Plot mirror"), wxDefaultPosition, wxDefaultSize, 0 );
+ sbSizerPlotOpt->Add( m_plotMirrorOpt, 0, wxALL, 5 );
+
+ m_plotNoViaOnMaskOpt = new wxCheckBox( this, wxID_ANY, _("Vias on mask"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_plotNoViaOnMaskOpt->SetToolTip( _("Print/plot vias on mask layers. They are in this case not protected") );
+
+ sbSizerPlotOpt->Add( m_plotNoViaOnMaskOpt, 0, wxALL, 5 );
+
+ bButtonsSizer->Add( sbSizerPlotOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticText6 = new wxStaticText( this, wxID_ANY, _("Default Pen Size:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText6->Wrap( -1 );
+ m_staticText6->SetToolTip( _("Pen size used to draw items that have no pen size specified.\nUsed mainly to draw items in sketch mode.") );
+
+ bButtonsSizer->Add( m_staticText6, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_linesWidth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bButtonsSizer->Add( m_linesWidth, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bButtonsSizer->Add( 0, 20, 1, wxEXPAND, 5 );
+
+ m_staticText7 = new wxStaticText( this, wxID_ANY, _("X Scale Adjust:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText7->Wrap( -1 );
+ bButtonsSizer->Add( m_staticText7, 0, wxRIGHT|wxLEFT, 5 );
+
+ m_fineAdjustXscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ m_fineAdjustXscaleOpt->SetToolTip( _("Set X scale adjust for exact scale plotting") );
+
+ bButtonsSizer->Add( m_fineAdjustXscaleOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+ m_staticText8 = new wxStaticText( this, wxID_ANY, _("Y Scale Adjust:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText8->Wrap( -1 );
+ bButtonsSizer->Add( m_staticText8, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_fineAdjustYscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bButtonsSizer->Add( m_fineAdjustYscaleOpt, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
+
+
+ bButtonsSizer->Add( 0, 20, 1, wxEXPAND, 5 );
+
+ m_plotButton = new wxButton( this, wxID_ANY, _("Plot"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_plotButton->SetDefault();
+ bButtonsSizer->Add( m_plotButton, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_buttonSaveOpt = new wxButton( this, ID_SAVE_OPT_PLOT, _("Apply Settings"), wxDefaultPosition, wxDefaultSize, 0 );
+ bButtonsSizer->Add( m_buttonSaveOpt, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_buttonDrill = new wxButton( this, ID_CREATE_DRILL_FILE, _("Generate Drill File"), wxDefaultPosition, wxDefaultSize, 0 );
+ bButtonsSizer->Add( m_buttonDrill, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Quit"), wxDefaultPosition, wxDefaultSize, 0 );
+ bButtonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND, 5 );
+
+ bUpperSizer->Add( bButtonsSizer, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
+
+ bMainSizer->Add( bUpperSizer, 0, wxEXPAND, 5 );
+
+ wxBoxSizer* bSizerDirChoice;
+ bSizerDirChoice = new wxBoxSizer( wxVERTICAL );
+
+ m_staticTextDir = new wxStaticText( this, wxID_ANY, _("Output Directory:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextDir->Wrap( -1 );
+ bSizerDirChoice->Add( m_staticTextDir, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ wxBoxSizer* bSizerDirNmae;
+ bSizerDirNmae = new wxBoxSizer( wxHORIZONTAL );
+
+ m_outputDirectoryName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDirNmae->Add( m_outputDirectoryName, 1, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
+
+ m_browseButton = new wxButton( this, wxID_ANY, _("Browse..."), wxDefaultPosition, wxDefaultSize, 0 );
+ bSizerDirNmae->Add( m_browseButton, 0, wxRIGHT|wxLEFT, 5 );
+
+ bSizerDirChoice->Add( bSizerDirNmae, 0, wxRIGHT|wxEXPAND, 5 );
+
+ bMainSizer->Add( bSizerDirChoice, 0, wxEXPAND, 5 );
+
+ m_staticText2 = new wxStaticText( this, wxID_ANY, _("Messages:"), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticText2->Wrap( -1 );
+ bMainSizer->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
+
+ m_messagesBox = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
+ m_messagesBox->SetMinSize( wxSize( -1,120 ) );
+
+ bMainSizer->Add( m_messagesBox, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
+
+ this->SetSizer( bMainSizer );
+ this->Layout();
+
+ // Connect Events
+ this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
+ this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
+ m_plotFormatOpt->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
+ m_plotButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
+ m_buttonSaveOpt->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::applyPlotSettings ), NULL, this );
+ m_buttonDrill->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
+ m_buttonQuit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnQuit ), NULL, this );
+ m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
+}
+
+DIALOG_PLOT_BASE::~DIALOG_PLOT_BASE()
+{
+ // Disconnect Events
+ this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PLOT_BASE::OnCloseWindow ) );
+ this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
+ m_plotFormatOpt->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
+ m_plotButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::Plot ), NULL, this );
+ m_buttonSaveOpt->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::applyPlotSettings ), NULL, this );
+ m_buttonDrill->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::CreateDrillFile ), NULL, this );
+ m_buttonQuit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnQuit ), NULL, this );
+ m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
+
+}
diff --git a/pcbnew/dialogs/dialog_plot_base.fbp b/pcbnew/dialogs/dialog_plot_base.fbp
index 44c1c30a11..bcf008dd51 100644
--- a/pcbnew/dialogs/dialog_plot_base.fbp
+++ b/pcbnew/dialogs/dialog_plot_base.fbp
@@ -1,2449 +1,3542 @@
-
-
-
-
-
+
+
+
+
+
+ C++
+ 1
+ source_name
+ 0
+ UTF-8
+ connect
+ dialog_plot_base
+ 1000
+ none
+ 1
+ Dialog_Plot_base
+
+ .
+
+ 1
+ 1
+ 1
+ 0
+
+ 1
+ 1
+ 1
+ 1
+ 0
+
+
+
+ 1
+
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+ impl_virtual
+
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ -1,350
+ 1
+ DIALOG_PLOT_BASE
+ 1
+
+
+ 1
+
+
+ Resizable
+
+ 1
+ 571,616
+ wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER
+
+ Plot
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+ OnCloseWindow
+
+
+
+
+
+ OnInitDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bMainSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bUpperSizer
+ wxHORIZONTAL
+ none
+
+ 5
+ wxEXPAND
+ 2
+
+
+ bLeftSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND
+ 1
+
+ wxID_ANY
+ Layers
+
+ sbLayersSizer
+ wxHORIZONTAL
+ none
+
+
+ 5
+ wxALL
+ 1
+
+ wxID_ANY
+ Copper Layers
+
+ m_CopperLayersBoxSizer
+ wxVERTICAL
+ protected
+
+
+
+
+ 5
+ wxALL
+ 1
+
+ wxID_ANY
+ Technical Layers
+
+ m_TechnicalLayersBoxSizer
+ wxVERTICAL
+ protected
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Use proper Gerber extensions
+
+ 0
+
+ 0
+
+ 1
+ m_useGerberExtensions
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Use Proper Gerber Extensions - .GBL, .GTL, etc...
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Exclude pcb edge layer
+
+ 0
+
+ 0
+
+ 1
+ m_excludeEdgeLayerOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Exclude contents of the pcb edge layer from all other layers
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Subtract mask from silk
+
+ 0
+
+ 0
+
+ 1
+ m_subtractMaskFromSilk
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Remove silkscreen from areas without soldermask
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot sheet reference
+
+ 0
+
+ 0
+
+ 1
+ m_plotSheetRef
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ ID_ALLOW_PRINT_PAD_ON_SILKSCREEN
+ Plot pads on silkscreen
+
+ 0
+
+ 0
+
+ 1
+ m_plotPads_on_Silkscreen
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Enable/disable print/plot pads on silkscreen layers
When disable, pads are never potted on silkscreen layers
When enable, pads are potted only if they appear on silkscreen layers
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot module value
+
+ 0
+
+ 0
+
+ 1
+ m_plotModuleValueOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ ID_PRINT_REF
+ Plot module reference
+
+ 0
+
+ 0
+
+ 1
+ m_plotModuleRefOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot other module texts
+
+ 0
+
+ 0
+
+ 1
+ m_plotTextOther
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Enable/disable print/plot module field texts on silkscreen layers
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Force plot invisible texts
+
+ 0
+
+ 0
+
+ 1
+ m_plotInvisibleText
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Force print/plot module invisible texts on silkscreen layers
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bPlotOptionsSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ "No drill mark" "Small mark" "Actual hole"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Hole Options
+
+ 1
+ 0
+
+ 0
+
+ 1
+ m_drillShapeOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 0
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ "Auto scale" "Scale 1" "Scale 1.5" "Scale 2" "Scale 3"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Scale
+
+ 1
+ 0
+
+ 0
+
+ 1
+ m_scaleOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 0
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ "Line" "Filled" "Sketch"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot Mode
+
+ 1
+ 0
+
+ 0
+
+ 1
+ m_plotModeOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 0
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ "Absolute" "Auxiliary axis"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot Origin
+
+ 1
+ 0
+
+ 0
+
+ 1
+ m_choicePlotOffset
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bSizerFmtPlot
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ "HPGL" "Gerber" "Postscript" "Postscript A4" "DXF export"
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot Format
+
+ 1
+ 0
+
+ 0
+
+ 1
+ m_plotFormatOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+ 1
+
+ wxRA_SPECIFY_COLS
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SetPlotFormat
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+ wxID_ANY
+ HPGL Options
+
+ m_HPGL_OptionsBox
+ wxVERTICAL
+ none
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pen size
+
+ 0
+
+ 0
+
+ 1
+ m_textPenSize
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_HPGLPenSizeOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pen speed (cm/s)
+
+ 0
+
+ 0
+
+ 1
+ m_staticText3
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_HPGLPenSpeedOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Set pen speed in cm/s
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Pen overlay
+
+ 0
+
+ 0
+
+ 1
+ m_textPenOvr
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_HPGLPenOverlayOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Set plot overlay for filling
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALIGN_CENTER_VERTICAL|wxEXPAND
+ 0
+
+
+ bButtonsSizer
+ wxVERTICAL
+ none
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ wxID_ANY
+ Plot Options
+
+ sbSizerPlotOpt
+ wxVERTICAL
+ none
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot negative
+
+ 0
+
+ 0
+
+ 1
+ m_plotPSNegativeOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ ID_MIROR_OPT
+ Plot mirror
+
+ 0
+
+ 0
+
+ 1
+ m_plotMirrorOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Vias on mask
+
+ 0
+
+ 0
+
+ 1
+ m_plotNoViaOnMaskOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Print/plot vias on mask layers. They are in this case not protected
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Default Pen Size:
+
+ 0
+
+ 0
+
+ 1
+ m_staticText6
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Pen size used to draw items that have no pen size specified.
Used mainly to draw items in sketch mode.
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_linesWidth
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 20
+ protected
+ 0
+
+
+
+ 5
+ wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ X Scale Adjust:
+
+ 0
+
+ 0
+
+ 1
+ m_staticText7
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_fineAdjustXscaleOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+ Set X scale adjust for exact scale plotting
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Y Scale Adjust:
+
+ 0
+
+ 0
+
+ 1
+ m_staticText8
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_fineAdjustYscaleOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 1
+
+ 20
+ protected
+ 0
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Plot
+
+ 0
+
+ 0
+
+ 1
+ m_plotButton
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ Plot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ ID_SAVE_OPT_PLOT
+ Apply Settings
+
+ 0
+
+ 0
+
+ 1
+ m_buttonSaveOpt
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ applyPlotSettings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ ID_CREATE_DRILL_FILE
+ Generate Drill File
+
+ 0
+
+ 0
+
+ 1
+ m_buttonDrill
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ CreateDrillFile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxALL|wxALIGN_CENTER_HORIZONTAL|wxEXPAND
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_CANCEL
+ Quit
+
+ 0
+
+ 0
+
+ 1
+ m_buttonQuit
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ OnQuit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxEXPAND
+ 0
+
+
+ bSizerDirChoice
+ wxVERTICAL
+ none
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Output Directory:
+
+ 0
+
+ 0
+
+ 1
+ m_staticTextDir
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxRIGHT|wxEXPAND
+ 0
+
+
+ bSizerDirNmae
+ wxHORIZONTAL
+ none
+
+ 5
+ wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+
+ 1
+ m_outputDirectoryName
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Browse...
+
+ 0
+
+ 0
+
+ 1
+ m_browseButton
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ OnOutputDirectoryBrowseClicked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxTOP|wxRIGHT|wxLEFT
+ 0
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+ Messages:
+
+ 0
+
+ 0
+
+ 1
+ m_staticText2
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5
+ wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND
+ 1
+
+ 1
+ 1
+ 1
+ 1
+
+
+
+ 1
+ 0
+ 1
+
+ 1
+ 0
+ Dock
+ 0
+ Left
+ 1
+
+ 1
+
+ 0
+ 0
+ wxID_ANY
+
+ 0
+
+ 0
+ 0
+ -1,120
+ 1
+ m_messagesBox
+ 1
+
+
+ protected
+ 1
+
+
+ Resizable
+
+ 1
+
+ wxTE_MULTILINE
+
+ 0
+
+
+ wxFILTER_NONE
+ wxDefaultValidator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pcbnew/dialogs/dialog_plot_base.h b/pcbnew/dialogs/dialog_plot_base.h
index c30ae90bb0..5a8889a1e7 100644
--- a/pcbnew/dialogs/dialog_plot_base.h
+++ b/pcbnew/dialogs/dialog_plot_base.h
@@ -1,107 +1,107 @@
-///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version Sep 8 2010)
-// http://www.wxformbuilder.org/
-//
-// PLEASE DO "NOT" EDIT THIS FILE!
-///////////////////////////////////////////////////////////////////////////
-
-#ifndef __dialog_plot_base__
-#define __dialog_plot_base__
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-///////////////////////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////////////////////////
-/// Class DIALOG_PLOT_BASE
-///////////////////////////////////////////////////////////////////////////////
-class DIALOG_PLOT_BASE : public wxDialog
-{
- private:
-
- protected:
- enum
- {
- ID_ALLOW_PRINT_PAD_ON_SILKSCREEN = 1000,
- ID_PRINT_REF,
- ID_MIROR_OPT,
- ID_SAVE_OPT_PLOT,
- ID_CREATE_DRILL_FILE,
- };
-
- wxStaticBoxSizer* m_CopperLayersBoxSizer;
- wxStaticBoxSizer* m_TechnicalLayersBoxSizer;
- wxCheckBox* m_useGerberExtensions;
- wxCheckBox* m_excludeEdgeLayerOpt;
- wxCheckBox* m_subtractMaskFromSilk;
- wxCheckBox* m_plotSheetRef;
- wxCheckBox* m_plotPads_on_Silkscreen;
- wxCheckBox* m_plotModuleValueOpt;
- wxCheckBox* m_plotModuleRefOpt;
- wxCheckBox* m_plotTextOther;
- wxCheckBox* m_plotInvisibleText;
- wxRadioBox* m_drillShapeOpt;
- wxRadioBox* m_scaleOpt;
- wxRadioBox* m_plotModeOpt;
- wxRadioBox* m_choicePlotOffset;
- wxRadioBox* m_plotFormatOpt;
- wxStaticText* m_textPenSize;
- wxTextCtrl* m_HPGLPenSizeOpt;
- wxStaticText* m_staticText3;
- wxTextCtrl* m_HPGLPenSpeedOpt;
- wxStaticText* m_textPenOvr;
- wxTextCtrl* m_HPGLPenOverlayOpt;
- wxCheckBox* m_plotPSNegativeOpt;
- wxCheckBox* m_plotMirrorOpt;
- wxCheckBox* m_plotNoViaOnMaskOpt;
- wxStaticText* m_staticText6;
- wxTextCtrl* m_linesWidth;
-
- wxStaticText* m_staticText7;
- wxTextCtrl* m_fineAdjustXscaleOpt;
- wxStaticText* m_staticText8;
- wxTextCtrl* m_fineAdjustYscaleOpt;
-
- wxButton* m_plotButton;
- wxButton* m_buttonSaveOpt;
- wxButton* m_buttonDrill;
- wxButton* m_buttonQuit;
- wxStaticText* m_staticTextDir;
- wxTextCtrl* m_outputDirectoryName;
- wxButton* m_browseButton;
- wxStaticText* m_staticText2;
- wxTextCtrl* m_messagesBox;
-
- // Virtual event handlers, overide them in your derived class
- virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
- virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
- virtual void SetPlotFormat( wxCommandEvent& event ) { event.Skip(); }
- virtual void Plot( wxCommandEvent& event ) { event.Skip(); }
- virtual void savePlotOptions( wxCommandEvent& event ) { event.Skip(); }
- virtual void CreateDrillFile( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnQuit( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
-
-
- public:
-
- DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Plot"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,616 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
- ~DIALOG_PLOT_BASE();
-
-};
-
-#endif //__dialog_plot_base__
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version Nov 18 2010)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO "NOT" EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#ifndef __dialog_plot_base__
+#define __dialog_plot_base__
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class DIALOG_PLOT_BASE
+///////////////////////////////////////////////////////////////////////////////
+class DIALOG_PLOT_BASE : public wxDialog
+{
+ private:
+
+ protected:
+ enum
+ {
+ ID_ALLOW_PRINT_PAD_ON_SILKSCREEN = 1000,
+ ID_PRINT_REF,
+ ID_MIROR_OPT,
+ ID_SAVE_OPT_PLOT,
+ ID_CREATE_DRILL_FILE,
+ };
+
+ wxStaticBoxSizer* m_CopperLayersBoxSizer;
+ wxStaticBoxSizer* m_TechnicalLayersBoxSizer;
+ wxCheckBox* m_useGerberExtensions;
+ wxCheckBox* m_excludeEdgeLayerOpt;
+ wxCheckBox* m_subtractMaskFromSilk;
+ wxCheckBox* m_plotSheetRef;
+ wxCheckBox* m_plotPads_on_Silkscreen;
+ wxCheckBox* m_plotModuleValueOpt;
+ wxCheckBox* m_plotModuleRefOpt;
+ wxCheckBox* m_plotTextOther;
+ wxCheckBox* m_plotInvisibleText;
+ wxRadioBox* m_drillShapeOpt;
+ wxRadioBox* m_scaleOpt;
+ wxRadioBox* m_plotModeOpt;
+ wxRadioBox* m_choicePlotOffset;
+ wxRadioBox* m_plotFormatOpt;
+ wxStaticText* m_textPenSize;
+ wxTextCtrl* m_HPGLPenSizeOpt;
+ wxStaticText* m_staticText3;
+ wxTextCtrl* m_HPGLPenSpeedOpt;
+ wxStaticText* m_textPenOvr;
+ wxTextCtrl* m_HPGLPenOverlayOpt;
+ wxCheckBox* m_plotPSNegativeOpt;
+ wxCheckBox* m_plotMirrorOpt;
+ wxCheckBox* m_plotNoViaOnMaskOpt;
+ wxStaticText* m_staticText6;
+ wxTextCtrl* m_linesWidth;
+
+ wxStaticText* m_staticText7;
+ wxTextCtrl* m_fineAdjustXscaleOpt;
+ wxStaticText* m_staticText8;
+ wxTextCtrl* m_fineAdjustYscaleOpt;
+
+ wxButton* m_plotButton;
+ wxButton* m_buttonSaveOpt;
+ wxButton* m_buttonDrill;
+ wxButton* m_buttonQuit;
+ wxStaticText* m_staticTextDir;
+ wxTextCtrl* m_outputDirectoryName;
+ wxButton* m_browseButton;
+ wxStaticText* m_staticText2;
+ wxTextCtrl* m_messagesBox;
+
+ // Virtual event handlers, overide them in your derived class
+ virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); }
+ virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
+ virtual void SetPlotFormat( wxCommandEvent& event ) { event.Skip(); }
+ virtual void Plot( wxCommandEvent& event ) { event.Skip(); }
+ virtual void applyPlotSettings( wxCommandEvent& event ) { event.Skip(); }
+ virtual void CreateDrillFile( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnQuit( wxCommandEvent& event ) { event.Skip(); }
+ virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
+
+
+ public:
+
+ DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Plot"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 571,616 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
+ ~DIALOG_PLOT_BASE();
+
+};
+
+#endif //__dialog_plot_base__
diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp
index 1cc8525130..e9a9dd5a9d 100644
--- a/pcbnew/ioascii.cpp
+++ b/pcbnew/ioascii.cpp
@@ -25,6 +25,8 @@
#include "pcbnew_id.h"
#include "richio.h"
+#include "pcb_plot_params.h"
+
/* ASCII format of structures:
*
* Structure PAD:
@@ -314,6 +316,27 @@ int WinEDA_BasePcbFrame::ReadSetup( LINE_READER* aReader )
while( aReader->ReadLine() )
{
Line = aReader->Line();
+
+ if( strnicmp( Line, "PcbPlotParams", 13 ) == 0 )
+ {
+ PCB_PLOT_PARAMS_PARSER parser( &Line[13], aReader->GetSource() );
+
+ try
+ {
+ g_PcbPlotOptions.Parse( &parser );
+ }
+ catch( IO_ERROR& e )
+ {
+ wxString msg;
+ msg.Printf( wxT( "Error reading PcbPlotParams from %s:\n%s" ),
+ aReader->GetSource().GetData(),
+ e.errorText.GetData() );
+ wxMessageBox( msg, wxT( "Open Board File" ), wxICON_ERROR );
+ }
+
+ continue;
+ }
+
strtok( Line, " =\n\r" );
data = strtok( NULL, " =\n\r" );
@@ -576,7 +599,6 @@ int WinEDA_BasePcbFrame::ReadSetup( LINE_READER* aReader )
continue;
}
-
#endif
}
@@ -728,6 +750,15 @@ static int WriteSetup( FILE* aFile, WinEDA_BasePcbFrame* aFrame, BOARD* aBoard )
aFrame->m_Auxiliary_Axis_Position.x,
aFrame->m_Auxiliary_Axis_Position.y );
+ STRING_FORMATTER sf;
+
+ g_PcbPlotOptions.Format( &sf, 0 );
+
+ wxString record = CONV_FROM_UTF8( sf.GetString().c_str() );
+ record.Replace( wxT("\n"), wxT(""), true );
+ record.Replace( wxT(" "), wxT(" "), true);
+ fprintf( aFile, "PcbPlotParams %s\n", CONV_TO_UTF8( record ) );
+
fprintf( aFile, "$EndSETUP\n\n" );
return 1;
}
diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp
new file mode 100644
index 0000000000..09810151d5
--- /dev/null
+++ b/pcbnew/pcb_plot_params.cpp
@@ -0,0 +1,387 @@
+
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2011 Kicad Developers, see change_log.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 2
+ * 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, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include "pcb_plot_params.h"
+#include "pcb_plot_params_lexer.h"
+#include "layers_id_colors_and_visibility.h"
+#include "plot_common.h"
+#include "macros.h"
+
+extern int g_DrawDefaultLineThickness;
+
+PCB_PLOT_PARAMS g_PcbPlotOptions;
+
+using namespace PCBPLOTPARAMS_T;
+
+static const char* GetTokenName( T aTok )
+{
+ return PCB_PLOT_PARAMS_LEXER::TokenName( aTok );
+}
+
+
+// PCB_PLOT_PARAMS
+
+PCB_PLOT_PARAMS::PCB_PLOT_PARAMS()
+{
+ 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;
+ useAuxOrigin = 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::Format( OUTPUTFORMATTER* aFormatter,
+ int aNestLevel ) const throw( IO_ERROR )
+{
+ const char* falseStr = GetTokenName( T_false );
+ const char* trueStr = GetTokenName( T_true );
+
+ aFormatter->Print( aNestLevel, "(%s", GetTokenName( T_pcbplotparams ) );
+ aFormatter->Print( aNestLevel+1, "(%s %ld)\n", GetTokenName( T_layerselection ),
+ layerSelection );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_usegerberextensions ),
+ useGerberExtensions ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_excludeedgelayer ),
+ m_ExcludeEdgeLayer ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_linewidth ),
+ m_PlotLineWidth );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_plotframeref ),
+ m_PlotFrameRef ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_viasonmask ),
+ m_PlotViaOnMaskLayer ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_mode ),
+ m_PlotMode );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_useauxorigin ),
+ useAuxOrigin ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_hpglpennumber ),
+ m_HPGLPenNum );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_hpglpenspeed ),
+ m_HPGLPenSpeed );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_hpglpendiameter ),
+ m_HPGLPenDiam );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_hpglpenoverlay ),
+ m_HPGLPenOvr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_pscolor ),
+ m_PlotPSColorOpt ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_psnegative ),
+ m_PlotPSNegative ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_plotreference ),
+ m_PlotReference ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_plotvalue ),
+ m_PlotValue ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_plotothertext ),
+ m_PlotTextOther ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_plotinvisibletext ),
+ m_PlotInvisibleTexts ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_padsonsilk ),
+ m_PlotPadsOnSilkLayer ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_subtractmaskfromsilk ),
+ subtractMaskFromSilk ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_outputformat ),
+ m_PlotFormat );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_mirror ),
+ m_PlotMirror ? trueStr : falseStr );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_drillshape ),
+ m_DrillShapeOpt );
+ aFormatter->Print( aNestLevel+1, "(%s %d)\n", GetTokenName( T_scaleselection ),
+ scaleSelection );
+ aFormatter->Print( aNestLevel+1, "(%s %s)\n", GetTokenName( T_outputdirectory ),
+ aFormatter->Quoted( CONV_TO_UTF8( outputDirectory ) ).c_str() );
+ aFormatter->Print( 0, ")\n" );
+}
+
+
+void PCB_PLOT_PARAMS::Parse( PCB_PLOT_PARAMS_PARSER* aParser ) throw( IO_ERROR, PARSE_ERROR )
+{
+ aParser->Parse( this );
+}
+
+
+PCB_PLOT_PARAMS& PCB_PLOT_PARAMS::operator=( const PCB_PLOT_PARAMS &aPcbPlotParams )
+{
+ layerSelection = aPcbPlotParams.layerSelection;
+ useGerberExtensions = aPcbPlotParams.useGerberExtensions;
+ m_ExcludeEdgeLayer = aPcbPlotParams.m_ExcludeEdgeLayer;
+ m_PlotLineWidth = aPcbPlotParams.m_PlotLineWidth;
+ m_PlotFrameRef = aPcbPlotParams.m_PlotFrameRef;
+ m_PlotViaOnMaskLayer = aPcbPlotParams.m_PlotViaOnMaskLayer;
+ m_PlotMode = aPcbPlotParams.m_PlotMode;
+ useAuxOrigin = aPcbPlotParams.useAuxOrigin;
+ m_HPGLPenNum = aPcbPlotParams.m_HPGLPenNum;
+ m_HPGLPenSpeed = aPcbPlotParams.m_HPGLPenSpeed;
+ m_HPGLPenDiam = aPcbPlotParams.m_HPGLPenDiam;
+ m_HPGLPenOvr = aPcbPlotParams.m_HPGLPenOvr;
+ m_PlotPSColorOpt = aPcbPlotParams.m_PlotPSColorOpt;
+ m_PlotPSNegative = aPcbPlotParams.m_PlotPSNegative;
+ m_PlotReference = aPcbPlotParams.m_PlotReference;
+ m_PlotValue = aPcbPlotParams.m_PlotValue;
+ m_PlotTextOther = aPcbPlotParams.m_PlotTextOther;
+ m_PlotInvisibleTexts = aPcbPlotParams.m_PlotInvisibleTexts;
+ m_PlotPadsOnSilkLayer = aPcbPlotParams.m_PlotPadsOnSilkLayer;
+ subtractMaskFromSilk = aPcbPlotParams.subtractMaskFromSilk;
+ m_PlotFormat = aPcbPlotParams.m_PlotFormat;
+ m_PlotMirror = aPcbPlotParams.m_PlotMirror;
+ m_DrillShapeOpt = aPcbPlotParams.m_DrillShapeOpt;
+ scaleSelection = aPcbPlotParams.scaleSelection;
+ outputDirectory = aPcbPlotParams.outputDirectory;
+ return *this;
+}
+
+
+bool PCB_PLOT_PARAMS::operator==( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
+{
+ if( layerSelection != aPcbPlotParams.layerSelection )
+ return false;
+ if( useGerberExtensions != aPcbPlotParams.useGerberExtensions )
+ return false;
+ if( m_ExcludeEdgeLayer != aPcbPlotParams.m_ExcludeEdgeLayer )
+ return false;
+ if( m_PlotLineWidth != aPcbPlotParams.m_PlotLineWidth )
+ return false;
+ if( m_PlotFrameRef != aPcbPlotParams.m_PlotFrameRef )
+ return false;
+ if( m_PlotViaOnMaskLayer != aPcbPlotParams.m_PlotViaOnMaskLayer )
+ return false;
+ if( m_PlotMode != aPcbPlotParams.m_PlotMode )
+ return false;
+ if( useAuxOrigin != aPcbPlotParams.useAuxOrigin )
+ return false;
+ if( m_HPGLPenNum != aPcbPlotParams.m_HPGLPenNum )
+ return false;
+ if( m_HPGLPenSpeed != aPcbPlotParams.m_HPGLPenSpeed )
+ return false;
+ if( m_HPGLPenDiam != aPcbPlotParams.m_HPGLPenDiam )
+ return false;
+ if( m_HPGLPenOvr != aPcbPlotParams.m_HPGLPenOvr )
+ return false;
+ if( m_PlotPSColorOpt != aPcbPlotParams.m_PlotPSColorOpt )
+ return false;
+ if( m_PlotPSNegative != aPcbPlotParams.m_PlotPSNegative )
+ return false;
+ if( m_PlotReference != aPcbPlotParams.m_PlotReference )
+ return false;
+ if( m_PlotValue != aPcbPlotParams.m_PlotValue )
+ return false;
+ if( m_PlotTextOther != aPcbPlotParams.m_PlotTextOther )
+ return false;
+ if( m_PlotInvisibleTexts != aPcbPlotParams.m_PlotInvisibleTexts )
+ return false;
+ if( m_PlotPadsOnSilkLayer != aPcbPlotParams.m_PlotPadsOnSilkLayer )
+ return false;
+ if( subtractMaskFromSilk != aPcbPlotParams.subtractMaskFromSilk )
+ return false;
+ if( m_PlotFormat != aPcbPlotParams.m_PlotFormat )
+ return false;
+ if( m_PlotMirror != aPcbPlotParams.m_PlotMirror )
+ return false;
+ if( m_DrillShapeOpt != aPcbPlotParams.m_DrillShapeOpt )
+ return false;
+ if( scaleSelection != aPcbPlotParams.scaleSelection )
+ return false;
+ if( !outputDirectory.IsSameAs( aPcbPlotParams.outputDirectory ) )
+ return false;
+ return true;
+}
+
+
+bool PCB_PLOT_PARAMS::operator!=( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
+{
+ return !( *this == aPcbPlotParams );
+}
+
+
+// PCB_PLOT_PARAMS_PARSER
+
+PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( LINE_READER* aReader ) :
+ PCB_PLOT_PARAMS_LEXER( aReader )
+{
+}
+
+
+PCB_PLOT_PARAMS_PARSER::PCB_PLOT_PARAMS_PARSER( char* aLine, wxString aSource ) :
+ PCB_PLOT_PARAMS_LEXER( aLine, aSource )
+{
+}
+
+
+void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( IO_ERROR, PARSE_ERROR )
+{
+ T token;
+ while( ( token = NextTok() ) != T_RIGHT )
+ {
+ if( token == T_EOF)
+ Unexpected( T_EOF );
+
+ if( token == T_LEFT )
+ token = NextTok();
+
+ if( token == T_pcbplotparams )
+ continue;
+
+ switch( token )
+ {
+ case T_layerselection:
+ token = NextTok();
+ if( token != T_NUMBER )
+ Expecting( T_NUMBER );
+ aPcbPlotParams->layerSelection = atol( CurText() );
+ break;
+ case T_usegerberextensions:
+ aPcbPlotParams->useGerberExtensions = ParseBool();
+ break;
+ case T_excludeedgelayer:
+ aPcbPlotParams->m_ExcludeEdgeLayer = ParseBool();
+ break;
+ case T_linewidth:
+ aPcbPlotParams->m_PlotLineWidth = ParseInt( 40, 200 );
+ break;
+ case T_plotframeref:
+ aPcbPlotParams->m_PlotFrameRef = ParseBool();
+ break;
+ case T_viasonmask:
+ aPcbPlotParams->m_PlotViaOnMaskLayer = ParseBool();
+ break;
+ case T_mode:
+ aPcbPlotParams->m_PlotMode = (GRTraceMode)ParseInt( 0, 2 );
+ break;
+ case T_useauxorigin:
+ aPcbPlotParams->useAuxOrigin = ParseBool();
+ break;
+ case T_hpglpennumber:
+ aPcbPlotParams->m_HPGLPenNum = ParseInt( 1, 16 );
+ break;
+ case T_hpglpenspeed:
+ aPcbPlotParams->m_HPGLPenSpeed = ParseInt( 0, 1000 );
+ break;
+ case T_hpglpendiameter:
+ aPcbPlotParams->m_HPGLPenDiam = ParseInt( 0, 100 );
+ break;
+ case T_hpglpenoverlay:
+ aPcbPlotParams->m_HPGLPenOvr = ParseInt( 0, 0x100 );
+ break;
+ case T_pscolor:
+ aPcbPlotParams->m_PlotPSColorOpt = ParseBool();
+ break;
+ case T_psnegative:
+ aPcbPlotParams->m_PlotPSNegative = ParseBool();
+ break;
+ case T_plotreference:
+ aPcbPlotParams->m_PlotReference = ParseBool();
+ break;
+ case T_plotvalue:
+ aPcbPlotParams->m_PlotValue = ParseBool();
+ break;
+ case T_plotothertext:
+ aPcbPlotParams->m_PlotTextOther = ParseBool();
+ break;
+ case T_plotinvisibletext:
+ aPcbPlotParams->m_PlotInvisibleTexts = ParseBool();
+ break;
+ case T_padsonsilk:
+ aPcbPlotParams->m_PlotPadsOnSilkLayer= ParseBool();
+ break;
+ case T_subtractmaskfromsilk:
+ aPcbPlotParams->subtractMaskFromSilk = ParseBool();
+ break;
+ case T_outputformat:
+ aPcbPlotParams->m_PlotFormat = ParseInt( 0, 4 );
+ break;
+ case T_mirror:
+ aPcbPlotParams->m_PlotMirror = ParseBool();
+ break;
+ case T_drillshape:
+ aPcbPlotParams->m_DrillShapeOpt = (PCB_PLOT_PARAMS::DrillShapeOptT) ParseInt( 0, 2 );
+ break;
+ case T_scaleselection:
+ aPcbPlotParams->scaleSelection = ParseInt( 0, 4 );
+ break;
+ case T_outputdirectory:
+ NeedSYMBOL();
+ // token = NextTok();
+ // if( token != T_STRING )
+ // Expecting( T_STRING );
+ aPcbPlotParams->outputDirectory = CONV_FROM_UTF8( CurText() );
+ break;
+ default:
+ Unexpected( CurText() );
+ break;
+ }
+ NeedRIGHT();
+ }
+}
+
+
+bool PCB_PLOT_PARAMS_PARSER::ParseBool() throw( IO_ERROR )
+{
+ T token;
+ token = NeedSYMBOL();
+ if( token != T_false && token != T_true )
+ Expecting( "true|false" );
+ return (token == T_true);
+}
+
+
+int PCB_PLOT_PARAMS_PARSER::ParseInt( int aMin, int aMax ) throw( IO_ERROR )
+{
+ T token;
+ int i;
+ token = NextTok();
+ if( token != T_NUMBER )
+ Expecting( T_NUMBER );
+ i = atoi( CurText() );
+
+ if( i < aMin )
+ i = aMin;
+ else if( i > aMax )
+ i = aMax;
+
+ return i;
+}
diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h
new file mode 100644
index 0000000000..c0b6b5e248
--- /dev/null
+++ b/pcbnew/pcb_plot_params.h
@@ -0,0 +1,144 @@
+
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright (C) 1992-2011 Kicad Developers, see change_log.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 2
+ * 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, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef PCB_PLOT_PARAMS_H_
+#define PCB_PLOT_PARAMS_H_
+
+#include
+#include "base_struct.h"
+#include "pcb_plot_params_lexer.h"
+
+class PCB_PLOT_PARAMS;
+class PCB_PLOT_PARAMS_PARSER;
+
+extern PCB_PLOT_PARAMS g_PcbPlotOptions;
+
+
+/**
+ * Class PCB_PLOT_PARAMS
+ * handles plot parameters and options when plotting/printing a board.
+ */
+class PCB_PLOT_PARAMS
+{
+ friend class PCB_PLOT_PARAMS_PARSER;
+public:
+ bool m_ExcludeEdgeLayer; // True: do not plot edge layer when plotting other layers
+ // False: Edge layer always plotted (merged) when plotting other layers
+ int m_PlotLineWidth;
+ bool m_PlotFrameRef; // True to plot/print frame references
+ bool m_PlotViaOnMaskLayer; // True if vias are drawn on Mask layer
+ // (ie protected by mask)
+ GRTraceMode m_PlotMode; // = FILAIRE, FILLED or SKETCH: select how to plot filled objects.
+ // depending on plot format or layers, all options are not always allowed
+ int m_HPGLPenNum;
+ int m_HPGLPenSpeed;
+ int m_HPGLPenDiam;
+ int m_HPGLPenOvr;
+ int m_PlotPSColorOpt; // True for color Postscript output
+ bool m_PlotPSNegative; // True to create a negative board ps plot
+
+ // Flags to enable or disable ploting of various PCB elements.
+ bool m_PlotReference;
+ bool m_PlotValue;
+ bool m_PlotTextOther;
+ bool m_PlotInvisibleTexts;
+ bool m_PlotPadsOnSilkLayer; // allows pads outlines on silkscreen layer (when pads are also o, silk screen
+
+ int m_PlotFormat; // id for plot format (see enum PlotFormat in plot_common.h) */
+ bool m_PlotMirror;
+
+ enum DrillShapeOptT {
+ NO_DRILL_SHAPE = 0,
+ SMALL_DRILL_SHAPE = 1,
+ FULL_DRILL_SHAPE = 2
+ };
+ DrillShapeOptT m_DrillShapeOpt; // For postscript output: holes can be not plotted,
+ // or have a small size or plotted with their actual size
+ bool m_AutoScale; // If true, use the better scale to fit in page
+ double m_PlotScale; // The global scale factor. a 1.0 scale factor plot a board
+ // with its actual size.
+
+ // These next two scale factors are intended to compensable plotters (and mainly printers) X and Y scale error.
+ // Therefore they are expected very near 1.0
+ // Only X and Y dimensions are adjusted: circles are plotted as circle, even if X and Y fine scale differ.
+ double m_FineScaleAdjustX; // fine scale adjust X axis
+ double m_FineScaleAdjustY; // dine scale adjust Y axis
+
+private:
+ long layerSelection;
+ bool useGerberExtensions;
+ bool useAuxOrigin;
+ bool subtractMaskFromSilk;
+ int scaleSelection;
+ wxString outputDirectory;
+
+public:
+ PCB_PLOT_PARAMS();
+
+ void Format( OUTPUTFORMATTER* aFormatter, int aNestLevel ) const throw( IO_ERROR );
+ void Parse( PCB_PLOT_PARAMS_PARSER* aParser ) throw( IO_ERROR, PARSE_ERROR );
+
+ PCB_PLOT_PARAMS& operator=( const PCB_PLOT_PARAMS &aPcbPlotParams);
+ bool operator==( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
+ bool operator!=( const PCB_PLOT_PARAMS &aPcbPlotParams ) const;
+
+ void SetOutputDirectory( wxString aDir ) { outputDirectory = aDir; };
+ wxString GetOutputDirectory() const { return outputDirectory; };
+ void SetUseGerberExtensions( bool aUse ) { useGerberExtensions = aUse; };
+ bool GetUseGerberExtensions() const { return useGerberExtensions; };
+ void SetSubtractMaskFromSilk( bool aSubtract ) { subtractMaskFromSilk = aSubtract; };
+ bool GetSubtractMaskFromSilk() const { return subtractMaskFromSilk; };
+ void SetLayerSelection( long aSelection ) { layerSelection = aSelection; };
+ long GetLayerSelection() const { return layerSelection; };
+ void SetUseAuxOrigin( bool aAux ) { useAuxOrigin = aAux; };
+ bool GetUseAuxOrigin() const { return useAuxOrigin; };
+ void SetScaleSelection( int aSelection ) { scaleSelection = aSelection; };
+ int GetScaleSelection() const { return scaleSelection; };
+};
+
+
+/**
+ * Class PCB_PLOT_PARAMS_PARSER
+ * is the parser class for PCB_PLOT_PARAMS.
+ */
+class PCB_PLOT_PARAMS_PARSER : public PCB_PLOT_PARAMS_LEXER
+{
+public:
+ PCB_PLOT_PARAMS_PARSER( LINE_READER* aReader );
+ PCB_PLOT_PARAMS_PARSER( char* aLine, wxString aSource );
+ LINE_READER* GetReader() { return reader; };
+ void Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) throw( IO_ERROR, PARSE_ERROR );
+ bool ParseBool() throw( IO_ERROR );
+
+ /**
+ * Function ParseInt
+ * parses an integer and constrains it between two values.
+ * @param aMin is the smallest return value.
+ * @param aMax is the largest return value.
+ * @return int - the parsed integer.
+ */
+ int ParseInt( int aMin, int aMax ) throw( IO_ERROR );
+};
+
+#endif // PCB_PLOT_PARAMS_H_
diff --git a/pcbnew/pcb_plot_params.keywords b/pcbnew/pcb_plot_params.keywords
new file mode 100644
index 0000000000..99b3976771
--- /dev/null
+++ b/pcbnew/pcb_plot_params.keywords
@@ -0,0 +1,28 @@
+drillshape
+excludeedgelayer
+false
+hpglpendiameter
+hpglpennumber
+hpglpenoverlay
+hpglpenspeed
+layerselection
+linewidth
+mirror
+mode
+outputdirectory
+outputformat
+padsonsilk
+pcbplotparams
+plotframeref
+plotinvisibletext
+plotothertext
+plotreference
+plotvalue
+pscolor
+psnegative
+scaleselection
+subtractmaskfromsilk
+true
+useauxorigin
+usegerberextensions
+viasonmask
diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp
index 49f9df192b..02b9542dca 100644
--- a/pcbnew/pcbnew_config.cpp
+++ b/pcbnew/pcbnew_config.cpp
@@ -398,34 +398,5 @@ PARAM_CFG_ARRAY& WinEDA_PcbFrame::GetConfigurationSettings()
&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;
}
diff --git a/pcbnew/pcbplot.cpp b/pcbnew/pcbplot.cpp
index 52c66ee8ee..16c09e965b 100644
--- a/pcbnew/pcbplot.cpp
+++ b/pcbnew/pcbplot.cpp
@@ -17,11 +17,11 @@
#include "pcbstruct.h"
#include "class_board_design_settings.h"
#include "dialog_plot_base.h"
+#include "pcb_plot_params.h"
#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" )
@@ -29,32 +29,7 @@
#define MIN_SCALE 0.01
#define MAX_SCALE 100.0
-// 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;
-
-
-/* The group of plot options - sadly global XXX */
-PCB_PLOT_PARAMS g_PcbPlotOptions;
-extern int g_DrawDefaultLineThickness;
+extern int g_DrawDefaultLineThickness;
/*******************************/
@@ -69,8 +44,6 @@ public:
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()
{
@@ -113,12 +86,10 @@ private:
void OnOutputDirectoryBrowseClicked( wxCommandEvent& event );
void SetPlotFormat( wxCommandEvent& event );
void OnSetScaleOpt( wxCommandEvent& event );
- void savePlotOptions( wxCommandEvent& event );
+ void applyPlotSettings( wxCommandEvent& event );
void CreateDrillFile( wxCommandEvent& event );
};
-int DIALOG_PLOT::m_dlgPlotScaleOpt = 1;
-
const int UNITS_MILS = 1000;
@@ -149,7 +120,6 @@ void DIALOG_PLOT::Init_Dialog()
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,11 +141,10 @@ void DIALOG_PLOT::Init_Dialog()
PCB_INTERNAL_UNIT );
m_linesWidth->AppendText( msg );
- if( s_PlotOriginIsAuxAxis )
+ if( g_PcbPlotOptions.GetUseAuxOrigin() )
m_choicePlotOffset->SetSelection( 1 );
-
- // Create scale adjust option
- m_XScaleAdjust = m_YScaleAdjust = 1.0;
+ else
+ m_choicePlotOffset->SetSelection( 0 );
// Test for a reasonable scale value. Set to 1 if problem
if( m_XScaleAdjust < MIN_SCALE || m_YScaleAdjust < MIN_SCALE
@@ -193,7 +162,6 @@ void DIALOG_PLOT::Init_Dialog()
// Create layer list.
int layer;
- wxString layerKey;
for( layer = 0; layer < NB_LAYERS; ++layer )
{
if( !board->IsLayerEnabled( layer ) )
@@ -223,24 +191,14 @@ void DIALOG_PLOT::Init_Dialog()
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 +229,7 @@ void DIALOG_PLOT::Init_Dialog()
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 );
@@ -440,73 +398,86 @@ void DIALOG_PLOT::SetPlotFormat( wxCommandEvent& event )
}
-void DIALOG_PLOT::savePlotOptions( wxCommandEvent& event )
+void DIALOG_PLOT::applyPlotSettings( wxCommandEvent& event )
{
- g_PcbPlotOptions.m_ExcludeEdgeLayer = m_excludeEdgeLayerOpt->GetValue();
+ PCB_PLOT_PARAMS tempOptions;
- g_PcbPlotOptions.SetSubtractMaskFromSilk( m_subtractMaskFromSilk->GetValue() );
+ tempOptions.m_ExcludeEdgeLayer = m_excludeEdgeLayerOpt->GetValue();
+
+ tempOptions.SetSubtractMaskFromSilk( m_subtractMaskFromSilk->GetValue() );
if( m_plotSheetRef )
- g_PcbPlotOptions.m_PlotFrameRef = m_plotSheetRef->GetValue();
+ tempOptions.m_PlotFrameRef = m_plotSheetRef->GetValue();
- g_PcbPlotOptions.m_PlotPadsOnSilkLayer = m_plotPads_on_Silkscreen->GetValue();
+ tempOptions.m_PlotPadsOnSilkLayer = m_plotPads_on_Silkscreen->GetValue();
- s_PlotOriginIsAuxAxis =
- (m_choicePlotOffset->GetSelection() == 0) ? FALSE : TRUE;
+ if( m_choicePlotOffset->GetSelection() == 0 )
+ tempOptions.SetUseAuxOrigin( false );
+ else
+ tempOptions.SetUseAuxOrigin( 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();
+ tempOptions.m_PlotValue = m_plotModuleValueOpt->GetValue();
+ tempOptions.m_PlotReference = m_plotModuleRefOpt->GetValue();
+ tempOptions.m_PlotTextOther = m_plotTextOther->GetValue();
+ tempOptions.m_PlotInvisibleTexts = m_plotInvisibleText->GetValue();
- m_dlgPlotScaleOpt = m_scaleOpt->GetSelection();
- g_PcbPlotOptions.m_DrillShapeOpt =
+ tempOptions.SetScaleSelection( m_scaleOpt->GetSelection() );
+
+ tempOptions.m_DrillShapeOpt =
(PCB_PLOT_PARAMS::DrillShapeOptT) m_drillShapeOpt->GetSelection();
- g_PcbPlotOptions.m_PlotMirror = m_plotMirrorOpt->GetValue();
- g_PcbPlotOptions.m_PlotMode = (GRTraceMode) m_plotModeOpt->GetSelection();
- g_PcbPlotOptions.m_PlotViaOnMaskLayer = m_plotNoViaOnMaskOpt->GetValue();
+ tempOptions.m_PlotMirror = m_plotMirrorOpt->GetValue();
+ tempOptions.m_PlotMode = (GRTraceMode) m_plotModeOpt->GetSelection();
+ tempOptions.m_PlotViaOnMaskLayer = m_plotNoViaOnMaskOpt->GetValue();
wxString msg = m_HPGLPenSizeOpt->GetValue();
int tmp = ReturnValueFromString( g_UserUnit, msg, UNITS_MILS );
- g_PcbPlotOptions.m_HPGLPenDiam = tmp;
+ tempOptions.m_HPGLPenDiam = tmp;
msg = m_HPGLPenSpeedOpt->GetValue();
- tmp = ReturnValueFromString( MILLIMETRES, msg, 1 );
- g_PcbPlotOptions.m_HPGLPenSpeed = tmp;
+ tmp = ReturnValueFromString( UNSCALED_UNITS, msg, 1 );
+ tempOptions.m_HPGLPenSpeed = tmp;
msg = m_HPGLPenOverlayOpt->GetValue();
tmp = ReturnValueFromString( g_UserUnit, msg, UNITS_MILS );
- g_PcbPlotOptions.m_HPGLPenOvr = tmp;
+ tempOptions.m_HPGLPenOvr = tmp;
msg = m_linesWidth->GetValue();
tmp = ReturnValueFromString( g_UserUnit, msg, PCB_INTERNAL_UNIT );
- g_PcbPlotOptions.m_PlotLineWidth = tmp;
- g_DrawDefaultLineThickness = g_PcbPlotOptions.m_PlotLineWidth;
+ tempOptions.m_PlotLineWidth = tmp;
+ g_DrawDefaultLineThickness = tempOptions.m_PlotLineWidth;
msg = m_fineAdjustXscaleOpt->GetValue();
msg.ToDouble( &m_XScaleAdjust );
msg = m_fineAdjustYscaleOpt->GetValue();
msg.ToDouble( &m_YScaleAdjust );
- m_Config->Write( OPTKEY_GERBER_EXTENSIONS,
- m_useGerberExtensions->GetValue() );
+ tempOptions.SetUseGerberExtensions( m_useGerberExtensions->GetValue() );
m_Config->Write( OPTKEY_XFINESCALE_ADJ, m_XScaleAdjust );
m_Config->Write( OPTKEY_YFINESCALE_ADJ, m_YScaleAdjust );
- g_PcbPlotOptions.m_PlotFormat = m_plotFormatOpt->GetSelection();
+ tempOptions.m_PlotFormat = m_plotFormatOpt->GetSelection();
- wxString layerKey;
- for( int layer = 0; layerWrite( layerKey, m_BoxSelectLayer[layer]->IsChecked() );
+ if( m_BoxSelectLayer[layer]->GetValue() )
+ selectedLayers |= mask;
}
+ tempOptions.SetLayerSelection( selectedLayers );
- g_PcbPlotOptions.m_PlotPSNegative = m_plotPSNegativeOpt->GetValue();
+ tempOptions.m_PlotPSNegative = m_plotPSNegativeOpt->GetValue();
- g_PcbPlotOptions.SetOutputDirectory( m_outputDirectoryName->GetValue() );
+ tempOptions.SetOutputDirectory( m_outputDirectoryName->GetValue() );
+
+ if( g_PcbPlotOptions != tempOptions )
+ {
+ g_PcbPlotOptions = tempOptions;
+ m_Parent->OnModify();
+ }
}
@@ -518,7 +489,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
BOARD* board = m_Parent->GetBoard();
- savePlotOptions( event );
+ applyPlotSettings( event );
// Create output directory if it does not exist
if( !wxFileName::DirExists( m_outputDirectoryName->GetValue() ) )
@@ -538,7 +509,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
g_PcbPlotOptions.m_AutoScale = false;
g_PcbPlotOptions.m_PlotScale = 1;
- switch( m_dlgPlotScaleOpt )
+ switch( g_PcbPlotOptions.GetScaleSelection() )
{
default:
break;
@@ -601,8 +572,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
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 +580,6 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
bool success = false;
if( m_BoxSelectLayer[layer]->GetValue() )
{
- s_SelectedLayers |= mask;
-
fn = m_Parent->GetScreen()->GetFileName();
fn.SetPath( m_outputDirectoryName->GetValue() );
@@ -711,7 +679,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
case PLOT_FORMAT_GERBER:
success = m_Parent->Genere_GERBER( fn.GetFullPath(), layer,
- s_PlotOriginIsAuxAxis,
+ g_PcbPlotOptions.GetUseAuxOrigin(),
g_PcbPlotOptions.m_PlotMode );
break;
@@ -740,7 +708,7 @@ void DIALOG_PLOT::Plot( wxCommandEvent& event )
// 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" ) );
}
diff --git a/pcbnew/pcbplot.h b/pcbnew/pcbplot.h
index 3ce6546328..0ef3985ea2 100644
--- a/pcbnew/pcbplot.h
+++ b/pcbnew/pcbplot.h
@@ -5,6 +5,7 @@
#ifndef PCBPLOT_H
#define PCBPLOT_H
+#include "pcb_plot_params.h"
/* Shared Config keys for plot and print */
#define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" )
@@ -25,67 +26,6 @@
// Small drill marks diameter value (in internal value = 1/10000 inch)
#define SMALL_DRILL 150
-/* a helper class to handle plot parameters and options when plotting/printing a board
-*/
-class PCB_PLOT_PARAMS
-{
-public:
- bool m_ExcludeEdgeLayer; // True: do not plot edge layer when plotting other layers
- // False: Edge layer always plotted (merged) when plotting other layers
- int m_PlotLineWidth;
- bool m_PlotFrameRef; // True to plot/print frame references
- bool m_PlotViaOnMaskLayer; // True if vias are drawn on Mask layer
- // (ie protected by mask)
- GRTraceMode m_PlotMode; // = FILAIRE, FILLED or SKETCH: select how to plot filled objects.
- // depending on plot format or layers, all options are not always allowed
- int m_HPGLPenNum;
- int m_HPGLPenSpeed;
- int m_HPGLPenDiam;
- int m_HPGLPenOvr;
- int m_PlotPSColorOpt; // True for color Postscript output
- bool m_PlotPSNegative; // True to create a negative board ps plot
-
- /* Flags to enable or disable ploting of various PCB elements. */
- bool m_PlotReference;
- bool m_PlotValue;
- 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;
-
- /// id for plot format (see enum PlotFormat in plot_common.h) */
- int m_PlotFormat; // Gerber, HPGL ...
- bool m_PlotMirror;
-
- enum DrillShapeOptT {
- NO_DRILL_SHAPE = 0,
- SMALL_DRILL_SHAPE = 1,
- FULL_DRILL_SHAPE = 2
- };
- DrillShapeOptT m_DrillShapeOpt; // For postscript output: holes can be not plotted,
- // or have a small size or plotted with their actual size
- bool m_AutoScale; // If true, use the better scale to fit in page
- double m_PlotScale; // The global scale factor. a 1.0 scale factor plot a board
- // with its actual size.
- // These next two scale factors are intended to compensable plotters (and mainly printers) X and Y scale error.
- // Therefore they are expected very near 1.0
- // Only X and Y dimensions are adjusted: circles are plotted as circle, even if X and Y fine scale differ.
- double m_FineScaleAdjustX; // fine scale adjust X axis
- double m_FineScaleAdjustY; // dine scale adjust Y axis
-
-private:
- wxString outputDirectory;
-
-public:
- PCB_PLOT_PARAMS();
- void SetOutputDirectory( wxString aDir ) { outputDirectory = aDir; };
- wxString GetOutputDirectory() { return outputDirectory; };
- void SetSubtractMaskFromSilk( bool aSubtract ) { m_SubtractMaskFromSilk = aSubtract; };
- bool GetSubtractMaskFromSilk() { return m_SubtractMaskFromSilk; };
-};
-
-extern PCB_PLOT_PARAMS g_PcbPlotOptions;
-
void PlotTextePcb( PLOTTER* plotter, TEXTE_PCB* pt_texte, int masque_layer,
GRTraceMode trace_mode );
diff --git a/pcbnew/printout_controler.cpp b/pcbnew/printout_controler.cpp
index 8b2f17cd0f..6d9d59e822 100644
--- a/pcbnew/printout_controler.cpp
+++ b/pcbnew/printout_controler.cpp
@@ -12,7 +12,6 @@
#include "confirm.h"
#include "pcbnew.h"
#include "protos.h"
-#include "pcbplot.h"
#include "printout_controler.h"