X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-klef.mf;h=1ed1d987ea58da1894f637e0f1c592adfda97893;hb=d64b93745ddfce23799c8388805e7b4e472ea3ef;hp=5f17ff4b283940bcca321aa78f2ed6e6d02c631a;hpb=ce521e79fd7669b45c8c1132e4b5693a03b5d90a;p=lilypond.git diff --git a/mf/feta-klef.mf b/mf/feta-klef.mf index 5f17ff4b28..1ed1d987ea 100644 --- a/mf/feta-klef.mf +++ b/mf/feta-klef.mf @@ -26,6 +26,9 @@ enddef; % [Wanske] says the bulbs should be positioned about 1/4 right of the % "arrow" + +% +% TODO: the hair-curve at z6r looks a little awkward. def draw_c_clef (expr reduction) = save hair, norm, reduced_ss, right_edge; reduced_ss#=staff_space#*reduction; @@ -102,8 +105,9 @@ fet_endchar; % def new_bulb (expr outer_tangent_point, - big_radius, bulb_radius, flare, direction) = - begingroup; + big_radius, bulb_radius, flare, direction, turning_dir) = + +begingroup; save p, oldpen; path p; pen oldpen; @@ -111,14 +115,14 @@ def new_bulb (expr outer_tangent_point, pair center; clearxy; - center = outer_tangent_point +big_radius* dir(0) + big_radius* dir(-90) - - bulb_radius * dir (-90); + center = outer_tangent_point +big_radius* dir(0) + big_radius* dir(-turning_dir * 90) + - bulb_radius * dir (- turning_dir * 90); - z1 = center + bulb_radius * dir 180; - z2 = center + bulb_radius * dir 270; + z1 = center + bulb_radius * dir (turning_dir * 180); + z2 = center + bulb_radius * dir (turning_dir * 270); z9 = center + bulb_radius * dir (0); - z10 = center + bulb_radius * dir (90); + z10 = center + bulb_radius * dir (turning_dir *90); z3 = outer_tangent_point + flare * dir (0); labels(1,2,3,9,10); @@ -126,11 +130,12 @@ def new_bulb (expr outer_tangent_point, % tension is needed to open up the space between return path and the % ball. fill +% draw z9 .. z10 .. tension 1.1 .. z1 .. z2 .. cycle; - p:= outer_tangent_point{down} + p:= outer_tangent_point{dir (-turning_dir* 90)} .. tension 0.97 - .. {up}z9 -- z3 + .. {dir (turning_dir * 90)}z9 -- z3 ; if direction = 1: p @@ -227,7 +232,7 @@ def draw_bass_clef(expr exact_center, reduction) = pickup pencircle scaled 1; % draw fill - new_bulb (z1, 0.4 reduced_ss, 0.35 reduced_ss, 2 stafflinethickness, 1) + new_bulb (z1, 0.45 reduced_ss, 0.4 reduced_ss, 2.5 stafflinethickness, 1, 1) {dir (90)} .. z2r{right} .. tension 1.0 .. z3r{down} .. {curl 0} @@ -264,10 +269,6 @@ fet_endchar; % % Inspired by Baerenreiter % -% FIXME bulb should curve (see bass clef) -% FIXME start (inside) should be little thinner -% FIXME parametrise. -% % Beste lezers, kijk, % @@ -279,11 +280,11 @@ fet_endchar; % % -- vrij naar Van Kooten & De Bie % - +def debugfill = fill enddef; def draw_gclef (expr exact_center, reduction)= - save reduced_ss, downstroke_dir, downstroke_angle, hair, center; + save reduced_ss, downstroke_dir, downstroke_angle, center; save breapth_factor, inner_thick_end, thinness, thickness, thinnib; - save inner_start_angle, thinness, thinpen; + save inner_start_angle, thinness; reduced_ss# = staff_space# * reduction; define_pixels(reduced_ss); pair downstroke_dir, center; @@ -291,17 +292,18 @@ def draw_gclef (expr exact_center, reduction)= center := (hround_pixels(xpart exact_center), vround_pixels(ypart exact_center)); - hair = .3 stafflinethickness; -% hair = blot_diameter; - thinness = 1.3 stafflinethickness; - downstroke_dir = (14, -75); - breapth_factor = 11/7; + thinness = 1.4 stafflinethickness; + downstroke_dir = unitvector (14, -75); + downstroke_angle = angle downstroke_dir; + + + breapth_factor = 21.0 /14; inner_thick_end = 45; inner_start_angle = downstroke_angle - 43; - thickness = .4 reduced_ss - hair; + thickness = .4 reduced_ss; + + thinnib = thinness; - thinnib = thinness - hair; - thinpen = thinness; set_horizontal_spacing; set_char_box( @@ -309,12 +311,16 @@ def draw_gclef (expr exact_center, reduction)= -xpart exact_center + 1.0 * breapth_factor* reduced_ss#, right_space# + xpart exact_center + .66 breapth_factor* reduced_ss#, - -ypart exact_center + 3 * reduced_ss#, + -ypart exact_center + 2.6 * reduced_ss#, ypart exact_center + 5 * reduced_ss#); - - pickup pencircle scaled hair; - downstroke_angle = angle downstroke_dir; + + save upward_swoosh_angle; + upward_swoosh_angle =130 ; + penpos7(thickness, upward_swoosh_angle); + penpos5(thickness, upward_swoosh_angle); + + z1 = center + whatever * dir (inner_start_angle); x1 = xpart center -.28 reduced_ss; @@ -324,56 +330,60 @@ def draw_gclef (expr exact_center, reduction)= bot y4r = -(reduced_ss + .5 stafflinethickness); z3 = (z4 - center) rotated inner_thick_end + center; - - z5r = (- breapth_factor, .37)* reduced_ss + center; - penpos5(thickness, 135); + x5r = - breapth_factor* reduced_ss + xpart center; + y5r = .37 reduced_ss + ypart center; z6 = center + whatever * downstroke_dir; y6 = ypart center + 2 reduced_ss; - z7l - z6 = whatever *(z5- z6) ; + z7l - z6 = whatever * (z5 - z6) ; y7l = 3.5 reduced_ss; - z8r = .4 [z9r, z7r] + 1.5 stafflinethickness * dir 52; x9 = .7 [x10, x7r]; top y9l = 5 reduced_ss; - y10 = 3. reduced_ss; - y11 = -11/7 reduced_ss; + y11 = ypart center - 47/28 reduced_ss; + y12 = ypart center - 71/28 reduced_ss; + y13 = .48 [y12,y4r]; + x11 - x13r = 1.5 reduced_ss + 0.5 thinnib; + x12r = xpart (.45 [z13r , z11] + .75 reduced_ss * downstroke_dir) ; - y12 = ypart center - 18.5/7 reduced_ss; - x12 = x11 - 5 /7 reduced_ss; +% z10= center + whatever * dir (downstroke_angle - 1.5 ); + x10 = x6 - 2 thinnib; + y10 = ypart center + 3.5 reduced_ss; + y10l - y10r = 1.2 thickness; + z10r - z10l = + .7 thinnib* dir (downstroke_angle + 90) + whatever * downstroke_dir; - z13 = z12 + .6 reduced_ss*(-1,1); + z10 = .5 [z10l, z10r]; - (z10r - z10l) dotprod (unitvector downstroke_dir rotated 90) = - thinnib; + z11 = center + whatever * downstroke_dir + ( .05 reduced_ss, 0); - center - z10= whatever * downstroke_dir; - center - z11 = whatever * downstroke_dir; - center - z14 = .8 (center - z11); penpos1(thinnib, inner_start_angle); penpos2(thickness, 90); penpos3(thinnib, -90 + inner_thick_end); penpos4(thinnib, -90); - penpos7(thickness, 135); - penpos8(1.5 thinnib, - 70 + angle downstroke_dir); - penpos9(1.4 thickness, -80); % ugh - penpos10(whatever, downstroke_angle + 10); - penpos11(thinnib, downstroke_angle + 90); - penpos14(thinnib, downstroke_angle + 90); - penpos12(thinnib, -90); - penpos13(3 thinnib, 180); + penpos9(1.45 thickness, -70); + save lipje; + pair lipje; + lipje= .5 [z9l, z9r] + .25 ((z9r- z9l) rotated -90); + penpos13(2 thinnib, 180); + + pickup pencircle scaled 1; - filldraw z2l{right} .. z3l.. z4l{left} .. z5l{up} .. z7l{up} + debugfill + z2l{right} + .. z3l + .. z4l{left} + .. z5l{up} + .. z7l{up} %.. z8l .. tension 1.2 - .. z9l & z9l .. - {downstroke_dir}z10l --- z11l -- z11r --- z10r{- downstroke_dir} - .. tension .8 - .. z9r & z9r{dir (downstroke_angle+ 40)} % ugh + .. z9l -- lipje + --z9r % {dir (downstroke_angle+ 0)} + .. tension 0.8 %.. z8r .. z7r{down} .. z5r{down} .. z4r{right} .. z3r .. z2r{left} .. @@ -381,16 +391,79 @@ def draw_gclef (expr exact_center, reduction)= z1r -- z1l .. tension 0.85 ..cycle; - filldraw simple_serif(z1r, z1l, 80) -- cycle; + save p, staffline_time, staff_line_path, down_staff_line_intersection; + path p, staff_line_path; + pair down_staff_line_intersection; + p := z4{left} .. z5{up} .. z7{up} ; + + staff_line_path := (-reduced_ss, 2 reduced_ss) .. (2 reduced_ss,2 reduced_ss); + + draw p; + + + % we don't do this with a path: variations in thickness + % are very easily made and look very ugh. + pickup pencircle scaled thinnib; + + + save bot_angle; + + bot_angle = -180; % downstroke_angle- 87; + + penpos12(thinnib, bot_angle + 90); + + p := z9 .. z10{down} + .. z6 + .. (.52 [z4, z3]) + .. z11{down} + .. z12{dir(bot_angle)} + .. z13{up} + ; + save down_intersection_t; + down_intersection_t := xpart (p intersectiontimes staff_line_path) ; + down_staff_line_intersection = point down_intersection_t of p; + z14 = down_staff_line_intersection; + penpos14(thinnib, angle (direction down_intersection_t of p) + 90); + + save start_angle; + start_angle=angle (direction xpart (p intersectiontimes z11) of p); + penpos11 (thinnib, start_angle+ 90); + + save loop_end_dir; + pair loop_end_dir; + loop_end_dir = direction (xpart (p intersectiontimes staff_line_path)) of p; + draw p; + + penpos6(thinnib, angle (loop_end_dir) + 90); + pickup pencircle scaled 1; + debugfill + z9l + .. {down}z10l + .. z14l{loop_end_dir} -- z14r{-loop_end_dir} + .. z10r{up} + .. tension .98 + .. z9r + -- cycle; + + pickup pencircle scaled 1; + + fill simple_serif(z1r, z1l, 80) -- cycle; + + debugfill + z11r{dir(start_angle)} + .. z12r{dir(bot_angle)} + + ..new_bulb (z13r, 0.45 reduced_ss, 0.38 reduced_ss, 3 stafflinethickness, 1, -1) {down} + +% .. tension 0.98 + .. z12l{-dir (bot_angle)} - filldraw z12r{left} .. z13r{up} -- z13l{down} .. z12l{right} .. cycle; + .. z11l{-dir(start_angle)} + .. cycle; - draw_bulb(-1, z13l, lft z13r, 6/14 reduced_ss, 1.0); - pickup pencircle scaled (thinpen); - draw z10 --- z14 .. z11 .. tension 0.85 .. z12{left}; - penlabels(range 1 thru 15); + penlabels(range 1 thru 16); enddef;