From eed97c549de5dd4a850899090cce7f09bd29f62a Mon Sep 17 00:00:00 2001 From: Dick Hollenbeck Date: Wed, 6 Feb 2013 09:21:37 -0600 Subject: [PATCH] plotter output file being left open fix. --- include/plot_common.h | 30 ++++++++++++++-------------- pcbnew/plot_board_layers.cpp | 38 ++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 36 deletions(-) diff --git a/include/plot_common.h b/include/plot_common.h index 8f191506c6..437c676d8d 100644 --- a/include/plot_common.h +++ b/include/plot_common.h @@ -59,7 +59,7 @@ class PLOTTER public: static const int DEFAULT_LINE_WIDTH = -1; - PLOTTER( ); + PLOTTER(); virtual ~PLOTTER(); @@ -127,7 +127,7 @@ public: * transfers or some kind of film) */ virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ) = 0; + double aScale, bool aMirror ) = 0; /** * Open or create the plot file aFullFilename @@ -194,7 +194,7 @@ public: * @param aWidth = line width */ virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill, - int aWidth = DEFAULT_LINE_WIDTH ) = 0; + int aWidth = DEFAULT_LINE_WIDTH ) = 0; /** * Function PlotImage @@ -279,7 +279,7 @@ public: */ virtual void SetTextMode( PlotTextMode mode ) { - // NOP for most plotters + // NOP for most plotters } protected: @@ -390,9 +390,9 @@ public: } virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, - int width = DEFAULT_LINE_WIDTH ); + int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, @@ -532,13 +532,13 @@ public: virtual void SetDash( bool dashed ); virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, - int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); + int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH ); @@ -599,13 +599,13 @@ public: * with the outputFile open (but not inside a page stream!) */ virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, - int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); + int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH); @@ -666,13 +666,13 @@ public: virtual void SetDash( bool dashed ); virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, - int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); + int rayon, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH ); @@ -775,7 +775,7 @@ public: virtual void SetDash( bool dashed ) {}; virtual void SetColor( EDA_COLOR_T color ) {}; virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, @@ -803,7 +803,7 @@ protected: void emitDcode( const DPOINT& pt, int dcode ); std::vector::iterator - getAperture( const wxSize& size, APERTURE::APERTURE_TYPE type ); + getAperture( const wxSize& size, APERTURE::APERTURE_TYPE type ); FILE* workFile; FILE* finalFile; @@ -861,7 +861,7 @@ public: virtual void SetColor( EDA_COLOR_T color ); virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, - double aScale, bool aMirror ); + double aScale, bool aMirror ); virtual void Rect( const wxPoint& p1, const wxPoint& p2, FILL_T fill, int width = DEFAULT_LINE_WIDTH ); virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill, diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp index 2b295b8279..982a9b525a 100644 --- a/pcbnew/plot_board_layers.cpp +++ b/pcbnew/plot_board_layers.cpp @@ -784,22 +784,18 @@ static void ConfigureHPGLPenSizes( HPGL_PLOTTER *aPlotter, * Return the plotter object if OK, NULL if the file is not created * (or has a problem) */ -PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, +PLOTTER* StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, const wxString& aFullFileName, const wxString& aSheetDesc ) { - FILE* output_file = wxFopen( aFullFileName, wxT( "wt" ) ); - - if( output_file == NULL ) - return NULL; - // Create the plotter driver and set the few plotter specific // options - PLOTTER *the_plotter = NULL; + PLOTTER* plotter = NULL; + switch( aPlotOpts->GetFormat() ) { case PLOT_FORMAT_DXF: - the_plotter = new DXF_PLOTTER(); + plotter = new DXF_PLOTTER(); break; case PLOT_FORMAT_POST: @@ -807,11 +803,11 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, PS_plotter = new PS_PLOTTER(); PS_plotter->SetScaleAdjust( aPlotOpts->GetFineScaleAdjustX(), aPlotOpts->GetFineScaleAdjustY() ); - the_plotter = PS_plotter; + plotter = PS_plotter; break; case PLOT_FORMAT_PDF: - the_plotter = new PDF_PLOTTER(); + plotter = new PDF_PLOTTER(); break; case PLOT_FORMAT_HPGL: @@ -821,31 +817,32 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, /* HPGL options are a little more convoluted to compute, so they're split in an other function */ ConfigureHPGLPenSizes( HPGL_plotter, aPlotOpts ); - the_plotter = HPGL_plotter; + plotter = HPGL_plotter; break; case PLOT_FORMAT_GERBER: - the_plotter = new GERBER_PLOTTER(); + plotter = new GERBER_PLOTTER(); break; case PLOT_FORMAT_SVG: - the_plotter = new SVG_PLOTTER(); + plotter = new SVG_PLOTTER(); break; default: wxASSERT( false ); + return NULL; } // Compute the viewport and set the other options - initializePlotter( the_plotter, aBoard, aPlotOpts ); + initializePlotter( plotter, aBoard, aPlotOpts ); - if( the_plotter->OpenFile( aFullFileName ) ) + if( plotter->OpenFile( aFullFileName ) ) { - the_plotter->StartPlot(); + plotter->StartPlot(); // Plot the frame reference if requested if( aPlotOpts->GetPlotFrameRef() ) - PlotWorkSheet( the_plotter, aBoard->GetTitleBlock(), + PlotWorkSheet( plotter, aBoard->GetTitleBlock(), aBoard->GetPageSettings(), 1, 1, // Only one page aSheetDesc, aBoard->GetFileName() ); @@ -857,13 +854,12 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts, if( aPlotOpts->GetNegative() ) { EDA_RECT bbox = aBoard->ComputeBoundingBox(); - FillNegativeKnockout( the_plotter, bbox ); + FillNegativeKnockout( plotter, bbox ); } - return the_plotter; + return plotter; } - // error in start_plot( ) - delete the_plotter; // will close also output_file + delete plotter; return NULL; }