]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-macros.mf
''
[lilypond.git] / mf / feta-macros.mf
index 26320c6a6bb22ff15bc8034b74fde2308abce665..3b17c95f2e9ea22283fa95502186bf93c97f1c19 100644 (file)
@@ -104,6 +104,12 @@ def soft_penstroke text t =
        fi
 enddef;
 
+
+%
+% make a round path segment going from P to Q. 2*A is the angle that the 
+% path should take.
+%
+
 def simple_serif(expr p,q, a)= 
        p{dir(angle(q-p) -a)} .. q{ - dir(angle(p -q) + a)}
 enddef;
@@ -119,6 +125,10 @@ def distorted_ellipse(expr a,b,err_y,err_x,super) =
 
 
 
+%
+% draw an axis aligned block making sure that edges are on pixels.
+%
+
 def draw_rounded_block (expr bottom_left, top_right, roundness) =
        save round;
        round = floor min(roundness,xpart (top_right-bottom_left),
@@ -166,7 +176,32 @@ def draw_brush(expr a,w,b,v) =
        fill z3r{z3r-z5l}..z4l..{z5r-z3l}z3l..z5r{z5r-z3l}..z6l..{z3r-z5l}z5l..cycle;
 enddef;
 
-def draw_flare(expr pos,alpha,beta,line,flare) =
+
+
+%
+% make a superellipsoid segment going from FROM to TO, with SUPERNESS.  
+% Take superness = sqrt(2)/2 to get a circle segment 
+%
+% see Knuth, p. 267 and p.126
+def super_curvelet(expr from, to, superness, dir) =
+       if dir = 1:
+        (superness [xpart to, xpart from], superness [ypart from,ypart to]){to - from}
+       else:
+        (superness [xpart from, xpart to], superness [ypart  to,ypart from]){to - from}
+       fi
+enddef;
+
+
+%
+% Bulb with smooth inside curve.
+%
+% alpha = start direction.
+% beta = which side to turn to.
+% flare = diameter of the bulb
+% line = diameter of line attachment
+% direction = is ink on left or right side (1 or -1)
+%
+def flare_path(expr pos,alpha,beta,line,flare, direction) =
        begingroup;
        clearxy;
        penpos1(line,180+beta+alpha);
@@ -174,17 +209,63 @@ def draw_flare(expr pos,alpha,beta,line,flare) =
        penpos2(flare,180+beta+alpha);
        z2=z3;
        penpos3(flare,0+alpha);
-       z3l=z1r+(1/2+0.43)*flare*dir(alpha+beta);
-       z4=z2r-line*dir(alpha);
+       z3l=z1r+(1/2+0.43)*flare*dir(alpha+beta) ;
+       save taille;
+       taille = 0.0;
+       z4=z2r-  line * dir(alpha);
        penlabels(1,2,3,4);
        pickup pencircle;
        save t; t=0.833;
-       fill z1r{dir(alpha)}..z3r{dir(180+alpha-beta)}..z2l{dir(alpha+180)}
+       save p; 
+       path p;
+       p:=z1r{dir(alpha)}..z3r{dir(180+alpha-beta)}..z2l{dir(alpha+180)}
                ..z3l{dir(180+alpha+beta)}..tension t
-               ..z4{dir(180+alpha+beta)}..z1l{dir(alpha+180)}..cycle;
-       endgroup;
+               ..z4{dir(180+alpha+beta)}..z1l{dir(alpha+180)};
+
+       if direction = 1:
+               p
+       else:
+               reverse p
+       fi
+       endgroup
+       enddef;
+
+def flare_path_t(expr pos,alpha,beta,line, flare, bulb, direction) =
+       begingroup;
+       clearxy;
+       penpos1(line, 180+beta+alpha);
+       z1r=pos;
+       penpos2(bulb, 180+beta+alpha);
+       z2=z3;
+       penpos3(bulb, 0+alpha);
+       save taille,roundness;
+
+       taille = -0.5;
+       roundness = 0.5;
+       z3r = z1  + flare * (dir (alpha) + dir (alpha +beta));
+       z4=  z2r - taille * line * dir(alpha)
+               + roundness * line *dir (alpha - beta)
+               ;
+
+       penlabels(1,2,3,4);
+       pickup pencircle;
+       save t; t=0.833;
+       save p; 
+       path p;
+       p:=z1r{dir(alpha)}..z3r{dir(180+alpha-beta)}..z2l{dir(alpha+180)}
+               ..z3l{dir(180+alpha+beta)}..tension t
+               ..z4{dir(180+alpha+beta)}
+               ..z1l{dir(alpha+180)};
+
+       if direction = 1:
+               p
+       else:
+               reverse p
+       fi
+       endgroup
        enddef;
 
+
 def brush(expr a,w,b,v) =
        begingroup;
        draw_brush(a,w,b,v);