home *** CD-ROM | disk | FTP | other *** search
/ gondwana.ecr.mu.oz.au/pub/ / Graphics.tar / Graphics / VOGLE.ZIP / EXAMPLES / PSHAPES.P < prev    next >
Text File  |  2000-02-11  |  3KB  |  120 lines

  1.  
  2. program shapes;
  3.  
  4. #include "Vogle.h"
  5.  
  6. var
  7.     device: string_t;
  8.     i: integer;
  9.  
  10. begin
  11.  
  12.     write('Enter device name: ');
  13.     readln(device);
  14.  
  15.     Voutput('pshapes.ps');
  16.     Vinit(device);
  17.  
  18.     (*
  19.      * the two lines below clear the screen to white if we have
  20.      * colours, on a monochrome device color is ignored so the
  21.      * screen will be cleared to its background color, normally black.
  22.      *)
  23.     Color(BLACK);
  24.     Clear;
  25.  
  26.     (*
  27.      * set the screen to be 2.0 units wide and 2.0 units wide, with
  28.      * the drawable coordinates going from -1.0 to 1.0.
  29.      *)
  30.     Ortho2(-1.0, 1.0, -1.0, 1.0);
  31.  
  32.     (*
  33.      * set the text size. After this call no characters in the
  34.      * current font will be wider than 0.1 or higher than 0.1 in
  35.      * world units. As the window is currently 2.0 units wide and
  36.      * 2.0 units high text will be about one twentieth of the screen
  37.      * size.
  38.      *)
  39.     TextSize(0.1, 0.1);
  40.  
  41.     Color(MAGENTA);
  42.  
  43.     (*
  44.      * okay, so we want to draw in the range -1 to 1, but we
  45.      * only want to draw in the top lefthand corner of the
  46.      * screen. The call to viewport allows us to do this. As
  47.      * viewport always takes screen coordinates, which are 
  48.      * always in the range of -1 to 1 we can change always
  49.      * change the viewport to somewhere else on the screen
  50.      * by giving a range in -1 to 1.
  51.      *)
  52.     ViewPort(-1.0, 0.0, 0.0, 1.0);
  53.  
  54.     Move2(-0.9, -0.5);        (* write out a heading *)
  55.     DrawStr('rect');
  56.  
  57.     (*
  58.      * draw a rectangle around the points (-0.2, -0.2), (-0.2, 0.2),
  59.      * (0.3, 0.2), and (0.3, -0.2).
  60.      *)
  61.     Rect(-0.2, -0.2, 0.3, 0.2);
  62.  
  63.     Color(BLUE);
  64.  
  65.     (*
  66.      * now we want to draw in the top right corner of the screen
  67.      *)
  68.     ViewPort(0.0, 1.0, 0.0, 1.0);
  69.  
  70.     Move2(-0.9, -0.5);
  71.     DrawStr('circle');
  72.  
  73.     (*
  74.      * draw a circle of radius 0.4 around the point (0.0, 0.0)
  75.      *)
  76.     Circle(0.0, 0.0, 0.4);
  77.  
  78.     Color(GREEN);
  79.  
  80.     ViewPort(-1.0, 0.0, -1.0, 0.0);        (* draw in bottom left corner *)
  81.  
  82.     Move2(-0.9, -0.5);
  83.     DrawStr('ellipse');
  84.  
  85.     (*
  86.      * To draw an ellipse we change the aspect ratio so it is no longer
  87.      * 1 and call circle. In this case we use ortho2 to make the square
  88.      * viewport appear to be higher than it is wide. Alternatively you
  89.      * could use arc to construct one.
  90.      *
  91.      * The call to pushmatrix saves the current viewing transformation.
  92.      * After the ortho2 has been done, we restore the current viewing
  93.      * transformation with a call to popmatrix. (Otherwise everything
  94.      * after the call to ortho would come out looking squashed as the
  95.      * world aspect ratio is no longer 1).
  96.      *)
  97.     PushMatrix;
  98.         Ortho2(-1.0, 1.0, -1.0, 2.0);
  99.         Circle(0.0, 0.5, 0.4);
  100.     PopMatrix;
  101.  
  102.     Color(RED);
  103.  
  104.     ViewPort(0.0, 1.0, -1.0, 0.0);    (* now draw in bottom right corner *)
  105.  
  106.     Move2(-0.9, -0.5);
  107.     DrawStr('arc');
  108.  
  109.     (*
  110.      * draw an arc centered at (0.0, 0.0), radius of 0.4. 0.0 is the start
  111.      * angle and 90.0 is the end angle of the arc being drawn. So this
  112.      * draws a quarter circle.
  113.      *)
  114.     Arc(0.0, 0.0, 0.4, 0.0, 90.0);
  115.  
  116.     i := GetKey;
  117.  
  118.     Vexit
  119. end.
  120.