diff options
Diffstat (limited to 'Master/texmf-dist/metapost/mparrows/mparrows.mp')
-rw-r--r-- | Master/texmf-dist/metapost/mparrows/mparrows.mp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/Master/texmf-dist/metapost/mparrows/mparrows.mp b/Master/texmf-dist/metapost/mparrows/mparrows.mp new file mode 100644 index 00000000000..dcfc0470f03 --- /dev/null +++ b/Master/texmf-dist/metapost/mparrows/mparrows.mp @@ -0,0 +1,170 @@ +% Public domain. +% Created 2012-2016, Palle Joergensen, hamselv(at)pallej.dk + +numeric barbedarrowindent; barbedarrowindent:=.75; + +let drawarrow_orig = drawarrow; +let drawdblarrow_orig = drawdblarrow; + +def drawarrow_default expr p = _apth:=p; _finarr_default enddef; +def drawarrow_default_unfilled expr p = _apth:=p; _finarr_default_unfilled enddef; +def drawarrow_default_sharp expr p = _apth:=p; _finarr_default_sharp enddef; +def drawarrow_barbed expr p = _apth:=p; _finarr_barbed enddef; +def drawarrow_barbed_unfilled expr p = _apth:=p; _finarr_barbed_unfilled enddef; +def drawarrow_barbed_sharp expr p = _apth:=p; _finarr_barbed_sharp enddef; +def drawarrow_open expr p = _apth:=p; _finarr_open enddef; + +def drawdblarrow_default expr p = _apth:=p; _findarr_default enddef; +def drawdblarrow_default_unfilled expr p = _apth:=p; _findarr_default_unfilled enddef; +def drawdblarrow_default_sharp expr p = _apth:=p; _findarr_default_sharp enddef; +def drawdblarrow_barbed expr p = _apth:=p; _findarr_barbed enddef; +def drawdblarrow_barbed_unfilled expr p = _apth:=p; _findarr_barbed_unfilled enddef; +def drawdblarrow_barbed_sharp expr p = _apth:=p; _findarr_barbed_sharp enddef; +def drawdblarrow_open expr p = _apth:=p; _findarr_open enddef; + +vardef arrowhead_default expr p = %% For default like arrow heads + save q,r,e,s; + path q,r,s; pair e; + e = point length p of p; + q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength)) cuttings; + r = ((q rotated .5ahangle)--(reverse q rotated -.5ahangle)--cycle) shifted e; + s = (point length r of r)--(point (length r-1) of r); + _apth:= gobble(_apth cutbefore s) cuttings; + r +enddef; + +vardef arrowhead_barbed expr p = %% For barbed arrow heads + save q,e,f,r; + path q,r; pair e,f; + e = point length p of p; + f = (p shifted -e) intersectionpoint (makepath(pencircle scaled (barbedarrowindent*2*ahlength))); + q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength)) cuttings; + r = ((q rotated .5ahangle)--(reverse q rotated -.5ahangle)--f--cycle) shifted e; + _apth:= gobble(_apth cutbefore f shifted e) cuttings; + r +enddef; + +vardef arrowhead_open expr p = %% For open arrow head + save q,r,e; + path q,r; pair e; + e = point length p of p; + q = gobble(p shifted -e cutafter makepath(pencircle scaled 2ahlength)) cuttings; + r = ((q rotated .5ahangle)--(reverse q rotated -.5ahangle)) shifted e; + r +enddef; + +def _finarr_default text t = + filldraw arrowhead_default _apth t; + draw _apth t +enddef; + +def _findarr_default text t = + filldraw arrowhead_default _apth t; + _apth:= reverse _apth; + filldraw arrowhead_default _apth t; + draw _apth t +enddef; + +def _finarr_default_unfilled text t = + draw arrowhead_default _apth t; + draw _apth t +enddef; + +def _findarr_default_unfilled text t = + draw arrowhead_default _apth t; + _apth:= reverse _apth; + draw arrowhead_default _apth t; + draw _apth t +enddef; + +def _finarr_default_sharp text t = + fill arrowhead_default _apth t; + draw _apth t +enddef; + +def _findarr_default_sharp text t = + fill arrowhead_default _apth t; + _apth:= reverse _apth; + fill arrowhead_default _apth t; + draw _apth t +enddef; + +def _finarr_barbed text t = + filldraw arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _findarr_barbed text t = + filldraw arrowhead_barbed _apth t; + _apth:= reverse _apth; + filldraw arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _finarr_barbed_unfilled text t = + draw arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _findarr_barbed_unfilled text t = + draw arrowhead_barbed _apth t; + _apth:= reverse _apth; + draw arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _finarr_barbed_sharp text t = + fill arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _findarr_barbed_sharp text t = + fill arrowhead_barbed _apth t; + _apth:= reverse _apth; + fill arrowhead_barbed _apth t; + draw _apth t +enddef; + +def _finarr_open text t = + draw arrowhead_open _apth t; + draw _apth t +enddef; + +def _findarr_open text t = + draw arrowhead_open _apth t; + _apth:= reverse _apth; + draw arrowhead_open _apth t; + draw _apth t +enddef; + +numeric orig, default, defaultunfilled, defaultsharp, barbed, barbedunfilled, barbedsharp, open; + +orig = 0; default = 1; defaultunfilled = 2; defaultsharp = 3; barbed = 4; barbedunfilled = 5; barbedsharp = 6; open = 7; + +def setarrows expr t = + if t = orig: + let drawarrow = drawarrow_orig; + let drawdblarrow = drawdblarrow_orig; + elseif t = default: + let drawarrow = drawarrow_default; + let drawdblarrow = drawdblarrow_default; + elseif t = defaultunfilled: + let drawarrow = drawarrow_default_unfilled; + let drawdblarrow = drawdblarrow_default_unfilled; + elseif t = defaultsharp: + let drawarrow = drawarrow_default_sharp; + let drawdblarrow = drawdblarrow_default_sharp; + elseif t = barbed: + let drawarrow = drawarrow_barbed; + let drawdblarrow = drawdblarrow_barbed; + elseif t = barbedunfilled: + let drawarrow = drawarrow_barbed_unfilled; + let drawdblarrow = drawdblarrow_barbed_unfilled; + elseif t = barbedsharp: + let drawarrow = drawarrow_barbed_sharp; + let drawdblarrow = drawdblarrow_barbed_sharp; + elseif t = open: + let drawarrow = drawarrow_open; + let drawdblarrow = drawdblarrow_open; + fi +enddef; |