diff --git a/common/jobs/job_export_pcb_pdf.cpp b/common/jobs/job_export_pcb_pdf.cpp index 7f2a5f39fb..d1b4e4c186 100644 --- a/common/jobs/job_export_pcb_pdf.cpp +++ b/common/jobs/job_export_pcb_pdf.cpp @@ -35,6 +35,9 @@ JOB_EXPORT_PCB_PDF::JOB_EXPORT_PCB_PDF( bool aIsCli ) : m_plotBorderTitleBlocks( false ), m_printMaskLayer(), m_sketchPadsOnFabLayers( false ), + m_hideDNPFPsOnFabLayers( false ), + m_sketchDNPFPsOnFabLayers( true ), + m_crossoutDNPFPsOnFabLayers( true ), m_drillShapeOption( 2 ) { } \ No newline at end of file diff --git a/common/jobs/job_export_pcb_pdf.h b/common/jobs/job_export_pcb_pdf.h index 92a96d3c37..2ded1bf74b 100644 --- a/common/jobs/job_export_pcb_pdf.h +++ b/common/jobs/job_export_pcb_pdf.h @@ -48,6 +48,9 @@ public: LSEQ m_printMaskLayer; bool m_sketchPadsOnFabLayers; + bool m_hideDNPFPsOnFabLayers; + bool m_sketchDNPFPsOnFabLayers; + bool m_crossoutDNPFPsOnFabLayers; // How holes in pads/vias are plotted: // 0 = no hole, 1 = small shape, 2 = actual shape diff --git a/common/jobs/job_export_pcb_svg.cpp b/common/jobs/job_export_pcb_svg.cpp index 63efcb8881..843b32e1dd 100644 --- a/common/jobs/job_export_pcb_svg.cpp +++ b/common/jobs/job_export_pcb_svg.cpp @@ -34,6 +34,9 @@ JOB_EXPORT_PCB_SVG::JOB_EXPORT_PCB_SVG( bool aIsCli ) : m_pageSizeMode( 0 ), m_printMaskLayer(), m_sketchPadsOnFabLayers( false ), + m_hideDNPFPsOnFabLayers( false ), + m_sketchDNPFPsOnFabLayers( true ), + m_crossoutDNPFPsOnFabLayers( true ), m_drillShapeOption( 2 ) { } \ No newline at end of file diff --git a/common/jobs/job_export_pcb_svg.h b/common/jobs/job_export_pcb_svg.h index 3f4dcf0384..c39c6db540 100644 --- a/common/jobs/job_export_pcb_svg.h +++ b/common/jobs/job_export_pcb_svg.h @@ -46,6 +46,9 @@ public: LSEQ m_printMaskLayer; bool m_sketchPadsOnFabLayers; + bool m_hideDNPFPsOnFabLayers; + bool m_sketchDNPFPsOnFabLayers; + bool m_crossoutDNPFPsOnFabLayers; // How holes in pads/vias are plotted: // 0 = no hole, 1 = small shape, 2 = actual shape diff --git a/common/jobs/job_fp_export_svg.cpp b/common/jobs/job_fp_export_svg.cpp index 2bb0d00b43..ed15af6347 100644 --- a/common/jobs/job_fp_export_svg.cpp +++ b/common/jobs/job_fp_export_svg.cpp @@ -27,6 +27,9 @@ JOB_FP_EXPORT_SVG::JOB_FP_EXPORT_SVG( bool aIsCli ) : m_footprint(), m_outputDirectory(), m_blackAndWhite( false ), - m_sketchPadsOnFabLayers( false ) + m_sketchPadsOnFabLayers( false ), + m_hideDNPFPsOnFabLayers( false ), + m_sketchDNPFPsOnFabLayers( true ), + m_crossoutDNPFPsOnFabLayers( true ) { } \ No newline at end of file diff --git a/common/jobs/job_fp_export_svg.h b/common/jobs/job_fp_export_svg.h index 6694342210..da3fdb4bfe 100644 --- a/common/jobs/job_fp_export_svg.h +++ b/common/jobs/job_fp_export_svg.h @@ -41,6 +41,10 @@ public: bool m_blackAndWhite; bool m_sketchPadsOnFabLayers; + bool m_hideDNPFPsOnFabLayers; + bool m_sketchDNPFPsOnFabLayers; + bool m_crossoutDNPFPsOnFabLayers; + LSEQ m_printMaskLayer; }; diff --git a/common/pcb_plot_params.keywords b/common/pcb_plot_params.keywords index bb20738e21..6e1b40ab20 100644 --- a/common/pcb_plot_params.keywords +++ b/common/pcb_plot_params.keywords @@ -1,4 +1,5 @@ creategerberjobfile +crossoutdnponfab dashed_line_dash_ratio dashed_line_gap_ratio disableapertmacros @@ -9,6 +10,7 @@ dxfusepcbnewfont excludeedgelayer false gerberprecision +hidednponfab hpglpendiameter hpglpennumber hpglpenoverlay @@ -36,6 +38,7 @@ pscolor psnegative scaleselection sketchpadsonfab +sketchdnponfab subtractmaskfromsilk svgprecision svguseinch diff --git a/kicad/cli/command_fp_export_svg.cpp b/kicad/cli/command_fp_export_svg.cpp index c8f45100c1..e8304cc7ea 100644 --- a/kicad/cli/command_fp_export_svg.cpp +++ b/kicad/cli/command_fp_export_svg.cpp @@ -54,6 +54,18 @@ CLI::FP_EXPORT_SVG_COMMAND::FP_EXPORT_SVG_COMMAND() : PCB_EXPORT_BASE_COMMAND( " .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) ) .flag(); + m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + m_argParser.add_argument( ARG_BLACKANDWHITE ) .help( UTF8STDSTR( _( ARG_BLACKANDWHITE_DESC ) ) ) .flag(); @@ -72,6 +84,9 @@ int CLI::FP_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway ) svgJob->m_outputDirectory = m_argOutput; svgJob->m_blackAndWhite = m_argParser.get<bool>( ARG_BLACKANDWHITE ); svgJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS ); + svgJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ); + svgJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ); + svgJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ); svgJob->m_footprint = From_UTF8( m_argParser.get<std::string>( ARG_FOOTPRINT ).c_str() ); svgJob->SetVarOverrides( m_argDefineVars ); diff --git a/kicad/cli/command_pcb_export_base.h b/kicad/cli/command_pcb_export_base.h index 4726548429..4fb3b5c67c 100644 --- a/kicad/cli/command_pcb_export_base.h +++ b/kicad/cli/command_pcb_export_base.h @@ -34,6 +34,13 @@ namespace CLI #define ARG_SKETCH_PADS_ON_FAB_LAYERS "--sketch-pads-on-fab-layers" #define ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC "Draw pad outlines and their numbers on front and back fab layers" +#define ARG_HIDE_DNP_FPS_ON_FAB_LAYERS "--hide-DNP-footprints-on-fab-layers" +#define ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC "Don't plot text & graphics of DNP footprints on fab layers" +#define ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS "--sketch-DNP-footprints-on-fab-layers" +#define ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC "Plot graphics of DNP footprints in sketch mode on fab layers" +#define ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS "--crossout-DNP-footprints-on-fab-layers" +#define ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC "Plot an 'X' over the courtyard of DNP footprints on fab layers, and strikeout their reference designators" + #define ARG_DRILL_SHAPE_OPTION "--drill-shape-opt" #define ARG_DRILL_SHAPE_OPTION_DESC "Set pad/via drill shape option (0 = no shape, 1 = small shape, 2 = actual shape)" diff --git a/kicad/cli/command_pcb_export_pdf.cpp b/kicad/cli/command_pcb_export_pdf.cpp index b105703c65..6e23644136 100644 --- a/kicad/cli/command_pcb_export_pdf.cpp +++ b/kicad/cli/command_pcb_export_pdf.cpp @@ -57,6 +57,18 @@ CLI::PCB_EXPORT_PDF_COMMAND::PCB_EXPORT_PDF_COMMAND() : PCB_EXPORT_BASE_COMMAND( .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) ) .flag(); + m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + m_argParser.add_argument( ARG_NEGATIVE_SHORT, ARG_NEGATIVE ) .help( UTF8STDSTR( _( ARG_NEGATIVE_DESC ) ) ) .flag(); @@ -108,6 +120,9 @@ int CLI::PCB_EXPORT_PDF_COMMAND::doPerform( KIWAY& aKiway ) pdfJob->m_negative = m_argParser.get<bool>( ARG_NEGATIVE ); pdfJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS ); + pdfJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ); + pdfJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ); + pdfJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ); pdfJob->m_drillShapeOption = m_argParser.get<int>( ARG_DRILL_SHAPE_OPTION ); pdfJob->m_printMaskLayer = m_selectedLayers; diff --git a/kicad/cli/command_pcb_export_svg.cpp b/kicad/cli/command_pcb_export_svg.cpp index ddc52278d6..ae2f652180 100644 --- a/kicad/cli/command_pcb_export_svg.cpp +++ b/kicad/cli/command_pcb_export_svg.cpp @@ -63,6 +63,18 @@ CLI::PCB_EXPORT_SVG_COMMAND::PCB_EXPORT_SVG_COMMAND() : PCB_EXPORT_BASE_COMMAND( .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) ) .flag(); + m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + + m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ) + .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) ) + .flag(); + m_argParser.add_argument( ARG_PAGE_SIZE ) .help( UTF8STDSTR( _( "Set page sizing mode (0 = page with frame and title block, 1 = " "current page size, 2 = board area only)" ) ) ) @@ -95,6 +107,9 @@ int CLI::PCB_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway ) svgJob->m_pageSizeMode = m_argParser.get<int>( ARG_PAGE_SIZE ); svgJob->m_negative = m_argParser.get<bool>( ARG_NEGATIVE ); svgJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS ); + svgJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS ); + svgJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS ); + svgJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS ); svgJob->m_drillShapeOption = m_argParser.get<int>( ARG_DRILL_SHAPE_OPTION ); svgJob->m_drawingSheet = m_argDrawingSheet; diff --git a/pcbnew/dialogs/dialog_export_svg.cpp b/pcbnew/dialogs/dialog_export_svg.cpp index cf2ff2fad1..320ca05327 100644 --- a/pcbnew/dialogs/dialog_export_svg.cpp +++ b/pcbnew/dialogs/dialog_export_svg.cpp @@ -321,6 +321,9 @@ void DIALOG_EXPORT_SVG::ExportSVGFile( bool aOnlyOneFile ) svgPlotOptions.m_blackAndWhite = m_printBW; svgPlotOptions.m_printMaskLayer = m_printMaskLayer; svgPlotOptions.m_sketchPadsOnFabLayers = false; + svgPlotOptions.m_hideDNPFPsOnFabLayers = false; + svgPlotOptions.m_sketchDNPFPsOnFabLayers = true; + svgPlotOptions.m_crossoutDNPFPsOnFabLayers = true; svgPlotOptions.m_pageSizeMode = m_rbSvgPageSizeOpt->GetSelection(); PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings(); diff --git a/pcbnew/dialogs/dialog_plot.cpp b/pcbnew/dialogs/dialog_plot.cpp index a3a0c6a99b..3bb77f79e8 100644 --- a/pcbnew/dialogs/dialog_plot.cpp +++ b/pcbnew/dialogs/dialog_plot.cpp @@ -323,6 +323,21 @@ void DIALOG_PLOT::init_Dialog() m_plotPadNumbers->SetValue( m_plotOpts.GetPlotPadNumbers() ); m_plotPadNumbers->Enable( m_plotOpts.GetSketchPadsOnFabLayers() ); + m_plotDNP->SetValue( m_plotOpts.GetHideDNPFPsOnFabLayers() + || m_plotOpts.GetSketchDNPFPsOnFabLayers() + || m_plotOpts.GetCrossoutDNPFPsOnFabLayers() ); + + if( m_plotDNP->GetValue() ) + { + if( m_plotOpts.GetHideDNPFPsOnFabLayers() ) + m_hideDNP->SetValue( true ); + else + m_crossoutDNP->SetValue( true ); + } + + m_hideDNP->Enable( m_plotDNP->GetValue() ); + m_crossoutDNP->Enable( m_plotDNP->GetValue() ); + // Option to tent vias m_subtractMaskFromSilk->SetValue( m_plotOpts.GetSubtractMaskFromSilk() ); @@ -332,10 +347,7 @@ void DIALOG_PLOT::init_Dialog() // Option to plot page references: m_plotSheetRef->SetValue( m_plotOpts.GetPlotFrameRef() ); - // Options to plot texts on footprints - m_plotFootprintValues->SetValue( m_plotOpts.GetPlotValue() ); - m_plotFootprintRefs->SetValue( m_plotOpts.GetPlotReference() ); - m_plotFootprintText->SetValue( m_plotOpts.GetPlotFPText() ); + // Option to force ploting of hidden text in footprints m_plotInvisibleText->SetValue( m_plotOpts.GetPlotInvisibleText() ); // Options to plot pads and vias holes @@ -895,10 +907,13 @@ void DIALOG_PLOT::applyPlotSettings() tempOptions.SetPlotFrameRef( m_plotSheetRef->GetValue() ); tempOptions.SetSketchPadsOnFabLayers( m_sketchPadsOnFabLayers->GetValue() ); tempOptions.SetPlotPadNumbers( m_plotPadNumbers->GetValue() ); + tempOptions.SetHideDNPFPsOnFabLayers( m_plotDNP->GetValue() + && m_hideDNP->GetValue() ); + tempOptions.SetSketchDNPFPsOnFabLayers( m_plotDNP->GetValue() + && m_crossoutDNP->GetValue() ); + tempOptions.SetCrossoutDNPFPsOnFabLayers( m_plotDNP->GetValue() + && m_crossoutDNP->GetValue() ); tempOptions.SetUseAuxOrigin( m_useAuxOriginCheckBox->GetValue() ); - tempOptions.SetPlotValue( m_plotFootprintValues->GetValue() ); - tempOptions.SetPlotReference( m_plotFootprintRefs->GetValue() ); - tempOptions.SetPlotFPText( m_plotFootprintText->GetValue() ); tempOptions.SetPlotInvisibleText( m_plotInvisibleText->GetValue() ); tempOptions.SetScaleSelection( m_scaleOpt->GetSelection() ); @@ -1332,29 +1347,13 @@ void DIALOG_PLOT::onPlotAllListMoveDown( wxCommandEvent& aEvent ) } -void DIALOG_PLOT::onPlotFPRefs( wxCommandEvent& aEvent ) +void DIALOG_PLOT::onDNPCheckbox( wxCommandEvent& aEvent ) { - if( aEvent.IsChecked() ) - m_plotFootprintText->SetValue( true ); + m_hideDNP->Enable( aEvent.IsChecked() ); + m_crossoutDNP->Enable( aEvent.IsChecked() ); } -void DIALOG_PLOT::onPlotFPValues( wxCommandEvent& aEvent ) -{ - if( aEvent.IsChecked() ) - m_plotFootprintText->SetValue( true ); -} - - -void DIALOG_PLOT::onPlotFPText( wxCommandEvent& aEvent ) -{ - if( !aEvent.IsChecked() ) - { - m_plotFootprintRefs->SetValue( false ); - m_plotFootprintValues->SetValue( false ); - } -} - void DIALOG_PLOT::onSketchPads( wxCommandEvent& aEvent ) { m_plotPadNumbers->Enable( aEvent.IsChecked() ); diff --git a/pcbnew/dialogs/dialog_plot.h b/pcbnew/dialogs/dialog_plot.h index 86d7bb009b..d527bb776d 100644 --- a/pcbnew/dialogs/dialog_plot.h +++ b/pcbnew/dialogs/dialog_plot.h @@ -60,9 +60,7 @@ private: void onPlotAllListMoveUp( wxCommandEvent& aEvent ); void onPlotAllListMoveDown( wxCommandEvent& aEvent ); - void onPlotFPValues( wxCommandEvent& aEvent ) override; - void onPlotFPRefs( wxCommandEvent& aEvent ) override; - void onPlotFPText( wxCommandEvent& aEvent ) override; + void onDNPCheckbox( wxCommandEvent& event ) override; void onSketchPads( wxCommandEvent& event ) override; // other functions diff --git a/pcbnew/dialogs/dialog_plot_base.cpp b/pcbnew/dialogs/dialog_plot_base.cpp index eb093c7274..c2a275f40b 100644 --- a/pcbnew/dialogs/dialog_plot_base.cpp +++ b/pcbnew/dialogs/dialog_plot_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -77,22 +77,23 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr gbSizer1->Add( m_plotSheetRef, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); - m_plotFootprintValues = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Plot footprint values"), wxDefaultPosition, wxDefaultSize, 0 ); - m_plotFootprintValues->SetValue(true); - gbSizer1->Add( m_plotFootprintValues, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + m_plotDNP = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Indicate DNP on fabrication layers"), wxDefaultPosition, wxDefaultSize, 0 ); + m_plotDNP->SetToolTip( _("Hide or cross-out DNP footprints on fabrication layers") ); - m_plotFootprintRefs = new wxCheckBox( sbOptionsSizer->GetStaticBox(), ID_PRINT_REF, _("Plot reference designators"), wxDefaultPosition, wxDefaultSize, 0 ); - m_plotFootprintRefs->SetValue(true); - gbSizer1->Add( m_plotFootprintRefs, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + gbSizer1->Add( m_plotDNP, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); - m_plotFootprintText = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Plot footprint text"), wxDefaultPosition, wxDefaultSize, 0 ); - m_plotFootprintText->SetValue(true); - gbSizer1->Add( m_plotFootprintText, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + m_hideDNP = new wxRadioButton( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Hide"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + m_hideDNP->SetToolTip( _("Hide the footprint text and graphics") ); + + gbSizer1->Add( m_hideDNP, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 ); + + m_crossoutDNP = new wxRadioButton( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Cross-out"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer1->Add( m_crossoutDNP, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 ); m_plotInvisibleText = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Force plotting of invisible values / refs"), wxDefaultPosition, wxDefaultSize, 0 ); m_plotInvisibleText->SetToolTip( _("Force plot invisible footprint values and reference designators") ); - gbSizer1->Add( m_plotInvisibleText, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); + gbSizer1->Add( m_plotInvisibleText, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); m_sketchPadsOnFabLayers = new wxCheckBox( sbOptionsSizer->GetStaticBox(), ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, _("Sketch pads on fabrication layers"), wxDefaultPosition, wxDefaultSize, 0 ); m_sketchPadsOnFabLayers->SetToolTip( _("Include pad outlines on F.Fab and B.Fab layers when plotting") ); @@ -100,11 +101,10 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr gbSizer1->Add( m_sketchPadsOnFabLayers, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); m_plotPadNumbers = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Include pad numbers"), wxDefaultPosition, wxDefaultSize, 0 ); - m_plotPadNumbers->SetValue(true); gbSizer1->Add( m_plotPadNumbers, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 ); m_zoneFillCheck = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Check zone fills before plotting"), wxDefaultPosition, wxDefaultSize, 0 ); - gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 6, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 30 ); drillMarksLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Drill marks:"), wxDefaultPosition, wxDefaultSize, 0 ); drillMarksLabel->Wrap( -1 ); @@ -155,7 +155,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr m_SizerSolderMaskAlert = new wxBoxSizer( wxHORIZONTAL ); - m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxASCII_STR(wxART_WARNING), wxASCII_STR(wxART_CMN_DIALOG) ), wxDefaultPosition, wxDefaultSize, 0 ); + m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxART_WARNING, wxART_CMN_DIALOG ), wxDefaultPosition, wxDefaultSize, 0 ); m_SizerSolderMaskAlert->Add( m_bitmapAlert, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 ); wxBoxSizer* bSizerWarningText; @@ -474,9 +474,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) ); m_plotFormatOpt->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this ); m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this ); - m_plotFootprintValues->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPValues ), NULL, this ); - m_plotFootprintRefs->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPRefs ), NULL, this ); - m_plotFootprintText->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPText ), NULL, this ); + m_plotDNP->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onDNPCheckbox ), NULL, this ); m_sketchPadsOnFabLayers->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onSketchPads ), NULL, this ); m_scaleOpt->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnSetScaleOpt ), NULL, this ); m_boardSetup->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_PLOT_BASE::onBoardSetup ), NULL, this ); @@ -493,9 +491,7 @@ DIALOG_PLOT_BASE::~DIALOG_PLOT_BASE() this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) ); m_plotFormatOpt->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this ); m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this ); - m_plotFootprintValues->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPValues ), NULL, this ); - m_plotFootprintRefs->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPRefs ), NULL, this ); - m_plotFootprintText->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPText ), NULL, this ); + m_plotDNP->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onDNPCheckbox ), NULL, this ); m_sketchPadsOnFabLayers->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onSketchPads ), NULL, this ); m_scaleOpt->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnSetScaleOpt ), NULL, this ); m_boardSetup->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_PLOT_BASE::onBoardSetup ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_plot_base.fbp b/pcbnew/dialogs/dialog_plot_base.fbp index e1025cd495..e24c94e0fd 100644 --- a/pcbnew/dialogs/dialog_plot_base.fbp +++ b/pcbnew/dialogs/dialog_plot_base.fbp @@ -1,36 +1,34 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wxFormBuilder_Project> - <FileVersion major="1" minor="18"/> + <FileVersion major="1" minor="17"/> <object class="Project" expanded="true"> + <property name="class_decoration">; </property> <property name="code_generation">C++</property> - <property name="cpp_class_decoration"></property> - <property name="cpp_disconnect_events">1</property> - <property name="cpp_event_generation">connect</property> - <property name="cpp_help_provider">none</property> - <property name="cpp_namespace"></property> - <property name="cpp_precompiled_header"></property> - <property name="cpp_use_array_enum">0</property> - <property name="cpp_use_enum">1</property> + <property name="disconnect_events">1</property> + <property name="disconnect_mode">source_name</property> + <property name="disconnect_php_events">0</property> + <property name="disconnect_python_events">0</property> <property name="embedded_files_path">res</property> <property name="encoding">UTF-8</property> + <property name="event_generation">connect</property> <property name="file">dialog_plot_base</property> <property name="first_id">1000</property> + <property name="help_provider">none</property> + <property name="image_path_wrapper_function_name"></property> + <property name="indent_with_spaces"></property> <property name="internationalize">1</property> - <property name="lua_skip_events">1</property> - <property name="lua_ui_table">UI</property> <property name="name">Dialog_Plot_base</property> + <property name="namespace"></property> <property name="path">.</property> - <property name="php_disconnect_events">0</property> - <property name="php_disconnect_mode">source_name</property> - <property name="php_skip_events">1</property> - <property name="python_disconnect_events">0</property> - <property name="python_disconnect_mode">source_name</property> - <property name="python_image_path_wrapper_function_name"></property> - <property name="python_indent_with_spaces"></property> - <property name="python_skip_events">1</property> + <property name="precompiled_header"></property> <property name="relative_path">1</property> + <property name="skip_lua_events">1</property> + <property name="skip_php_events">1</property> + <property name="skip_python_events">1</property> + <property name="ui_table">UI</property> + <property name="use_array_enum">0</property> + <property name="use_enum">0</property> <property name="use_microsoft_bom">0</property> - <property name="use_native_eol">0</property> <object class="Dialog" expanded="true"> <property name="aui_managed">0</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> @@ -607,75 +605,6 @@ <property name="window_style"></property> </object> </object> - <object class="gbsizeritem" expanded="false"> - <property name="border">5</property> - <property name="colspan">1</property> - <property name="column">0</property> - <property name="flag">wxALIGN_CENTER_VERTICAL</property> - <property name="row">1</property> - <property name="rowspan">1</property> - <object class="wxCheckBox" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="checked">1</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Plot footprint values</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_plotFootprintValues</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass"></property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <event name="OnCheckBox">onPlotFPValues</event> - </object> - </object> <object class="gbsizeritem" expanded="false"> <property name="border">5</property> <property name="colspan">1</property> @@ -697,76 +626,7 @@ <property name="caption"></property> <property name="caption_visible">1</property> <property name="center_pane">0</property> - <property name="checked">1</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">ID_PRINT_REF</property> - <property name="label">Plot reference designators</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_plotFootprintRefs</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass"></property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <event name="OnCheckBox">onPlotFPRefs</event> - </object> - </object> - <object class="gbsizeritem" expanded="true"> - <property name="border">5</property> - <property name="colspan">1</property> - <property name="column">0</property> - <property name="flag">wxALIGN_CENTER_VERTICAL</property> - <property name="row">3</property> - <property name="rowspan">1</property> - <object class="wxCheckBox" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="checked">1</property> + <property name="checked">0</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -782,7 +642,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Plot footprint text</property> + <property name="label">Indicate DNP on fabrication layers</property> <property name="max_size"></property> <property name="maximize_button">0</property> <property name="maximum_size"></property> @@ -790,7 +650,143 @@ <property name="minimize_button">0</property> <property name="minimum_size"></property> <property name="moveable">1</property> - <property name="name">m_plotFootprintText</property> + <property name="name">m_plotDNP</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass"></property> + <property name="toolbar_pane">0</property> + <property name="tooltip">Hide or cross-out DNP footprints on fabrication layers</property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + <event name="OnCheckBox">onDNPCheckbox</event> + </object> + </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">25</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag">wxLEFT</property> + <property name="row">3</property> + <property name="rowspan">1</property> + <object class="wxRadioButton" expanded="true"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer"></property> + <property name="aui_name"></property> + <property name="aui_position"></property> + <property name="aui_row"></property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Hide</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_hideDNP</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style">wxRB_GROUP</property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip">Hide the footprint text and graphics</property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="value">0</property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">25</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag">wxLEFT</property> + <property name="row">4</property> + <property name="rowspan">1</property> + <object class="wxRadioButton" expanded="true"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer"></property> + <property name="aui_name"></property> + <property name="aui_position"></property> + <property name="aui_row"></property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Cross-out</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_crossoutDNP</property> <property name="pane_border">1</property> <property name="pane_position"></property> <property name="pane_size"></property> @@ -808,10 +804,10 @@ <property name="validator_style">wxFILTER_NONE</property> <property name="validator_type">wxDefaultValidator</property> <property name="validator_variable"></property> + <property name="value">0</property> <property name="window_extra_style"></property> <property name="window_name"></property> <property name="window_style"></property> - <event name="OnCheckBox">onPlotFPText</event> </object> </object> <object class="gbsizeritem" expanded="false"> @@ -819,7 +815,7 @@ <property name="colspan">1</property> <property name="column">0</property> <property name="flag">wxALIGN_CENTER_VERTICAL</property> - <property name="row">4</property> + <property name="row">1</property> <property name="rowspan">1</property> <object class="wxCheckBox" expanded="false"> <property name="BottomDockable">1</property> @@ -972,7 +968,7 @@ <property name="caption"></property> <property name="caption_visible">1</property> <property name="center_pane">0</property> - <property name="checked">1</property> + <property name="checked">0</property> <property name="close_button">1</property> <property name="context_help"></property> <property name="context_menu">1</property> @@ -1020,11 +1016,11 @@ </object> </object> <object class="gbsizeritem" expanded="false"> - <property name="border">5</property> - <property name="colspan">1</property> - <property name="column">0</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property> - <property name="row">7</property> + <property name="border">30</property> + <property name="colspan">2</property> + <property name="column">1</property> + <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> + <property name="row">6</property> <property name="rowspan">1</property> <object class="wxCheckBox" expanded="false"> <property name="BottomDockable">1</property> diff --git a/pcbnew/dialogs/dialog_plot_base.h b/pcbnew/dialogs/dialog_plot_base.h index d621729104..60c6873f96 100644 --- a/pcbnew/dialogs/dialog_plot_base.h +++ b/pcbnew/dialogs/dialog_plot_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -31,6 +31,7 @@ class WX_HTML_REPORT_PANEL; #include <wx/checklst.h> #include <wx/statbox.h> #include <wx/checkbox.h> +#include <wx/radiobut.h> #include <wx/gbsizer.h> #include <wx/statbmp.h> #include <wx/hyperlink.h> @@ -40,6 +41,9 @@ class WX_HTML_REPORT_PANEL; /////////////////////////////////////////////////////////////////////////// +#define ID_ALLOW_PRINT_PAD_ON_SILKSCREEN 1000 +#define ID_MIROR_OPT 1001 + /////////////////////////////////////////////////////////////////////////////// /// Class DIALOG_PLOT_BASE /////////////////////////////////////////////////////////////////////////////// @@ -48,13 +52,6 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM private: protected: - enum - { - ID_PRINT_REF = 1000, - ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, - ID_MIROR_OPT, - }; - wxBoxSizer* m_MainSizer; wxStaticText* m_staticTextPlotFmt; wxChoice* m_plotFormatOpt; @@ -66,9 +63,9 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM wxCheckListBox* m_layerCheckListBox; wxBoxSizer* m_PlotOptionsSizer; wxCheckBox* m_plotSheetRef; - wxCheckBox* m_plotFootprintValues; - wxCheckBox* m_plotFootprintRefs; - wxCheckBox* m_plotFootprintText; + wxCheckBox* m_plotDNP; + wxRadioButton* m_hideDNP; + wxRadioButton* m_crossoutDNP; wxCheckBox* m_plotInvisibleText; wxCheckBox* m_sketchPadsOnFabLayers; wxCheckBox* m_plotPadNumbers; @@ -138,9 +135,7 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); } virtual void SetPlotFormat( wxCommandEvent& event ) { event.Skip(); } virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlotFPValues( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlotFPRefs( wxCommandEvent& event ) { event.Skip(); } - virtual void onPlotFPText( wxCommandEvent& event ) { event.Skip(); } + virtual void onDNPCheckbox( wxCommandEvent& event ) { event.Skip(); } virtual void onSketchPads( wxCommandEvent& event ) { event.Skip(); } virtual void OnSetScaleOpt( wxCommandEvent& event ) { event.Skip(); } virtual void onBoardSetup( wxHyperlinkEvent& event ) { event.Skip(); } diff --git a/pcbnew/exporters/export_svg.cpp b/pcbnew/exporters/export_svg.cpp index 630f759bbb..d9a842289f 100644 --- a/pcbnew/exporters/export_svg.cpp +++ b/pcbnew/exporters/export_svg.cpp @@ -39,6 +39,10 @@ bool EXPORT_SVG::Plot( BOARD* aBoard, const PCB_PLOT_SVG_OPTIONS& aSvgPlotOption plot_opts.SetPlotPadNumbers( true ); } + plot_opts.SetHideDNPFPsOnFabLayers( aSvgPlotOptions.m_hideDNPFPsOnFabLayers ); + plot_opts.SetSketchDNPFPsOnFabLayers( aSvgPlotOptions.m_sketchDNPFPsOnFabLayers ); + plot_opts.SetCrossoutDNPFPsOnFabLayers( aSvgPlotOptions.m_crossoutDNPFPsOnFabLayers ); + // Adding drill marks, for copper layers if( ( LSET( aSvgPlotOptions.m_printMaskLayer ) & LSET::AllCuMask() ).any() ) { diff --git a/pcbnew/exporters/export_svg.h b/pcbnew/exporters/export_svg.h index 21dcb005ab..e16015b507 100644 --- a/pcbnew/exporters/export_svg.h +++ b/pcbnew/exporters/export_svg.h @@ -35,6 +35,9 @@ struct PCB_PLOT_SVG_OPTIONS LSEQ m_printMaskLayer; bool m_sketchPadsOnFabLayers; + bool m_hideDNPFPsOnFabLayers; + bool m_sketchDNPFPsOnFabLayers; + bool m_crossoutDNPFPsOnFabLayers; // How holes in pads/vias are plotted: // 0 = no hole, 1 = small shape, 2 = actual shape diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp index dca742e5cf..677e2d9b64 100644 --- a/pcbnew/pcb_plot_params.cpp +++ b/pcbnew/pcb_plot_params.cpp @@ -117,6 +117,9 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS() m_plotFPText = true; m_plotInvisibleText = false; m_sketchPadsOnFabLayers = false; + m_hideDNPFPsOnFabLayers = false; + m_sketchDNPFPsOnFabLayers = true; + m_crossoutDNPFPsOnFabLayers = true; m_plotPadNumbers = false; m_subtractMaskFromSilk = false; m_format = PLOT_FORMAT::GERBER; @@ -140,15 +143,15 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS() // This parameter controls if the NPTH pads will be plotted or not // it is a "local" parameter - m_skipNPTH_Pads = false; + m_skipNPTH_Pads = false; // line width to plot items in outline mode. m_sketchPadLineWidth = pcbIUScale.mmToIU( 0.1 ); - m_default_colors = std::make_shared<COLOR_SETTINGS>(); - m_colors = m_default_colors.get(); + m_default_colors = std::make_shared<COLOR_SETTINGS>(); + m_colors = m_default_colors.get(); - m_blackAndWhite = true; + m_blackAndWhite = true; } @@ -240,12 +243,12 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter, KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, getTokenName( T_psa4output ), m_A4Output ); - KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotreference", m_plotReference ); - KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotvalue", m_plotValue ); - KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotfptext", m_plotFPText ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotinvisibletext", m_plotInvisibleText ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "sketchpadsonfab", m_sketchPadsOnFabLayers ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotpadnumbers", m_plotPadNumbers ); + KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "hidednponfab", m_hideDNPFPsOnFabLayers ); + KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "sketchdnponfab", m_sketchDNPFPsOnFabLayers ); + KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "crossoutdnponfab", m_crossoutDNPFPsOnFabLayers ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "subtractmaskfromsilk", m_subtractMaskFromSilk ); aFormatter->Print( aNestLevel+1, "(outputformat %d)\n", static_cast<int>( m_format ) ); KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "mirror", m_mirror ); @@ -356,6 +359,15 @@ bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams ) const if( m_plotPadNumbers != aPcbPlotParams.m_plotPadNumbers ) return false; + if( m_hideDNPFPsOnFabLayers != aPcbPlotParams.m_hideDNPFPsOnFabLayers ) + return false; + + if( m_sketchDNPFPsOnFabLayers != aPcbPlotParams.m_sketchDNPFPsOnFabLayers ) + return false; + + if( m_crossoutDNPFPsOnFabLayers != aPcbPlotParams.m_crossoutDNPFPsOnFabLayers ) + return false; + if( m_subtractMaskFromSilk != aPcbPlotParams.m_subtractMaskFromSilk ) return false; @@ -607,18 +619,6 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) aPcbPlotParams->m_negative = parseBool(); break; - case T_plotreference: - aPcbPlotParams->m_plotReference = parseBool(); - break; - - case T_plotfptext: - aPcbPlotParams->m_plotFPText = parseBool(); - break; - - case T_plotvalue: - aPcbPlotParams->m_plotValue = parseBool(); - break; - case T_plotinvisibletext: aPcbPlotParams->m_plotInvisibleText = parseBool(); break; @@ -631,6 +631,18 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) aPcbPlotParams->m_plotPadNumbers = parseBool(); break; + case T_hidednponfab: + aPcbPlotParams->m_hideDNPFPsOnFabLayers = parseBool(); + break; + + case T_sketchdnponfab: + aPcbPlotParams->m_sketchDNPFPsOnFabLayers = parseBool(); + break; + + case T_crossoutdnponfab: + aPcbPlotParams->m_crossoutDNPFPsOnFabLayers = parseBool(); + break; + case T_subtractmaskfromsilk: aPcbPlotParams->m_subtractMaskFromSilk = parseBool(); break; diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h index f519fa7747..1414deef33 100644 --- a/pcbnew/pcb_plot_params.h +++ b/pcbnew/pcb_plot_params.h @@ -104,6 +104,13 @@ public: void SetSketchPadLineWidth( int aWidth ) { m_sketchPadLineWidth = aWidth; } int GetSketchPadLineWidth() const { return m_sketchPadLineWidth; } + void SetHideDNPFPsOnFabLayers( bool aFlag ) { m_hideDNPFPsOnFabLayers = aFlag; } + bool GetHideDNPFPsOnFabLayers() const { return m_hideDNPFPsOnFabLayers; } + void SetSketchDNPFPsOnFabLayers( bool aFlag ) { m_sketchDNPFPsOnFabLayers = aFlag; } + bool GetSketchDNPFPsOnFabLayers() const { return m_sketchDNPFPsOnFabLayers; } + void SetCrossoutDNPFPsOnFabLayers( bool aFlag ) { m_crossoutDNPFPsOnFabLayers = aFlag; } + bool GetCrossoutDNPFPsOnFabLayers() const { return m_crossoutDNPFPsOnFabLayers; } + void SetPlotInvisibleText( bool aFlag ) { m_plotInvisibleText = aFlag; } bool GetPlotInvisibleText() const { return m_plotInvisibleText; } void SetPlotValue( bool aFlag ) { m_plotValue = aFlag; } @@ -271,6 +278,10 @@ private: bool m_sketchPadsOnFabLayers; ///< Plots pads outlines on fab layers int m_sketchPadLineWidth; + bool m_hideDNPFPsOnFabLayers; + bool m_sketchDNPFPsOnFabLayers; + bool m_crossoutDNPFPsOnFabLayers; + double m_fineScaleAdjustX; ///< Compensation for printer scale errors (and therefore double m_fineScaleAdjustY; ///< expected to be very near 1.0). Only X and Y ///< dimensions are adjusted: circles are plotted as diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp index 11b6e630fa..10b4842b08 100644 --- a/pcbnew/pcbnew_jobs_handler.cpp +++ b/pcbnew/pcbnew_jobs_handler.cpp @@ -423,6 +423,9 @@ int PCBNEW_JOBS_HANDLER::JobExportSvg( JOB* aJob ) svgPlotOptions.m_printMaskLayer = aSvgJob->m_printMaskLayer; svgPlotOptions.m_plotFrame = aSvgJob->m_plotDrawingSheet; svgPlotOptions.m_sketchPadsOnFabLayers = aSvgJob->m_sketchPadsOnFabLayers; + svgPlotOptions.m_hideDNPFPsOnFabLayers = aSvgJob->m_hideDNPFPsOnFabLayers; + svgPlotOptions.m_sketchDNPFPsOnFabLayers = aSvgJob->m_sketchDNPFPsOnFabLayers; + svgPlotOptions.m_crossoutDNPFPsOnFabLayers = aSvgJob->m_crossoutDNPFPsOnFabLayers; svgPlotOptions.m_drillShapeOption = aSvgJob->m_drillShapeOption; if( aJob->IsCli() ) @@ -566,6 +569,10 @@ int PCBNEW_JOBS_HANDLER::JobExportPdf( JOB* aJob ) plotOpts.SetPlotPadNumbers( true ); } + plotOpts.SetHideDNPFPsOnFabLayers( aPdfJob->m_hideDNPFPsOnFabLayers ); + plotOpts.SetSketchDNPFPsOnFabLayers( aPdfJob->m_sketchDNPFPsOnFabLayers ); + plotOpts.SetCrossoutDNPFPsOnFabLayers( aPdfJob->m_crossoutDNPFPsOnFabLayers ); + switch( aPdfJob->m_drillShapeOption ) { default: @@ -1245,6 +1252,9 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR svgPlotOptions.m_pageSizeMode = 2; // board bounding box svgPlotOptions.m_printMaskLayer = aSvgJob->m_printMaskLayer; svgPlotOptions.m_sketchPadsOnFabLayers = aSvgJob->m_sketchPadsOnFabLayers; + svgPlotOptions.m_hideDNPFPsOnFabLayers = aSvgJob->m_hideDNPFPsOnFabLayers; + svgPlotOptions.m_sketchDNPFPsOnFabLayers = aSvgJob->m_sketchDNPFPsOnFabLayers; + svgPlotOptions.m_crossoutDNPFPsOnFabLayers = aSvgJob->m_crossoutDNPFPsOnFabLayers; svgPlotOptions.m_plotFrame = false; if( !EXPORT_SVG::Plot( brd.get(), svgPlotOptions ) ) diff --git a/pcbnew/pcbplot.h b/pcbnew/pcbplot.h index 9ba0c72fa0..a5ac1c3203 100644 --- a/pcbnew/pcbplot.h +++ b/pcbnew/pcbplot.h @@ -91,7 +91,7 @@ public: void PlotPcbTarget( const PCB_TARGET* aMire ); void PlotZone( const ZONE* aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET& aPolysList ); void PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, bool aIsKnockout, - const KIFONT::METRICS& aFontMetrics ); + const KIFONT::METRICS& aFontMetrics, bool aStrikeout = false ); void PlotShape( const PCB_SHAPE* aShape ); void PlotTableBorders( const PCB_TABLE* aTable ); @@ -129,6 +129,16 @@ public: COLOR4D getColor( int aLayer ) const; private: + bool hideDNPItems( PCB_LAYER_ID aLayer ) + { + return GetHideDNPFPsOnFabLayers() && ( aLayer == F_Fab || aLayer == B_Fab ); + } + + bool crossoutDNPItems( PCB_LAYER_ID aLayer ) + { + return GetCrossoutDNPFPsOnFabLayers() && ( aLayer == F_Fab || aLayer == B_Fab ); + } + /** * Helper function to plot a single drill mark. * diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp index 0c5e5ec438..3c9571f544 100644 --- a/pcbnew/plot_board_layers.cpp +++ b/pcbnew/plot_board_layers.cpp @@ -571,6 +571,20 @@ void PlotStandardLayer( BOARD* aBoard, PLOTTER* aPlotter, LSET aLayerMask, pad->SetRoundRectRadiusRatio( padCornerRadiusRatio ); } + if( footprint->IsDNP() + && !itemplotter.GetHideDNPFPsOnFabLayers() + && itemplotter.GetCrossoutDNPFPsOnFabLayers() + && ( onFrontFab || onBackFab ) ) + { + BOX2I rect = footprint->GetBoundingHull().BBox(); + int width = aBoard->GetDesignSettings().m_LineThickness[ LAYER_CLASS_FAB ]; + + aPlotter->ThickSegment( rect.GetOrigin(), rect.GetEnd(), width, FILLED, nullptr ); + aPlotter->ThickSegment( VECTOR2I( rect.GetLeft(), rect.GetBottom() ), + VECTOR2I( rect.GetRight(), rect.GetTop() ), + width, FILLED, nullptr ); + } + aPlotter->EndBlock( nullptr ); } diff --git a/pcbnew/plot_brditems_plotter.cpp b/pcbnew/plot_brditems_plotter.cpp index 8dd3eeb534..b187bf0fd0 100644 --- a/pcbnew/plot_brditems_plotter.cpp +++ b/pcbnew/plot_brditems_plotter.cpp @@ -354,18 +354,22 @@ void BRDITEMS_PLOTTER::PlotFootprintTextItems( const FOOTPRINT* aFootprint ) // Reference and value have special controls for forcing their plotting if( GetPlotReference() && m_layerMask[textLayer] - && ( textItem->IsVisible() || GetPlotInvisibleText() ) ) + && ( textItem->IsVisible() || GetPlotInvisibleText() ) + && !( aFootprint->IsDNP() && hideDNPItems( textLayer ) ) ) { - PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics() ); + PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics(), + aFootprint->IsDNP() && crossoutDNPItems( textLayer ) ); } textItem = &aFootprint->Value(); textLayer = textItem->GetLayer(); if( GetPlotValue() && m_layerMask[textLayer] - && ( textItem->IsVisible() || GetPlotInvisibleText() ) ) + && ( textItem->IsVisible() || GetPlotInvisibleText() ) + && !( aFootprint->IsDNP() && hideDNPItems( textLayer ) ) ) { - PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics() ); + PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics(), + false ); } std::vector<PCB_TEXT*> texts; @@ -393,20 +397,32 @@ void BRDITEMS_PLOTTER::PlotFootprintTextItems( const FOOTPRINT* aFootprint ) continue; textLayer = text->GetLayer(); + bool strikeout = false; if( textLayer == Edge_Cuts || textLayer >= PCB_LAYER_ID_COUNT ) continue; + if( aFootprint->IsDNP() && hideDNPItems( textLayer ) ) + continue; + if( !m_layerMask[textLayer] || aFootprint->GetPrivateLayers().test( textLayer ) ) continue; - if( text->GetText() == wxT( "${REFERENCE}" ) && !GetPlotReference() ) - continue; + if( text->GetText() == wxT( "${REFERENCE}" ) ) + { + if( !GetPlotReference() ) + continue; - if( text->GetText() == wxT( "${VALUE}" ) && !GetPlotValue() ) - continue; + strikeout = aFootprint->IsDNP() && crossoutDNPItems( textLayer ); + } - PlotText( text, textLayer, text->IsKnockout(), text->GetFontMetrics() ); + if( text->GetText() == wxT( "${VALUE}" ) ) + { + if( !GetPlotValue() ) + continue; + } + + PlotText( text, textLayer, text->IsKnockout(), text->GetFontMetrics(), strikeout ); } } @@ -590,10 +606,15 @@ void BRDITEMS_PLOTTER::PlotFootprintGraphicItems( const FOOTPRINT* aFootprint ) { for( const BOARD_ITEM* item : aFootprint->GraphicalItems() ) { - if( aFootprint->GetPrivateLayers().test( item->GetLayer() ) ) + PCB_LAYER_ID itemLayer = item->GetLayer(); + + if( aFootprint->GetPrivateLayers().test( itemLayer ) ) continue; - if( !m_layerMask[ item->GetLayer() ] ) + if( aFootprint->IsDNP() && hideDNPItems( itemLayer ) ) + continue; + + if( !m_layerMask[ itemLayer ] ) continue; switch( item->Type() ) @@ -639,7 +660,7 @@ void BRDITEMS_PLOTTER::PlotFootprintGraphicItems( const FOOTPRINT* aFootprint ) #include <font/stroke_font.h> void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, bool aIsKnockout, - const KIFONT::METRICS& aFontMetrics ) + const KIFONT::METRICS& aFontMetrics, bool aStrikeout ) { KIFONT::FONT* font = aText->GetFont(); @@ -678,6 +699,26 @@ void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, boo m_plotter->SetCurrentLineWidth( attrs.m_StrokeWidth ); + auto strikeoutText = + [&]( const PCB_TEXT* text ) + { + SHAPE_POLY_SET textPoly; + + text->TransformTextToPolySet( textPoly, 0, ARC_LOW_DEF, ERROR_INSIDE ); + textPoly.Rotate( -text->GetDrawRotation(), text->GetDrawPos() ); + + BOX2I rect = textPoly.BBox(); + VECTOR2I start( rect.GetLeft() - attrs.m_StrokeWidth, + ( rect.GetTop() + rect.GetBottom() ) / 2 ); + VECTOR2I end( rect.GetRight() + attrs.m_StrokeWidth, + ( rect.GetTop() + rect.GetBottom() ) / 2 ); + + RotatePoint( start, text->GetDrawPos(), text->GetDrawRotation() ); + RotatePoint( end, text->GetDrawPos(), text->GetDrawRotation() ); + + m_plotter->ThickSegment( start, end, attrs.m_StrokeWidth, FILLED, nullptr ); + }; + if( aIsKnockout ) { const PCB_TEXT* text = static_cast<const PCB_TEXT*>( aText ); @@ -697,17 +738,24 @@ void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, boo wxStringSplit( shownText, strings_list, '\n' ); positions.reserve( strings_list.Count() ); - aText->GetLinePositions( positions, strings_list.Count() ); + aText->GetLinePositions( positions, (int) strings_list.Count() ); for( unsigned ii = 0; ii < strings_list.Count(); ii++ ) { wxString& txt = strings_list.Item( ii ); - m_plotter->PlotText( positions[ii], color, txt, attrs, font, aFontMetrics, &gbr_metadata ); + m_plotter->PlotText( positions[ii], color, txt, attrs, font, aFontMetrics, + &gbr_metadata ); } + + if( aStrikeout && strings_list.Count() == 1 ) + strikeoutText( static_cast<const PCB_TEXT*>( aText ) ); } else { m_plotter->PlotText( pos, color, shownText, attrs, font, aFontMetrics, &gbr_metadata ); + + if( aStrikeout ) + strikeoutText( static_cast<const PCB_TEXT*>( aText ) ); } } @@ -779,9 +827,9 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( !m_layerMask[aShape->GetLayer()] ) return; - bool sketch = GetPlotMode() == SKETCH; - int thickness = aShape->GetWidth(); - LINE_STYLE lineStyle = aShape->GetStroke().GetLineStyle(); + OUTLINE_MODE plotMode = GetPlotMode(); + int thickness = aShape->GetWidth(); + LINE_STYLE lineStyle = aShape->GetStroke().GetLineStyle(); m_plotter->SetColor( getColor( aShape->GetLayer() ) ); @@ -794,6 +842,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) gbr_metadata.SetNetAttribType( GBR_NETLIST_METADATA::GBR_NETINFO_CMP ); } + if( parentFP && parentFP->IsDNP() && GetSketchDNPFPsOnFabLayers() ) + { + if( aShape->GetLayer() == F_Fab || aShape->GetLayer() == B_Fab ) + plotMode = SKETCH; + } + if( aShape->GetLayer() == Edge_Cuts ) { gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT ); @@ -826,7 +880,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) switch( aShape->GetShape() ) { case SHAPE_T::SEGMENT: - m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, GetPlotMode(), + m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, plotMode, &gbr_metadata ); break; @@ -834,12 +888,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( aShape->IsFilled() ) { m_plotter->FilledCircle( aShape->GetStart(), aShape->GetRadius() * 2 + thickness, - GetPlotMode(), &gbr_metadata ); + plotMode, &gbr_metadata ); } else { m_plotter->ThickCircle( aShape->GetStart(), aShape->GetRadius() * 2, thickness, - GetPlotMode(), &gbr_metadata ); + plotMode, &gbr_metadata ); } break; @@ -851,11 +905,11 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( std::abs( aShape->GetArcAngle().AsDegrees() ) == 360.0 ) { m_plotter->ThickCircle( aShape->GetCenter(), aShape->GetRadius() * 2, thickness, - GetPlotMode(), &gbr_metadata ); + plotMode, &gbr_metadata ); } else { - m_plotter->ThickArc( *aShape, GetPlotMode(), &gbr_metadata ); + m_plotter->ThickArc( *aShape, plotMode, &gbr_metadata ); } break; @@ -869,13 +923,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) case SHAPE_T::POLY: if( aShape->IsPolyShapeValid() ) { - if( sketch ) + if( plotMode == SKETCH ) { for( auto it = aShape->GetPolyShape().CIterateSegments( 0 ); it; it++ ) { - auto seg = it.Get(); - m_plotter->ThickSegment( seg.A, seg.B, thickness, GetPlotMode(), - &gbr_metadata ); + const SEG& seg = it.Get(); + m_plotter->ThickSegment( seg.A, seg.B, thickness, SKETCH, &gbr_metadata ); } } else @@ -902,8 +955,8 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) // (as region for Gerber plotter to manage attributes) if( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER ) { - static_cast<GERBER_PLOTTER*>( m_plotter )-> - PlotPolyAsRegion( poly, fill, thickness, &gbr_metadata ); + GERBER_PLOTTER* gbr_plotter = static_cast<GERBER_PLOTTER*>( m_plotter ); + gbr_plotter->PlotPolyAsRegion( poly, fill, thickness, &gbr_metadata ); } else { @@ -919,15 +972,14 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) { std::vector<VECTOR2I> pts = aShape->GetRectCorners(); - if( sketch ) + if( plotMode == SKETCH ) { - m_plotter->ThickSegment( pts[0], pts[1], thickness, GetPlotMode(), &gbr_metadata ); - m_plotter->ThickSegment( pts[1], pts[2], thickness, GetPlotMode(), &gbr_metadata ); - m_plotter->ThickSegment( pts[2], pts[3], thickness, GetPlotMode(), &gbr_metadata ); - m_plotter->ThickSegment( pts[3], pts[0], thickness, GetPlotMode(), &gbr_metadata ); + m_plotter->ThickSegment( pts[0], pts[1], thickness, SKETCH, &gbr_metadata ); + m_plotter->ThickSegment( pts[1], pts[2], thickness, SKETCH, &gbr_metadata ); + m_plotter->ThickSegment( pts[2], pts[3], thickness, SKETCH, &gbr_metadata ); + m_plotter->ThickSegment( pts[3], pts[0], thickness, SKETCH, &gbr_metadata ); } - - if( !sketch ) + else { SHAPE_LINE_CHAIN poly; @@ -940,8 +992,8 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER ) { - static_cast<GERBER_PLOTTER*>( m_plotter )-> - PlotPolyAsRegion( poly, fill_mode, thickness, &gbr_metadata ); + GERBER_PLOTTER* gbr_plotter = static_cast<GERBER_PLOTTER*>( m_plotter ); + gbr_plotter->PlotPolyAsRegion( poly, fill_mode, thickness, &gbr_metadata ); } else { @@ -965,7 +1017,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) STROKE_PARAMS::Stroke( shape, lineStyle, thickness, m_plotter->RenderSettings(), [&]( const VECTOR2I& a, const VECTOR2I& b ) { - m_plotter->ThickSegment( a, b, thickness, GetPlotMode(), + m_plotter->ThickSegment( a, b, thickness, plotMode, &gbr_metadata ); } ); }