home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / fermiVogle.tar.Z / fermiVogle.tar / devel / examples / xt / xtlcube.c < prev   
Encoding:
C/C++ Source or Header  |  1996-02-07  |  4.6 KB  |  304 lines

  1.  
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <X11/Intrinsic.h>
  5. #include <X11/StringDefs.h>
  6. #include <X11/Xaw/Form.h>
  7. #include <X11/Xaw/Command.h>
  8. #include "vogle.h"
  9.  
  10. Widget    canvas1, canvas2;
  11.  
  12. #define SIZE    512
  13.  
  14.  
  15. int    iii;
  16. int    back = 0;
  17. int    doubleb = 1;
  18. int    fill = 0;
  19. int    hatch = 0;
  20.  
  21. int    vinited = 0;
  22.  
  23. #define TRANS           25.0
  24. #define SCAL            0.1
  25. #define FILLED          2
  26. #define OUTLINE         3
  27.  
  28. float   tdir = TRANS;
  29. float   scal = 1.0 + SCAL;
  30. int     but, nplanes;
  31.  
  32. Display    *dpy;
  33. Window    win;
  34.  
  35. do_plus()
  36. {
  37.     tdir = TRANS;
  38. }
  39.  
  40. do_minus()
  41. {
  42.     tdir = -tdir;
  43.  
  44.     if (scal < 1.0)
  45.         scal = 1.0 + SCAL;
  46.     else
  47.         scal = 1.0 - SCAL;
  48. }
  49.  
  50. do_back()
  51. {
  52.     back = !back;
  53.     backface(back);
  54. }
  55.  
  56. do_fill()
  57. {
  58.     fill = !fill;
  59.     hatch = 0;
  60.  
  61.         polyfill(fill);
  62. }
  63.  
  64. do_hatch()
  65. {
  66.     hatch = !hatch;
  67.     fill = 0;
  68.  
  69.         polyhatch(hatch);
  70. }
  71.  
  72. do_scale()
  73. {
  74.     scale(scal, scal, scal);
  75. }
  76.  
  77. do_x()
  78. {
  79.     translate(tdir, 0.0, 0.0);
  80. }
  81. do_y()
  82. {
  83.     translate(0.0, tdir, 0.0);
  84. }
  85.  
  86. do_z()
  87. {
  88.     translate(0.0, 0.0, tdir);
  89. }
  90.  
  91. do_double()
  92. {
  93.     doubleb = !doubleb;
  94.  
  95.     if (doubleb) {
  96.         fprintf(stderr, "Double buffer on\n");
  97.         backbuffer(1);
  98.     } else
  99.         frontbuffer();
  100. }
  101.  
  102. quit()
  103. {
  104.     vexit();
  105.     exit(0);
  106. }
  107.  
  108. resize()
  109. {
  110.     Dimension       w, h;
  111.     Arg             arg[2];
  112.  
  113.     XtSetArg(arg[0], XtNwidth, &w);
  114.     XtSetArg(arg[1], XtNheight, &h);
  115.     XtGetValues(canvas1, arg, 2);
  116.  
  117.     fprintf(stderr, "resize() %d %d\n", w, h);
  118.     vo_xt_win_size((int)w, (int)h);
  119.     viewport(-1.0, 1.0, -1.0, 1.0);
  120. }
  121.  
  122. repaint()
  123. {
  124.     fprintf(stderr, "repaint() called\n");
  125.     color(BLACK);
  126.     clear();
  127.     
  128. }
  129.  
  130. XtActionsRec actions[] = {
  131.     {"repaint",     (XtActionProc)repaint},
  132.     {"resize",     (XtActionProc)resize}
  133. };
  134.  
  135. String trans =
  136.     "<Expose>:    repaint()\n \
  137.      <Configure>:    resize()";
  138.  
  139.  
  140. Display        *dpy;
  141. Window        win;
  142. GC        gc;
  143.  
  144. /*
  145.  * simple program to display a polygon file
  146.  */
  147. main(ac, av)
  148.     int    ac;
  149.     char    **av;
  150. {
  151.     int        w, h;
  152.     Widget        toplevel, 
  153.             panel,
  154.             qbut,
  155.             bbut,
  156.             fbut,
  157.             dbut,
  158.             hbut,
  159.             xbut,
  160.             ybut,
  161.             zbut,
  162.             sbut,
  163.             pbut,
  164.             mbut;
  165.  
  166.     Arg        wargs[5];
  167.     void        drawscene();
  168.     Dimension    ww, wh, x, y;
  169.     XtTranslations    trans_table;
  170.  
  171.     vinited = 0;
  172.  
  173.     ww = wh = 100;
  174.     x = 0;
  175.     y = 0;
  176.     toplevel = XtInitialize(av[0], "xtlcube", NULL, 0, &ac, av);
  177.  
  178.     panel = XtCreateManagedWidget("panel",
  179.             formWidgetClass,
  180.             toplevel,
  181.             NULL,
  182.         0);
  183.  
  184.  
  185.     XtSetArg(wargs[0], XtNlabel, "Quit");
  186.     qbut = XtCreateManagedWidget("quit", 
  187.             commandWidgetClass,
  188.             panel,
  189.             wargs,
  190.         1);
  191.  
  192.     XtAddCallback(qbut, XtNcallback, quit, NULL);
  193.  
  194.     XtSetArg(wargs[0], XtNlabel, "Backface");
  195.     XtSetArg(wargs[1], XtNfromHoriz, qbut);
  196.     bbut = XtCreateManagedWidget("backface",
  197.             commandWidgetClass,
  198.             panel,
  199.             wargs,
  200.         2);
  201.     XtAddCallback(bbut, XtNcallback, do_back, NULL);
  202.  
  203.     XtSetArg(wargs[0], XtNlabel, "Fill");
  204.     XtSetArg(wargs[1], XtNfromHoriz, bbut);
  205.     fbut = XtCreateManagedWidget("fill",
  206.             commandWidgetClass,
  207.             panel,
  208.             wargs,
  209.         2);
  210.     XtAddCallback(fbut, XtNcallback, do_fill, NULL);
  211.  
  212.     XtSetArg(wargs[0], XtNlabel, "Hatch");
  213.     XtSetArg(wargs[1], XtNfromHoriz, fbut);
  214.     hbut = XtCreateManagedWidget("hatch",
  215.             commandWidgetClass,
  216.             panel,
  217.             wargs,
  218.         2);
  219.     XtAddCallback(hbut, XtNcallback, do_hatch, NULL);
  220.  
  221.     XtSetArg(wargs[0], XtNlabel, "DoubleBuffer");
  222.     XtSetArg(wargs[1], XtNfromHoriz, hbut);
  223.     dbut = XtCreateManagedWidget("doubleb",
  224.             commandWidgetClass,
  225.             panel,
  226.             wargs,
  227.         2);
  228.     XtAddCallback(dbut, XtNcallback, do_double, NULL);
  229.  
  230.     XtSetArg(wargs[0], XtNwidth, 512);
  231.     XtSetArg(wargs[1], XtNheight, 512);
  232.     XtSetArg(wargs[2], XtNfromVert, qbut);
  233.     canvas1 = XtCreateManagedWidget("canvas", 
  234.             simpleWidgetClass,
  235.             panel,
  236.             wargs,
  237.         3);
  238.  
  239.     XtAddActions(actions, XtNumber(actions));
  240.     trans_table = XtParseTranslationTable(trans);
  241.     XtAugmentTranslations(canvas1, trans_table);
  242.  
  243.     XtSetArg(wargs[2], XtNfromHoriz, canvas1);
  244.     XtSetArg(wargs[3], XtNfromVert, qbut);
  245.     canvas2 = XtCreateManagedWidget("canvas", 
  246.             simpleWidgetClass,
  247.             panel,
  248.             wargs,
  249.         3);
  250.  
  251.     XtAddActions(actions, XtNumber(actions));
  252.     trans_table = XtParseTranslationTable(trans);
  253.     XtAugmentTranslations(canvas2, trans_table);
  254.  
  255.     XtRealizeWidget(toplevel);
  256.  
  257.  
  258.     dpy = XtDisplay(canvas1);
  259.     win = XtWindow(canvas2);
  260.  
  261.     vo_xt_window(dpy, win, 512, 512);
  262.     vinit("X11");
  263.     vinited = 1;
  264.     setup_lcube();
  265.  
  266.     while(1) {
  267.         XEvent    event;
  268.  
  269.         while(XtPending()) {
  270.             XtNextEvent(&event);
  271.             XtDispatchEvent(&event);
  272.         }
  273.         vo_xt_window(dpy, XtWindow(canvas1), 512, 512);
  274.         drawscene();
  275.         vo_xt_window(dpy, XtWindow(canvas2), 512, 512);
  276.         drawscene();
  277.  
  278.     }
  279. }
  280.  
  281. void
  282. drawscene()
  283. {
  284.     float    x, y;
  285.  
  286.     but = slocator(&x, &y);
  287.     pushmatrix();
  288.         rotate(100.0 * x, 'y');
  289.         rotate(100.0 * y, 'x');
  290.         color(BLACK);
  291.         clear();
  292.         callobj(FILLED);    /* The filled or hatched one */
  293. /*
  294.         if (nplanes == 1 && (fill || hatch))
  295.             callobj(OUTLINE);    /* The outline */
  296.  
  297.     popmatrix();
  298.  
  299.     if (doubleb)
  300.         swapbuffers();
  301.  
  302. }
  303.  
  304.