예제 #1
0
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);
}
예제 #2
0
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();
}
예제 #3
0
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);
}
예제 #4
0
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);
}