From 8912a8364bd318047ae8e7e4c0870144dbd6c163 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 5 Mar 2004 23:47:35 +0000 Subject: [PATCH] New raster ("bitmap") PS/EPS/PDF output --- Fltk/Callbacks.cpp | 69 ++++++++++++--------- Fltk/Callbacks.h | 4 +- Fltk/GUI.cpp | 10 +-- Graphics/CreateFile.cpp | 132 ++++++++++++++++++++++++++-------------- Graphics/gl2ps.cpp | 19 +++--- Mesh/Mesh.h | 52 ++++++++-------- doc/FAQ | 5 +- doc/VERSIONS | 5 +- 8 files changed, 175 insertions(+), 121 deletions(-) diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 8dbf1433a7..bc9a1d791b 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.208 2004-02-28 05:52:37 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.209 2004-03-05 23:47:35 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -465,6 +465,10 @@ void _save_vrml(char *name) { CreateOutputFile(name, CTX.mesh.format = FORMAT_VRML); } +void _save_ps_raster(char *name) +{ + CreateOutputFile(name, FORMAT_PS_RASTER); +} void _save_ps_simple(char *name) { int old = CTX.print.eps_quality; @@ -479,6 +483,10 @@ void _save_ps_accurate(char *name) CreateOutputFile(name, FORMAT_PS); CTX.print.eps_quality = old; } +void _save_eps_raster(char *name) +{ + CreateOutputFile(name, FORMAT_EPS_RASTER); +} void _save_eps_simple(char *name) { int old = CTX.print.eps_quality; @@ -493,19 +501,9 @@ void _save_eps_accurate(char *name) CreateOutputFile(name, FORMAT_EPS); CTX.print.eps_quality = old; } -void _save_pstex_simple(char *name) +void _save_epstex_raster(char *name) { - int old = CTX.print.eps_quality; - CTX.print.eps_quality = 1; - CreateOutputFile(name, FORMAT_PSTEX); - CTX.print.eps_quality = old; -} -void _save_pstex_accurate(char *name) -{ - int old = CTX.print.eps_quality; - CTX.print.eps_quality = 2; - CreateOutputFile(name, FORMAT_PSTEX); - CTX.print.eps_quality = old; + CreateOutputFile(name, FORMAT_EPSTEX_RASTER); } void _save_epstex_simple(char *name) { @@ -521,6 +519,10 @@ void _save_epstex_accurate(char *name) CreateOutputFile(name, FORMAT_EPSTEX); CTX.print.eps_quality = old; } +void _save_pdf_raster(char *name) +{ + CreateOutputFile(name, FORMAT_PDF_RASTER); +} void _save_pdf_simple(char *name) { int old = CTX.print.eps_quality; @@ -535,6 +537,10 @@ void _save_pdf_accurate(char *name) CreateOutputFile(name, FORMAT_PDF); CTX.print.eps_quality = old; } +void _save_pdftex_raster(char *name) +{ + CreateOutputFile(name, FORMAT_PDFTEX_RASTER); +} void _save_pdftex_simple(char *name) { int old = CTX.print.eps_quality; @@ -638,12 +644,15 @@ void file_save_as_cb(CALLBACK_ARGS) #if defined(HAVE_LIBPNG) {"PNG (*.png)", _save_png}, #endif - {"PostScript fast (*.ps)", _save_ps_simple}, - {"PostScript accurate (*.ps)", _save_ps_accurate}, - {"Encapsulated PostScript fast (*.eps)", _save_eps_simple}, - {"Encapsulated PostScript accurate (*.eps)", _save_eps_accurate}, - {"PDF fast (*.pdf)", _save_pdf_simple}, - {"PDF accurate (*.pdf)", _save_pdf_accurate}, + {"Raster PS (*.ps)", _save_ps_raster}, + {"Raster EPS (*.eps)", _save_eps_raster}, + {"Raster PDF (*.pdf)", _save_pdf_raster}, + {"Vector PS fast (*.ps)", _save_ps_simple}, + {"Vector PS accurate (*.ps)", _save_ps_accurate}, + {"Vector EPS fast (*.eps)", _save_eps_simple}, + {"Vector EPS accurate (*.eps)", _save_eps_accurate}, + {"Vector PDF fast (*.pdf)", _save_pdf_simple}, + {"Vector PDF accurate (*.pdf)", _save_pdf_accurate}, {"PPM (*.ppm)", _save_ppm}, #if defined(HAVE_LIBJPEG) {"LaTeX JPEG part (*.jpg)", _save_jpegtex}, @@ -651,10 +660,12 @@ void file_save_as_cb(CALLBACK_ARGS) #if defined(HAVE_LIBPNG) {"LaTeX PNG part (*.png)", _save_pngtex}, #endif - {"LaTeX EPS part fast (*.eps)", _save_epstex_simple}, - {"LaTeX EPS part accurate (*.eps)", _save_epstex_accurate}, - {"LaTeX PDF part fast (*.pdf)", _save_pdftex_simple}, - {"LaTeX PDF part accurate (*.pdf)", _save_pdftex_accurate}, + {"LaTeX Raster EPS part (*.eps)", _save_epstex_raster}, + {"LaTeX Raster PDF part (*.pdf)", _save_pdftex_raster}, + {"LaTeX Vector EPS part fast (*.eps)", _save_epstex_simple}, + {"LaTeX Vector EPS part accurate (*.eps)", _save_epstex_accurate}, + {"LaTeX Vector PDF part fast (*.pdf)", _save_pdftex_simple}, + {"LaTeX Vector PDF part accurate (*.pdf)", _save_pdftex_accurate}, {"LaTeX TeX part (*.tex)", _save_tex}, {"UCB YUV (*.yuv)", _save_yuv} }; @@ -757,16 +768,16 @@ void file_save_as_ps_accurate_cb(CALLBACK_ARGS) _save_ps_accurate(file_chooser_get_name(1)); } -void file_save_as_pstex_simple_cb(CALLBACK_ARGS) +void file_save_as_epstex_simple_cb(CALLBACK_ARGS) { - if(file_chooser(0, 1, "Save LaTeX file (PS part)", "*", 0)) - _save_pstex_simple(file_chooser_get_name(1)); + if(file_chooser(0, 1, "Save LaTeX file (EPS part)", "*", 0)) + _save_epstex_simple(file_chooser_get_name(1)); } -void file_save_as_pstex_accurate_cb(CALLBACK_ARGS) +void file_save_as_epstex_accurate_cb(CALLBACK_ARGS) { - if(file_chooser(0, 1, "Save LaTeX file (PS part)", "*", 0)) - _save_ps_accurate(file_chooser_get_name(1)); + if(file_chooser(0, 1, "Save LaTeX file (EPS part)", "*", 0)) + _save_epstex_accurate(file_chooser_get_name(1)); } void file_save_as_jpegtex_cb(CALLBACK_ARGS) diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index ed426e70d6..bfb9512082 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -57,8 +57,8 @@ void file_save_as_gref_cb(CALLBACK_ARGS) ; void file_save_as_vrml_cb(CALLBACK_ARGS) ; void file_save_as_ps_simple_cb(CALLBACK_ARGS) ; void file_save_as_ps_accurate_cb(CALLBACK_ARGS) ; -void file_save_as_pstex_simple_cb(CALLBACK_ARGS) ; -void file_save_as_pstex_accurate_cb(CALLBACK_ARGS) ; +void file_save_as_epstex_simple_cb(CALLBACK_ARGS) ; +void file_save_as_epstex_accurate_cb(CALLBACK_ARGS) ; void file_save_as_jpegtex_cb(CALLBACK_ARGS) ; void file_save_as_pngtex_cb(CALLBACK_ARGS) ; void file_save_as_tex_cb(CALLBACK_ARGS) ; diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index daef0d4e89..d726ce982e 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.276 2004-03-01 17:58:49 geuzaine Exp $ +// $Id: GUI.cpp,v 1.277 2004-03-05 23:47:35 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -112,8 +112,8 @@ Fl_Menu_Item m_menubar_table[] = { #if defined(HAVE_LIBPNG) {"PNG (*.png)...", 0, (Fl_Callback *)file_save_as_png_cb, 0}, #endif - {"PostScript fast (*.ps)...", 0, (Fl_Callback *)file_save_as_ps_simple_cb, 0}, - {"PostScript accurate...", 0, (Fl_Callback *)file_save_as_ps_accurate_cb, 0}, + {"Vector PS fast (*.ps)...", 0, (Fl_Callback *)file_save_as_ps_simple_cb, 0}, + {"Vector PS accurate...", 0, (Fl_Callback *)file_save_as_ps_accurate_cb, 0}, {"PPM (*.ppm)...", 0, (Fl_Callback *)file_save_as_ppm_cb, 0}, #if defined(HAVE_LIBJPEG) {"LaTeX JPEG...", 0, (Fl_Callback *)file_save_as_jpegtex_cb, 0}, @@ -121,8 +121,8 @@ Fl_Menu_Item m_menubar_table[] = { #if defined(HAVE_LIBPNG) {"LaTeX PNG...", 0, (Fl_Callback *)file_save_as_pngtex_cb, 0}, #endif - {"LaTeX PostScript fast...", 0, (Fl_Callback *)file_save_as_pstex_simple_cb, 0}, - {"LaTeX PostScript accurate...", 0, (Fl_Callback *)file_save_as_pstex_accurate_cb, 0}, + {"LaTeX Vector EPS fast...", 0, (Fl_Callback *)file_save_as_epstex_simple_cb, 0}, + {"LaTeX Vector EPS accurate...", 0, (Fl_Callback *)file_save_as_epstex_accurate_cb, 0}, {"LaTeX TeX (*.tex)...", 0, (Fl_Callback *)file_save_as_tex_cb, 0}, {"UCB YUV (*.yuv)...", 0, (Fl_Callback *)file_save_as_yuv_cb, 0}, {0}, diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp index 464203e608..9915765126 100644 --- a/Graphics/CreateFile.cpp +++ b/Graphics/CreateFile.cpp @@ -1,4 +1,4 @@ -// $Id: CreateFile.cpp,v 1.52 2004-02-07 01:40:19 geuzaine Exp $ +// $Id: CreateFile.cpp,v 1.53 2004-03-05 23:47:35 geuzaine Exp $ // // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle // @@ -48,7 +48,7 @@ void FillBuffer(void) void CreateOutputFile(char *name, int format) { FILE *fp; - GLint size3d, viewport[4]; + GLint size3d, viewport[4], width, height; char ext[256]; int len, res, oldformat, psformat, pssort, psoptions; @@ -59,7 +59,9 @@ void CreateOutputFile(char *name, int format) CTX.print.format = format; for(int i = 0; i < 4; i++) viewport[i] = CTX.viewport[i]; - + width = viewport[2]-viewport[0]; + height = viewport[3]-viewport[1]; + switch (format) { case FORMAT_AUTO: @@ -89,19 +91,17 @@ void CreateOutputFile(char *name, int format) else if(!strcmp(ext, ".png")) CreateOutputFile(name, FORMAT_PNG); else if(!strcmp(ext, ".ps")) - CreateOutputFile(name, FORMAT_PS); + CreateOutputFile(name, FORMAT_PS_RASTER); else if(!strcmp(ext, ".eps")) - CreateOutputFile(name, FORMAT_EPS); + CreateOutputFile(name, FORMAT_EPS_RASTER); else if(!strcmp(ext, ".pdf")) - CreateOutputFile(name, FORMAT_PDF); + CreateOutputFile(name, FORMAT_PDF_RASTER); else if(!strcmp(ext, ".tex")) CreateOutputFile(name, FORMAT_TEX); - else if(!strcmp(ext, ".pstex")) - CreateOutputFile(name, FORMAT_PSTEX); else if(!strcmp(ext, ".epstex")) - CreateOutputFile(name, FORMAT_EPSTEX); + CreateOutputFile(name, FORMAT_EPSTEX_RASTER); else if(!strcmp(ext, ".pdftex")) - CreateOutputFile(name, FORMAT_PDFTEX); + CreateOutputFile(name, FORMAT_PDFTEX_RASTER); else if(!strcmp(ext, ".jpegtex")) CreateOutputFile(name, FORMAT_JPEGTEX); else if(!strcmp(ext, ".ppm")) @@ -149,12 +149,12 @@ void CreateOutputFile(char *name, int format) CTX.print.gl_fonts = 1; if(format == FORMAT_JPEG || format == FORMAT_JPEGTEX){ Msg(INFO, "Writing JPEG file '%s'", name); - create_jpeg(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], CTX.print.jpeg_quality); + create_jpeg(fp, width, height, CTX.print.jpeg_quality); Msg(INFO, "Wrote JPEG file '%s'", name); } else{ Msg(INFO, "Writing PNG file '%s'", name); - create_png(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], 100); + create_png(fp, width, height, 100); Msg(INFO, "Wrote PNG file '%s'", name); } Msg(STATUS2N, "Wrote '%s'", name); @@ -171,17 +171,17 @@ void CreateOutputFile(char *name, int format) FillBuffer(); if(format == FORMAT_PPM){ Msg(INFO, "Writing PPM file '%s'", name); - create_ppm(fp, viewport[2]-viewport[0], viewport[3]-viewport[1]); + create_ppm(fp, width, height); Msg(INFO, "Wrote PPM file '%s'", name); } else if (format == FORMAT_YUV){ Msg(INFO, "Writing YUV file '%s'", name); - create_yuv(fp, viewport[2]-viewport[0], viewport[3]-viewport[1]); + create_yuv(fp, width, height); Msg(INFO, "Wrote YUV file '%s'", name); } else{ Msg(INFO, "Writing GIF file '%s'", name); - create_gif(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], + create_gif(fp, width, height, CTX.print.gif_dither, CTX.print.gif_sort, CTX.print.gif_interlace, @@ -195,50 +195,88 @@ void CreateOutputFile(char *name, int format) break; case FORMAT_PS: - case FORMAT_PSTEX: + case FORMAT_PS_RASTER: case FORMAT_EPS: + case FORMAT_EPS_RASTER: case FORMAT_EPSTEX: + case FORMAT_EPSTEX_RASTER: case FORMAT_PDF: + case FORMAT_PDF_RASTER: case FORMAT_PDFTEX: + case FORMAT_PDFTEX_RASTER: if(!(fp = fopen(name, "wb"))) { Msg(GERROR, "Unable to open file '%s'", name); return; } - if(format == FORMAT_PDF || format == FORMAT_PDFTEX){ + switch(format){ + case FORMAT_PDF: + case FORMAT_PDF_RASTER: + case FORMAT_PDFTEX: + case FORMAT_PDFTEX_RASTER: psformat = GL2PS_PDF; + break; + case FORMAT_PS: + case FORMAT_PS_RASTER: + psformat = GL2PS_PS; + break; + default: + psformat = GL2PS_EPS; + break; } - else{ - if(format == FORMAT_PS || format == FORMAT_PSTEX) - psformat = GL2PS_PS; - else - psformat = GL2PS_EPS; - } - - pssort = (CTX.print.eps_quality == 1) ? GL2PS_SIMPLE_SORT : GL2PS_BSP_SORT; - psoptions = - GL2PS_SIMPLE_LINE_OFFSET | GL2PS_SILENT | - (CTX.print.eps_occlusion_culling ? GL2PS_OCCLUSION_CULL : 0) | - (CTX.print.eps_best_root ? GL2PS_BEST_ROOT : 0) | - (CTX.print.eps_background ? GL2PS_DRAW_BACKGROUND : 0) | - (CTX.print.eps_compress ? GL2PS_COMPRESS : 0) | - (format == FORMAT_PSTEX ? GL2PS_NO_TEXT : 0) | - (format == FORMAT_EPSTEX ? GL2PS_NO_TEXT : 0) | - (format == FORMAT_PDFTEX ? GL2PS_NO_TEXT : 0); - Msg(INFO, "Writing %s file '%s'", (psformat == GL2PS_PDF) ? "PDF" : "PS/EPS", name); - - size3d = 0; - res = GL2PS_OVERFLOW; - while(res == GL2PS_OVERFLOW) { - size3d += 2048 * 2048; - gl2psBeginPage(CTX.base_filename, "Gmsh", viewport, - psformat, pssort, psoptions, GL_RGBA, 0, NULL, - 0, 0, 0, size3d, fp, name); - CTX.print.gl_fonts = 0; - FillBuffer(); - CTX.print.gl_fonts = 1; - res = gl2psEndPage(); + { + int raster = 0; + float *pixels = NULL; + if(format == FORMAT_PS_RASTER || + format == FORMAT_EPS_RASTER || format == FORMAT_EPSTEX_RASTER || + format == FORMAT_PDF_RASTER || format == FORMAT_PDFTEX_RASTER){ + if(format == FORMAT_EPSTEX_RASTER || format == FORMAT_PDFTEX_RASTER) + CTX.print.gl_fonts = 0; + FillBuffer(); + CTX.print.gl_fonts = 1; + pixels = new float[width * height * 3]; + glReadPixels(0, 0, width, height, GL_RGB, GL_FLOAT, pixels); + raster = 1; + } + + pssort = (CTX.print.eps_quality == 1) ? GL2PS_SIMPLE_SORT : GL2PS_BSP_SORT; + psoptions = + GL2PS_SIMPLE_LINE_OFFSET | GL2PS_SILENT | + (CTX.print.eps_occlusion_culling ? GL2PS_OCCLUSION_CULL : 0) | + (CTX.print.eps_best_root ? GL2PS_BEST_ROOT : 0) | + (CTX.print.eps_background ? GL2PS_DRAW_BACKGROUND : 0) | + (CTX.print.eps_compress ? GL2PS_COMPRESS : 0) | + (format == FORMAT_EPSTEX ? GL2PS_NO_TEXT : 0) | + (format == FORMAT_PDFTEX ? GL2PS_NO_TEXT : 0) | + (format == FORMAT_EPSTEX_RASTER ? GL2PS_NO_TEXT : 0) | + (format == FORMAT_PDFTEX_RASTER ? GL2PS_NO_TEXT : 0); + + Msg(INFO, "Writing %s file '%s'", (psformat == GL2PS_PDF) ? "PDF" : "PS/EPS", name); + + size3d = 0; + res = GL2PS_OVERFLOW; + while(res == GL2PS_OVERFLOW) { + size3d += 2048 * 2048; + gl2psBeginPage(CTX.base_filename, "Gmsh", viewport, + psformat, pssort, psoptions, GL_RGBA, 0, NULL, + 0, 0, 0, size3d, fp, name); + if(raster){ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glPushMatrix(); + glRasterPos3f(-1.0, -1.0, -1.0); + gl2psDrawPixels(width, height, 0, 0, GL_RGB, GL_FLOAT, pixels); + glPopMatrix(); + delete [] pixels; + } + else{ + CTX.print.gl_fonts = 0; + FillBuffer(); + CTX.print.gl_fonts = 1; + } + res = gl2psEndPage(); + } } Msg(INFO, "Wrote %s file '%s'", (psformat == GL2PS_PDF) ? "PDF" : "PS/EPS", name); Msg(STATUS2N, "Wrote '%s'", name); diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp index ef2ca30d79..e2462147d0 100644 --- a/Graphics/gl2ps.cpp +++ b/Graphics/gl2ps.cpp @@ -1,4 +1,4 @@ -/* $Id: gl2ps.cpp,v 1.83 2003-11-16 16:49:37 geuzaine Exp $ */ +/* $Id: gl2ps.cpp,v 1.84 2004-03-05 23:47:35 geuzaine Exp $ */ /* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2003 Christophe Geuzaine <geuz@geuz.org> @@ -3082,18 +3082,17 @@ GLint gl2psPrintPrimitives(void){ return GL2PS_OVERFLOW; } - if(used == 0){ - return GL2PS_NO_FEEDBACK; /* Empty feedback buffer */ - } - - if(gl2ps->format == GL2PS_PS || - gl2ps->format == GL2PS_EPS || - gl2ps->format == GL2PS_PDF){ - gl2psParseFeedbackBuffer(used); + if(used > 0){ + if(gl2ps->format == GL2PS_PS || + gl2ps->format == GL2PS_EPS || + gl2ps->format == GL2PS_PDF){ + gl2psParseFeedbackBuffer(used); + } } if(!gl2psListNbr(gl2ps->primitives)){ - return GL2PS_SUCCESS; /* Nothing to print */ + /* Empty feedback buffer and/or nothing else to print */ + return GL2PS_NO_FEEDBACK; } switch(gl2ps->format){ diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 8ecbe6ba36..6b323635b4 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -28,30 +28,34 @@ #include "ExtrudeParams.h" #include "STL.h" -#define FORMAT_MSH 1 -#define FORMAT_UNV 2 -#define FORMAT_GREF 3 -#define FORMAT_XPM 4 -#define FORMAT_PS 5 -#define FORMAT_BMP 6 -#define FORMAT_GIF 7 -#define FORMAT_GEO 8 -#define FORMAT_JPEG 9 -#define FORMAT_AUTO 10 -#define FORMAT_PPM 11 -#define FORMAT_YUV 12 -#define FORMAT_SMS 14 -#define FORMAT_OPT 15 -#define FORMAT_PSTEX 16 -#define FORMAT_JPEGTEX 17 -#define FORMAT_TEX 18 -#define FORMAT_VRML 19 -#define FORMAT_EPS 20 -#define FORMAT_EPSTEX 21 -#define FORMAT_PNG 22 -#define FORMAT_PNGTEX 23 -#define FORMAT_PDF 24 -#define FORMAT_PDFTEX 25 +#define FORMAT_MSH 1 +#define FORMAT_UNV 2 +#define FORMAT_GREF 3 +#define FORMAT_XPM 4 +#define FORMAT_PS 5 +#define FORMAT_BMP 6 +#define FORMAT_GIF 7 +#define FORMAT_GEO 8 +#define FORMAT_JPEG 9 +#define FORMAT_AUTO 10 +#define FORMAT_PPM 11 +#define FORMAT_YUV 12 +#define FORMAT_SMS 14 +#define FORMAT_OPT 15 +#define FORMAT_JPEGTEX 17 +#define FORMAT_TEX 18 +#define FORMAT_VRML 19 +#define FORMAT_EPS 20 +#define FORMAT_EPSTEX 21 +#define FORMAT_PNG 22 +#define FORMAT_PNGTEX 23 +#define FORMAT_PDF 24 +#define FORMAT_PDFTEX 25 +#define FORMAT_PS_RASTER 26 +#define FORMAT_EPS_RASTER 27 +#define FORMAT_PDF_RASTER 28 +#define FORMAT_EPSTEX_RASTER 29 +#define FORMAT_PDFTEX_RASTER 30 #define CONV_VALUE 0.8 diff --git a/doc/FAQ b/doc/FAQ index 65caf62547..78da465ef6 100644 --- a/doc/FAQ +++ b/doc/FAQ @@ -1,4 +1,4 @@ -$Id: FAQ,v 1.33 2004-02-28 01:23:38 geuzaine Exp $ +$Id: FAQ,v 1.34 2004-03-05 23:47:35 geuzaine Exp $ This is the Gmsh FAQ @@ -60,7 +60,8 @@ as well as the GSL (version 1.2 or higher; freely available from http://sources.redhat.com/gsl/) and FLTK (version 1.1.x, configured with OpenGL support; freely available from http://www.fltk.org) installed on your system. You'll also need the jpeg library if you -want to save jpeg images. +want to save jpeg images, and the libpng and zlib libraries if you +want to save png images. Under Windows, you will need the Cygwin tools and compilers (freely available from http://www.cygwin.com). diff --git a/doc/VERSIONS b/doc/VERSIONS index cfa8e70a2f..2c72d264e1 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,6 +1,7 @@ -$Id: VERSIONS,v 1.187 2004-03-04 18:05:43 geuzaine Exp $ +$Id: VERSIONS,v 1.188 2004-03-05 23:47:35 geuzaine Exp $ -New since 1.51: small bug fixes +New since 1.51: new raster ("bitmap") PostScript/EPS/PDF output +formats; New in 1.51: initial support for visualizing mesh partitions; integrated version 2.0 of the MSH mesh file format; new option to -- GitLab