Newer
Older
// $Id: CreateFile.cpp,v 1.74 2005-12-16 20:29:15 geuzaine Exp $
//
// 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.
//
#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"
ClearOpengl();
Draw3d();
Draw2d();
}
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
int GuessFileFormatFromFileName(char *name)
{
int len;
char ext[256];
for(len = strlen(name) - 1; len >= 0; len--) {
if(name[len] == '.') {
strcpy(ext, &name[len]);
break;
}
}
if(len <= 0)
strcpy(ext, "");
if(!strcmp(ext, ".geo")) return FORMAT_GEO;
else if(!strcmp(ext, ".opt")) return FORMAT_OPT;
else if(!strcmp(ext, ".msh")) return FORMAT_MSH;
else if(!strcmp(ext, ".unv")) return FORMAT_UNV;
else if(!strcmp(ext, ".p3d")) return FORMAT_P3D;
else if(!strcmp(ext, ".dmg")) return FORMAT_DMG;
else if(!strcmp(ext, ".stl")) return FORMAT_STL;
else if(!strcmp(ext, ".pos")) return FORMAT_LC;
else if(!strcmp(ext, ".gif")) return FORMAT_GIF;
else if(!strcmp(ext, ".jpg")) return FORMAT_JPEG;
else if(!strcmp(ext, ".jpeg")) return FORMAT_JPEG;
else if(!strcmp(ext, ".png")) return FORMAT_PNG;
else if(!strcmp(ext, ".ps")) return FORMAT_PS;
else if(!strcmp(ext, ".eps")) return FORMAT_EPS;
else if(!strcmp(ext, ".pdf")) return FORMAT_PDF;
else if(!strcmp(ext, ".tex")) return FORMAT_TEX;
else if(!strcmp(ext, ".epstex")) return FORMAT_EPSTEX;
else if(!strcmp(ext, ".pdftex")) return FORMAT_PDFTEX;
else if(!strcmp(ext, ".jpegtex")) return FORMAT_JPEGTEX;
else if(!strcmp(ext, ".ppm")) return FORMAT_PPM;
else if(!strcmp(ext, ".yuv")) return FORMAT_YUV;
else if(!strcmp(ext, ".gref")) return FORMAT_GREF;
else if(!strcmp(ext, ".Gref")) return FORMAT_GREF;
else if(!strcmp(ext, ".wrl")) return FORMAT_VRML;
int res, oldformat, psformat, pssort, psoptions;
oldformat = CTX.print.format;
CTX.print.format = format;
width = viewport[2]-viewport[0];
height = viewport[3]-viewport[1];
break;
if(!(fp = fopen(name, "wb"))) {
Msg(GERROR, "Unable to open file '%s'", name);
create_jpeg(fp, width, height,
CTX.print.jpeg_quality, CTX.print.jpeg_smoothing);
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));
if(!(fp = fopen(name, "wb"))) {
Msg(GERROR, "Unable to open file '%s'", name);
return;
}
break;
case FORMAT_PS:
psformat = GL2PS_PS;
break;
default:
psformat = GL2PS_EPS;
break;
if(CTX.print.eps_quality == 0){
if(format == FORMAT_EPSTEX || format == FORMAT_PDFTEX)
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);
}
pssort = (CTX.print.eps_quality == 2) ? GL2PS_BSP_SORT : GL2PS_SIMPLE_SORT;
(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) |
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,
double modelview[16], projection[16];
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glOrtho((double)CTX.viewport[0], (double)CTX.viewport[2],
(double)CTX.viewport[1], (double)CTX.viewport[3], -1., 1.);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRasterPos2d(0, 0);
glMatrixMode(GL_PROJECTION);
glLoadMatrixd(projection);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(modelview);
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);

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;