This commit is contained in:
Yann Esposito (Yogsototh) 2012-12-01 14:52:20 +01:00
parent 836fe7434f
commit 8b622c0ef8

View file

@ -1,12 +1,25 @@
vardef inmouthsize(expr pos,size) =
fullcircle xscaled 0.6 scaled size shifted pos
enddef;
vardef outmouthsize(expr pos,size) =
(subpath (0,4) of fullcircle rotated -90) xscaled 0.6 scaled size shifted pos
enddef;
vardef hiddenoutmouthsize(expr pos,size) =
(subpath (4,8) of fullcircle rotated -90) xscaled 0.6 scaled size shifted pos
enddef;
vardef inmouth(expr pos) =
fullcircle xscaled 0.6 scaled 2u shifted pos
inmouthsize(pos,2u)
enddef;
vardef outmouth(expr pos) =
(subpath (0,4) of fullcircle rotated -90) xscaled 0.6 scaled 2u shifted pos
outmouthsize(pos,2u)
enddef;
vardef hiddenoutmouth(expr pos) =
(subpath (4,8) of fullcircle rotated -90) xscaled 0.6 scaled 2u shifted pos
hiddenoutmouthsize(pos,2u)
enddef;
def drawoutmouth(expr pos) =
draw outmouth(pos);
draw hiddenoutmouth(pos) dashed evely;
enddef;
def drawtube(expr pos) =
@ -15,10 +28,8 @@ def drawtube(expr pos) =
pair midin,midout;
midin := pos;
midout := pos shifted (gu,0);
draw outmouth(midin);
draw hiddenoutmouth(midin) dashed evenly;
draw outmouth(midout);
draw hiddenoutmouth(midout) dashed evenly;
drawoutmouth(midin);
drawoutmouth(midout);
save topin,topout,botin,botout;
pair topin,topout,botin,botout;
@ -68,16 +79,53 @@ def drawtwotubeslabel(expr ptop,pbot,pout,l) =
endgroup;
enddef;
def drawbegintube (expr pos) =
draw (subpath (4,8) of fullcircle rotated -90) scaled 2u shifted pos;
draw (subpath (4,8) of fullcircle rotated -90) scaled 2u shifted pos shifted (-2u,0);
draw (pos shifted (-2u,u)){right}..{right}(pos shifted (0,u));
draw (pos shifted (-2u,-u)){right}..{right}(pos shifted (0,-u));
draw outmouth(pos);
draw hiddenoutmouth(pos) dashed evenly;
enddef;
def drawbegintubelabel(expr pos,l) =
drawbegintube(pos);
label(l,pos);
label(l,pos shifted (-1.5u,0));
enddef;
drawbegintubelabel((0,gu),btex $37$ etex);
drawtubelabel(origin,btex $+$ etex);
drawtwotubeslabel((0,-gu),(0,-2gu),(gu,-1.5gu),btex $+$ etex);
def drawtube(expr pos) =
begingroup;
save midin,midout;
pair midin,midout;
midin := pos;
midout := pos shifted (gu,0);
draw outmouth(midin);
draw hiddenoutmouth(midin) dashed evenly;
draw outmouth(midout);
draw hiddenoutmouth(midout) dashed evenly;
save topin,topout,botin,botout;
pair topin,topout,botin,botout;
topin=pos shifted (0,u);
topout=topin shifted (gu,0);
botin=pos shifted (0,-u);
botout=botin shifted (gu,0);
draw topin -- topout;
draw botin -- botout;
endgroup;
enddef;
def drawtubelabel(expr pos,l) =
drawtube(pos);
label(l,pos shifted (.5gu,0));
enddef;
pair pos;
pos:=(gu,gu);
drawbegintubelabel(pos shifted (-gu,.5gu),btex $37$ etex);
drawbegintubelabel(pos shifted (-gu,-.5gu),btex $\mathtt{"foo"}$ etex);
drawtwotubeslabel(pos shifted (0,.5gu), pos shifted (0,-.5gu), pos shifted (gu,0),btex $+$ etex);
z0=origin;
drawbegintubelabel(z0,btex $37$ etex);
drawtwotubeslabel(z0, z0 shifted (0,-gu), z0 shifted (gu,-0.5gu),btex $+$ etex);
drawtubelabel(z0 shifted (2gu,-.5gu),btex $37+$ etex);