plotter output file being left open fix.

This commit is contained in:
Dick Hollenbeck 2013-02-06 09:21:37 -06:00
parent d958f92ccc
commit eed97c549d
2 changed files with 32 additions and 36 deletions

View File

@ -59,7 +59,7 @@ class PLOTTER
public: public:
static const int DEFAULT_LINE_WIDTH = -1; static const int DEFAULT_LINE_WIDTH = -1;
PLOTTER( ); PLOTTER();
virtual ~PLOTTER(); virtual ~PLOTTER();
@ -127,7 +127,7 @@ public:
* transfers or some kind of film) * transfers or some kind of film)
*/ */
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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 * Open or create the plot file aFullFilename
@ -194,7 +194,7 @@ public:
* @param aWidth = line width * @param aWidth = line width
*/ */
virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, FILL_T aFill, 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 * Function PlotImage
@ -279,7 +279,7 @@ public:
*/ */
virtual void SetTextMode( PlotTextMode mode ) virtual void SetTextMode( PlotTextMode mode )
{ {
// NOP for most plotters // NOP for most plotters
} }
protected: protected:
@ -390,9 +390,9 @@ public:
} }
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
int width = DEFAULT_LINE_WIDTH ); int width = DEFAULT_LINE_WIDTH );
virtual void PlotPoly( const std::vector< wxPoint >& aCornerList, virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
@ -532,13 +532,13 @@ public:
virtual void SetDash( bool dashed ); virtual void SetDash( bool dashed );
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
int width = DEFAULT_LINE_WIDTH ); int width = DEFAULT_LINE_WIDTH );
virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, 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, virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH ); FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH );
@ -599,13 +599,13 @@ public:
* with the outputFile open (but not inside a page stream!) */ * with the outputFile open (but not inside a page stream!) */
virtual void SetPageSettings( const PAGE_INFO& aPageSettings ); virtual void SetPageSettings( const PAGE_INFO& aPageSettings );
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
int width = DEFAULT_LINE_WIDTH ); int width = DEFAULT_LINE_WIDTH );
virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, 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, virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH); FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH);
@ -666,13 +666,13 @@ public:
virtual void SetDash( bool dashed ); virtual void SetDash( bool dashed );
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
int width = DEFAULT_LINE_WIDTH ); int width = DEFAULT_LINE_WIDTH );
virtual void Arc( const wxPoint& centre, int StAngle, int EndAngle, 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, virtual void PlotPoly( const std::vector< wxPoint >& aCornerList,
FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH ); FILL_T aFill, int aWidth = DEFAULT_LINE_WIDTH );
@ -775,7 +775,7 @@ public:
virtual void SetDash( bool dashed ) {}; virtual void SetDash( bool dashed ) {};
virtual void SetColor( EDA_COLOR_T color ) {}; virtual void SetColor( EDA_COLOR_T color ) {};
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,
@ -803,7 +803,7 @@ protected:
void emitDcode( const DPOINT& pt, int dcode ); void emitDcode( const DPOINT& pt, int dcode );
std::vector<APERTURE>::iterator std::vector<APERTURE>::iterator
getAperture( const wxSize& size, APERTURE::APERTURE_TYPE type ); getAperture( const wxSize& size, APERTURE::APERTURE_TYPE type );
FILE* workFile; FILE* workFile;
FILE* finalFile; FILE* finalFile;
@ -861,7 +861,7 @@ public:
virtual void SetColor( EDA_COLOR_T color ); virtual void SetColor( EDA_COLOR_T color );
virtual void SetViewport( const wxPoint& aOffset, double aIusPerDecimil, 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, 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, virtual void Circle( const wxPoint& pos, int diametre, FILL_T fill,

View File

@ -784,22 +784,18 @@ static void ConfigureHPGLPenSizes( HPGL_PLOTTER *aPlotter,
* Return the plotter object if OK, NULL if the file is not created * Return the plotter object if OK, NULL if the file is not created
* (or has a problem) * (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& aFullFileName,
const wxString& aSheetDesc ) 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 // Create the plotter driver and set the few plotter specific
// options // options
PLOTTER *the_plotter = NULL; PLOTTER* plotter = NULL;
switch( aPlotOpts->GetFormat() ) switch( aPlotOpts->GetFormat() )
{ {
case PLOT_FORMAT_DXF: case PLOT_FORMAT_DXF:
the_plotter = new DXF_PLOTTER(); plotter = new DXF_PLOTTER();
break; break;
case PLOT_FORMAT_POST: case PLOT_FORMAT_POST:
@ -807,11 +803,11 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts,
PS_plotter = new PS_PLOTTER(); PS_plotter = new PS_PLOTTER();
PS_plotter->SetScaleAdjust( aPlotOpts->GetFineScaleAdjustX(), PS_plotter->SetScaleAdjust( aPlotOpts->GetFineScaleAdjustX(),
aPlotOpts->GetFineScaleAdjustY() ); aPlotOpts->GetFineScaleAdjustY() );
the_plotter = PS_plotter; plotter = PS_plotter;
break; break;
case PLOT_FORMAT_PDF: case PLOT_FORMAT_PDF:
the_plotter = new PDF_PLOTTER(); plotter = new PDF_PLOTTER();
break; break;
case PLOT_FORMAT_HPGL: 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 /* HPGL options are a little more convoluted to compute, so
they're split in an other function */ they're split in an other function */
ConfigureHPGLPenSizes( HPGL_plotter, aPlotOpts ); ConfigureHPGLPenSizes( HPGL_plotter, aPlotOpts );
the_plotter = HPGL_plotter; plotter = HPGL_plotter;
break; break;
case PLOT_FORMAT_GERBER: case PLOT_FORMAT_GERBER:
the_plotter = new GERBER_PLOTTER(); plotter = new GERBER_PLOTTER();
break; break;
case PLOT_FORMAT_SVG: case PLOT_FORMAT_SVG:
the_plotter = new SVG_PLOTTER(); plotter = new SVG_PLOTTER();
break; break;
default: default:
wxASSERT( false ); wxASSERT( false );
return NULL;
} }
// Compute the viewport and set the other options // 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 // Plot the frame reference if requested
if( aPlotOpts->GetPlotFrameRef() ) if( aPlotOpts->GetPlotFrameRef() )
PlotWorkSheet( the_plotter, aBoard->GetTitleBlock(), PlotWorkSheet( plotter, aBoard->GetTitleBlock(),
aBoard->GetPageSettings(), aBoard->GetPageSettings(),
1, 1, // Only one page 1, 1, // Only one page
aSheetDesc, aBoard->GetFileName() ); aSheetDesc, aBoard->GetFileName() );
@ -857,13 +854,12 @@ PLOTTER *StartPlotBoard( BOARD *aBoard, PCB_PLOT_PARAMS *aPlotOpts,
if( aPlotOpts->GetNegative() ) if( aPlotOpts->GetNegative() )
{ {
EDA_RECT bbox = aBoard->ComputeBoundingBox(); EDA_RECT bbox = aBoard->ComputeBoundingBox();
FillNegativeKnockout( the_plotter, bbox ); FillNegativeKnockout( plotter, bbox );
} }
return the_plotter; return plotter;
} }
// error in start_plot( ) delete plotter;
delete the_plotter; // will close also output_file
return NULL; return NULL;
} }