From b0eef3ee289fc90cc7e79d0a2b31698b40ab13dc Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Sun, 2 Mar 2025 19:26:34 +0000
Subject: [PATCH] Persist some missing jobset arguments.

Also adds some missing CLI arguments.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20116
---
 common/jobs/job_export_pcb_dxf.cpp      |  5 ++---
 common/jobs/job_export_pcb_gerber.cpp   | 10 ++-------
 common/jobs/job_export_pcb_pdf.cpp      | 14 ------------
 common/jobs/job_export_pcb_plot.cpp     | 30 +++++++++++++++++++++++--
 common/jobs/job_export_pcb_svg.cpp      | 11 +--------
 kicad/cli/command_pcb_export_dxf.cpp    | 20 +++++++++++++++++
 kicad/cli/command_pcb_export_gerber.cpp | 20 +++++++++++++++++
 7 files changed, 73 insertions(+), 37 deletions(-)

diff --git a/common/jobs/job_export_pcb_dxf.cpp b/common/jobs/job_export_pcb_dxf.cpp
index 31cab43b69..58e6429e5d 100644
--- a/common/jobs/job_export_pcb_dxf.cpp
+++ b/common/jobs/job_export_pcb_dxf.cpp
@@ -43,9 +43,8 @@ JOB_EXPORT_PCB_DXF::JOB_EXPORT_PCB_DXF() :
 {
     m_plotDrawingSheet = false;
 
-    m_params.emplace_back(
-            new JOB_PARAM<bool>( "plot_footprint_values", &m_plotFootprintValues, m_plotFootprintValues ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "plot_graphic_items_using_contours", &m_plotGraphicItemsUsingContours,
+    m_params.emplace_back( new JOB_PARAM<bool>( "plot_graphic_items_using_contours",
+                                                &m_plotGraphicItemsUsingContours,
                                                 m_plotGraphicItemsUsingContours ) );
     m_params.emplace_back( new JOB_PARAM<DXF_UNITS>( "units", &m_dxfUnits, m_dxfUnits ) );
     m_params.emplace_back( new JOB_PARAM<bool>( "polygon_mode", &m_polygonMode, m_polygonMode ) );
diff --git a/common/jobs/job_export_pcb_gerber.cpp b/common/jobs/job_export_pcb_gerber.cpp
index 78c4cb80ef..d4b063fa63 100644
--- a/common/jobs/job_export_pcb_gerber.cpp
+++ b/common/jobs/job_export_pcb_gerber.cpp
@@ -33,19 +33,13 @@ JOB_EXPORT_PCB_GERBER::JOB_EXPORT_PCB_GERBER( const std::string& aType ) :
 {
     m_plotDrawingSheet = false;
 
-    m_params.emplace_back( new JOB_PARAM<wxString>( "drawing_sheet",
-                                                    &m_drawingSheet,
-                                                    m_drawingSheet ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "plot_footprint_values",
-                                                &m_plotFootprintValues,
-                                                m_plotFootprintValues ) );
-
     m_params.emplace_back( new JOB_PARAM<bool>( "include_netlist_attributes",
                                                 &m_includeNetlistAttributes,
                                                 m_includeNetlistAttributes ) );
 
     m_params.emplace_back( new JOB_PARAM<bool>( "use_x2_format", &m_useX2Format, m_useX2Format ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "disable_aperture_macros", &m_disableApertureMacros,
+    m_params.emplace_back( new JOB_PARAM<bool>( "disable_aperture_macros",
+                                                &m_disableApertureMacros,
                                                 m_disableApertureMacros ) );
     m_params.emplace_back( new JOB_PARAM<bool>( "use_protel_file_extension",
                                                 &m_useProtelFileExtension,
diff --git a/common/jobs/job_export_pcb_pdf.cpp b/common/jobs/job_export_pcb_pdf.cpp
index dceb36bead..e9aaded81d 100644
--- a/common/jobs/job_export_pcb_pdf.cpp
+++ b/common/jobs/job_export_pcb_pdf.cpp
@@ -46,20 +46,6 @@ JOB_EXPORT_PCB_PDF::JOB_EXPORT_PCB_PDF() :
 
     m_params.emplace_back( new JOB_PARAM<wxString>( "color_theme",
             &m_colorTheme, m_colorTheme ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "mirror",
-            &m_mirror, m_mirror ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "black_and_white",
-            &m_blackAndWhite, m_blackAndWhite ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "negative",
-            &m_negative, m_negative ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "plot_footprint_values",
-            &m_plotFootprintValues, m_plotFootprintValues ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "plot_pad_numbers",
-            &m_plotPadNumbers, m_plotPadNumbers ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "sketch_pads_on_fab_layers",
-            &m_sketchPadsOnFabLayers, m_sketchPadsOnFabLayers ) );
-    m_params.emplace_back( new JOB_PARAM<DRILL_MARKS>( "drill_shape",
-            &m_drillShapeOption, m_drillShapeOption ) );
 
     m_params.emplace_back( new JOB_PARAM<bool>( "pdf_metadata",
             &m_pdfMetadata, m_pdfMetadata ) );
diff --git a/common/jobs/job_export_pcb_plot.cpp b/common/jobs/job_export_pcb_plot.cpp
index 429b220b3f..d82bf08681 100644
--- a/common/jobs/job_export_pcb_plot.cpp
+++ b/common/jobs/job_export_pcb_plot.cpp
@@ -49,6 +49,31 @@ JOB_EXPORT_PCB_PLOT::JOB_EXPORT_PCB_PLOT( PLOT_FORMAT aFormat, const std::string
                                                 &m_printMaskLayersToIncludeOnAllLayers,
                                                 m_printMaskLayersToIncludeOnAllLayers ) );
 
+    m_params.emplace_back( new JOB_PARAM<bool>( "mirror",
+                                                &m_mirror, m_mirror ) );
+    m_params.emplace_back( new JOB_PARAM<bool>( "black_and_white",
+                                                &m_blackAndWhite, m_blackAndWhite ) );
+    m_params.emplace_back( new JOB_PARAM<bool>( "negative",
+                                                &m_negative, m_negative ) );
+
+    m_params.emplace_back( new JOB_PARAM<bool>( "plot_footprint_values",
+                                                &m_plotFootprintValues, m_plotFootprintValues ) );
+    m_params.emplace_back( new JOB_PARAM<bool>( "plot_ref_des",
+                                                &m_plotRefDes, m_plotRefDes ) );
+
+    m_params.emplace_back( new JOB_PARAM<bool>( "hide_dnp_footprints_on_fab_layers",
+                                                &m_hideDNPFPsOnFabLayers,
+                                                m_hideDNPFPsOnFabLayers ) );
+    m_params.emplace_back( new JOB_PARAM<bool>( "sketch_dnp_footprints_on_fab_layers",
+                                                &m_sketchDNPFPsOnFabLayers,
+                                                m_sketchDNPFPsOnFabLayers ) );
+    m_params.emplace_back( new JOB_PARAM<bool>( "crossout_dnp_footprints_on_fab_layers",
+                                                &m_crossoutDNPFPsOnFabLayers,
+                                                m_crossoutDNPFPsOnFabLayers ) );
+
+    m_params.emplace_back( new JOB_PARAM<bool>( "sketch_pads_on_fab_layers",
+                                                &m_sketchPadsOnFabLayers,
+                                                m_sketchPadsOnFabLayers ) );
     m_params.emplace_back( new JOB_PARAM<bool>( "plot_pad_numbers",
                                                 &m_plotPadNumbers, m_plotPadNumbers ) );
 
@@ -59,11 +84,12 @@ JOB_EXPORT_PCB_PLOT::JOB_EXPORT_PCB_PLOT( PLOT_FORMAT aFormat, const std::string
                                                 &m_subtractSolderMaskFromSilk,
                                                 m_subtractSolderMaskFromSilk ) );
 
-    m_params.emplace_back( new JOB_PARAM<bool>( "plot_ref_des", &m_plotRefDes, m_plotRefDes ) );
-
     m_params.emplace_back( new JOB_PARAM<bool>( "use_drill_origin",
                                                 &m_useDrillOrigin, m_useDrillOrigin ) );
 
+    m_params.emplace_back( new JOB_PARAM<DRILL_MARKS>( "drill_shape",
+                                                       &m_drillShapeOption, m_drillShapeOption ) );
+
     m_params.emplace_back( new JOB_PARAM<wxString>( "drawing_sheet",
                                                     &m_drawingSheet, m_drawingSheet ) );
 }
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_svg.cpp b/common/jobs/job_export_pcb_svg.cpp
index 321c89ddeb..3c51729d08 100644
--- a/common/jobs/job_export_pcb_svg.cpp
+++ b/common/jobs/job_export_pcb_svg.cpp
@@ -37,16 +37,7 @@ JOB_EXPORT_PCB_SVG::JOB_EXPORT_PCB_SVG() :
     m_plotDrawingSheet = true;
 
     m_params.emplace_back( new JOB_PARAM<wxString>( "color_theme", &m_colorTheme, m_colorTheme ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "mirror", &m_mirror, m_mirror ) );
-    m_params.emplace_back(
-            new JOB_PARAM<bool>( "black_and_white", &m_blackAndWhite, m_blackAndWhite ) );
-    m_params.emplace_back( new JOB_PARAM<bool>( "negative", &m_negative, m_negative ) );
-    m_params.emplace_back( new JOB_PARAM<bool>(
-            "sketch_pads_on_fab_layers", &m_sketchPadsOnFabLayers, m_sketchPadsOnFabLayers ) );
-    m_params.emplace_back(
-            new JOB_PARAM<int>( "page_size_mode", &m_pageSizeMode, m_pageSizeMode ) );
-    m_params.emplace_back(
-            new JOB_PARAM<DRILL_MARKS>( "drill_shape", &m_drillShapeOption, m_drillShapeOption ) );
+    m_params.emplace_back( new JOB_PARAM<int>( "page_size_mode", &m_pageSizeMode, m_pageSizeMode ) );
     m_params.emplace_back( new JOB_PARAM<unsigned int>( "precision", &m_precision, m_precision ) );
     m_params.emplace_back( new JOB_PARAM<GEN_MODE>( "gen_mode", &m_genMode, m_genMode ) );
 }
diff --git a/kicad/cli/command_pcb_export_dxf.cpp b/kicad/cli/command_pcb_export_dxf.cpp
index ea30c4d94f..8019cf0e20 100644
--- a/kicad/cli/command_pcb_export_dxf.cpp
+++ b/kicad/cli/command_pcb_export_dxf.cpp
@@ -53,6 +53,22 @@ CLI::PCB_EXPORT_DXF_COMMAND::PCB_EXPORT_DXF_COMMAND() : PCB_EXPORT_BASE_COMMAND(
             .help( UTF8STDSTR( _( "Exclude the value text" ) ) )
             .flag();
 
+    m_argParser.add_argument( "--sp", ARG_SKETCH_PADS_ON_FAB_LAYERS )
+            .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_SUBTRACT_SOLDERMASK )
             .help( UTF8STDSTR( _( "Subtract soldermask from silkscreen" ) ) )
             .flag();
@@ -117,6 +133,10 @@ int CLI::PCB_EXPORT_DXF_COMMAND::doPerform( KIWAY& aKiway )
     dxfJob->m_filename = m_argInput;
     dxfJob->SetConfiguredOutputPath( m_argOutput );
     dxfJob->m_drawingSheet = m_argDrawingSheet;
+    dxfJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
+    dxfJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
+    dxfJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS );
+    dxfJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS );
     dxfJob->SetVarOverrides( m_argDefineVars );
 
     if( !wxFile::Exists( dxfJob->m_filename ) )
diff --git a/kicad/cli/command_pcb_export_gerber.cpp b/kicad/cli/command_pcb_export_gerber.cpp
index 5834ae2101..ebe6aa6da0 100644
--- a/kicad/cli/command_pcb_export_gerber.cpp
+++ b/kicad/cli/command_pcb_export_gerber.cpp
@@ -53,6 +53,22 @@ CLI::PCB_EXPORT_GERBER_COMMAND::PCB_EXPORT_GERBER_COMMAND( const std::string& aN
             .help( UTF8STDSTR( _( "Include the border and title block" ) ) )
             .flag();
 
+    m_argParser.add_argument( "--sp", ARG_SKETCH_PADS_ON_FAB_LAYERS )
+            .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_NO_X2 )
             .help( UTF8STDSTR( _( "Do not use the extended X2 format" ) ) )
             .flag();
@@ -100,6 +116,10 @@ int CLI::PCB_EXPORT_GERBER_COMMAND::populateJob( JOB_EXPORT_PCB_GERBER* aJob )
     aJob->m_filename = m_argInput;
     aJob->SetConfiguredOutputPath( m_argOutput );
     aJob->m_drawingSheet = m_argDrawingSheet;
+    aJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
+    aJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
+    aJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS );
+    aJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS );
     aJob->SetVarOverrides( m_argDefineVars );
 
     aJob->m_plotFootprintValues = !m_argParser.get<bool>( ARG_EXCLUDE_VALUE );