Newer
Older
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software

Christophe Geuzaine
committed
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "gmsh@geuz.org".
#include "Gmsh.h"
#include "GmshUI.h"
#include "Mesh.h"
#include "Draw.h"
#include "Context.h"
#include "gl2ps.h"
#include "gl2gif.h"
#include "gl2jpeg.h"
#include "gl2ppm.h"
#include "gl2yuv.h"
InitOpengl();
ClearOpengl();
Draw3d();
Draw2d();
}
oldformat = CTX.print.format;
CTX.print.format = format;
for(len = strlen(name) - 1; len >= 0; len--) {
if(name[len] == '.') {
strcpy(ext, &name[len]);
strcpy(ext, "");
if(!strcmp(ext, ".geo"))
CreateOutputFile(name, FORMAT_GEO);
else if(!strcmp(ext, ".opt"))
CreateOutputFile(name, FORMAT_OPT);
else if(!strcmp(ext, ".msh"))
CreateOutputFile(name, FORMAT_MSH);
else if(!strcmp(ext, ".unv"))
CreateOutputFile(name, FORMAT_UNV);
else if(!strcmp(ext, ".gif"))
CreateOutputFile(name, FORMAT_GIF);
else if(!strcmp(ext, ".jpg"))
CreateOutputFile(name, FORMAT_JPEG);
else if(!strcmp(ext, ".jpeg"))
CreateOutputFile(name, FORMAT_JPEG);
else if(!strcmp(ext, ".png"))
CreateOutputFile(name, FORMAT_PNG);
else if(!strcmp(ext, ".ps"))
CreateOutputFile(name, FORMAT_PS);
else if(!strcmp(ext, ".eps"))
CreateOutputFile(name, FORMAT_EPS);
else if(!strcmp(ext, ".pdf"))
CreateOutputFile(name, FORMAT_PDF);
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);
else if(!strcmp(ext, ".pdftex"))
CreateOutputFile(name, FORMAT_PDFTEX);
else if(!strcmp(ext, ".jpegtex"))
CreateOutputFile(name, FORMAT_JPEGTEX);
else if(!strcmp(ext, ".ppm"))
CreateOutputFile(name, FORMAT_PPM);
else if(!strcmp(ext, ".yuv"))
CreateOutputFile(name, FORMAT_YUV);
else if(!strcmp(ext, ".gref"))
CreateOutputFile(name, FORMAT_GREF);
else if(!strcmp(ext, ".Gref"))
CreateOutputFile(name, FORMAT_GREF);
else if(!strcmp(ext, ".wrl"))
CreateOutputFile(name, FORMAT_VRML);
else
Msg(GERROR, "Unknown extension '%s' for automatic format detection",
ext);
case FORMAT_MSH:
case FORMAT_UNV:
case FORMAT_GREF:
case FORMAT_VRML:
break;
if(!(fp = fopen(name, "wb"))) {
Msg(GERROR, "Unable to open file '%s'", name);
create_jpeg(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], CTX.print.jpeg_quality);
create_png(fp, viewport[2]-viewport[0], viewport[3]-viewport[1], 100);
if(!(fp = fopen(name, "wb"))) {
Msg(GERROR, "Unable to open file '%s'", name);
CTX.print.gif_dither,
CTX.print.gif_sort,
CTX.print.gif_interlace,
CTX.print.gif_transparent,
UNPACK_RED(CTX.color.bg),
UNPACK_GREEN(CTX.color.bg), UNPACK_BLUE(CTX.color.bg));
case FORMAT_PS:
case FORMAT_PSTEX:
case FORMAT_EPS:
case FORMAT_EPSTEX:
if(!(fp = fopen(name, "wb"))) {
Msg(GERROR, "Unable to open file '%s'", name);
return;
}
if(format == FORMAT_PDF || format == FORMAT_PDFTEX){
psformat = GL2PS_PDF;
}
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;
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) |
(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;
psformat, pssort, psoptions, GL_RGBA, 0, NULL,
0, 0, 0, size3d, fp, name);

Christophe Geuzaine
committed
FillBuffer();

Christophe Geuzaine
committed
res = gl2psEndPage();
Msg(INFO, "Wrote %s file '%s'", (psformat == GL2PS_PDF) ? "PDF" : "PS/EPS", name);
Msg(STATUS2N, "Wrote '%s'", name);

Christophe Geuzaine
committed
fclose(fp);
case FORMAT_TEX:
if(!(fp = fopen(name, "w"))) {
Msg(GERROR, "Unable to open file '%s'", name);
GL2PS_TEX, GL2PS_NO_SORT, GL2PS_SILENT, GL_RGBA, 0, NULL,
0, 0, 0, 1000, fp, name);
CTX.print.gl_fonts = 0;
FillBuffer();
CTX.print.gl_fonts = 1;
res = gl2psEndPage();
Msg(INFO, "Wrote TEX file '%s'", name);
Msg(STATUS2N, "Wrote '%s'", name);
fclose(fp);
break;
CTX.print.format = oldformat;