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

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