void draw_PSF_isoline(struct psf_data *psf_s, struct psf_menu_val *psf_m,
					  struct buffer_for_gl *gl_buf, int iflag_retina, int iflag_write_ps){
    int ierr;
	
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_COLOR_ARRAY);
	glVertexPointer(ITHREE, GL_FLOAT, IZERO, gl_buf->xyz);
	glColorPointer(IFOUR, GL_FLOAT, IZERO, gl_buf->rgba);
	
	glDisable(GL_CULL_FACE);
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);

	glLineWidth(HALF * ((float) iflag_retina+IONE));
    if (iflag_write_ps == ON) {
        ierr = gl2psLineWidth(ONE);
    };
	
	if(psf_m->draw_psf_grid  != 0){
        find_start_positive_lines(psf_m);
        if(psf_m->ist_positive_line > 1){
            glEnable(GL_LINE_STIPPLE);
            glLineStipple(1,0x3333);
            if (iflag_write_ps == ON) {ierr = gl2psEnable(GL2PS_LINE_STIPPLE);};

            draw_isolines_4_psf(IONE, psf_m->ist_positive_line,
                                psf_s, psf_m, gl_buf);
            
            if (iflag_write_ps == ON) {ierr = gl2psDisable(GL2PS_LINE_STIPPLE);};
            glDisable(GL_LINE_STIPPLE);
        };
        if(psf_m->ist_positive_line < psf_m->n_isoline){
            draw_isolines_4_psf(psf_m->ist_positive_line,
                                psf_m->n_isoline, psf_s, psf_m, gl_buf);
        };
    };
	if(psf_m->draw_psf_zero  != 0){
        glLineWidth( ((float) iflag_retina+IONE) );
        if (iflag_write_ps == ON) {ierr = gl2psLineWidth(TWO);};
        
        draw_zeroline_4_psf(psf_s, psf_m, gl_buf);
        
        glLineWidth(HALF * ((float) iflag_retina+IONE));
        if (iflag_write_ps == ON) {ierr = gl2psLineWidth(ONE);};
    };
	
	glEnable(GL_CULL_FACE);
	
	glDisableClientState(GL_COLOR_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);
	return;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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));
}
Esempio n. 4
0
int gfx_e002_geom(long pos)
{
  int rv = AF_OK;
  long nodes = 0 ;
  long node_pos = 0 ;
  float r,g,b ;
  float x,y,z;
  float sx,sy,sz;
  long elem_num ;
  int  i;

  sx = 0.0 ;
  sy = 0.0 ;
  sz = 0.0 ;


	glLineWidth(2);
#ifdef USE_GL2PS
	gl2psLineWidth(2);
#endif

  femElemColor(pos, &r, &g, &b);
	glColor4f(r,g,b,1.0);

  elem_num = fdbInputGetInt(ELEM, ELEM_ID, pos) ;
  nodes = fdbInputGetInt(ELEM, ELEM_NODES, pos) ;


  if ((plotProp.wireOnly != AF_YES)||(plotProp.Select == AF_YES) )
  {
	  glBegin(GL_POLYGON);

    for (i=0; i<nodes; i++)
    {
      node_pos = fdbEnodePos(pos, i) ;

#if 0
      x = (float) fdbInputGetDbl(NODE,  NODE_X, node_pos) ;
      y = (float) fdbInputGetDbl(NODE,  NODE_Y, node_pos) ;
      z = (float) fdbInputGetDbl(NODE,  NODE_Z, node_pos) ;
#else
			x = gfxDefShapeCoord(node_pos, NODE_X) ;
			y = gfxDefShapeCoord(node_pos, NODE_Y) ;
			z = gfxDefShapeCoord(node_pos, NODE_Z) ;
#endif

		/* some manipulation with coordinates due to results will be required later*/

      x = PoSX(x) ; sx += x ;
      y = PoSY(y) ; sy += y ;
      z = PoSZ(z) ; sz += z ;

		  glVertex3f ( x, y, z ) ;
    }

	  glEnd();
  }

	glLineWidth(1);
#ifdef USE_GL2PS
	gl2psLineWidth(1);
#endif

  if (plotProp.Select != AF_YES)
  {
    /* wireframe: */

    sx = 0 ;
    sy = 0 ;
    sz = 0 ;

    if (plotProp.wireOnly != AF_YES)
    {
	    glColor4f(0.0, 0.0, 0.0, 1.0);
    }
    else
    {
      glColor4f(r,g,b,1.0);
    }

	  glBegin(GL_LINE_LOOP);

    for (i=0; i<nodes; i++)
    {
      node_pos = fdbEnodePos(pos, i) ;

#if 0
      x = (float) fdbInputGetDbl(NODE,  NODE_X, node_pos) ;
      y = (float) fdbInputGetDbl(NODE,  NODE_Y, node_pos) ;
      z = (float) fdbInputGetDbl(NODE,  NODE_Z, node_pos) ;
#else
			x = gfxDefShapeCoord(node_pos, NODE_X) ;
			y = gfxDefShapeCoord(node_pos, NODE_Y) ;
			z = gfxDefShapeCoord(node_pos, NODE_Z) ;
#endif


		  /* some manipulation with coordinates due to results will be required later*/

      x = PoSX(x) ; sx += x ;
      y = PoSY(y) ; sy += y ;
      z = PoSZ(z) ; sz += z ;

		  glVertex3f ( x, y, z ) ;
    }

	  glEnd();


    sx = (sx/nodes);
	  sy = (sy/nodes);
	  sz = (sz/nodes);

	  if (plotProp.elemNumber == AF_YES) 
    { 
	    glColor4f(plotProp.fgColor[0],
                plotProp.fgColor[1],
                plotProp.fgColor[2],
                plotProp.fgColor[3]);

      femPlotInt(elem_num, sx, sy, sz, NULL); 
    }

  }
  return(rv);
}
Esempio n. 5
0
int gfx_e002_eres(long res_pos, long etype, long res)
{
  int rv = AF_OK;
  long pos ;
  long nodes = 0 ;
  long node_pos = 0 ;
  float r,g,b ;
  float x,y,z;
  long elem_num ;
  int  i;
  double val ;
  float node0[4][4] ; /* coordinates of element nodes */

	/* element location */
  pos = fdbResEPos(res_pos) ;


  elem_num = fdbInputGetInt(ELEM, ELEM_ID, pos) ;
  nodes = fdbInputGetInt(ELEM, ELEM_NODES, pos) ;

  /* element nodes: */
  for (i=0; i<nodes; i++)
  {
    node_pos = fdbEnodePos(pos, i) ;

#if 0
    x = (float) fdbInputGetDbl(NODE,  NODE_X, node_pos) ;
    y = (float) fdbInputGetDbl(NODE,  NODE_Y, node_pos) ;
    z = (float) fdbInputGetDbl(NODE,  NODE_Z, node_pos) ;
#else
		x = gfxDefShapeCoord(node_pos, NODE_X) ;
		y = gfxDefShapeCoord(node_pos, NODE_Y) ;
		z = gfxDefShapeCoord(node_pos, NODE_Z) ;
#endif

    node0[i][0]  = PoSX(x) ;
    node0[i][1]  = PoSY(y) ;
    node0[i][2]  = PoSZ(z) ;
  }

  /* all "nodes": */

  /* 1 = A */
  node[0][0]  = node0[0][0];
  node[0][1]  = node0[0][1];
  node[0][2]  = node0[0][2];

  /* 2 = A+B */
  node[1][0]  = (node0[0][0]+node0[1][0])/2.0;
  node[1][1]  = (node0[0][1]+node0[1][1])/2.0;
  node[1][2]  = (node0[0][2]+node0[1][2])/2.0;

  /* 3 = B */
  node[2][0]  = node0[1][0];
  node[2][1]  = node0[1][1];
  node[2][2]  = node0[1][2];

  /* 4 = A+D */
  node[3][0]  = (node0[0][0]+node0[3][0])/2.0;
  node[3][1]  = (node0[0][1]+node0[3][1])/2.0;
  node[3][2]  = (node0[0][2]+node0[3][2])/2.0;

  /* 5 = A+B+C+D */
  node[4][0]  = (node0[0][0]+node0[1][0]+node0[2][0]+node0[3][0])/4.0;
  node[4][1]  = (node0[0][1]+node0[1][1]+node0[2][1]+node0[3][1])/4.0;
  node[4][2]  = (node0[0][2]+node0[1][2]+node0[2][2]+node0[3][2])/4.0;

  /* 6 = B+C */
  node[5][0]  = (node0[1][0]+node0[2][0])/2.0;
  node[5][1]  = (node0[1][1]+node0[2][1])/2.0;
  node[5][2]  = (node0[1][2]+node0[2][2])/2.0;

  /* 7 = D */
  node[6][0]  = node0[3][0];
  node[6][1]  = node0[3][1];
  node[6][2]  = node0[3][2];

  /* 8 = D+C */
  node[7][0]  = (node0[3][0]+node0[2][0])/2.0;
  node[7][1]  = (node0[3][1]+node0[2][1])/2.0;
  node[7][2]  = (node0[3][2]+node0[2][2])/2.0;

  /* 9 = C */
  node[8][0]  = node0[2][0];
  node[8][1]  = node0[2][1];
  node[8][2]  = node0[2][2];

	glLineWidth(2);
#ifdef USE_GL2PS
	gl2psLineWidth(2);
#endif

	val = fdbResElemGetVal(res_pos, etype, res, 1) ;
	femGetResColor3f(val, &r, &g, &b);
	glColor4f(r,g,b,1.0);
	gfx_e002_rect(1, 2, 5, 4);

	val = fdbResElemGetVal(res_pos, etype, res, 3) ;
	femGetResColor3f(val, &r, &g, &b);
	glColor4f(r,g,b,1.0);
	gfx_e002_rect(2, 3, 6, 5);

	val = fdbResElemGetVal(res_pos, etype, res, 2) ;
	femGetResColor3f(val, &r, &g, &b);
	glColor4f(r,g,b,1.0);
	gfx_e002_rect(4, 5, 8, 7);

	val = fdbResElemGetVal(res_pos, etype, res, 4) ;
	femGetResColor3f(val, &r, &g, &b);
	glColor4f(r,g,b,1.0);
	gfx_e002_rect(5, 6, 9, 8);

	glLineWidth(1);
#ifdef USE_GL2PS
	gl2psLineWidth(1);
#endif


  /* wireframe: */
  if (plotProp.wireRes == AF_YES)
  {
    glColor4f(0.0, 0.0, 0.0, 1.0);

    glBegin(GL_LINE_LOOP);

    for (i=0; i<nodes; i++)
    {
	    glVertex3f ( node0[i][0], node0[i][1], node0[i][2] ) ;
    }

    glEnd();
  }
  return(rv);
}
Esempio n. 6
0
int gfx_e003_eres(long res_pos, long etype, long res)
{
  int rv = AF_OK;
	long pos ;
  long nodes = 0 ;
  long node_pos = 0 ;
  float r,g,b ;
  float x,y,z;
  long elem_num ;
  int  i;
	float node[4][3] ;
	double val = 0.0 ;

	glLineWidth(2);
#ifdef USE_GL2PS
	gl2psLineWidth(2);
#endif


	/* result color computation */
	val = fdbResElemGetVal(res_pos, etype, res, 0) ;
	femGetResColor3f(val, &r, &g, &b);

	/* element location */
  pos = fdbResEPos(res_pos) ;
	
	glColor4f(r,g,b,1.0);

  elem_num = fdbInputGetInt(ELEM, ELEM_ID, pos) ;
  nodes = fdbInputGetInt(ELEM, ELEM_NODES, pos) ;

	for (i=0; i<nodes; i++)
  {
     node_pos = fdbEnodePos(pos, i) ;

#if 0
     x = (float) fdbInputGetDbl(NODE,  NODE_X, node_pos) ;
     y = (float) fdbInputGetDbl(NODE,  NODE_Y, node_pos) ;
     z = (float) fdbInputGetDbl(NODE,  NODE_Z, node_pos) ;
#else
			x = gfxDefShapeCoord(node_pos, NODE_X) ;
			y = gfxDefShapeCoord(node_pos, NODE_Y) ;
			z = gfxDefShapeCoord(node_pos, NODE_Z) ;
#endif

     x = PoSX(x) ; 
     y = PoSY(y) ;
     z = PoSZ(z) ;

		 node[i][0] = x ;
		 node[i][1] = y ;
		 node[i][2] = z ;
  }

	  glBegin(GL_POLYGON);
	  	glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  	glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  	glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  glEnd();

	  glBegin(GL_POLYGON);
	  	glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  	glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  	glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  glEnd();

	  glBegin(GL_POLYGON);
	  	glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  	glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  	glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  glEnd();

	  glBegin(GL_POLYGON);
	  	glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  	glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  	glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  glEnd();

	glLineWidth(1);
#ifdef USE_GL2PS
	gl2psLineWidth(1);
#endif

  /* wireframe: */
  if (plotProp.wireRes == AF_YES)
  {

	  glColor4f(0.0, 0.0, 0.0, 1.0);

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  glEnd();

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  glEnd();

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[0][0], node[0][1], node[0][2] ) ;
	  glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  glEnd();

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  glEnd();

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  glVertex3f ( node[1][0], node[1][1], node[1][2] ) ;
	  glEnd();

	  glBegin(GL_LINE_STRIP);
	  glVertex3f ( node[2][0], node[2][1], node[2][2] ) ;
	  glVertex3f ( node[3][0], node[3][1], node[3][2] ) ;
	  glEnd();
  }

  return(rv);
}
Esempio n. 7
0
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);
	  }
  }
}
Esempio n. 8
0
/* 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);
	  }
  }
}
Esempio n. 9
0
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);
}