From 491fc2c8f2d9fe1619ae5df4095fed202a08c954 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sun, 3 Jan 2021 13:59:23 +0000 Subject: [PATCH] Save DXF plot params to file and remove some dead code. Fixes https://gitlab.com/kicad/code/kicad/issues/6720 --- common/pcb_plot_params.keywords | 3 ++ pcbnew/dialogs/dialog_plot.cpp | 8 +--- pcbnew/pcb_plot_params.cpp | 74 +++++++++++++++++--------------- pcbnew/pcb_plot_params.h | 6 +-- pcbnew/plot_board_layers.cpp | 2 +- pcbnew/plot_brditems_plotter.cpp | 59 +++++++++++++------------ 6 files changed, 77 insertions(+), 75 deletions(-) diff --git a/common/pcb_plot_params.keywords b/common/pcb_plot_params.keywords index 0c8991c5d0..6a97d9a0be 100644 --- a/common/pcb_plot_params.keywords +++ b/common/pcb_plot_params.keywords @@ -1,6 +1,9 @@ creategerberjobfile disableapertmacros drillshape +dxfimperialunits +dxfpolygonmode +dxfusepcbnewfont excludeedgelayer false gerberprecision diff --git a/pcbnew/dialogs/dialog_plot.cpp b/pcbnew/dialogs/dialog_plot.cpp index b52b018a9b..7b2d5d0374 100644 --- a/pcbnew/dialogs/dialog_plot.cpp +++ b/pcbnew/dialogs/dialog_plot.cpp @@ -754,14 +754,10 @@ void DIALOG_PLOT::applyPlotSettings() dirStr.Replace( wxT( "\\" ), wxT( "/" ) ); tempOptions.SetOutputDirectory( dirStr ); - if( !m_plotOpts.IsSameAs( tempOptions, false ) ) + if( !m_plotOpts.IsSameAs( tempOptions ) ) { - // First, mark board as modified only for parameters saved in file - if( !m_plotOpts.IsSameAs( tempOptions, true ) ) - m_parent->OnModify(); - - // Now, save any change, for the session m_parent->SetPlotSettings( tempOptions ); + m_parent->OnModify(); m_plotOpts = tempOptions; } } diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp index 803804a248..bd057c5ecc 100644 --- a/pcbnew/pcb_plot_params.cpp +++ b/pcbnew/pcb_plot_params.cpp @@ -132,7 +132,6 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS() m_fineScaleAdjustX = 1.0; m_fineScaleAdjustY = 1.0; m_widthAdjust = 0.; - m_color = BLACK; m_textMode = PLOT_TEXT_MODE::DEFAULT; m_outputDirectory.clear(); m_layerSelection = LSET( 7, F_SilkS, B_SilkS, F_Mask, B_Mask, @@ -197,7 +196,7 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter, aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_gerberprecision ), m_gerberPrecision ); - // Svg options + // SVG options aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_svguseinch ), m_svgUseInch ? trueStr : falseStr ); aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_svgprecision ), @@ -213,18 +212,23 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter, GetPlotMode() == SKETCH ? 2 : 1 ); // Value 0 (LINE mode) no more used aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_useauxorigin ), m_useAuxOrigin ? trueStr : falseStr ); + + // HPGL options aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpennumber ), m_HPGLPenNum ); - - // Obsolete parameter, pen speed is no more managed, because hpgl format - // is now an export format, and for this, pen speed has no meaning - // aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ), - // m_HPGLPenSpeed ); - aFormatter->Print( aNestLevel+1, "(%s %d)\n", getTokenName( T_hpglpenspeed ), m_HPGLPenSpeed ); aFormatter->Print( aNestLevel+1, "(%s %f)\n", getTokenName( T_hpglpendiameter ), m_HPGLPenDiam ); + + // DXF options + aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfpolygonmode ), + m_DXFplotPolygonMode ? trueStr : falseStr ); + aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfimperialunits ), + m_DXFplotUnits == DXF_UNITS::INCHES ? trueStr : falseStr ); + aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_dxfusepcbnewfont ), + m_textMode == PLOT_TEXT_MODE::NATIVE ? falseStr : trueStr ); + aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psnegative ), m_negative ? trueStr : falseStr ); aFormatter->Print( aNestLevel+1, "(%s %s)\n", getTokenName( T_psa4output ), @@ -260,7 +264,7 @@ void PCB_PLOT_PARAMS::Parse( PCB_PLOT_PARAMS_PARSER* aParser ) } -bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCompareOnlySavedPrms ) const +bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams ) const { if( m_layerSelection != aPcbPlotParams.m_layerSelection ) return false; @@ -284,13 +288,10 @@ bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCom return false; if( m_plotMode != aPcbPlotParams.m_plotMode ) return false; - if( !aCompareOnlySavedPrms ) - { - if( m_DXFplotPolygonMode != aPcbPlotParams.m_DXFplotPolygonMode ) - return false; - if( m_DXFplotUnits != aPcbPlotParams.m_DXFplotUnits ) - return false; - } + if( m_DXFplotPolygonMode != aPcbPlotParams.m_DXFplotPolygonMode ) + return false; + if( m_DXFplotUnits != aPcbPlotParams.m_DXFplotUnits ) + return false; if( m_svgPrecision != aPcbPlotParams.m_svgPrecision ) return false; if( m_svgUseInch != aPcbPlotParams.m_svgUseInch ) @@ -335,11 +336,6 @@ bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCom return false; if( m_widthAdjust != aPcbPlotParams.m_widthAdjust ) return false; - if( !aCompareOnlySavedPrms ) - { - if( m_color != aPcbPlotParams.m_color ) - return false; - } if( m_textMode != aPcbPlotParams.m_textMode ) return false; if( !m_outputDirectory.IsSameAs( aPcbPlotParams.m_outputDirectory ) ) @@ -402,18 +398,12 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) if( token == T_NUMBER ) // pretty 3 format had legacy Cu stack. { - // unsigned legacy_mask = atol( cur.c_str() ); - - /* It's not possible to convert a legacy Cu layer number to a new - Cu layer number without knowing the number or total Cu layers - in the legacy board. We do not have that information here. - So simply set all layers ON. User can turn them off in the UI. - This is one of the superiorities of the new Cu sequence. - aPcbPlotParams->m_layerSelection = LEGACY_PLUGIN::leg_mask2new( cu_count, legacy_mask ); - */ - - // sorry, use the UI once to fix: - aPcbPlotParams->m_layerSelection = LSET( 2, F_SilkS, B_SilkS) | LSET::AllCuMask(); + // It's not possible to convert a legacy Cu layer number to a new Cu layer + // number without knowing the number or total Cu layers in the legacy board. + // We do not have that information here, so simply set all layers ON. User + // can turn them off in the UI. + aPcbPlotParams->m_layerSelection = LSET( 2, F_SilkS, B_SilkS) + | LSET::AllCuMask(); } else if( cur.find_first_of( "0x" ) == 0 ) // pretty ver. 4. { @@ -446,8 +436,8 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) break; case T_gerberprecision: - aPcbPlotParams->m_gerberPrecision = - parseInt( gbrDefaultPrecision-1, gbrDefaultPrecision); + aPcbPlotParams->m_gerberPrecision = parseInt( gbrDefaultPrecision-1, + gbrDefaultPrecision); break; case T_svgprecision: @@ -501,6 +491,20 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams ) parseInt( 0, HPGL_PEN_DIAMETER_MAX ); break; + case T_dxfpolygonmode: + aPcbPlotParams->m_DXFplotPolygonMode = parseBool(); + break; + + case T_dxfimperialunits: + aPcbPlotParams->m_DXFplotUnits = parseBool() ? DXF_UNITS::INCHES + : DXF_UNITS::MILLIMETERS; + break; + + case T_dxfusepcbnewfont: + aPcbPlotParams->m_textMode = parseBool() ? PLOT_TEXT_MODE::DEFAULT + : PLOT_TEXT_MODE::NATIVE; + break; + case T_pscolor: NeedSYMBOL(); // This actually was never used... break; diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h index 49696e7ecc..cf42de73a1 100644 --- a/pcbnew/pcb_plot_params.h +++ b/pcbnew/pcb_plot_params.h @@ -180,7 +180,6 @@ private: int m_HPGLPenSpeed; ///< HPGL only: pen speed, always in cm/s (1 to 99 cm/s) double m_HPGLPenDiam; ///< HPGL only: pen diameter in MILS, useful to fill areas ///< However, it is in mm in hpgl files. - COLOR4D m_color; ///< Color for plotting the current layer. Provided, but not really used /// Pointer to active color settings to be used for plotting COLOR_SETTINGS* m_colors; @@ -204,10 +203,7 @@ public: * and false to compare the full set of parameters. * @return true is parameters are same, false if one (or more) parameter does not match */ - bool IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams, bool aCompareOnlySavedPrms ) const; - - void SetColor( COLOR4D aVal ) { m_color = aVal; } - COLOR4D GetColor() const { return m_color; } + bool IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams ) const; void SetColorSettings( COLOR_SETTINGS* aSettings ) { m_colors = aSettings; } diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp index 1880789fcc..d6e62a0cdd 100644 --- a/pcbnew/plot_board_layers.cpp +++ b/pcbnew/plot_board_layers.cpp @@ -66,7 +66,7 @@ void PlotOneBoardLayer( BOARD *aBoard, PLOTTER* aPlotter, PCB_LAYER_ID aLayer, int soldermask_min_thickness = aBoard->GetDesignSettings().m_SolderMaskMinWidth; // Set a default color and the text mode for this layer - aPlotter->SetColor( aPlotOpt.GetColor() ); + aPlotter->SetColor( BLACK ); aPlotter->SetTextMode( aPlotOpt.GetTextMode() ); // Specify that the contents of the "Edges Pcb" layer are to be plotted in addition to the diff --git a/pcbnew/plot_brditems_plotter.cpp b/pcbnew/plot_brditems_plotter.cpp index c1ac6135b0..401dc6714e 100644 --- a/pcbnew/plot_brditems_plotter.cpp +++ b/pcbnew/plot_brditems_plotter.cpp @@ -28,7 +28,6 @@ #include // for vector, __vector_base<>... #include -#include #include // for SEG #include #include // for SHAPE_LINE_CHAIN @@ -223,8 +222,8 @@ void BRDITEMS_PLOTTER::PlotPad( PAD* aPad, COLOR4D aColor, OUTLINE_MODE aPlotMod break; case PAD_SHAPE_OVAL: - m_plotter->FlashPadOval( shape_pos, aPad->GetSize(), - aPad->GetOrientation(), aPlotMode, &gbr_metadata ); + m_plotter->FlashPadOval( shape_pos, aPad->GetSize(), aPad->GetOrientation(), aPlotMode, + &gbr_metadata ); break; case PAD_SHAPE_RECT: @@ -253,7 +252,7 @@ void BRDITEMS_PLOTTER::PlotPad( PAD* aPad, COLOR4D aColor, OUTLINE_MODE aPlotMod coord[3] = wxPoint( -half_size.x + trap_delta.y, -half_size.y - trap_delta.x ); m_plotter->FlashPadTrapez( shape_pos, coord, aPad->GetOrientation(), aPlotMode, - &gbr_metadata ); + &gbr_metadata ); } break; @@ -521,10 +520,10 @@ void BRDITEMS_PLOTTER::PlotFootprintGraphicItems( FOOTPRINT* aFootprint ) { for( BOARD_ITEM* item : aFootprint->GraphicalItems() ) { - FP_SHAPE* edge = dynamic_cast( item ); + FP_SHAPE* shape = dynamic_cast( item ); - if( edge && m_layerMask[ edge->GetLayer() ] ) - PlotFootprintGraphicItem( edge ); + if( shape && m_layerMask[ shape->GetLayer() ] ) + PlotFootprintGraphicItem( shape ); } } @@ -769,7 +768,9 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE* aZone, SHAPE_POLY_SET& polysList ) // they are not used to connect items, so the aperture attribute cannot // be set as conductor if( aZone->GetNetname().IsEmpty() ) + { gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_NONCONDUCTOR ); + } else { gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_CONDUCTOR ); @@ -817,15 +818,19 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE* aZone, SHAPE_POLY_SET& polysList ) if( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER ) { if( outline_thickness > 0 ) - m_plotter->PlotPoly( cornerList, FILL_TYPE::NO_FILL, - outline_thickness, &gbr_metadata ); + { + m_plotter->PlotPoly( cornerList, FILL_TYPE::NO_FILL, outline_thickness, + &gbr_metadata ); + } - static_cast( m_plotter )->PlotGerberRegion( - cornerList, &gbr_metadata ); + static_cast( m_plotter )->PlotGerberRegion( cornerList, + &gbr_metadata ); } else - m_plotter->PlotPoly( cornerList, FILL_TYPE::FILLED_SHAPE, - outline_thickness, &gbr_metadata ); + { + m_plotter->PlotPoly( cornerList, FILL_TYPE::FILLED_SHAPE, outline_thickness, + &gbr_metadata ); + } } else { @@ -834,8 +839,7 @@ void BRDITEMS_PLOTTER::PlotFilledAreas( ZONE* aZone, SHAPE_POLY_SET& polysList ) for( unsigned jj = 1; jj < cornerList.size(); jj++ ) { m_plotter->ThickSegment( cornerList[jj -1], cornerList[jj], - outline_thickness, - GetPlotMode(), &gbr_metadata ); + outline_thickness, GetPlotMode(), &gbr_metadata ); } } @@ -1000,7 +1004,9 @@ void BRDITEMS_PLOTTER::plotOneDrillMark( PAD_DRILL_SHAPE_T aDrillShape, const wx m_plotter->FlashPadOval( aDrillPos, aDrillSize, aOrientation, GetPlotMode(), NULL ); } else + { m_plotter->FlashPadCircle( aDrillPos, aDrillSize.x, GetPlotMode(), NULL ); + } } @@ -1008,8 +1014,7 @@ void BRDITEMS_PLOTTER::PlotDrillMarks() { /* If small drills marks were requested prepare a clamp value to pass to the helper function */ - int small_drill = (GetDrillMarksType() == PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE) ? - SMALL_DRILL : 0; + int smallDrill = GetDrillMarksType() == PCB_PLOT_PARAMS::SMALL_DRILL_SHAPE ? SMALL_DRILL : 0; /* In the filled trace mode drill marks are drawn white-on-black to scrape the underlying pad. This works only for drivers supporting color change, @@ -1025,32 +1030,30 @@ void BRDITEMS_PLOTTER::PlotDrillMarks() if( GetPlotMode() == FILLED ) m_plotter->SetColor( WHITE ); - for( auto pts : m_board->Tracks() ) + for( TRACK* tracks : m_board->Tracks() ) { - const VIA* via = dyn_cast( pts ); + const VIA* via = dyn_cast( tracks ); if( via ) { plotOneDrillMark( PAD_DRILL_SHAPE_CIRCLE, via->GetStart(), - wxSize( via->GetDrillValue(), 0 ), - wxSize( via->GetWidth(), 0 ), 0, small_drill ); + wxSize( via->GetDrillValue(), 0 ), + wxSize( via->GetWidth(), 0 ), 0, smallDrill ); } } - for( auto Module : m_board->Footprints() ) + for( FOOTPRINT* footprint : m_board->Footprints() ) { - for( auto pad : Module->Pads() ) + for( PAD* pad : footprint->Pads() ) { if( pad->GetDrillSize().x == 0 ) continue; - plotOneDrillMark( pad->GetDrillShape(), - pad->GetPosition(), pad->GetDrillSize(), - pad->GetSize(), pad->GetOrientation(), - small_drill ); + plotOneDrillMark( pad->GetDrillShape(), pad->GetPosition(), pad->GetDrillSize(), + pad->GetSize(), pad->GetOrientation(), smallDrill ); } } if( GetPlotMode() == FILLED ) - m_plotter->SetColor( GetColor() ); + m_plotter->SetColor( BLACK ); }