2 % Accidentals from various sources, notably
4 % Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural)
5 % F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp, flat)
11 %\tracingequations:= tracingonline := 1;
13 fet_begingroup("accidentals");
15 fet_beginchar("Sharp" , "1", "sharp");
16 set_char_box(0, 1.1 interline#, 1.5 interline#,
19 save interbeam, interstem, beamheight, beamwidth,
22 interbeam := 1.05 interline;
24 beamheight := 4 stafflinethickness;
26 stemwidth := 1.3 stafflinethickness;
27 roundness := blot_diameter;
31 roundness + 2 spanwidth = beamwidth;
32 roundness + 2 spanheight = beamheight;
34 2 horizontal_protrusion + interstem * beamwidth + stemwidth
37 % wanske: whole beamheight; or ca 18 degrees
38 % z2 - z1 = (beamwidth - roundness, beamheight/2);
39 z2 - z1 = (beamwidth - roundness, beamheight);
41 beamslope = (y2-y1)/(x2-x1);
44 hspan = (spanwidth, beamslope * spanwidth);
45 vspan = (0, spanheight);
49 beam := (hspan + vspan -- -hspan
50 + vspan -- -hspan -vspan -- hspan - vspan -- cycle )
53 pickup pencircle scaled roundness;
54 filldraw (beam shifted (0,-interbeam/2));
55 filldraw (beam shifted (0,interbeam/2));
57 pickup pencircle scaled stemwidth;
58 x3 = x4 = xpart center;
59 bot y3 = -1.5 interline + ypart center;
60 top y4 = 1.5 interline + ypart center;
65 xs := interstem* beamwidth / 2;
66 draw stem shifted (- xs, - xs* beamslope);
67 draw stem shifted (xs , xs *beamslope);
71 fet_beginchar( "Natural", "0", "natural")
72 set_char_box(0, 8/12 interline#, 1.5 interline#, 1.5 interline#);
74 save interbeam, interstem, beamheight, beamwidth,
77 beamheight = 4.5 stafflinethickness;
78 interstem + stemwidth = w;
79 stemwidth = 1.3 stafflinethickness;
81 z2 -z1 = (interstem, slope * interstem);
82 xpart .5 [z2,z1] = xcenter ;
86 pickup penrazor scaled beamheight rotated 90;
87 top y2 = interline - 3/2 stafflinethickness ;
88 slope = stafflinethickness / interstem;
91 draw (xpart z1, -y2) .. (xpart z2, -y1);
94 pickup pencircle scaled stemwidth;
97 top y3 = 1.5 interline;
100 draw (xpart z1, -y4) .. z3;
101 draw (xpart z2, -y3) .. z4;
108 % Dedicated to my mom. (3/10/97)
110 % Mamma, ik hou van je; kom je alsjeblieft terug?
114 % TODO: remove crook_fatness
115 def draw_meta_flat(expr xcenter, w, crook_fatness) =
118 save top_stem_thick, bottom_stem_thick, hair;
121 center = (xcenter, 0);
123 crook_thinness = 1.25 stafflinethickness;
124 top_stem_thick = 2 stafflinethickness;
125 bottom_stem_thick = 1.2 stafflinethickness;
128 z1 = (0, 2 interline) + center;
129 z2 = (0, - 1/2 interline)+ center;
131 penpos1(top_stem_thick, 0);
132 penpos2(bottom_stem_thick, 0);
134 fill simple_serif(z1r, z1l, 30) -- z2l -- z2r -- cycle;
137 y3l = (interline - stafflinethickness)/2 + ypart center;
138 z3l = whatever [z2r,z1r];
140 z3r = .26 [z2r, z1r];
143 z4 = (3/8 interline, interline/2) + center;
144 penpos4(whatever, 53);
145 y4l - y4r = 2 crook_thinness ;
146 % y4l - y4r = 6/20[crook_thinness, crook_fatness] ;
148 y5r = 1/4 interline + ypart center;
149 x5l = w + xpart center;
150 penpos5(crook_fatness, -175);
152 z8 = (0, - interline/2 - stafflinethickness/2) + center;
157 ne_angle = angle(z9 - z8);
160 z6l = 18/33 [z8,z9] + .5 crook_thinness *dir(ne_angle -90);
162 penpos7(crook_thinness, ne_angle + 90);
164 z6r = .3 (z9-z8) + z7r;
166 % penpos7(crook_thinness, angle(dir(z8-center) -180);
168 penpos8(whatever, ne_angle + 90);
169 x8r = xpart center - bottom_stem_thick/2;
170 penlabels(range 0 thru 10);
172 z10 = (bottom_stem_thick/2, -1/5 interline) + center;
174 unfill z3r{up} .. z4r{right} .. tension .9
177 .. z10 {up} -- cycle;
179 .. tension 0.8 ..z8l{(z9-z8)}
183 .. z4l{left} .. z3l -- cycle;
190 % unfortunately, 600dpi is not enough to show the brush of the stem.
192 fet_beginchar("Flat", "-1", "flat")
193 set_char_box(1.2 stafflinethickness#, .8 interline#, .5 interline#, 2 interline#);
194 draw_meta_flat(0, w, 1/3 interline);
198 fet_beginchar("Double flat", "-2", "flatflat")
199 save left_wid, overlap, right_wid;
203 set_char_box(1.2 stafflinethickness#, (left_wid + right_wid -overlap) *interline#, .5 interline#, 2 interline#);
204 draw_meta_flat(0, left_wid* interline, 1/3 interline);
205 draw_meta_flat((left_wid - overlap) *interline,
206 right_wid *interline, 1/3 interline);
209 fet_beginchar("Double sharp", "2", "sharpsharp")
210 set_char_box(0, interline#, .5 interline#, .5 interline#);
211 save klaverblad, klaversteel;
213 klaversteel = 1/15 interline;
214 klaverblad = .35 interline;
216 z1 = (klaversteel, 0);
217 z2 = (w/2 - klaverblad / 10, h - klaverblad);
219 z4 = z2 reflectedabout((0,0), (1,1));
220 z5 = z1 reflectedabout((0,0), (1,1));
223 pickup pencircle scaled 1/20 interline;
225 z1{dir 45} .. {right}z2 -- z3 --
226 z4{down} .. {dir 225}z5 .. cycle;
229 addto currentpicture also currentpicture yscaled (-d/h);
230 addto currentpicture also currentpicture xscaled (-1);
233 currentpicture := currentpicture shifted (w/2,0);
239 fet_endgroup("accidentals");