#include <stdio.h>
#include "vizual.h"


#define COLOR3

int draw_cappolys (Headp, D_spec, D_Cap,poly,x,y,direction,index)
    file_info *Headp;
  struct dspec *D_spec;
    struct Cap *D_Cap;
  struct poly_info *poly;
    int x;
    int y;
    int direction;
    int index;
{
    int yloc, xloc;
    int t; 
    double *vertices;
    double tmpvt[20][3];/* these are going to be sent to v3d */
    float norm[3];
    int nverts;
    short color[3];
/* RECONSTRUCT ACTUAL LOCATION OF POLYGONS */ 
    int start, stop;

    vertices = poly->verts;
    nverts = poly->vnum;


    if (!direction) 
    {
	direction = -1; /* was 0,1,  now  -1,1 */
	start = nverts-1;
	stop = -1;
    }
    else
    {
	start = 0 ;
	stop = nverts;
    }
    xloc = x;
    yloc = y;

    switch (D_Cap->side)
    {
	case 0:
	case 1:
	    norm[2] = D_Cap->side ? -1.0 : 1.0;
	    norm[0] = norm[1] = 0.0;
	    for(t=start; t!=stop; t+=direction)
	    {
	       tmpvt[t][0] = (vertices[t<<1] + xloc 	 ) * D_spec->xscale;
	       tmpvt[t][1] = (vertices[(t<<1) + 1] + yloc) * D_spec->yscale;
	       tmpvt[t][2] = (D_Cap->z 			 ) * D_spec->zscale;
	    }
	    break;
	case 2:
	case 3:
	    norm[0] = D_Cap->side == 2 ? 1.0 : -1.0;
	    norm[1] = norm[2] = 0.0;
	    for(t=start; t!=stop; t+=direction)
	    {
	       tmpvt[t][0] = (D_Cap->z			 ) * D_spec->xscale;
	       tmpvt[t][1] = (vertices[t<<1] + xloc	 ) * D_spec->yscale;
	       tmpvt[t][2] = (vertices[(t<<1) + 1] + yloc) * D_spec->zscale;
	    }
	    break;
	case 4:
	case 5:
	    norm[1] = D_Cap->side == 4? 1.0 : -1.0;
	    norm[0] = norm[2] = 0.0;
	    for(t=start; t!=stop; t+=direction)
	    {
	       tmpvt[t][0] = (vertices[t<<1] + xloc	 ) * D_spec->xscale;
	       tmpvt[t][1] = (D_Cap->z			 ) * D_spec->yscale;
	       tmpvt[t][2] = (vertices[(t<<1) + 1] + yloc) * D_spec->zscale;
	    }
	    break;
    }

    /*now ready to draw the polygons, not going to worry about reversing
    the polygon ordering at this time */

    get_cat_color (Headp->linefax.tvalue[index], D_spec->ctable, color);

    glColor3sv(color);

    glBegin(GL_POLYGON);
    if (Headp->linefax.litmodel != 1)
    /* if not flat shade */
        glNormal3fv(norm);
#ifdef CLOCKWISE
    for(t = 0; t < nverts; t++)
        {
        glVertex3dv(tmpvt[t]);
        }
#else
    for(t = nverts-1; t >= 0; t--)
        {
        glVertex3dv(tmpvt[t]);
        }
#endif
    glEnd();
    return;
}
