status.c
来自「FreeFem++可以生成高质量的有限元网格。可以用于流体力学」· C语言 代码 · 共 183 行
C
183 行
#ifdef __cplusplusextern "C" {#endif#include "medit.h"#include "extern.h"#include "sproto.h"extern void drawHUD(pScene );extern int refmat,imstep;void initTexture(void) { PPMimage *imgtex; int typimg; ubyte iquiet; GLuint texname; iquiet = quiet; quiet = 1; imgtex = loadPPM("Lions.ppm",&typimg); quiet = iquiet; if ( !imgtex ) return; glPixelStorei(GL_UNPACK_ALIGNMENT,1); glGenTextures(1,&texname); glBindTexture(GL_TEXTURE_2D,texname); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,imgtex->sizeX,imgtex->sizeY, 0,GL_RGB,GL_UNSIGNED_BYTE,imgtex->data); free(imgtex);}void backTexture(pScene sc) { glEnable(GL_TEXTURE_2D); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPushAttrib(GL_ENABLE_BIT); glEnable(GL_TEXTURE_2D); glDisable(GL_LIGHTING); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0,0.0); glTexCoord2f(sc->par.xs,0.0); glVertex2f(sc->par.xs,0.0); glTexCoord2f(sc->par.xs,sc->par.ys); glVertex2f(sc->par.xs,sc->par.ys); glTexCoord2f(0.0,sc->par.ys); glVertex2f(0.0,sc->par.ys); glEnd(); glPopAttrib(); glDisable(GL_TEXTURE_2D);}void redrawStatusBar(pScene sc) { pClip clip = sc->clip; pMesh mesh = cv.mesh[sc->idmesh]; double dd; char buf[128]; float frame,elpms; static float fps=0.0,lastfr = 0.0; static int nfr = 0,pps = 0; if ( sc->par.xs < 100 ) return; if ( ddebug ) fprintf(stdout,"redrawStatusBar\n"); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(1.,sc->par.xs,1.,sc->par.ys); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); /* other info */ glColor3f(1.0-sc->par.back[0],1.0-sc->par.back[1],1.0-sc->par.back[2]); if ( animate && !(sc->isotyp & S_PARTICLE) ) { nfr++; frame = glutGet(GLUT_ELAPSED_TIME) / 1000.0f; elpms = frame - lastfr; if ( elpms > 0.999 ) { fps = nfr / elpms; if ( mesh->nt+mesh->nq ) pps = fps * (mesh->nt+mesh->nq); else if (mesh->ntet+mesh->nhex ) pps = fps * (mesh->ntet+mesh->nhex); else pps = fps * mesh->np; nfr = 0; lastfr = frame; } output2(15,8,"Fps: %6.2f Pps: %8d",fps,pps); } if ( option == MORPHING ) output2(15,28,"%d",abs(imstep)); if ( sc->isotyp & S_STREAML && sc->par.maxtime < FLT_MAX ) output2(15,8,"t= %8.3f",sc->par.cumtim); else if ( sc->isotyp & S_PARTICLE ) output2(15,8,"t= %8.3f",sc->par.cumtim); /* clip eqn */ if ( clip->active & C_ON && !(clip->active & C_HIDE) ) { sprintf(buf,"Eqn: "); if ( fabs(clip->eqn[0]) > EPS ) sprintf(buf,"%s %+.2gx",buf,clip->eqn[0]); if ( fabs(clip->eqn[1]) > EPS ) sprintf(buf,"%s %+.2gy",buf,clip->eqn[1]); if ( fabs(clip->eqn[2]) > EPS ) sprintf(buf,"%s %+.2gz",buf,clip->eqn[2]); dd = clip->eqn[3]-clip->eqn[0]*mesh->xtra \ - clip->eqn[1]*mesh->ytra-clip->eqn[2]*mesh->ztra; if ( dd ) sprintf(buf,"%s %+.2g",buf,dd); if ( sc->par.xs > 180 ) output2(150,8,"%s = 0",buf); } if ( sc->picklist && sc->par.xs > 390 && !sc->isotyp & S_PARTICLE ) output2(350,8,"%15s",sc->material[refmat].name); if ( sc->persp->pmode == PERSPECTIVE && sc->item & S_PALETTE ) drawPalette(sc); if ( sc->persp->pmode == CAMERA ) drawHUD(sc); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST);}void mouseStatus(int button,int state,int x,int y) { pScene sc = cv.scene[currentScene()]; pTransform view = sc->view; ubyte axis = X_AXIS; /* default */ if ( ddebug ) printf("control mouse %d\n",state); if ( button == GLUT_LEFT_BUTTON ) { if ( x < 16 && x > 5 ) axis = X_AXIS; else if ( x < 26 && x > 15 ) axis = Y_AXIS; else if ( x < 36 && x > 25 ) axis = Z_AXIS; switch (axis) { case X_AXIS: view->angle = 90.0; break; case Y_AXIS: view->angle = 90.0; view->axis[0] = 1.0; view->axis[1] = view->axis[2] = 0.0f; break; case Z_AXIS: view->angle = 90.0; view->axis[1] = 0.0f; view->axis[0] = view->axis[2] = 0.0f; break; } }}#ifdef __cplusplus}#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?