void glfemSetViewPortMesh(femMesh* theMesh) { thePlot.mesh = theMesh; thePlot.Xmin = femMin(theMesh->X,theMesh->nNode); thePlot.Xmax = femMax(theMesh->X,theMesh->nNode); thePlot.Ymin = femMin(theMesh->Y,theMesh->nNode); thePlot.Ymax = femMax(theMesh->Y,theMesh->nNode); }
void glfemReshapeWindows(femMesh *theMesh, int w, int h) { double minX = femMin(theMesh->X,theMesh->nNode); double maxX = femMax(theMesh->X,theMesh->nNode); double minY = femMin(theMesh->Y,theMesh->nNode); double maxY = femMax(theMesh->Y,theMesh->nNode); double sizeX = (maxX-minX)/1.65; double meanX = (maxX+minX)/2.0; double sizeY = (maxY-minY)/1.65; double meanY = (maxY+minY)/2.0; double ratio = (GLfloat) h / (GLfloat) w; double size = fmax(sizeX,sizeY); double left,right,top,bottom; if (ratio > 1.0) { left = meanX - size; right = meanX + size; bottom = meanY - size*ratio; top = meanY + size*ratio; } else { left = meanX - size/ratio; right = meanX + size/ratio; bottom = meanY - size; top = meanY + size; } glViewport(0,0,w,h); glClearColor( 0.9f, 0.9f, 0.8f, 0.0f ); // glClearColor( 1.0f, 1.0f, 1.0f, 0.0f ); // for white plot glClear(GL_COLOR_BUFFER_BIT); glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(left, right, bottom, top, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
void glfemPlotField(femMesh *theMesh, double *u) { int i,j,*nodes; float coord[6]; double uLoc[3]; double uMax = femMax(u,theMesh->nNode); double uMin = femMin(u,theMesh->nNode); for (i = 0; i < theMesh->nElem; ++i) { nodes = femMeshElem(theMesh,i); for (j=0; j < 3; ++j) { coord[j*2+0] = theMesh->X[nodes[j]-1]; coord[j*2+1] = theMesh->Y[nodes[j]-1]; uLoc[j] = scale(uMin,uMax,u[nodes[j]-1]); } glfemDrawColorTriangle(coord,uLoc); } glColor3f(0.0, 0.0, 0.0); glfemPlotMesh(theMesh); }
void glfemPlotField(femMesh *theMesh, double *u) { int i,j,*nodes; float xLoc[4]; float yLoc[4]; double uLoc[4]; double uMax = femMax(u,theMesh->nNode); double uMin = femMin(u,theMesh->nNode); int nLocalNode = theMesh->nLocalNode; for (i = 0; i < theMesh->nElem; ++i) { nodes = &(theMesh->elem[i*nLocalNode]); for (j=0; j < nLocalNode; ++j) { xLoc[j] = theMesh->X[nodes[j]]; yLoc[j] = theMesh->Y[nodes[j]]; uLoc[j] = glScale(uMin,uMax,u[nodes[j]]); } glfemDrawColorElement(xLoc,yLoc,uLoc,nLocalNode); } glColor3f(0.0, 0.0, 0.0); glfemPlotMesh(theMesh); }