++Pcbnew
Pcbnew: Fixed an issue in GERBER file creation, under Vista and W7 only for non administrator users Plot files were 0 byte length. This was due to use of function tmpfile() in a GERBER function to create a temporary file that seems not working using mingw. Replaced by more usual files functions.
This commit is contained in:
parent
7816b71798
commit
5f5620a1b9
|
@ -4,6 +4,14 @@ KiCad ChangeLog 2010
|
||||||
Please add newer entries at the top, list the date and your name with
|
Please add newer entries at the top, list the date and your name with
|
||||||
email address.
|
email address.
|
||||||
|
|
||||||
|
2010-mar-31, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||||
|
================================================================================
|
||||||
|
++Pcbnew
|
||||||
|
Fixed an issue in GERBER file creation, under Vista and W7 only for non administrator users
|
||||||
|
Plot files were 0 byte length.
|
||||||
|
This was due to use of function tmpfile() in a GERBER function
|
||||||
|
to create a temporary file that seems not working using mingw.
|
||||||
|
Replaced by more usual files functions.
|
||||||
|
|
||||||
2010-mar-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
2010-mar-29, UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
|
@ -27,7 +27,7 @@ void DXF_PLOTTER::set_viewport( wxPoint offset,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DXF_PLOTTER::start_plot( FILE* fout )
|
bool DXF_PLOTTER::start_plot( FILE* fout )
|
||||||
{
|
{
|
||||||
wxASSERT( !output_file );
|
wxASSERT( !output_file );
|
||||||
output_file = fout;
|
output_file = fout;
|
||||||
|
@ -45,16 +45,20 @@ void DXF_PLOTTER::start_plot( FILE* fout )
|
||||||
|
|
||||||
/* End of layer table, begin entities */
|
/* End of layer table, begin entities */
|
||||||
fputs( "0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n", output_file );
|
fputs( "0\nENDTAB\n0\nENDSEC\n0\nSECTION\n2\nENTITIES\n", output_file );
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DXF_PLOTTER::end_plot()
|
bool DXF_PLOTTER::end_plot()
|
||||||
{
|
{
|
||||||
wxASSERT( output_file );
|
wxASSERT( output_file );
|
||||||
/* DXF FOOTER */
|
/* DXF FOOTER */
|
||||||
fputs( "0\nENDSEC\n0\nEOF\n", output_file );
|
fputs( "0\nENDSEC\n0\nEOF\n", output_file );
|
||||||
fclose( output_file );
|
fclose( output_file );
|
||||||
output_file = 0;
|
output_file = NULL;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,14 +39,22 @@ void GERBER_PLOTTER::set_viewport( wxPoint offset,
|
||||||
* initialize global variable g_Plot_PlotOutputFile
|
* initialize global variable g_Plot_PlotOutputFile
|
||||||
* @param aFile: an opened file to write to
|
* @param aFile: an opened file to write to
|
||||||
*/
|
*/
|
||||||
void GERBER_PLOTTER::start_plot( FILE* aFile )
|
bool GERBER_PLOTTER::start_plot( FILE* aFile )
|
||||||
{
|
{
|
||||||
char Line[1024];
|
char Line[1024];
|
||||||
|
|
||||||
wxASSERT( !output_file );
|
wxASSERT( !output_file );
|
||||||
final_file = aFile;
|
final_file = aFile;
|
||||||
work_file = tmpfile();
|
|
||||||
|
// Create a temporary filename to store gerber file
|
||||||
|
// note tmpfile() does not work under Vista and W7 un user mode
|
||||||
|
m_workFilename = filename + wxT(".tmp");
|
||||||
|
work_file = wxFopen( m_workFilename, wxT( "wt" ));
|
||||||
output_file = work_file;
|
output_file = work_file;
|
||||||
|
wxASSERT( output_file );
|
||||||
|
if( output_file == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
DateAndTime( Line );
|
DateAndTime( Line );
|
||||||
wxString Title = creator + wxT( " " ) + GetBuildVersion();
|
wxString Title = creator + wxT( " " ) + GetBuildVersion();
|
||||||
fprintf( output_file, "G04 (created by %s) date %s*\n",
|
fprintf( output_file, "G04 (created by %s) date %s*\n",
|
||||||
|
@ -63,10 +71,12 @@ void GERBER_PLOTTER::start_plot( FILE* aFile )
|
||||||
fputs( "G04 APERTURE LIST*\n", output_file );
|
fputs( "G04 APERTURE LIST*\n", output_file );
|
||||||
/* Select the default aperture */
|
/* Select the default aperture */
|
||||||
set_current_line_width( -1 );
|
set_current_line_width( -1 );
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GERBER_PLOTTER::end_plot()
|
bool GERBER_PLOTTER::end_plot()
|
||||||
{
|
{
|
||||||
char line[1024];
|
char line[1024];
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
@ -75,7 +85,10 @@ void GERBER_PLOTTER::end_plot()
|
||||||
/* Outfile is actually a temporary file! */
|
/* Outfile is actually a temporary file! */
|
||||||
fputs( "M02*\n", output_file );
|
fputs( "M02*\n", output_file );
|
||||||
fflush( output_file );
|
fflush( output_file );
|
||||||
rewind( work_file ); // work_file == output_file !!!
|
// rewind( work_file ); // work_file == output_file !!!
|
||||||
|
fclose( work_file );
|
||||||
|
work_file = wxFopen( m_workFilename, wxT( "rt" ));
|
||||||
|
wxASSERT( work_file );
|
||||||
output_file = final_file;
|
output_file = final_file;
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +105,10 @@ void GERBER_PLOTTER::end_plot()
|
||||||
|
|
||||||
fclose( work_file );
|
fclose( work_file );
|
||||||
fclose( final_file );
|
fclose( final_file );
|
||||||
|
::wxRemoveFile( m_workFilename );
|
||||||
output_file = 0;
|
output_file = 0;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,20 +28,22 @@ void HPGL_PLOTTER::set_viewport( wxPoint offset, double aScale, int orient )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HPGL_PLOTTER::start_plot( FILE* fout )
|
bool HPGL_PLOTTER::start_plot( FILE* fout )
|
||||||
{
|
{
|
||||||
wxASSERT( !output_file );
|
wxASSERT( !output_file );
|
||||||
output_file = fout;
|
output_file = fout;
|
||||||
fprintf( output_file, "IN;VS%d;PU;PA;SP%d;\n", pen_speed, pen_number );
|
fprintf( output_file, "IN;VS%d;PU;PA;SP%d;\n", pen_speed, pen_number );
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HPGL_PLOTTER::end_plot()
|
bool HPGL_PLOTTER::end_plot()
|
||||||
{
|
{
|
||||||
wxASSERT( output_file );
|
wxASSERT( output_file );
|
||||||
fputs( "PU;PA;SP0;\n", output_file );
|
fputs( "PU;PA;SP0;\n", output_file );
|
||||||
fclose( output_file );
|
fclose( output_file );
|
||||||
output_file = 0;
|
output_file = NULL;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -249,7 +249,7 @@ void PS_PLOTTER::pen_to( wxPoint pos, char plume )
|
||||||
* BBox is the boundary box (position and size of the "client rectangle"
|
* BBox is the boundary box (position and size of the "client rectangle"
|
||||||
* for drawings (page - margins) in mils (0.001 inch)
|
* for drawings (page - margins) in mils (0.001 inch)
|
||||||
*/
|
*/
|
||||||
void PS_PLOTTER::start_plot( FILE* fout )
|
bool PS_PLOTTER::start_plot( FILE* fout )
|
||||||
{
|
{
|
||||||
wxASSERT( !output_file );
|
wxASSERT( !output_file );
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
@ -366,15 +366,19 @@ void PS_PLOTTER::start_plot( FILE* fout )
|
||||||
// Set default line width ( g_Plot_DefaultPenWidth is in user units )
|
// Set default line width ( g_Plot_DefaultPenWidth is in user units )
|
||||||
fprintf( output_file, "%g setlinewidth\n",
|
fprintf( output_file, "%g setlinewidth\n",
|
||||||
user_to_device_size( default_pen_width ) );
|
user_to_device_size( default_pen_width ) );
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PS_PLOTTER::end_plot()
|
bool PS_PLOTTER::end_plot()
|
||||||
{
|
{
|
||||||
wxASSERT( output_file );
|
wxASSERT( output_file );
|
||||||
fputs( "showpage\ngrestore\n%%EOF\n", output_file );
|
fputs( "showpage\ngrestore\n%%EOF\n", output_file );
|
||||||
fclose( output_file );
|
fclose( output_file );
|
||||||
output_file = 0;
|
output_file = NULL;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,8 @@ public:
|
||||||
PlotFormat GetPlotterType()
|
PlotFormat GetPlotterType()
|
||||||
{ return m_PlotType; }
|
{ return m_PlotType; }
|
||||||
|
|
||||||
virtual void start_plot( FILE* fout ) = 0;
|
virtual bool start_plot( FILE* fout ) = 0;
|
||||||
virtual void end_plot() = 0;
|
virtual bool end_plot() = 0;
|
||||||
|
|
||||||
virtual void set_negative( bool _negative )
|
virtual void set_negative( bool _negative )
|
||||||
{
|
{
|
||||||
|
@ -200,8 +200,8 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void start_plot( FILE* fout );
|
virtual bool start_plot( FILE* fout );
|
||||||
virtual void end_plot();
|
virtual bool end_plot();
|
||||||
|
|
||||||
/* HPGL doesn't handle line thickness or color */
|
/* HPGL doesn't handle line thickness or color */
|
||||||
virtual void set_current_line_width( int width )
|
virtual void set_current_line_width( int width )
|
||||||
|
@ -278,8 +278,8 @@ public:
|
||||||
plot_scale_adjY = 1;
|
plot_scale_adjY = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void start_plot( FILE* fout );
|
virtual bool start_plot( FILE* fout );
|
||||||
virtual void end_plot();
|
virtual bool end_plot();
|
||||||
virtual void set_current_line_width( int width );
|
virtual void set_current_line_width( int width );
|
||||||
virtual void set_default_line_width( int width );
|
virtual void set_default_line_width( int width );
|
||||||
virtual void set_dash( bool dashed );
|
virtual void set_dash( bool dashed );
|
||||||
|
@ -344,8 +344,8 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual void start_plot( FILE* fout );
|
virtual bool start_plot( FILE* fout );
|
||||||
virtual void end_plot();
|
virtual bool end_plot();
|
||||||
virtual void set_current_line_width( int width );
|
virtual void set_current_line_width( int width );
|
||||||
virtual void set_default_line_width( int width );
|
virtual void set_default_line_width( int width );
|
||||||
|
|
||||||
|
@ -375,6 +375,8 @@ protected:
|
||||||
APERTURE::Aperture_Type type );
|
APERTURE::Aperture_Type type );
|
||||||
|
|
||||||
FILE* work_file, * final_file;
|
FILE* work_file, * final_file;
|
||||||
|
wxString m_workFilename;
|
||||||
|
|
||||||
void write_aperture_list();
|
void write_aperture_list();
|
||||||
|
|
||||||
std::vector<APERTURE> apertures;
|
std::vector<APERTURE> apertures;
|
||||||
|
@ -388,8 +390,8 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void start_plot( FILE* fout );
|
virtual bool start_plot( FILE* fout );
|
||||||
virtual void end_plot();
|
virtual bool end_plot();
|
||||||
|
|
||||||
/* For now we don't use 'thick' primitives, so no line width */
|
/* For now we don't use 'thick' primitives, so no line width */
|
||||||
virtual void set_current_line_width( int width )
|
virtual void set_current_line_width( int width )
|
||||||
|
|
|
@ -60,14 +60,20 @@ bool WinEDA_BasePcbFrame::Genere_GERBER( const wxString& FullFileName, int Layer
|
||||||
plotter->set_creator( wxT( "PCBNEW-RS274X" ) );
|
plotter->set_creator( wxT( "PCBNEW-RS274X" ) );
|
||||||
plotter->set_filename( FullFileName );
|
plotter->set_filename( FullFileName );
|
||||||
|
|
||||||
plotter->start_plot( output_file );
|
if( plotter->start_plot( output_file ) )
|
||||||
|
{
|
||||||
// Sheet refs on gerber CAN be useful... and they're always 1:1
|
// Sheet refs on gerber CAN be useful... and they're always 1:1
|
||||||
if( g_pcb_plot_options.Plot_Frame_Ref )
|
if( g_pcb_plot_options.Plot_Frame_Ref )
|
||||||
PlotWorkSheet( plotter, GetScreen() );
|
PlotWorkSheet( plotter, GetScreen() );
|
||||||
Plot_Layer( plotter, Layer, trace_mode );
|
Plot_Layer( plotter, Layer, trace_mode );
|
||||||
|
|
||||||
plotter->end_plot();
|
plotter->end_plot();
|
||||||
|
}
|
||||||
|
|
||||||
|
else // error in start_plot( ): failed opening a temporary file
|
||||||
|
{
|
||||||
|
wxMessageBox( _("Error when creating %s file: unable to create a temporary file"));
|
||||||
|
}
|
||||||
delete plotter;
|
delete plotter;
|
||||||
SetLocaleTo_Default();
|
SetLocaleTo_Default();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
release version:
|
release version:
|
||||||
2010 mar 30 (SVN 2479)
|
2010 apr 01
|
||||||
files (.zip,.tgz):
|
files (.zip,.tgz):
|
||||||
kicad-2010-03-30-final
|
kicad-2010-04-01-final
|
||||||
|
|
Loading…
Reference in New Issue