diff --git a/categories/img/mp/pipe.mp b/categories/img/mp/pipe.mp index be63e87..49e75bd 100644 --- a/categories/img/mp/pipe.mp +++ b/categories/img/mp/pipe.mp @@ -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); +