home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / lout2.lzh / LOUT2 / DOC / TR.FIG / s3 < prev    next >
Text File  |  1994-01-25  |  5KB  |  184 lines

  1. @Section
  2.    @Title { Creating New Shapes }
  3. @Begin
  4. @PP
  5. If the needed shape is not provided by Fig, it can be created
  6. using the @Code "@Figure" symbol.  @Code "@Figure" takes all the options
  7. we have already seen, plus another one called {@Code shape}.  For
  8. example,
  9. @ID {
  10. @Code {
  11. "@Figure"
  12. "   shape {"
  13. "      0 0  xsize 0"
  14. "      0 ysize  0 0"
  15. "   }"
  16. "{ 3c @High 2c @Wide }"
  17. }
  18. ||7ct
  19. @Fig {
  20. @Figure
  21.    shape { 0 0  xsize 0
  22.            0 ysize  0 0
  23.          }
  24. { 3c @High 2c @Wide }
  25. }
  26. }
  27. The pairs of numbers define points in a coordinate system whose origin
  28. is the lower left corner of the right parameter; the upper right corner
  29. is @Code xsize {@Code ysize}, and the point where the
  30. right parameter's marks cross is {@Code "xmark ymark"}:
  31. @ID 10p @Font
  32. {
  33.    { &1rt @I ysize /0ik &1rt @I ymark /0ik &1rt 0 } |0.4c
  34.    {  /
  35.       |0ik @ShowMarks { 1c @High 1.5c @Wide ^| 3c @Wide ^/ 2c @High }
  36.       |0ik /
  37.    }
  38.    /0.3c
  39.    | 0 | @I xmark | @I xsize
  40. }
  41. This arrangement is identical with that for the @Code "@Graphic"
  42. symbol of basic Lout.  A sequence of points defines a shape, like
  43. the triangle above.  Arrowheads are drawn pointing forwards from the
  44. last segment and backwards from the first, as requested; the @Code margin
  45. option has default value {@Code 0c}.
  46. @PP
  47. Normally, the points are connected by straight lines to form the shape,
  48. which is then painted and drawn in the usual way, depending on the other
  49. options.
  50. @PP
  51. If two points in the shape are separated by {@Code {"[" &0.5s "]"}}, no
  52. line will be drawn between them.  This permits a shape to consist of two
  53. or more disconnected parts.
  54. @PP
  55. If two points in the shape are separated by
  56. {@Code "[" & @Eq{x ``` y} & @Code "]"}, where
  57. @Eq {x} and @Eq {y} are numbers, the two points will be joined by an
  58. anticlockwise arc whose centre is the point @Eq {(x, y)}.  This arc
  59. will be circular if possible, otherwise it will be part of an ellipse
  60. whose axes are oriented horizontally and vertically.  The notation
  61. @Code "[" & @Eq {x ``` y} @Code "clockwise]" makes the arc go
  62. clockwise.  For example,
  63. @ID {
  64. @Code {
  65. "@Figure"
  66. "   shape {"
  67. "      0 -0.5 cm"
  68. "      0 0.5 cm"
  69. "      1 cm 0  0 -0.5 cm [" &0.5s "]"
  70. "      1 cm 0 [ 1.1 cm 0 ]"
  71. "      1 cm 0"
  72. "   }"
  73. "{}"
  74. }
  75. ||7ct
  76. @Fig { //0.5c
  77. @Figure
  78.    shape { 0 -0.5 cm  0 0.5 cm
  79.            1 cm 0  0 -0.5 cm []
  80.            1 cm 0 [ 1.1 cm 0 ] 1 cm 0
  81.          }
  82. {}
  83. }
  84. }
  85. We have recklessly disregarded the size of the right parameter when
  86. drawing this shape, a dangerous thing to do since Lout thinks that the
  87. figure is the same size as its right parameter.
  88. @PP
  89. Finally, two points may be separated by
  90. @Eq { [x sub 1 ``` y sub 1 ```  x sub 2 ``` y sub 2 & ] }, which requests that a
  91. Bezier curve be drawn between them with control points
  92. @Eq { (x sub 1 & , y sub 1 & ) } and
  93. @Eq { (x sub 2 & , y sub 2 & ) }:
  94. @ID @Fig {
  95. @Figure
  96.    margin { 0c }
  97.    shape { 1 cm 2 cm 4 cm 3.5 cm  9 cm 2 cm 2 cm 0.6 cm }
  98.    linestyle { dashed }
  99. @Figure
  100.    margin { 0c }
  101.    shape { 1 cm 2 cm [4 cm 3.5 cm  9 cm 2 cm] 2 cm 0.6 cm }
  102. { 7c @Wide 4c @High }
  103.  
  104. // { -0.3  cm 2.0 cm } @BaseOf @Eq { (x sub 0 & , y sub 0 & )}
  105. // {  4.2  cm 3.5 cm } @BaseOf @Eq { (x sub 1 & , y sub 1 & )}
  106. // {  9.1  cm 2.0 cm } @BaseOf @Eq { (x sub 2 & , y sub 2 & )}
  107. // {  2.1  cm 0.0 cm } @BaseOf @Eq { (x sub 3 & , y sub 3 & )}
  108. }
  109. The curve is attracted toward the control points, without reaching
  110. them; it is tangent to the straight line from the start point to the
  111. first control point, and from the second control point to the finishing
  112. point, and it lies wholly inside the quadrilateral formed by the four
  113. points.  Owing to the author's laziness, dashes and dots do not fit as
  114. neatly onto Bezier curves as they do onto lines and arcs.
  115.  @Code "@Figure" should be general enough to draw most shapes; for
  116. example, all the other shapes ({@Code "@Box"}, {@Code "@Circle"}, etc.)
  117. are just instances of {@Code "@Figure"}.  When it is inadequate, one
  118. can fall back to the standard @Code "@Graphic" symbol.
  119. @PP
  120. Lines, arrows and arcs at any angle can be produced using {@Code "@Figure"}:
  121. @ID {
  122. @Code {
  123. "@Figure"
  124. "   shape { 0 0  xsize ysize }"
  125. "   arrow { forward }"
  126. "{ 2c @High 3c @Wide }"
  127. }
  128. ||7ct
  129. @Fig {
  130. @Figure
  131.    shape { 0 0  xsize ysize }
  132.    arrow { forward }
  133. { 2c @High 3c @Wide }
  134. }
  135. }
  136. However, for convenience there are symbols @Code "@Line" and @Code
  137. "@Arrow" which have two options, @Code "from" and {@Code "to"}, for
  138. specifying the endpoints:
  139. @ID {
  140. @Code {
  141. "@Arrow"
  142. "   from { 0 0 }"
  143. "   to { xsize ysize }"
  144. "{ 2c @High 3c @Wide }"
  145. }
  146. ||7ct
  147. @Fig {
  148. @Arrow
  149.    from { 0 0 }
  150.    to { xsize ysize }
  151. { 2c @High 3c @Wide }
  152. }
  153. }
  154. There is also an @Code "@Arc" symbol, which draws a circular or
  155. elliptical arc from one point to another about a given centre, with
  156. the usual options:
  157. @ID {
  158. @Code {
  159. "@Arc"
  160. "   from { 0 0 }"
  161. "   to { xsize ysize }"
  162. "   ctr { 0 ysize }"
  163. "   direction { anticlockwise }"
  164. "   arrow { forward }"
  165. "   linestyle { dashed }"
  166. "{ 2c @High 3c @Wide }"
  167. }
  168. ||7ct
  169. @Fig {
  170. @Arc
  171.    from { 0 0 }
  172.    to { xsize ysize }
  173.    ctr { 0 ysize }
  174.    direction { anticlockwise }
  175.    arrow { forward }
  176.    linestyle { dashed }
  177. { 2c @High 3c @Wide }
  178. }
  179. }
  180. The arc goes either @Code clockwise (the default) or @Code anticlockwise
  181. about the centre, depending on the @Code direction option.  Any
  182. arrowhead will point in a direction tangent to the arc.
  183. @End @Section
  184.