diff options
author | Mike Solomon <mike@apollinemike.com> | 2010-05-18 20:53:39 +0200 |
---|---|---|
committer | Carl Sorensen <c_sorensen@byu.edu> | 2010-06-26 08:19:13 -0600 |
commit | 040fcffaf3d2a7e95dc08c4162d32fa5bc37a32d (patch) | |
tree | 8066b537dd165a3f8b81f462a4297e059413e370 /ps | |
parent | 0cafb00c0023523503bc57644ac334eda127eaad (diff) |
Add woodwind fingering diagrams
Add new file scm/woodwind-diagrams.scm
Modify drawing routines as necessary
Add new procedures to lily-library
Add new file with bezier manipulation routines
Add new stencils for use in woodwind diagrams
Add regression tests for woodwind diagrams
Diffstat (limited to 'ps')
-rw-r--r-- | ps/music-drawing-routines.ps | 68 |
1 files changed, 63 insertions, 5 deletions
diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps index 8fd31f3587..7ea8c0fb90 100644 --- a/ps/music-drawing-routines.ps +++ b/ps/music-drawing-routines.ps @@ -35,7 +35,7 @@ } bind def -% from adobe tech note 5002. +% from adobe tech note 5002. /BeginEPSF { %def /b4_Inc_state save def % Save state for cleanup /dict_count countdictstack def % Count objects on dict stack @@ -57,7 +57,7 @@ bind def count op_count sub {pop} repeat % Clean up stacks countdictstack dict_count sub {end} repeat b4_Inc_state restore -} bind def +} bind def /stroke_and_fill { gsave @@ -103,7 +103,7 @@ bind def def rmoveto % x(0) y(0) { polygon_x polygon_y vector_add lineto } repeat % n times - closepath + closepath { %fill? stroke_and_fill }{ @@ -126,7 +126,7 @@ bind def % this is for drawing slurs and barre-indicators. /draw_bezier_sandwich % x5 y5 x6 y6 x7 y7 % x4 y4 - % x1 y1 x2 y2 x3 y3 + % x1 y1 x2 y2 x3 y3 % x0 y0 % linewidth draw_bezier_sandwich { @@ -159,7 +159,7 @@ bind def 3 2 roll % f? x0 y0 r dup 0 rmoveto 0 360 arc closepath - { stroke_and_fill } + { stroke_and_fill } { stroke } ifelse } bind def @@ -192,6 +192,64 @@ bind def ifelse } bind def +/draw_partial_ellipse % filled connect x-radius y-radius startangle endangle thickness draw_partial_ellipse +% Note that filled is not boolean to permit for different graylevels (ie for trill keys) +{ + gsave + currentpoint translate + /thickness exch def + /endangle exch def + /startangle exch def + /y_radius exch def + /x_radius exch def + /endrad x_radius y_radius mul + x_radius x_radius mul + endangle cos endangle cos mul mul + y_radius y_radius mul + endangle sin endangle sin mul mul add sqrt div def + /endangle endangle sin endrad mul y_radius div + endangle cos endrad mul x_radius div atan def + /startrad x_radius y_radius mul + x_radius x_radius mul + startangle cos startangle cos mul mul + y_radius y_radius mul + startangle sin startangle sin mul mul add sqrt div def + /startangle startangle sin startrad mul y_radius div + startangle cos startrad mul x_radius div atan def + /connect exch def + /filled exch def + /savematrix matrix currentmatrix def + thickness setlinewidth + x_radius y_radius scale + startangle cos startangle sin moveto + 0 0 1 startangle + startangle endangle eq { endangle 360 add } { endangle } ifelse + arc + connect { + startangle cos startangle sin moveto endangle cos endangle sin lineto } + if + savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse + grestore +} bind def + +/draw_connected_shape +{ + gsave + currentpoint translate + /filled exch def + /connect exch def + /savematrix matrix currentmatrix def + setlinewidth + scale + /arlen exch def + arlen { + /shlen exch def + shlen { } repeat shlen 2 eq { lineto } { curveto } ifelse + } repeat connect { closepath } if + savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse + grestore +} bind def + /draw_line % dx dy x1 y1 thickness draw_line { setlinewidth % dx dy x1 y1 |