home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / examples / os2pm / lcube.c < prev    next >
C/C++ Source or Header  |  1996-02-07  |  3KB  |  206 lines

  1. #include <stdio.h>
  2. #include "vogle.h"
  3.  
  4. #define    CUBE_SIZE    200.0
  5. #define    TRANS        25.0
  6. #define    SCAL        0.1
  7. #define FACE        1
  8. #define FILLED        2
  9. #define OUTLINE        3
  10.  
  11. main(argc, argv)
  12.     int    argc;
  13.     char    *argv[];
  14. {
  15.     float    x, y, tdir = TRANS;
  16.     float    scal = 1.0 + SCAL;
  17.     int    but, nplanes;
  18.     int    back, fill, hatch, i, n;
  19.  
  20.  
  21.     prefposition(50, 50);
  22.     prefsize(250, 250);
  23.  
  24.     vinit("os2pm");
  25.  
  26.     window(-800.0, 800.0, -800.0, 800.0, -800.0, 800.0);
  27.     lookat(0.0, 0.0, 1500.0, 0.0, 0.0, 0.0, 0.0);
  28.  
  29.     /*
  30.      * Start with a very ordinary filled cube like the old demo..
  31.      */
  32.     polyhatch(0);
  33.     hatchang(45.0);
  34.     hatchpitch(40.0);
  35.     polyfill(1);
  36.  
  37.     fill = 1;
  38.     hatch = 0;
  39.     back = 1;
  40.  
  41.     makeobj(FACE);     /* hatched or filled polygon */
  42.         makepoly();
  43.             rect(-CUBE_SIZE, -CUBE_SIZE, CUBE_SIZE, CUBE_SIZE);
  44.         closepoly();
  45.     closeobj();
  46.  
  47.     makecube(FILLED);
  48.  
  49.     if ((nplanes = getdepth()) == 1)
  50.         makecube(OUTLINE);
  51.  
  52.     backface(1);
  53.         
  54.     if (backbuffer() < 0) {
  55.         verror("lcube: device doesn't support double buffering.\n"); 
  56.     }        
  57.  
  58.     while((but = slocator(&x, &y)) != 44) {
  59.         pushmatrix();
  60.             rotate(100.0 * x, 'y');
  61.             rotate(100.0 * y, 'x');
  62.             color(BLACK);
  63.             clear();
  64.             callobj(FILLED);    /* The filled or hatched one */
  65.             if (nplanes == 1 && (fill || hatch))
  66.                 callobj(OUTLINE);    /* The outline */
  67.  
  68.         popmatrix();
  69.         swapbuffers();
  70.  
  71.         switch (but = checkkey()) {
  72.         case 'p':
  73.             voutput("lcube.ps");
  74.             vnewdev("postscript");
  75.             pushmatrix();
  76.                 rotate(100.0 * x, 'y');
  77.                 rotate(100.0 * y, 'x');
  78.                 color(BLACK);
  79.                 clear();
  80.                 callobj(FILLED);
  81.                 if (nplanes == 1 && (fill || hatch))
  82.                     callobj(OUTLINE);
  83.             popmatrix();
  84.             vnewdev("os2pm");
  85.             (void)backbuffer();
  86.             break;
  87.         case 'f':    /* Toggle filling */
  88.             fill = !fill;
  89.             hatch = 0;
  90.             polyfill(fill);
  91.             break;
  92.         case 'h':    /* Toggle hatching */
  93.             hatch = !hatch;
  94.             fill = 0;
  95.             polyhatch(hatch);
  96.             break;
  97.         case 'b':     /* Toggle backfacing */
  98.             back = !back;
  99.             backface(back);
  100.             break;
  101.         case 's':
  102.             scale(scal, scal, scal);
  103.             break;
  104.         case 'x':
  105.             translate(tdir, 0.0, 0.0);
  106.             break;
  107.         case 'y':
  108.             translate(0.0, tdir, 0.0);
  109.             break;
  110.         case 'z':
  111.             translate(0.0, 0.0, tdir);
  112.             break;
  113.         case '-':
  114.             tdir = -tdir;
  115.  
  116.             if (scal < 1.0)
  117.                 scal = 1.0 + SCAL;
  118.             else
  119.                 scal = 1.0 - SCAL;
  120.  
  121.             break;
  122.         case '+':
  123.             tdir = TRANS;
  124.             break;
  125.         case 27: /* ESC */
  126.         case 'q':
  127.             vexit();
  128.             exit(0);
  129.         default:
  130.             ;
  131.         }
  132.     }
  133.  
  134.     vexit();
  135. }
  136.  
  137. makecube(obj)
  138.     int    obj;
  139. {
  140.     makeobj(obj);
  141.         if (obj == OUTLINE) {
  142.             pushattributes();
  143.             polyfill(0);
  144.             polyhatch(0);
  145.             color(BLACK);
  146.         }
  147.  
  148.         pushmatrix();
  149.             translate(0.0, 0.0, CUBE_SIZE);
  150.             if (obj == FILLED)
  151.                 color(RED);
  152.  
  153.             callobj(FACE);
  154.         popmatrix();
  155.  
  156.         pushmatrix();
  157.             translate(CUBE_SIZE, 0.0, 0.0);
  158.             rotate(90.0, 'y');
  159.             if (obj == FILLED)
  160.                 color(GREEN);
  161.  
  162.             callobj(FACE);
  163.         popmatrix();
  164.  
  165.         pushmatrix();
  166.             translate(0.0, 0.0, -CUBE_SIZE);
  167.             rotate(180.0, 'y');
  168.             if (obj == FILLED)
  169.                 color(BLUE);
  170.  
  171.             callobj(FACE);
  172.         popmatrix();
  173.  
  174.         pushmatrix();
  175.             translate(-CUBE_SIZE, 0.0, 0.0);
  176.             rotate(-90.0, 'y');
  177.             if (obj == FILLED)
  178.                 color(CYAN);
  179.  
  180.             callobj(FACE);
  181.         popmatrix();
  182.  
  183.         pushmatrix();
  184.             translate(0.0, CUBE_SIZE, 0.0);
  185.             rotate(-90.0, 'x');
  186.             if (obj == FILLED)
  187.                 color(MAGENTA);
  188.  
  189.             callobj(FACE);
  190.         popmatrix();
  191.  
  192.         pushmatrix();
  193.             translate(0.0, -CUBE_SIZE, 0.0);
  194.             rotate(90.0, 'x');
  195.             if (obj == FILLED)
  196.                 color(YELLOW);
  197.  
  198.             callobj(FACE);
  199.         popmatrix();
  200.  
  201.         if (obj == OUTLINE)
  202.             popattributes();
  203.         
  204.     closeobj();
  205. }
  206.