home *** CD-ROM | disk | FTP | other *** search
/ Graphics Programming Black Book (Special Edition) / BlackBook.bin / disk1 / source / chapter41 / l41-4.c < prev    next >
C/C++ Source or Header  |  1997-06-18  |  3KB  |  83 lines

  1. /* Sample program to exercise the polygon-filling routines 
  2.  
  3.    Link with L23-1.C and L23-2.C or L23-5.ASM in small model.
  4.    Tested with Borland C++ 4.02 by Jim Mischel 12/16/94.
  5. */
  6. #include <conio.h>
  7. #include <dos.h>
  8. #include "polygon.h"
  9.  
  10. #define DRAW_POLYGON(PointList,Color,Shape,X,Y)             \
  11.    Polygon.Length = sizeof(PointList)/sizeof(struct Point); \
  12.    Polygon.PointPtr = PointList;                            \
  13.    FillPolygon(&Polygon, Color, Shape, X, Y);
  14.    
  15. void main(void);
  16. extern int FillPolygon(struct PointListHeader *, int, int, int, int);
  17.  
  18. void main() {
  19.    int i, j;
  20.    struct PointListHeader Polygon;
  21.    static struct Point Polygon1[] =
  22.          {{0,0},{100,150},{320,0},{0,200},{220,50},{320,200}};
  23.    static struct Point Polygon2[] =
  24.          {{0,0},{320,0},{320,200},{0,200},{0,0},{50,50},
  25.           {270,50},{270,150},{50,150},{50,50}};
  26.    static struct Point Polygon3[] =
  27.          {{0,0},{10,0},{105,185},{260,30},{15,150},{5,150},{5,140},
  28.           {260,5},{300,5},{300,15},{110,200},{100,200},{0,10}};
  29.    static struct Point Polygon4[] =
  30.          {{0,0},{30,-20},{30,0},{0,20},{-30,0},{-30,-20}};
  31.    static struct Point Triangle1[] = {{30,0},{15,20},{0,0}};
  32.    static struct Point Triangle2[] = {{30,20},{15,0},{0,20}};
  33.    static struct Point Triangle3[] = {{0,20},{20,10},{0,0}};
  34.    static struct Point Triangle4[] = {{20,20},{20,0},{0,10}};
  35.    union REGS regset;
  36.  
  37.    /* Set the display to VGA mode 13h, 320x200 256-color mode */
  38.    regset.x.ax = 0x0013;
  39.    int86(0x10, ®set, ®set);
  40.  
  41.    /* Draw three complex polygons */
  42.    DRAW_POLYGON(Polygon1, 15, COMPLEX, 0, 0);
  43.    getch();    /* wait for a keypress */
  44.    DRAW_POLYGON(Polygon2, 5, COMPLEX, 0, 0);
  45.    getch();    /* wait for a keypress */
  46.    DRAW_POLYGON(Polygon3, 3, COMPLEX, 0, 0);
  47.    getch();    /* wait for a keypress */
  48.  
  49.    /* Draw some adjacent nonconvex polygons */
  50.    for (i=0; i<5; i++) {
  51.       for (j=0; j<8; j++) {
  52.          DRAW_POLYGON(Polygon4, 16+i*8+j, NONCONVEX, 40+(i*60),
  53.                30+(j*20));
  54.       }
  55.    }
  56.    getch();    /* wait for a keypress */
  57.  
  58.    /* Draw adjacent triangles across the screen */
  59.    for (j=0; j<=80; j+=20) {
  60.       for (i=0; i<290; i += 30) {
  61.          DRAW_POLYGON(Triangle1, 2, CONVEX, i, j);
  62.          DRAW_POLYGON(Triangle2, 4, CONVEX, i+15, j);
  63.       }
  64.    }
  65.    for (j=100; j<=170; j+=20) {
  66.       /* Do a row of pointing-right triangles */
  67.       for (i=0; i<290; i += 20) {
  68.          DRAW_POLYGON(Triangle3, 40, CONVEX, i, j);
  69.       }
  70.       /* Do a row of pointing-left triangles halfway between one row
  71.          of pointing-right triangles and the next, to fit between */
  72.       for (i=0; i<290; i += 20) {
  73.          DRAW_POLYGON(Triangle4, 1, CONVEX, i, j+10);
  74.       }
  75.    }
  76.    getch();    /* wait for a keypress */
  77.  
  78.    /* Return to text mode and exit */
  79.    regset.x.ax = 0x0003;
  80.    int86(0x10, ®set, ®set);
  81. }
  82.  
  83.