1 %!PS-Adobe-1.0: music-drawing-routines.ps
3 % Functions for direct and embedded PostScript
6 /blot-diameter { lilypondpaperblotdiameter } bind def
16 1 copy mul exch 1 copy mul add sqrt
19 % FIXME. translate to middle of box.
20 % Nice rectangle with rounded corners
21 /draw_box % breapth width depth height
23 currentdict /testing known {
24 %% real thin lines for testing
27 /blot blot-diameter def
34 blot 2 div sub /h exch def
35 blot 2 div sub /d exch def
36 blot 2 div sub /w exch def
37 blot 2 div sub /b exch def
45 currentdict /testing known {
46 %% outline only, for testing:
49 closepath gsave stroke grestore fill
54 /draw_symmetric_x_triangle % h w th
65 /draw_round_box % breapth width depth height blot
73 blot 2 div sub /h exch def
74 blot 2 div sub /d exch def
75 blot 2 div sub /w exch def
76 blot 2 div sub /b exch def
84 currentdict /testing known {
85 %% outline only, for testing:
88 closepath gsave stroke grestore fill
92 % Nice beam with rounded corners
93 /draw_beam % slope width thick blot
105 blot 2 div t 2 div neg moveto
111 currentdict /testing known {
112 %% outline only, for testing:
115 closepath gsave stroke grestore fill
119 /draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
130 1 1 points {pop lineto} for
131 currentdict /testing known {
132 %% outline only, for testing:
135 closepath gsave stroke grestore fill
139 /draw_repeat_slash % width slope thick
147 beamthick beamthick slope div euclidean_length
151 width slope width mul rlineto
153 % width neg width angle sin mul neg rlineto
158 /draw_ez_ball % ch letter_col ball_col font
161 findfont 0.7 scalefont setfont
165 0.5 0 0.5 0 360 arc closepath fill stroke
170 0.5 0 0.4 0 360 arc closepath
175 % 0.25 is empiric centering. Change to taste
181 % Simple, but does it work everywhere?
182 % Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this,
183 % reverted for now -- jcn
185 % The filled circles are drawn by setting the linewidth
186 % to 2*radius and drawing a point.
187 /simple_draw_ez_ball % ch letter_col ball_col font
190 findfont 0.85 scalefont setfont
191 /origin { 0.45 0 } def
203 % 0.25 is empiric centering. Change to taste
210 % this is for drawing slurs.
211 /draw_bezier_sandwich % thickness controls
213 % round ending and round beginning
214 1 setlinejoin 1 setlinecap
229 % 0 360 arc fill stroke
230 0 360 arc closepath fill stroke
233 /draw_dashed_line % dash thickness dx dy
244 /draw_dashed_slur % dash thickness controls
257 % a b c d subvec == a-c b-d
265 % centre? zzwidth zzheight thickness x0 y0 x1 y1
270 4 2 roll % zzuw zzh th x1 y1 x0 y0
273 subvec % zzuw zzh th dx dy
275 2 copy euclidean_length /l exch def
280 l exch div round /n exch def
282 /zzw l n 2 mul div def
284 uy zzh mul 2 div ux zzh mul -2 div rmoveto
287 ux zzw mul uy zzh mul sub
288 uy zzw mul ux zzh mul add
290 ux zzw mul uy zzh mul add
291 uy zzw mul ux zzh mul sub
296 ux l mul uy l mul rlineto
305 /traject_alpha exch def
306 traject_ds traject_alpha sin mul add
308 traject_ds traject_alpha cos mul add
319 bracket_thick arch_height add half_height arch_thick sub arch_width add
320 arch_angle arch_height -0.15 mul bracket_traject
322 bracket_thick 0.5 mul half_height
323 0 arch_height 0.5 mul bracket_traject
327 bracket_thick half_height arch_thick sub
328 0 arch_height 0.4 mul bracket_traject
330 bracket_thick arch_height add half_height arch_thick sub arch_width add
331 arch_angle arch_height -0.25 mul bracket_traject
333 bracket_thick arch_height add half_height arch_thick sub arch_width add
335 bracket_thick half_height arch_thick sub
354 /draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick
358 /bracket_thick exch def
360 /bracket_height exch def
361 /arch_height exch def
365 bracket_height 2 div bracket_thick add /half_height exch def
366 bracket_thick 0.5 mul setlinewidth