1 %!PS-Adobe-1.0: music-drawing-routines.ps
3 % Functions for direct and embedded PostScript
14 1 copy mul exch 1 copy mul add sqrt
17 % FIXME. translate to middle of box.
18 % Nice rectangle with rounded corners
19 /draw_box % breapth width depth height
21 % currentdict /testing known {
22 %% real thin lines for testing
25 % /blot blot-diameter def
32 blot 2 div sub /h exch def
33 blot 2 div sub /d exch def
34 blot 2 div sub /w exch def
35 blot 2 div sub /b exch def
43 currentdict /testing known {
44 %% outline only, for testing:
47 closepath gsave stroke grestore fill
52 /draw_symmetric_x_triangle % h w th
63 /draw_round_box % breapth width depth height blot
71 blot 2 div sub /h exch def
72 blot 2 div sub /d exch def
73 blot 2 div sub /w exch def
74 blot 2 div sub /b exch def
82 currentdict /testing known {
83 %% outline only, for testing:
86 closepath gsave stroke grestore fill
90 % Nice beam with rounded corners
91 /draw_beam % slope width thick blot
103 blot 2 div t 2 div neg moveto
109 currentdict /testing known {
110 %% outline only, for testing:
113 closepath gsave stroke grestore fill
117 /draw_polygon % x(n) y(n) x(n-1) y(n-1) ... x(1) y(1) n blot
128 1 1 points {pop lineto} for
129 currentdict /testing known {
130 %% outline only, for testing:
133 closepath gsave stroke grestore fill
137 /draw_repeat_slash % width slope thick
145 beamthick beamthick slope div euclidean_length
149 width slope width mul rlineto
151 % width neg width angle sin mul neg rlineto
156 /draw_white_text % text font
159 findfont 0.8 scalefont setfont
166 /draw_ez_ball % ch letter_col ball_col font
169 findfont 0.7 scalefont setfont
173 0.5 0 0.5 0 360 arc closepath fill stroke
178 0.5 0 0.4 0 360 arc closepath
183 % 0.25 is empiric centering. Change to taste
189 % Simple, but does it work everywhere?
190 % Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this,
191 % reverted for now -- jcn
193 % The filled circles are drawn by setting the linewidth
194 % to 2*radius and drawing a point.
195 /simple_draw_ez_ball % ch letter_col ball_col font
198 findfont 0.85 scalefont setfont
199 /origin { 0.45 0 } def
211 % 0.25 is empiric centering. Change to taste
218 % this is for drawing slurs.
219 /draw_bezier_sandwich % thickness controls
221 % round ending and round beginning
222 1 setlinejoin 1 setlinecap
237 % 0 360 arc fill stroke
238 0 360 arc closepath fill stroke
241 /draw_white_dot % x1 y2 R
243 % 0 360 arc fill stroke
244 0 360 arc closepath % fill stroke
248 % 0 360 arc closepath % fill stroke
249 0.05 setlinewidth 0 setgray stroke
252 /draw_dashed_line % dash thickness dx dy
263 /draw_dashed_slur % dash thickness controls
276 % a b c d subvec == a-c b-d
284 % centre? zzwidth zzheight thickness x0 y0 x1 y1
289 4 2 roll % zzuw zzh th x1 y1 x0 y0
292 subvec % zzuw zzh th dx dy
294 2 copy euclidean_length /l exch def
299 l exch div round /n exch def
301 /zzw l n 2 mul div def
303 uy zzh mul 2 div ux zzh mul -2 div rmoveto
306 ux zzw mul uy zzh mul sub
307 uy zzw mul ux zzh mul add
309 ux zzw mul uy zzh mul add
310 uy zzw mul ux zzh mul sub
315 ux l mul uy l mul rlineto
324 /traject_alpha exch def
325 traject_ds traject_alpha sin mul add
327 traject_ds traject_alpha cos mul add
338 bracket_thick arch_height add half_height arch_thick sub arch_width add
339 arch_angle arch_height -0.15 mul bracket_traject
341 bracket_thick 0.5 mul half_height
342 0 arch_height 0.5 mul bracket_traject
346 bracket_thick half_height arch_thick sub
347 0 arch_height 0.4 mul bracket_traject
349 bracket_thick arch_height add half_height arch_thick sub arch_width add
350 arch_angle arch_height -0.25 mul bracket_traject
352 bracket_thick arch_height add half_height arch_thick sub arch_width add
354 bracket_thick half_height arch_thick sub
373 /draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick
377 /bracket_thick exch def
379 /bracket_height exch def
380 /arch_height exch def
384 bracket_height 2 div bracket_thick add /half_height exch def
385 bracket_thick 0.5 mul setlinewidth
398 %end music-drawing-routines.ps