bool CObjectView::saveEPS(const char *fileName){ SELECT_CONTEXT(); // to use GL2PS FILE *f = fopen(fileName, "w"); if (!f) return false; int buffsize = 0, state = GL2PS_OVERFLOW; while( state == GL2PS_OVERFLOW ){ buffsize += 1024*1024; TRACE("bufferSize set to %d\n", buffsize); gl2psBeginPage("GRB", "GRB", GL2PS_BSP_SORT /*GL2PS_SIMPLE_SORT*/, GL2PS_NONE /*GL2PS_OCCLUSION_CULL*/, GL_RGBA, 0, NULL, buffsize, f); gl2psLineWidth(1); gl2psPointSize(1); setupPerspective(); drawScene(NULL, -1); state = gl2psEndPage(); } fclose(f); UNSELECT_CONTEXT(); return true; }
void drawContext::drawMesh() { if(!CTX::instance()->mesh.draw) return; // make sure to flag any model-dependent post-processing view as // changed if the underlying mesh has, before resetting the changed // flag if(CTX::instance()->mesh.changed){ for(unsigned int i = 0; i < GModel::list.size(); i++) for(unsigned int j = 0; j < PView::list.size(); j++) if(PView::list[j]->getData()->hasModel(GModel::list[i])) PView::list[j]->setChanged(true); } glPointSize((float)CTX::instance()->mesh.pointSize); gl2psPointSize((float)(CTX::instance()->mesh.pointSize * CTX::instance()->print.epsPointSizeFactor)); glLineWidth((float)CTX::instance()->mesh.lineWidth); gl2psLineWidth((float)(CTX::instance()->mesh.lineWidth * CTX::instance()->print.epsLineWidthFactor)); if(CTX::instance()->mesh.lightTwoSide) glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); else glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); if(!CTX::instance()->clipWholeElements){ for(int i = 0; i < 6; i++) if(CTX::instance()->mesh.clip & (1 << i)) glEnable((GLenum)(GL_CLIP_PLANE0 + i)); else glDisable((GLenum)(GL_CLIP_PLANE0 + i)); } for(unsigned int i = 0; i < GModel::list.size(); i++){ GModel *m = GModel::list[i]; m->fillVertexArrays(); if(m->getVisibility() && isVisible(m)){ int status = m->getMeshStatus(); if(status >= 0) std::for_each(m->firstVertex(), m->lastVertex(), drawMeshGVertex(this)); if(status >= 1) std::for_each(m->firstEdge(), m->lastEdge(), drawMeshGEdge(this)); if(status >= 2){ beginFakeTransparency(); std::for_each(m->firstFace(), m->lastFace(), drawMeshGFace(this)); endFakeTransparency(); } if(status >= 3) std::for_each(m->firstRegion(), m->lastRegion(), drawMeshGRegion(this)); } } CTX::instance()->mesh.changed = 0; for(int i = 0; i < 6; i++) glDisable((GLenum)(GL_CLIP_PLANE0 + i)); }
int femGfxDrawGrid(void) { long n ; long i ; double x, y, z ; if ((plotProp.Select == AF_YES)&&(plotProp.SelStuff != GFX_SELE_GRID)) { return(AF_OK) ; /* nothing to do */ } n = pick_grid_siz_x * pick_grid_siz_y ; if (n <= 0) {return(AF_OK);} glPointSize(GFX_SMALLPOINT); #ifdef USE_GL2PS if (plotProp.PlotToFile == AF_YES){gl2psPointSize(GFX_SMALLPOINT);} #endif for (i=0; i<n; i++) { pick_grid_compute_xyz(i, &x, &y, &z) ; if ((plotProp.SelStuff == GFX_SELE_GRID)&&(plotProp.Select == AF_YES)) { if (plotProp.Select == AF_YES) { glPushName((GLuint)i) ; } } glBegin(GL_POINTS); glColor4f( plotProp.gridColor[0], plotProp.gridColor[1], plotProp.gridColor[2], plotProp.gridColor[3] ); glVertex3f( PoSX(x), PoSY(y), PoSZ(z)); glEnd(); if (plotProp.Select == AF_YES) { glPopName() ; } } return(AF_OK); }
void afDispSymbol( double Size, long Dir, double x, double y, double z, long Num, float r, float g, float b, float tr) { double S,F; F = (plotProp.Max-plotProp.Min)/30.0; S = F/4.0; glLoadIdentity(); glTranslatef(x,y,z); switch (Dir) { /* u: */ case 1: case 15: case 29: glRotatef(180,0,1,0); break; case 2: case 16: case 30: glRotatef(270,0,0,1); break; case 3: case 17: case 31: glRotatef(90,0,1,0); break; /* rot: */ case 4: case 18: case 32: glRotatef(180,0,0,1); break; case 5: case 19: case 33: glRotatef(270,0,0,1); break; case 6: case 20: case 34: glRotatef(90,0,1,0); break; case 7: glRotatef(180,0,1,0); break; default: glLoadIdentity(); return; break; } glColor4f(r,g,b,tr); if ((Dir>=15)&&(Dir<=20)) { glColor4f(1.0, 0.6, 0.3, 1.0) ; } if ((Dir>=29)&&(Dir<=34)) { glColor4f(0.6, 0.6, 1.0, 1.0) ; } if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psPointSize(4); #endif } else { glPointSize(4); } glBegin(GL_POINTS); glVertex3f(0,0,0); glEnd(); if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psPointSize(1); #endif } else { glPointSize(1); } /* translations */ if ( (Dir <= 3) || ((Dir>=15)&&(Dir<=17)) || ((Dir>=29)&&(Dir<=31)) ) { if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } glBegin(GL_LINE_STRIP); glVertex3f(0,0,0); glVertex3f(F+0,0,0); glEnd(); if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(1); #endif } else { glLineWidth(1); } glBegin(GL_TRIANGLE_FAN); glVertex3f(0.7*F,0,0); glVertex3f(F,S,S); glVertex3f(F,-S,S); glVertex3f(F,-S,-S); glVertex3f(F,S,-S); glVertex3f(F,S,S); glEnd(); } else /* rotations */ { if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } if (Dir == 7) /* temperature */ { glBegin(GL_POINTS); glVertex3f(0,0,0); glEnd(); } else { glBegin(GL_POLYGON); glVertex3f( 0.4*F, 0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F, 0.2*F); glVertex3f( 0.4*F, 0.3*F, 0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F, 0.2*F); glVertex3f( 0.4*F,-0.3*F, 0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F,-0.2*F); glVertex3f( 0.4*F, 0.3*F,-0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.2*F, 0.2*F); glVertex3f(-0.4*F,-0.2*F, 0.2*F); glVertex3f(-0.4*F, 0.2*F, 0.2*F); glVertex3f( 0.4*F, 0.2*F, 0.2*F); glEnd(); /* */ glBegin(GL_POLYGON); glVertex3f(0,-0.2*F,-0.2*F); glVertex3f(0,-0.2*F, 0.2*F); glVertex3f(0, 0.2*F, 0.2*F); glVertex3f(0, 0.2*F,-0.2*F); glEnd(); } if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } } if (plotProp.Select != AF_YES) { /* disp number: */ if (plotProp.dispNumber == AF_YES) { femPlotInt(Num,F+0,0,0,NULL); } /* disp size: */ if (plotProp.dispSize == AF_YES) { femPlotDouble(fabs(Size),F+0,0,0,NULL); } } }
/* TODO: symbol for stiffness TODO */ void afStiffSymbol( double Size, long Dir, double x, double y, double z, long Num, float r, float g, float b, float tr) { double S,F; F = (plotProp.Max-plotProp.Min)/30.0; S = F/4.0; glLoadIdentity(); glTranslatef(x,y,z); switch (Dir) { /* u: */ case 8: case 22: case 36: glRotatef(180,0,1,0); break; case 9: case 23: case 37: glRotatef(270,0,0,1); break; case 10: case 24: case 38: glRotatef(90,0,1,0); break; /* rot: */ case 11: case 25: case 39: glRotatef(180,0,0,1); break; case 12: case 26: case 40: glRotatef(270,0,0,1); break; case 13: case 27: case 41: glRotatef(90,0,1,0); break; default: glLoadIdentity(); return; break; } if (fabs(Size) <= FEM_ZERO) {return;} glColor4f(r,g,b,tr); if ((Dir>=22)&&(Dir<=27)) { glColor4f(1.0, 0.6, 0.3, 1.0) ; } if ((Dir>=36)&&(Dir<=41)) { glColor4f(0.6, 0.6, 1.0, 1.0) ; } if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psPointSize(4); #endif } else { glPointSize(4); } glBegin(GL_POINTS); glVertex3f(0,0,0); glEnd(); if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psPointSize(1); #endif } else { glPointSize(1); } /* translation stiffnesses */ if ( ((Dir >= 8)&&(Dir <=10)) || ((Dir>=22)&&(Dir<=24)) || ((Dir>=36)&&(Dir<=38)) ) { if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } glBegin(GL_LINE_STRIP); glVertex3f(0,0,0); glVertex3f(F+0,0,0); glEnd(); if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(1); #endif } else { glLineWidth(1); } glBegin(GL_TRIANGLE_FAN); glVertex3f(0.7*F,0,0); glVertex3f(F,S,S); glVertex3f(F,-S,S); glVertex3f(F,-S,-S); glVertex3f(F,S,-S); glVertex3f(F,S,S); glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex3f(0.7*F,0,0); glVertex3f(0.4*F,S,S); glVertex3f(0.4*F,-S,S); glVertex3f(0.4*F,-S,-S); glVertex3f(0.4*F,S,-S); glVertex3f(0.4*F,S,S); glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex3f(0.1*F,0,0); glVertex3f(0.4*F,S,S); glVertex3f(0.4*F,-S,S); glVertex3f(0.4*F,-S,-S); glVertex3f(0.4*F,S,-S); glVertex3f(0.4*F,S,S); glEnd(); } else /* rotations */ { if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } #if 0 glBegin(GL_POLYGON); glVertex3f( 0.4*F, 0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F, 0.2*F); glVertex3f( 0.4*F, 0.3*F, 0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F, 0.2*F); glVertex3f( 0.4*F,-0.3*F, 0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F,-0.3*F,-0.2*F); glVertex3f(-0.4*F, 0.3*F,-0.2*F); glVertex3f( 0.4*F, 0.3*F,-0.2*F); glEnd(); glBegin(GL_POLYGON); glVertex3f( 0.4*F,-0.2*F, 0.2*F); glVertex3f(-0.4*F,-0.2*F, 0.2*F); glVertex3f(-0.4*F, 0.2*F, 0.2*F); glVertex3f( 0.4*F, 0.2*F, 0.2*F); glEnd(); /* */ glBegin(GL_POLYGON); glVertex3f(0,-0.2*F,-0.2*F); glVertex3f(0,-0.2*F, 0.2*F); glVertex3f(0, 0.2*F, 0.2*F); glVertex3f(0, 0.2*F,-0.2*F); glEnd(); #else glBegin(GL_POLYGON); glVertex3f(0,-0.3*F,-0.3*F); glVertex3f(0, 0.3*F, 0.3*F); glVertex3f(0.5*F, 0.3*F, 0.3*F); glVertex3f(0.5*F,-0.3*F,-0.3*F); glEnd(); glBegin(GL_POLYGON); glVertex3f(0,-0.3*F, 0.3*F); glVertex3f(0, 0.3*F,-0.3*F); glVertex3f(0.5*F,-0.3*F, 0.3*F); glVertex3f(0.5*F, 0.3*F,-0.3*F); glEnd(); #endif if (plotProp.PlotToFile == AF_YES) { #ifdef USE_GL2PS gl2psLineWidth(2); #endif } else { glLineWidth(2); } } if (plotProp.Select != AF_YES) { /* disp number: */ if (plotProp.dispNumber == AF_YES) { femPlotInt(Num,F+0,0,0,NULL); } /* disp size: */ if (plotProp.dispSize == AF_YES) { femPlotDouble(fabs(Size),F+0,0,0,NULL); } } }
void extras() { glColor3f(1., 0., 0.); glPointSize(1.); gl2psPointSize(1.); glBegin(GL_POINTS); glVertex3f(-1., 1.0, 0.); glEnd(); glPointSize(3.); gl2psPointSize(3.); glBegin(GL_POINTS); glVertex3f(-0.8, 1.0, 0.); glEnd(); glPointSize(5.); gl2psPointSize(5.); glBegin(GL_POINTS); glVertex3f(-0.6, 1.0, 0.); glEnd(); glPointSize(7.); gl2psPointSize(7.); glBegin(GL_POINTS); glVertex3f(-0.4, 1.0, 0.); glEnd(); glLineWidth(1.); gl2psLineWidth(1.); glBegin(GL_LINES); glVertex3f(-0.2, 1.05, 0.); glVertex3f(0.2, 1.05, 0.); glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x087F); gl2psEnable(GL2PS_LINE_STIPPLE); glBegin(GL_LINES); glVertex3f(-0.2, 0.95, 0.); glVertex3f(0.2, 0.95, 0.); glEnd(); glDisable(GL_LINE_STIPPLE); gl2psDisable(GL2PS_LINE_STIPPLE); glLineWidth(3.); gl2psLineWidth(3.); glBegin(GL_LINES); glVertex3f(0.4, 1.05, 0.); glVertex3f(0.8, 1.05, 0.); glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(2, 0x0F0F); /* glLineStipple(1, 0xAAAA); */ gl2psEnable(GL2PS_LINE_STIPPLE); glBegin(GL_LINES); glVertex3f(0.4, 0.95, 0.); glVertex3f(0.8, 0.95, 0.); glEnd(); glDisable(GL_LINE_STIPPLE); gl2psDisable(GL2PS_LINE_STIPPLE); glPointSize(1); gl2psPointSize(1); glLineWidth(1); gl2psLineWidth(1); }