#include "solid.h"

void draw_polygon(struct solid_obj *obj_ptr,
    struct facet *facet_ptr)
/*  draws a polygon representing a facet */
{
    struct vertex *vertex_ptr;
    int x_first, y_first; /* screen coordinates for
        first vertex of facet */
    int vertex_ref_index;
    float screen_x, screen_y; /* display screen
        coordinates */
    float x_normal, y_normal, z_normal; /* surface
        normal vector */

    for (vertex_ref_index = 0; vertex_ref_index <
        facet_ptr->vertex_count; ++vertex_ref_index) {
        /* loop for each vertex of this facet */
        vertex_ptr = obj_ptr->vertex_first +
            facet_ptr->vertex_index[vertex_ref_index];
        screen_x = proj_d * vertex_ptr->coord[0] /
            proj_z;
        screen_y = proj_d * vertex_ptr->coord[1] /
            proj_z;
        if (vertex_ref_index == 0) /* first vertex */
            moveto(x_first = (int)(((screen_x -
                screen_x_min) / (screen_x_max -
                screen_x_min)) * maxx), y_first = (int)
                (((screen_y - screen_y_min) /
                (screen_y_max - screen_y_min)) *
                maxy));
        else /* subsequent vertex */
            lineto((int)(((screen_x - screen_x_min) /
                (screen_x_max - screen_x_min)) * maxx),
                (int)(((screen_y - screen_y_min) /
                (screen_y_max - screen_y_min)) *
                maxy));
    }
    lineto(x_first, y_first); /* back to 1st vertex */
    return;
}
