home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / SRC / MOVE.C < prev    next >
C/C++ Source or Header  |  2000-02-11  |  2KB  |  128 lines

  1. #include "vogle.h"
  2.  
  3. /*
  4.  * move
  5.  *
  6.  * Move the logical graphics position to the world coordinates x, y, z.
  7.  *
  8.  */
  9. void
  10. move(x, y, z)
  11.     float     x, y, z;
  12. {
  13.     Token    *p;
  14.  
  15.     if (!vdevice.initialised) 
  16.         verror("move: vogle not initialised");
  17.  
  18.     vdevice.cpW[V_X] = x;
  19.     vdevice.cpW[V_Y] = y;
  20.     vdevice.cpW[V_Z] = z;
  21.  
  22.     vdevice.cpVvalid = 0;
  23.  
  24.     if (vdevice.inpolygon) {
  25.         (*vdevice.pmove)(x, y, z);
  26.         return;
  27.     }
  28.  
  29.     if (vdevice.inobject) {
  30.         p = newtokens(4);
  31.  
  32.         p[0].i = MOVE;
  33.         p[1].f = x;
  34.         p[2].f = y;
  35.         p[3].f = z;
  36.  
  37.         return;
  38.     }
  39.  
  40.     if (vdevice.clipoff) {        /* update device coords as well */
  41.         multvector(vdevice.cpWtrans, vdevice.cpW, vdevice.transmat->m);
  42.         vdevice.cpVx = WtoVx(vdevice.cpWtrans);
  43.         vdevice.cpVy = WtoVy(vdevice.cpWtrans);
  44.     }
  45. }
  46.  
  47. /*
  48.  * move2
  49.  *
  50.  * Move the logical graphics position to the world coords x, y, 0.0
  51.  * (I.e. a 2D move is defined as a 3D move with the Z-coord set to zero)
  52.  *
  53.  */
  54. void
  55. move2(x, y)
  56.     float    x, y;
  57. {
  58.     if (!vdevice.initialised) 
  59.         verror("move2: vogle not initialised");
  60.  
  61.     move(x, y, 0.0);
  62. }
  63.  
  64. /*
  65.  * rmove
  66.  *
  67.  * move the logical graphics position from the current world 
  68.  * coordinates by dx, dy, dz 
  69.  *
  70.  */
  71. void
  72. rmove(dx, dy, dz)
  73.     float    dx, dy, dz;
  74. {
  75.     if (!vdevice.initialised) 
  76.         verror("rmove: vogle not initialised");
  77.  
  78.     move((vdevice.cpW[V_X] + dx), (vdevice.cpW[V_Y] + dy), (vdevice.cpW[V_Z] + dz));
  79. }
  80.  
  81. /*
  82.  * rmove2
  83.  *
  84.  * Move Relative in 2D.
  85.  *
  86.  */
  87. void
  88. rmove2(dx, dy)
  89.     float    dx, dy;
  90. {
  91.     if (!vdevice.initialised) 
  92.         verror("rmove2: vogle not initialised");
  93.  
  94.     move((vdevice.cpW[V_X] + dx), (vdevice.cpW[V_Y] + dy), 0.0);
  95. }
  96.  
  97. /*
  98.  * smove2
  99.  *
  100.  * Move directly as a fraction of the screen size.
  101.  */
  102. void
  103. smove2(xs, ys)
  104.     float     xs, ys;
  105. {
  106.     if (!vdevice.initialised) 
  107.         verror("smove2: vogle not initialised");
  108.  
  109.     vdevice.cpVx = (xs / 2 + 0.5) * vdevice.sizeX;
  110.     vdevice.cpVy = (0.5 + ys / 2) * vdevice.sizeY;
  111. }
  112.  
  113. /*
  114.  * rsmove2
  115.  *
  116.  * Relative move as a fraction of the screen size.
  117.  */
  118. void
  119. rsmove2(dxs, dys)
  120.     float    dxs, dys;
  121. {
  122.     if (!vdevice.initialised) 
  123.         verror("rsmove2: vogle not initialised");
  124.  
  125.     vdevice.cpVx += dxs / 2 * vdevice.sizeX;
  126.     vdevice.cpVy += dys / 2 * vdevice.sizeY;
  127. }
  128.