summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp')
-rw-r--r--Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp130
1 files changed, 130 insertions, 0 deletions
diff --git a/Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp b/Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp
new file mode 100644
index 00000000000..b5ad73f834c
--- /dev/null
+++ b/Master/texmf-dist/metapost/blockdraw_mp/shiftoff.mp
@@ -0,0 +1,130 @@
+%% shiftoff.mp
+%% Copyright 2006 Henrik Tidefelt
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained´.
+%
+% The Current Maintainer of this work is Henrik Tidefelt,
+% tidefelt@isy.liu.se.
+%
+% This work, referred to as blockdraw.mp, consists of the files
+% shiftoff.mp
+% blockdraw.mp
+% bondgraph.mp
+% blockdraw_mp.pdf
+
+numeric to_lft;
+to_lft = 0;
+numeric to_llft;
+to_llft = 1;
+numeric to_bot;
+to_bot = 2;
+numeric to_lrt;
+to_lrt = 3;
+numeric to_rt;
+to_rt = 4;
+numeric to_urt;
+to_urt = 5;
+numeric to_top;
+to_top = 6;
+numeric to_ulft;
+to_ulft = 7;
+numeric to_center;
+to_center = 8;
+
+def to_dir(expr z ) =
+ if (xpart z) > 0:
+ if (ypart z) > 0:
+ if abs(xpart z) > 2*abs(ypart z):
+ to_rt
+ elseif abs(ypart z) > 2*abs(xpart z):
+ to_top
+ else:
+ to_urt
+ fi
+ else:
+ if abs(xpart z) > 2*abs(ypart z):
+ to_rt
+ elseif abs(ypart z) > 2*abs(xpart z):
+ to_bot
+ else:
+ to_lrt
+ fi
+ fi
+ else:
+ if (ypart z) > 0:
+ if abs(xpart z) > 2*abs(ypart z):
+ to_lft
+ elseif abs(ypart z) > 2*abs(xpart z):
+ to_top
+ else:
+ to_ulft
+ fi
+ else:
+ if abs(xpart z) > 2*abs(ypart z):
+ to_lft
+ elseif abs(ypart z) > 2*abs(xpart z):
+ to_bot
+ else:
+ to_llft
+ fi
+ fi
+ fi
+enddef;
+
+def dir_to(expr d ) =
+ dir( 180 + d * 45 )
+enddef;
+
+def shiftoff(expr pic, corner ) =
+ if corner = to_lft:
+ (pic shifted ((-center pic)+((xpart llcorner pic)-(xpart center pic),0)))
+ elseif corner = to_llft:
+ (pic shifted ((-center pic)+(llcorner pic)-(center pic)))
+ elseif corner = to_bot:
+ (pic shifted ((-center pic)+(0,(ypart llcorner pic)-(ypart center pic))))
+ elseif corner = to_lrt:
+ (pic shifted ((-center pic)+(lrcorner pic)-(center pic)))
+ elseif corner = to_rt:
+ (pic shifted ((-center pic)+((xpart lrcorner pic)-(xpart center pic),0)))
+ elseif corner = to_urt:
+ (pic shifted ((-center pic)+(urcorner pic)-(center pic)))
+ elseif corner = to_top:
+ (pic shifted ((-center pic)+(0,(ypart ulcorner pic)-(ypart center pic))))
+ elseif corner = to_ulft:
+ (pic shifted ((-center pic)+(ulcorner pic)-(center pic)))
+ else:
+ (pic shifted (-center pic))
+ fi
+enddef;
+
+numeric shiftofflabelmargin;
+shiftofflabelmargin := bboxmargin;
+def shiftoffwlm(expr pic, corner ) =
+ if corner = to_lft:
+ (pic shifted ((-center pic)+((xpart llcorner pic)-(xpart center pic),0)+(-shiftofflabelmargin,0)))
+ elseif corner = to_llft:
+ (pic shifted ((-center pic)+(llcorner pic)-(center pic)+(-shiftofflabelmargin,-shiftofflabelmargin)))
+ elseif corner = to_bot:
+ (pic shifted ((-center pic)+(0,(ypart llcorner pic)-(ypart center pic))+(0,-shiftofflabelmargin)))
+ elseif corner = to_lrt:
+ (pic shifted ((-center pic)+(lrcorner pic)-(center pic)+(shiftofflabelmargin,-shiftofflabelmargin)))
+ elseif corner = to_rt:
+ (pic shifted ((-center pic)+((xpart lrcorner pic)-(xpart center pic),0)+(shiftofflabelmargin,0)))
+ elseif corner = to_urt:
+ (pic shifted ((-center pic)+(urcorner pic)-(center pic)+(shiftofflabelmargin,shiftofflabelmargin)))
+ elseif corner = to_top:
+ (pic shifted ((-center pic)+(0,(ypart ulcorner pic)-(ypart center pic))+(0,shiftofflabelmargin)))
+ elseif corner = to_ulft:
+ (pic shifted ((-center pic)+(ulcorner pic)-(center pic)+(-shiftofflabelmargin,shiftofflabelmargin)))
+ else:
+ (pic shifted (-center pic))
+ fi
+enddef;