Annotation of Examples/PostScript/Arrows.eps, revision 1.1.1.1

1.1       root        1: %!PS-Adobe-2.0 EPSF-2.0
                      2: %%Title: arrows.eps
                      3: %%Creator: Adobe Systems Incorporated
                      4: %%Pages: 0 1 
                      5: %%BoundingBox: 0 0 300 540
                      6: %%EndComments
                      7: %%BeginProcSet: arrows 1.0 0
                      8: % From: Green Book Listing 3-4, on page 47.
                      9: 
                     10: % "arrowhead" takes these arguments:
                     11: % lineweight prevX prevY
                     12:  /arrowhead { %def
                     13:        gsave
                     14:                currentpoint
                     15:                4 2 roll exch 4 -1 roll exch
                     16:                sub 3 1 roll sub
                     17:                exch atan rotate dup scale
                     18:                -1 2 rlineto
                     19:                7 -2 rlineto
                     20:                -7 -2 rlineto
                     21:                closepath fill
                     22:        grestore
                     23:        newpath
                     24:  } bind def
                     25:  /l^ { %def    % lineto-arrow
                     26:        currentlinewidth currentpoint 5 3 roll
                     27:        lineto
                     28:        currentpoint stroke moveto
                     29:        arrowhead
                     30:  } bind def
                     31:  /rl^ { %def    % rlineto-arrow
                     32:        currentlinewidth currentpoint 5 3 roll
                     33:        rlineto
                     34:        currentpoint stroke moveto
                     35:        arrowhead
                     36:  } bind def
                     37:  /arc^ { %def    % arc-arrow
                     38:        5 copy arc
                     39:        currentpoint stroke moveto           % stroke arc
                     40:   % getting the correct orientation for the arrowhead
                     41:   % is tricky. This procedure uses the arguments to
                     42:   % "arc" to determine the tangent of the curve at the
                     43:   % endpoint, and it orients the arrowhead along that
                     44:   % tangent line.  It leaves an X-Y point that is just
                     45:   % behind the arrowhead along the tangent.
                     46:   % newX = X + radius * cos(endAngle-1)
                     47:   % newY = Y + radius * sin(endAngle-1)
                     48:        exch pop 1 sub   % endAngle - 1 degree
                     49:        dup cos 2 index mul 4 index add     % arrowX
                     50:        exch sin 2 index mul 3 index add    % arrowY
                     51:        currentlinewidth 2 add 3 1 roll      % thickness
                     52:        arrowhead pop pop pop                  % draw -\>
                     53:  } bind def
                     54: %%EndProcSet: arrows 1.0 0
                     55: %%EndProlog
                     56:  % line sample:
                     57:  150 420 moveto
                     58:  0 10 360 {
                     59:        currentlinewidth .1 add setlinewidth
                     60:        gsave
                     61:        dup cos 100 mul
                     62:        exch sin 100 mul
                     63:        rl^
                     64:        grestore
                     65:  } bind for
                     66:  newpath
                     67:  % curve sample:
                     68:  /radius 10 def .1 setlinewidth
                     69:  0 30 360 {
                     70:        /radius radius 10 add def
                     71:        150 150 radius 0 5 -1 roll arc^
                     72:  } bind for
                     73:  showpage
                     74: %%Trailer

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.