diff options
Diffstat (limited to 'graphics/dratex/DraTex.sty')
-rw-r--r-- | graphics/dratex/DraTex.sty | 1636 |
1 files changed, 1636 insertions, 0 deletions
diff --git a/graphics/dratex/DraTex.sty b/graphics/dratex/DraTex.sty new file mode 100644 index 0000000000..2a3f3e1e58 --- /dev/null +++ b/graphics/dratex/DraTex.sty @@ -0,0 +1,1636 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% v 1.6 +% DraTex % +% Copyright (C) 1992 by Eitan M. Gurari % +% % +% This program can redistributed and/or modified under % +% the terms of the LaTeX Project Public License % +% Distributed from CTAN archives in directory % +% macros/latex/base/lppl.txt; either version 1 of the % +% License, or (at your option) any later version. % +% % +% However, you are allowed to modify this program % +% without changing its name, if you modify its % +% signature. Changes to the signature can be introduced % +% with a directive of the form % +% \message{signature} % +% % +% gurari@cse.ohio-state.edu % +% http://www.cse.ohio-state.edu/~gurari % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\expandafter\edef\csname :RestoreCatcodes\endcsname{% + \catcode`\noexpand\noexpand\noexpand \^=\the\catcode`\^% +} +\catcode`\^=7 +\expandafter\edef\csname :RestoreCatcodes\endcsname{% + \csname :RestoreCatcodes\endcsname + \catcode`\noexpand \_=\the\catcode`\_% + \catcode`\noexpand :=\the\catcode`:% + \catcode`\noexpand @=\the\catcode`@% + \catcode`\noexpand /=\the\catcode`/% + \catcode`\noexpand &=\the\catcode`&% + \catcode`\noexpand \^^M=\the\catcode`\^^M% + \catcode`\noexpand \^^I=\the\catcode`\^^I% + \let\expandafter\noexpand + \csname:RestoreCatcodes\endcsname=\noexpand\undefined} +\catcode`\:11 \catcode`\@11 + \let\:wlog\wlog \def\wlog#1{} + \def\:wrn#1#2{\immediate\write\sixt@@n{--DraTeX warning-- + \ifcase #1 + DraTex.sty already loaded +\or \string\Draw\space within \string\Draw +\or Changing definition of \string#2 +\or No intersection points: #2 +\or Improper rotation of axes: #2 +\or (#2) in \string\DSeg\space is a point +\fi}} +\def\:err#1#2{\errmessage{--DraTeX error-- \ifcase #1 + \string#2\space meaningless in three dimensions +\or \string#2\space meaningless in two dimensions +\or No \string\MarkLoc(#2) +\or \string#2 in three dimensions +\or Too many parameters in definition +\or \string\MoveFToOval(#2)? +\fi}} + \ifx\:Xunits\:undefined \else \:wrn0{} \fi + \catcode`\ 9 \catcode`\^^M9 \catcode`\^^I9 + \def\:UBorder{0} +\newdimen\:LBorder \newdimen\:RBorder\chardef\:eight=8 +\mathchardef\:cccvx=360 +\newdimen\:mp \:mp 0.1\p@ +\newdimen\:mmp \:mmp 0.01\p@ +\newdimen\:mmmp \:mmmp 0.001\p@ +\newdimen\:XC \:XC 90\p@ +\newdimen\:CVXXX \:CVXXX180\p@ +\newdimen\:CCCVX \:CCCVX\:cccvx\p@ \newdimen\:TeXLoc +\newbox\:box\newif\if:IIID \newdimen\:Z \newdimen\:Zunits +\newdimen\:Ex \newdimen\:Ey \newdimen\:Ez + +\def\:AbsVal#1{ \ifdim#1<\z@-\fi #1 } +\def\:abs#1{\ifdim #1<\z@ #1-#1 \fi} +\def\:AbsDif#1#2#3{ #1#2 \advance#1 -#3 + \ifdim #1<\z@ #1-#1 \fi} +\def\:diff#1#2#3{ #1#2 \advance#1 -#3 } +\def\:average#1#2#3{ + #1#2 \advance#1 #3 \divide#1 \tw@}\def\:Opt#1#2#3#4{ + \def\:temp{ + \ifx \:next\ifnum \def\:next{#3#1#4#2} + \else\ifx \:next#1 \def\:next{#3} + \else \def\:next{#3#1#4#2}\fi\fi \:next} + \futurelet\:next\:temp}\def\Define#1{\:multid#1 + \:Opt(){\:Define#1}0} + +\def\:DraCatCodes{\catcode`\ 9 \catcode`\^^M9 + \expandafter\ifx \csname ;catcode\endcsname\relax % + \expandafter\edef \csname ;catcode\endcsname{% + \catcode`;\the\catcode`\;}% +\fi % +\catcode`;12 % +% + \catcode`\^^I9 \catcode`\&13 \catcode`\~13 } + +\def\:Define#1(#2){\begingroup \:DraCatCodes \::Define#1(#2)} + +\def\::Define#1(#2)#3{\endgroup + \let\:NextDefine\NextDefine + \let\NextDefine\relax + \ifcase#2\relax + \def#1{#3}\or + \:TxtPar\def#1(##1){#3}\or + \:TxtPar\def#1(##1,##2){#3}\or + \:TxtPar\def#1(##1,##2,##3){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4,##5){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4,##5,##6){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7,##8){#3}\or + \:TxtPar\def#1(##1,##2,##3,##4,##5,##6,##7,##8,##9){#3}\or + \:err4{}\fi \let\:TxtPar\relax \:NextDefine} + +\let\NextDefine\relax\let\:TxtPar\relax +\def\WarningOn{\def\:multid##1{ + \ifx ##1\:undefined \else \:wrn2##1\fi}} +\def\:gobble#1{} +\def\WarningOff{\let\:multid\:gobble} \WarningOff +\Define\Indirect{\futurelet\:next\:Indirect} + +\Define\:Indirect{\:theDoReg + \ifx \:next< + \def\:temp{\let\DoReg\:DoReg} + \def\:next<##1>{\expandafter\:temp\csname :<##1>\endcsname} + \else + \def\:next##1<##2>{ + \expandafter\ifx \csname :<##2> \endcsname \relax + \def\:next{##1} \fi +\:indrwrn\Define \:indrwrn\Object +\:indrwrn\Table \:indrwrn\IntVar \:indrwrn\DecVar + \def\:temp{\let\DoReg\:DoReg##1} + \expandafter\:temp \csname :<##2> \endcsname} + \fi \:next} \def\:indrwrn#1{ \def\:temp{#1} + \ifx \:next\:temp \def\:wrn##1##2{\let\:wrn\::wrn} \fi} +\let\::wrn\:wrn +\Define\:Hline{ + \setbox\:box\hbox{\vrule height0.5\:thickness + depth 0.5\:thickness width\:x} + {\:d\:X \advance\:d \wd\:box + \advance\:X -\:TeXLoc \global\:TeXLoc\:d + \vrule width\:X depth\z@ height\z@ + \raise \:Y \box\:box} }\Define\:Vline{ + \setbox\:box\hbox{\vrule width\:thickness + \ifdim \:y>\z@ height\:y depth\z@ + \else height\z@ depth-\:y \fi} + \advance\:X -0.5\:thickness + {\:d\:X \advance\:d \wd\:box + \advance\:X -\:TeXLoc \global\:TeXLoc\:d + \vrule width\:X depth\z@ height\z@ + \raise \:Y \box\:box} }\Define\:MvTo(2){\:X#1\:Xunits \:Y#2\:Yunits} +\Define\:Mv(2){\advance\:X #1\:Xunits + \advance\:Y #2\:Yunits} +\def\:DLn(#1,#2,{\:MvTo(#1,#2) \:LnTo(}\Define\:LnTo(2){ + \:x#1\:Xunits \advance\:x -\:X + \:y#2\:Yunits \advance\:y -\:Y + \:Ln(\:x\du,\:y\du) }\Define\:Ln(2){ + \:x#1\:Xunits \:y#2\:Yunits + { \ifdim \:x<\z@ + \advance\:X \:x \:x-\:x + \advance\:Y \:y \:y-\:y + \fi + \:yy\:AbsVal\:y + \:dd\:yy \advance\:dd \:x + \ifdim \:dd>\:mmmp + \ifdim \:x>\:yy + { \ifdim\:X<\:LBorder \global\:LBorder\:X\fi +\advance \:X \:x +\ifdim \:X>\:RBorder \global\:RBorder\:X\fi\advance \:Y 0.5\:thickness +\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi +\advance \:Y \:y +\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi } + \let\:Yunitsy\:x \let\:Xunitsx\:y \let\:temp\:Hline + \:dd0.6\:yy \:divide\:dd\:x + \else + { \advance \:X -0.5\:thickness +\ifdim \:X<\:LBorder \global\:LBorder\:X \fi +\advance \:X \:thickness +\advance \:X \:x +\ifdim \:X>\:RBorder \global\:RBorder\:X\fi +\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi +\advance \:Y \:y +\ifdim \:Y>\:UBorder \xdef\:UBorder{\the\:Y} \fi } + \let\:Yunitsy\:y \let\:Xunitsx\:x \let\:temp\:Vline + \:dd0.6\:x +\ifdim \:x>\:mmp \:divide\:dd\:yy \fi + \fi + \advance\:dd 0.4\p@ +\:ragged\:Cons\:dd\:ragged + \:HVLn + \fi } + \advance\:X \:x \advance\:Y \:y}\Define\:HVLn{ + \:xx\:AbsVal\:Xunitsx \:divide\:xx\:ragged + \advance\:xx 0.99\p@ \:K\:InCons\:xx \relax + \ifnum \:K>\z@ + \divide\:Xunitsx \:K \advance\:K \@ne + \divide\:Yunitsy \:K + \else \:K\@ne \fi \:NextLn} + + +\Define\:NextLn{ + \ifnum\:K=\z@ \let\:NextLn\relax + \else { \:temp } \advance\:K \m@ne + \advance\:X \:x \advance\:Y \:y + \fi \:NextLn}\newdimen\:ragged + +\Define\Ragged(1){ \:ragged#1\p@ \:ragged0.1\:ragged } +\Ragged(7.5) +\Define\PaintUnderCurve(4){{ + \:Z\:Y \def\:next{\Curve(#1,#2,#3,#4)} + \MoveToLoc(#1) \:d\:X \MoveToLoc(#4) + \advance\:d -\:X + \ifdim \:AbsVal\:d<\:mmp \def\:next{} + \else + \def\:CrvLnTo(##1,##2){ + \:x \:X \:y \:Y \:X\:DJ \:Y\:yyyy + \:xx\:X \:dddd \:Y \:X\:x \:Y\:y + { \advance\:Y \:dddd \divide\:Y \tw@ + \advance\:Z -\:Y + \advance\:Y 0.5\:Z + \:dddd \:AbsVal \:Z \:d\z@ + \def\:CrvLnTo{\:LnTo} + \:yy\:Y \:dd\:dddd \:ddd\:dddd + \::paint }} + \fi \:next }} +\Define\DoCurve(1){ \let\:StopCurve\:SlowCurve + \def\:CMv(##1){ \:x\:X \:y\:Y \:MvTo(##1) + \advance\:x -\:X \advance\:y -\:Y + \:xxx \:x \:yyy\:y} + \:DoCurve{\Curve(#1)} + \let\:StopCurve\:FastCurve} + +\def\:DoCurve#1(#2)#3{{\XSaveUnits + \def\:next{#1} \:MvTo(#2,#2) + \:x\:AbsVal\:X \:y\:Y \:ddd\z@ \:length + \:Z\:d \:divide\:Z{1.41421\p@} + \edef\:tempa{\the\:DoDist} \global\:DoDist\z@ + \def\:CrvLnTo(##1){ \MarkLoc(1^) \:CMv(##1) + { \MarkLoc(2^) \:ddd\z@ \:length +\:dd \:DoDist \global\advance\:DoDist \:d +\:ddd \:DoDist \:divide\:ddd\:Z +\DoReg\:InCons\:ddd \:Z\DoReg\:Z + + \ifdim \:Z>\:dd + \advance\:Z -\:DoDist +\advance\:dd -\:DoDist +\:divide\:Z\:dd +\advance\:X \:Cons\:Z\:xxx +\advance\:Y \:Cons\:Z\:yyy \:DoRot + \def\:CrvLnTo{\:LnTo} + \def\:OvalLn{\:Ln} \XRecallUnits #3 \fi}} + \:next \xdef\:DoDim{\:Cons\:DoDist} + \global\:DoDist\:tempa } + \let\DoDim\:DoDim} + +\newdimen\:DoDist\def\:DoRot{ \DSeg\RotateTo(1^,2^) } +\def\DoLine(#1,#2)(#3)#4{ + \MarkLoc($1) \Move(#1,#2) + \def\:next{ { \MarkLoc($2) + \DSeg\RotateTo($1,$2) \let\:DoRot\relax + \edef\:RecallRagged{\the\:ragged} \MoveTo(#3,#3) + \:x\:AbsVal\:X \:y\:Y \:ddd\z@ \:length + \:ragged\:d \divide\:ragged \tw@ + \DoCurve($1,$1,$2,$2)(#3) + {\:ragged\:RecallRagged #4} } + \let\DoDim\:DoDim} \:next } +\def\Table#1{\begingroup \:DraCatCodes \:multid#1 + \:DefineData#1} + + +\def\:DefineData#1#2{\endgroup + \let\:temp~ \def~{\noexpand~} + \edef#1{\noexpand\:DoPoly\expandafter\noexpand\csname + :\string#1\endcsname} + \expandafter\edef \csname :\string#1\endcsname + ##1{\noexpand\ifcase##1(#2)\noexpand\fi} + \let~\:temp \:DoNextPoly \:DoNextPoly} + +\def\:OR{\let\:or\or} \:OR \catcode`\&13 \def&{)\noexpand\:or(} + +\def\TableData{\begingroup \:DraCatCodes \:TableData} + +\def\:TableData#1#2#3{\endgroup \Table\:temp{#3} + \:K\z@ \:J\z@ \def\:tempa(##1){\advance\:J \@ne } + \:temp(0,999){\:tempa} \let\:tempa& \def\:temp{\def#1} + \def&##1&{ + \ifnum \:K<\:J + \advance\:K \@ne + \ifnum \:K=\@ne \def#1{#2(##1)} + \else + \:IIIexpandafter\:temp\expandafter{ + #1 & #2(##1) } + \fi + \else \let\:next\relax \fi + \:next} + \let\:next& && \let&\:tempa } + +\catcode`\&4 \def\:DoPoly#1(#2,#3)#4{ + \expandafter\let \csname :Back\the\:level\endcsname\:or +\expandafter\edef\csname :DoVars\the\:level\endcsname{ + \:DoB\the\:DoB} +\advance\:level \@ne + \:DoB#3 \advance\:DoB -#2 + \def\:PolyOr(##1){ + \ifnum \:DoB=\z@ \:OR + \else #4(##1) \advance\:DoB \m@ne \fi} + \:OR + \def\:temp{\let\:or\:PolyOr #4} + \:IIIexpandafter\:temp#1{#2} + \advance\:level \m@ne +\csname :DoVars\the\:level\endcsname +\def\:temp{\let\:or} +\expandafter\:temp\csname :Back\the\:level\endcsname } +\Define\PaintRect(2){\def\:next{{ \MarkLoc(^) + \MoveToLoc(^) \Move( #1,0) \MarkLoc(^1) \Move(0,#2) + \MarkLoc(^2) \Move(-#1,0) \MarkLoc(^3) + \PaintQuad(^,^1,^2,^3) }}\:next} +\Define\PaintRectAt(4){\def\:next{{ \MoveTo(#1,#2) + \:Ex#3\p@ \advance\:Ex -#1\p@ + \:Ey#4\p@ \advance\:Ey -#2\p@ + \PaintRect(\:Cons\:Ex,\:Cons\:Ey)}} + \:next}\def\::paint{ + \ifdim \:d<\:ragged \advance\:xx -\:X + \:yyy\:Y \:xxx\:dddd + \advance\:Y \:yy \divide\:Y \tw@ + \:average\:dddd\:dd\:ddd + \def\:next{\:brush(\:xx,\z@)\:Y\:yyy\:dddd\:xxx} + \else \divide\:d \tw@ + \:average\:x\:X\:xx + \:average\:y\:Y\:yy + \:average\:dddd\:dd\:ddd + \fi \:next}\Define\:paint{{ \:AbsDif\:d\:xx\:x + \ifdim \:d<\:mmp \let\::paint\relax + \else + \ifdim \:y >\:yyy \:dd\:y \:y \:yyy \:yyy \:dd \fi + \ifdim \:yy>\:yyyy \:dd\:yy \:yy\:yyyy \:yyyy\:dd \fi + \:AbsDif\:dd\:yyyy\:yyy \:AbsDif\:ddd\:yy\:y + \ifdim \:dd<\:ddd \:dd\:ddd \fi + \ifdim \:d >\:dd \:d\:dd \fi + \advance\:d \:d \:diff\:dd\:y\:yyy + \:diff\:ddd\:yy\:yyyy + \advance\:y -0.5\:dd \:abs\:dd + \advance\:yy -0.5\:ddd \:abs\:ddd + \:X\:x \:Y\:y + \:average\:dddd\:dd\:ddd + \def\:next{ \:lpaint \:rpaint } + \fi + \::paint }} + +\Define\:lpaint{ { \:xx\:x \:yy \:y \:ddd\:dddd \::paint} } +\Define\:rpaint{ { \:X \:x \:Y \:y \:dd \:dddd \::paint} } +\Define\PaintQuad(4){\def\:next{{\Units(1pt,1pt) + \MoveToLoc(#1) \:x \:X \:y \:Y + \MoveToLoc(#2) \:xx \:X \:yy \:Y + \MoveToLoc(#3) \:xxx\:X \:yyy\:Y + \MoveToLoc(#4) \:xxxx \:X \:yyyy \:Y + + \:paintQuad }}\:next} + +\def\:paintQuad{{ + \:SetVal\:a\:x\:y\:xx\:yy\:xxxx\:yyyy +\:SetVal\:b\:xx\:yy\:xxx\:yyy\:x\:y +\:SetVal\:c\:xxx\:yyy\:xx\:yy\:xxxx\:yyyy +\:SetVal\:cc\:xxxx\:yyyy\:xxx\:yyy\:x\:y +\def\:A{\:a} \def\:B{\:b} \def\:C{\:c} \def\:D{\:cc} +\:sort\:B\:A +\:sort\:C\:B \:sort\:B\:A +\:sort\:D\:C \:sort\:C\:B \:sort\:B\:A +\let\:temp\relax +\:IsTriang\:A\:B +\:IsTriang\:B\:C +\:IsTriang\:C\:D +\:temp + \:Quad\:A\:temp> \:xxxx\:xx \:yyyy\:yy \:Z\:d +\:Quad\:D\:next< + \:PrePaint(\:xx,\:yy,\:d,\:xxxx,\:yyyy,\:Z) + \:temp \:next }} +\Define\:PrePaint(6){ + \:x#1 \:y#2 \:yyy#3 \:xx#4 \:yy#5 \:yyyy#6 + \:paint }\def\:Quad#1#2#3{ + \:GetVal#1\:x\:y0 + \:GetVal#1\:xx\:yy1 + \:GetVal#1\:xxx\:yyy2 + \ifdim \:xx#3\:xxx + \:ddd\:xx \:xx\:xxx \:xxx\:ddd + \:ddd\:yy \:yy\:yyy \:yyy\:ddd + \fi + \def#2{} + \:diff\:dd\:xxx\:xx + \ifdim \ifdim\:AbsVal\:dd<\:mp \:yy=\:yyy \else \z@>\z@ \fi + + \:d\:yy + \else + \ifdim \:AbsVal\:dd>\:mp + \:diff\:dd\:xxx\:x \:diff\:ddd\:yyy\:y + \:divide\:ddd\:dd \:diff\:dd\:xx\:xxx + \:ddd\:Cons\:ddd\:dd \advance\:ddd \:yyy + \:d\:ddd + \else \:d\:yyy \fi + \edef#2{ \noexpand\:PrePaint + (\the\:x ,\the\:y ,\the\:y, + \the\:xx,\the\:yy,\the\:d) } + \fi}\def\:SetVal#1#2#3#4#5#6#7{ + \edef#1{(\the#2,\the#3,\the#4,\the#5,\the#6,\the#7)}} + +\def\:sort#1#2{ + \ifdim \:IIIexpandafter\:field#1 < + \:IIIexpandafter\:field#2 + \let\:temp#1 \let#1#2 \let#2\:temp + \fi } + +\Define\:field(6){#1} + +\def\:GetVal#1#2#3{ + \:IIIexpandafter\::GetVal #1#2#3} + +\def\::GetVal(#1,#2,#3,#4,#5,#6)#7#8#9{ + \ifcase #9 #7#1 #8#2\or #7#3 #8#4\or #7#5 #8#6 \fi} +\def\:IsTriang#1#2{ + \ifdim \:IIIexpandafter\:field#1 = + \:IIIexpandafter\:field#2 + \ifdim \:IIIexpandafter\:fieldB#1 = + \:IIIexpandafter\:fieldB#2 + \def\:temp{ \:FixTria } + \fi \fi } + + +\def\:FixTria{ + \edef\:temp{\:IIIexpandafter\:FrsII\:B} + \ifdim \:IIIexpandafter\:field\:A = + \:IIIexpandafter\:field\:B + \ifdim \:IIIexpandafter\:fieldB\:A = + \:IIIexpandafter\:fieldB\:B + \edef\:temp{\:IIIexpandafter\:FrsII\:C} + \fi\fi + \edef\:A{\:IIIexpandafter\:FrsII\:A} + \edef\:D{\:IIIexpandafter\:FrsII\:D} + \edef\:temp{ + \def\noexpand\:a{(\:A,\:temp,\:D)} + \def\noexpand\:b{(\:temp,\:A,\:D)} + \def\noexpand\:c{\noexpand\:b} + \def\noexpand\:cc{(\:D,\:A,\:temp)}} + \:temp + \def\:A{\:a} \def\:B{\:b} \def\:C{\:c} \def\:D{\:cc} } + +\Define\:fieldB(6){#2} +\Define\:FrsII(6){#1,#2} +\def\:IIIexpandafter{\expandafter\expandafter\expandafter} + +\Define\DrawRect(2){ \Line( #1,0) \Line(0, #2) + \Line(-#1,0) \Line(0,-#2)} + +\Define\DrawRectAt(4){{ + \MoveTo(#1,#2) \LineTo(#3,#2) \LineTo(#3,#4) + \LineTo(#1,#4) \LineTo(#1,#2)}} +\def\du#1{ \ifx#1\:Xunits \else\ifx#1\:Yunits + \else\ifx#1\:Zunits \else #1 + \fi \fi \fi} +\let\:svdu=\du +\Define\XSaveUnits{ + \expandafter\edef\csname XRecallUnits\the\:level\endcsname{ + \:StoreUnits} + \advance\:level \@ne} + +\Define\XRecallUnits{ + \advance\:level \m@ne + \csname XRecallUnits\the\:level \endcsname} + +\Define\SaveUnits{ + \edef\RecallUnits{ \:StoreUnits } } + +\Define\:StoreUnits{ \:Xunits \the\:Xunits + \:Yunits \the\:Yunits \:Zunits \the\:Zunits + \:Xunitsx\the\:Xunitsx \:Xunitsy\the\:Xunitsy +\:Yunitsx\the\:Yunitsx \:Yunitsy\the\:Yunitsy } +\Define\:SearchDir{ + \ifdim \:x<\z@ \:x-\:x \:y-\:y + \edef\:tempA{\advance\:ddd \ifdim \:y<\z@ - \fi\:CVXXX} +\else \def\:tempA{} \fi +\ifdim \:y<\z@ + \edef\:tempA{\:ddd-\:ddd \advance\:ddd \:CCCVX \:tempA} + \:y-\:y +\fi +\ifdim \:y>\:x + \:ddd\:y \:y\:x \:x\:ddd + \edef\:tempA{\advance\:ddd -\:XC \:ddd-\:ddd \:tempA} +\fi + \:divide\:y\:x \:d57.29578\:y + \:ddd\:d \:sqr\:y \:K \@ne + \Do(1,30){\advance\:K \tw@ + \:d-\:Cons\:y\:d \:dd\:d \divide\:dd \:K + \advance\:ddd \:dd } + \advance\:ddd -0.49182\:dd + \:tempA }\Define\Curve(4){\def\:next{{ \XSaveUnits \Units(1pt,1pt) + \MoveToLoc(#1) \:DI \:X \:DK \:Y + \MoveToLoc(#2) \:ddd \:X \:Ez \:Y + \MoveToLoc(#3) \:dd\:X \:Ey\:Y + \MoveToLoc(#4) \:DJ\:X \:yyyy\:Y \:Curve }}\:next} +\Define\:FastCurve{ \:AbsDif\:d\:DI\:ddd \:AbsDif\:dddd\:DK\:Ez + \advance\:d \:dddd + \ifnum \:d<\:ragged + \:AbsDif\:d\:DJ\:dd \:AbsDif\:dddd\:yyyy\:Ey + \advance\:d \:dddd \fi} +\let\:StopCurve\:FastCurve +\Define\:SlowCurve{ + \:AbsDif\:d\:DI\:DJ \:AbsDif\:dddd\:DK\:yyyy + \advance\:d \:dddd } +\Define\:Curve{ \:StopCurve + \ifnum \:d<\:ragged \:X\:DI \:Y\:DK + \:CrvLnTo(\:Cons\:DJ,\:Cons\:yyyy) + \def\:SubCurves{} \fi + \:SubCurves} + +\def\:CrvLnTo{\:LnTo}\Define\:SubCurves{ + \:average\:yy\:DI\:ddd \:average\:Ex\:DK\:Ez + \:average\:ddd\:ddd\:dd \:average\:Ez\:Ez\:Ey + \:average\:dd\:dd\:DJ \:average\:Ey\:Ey\:yyyy + \:average\:Zunits\:yy\:ddd \:average\:Vdirection\:Ex\:Ez + \:average\:ddd\:ddd\:dd \:average\:Ez\:Ez\:Ey + \:average\:DL\:Zunits\:ddd \:average\:xxxx\:Vdirection\:Ez + { \:ddd \:yy \:Ez \:Ex \:dd\:Zunits + \:Ey\:Vdirection \:DJ\:DL \:yyyy\:xxxx \:Curve } + \:DI \:DL \:DK \:xxxx \:Curve } +\def\MoveToCurve[#1]{ + \Define\:BiSect(3){\MoveToLoc(##1) + \CSeg[#1]\Move(##1,##2) + \MarkLoc(##3) }\:MvToCrv} + +\Define\:MvToCrv(4){ \:BiSect(#1,#2,:a) \:BiSect(#2,#3,:b) + \:BiSect(#3,#4,:c) \:BiSect(:a,:b,:A) \:BiSect(:b,:c,:B) + \:BiSect(:A,:B,:Q)} +\Define\:OvalDir(3){ \:CosSin{#3\p@} + \:Zunits\p@ \:d#2\:Zunits \:x\:Cons\:d\:x + \:Zunits\p@ \:d#1\:Zunits \:y\:Cons\:d\:y + \:SearchDir }\Define\DrawOval (2){ \DrawOvalArc(#1,#2)(0,\:cccvx) } +\Define\PaintOval (2){ \PaintOvalArc(#1,#2)(0,\:cccvx) } +\Define\DrawCircle (1){ \DrawOval(#1,#1) } +\Define\PaintCircle(1){ \PaintOval(#1,#1) } +\def\DrawOvalArc(#1,#2)(#3,#4){{ + \:xxxx#4\p@ \advance\:xxxx -#3\p@ + \ifdim \:xxxx=\z@ \else + \let\:SinOne\:SinB \:OvalDir(#1,#2,#3) \:DJ\:ddd +\:OvalDir(#1,#2,#4) \:diff\:DI\:ddd\:DJ +\ifdim\:DI<\z@ \advance\:DI \:CCCVX \fi +\ifdim \:xxxx<\:CCCVX \else \:DI\:CCCVX \fi +\:InitOval(#1,#2) \:CosSin\:DJ + \:xxxx\:x \:yyyy\:y \:xx\:X \:yy\:Y + \advance\:X \:Xx\:x \advance\:X \:Yx\:y + \advance\:Y \:Xy\:x \advance\:Y \:Yy\:y + \let\:Xunits\empty \let\:Yunits\empty + \Do(1,\:InCons\:DI){ + \:dd\:X \:ddd\:Y \:X\:xx \:Y\:yy + \:AdvOv\:xxx\:yyy\:xxxx\:yyyy + \:X\:dd \:Y\:ddd + \advance\:xxx -\:X \advance\:yyy -\:Y + \:d\:AbsVal\:xxx + \advance\:d \:AbsVal\:yyy + \ifdim \:d>\:ragged + \:OvalLn(\:xxx,\:yyy) \fi } + \:OvalDir(#1,#2,#4) \:CosSin\:ddd + \advance\:xx \:Xx\:x \advance\:xx \:Yx\:y + \advance\:yy \:Xy\:x \advance\:yy \:Yy\:y + \advance\:xx -\:X \advance\:yy -\:Y + \:OvalLn(\:xx,\:yy) \fi }} + +\def\:OvalLn{\:Ln}\def\DoOvalArc(#1)(#2){ \:xx\:X \:yy\:Y + \def\:CMv(##1){ \:Mv(\:xxx,\:yyy) + \:x\:xxx \:y\:yyy} + \:DoCurve{ \:X\:xx \:Y\:yy + \def\:DoRot{ \let\:Xunits\:XunitsReg + \let\:Yunits\:YunitsReg + \DSeg\RotateTo(1^,2^) } + \let\::OvalLn\:CrvLnTo +\Define\:OvalLn(2){ \:dd\:AbsVal####1 + \advance\:dd \:AbsVal####2 \:divide\:dd\:ragged + \:J\:InCons\:dd \advance\:J \@ne + \divide####1 \:J \divide####2 \:J + \Do(1,\:J){\::OvalLn(####1,####2)}} + \DrawOvalArc(#1)(#2)}} +\def\NextTable{\begingroup \:DraCatCodes \:NextTable} + +\def\:NextTable#1{\endgroup + \def\:DoNextPoly{#1\NextTable{}}} +\NextTable{}\def\:AdvOv#1#2#3#4{ + \:d\:CosOne#3 \advance\:d -\:SinOne#4 + #4\:CosOne#4 \advance#4 \:SinOne#3 #3\:d + \divide#3 \:eight \divide#4 \:eight + #1\:X #2\:Y + \:d\:Xx#3 \advance\:d \:Yx#4 \advance#1 \:d + \:d\:Xy#3 \advance\:d \:Yy#4 \advance#2 \:d } + +\def\:CosOne{7.99878} \def\:SinB{0.13962} +\def\PaintOvalArc(#1,#2)(#3,#4){{ \ifdim #3\p@=#4\p@ + \let\:next\relax \else + \:d\:AbsVal{#1\:Xunits} \advance\:d \:AbsVal{#2\:Yunits} + \ifdim \:d<3\:ragged \divide \:d \tw@ \PenSize(\:d) +\:Mv(-0.5\:d\du,0) \:Ln(\:d\du,0) + \else \:InitOval(#1,#2) + \MarkLoc(o$) \RotateTo(#3) \MoveFToOval(#1,#2) + \:Ex\:X \:Ey\:Y \edef\:FirstOvDir{\:Cons\:ddd\p@} + \MoveToLoc(o$) \RotateTo(#4) \MoveFToOval(#1,#2) + \:Ez \:X \:Vdirection \:Y \edef\:LastOvDir{\:Cons\:ddd\p@} + \MoveToLoc(o$) + \if:rotated + \:Zunits\p@ \:Zunits#1\:Zunits + \:xx\:Cons\:Zunits\:Xunitsx + \:Zunits\p@ \:Zunits#2\:Zunits + \:yy\:Cons\:Zunits\:Yunitsx + \:x\:xx \:y\:yy \:ddd\z@ \:length + \:ddd\:d \:divide\:xx\:ddd \:divide\:yy\:ddd +\else \:xx\p@ \:yy\z@ \fi + \:AbsDif\:d{#3\p@}{#4\p@} + \ifdim \:d>359\p@ \:Ez-\:Xx\:xx \advance\:Ez -\:Yx\:yy +\:Vdirection-\:Xy\:xx \advance\:Vdirection -\:Yy\:yy +\advance\:Ez \:X \advance\:Vdirection \:Y +\:setpaint\:PaintOvOv<> + \else + \:x\:xx \:y\:yy \:SearchDir +\:xxx\:FirstOvDir \advance\:xxx -\:ddd +\ifdim \:xxx<\z@ \advance\:xxx \:CCCVX \fi +\:yyy\:LastOvDir \advance\:yyy -\:ddd +\ifdim \:yyy<\z@ \advance\:yyy \:CCCVX \fi +\:J\z@ +\ifdim \:xxx<\:yyy \ifdim \:yyy<\:CVXXX + \:Pntovln\:FirstOvDir\:FirstOvDir\:LastOvDir +\else \ifdim \:xxx>\:CVXXX + \:Pntovln\:FirstOvDir\:FirstOvDir\:LastOvDir +\else \:yyy-\:yyy \advance\:yyy \:CCCVX + \ifdim \:xxx<\:yyy + \:setpaint\:PntLeftOvOv>< \:PntMovln\:FirstOvDir\:xx + \else \:FxLx \:setpaint\:PntLeftOvOv>< \:Pntmovln\:LastOvDir +\fi \fi \fi +\else \ifdim \:xxx<\:CVXXX + { \:setpaint\:PaintOvOv<> } \:FxLx \:setpaint\:PntLeftOvOv>< +\:Usrch \:PaintMidOvLn\:LastOvDir\:FirstOvDir +\else \ifdim \:yyy>\:CVXXX + { \:FxLx \:setpaint\:PaintOvOv<> } \:setpaint\:PntLeftOvOv>< + \:Dsrch \:PaintMidOvLn\:LastOvDir\:FirstOvDir +\else \:xxx-\:xxx \advance\:xxx \:CCCVX + \ifdim \:yyy<\:xxx + \:setpaint\:PaintOvOv<> \:PntMovln\:FirstOvDir\:xx + \else + \:FxLx \:setpaint\:PaintOvOv<> \:Pntmovln\:LastOvDir +\fi \fi \fi \fi + \fi \fi \fi}}\def\:setpaint#1#2#3{{\aftergroup#1 +\:d\:Xx\:xx \advance\:d \:Yx\:yy +\ifdim \:d<\z@ \aftergroup#3 +\else \aftergroup#2 \fi}} +\def\:FxLx{\:d\:Ex \:Ex\:Ez \:Ez\:d} + +\def\:Pntovln#1{ + \let\:SinOne\:SinB \:CosSin#1 + \:xxxx\:Ex \:yyyy\:Ey \:Z\z@ + \:PaintOvLn} + +\def\:PntMovln{ + \:Dsrch \:FxLx \:xx\:ddd \:PaintOvLn} + +\def\:Pntmovln{ + \:Usrch \:FxLx \:xx\:ddd \:PaintOvLn\:xx} +\def\:PaintMidOvLn#1#2{ + \:FxLx \:xx\:ddd \:PaintOvLn#1#2 + \:xxx\:Ez \:yyy\:Vdirection + \:ddd\:Xy\:x \advance\:ddd \:Yy\:y \advance\:ddd \:Y + \:PaintSlice} + +\def\:PntLeftOvOv{ + \:xx-\:xx \:yy-\:yy \:PaintOvOv} + +\def\:Dsrch{ \def\:SinOne{-\:SinB} + \:xx\:x \:yy\:y \:SearchDir + \:x\:xx \:y\:yy + \:d\:Ey \:Ey\:Vdirection \:Vdirection\:d } + +\def\:Usrch{ + \let\:SinOne\:SinB + \:x\:xx \:y\:yy \:SearchDir + \:x\:xx \:y\:yy}\def\:PaintOvLn#1#2{ + \:diff\:dd\:Ey\:Vdirection \:diff\:ddd\:Ex\:Ez + \ifdim \:AbsVal\:ddd>\:mp + \:divide\:dd\:ddd \:d#2 + \advance\:d -#1 + \ifnum \:d<\z@ \advance\:d \:CCCVX \fi + \:DoB\:InCons\:d \let\:next\:PntDo \:next + \fi} + +\def\:PntDo{ + \ifnum\:DoB=\z@ \let\:next\relax + \else + \::AdvOv\:x\:y + \ifdim \:d>\:ragged + \:ddd\:xxx \advance\:ddd -\:Ez + \:ddd\:Cons\:dd\:ddd + \advance\:ddd \:Vdirection \:PaintSlice + \fi + \advance\:DoB \m@ne + \fi \:next}\Define\:PaintSlice{ \:AbsDif\:dddd\:yyy\:ddd + \advance\:yyy \:ddd \divide\:yyy \tw@ + { \advance\:dddd \:Z \divide\:dddd \tw@ + \:X\:xxxx \:Y\:yyy + \:xx\:xxx \advance\:xxx -\:xxxx + \:d\z@ + \:yy\:Y \:dd\:dddd \:ddd\:dddd + \::paint } + \:xxxx\:xxx \:yyyy\:yyy \:Z\:dddd \:J\z@} +\def\::AdvOv#1#2{ \:AdvOv\:xxx\:yyy#1#2 + \:AbsDif\:d\:xxxx\:xxx \advance\:J \@ne + \ifnum \:J=\sixt@@n \multiply\:d \@cclvi + \fi }\def\:PaintOvOv#1{ \def\:hdir{#1} + \:xxx\:Xx\:xx \advance\:xxx \:Yx\:yy + \:yyy\:Xy\:xx \advance\:yyy \:Yy\:yy + \advance\:xxx \:X \advance\:yyy \:Y + \:Z\z@ \:xxxx\:xxx \:yyyy\:yyy + \:x\:xx \:y\:yy \:DoB\z@ \:J\z@ + \let\:next\:scanOvOv \:next } +\Define\:scanOvOv{ \advance\:DoB \@ne + \advance\:J \@ne + \:AbsDif\:d\:xxx\:Ez + \ifdim \ifdim \:xxx\:hdir\:Ez - + \else\ifdim \thr@@\:d<\:ragged - + \else\ifnum \:DoB>358 - + \fi \fi \fi \p@<\z@ + \:ddd\:yyyy \advance\:ddd -0.5\:dddd + \:yyy\:yyyy \advance\:yyy 0.5\:dddd + \:xxx\:Ez \:PaintSlice + \let\:next\relax + \else + \:d\:xx \advance\:d -\:x + \:xxx\:yy \advance\:xxx -\:y + \ifdim -\:Xx\:d\:hdir\:Yx\:xxx + \let\:SinOne\:SinB + \::AdvOv\:xx\:yy + \ifdim \ifdim \:d >\:ragged - + \else \ifnum \:J>\sixt@@n - + \fi\fi \p@<\z@ + \:J\z@ \def\:SinOne{-\:SinB} + \:AdvOv\:dd\:ddd\:x\:y \:PaintSlice \fi + \else + \def\:SinOne{-\:SinB} + \::AdvOv\:x\:y + \ifdim \ifdim \:d >\:ragged - + \else \ifnum \:J>\sixt@@n - + \fi\fi \p@<\z@ + \:J\z@ \let\:SinOne\:SinB + \:AdvOv\:dd\:ddd\:xx\:yy \:PaintSlice \fi + \fi \fi + \:next}\Define\SetBrush{\:Opt[]\:SetBrush{}} + +\def\:SetBrush[#1](#2,#3)#4{ \def\:temp{#4} + \ifx \:temp\empty + \def\:brush{ \let\:Xunits\empty \let\:Yunits\empty + \:thickness\:dddd \:Ln } + \else \def\:BruShape{#4} + \:dd#2\:Xunits \:ddd#3\:Yunits + \edef\:Grd{ \:dd\the\:dd \:ddd\the\:ddd } + \MarkLoc($$) \def\:temp{#1} +\ifx \:temp\empty \:X\z@ \:Y\z@ +\else \MoveTo(#1) \fi +\edef\:BrOrg{ \:x\the\:X \:y\the\:Y } +\MoveToLoc($$) + \def\:brush(##1,##2){ \::brush } \fi } + +\SetBrush(,){}\def\::brush{{ \SetBrush(,){} +\let\:Xunits\:XunitsReg \let\:Yunits\:YunitsReg +\advance\:Y -0.5\:dddd \:yy\:Y +\advance\:yy \:dddd +\:BrOrg \:Grd \advance\:xx \:X +\ifdim \:xx<\:X \:d\:X \:X\:xx \:xx\:d \fi + \:GridPt\:X\:x\:dd + \:GridPt\:Y\:y\:ddd \:x\:X + \:DoBrush }}\Define\:DoBrush{ + \ifdim \:Y>\:yy \let\:DoBrush\relax + \else \ifdim \:X>\:xx \advance\:Y \:ddd \:X\:x + \else { \:BruShape } \advance\:X \:dd + \fi \fi \:DoBrush }\def\:GridPt#1#2#3{ \:xxxx#1 + \advance#1 -#2 \:divide#1#3 + #1\:InCons#1#3 \advance#1 #2 + \ifdim #1=\:xxxx + \else \ifdim \:xxxx>#2 \advance#1 #3 \fi \fi } +\newcount\:IntId \edef\:IntCount{0\space} +\newcount\:DecId \edef\:DecCount{0\space} + +\Define\:NewCount{\alloc@ 0\count \countdef \insc@unt } +\Define\:NewDimen{\alloc@ 1\dimen \dimendef \insc@unt } + +\def\:NewVar#1#2#3#4#5{ \:multid#1 + \def\:temp{ \csname \string#4\the#4\endcsname\z@ + \edef#1{\noexpand#3 \csname \string#4\the#4\endcsname}} + \def\:next{ \xdef#5{\the#4\space} #2#1 \def\:next{\global\let} + \expandafter\:next \csname \string#4\the#4\endcsname#1 \:temp } + \advance#4 \@ne + \ifnum #4 > #5 \expandafter\:next \else \expandafter\:temp \fi } + +\def\IntVar#1{\:NewVar#1\:NewCount\:IntOp\:IntId\:IntCount} +\def\DecVar#1{\:NewVar#1\:NewDimen\:DecOp\:DecId\:DecCount} + + +\DecVar\Q \DecVar\R \DecVar\T +\IntVar\I \IntVar\J \IntVar\K +\def\WriteVal#1{\immediate\write\sixt@@n{...\string#1=#1;}} + +\newdimen\:X \newdimen\:Y +\newdimen\:x \newdimen\:y \newdimen\:d +\newdimen\:xx \newdimen\:yy \newdimen\:dd +\newdimen\:xxx \newdimen\:yyy \newdimen\:ddd +\newdimen\:xxxx\newdimen\:yyyy\newdimen\:dddd +\newcount\:J \newcount\:K +\newdimen\:DI \newdimen\:DJ +\newdimen\:DK \newdimen\:DL \newtoks\:t +\def\:IntFromPt#1#2{ + \:d#2\relax + \advance\:d \ifdim\:d<-0.5\p@-\fi 0.5\p@ + #1\:d \divide#1 65536\relax} +\def\:temp{\catcode`\p12 \catcode`\t12} +\def\:Cons{\catcode`\p11 \catcode`\t11} +\:temp \def\:Frac#1pt{#1} + \def\:rnd#1.#2pt{#1} \:Cons + +\def\:Cons#1{\expandafter\:Frac\the#1} +\def\:sqr#1{#1\expandafter\:Frac\the#1#1} +\def\:InCons#1{\expandafter\:rnd\the#1}\def\:Val#1{#1;} +\let\Val\:Val\def\:IntOp#1#2{\csname :Op#2\endcsname#1} +\let\:SvIntOp\:IntOp +\def\:PreIntOp{\let\:IntOp\empty + \let\Val\empty} +\def\:PostIntOp{\let\:IntOp\:SvIntOp + \let\Val\:Val} + +\expandafter\def\csname :Op;\endcsname#1{ \the#1} +\expandafter\def\csname :Op=\endcsname#1#2;{ + \:PreIntOp#1#2\:PostIntOp} +\expandafter\def\csname :Op+\endcsname#1#2;{ + \:PreIntOp\advance #1 #2\:PostIntOp} +\expandafter\def\csname :Op-\endcsname#1#2;{ + \:PreIntOp\advance #1 -#2\:PostIntOp} +\expandafter\def\csname :Op/\endcsname#1#2;{ + \:PreIntOp\divide#1 #2\:PostIntOp} +\expandafter\def\csname :Op*\endcsname#1#2;{ + \:PreIntOp\multiply#1 #2\:PostIntOp} +\def\:DecOp#1#2{ \csname :xOp#2\endcsname#1} +\let\:SvDecOp\:DecOp +\def\:PreDecOp{\let\:IntOp\the \def\:DecOp{\:Cons} + \let\Val\empty \let\:du\empty} +\def\:PostDecOp{\let\:IntOp\:SvIntOp \let\Val\:Val + \let\:DecOp\:SvDecOp \let\:du\::du } + +\def\::du#1{\p@ + \ifx#1\p@ \let\:temp\relax + \else \def\:temp{\du{#1}} + \fi\:temp} \:PostDecOp + +\expandafter\def\csname :xOp;\endcsname#1{ \:Cons#1} +\expandafter\def\csname :Op[\endcsname#1#2];{ + \:PreDecOp \:dd#2\p@ \:IntFromPt#1\:dd + \:PostDecOp } +\expandafter\def\csname :xOp=\endcsname#1#2;{ + \:PreDecOp#1#2\p@\:PostDecOp } +\expandafter\def\csname :xOp(\endcsname#1#2){ + \:PreDecOp#1#2\p@\:PostDecOp } +\expandafter\def\csname :xOp+\endcsname#1#2;{ + \:PreDecOp\advance #1 #2\p@\:PostDecOp } +\expandafter\def\csname :xOp-\endcsname#1#2;{ + \:PreDecOp\advance #1 -#2\p@\:PostDecOp } +\expandafter\def\csname :xOp*\endcsname#1#2;{ + \:PreDecOp#1 #2#1\:PostDecOp } +\expandafter\def\csname :xOp/\endcsname#1#2;{ + \:PreDecOp \:divide#1{#2\p@} \:PostDecOp } +\let\IF\ifnum \let\THEN\relax +\let\ELSE\else \let\FI\fi + +\def\EqText(#1,#2){ + \z@=\z@ \fi \def\:temp{#1} + \def\:next{#2} \ifx \:temp\:next } + +\def\:IfInt#1(#2,#3){ \z@=\z@ \fi + \:IntOp\:K=#2; \:IntOp\:J=#3; \ifnum \:K#1\:J } + +\def\:IfDim#1(#2,#3){ \z@=\z@ \fi + \:DecOp\:d=#2; \:DecOp\:dd=#3; \ifdim \:d#1\:dd } + +\def\EqInt{ \:IfInt= } \def\LtInt{ \:IfInt< } +\def\GtInt{ \:IfInt> } + +\def\EqDec{ \:IfDim= } \def\LtDec{ \:IfDim< } +\def\GtDec{ \:IfDim> } \def\Do(#1,#2)#3{ + \expandafter\let + \csname :Back\the\:level\endcsname\:Do +\expandafter\edef\csname :DoVars\the\:level\endcsname{ + \DoReg\the\DoReg \:DoB\the\:DoB} +\advance\:level \@ne + \DoReg#1 \:DoB#2 \relax + \ifnum \DoReg<\:DoB + \def\:Do{\ifnum \DoReg>\:DoB + \let\:Do\relax + \else #3\advance\DoReg \@ne \fi + \:Do} + \else + \def\:Do{\ifnum \DoReg<\:DoB + \let\:Do\relax + \else #3\advance\DoReg \m@ne \fi + \:Do} + \fi \def\:nextdo{ \:Do \advance\:level \m@ne +\csname :DoVars\the\:level\endcsname +\def\:temp{\let\:Do} +\expandafter\:temp\csname + :Back\the\:level\endcsname } \:nextdo} + +\let\:Do\relax + +\newcount\DoReg \let\:DoReg\DoReg \newcount\:DoB + \newcount\:level\def\::divide#1{ \:DI\:DK \:dddd\:DL + \advance\:DI -\:Cons\:dddd#1 + \:IntFromPt\:J\:dddd \advance\:dddd -\:J\p@ + \multiply\:J \@M \:IntFromPt\:K{\@M\:dddd} + \advance\:J \:K \:dddd\@M\p@ + \divide\:dddd \:J \advance#1 \:Cons\:DI\:dddd } + +\def\:divide#1#2{ \:DK#1 \:DL#2 #1\z@ + \::divide#1 \::divide#1 \::divide#1 + \::divide#1 \::divide#1 } +\def\:Sqrt#1{ \ifdim #1<\:mmp #1\z@ \else + \:dd#1 \divide\:dd \tw@ + \def\::Sqrt{ \:ddd#1 + \:divide\:ddd\:dd \:AbsDif\:d\:dd\:ddd + \advance\:dd \:ddd \divide\:dd \tw@ + \ifdim \:d < \:mmmp + \let\::Sqrt\relax \fi + \::Sqrt} + \::Sqrt #1\:dd \fi }\Define\:length{ + \:dd \:AbsVal \:ddd + \:abs\:x \:abs\:y + \ifdim \:dd<\:x \:dd\:x \fi + \ifdim \:dd<\:y \:dd\:y \fi + \ifdim \:dd>\:mp + \:divide\:x\:dd \:sqr\:x + \:divide\:y\:dd \:sqr\:y + \:divide\:ddd\:dd \:sqr\:ddd + \advance\:x \:y \advance\:x \:ddd + \:y\:dd \:Sqrt\:x \:d\:Cons\:x\:y + \else \:d\:dd \fi}\Define\:distance(2){\MarkLoc(@^) + \MoveToLoc(#1) \:x \:X \:y \:Y \:ddd\:Z + \MoveToLoc(#2) + \advance\:x -\:X \advance\:y -\:Y + \advance\:ddd -\if:IIID \:Z \else \:ddd \fi + \:length \MoveToLoc(@^)}\def\:NormalizeDeg#1{ + \:DL#1 \:K\:InCons\:DL + \divide\:K \:cccvx \multiply\:K \:cccvx + \advance #1 -\:K\p@ + \ifdim #1<\z@ \advance #1 \:CCCVX \fi + \ifdim #1=\z@ + \ifdim\:DL=\z@ \else + \advance #1 \:CCCVX \fi \fi }\def\:CosSin#1{ \:DK#1 + \:NormalizeDeg\:DK \def\:tempA{} +\ifdim \:CVXXX<\:DK + \def\:tempA{\:y-\:y} + \advance\:DK -\:CCCVX \:DK-\:DK \fi +\ifdim \:XC<\:DK + \edef\:tempA{\:x-\:x \:tempA} + \advance\:DK -\:CVXXX \:DK-\:DK \fi +\ifdim 45\p@<\:DK + \edef\:tempA{\:d\:x \:x\:y \:y\:d \:tempA} + \advance\:DK -\:XC \:DK-\:DK \fi + \:x\p@ \:y0.01745\:DK \:d\:y \:K\@ne + \edef\:next{\advance\:K \@ne + \:sqr\:d \divide\:d \:K \advance} + \:next \:x -\:d \:next \:y -\:d + \:next \:x \:d \:next \:y \:d + \:next \:x -\:d \:next \:y -\:d + \:next \:x \:d \:next \:y \:d + \:tempA } \Define\:rInitOval(2){ + \XSaveUnits \let\du=\:rdu + \:Zunits\p@ \:dd#1\:Zunits + \:d\:Cons\:dd\:Xunitsx \edef\:Xx{\:Cons\:d} + \:d\:Cons\:dd\:Xunitsy \edef\:Xy{\:Cons\:d} + \:dd#2\:Zunits + \:d\:Cons\:dd\:Yunitsx \edef\:Yx{\:Cons\:d} + \:d\:Cons\:dd\:Yunitsy \edef\:Yy{\:Cons\:d} + \XRecallUnits \let\du=\:svdu +} +\Define\:xyInitOval(2){ + \:d#1\:Xunits \edef\:Xx{\:Cons\:d} \def\:Xy{0} + \:d#2\:Yunits \edef\:Yy{\:Cons\:d} \def\:Yx{0} } + \def\:FigSize#1#2#3{ + \:x\:LBorder \:y\:RBorder \:d\:TeXLoc + {\Object\:temp{#3} + \setbox\:box\hbox{ \:temp + \multiply\:x by \tw@ \multiply\:y by \tw@ + \xdef\:FSize{ \noexpand#1=\:Cons\:x; + \noexpand#2=\:Cons\:y;}}} + \global\:LBorder\:x \global\:RBorder\:y + \global\:TeXLoc \:d + \:FSize} +\expandafter\let \csname 0:Ln \endcsname\:Ln +\expandafter\def\csname 1:Ln \endcsname{ + \advance\:x -\:X \advance\:y -\:Y + \csname 0:Ln \endcsname(\:x,\:y) } + +\newcount\:ClipLevel \:ClipLevel\@ne + +\Define\Clip{\futurelet\:next\:Clip} + +\Define\:Clip{ + \ifx \:next[ \expandafter\:DefClipOut + \else \expandafter\:DefClip \fi } + +\def\:DefClipOut[#1]{ \:DefClip(#1) } +\Define\:DefClip(1){ \def\:temp{#1} + \ifx \:temp\empty + \:ClipLevel\@ne \def\:next{\let\:Ln} + \expandafter\:next\csname 0:Ln \endcsname + \else \def\:temp{\::DefClip(#1)} \fi \:temp } +\Define\::DefClip(1){ \MarkLoc(^) + \:x\:X \:y \:Y \Move(#1) + \ifdim\:x>\:X \:dd\:X \:X\:x \:x\:dd \fi + \ifdim\:y>\:Y \:dd\:Y \:Y\:y \:y\:dd \fi + \advance\:ClipLevel \@ne + \expandafter\edef\csname \the + \:ClipLevel :Ln \endcsname{ + \:xxx \the\:x \:yyy \the\:y + \:xxxx\the\:X \:yyyy\the\:Y + \ifx \:next[ \noexpand\:ClipOut + \else \noexpand\:ClipIn \fi } + \let\:Ln\:ClipLn \MoveToLoc(^) }\def\:ClipLn(#1,#2){ + \:x#1\:Xunits \:y#2\:Yunits + { \let\:Xunits\empty \let\:Yunits\empty + \advance\:x \:X \advance\:y \:Y + \ifdim \:x<\:X \:dd\:X \:X\:x \:x\:dd + \:dd\:Y \:Y\:y \:y\:dd \fi + \:diff\:dd\:X\:x \:diff\:ddd\:Y\:y +\:Z \:AbsVal \:dd +\advance\:Z \:AbsVal\:ddd +\ifdim \:Z>\sixt@@n\p@ + \divide\:dd 128 + \divide\:ddd 128 \fi +\:Z\:Cons\:y\:dd +\advance\:Z -\:Cons\:x\:ddd +\ifdim \:dd<\z@ + \:dd-\:dd \:ddd-\:ddd \:Z-\:Z +\fi + \csname \the \:ClipLevel :Ln \endcsname } + \advance\:X \:x \advance\:Y \:y }\Define\:ClipIn{ + \def\:next{\let\:next} + \expandafter\:next\csname \the + \:ClipLevel :Ln \endcsname + \advance\:ClipLevel \m@ne + { \:ClipLeft\:xxxx \:ClipDown\:yyy \:ClipUp\:yyyy \:next } + { \:ClipRight\:xxx \:ClipDown\:yyy \:ClipUp\:yyyy \:next } + { \:ClipDown\:yyyy \:next } + \:ClipUp\:yyy \:next } + +\Define\:ClipOut{ + \:ClipLeft\:xxx \:ClipRight\:xxxx + \:ClipUp \:yyyy \:ClipDown \:yyy + \def\:next{\let\:next} + \expandafter\:next + \csname \the\:ClipLevel :Ln \endcsname + \advance\:ClipLevel \m@ne \:next }\def\:ClipLeft#1{ + \ifdim \:x<#1 \:KilledLine + \else \ifdim \:X<#1 \:X#1 + \ifdim \:dd>\:mmmp + \:Y\:Cons\:ddd\:X \advance\:Y \:Z + \:divide\:Y\:dd + \fi \fi \fi \:CondKilLn } + +\def\:ClipRight#1{ + \ifdim \:X>#1 \:KilledLine + \else \ifdim \:x>#1 \:x#1 + \ifdim \:dd>\:mmmp + \:y\:Cons\:ddd\:x \advance\:y \:Z + \:divide\:y\:dd + \fi \fi \fi \:CondKilLn } + +\Define\:CondKilLn{ + \:d\:x \advance\:d -\:X + \ifdim \:d<\z@ \:d-\:d \fi + \ifdim \:y<\:Y \advance\:d \:Y \advance\:d -\:y + \else \advance\:d \:y \advance\:d -\:Y \fi + \ifdim \:d<\:mmp \:KilledLine \fi + \ifdim \:thickness=\z@ \:KilledLine \fi} + +\Define\:KilledLine{ + \let\:ClipLeft\:gobble \let\:ClipRight\:gobble + \let\:ClipUp \:gobble \let\:ClipDown \:gobble + \let\:next\relax + \expandafter\def\csname 1:Ln \endcsname{}}\def\:ClipUp#1{ + \:AbsDif\:d\:y\:Y + \ifdim \:d<\:ragged + \advance\:y 0.5\:thickness +\advance\:Y -0.5\:thickness +\ifdim \:Y>#1 \:KilledLine +\else \ifdim \:y>#1 + \:thickness#1 \advance\:thickness -\:Y + \advance\:Y 0.5\:thickness \:y\:Y +\else + \advance\:Y 0.5\:thickness + \advance\:y -0.5\:thickness +\fi \fi +\:dd\p@ \:ddd\z@ +\def\:temp{ \:Z\:Y } \:temp + \else \let\:temp\relax + \ifdim \ifdim\:Y<\:y\:Y\else\:y\fi >#1 \:KilledLine + \else \ifdim \::ClipUp#1\:X\:Y + \else \ifdim \::ClipUp#1\:x\:y + \fi \fi \fi \fi \:CondKilLn } + +\def\::ClipUp#1#2#3{ +#3>#1 #3#1 +\ifdim \:AbsVal\:ddd>\:mmmp + #2\:Cons\:dd#3 \advance#2 -\:Z + \:divide#2\:ddd +\fi }\def\:ClipDown#1{ \:Ex2#1 + \:Flip\:y \:Flip\:Y \:ClipUp#1 + \:Flip\:y \:Flip\:Y \:temp } + +\def\:Flip#1{ #1-#1 \advance#1 \:Ex } +\Define\:SetDrawWidth{ + \hsize\:RBorder \advance\hsize -\:LBorder + \leftskip -\:LBorder \rightskip\z@} +\newdimen\:thickness \:thickness0.75\p@ + +\Define\PenSize(1){\:thickness#1\relax} +\Define\:Draw{ \ifvmode \noindent\hfil\fi + \global\:TeXLoc\z@ + \vbox\bgroup + \begingroup + \def\EndDraw{ + \endgroup \:SetDrawWidth + \egroup} + \:DraCatCodes \parindent\z@ \everypar{} +\leftskip\z@ \rightskip\z@ \boxmaxdepth\maxdimen +\linepenalty10 \let\FigSize\:FigSize +\def\Draw{\:wrn1{}} \:CommonIID \:InDraw } +\Define\:CommonIID{\def\RotateTo{\:RotateTo} +\def\Rotate{\:Rotate} +\def\MoveF{\:MvF}\def\LineToLoc{\:LnToLoc}}\newdimen\:Xunits \:Xunits\p@ +\newdimen\:Yunits \:Yunits\p@ +\Define\:InDraw{\:Opt()\::InDraw{\:Xunits,\:Yunits}} +\Define\::InDraw(2){ \:X\z@ \:Y\z@ + \:Xunits#1 \relax \:Yunits#2 \:AdjRunits + \global\:LBorder\z@ \global\:RBorder\z@ \gdef\:UBorder{0pt} + \:loadIID \leavevmode } + +\Define\:Resize(2){ + \:Xunits#1\:Xunits \relax + \:Yunits#2\:Yunits \:AdjRunits } +\Define\:Units(2){ + \:Xunits#1 \relax \:Yunits#2 \:AdjRunits } +\Define\:loadIID{ + \def\LineAt{\:DLn} + \def\LineTo{\:LnTo} + \def\MoveTo{\:MvTo} + \def\Line{\:Ln} + \def\Move{\:Mv} + \def\MoveF{\:MvF} + \:rotatedfalse\def\:InitOval{\:xyInitOval} + \def\Scale{\:Resize} + \def\Units{\:Units}}\let\SaveAll\begingroup +\let\RecallAll\endgroup +\def\DrawOn{\def\Draw{\:Draw}} \DrawOn +\def\DrawOff{\def\Draw{\begingroup \:J\@cclv + \:NoDrawSpecials \:NoDraw}} +\catcode`\/0 \catcode`\\11 +/def/:NoDraw#1\EndDraw{/endgroup} +/catcode`/\0 /catcode`//12 + +\def\:NoDrawSpecials{\catcode\:J11 + \ifnum \:J=\z@ + \let \:NoDrawSpecials\relax \fi + \advance\:J \m@ne \:NoDrawSpecials} +\let\:XunitsReg\:Xunits \let\:YunitsReg\:Yunits \Define\EntryExit(4){ + \edef\:InOut##1{ + \noexpand\ifcase ##1\space + #1\noexpand\or #2\noexpand\or + #3\noexpand\or #4\noexpand\fi}} + +\EntryExit(0,0,0,0)\Define\:DrawBox{ \:x0.5\wd\:box + \:y\ht\:box \advance\:y \dp\:box + \divide\:y \tw@ + \advance \:X -\:InOut0\:x + \advance \:Y -\:InOut1\:y + { \advance \:X -\:x + { \advance \:Y \:y +\ifdim\:Y>\:UBorder \xdef\:UBorder{\the\:Y}\fi +\ifdim\:X<\:LBorder \global\:LBorder\:X\fi +\advance\:X \wd\:box +\ifdim\:X>\:RBorder \global\:RBorder\:X\fi } + \advance \:Y -\:y \advance \:Y \dp\:box + {\:d\:X \advance\:d \wd\:box + \advance\:X -\:TeXLoc \global\:TeXLoc\:d + \vrule width\:X depth\z@ height\z@ + \raise \:Y \box\:box} } + \edef\MoveToExit(##1,##2){ + \:X\the\:X \:Y\the\:Y + \:x\the\:x \:y\the\:y + \advance\:X ##1\:x + \advance\:Y ##2\:y} + \advance \:X \:InOut2\:x + \advance \:Y \:InOut3\:y } + \Define\ThreeDim{\:Opt[]\:ThreeDim{\p@}} + +\def\:ThreeDim[#1](#2){\::ThreeDim[#1](#2,,)} + +\def\::ThreeDim[#1](#2,#3,#4,#5){ \bgroup\begingroup + \def\EndThreeDim{ \endgroup\egroup} + \:IIIDtrue \:Zunits#1 \:Z\z@ + \def\:temp{#4} + \ifx \:temp\empty \:CosSin{#3\p@} \:divide\:x\:y \:Ey\:x +\:CosSin{#2\p@} \:Ex\:Cons\:Ey\:x \:Ey\:Cons\:Ey\:y +\let\:project\:projectPar + + \else \:Ex#2\:Xunits \:Ey#3\:Yunits \:Ez#4\:Zunits +\let\:project\:projectPer + \fi + \def\LineAt{\:tDLn} +\def\LineTo{\:tLnTo} +\def\MoveTo{\:tMvTo} +\def\Line{\:tLn} +\def\Move{\:tMv} +\def\Scale{\:tResize} +\def\Units{\:tUnits}\def\RotateTo{\:tRotateTo} +\def\Rotate{\:tRotate} +\def\MoveF{\:tMvF} +\:Vdirection\z@ \def\LineToLoc{\:tLnToLoc} } \Define\:projectPer{ + \:diff\:x\:X\:Ex \:diff\:y\:Y\:Ey + \:diff\:xxxx\:Z\:Ez + \:divide\:x\:xxxx \:divide\:y\:xxxx + \:x-\:Cons\:Ez\:x \:y-\:Cons\:Ez\:y + \advance\:x \:Ex \advance\:y \:Ey} +\Define\:projectPar{ + \:x\:Cons\:Ex\:Z \advance\:x \:X + \:y\:Cons\:Ey\:Z \advance\:y \:Y} +\def\:tDLn(#1,#2,#3,{\:tMvTo(#1,#2,#3) + \:tLnTo(} +\Define\:tMvTo(3){ \:X#1\:Xunits + \:Y#2\:Yunits \:Z#3\:Zunits} +\Define\:tMv(3){ \advance\:X #1\:Xunits + \advance\:Y #2\:Yunits + \advance\:Z #3\:Zunits} +\Define\:tResize(3){ \:Xunits#1\:Xunits + \:Yunits#2\:Yunits \:Zunits#3\:Zunits + \:AdjRunits} +\Define\:tUnits(3){ \:Xunits#1 \relax + \:Yunits#2 \relax \:Zunits#3 + \:AdjRunits}\Define\:tLnTo(3){ + \:project \edef\:temp{\:x\the\:x \:y\the\:y} + \:X#1\:Xunits \:Y#2\:Yunits \:Z#3\:Zunits + \:DLN} + +\Define\:tLn(3){ + \:project \edef\:temp{\:x\the\:x \:y\the\:y} + \advance\:X #1\:Xunits + \advance\:Y #2\:Yunits + \advance\:Z #3\:Zunits \:DLN} + +\Define\:DLN{ + \TwoDim \:temp \LineTo(\:x\du,\:y\du) + \EndTwoDim }\Define\TwoDim{\bgroup\begingroup + \def\EndTwoDim{\endgroup\egroup} + \:loadIID + \if:IIID \:IIIDfalse \:project \:X\:x \:Y\:y + \:CommonIID \fi + \Units(\:Xunits,\:Yunits)} +\newif\if:rotated +\Define\RotatedAxes(2){\begingroup + \def\EndRotatedAxes{\endgroup} + \if:IIID \:IIIDfalse + \:project \:X\:x \:Y\:y + \:CommonIID \fi + \:DK#2\p@ \advance\:DK -#1\p@ +\advance\:DK -\:CVXXX \:NormalizeDeg\:DK +\ifdim \:DK<\:mmp \:wrn4{(#1,#2)} +\else + \:DK#1\p@ \:NormalizeDeg\:DK \:CosSin\:DK + \:Xunitsx\:x \:Xunitsy\:y + \:DK#2\p@ \advance\:DK -\:XC \:NormalizeDeg\:DK \:CosSin\:DK + \edef\Units(##1,##2){\noexpand\:Units(##1,##2) + \:Xunitsx \:Cons\:Xunitsx\:Xunits + \:Xunitsy \:Cons\:Xunitsy\:Xunits + \:Yunitsx-\:Cons\:y\:Yunits + \:Yunitsy \:Cons\:x\:Yunits } \fi +\def\Scale{\:rResize} \def\MoveTo{\:rMvTo} +\def\Move{\:rMv} +\def\LineTo{\:rLnTo} +\def\Line{\:rLn} +\def\LineAt{\:rDLn} +\def\MoveF{\:rMvF}\def\:InitOval{\:rInitOval} + + \MarkLoc(:org) \Units(\:Xunits,\:Yunits) \:rotatedtrue } +\newdimen\:Xunitsx \newdimen\:Xunitsy +\newdimen\:Yunitsx \newdimen\:Yunitsy +\Define\:rResize(2){ + \:Xunits #1\:Xunits \:Yunits #2\:Yunits + \:Xunitsx#1\:Xunitsx \:Xunitsy#1\:Xunitsy + \:Yunitsx#2\:Yunitsx \:Yunitsy#2\:Yunitsy } +\def\:rdu#1{% + \ifx #1\:Xunits \units:i\else + \ifx #1\:Yunits \units:i\else + \ifx #1\:Zunits \units:i\else #1\fi \fi \fi } +\def\units:i{\Units(\p@,\p@)} +\Define\:rMvTo{\MoveToLoc(:org) \:rMv} +\Define\:rMv(1){ \:rxy(#1) + \advance\:X \:x \advance\:Y \:y} +\Define\:rLnTo(1){ \MarkLoc(:a) \:rMvTo(#1) {\LineToLoc(:a)} } +\Define\:rLn(1){ \:rxy(#1) \:Ln(\:x\du,\:y\du) } +\def\:rDLn(#1,#2,{\:rMvTo(#1,#2)\:rLnTo(} +\Define\:rxy(2){ \XSaveUnits \let\du=\:rdu + \:Zunits\p@ \:Zunits#1\:Zunits + \:x\:Cons\:Zunits\:Xunitsx + \:y\:Cons\:Zunits\:Xunitsy \XRecallUnits \XSaveUnits + \:Zunits\p@ \:Zunits#2\:Zunits + \advance\:x \:Cons\:Zunits\:Yunitsx + \advance\:y \:Cons\:Zunits\:Yunitsy \XRecallUnits \let\du=\:svdu} +\Define\:rMvF(1){ \:CosSin\:direction \XSaveUnits \let\du=\:rdu + \:Zunits\p@ \:Zunits#1\:Zunits + \:x\:Cons\:Zunits\:x \:y\:Cons\:Zunits\:y + \edef\:temp{(\:Cons\:x,\:Cons\:y)} \expandafter\Move\:temp + \XRecallUnits \let\du=\:svdu} +\Define\:AdjRunits{ + \:Xunitsx\:Xunits \:Xunitsy\z@ + \:Yunitsx\z@ \:Yunitsy\:Yunits} +\Define\Text{ \setbox\:box + \vtop\bgroup \edef\DoReg{\the\DoReg} + \hyphenpenalty\@M \exhyphenpenalty\@M + \catcode`\ 10 \catcode`\^^M13 \catcode`\^^I10 + \catcode`\&4 \let~\space \csname ;catcode\endcsname % +% + \:Text} \catcode`\^^M13 % +\def\:Text(--#1--){% + \:SetLines#1\hbox{}^^M--)^^M % + \egroup % + \if:IIID \TwoDim \:DrawBox \EndTwoDim % + \else \:DrawBox \fi} % +\def\:SetLines#1^^M{ % + \def\:TextLine{#1} % + \ifx \:TextLine\:LastLine \let\:temp\relax % + \else \def\:temp{ % + \:IndirectLines#1\relax~~--)~~\:SetLines}% + \fi \:temp } \catcode`\^^M9 +\def\:IndirectLines#1~~{ \def\:TextLine{#1} + \ifx \:TextLine\:LastLine \let\:temp\relax + \else \def\:temp{\:AddLine{#1}\:IndirectLines} + \fi \:temp } + +\Define\:LastLine{--)} + +\def\:AddLine#1{ + \ifvmode \noindent \hsize\z@ \else + \hfil \penalty-500 \hbox{} \fi + \hfil#1 + \setbox\:box\hbox{#1} + \ifdim \wd\:box>\hsize \hsize\wd\:box \fi}\def\TextPar#1#2{ + \def\:TxtPar##1(##2){##1(--##2--)} + \edef\:temp{\expandafter\noexpand\csname :\string#2\endcsname} + \edef#2{\noexpand\:TextPar\expandafter\noexpand\:temp} + \expandafter\let\:temp\:undefined + \expandafter#1\:temp} + \catcode`\^^M13 +\def\:TextPar#1{\begingroup \catcode`\&4 % + \csname ;catcode\endcsname % +% + \catcode`\ 10 \catcode`\^^M13 \catcode`\^^I10 % + \:TPar{#1}} \catcode`\^^M9 % + +\def\:TPar#1(--#2--){\endgroup + #1(--#2--) } + \newdimen\:direction \newdimen\:Vdirection +\Define\:Rotate(1){ \advance \:direction #1\p@ + \:NormalizeDeg\:direction } +\Define\:RotateTo(1){ \:direction #1\p@ + \:NormalizeDeg\:direction } + +\Define\:tRotate(2){ + \advance\:Vdirection #2\p@ + \:NormalizeDeg\:Vdirection \:Rotate(#1)} +\Define\:tRotateTo(2){ + \:Vdirection #2\p@ + \:NormalizeDeg\:Vdirection \:RotateTo(#1)} +\Define\LineF(1){\MarkLoc(,)\MoveF(#1) {\LineToLoc(,)}} +\Define\:MvF(1){ \:CosSin\:direction + \:d#1\:Xunits \advance\:X \:Cons\:d\:x + \:d#1\:Yunits \advance\:Y \:Cons\:d\:y } +\Define\MoveFToOval(2){ + \:NormalizeDeg\:direction \:CosSin\:direction \:Zunits\p@ + \:d#2\:Zunits \:x\:Cons\:d\:x + \ifdim \:d=\z@ \:err5{...,\:Cons\:d} \fi + \:d#1\:Zunits \:y\:Cons\:d\:y + \ifdim \:d=\z@ \:err5{\:Cons\:d,...} \fi \:SearchDir + \XSaveUnits + \if:rotated + \:Zunits\p@ \:Zunits#1\:Zunits + \:x\:Cons\:Zunits\:Xunits + \:Zunits\p@ \:Zunits#2\:Zunits + \:y\:Cons\:Zunits\:Yunits + \else + \:x#1\:Xunits \:y#2\:Yunits \fi \relax + \Units(\:x,\:y) + \:Vdirection\:direction \:direction\:ddd + \MoveF(\@ne) \:direction\:Vdirection \XRecallUnits } +\Define\:tMvF(1){ \:CosSin\:Vdirection + \:d #1\:Zunits \advance\:Z \:Cons\:y\:d + \:xx#1\:Xunits \:yy#1\:Yunits + \:xx\:Cons\:x\:xx \:yy\:Cons\:x\:yy + \:CosSin\:direction + \:x\:Cons\:xx\:x \:y\:Cons\:yy\:y + \advance\:X \:x \advance\:Y \:y } \Define\CSeg{\:Opt[]\:CSeg1} +\def\:CSeg[#1]#2(#3,#4){ \MarkLoc($^) + \MoveToLoc(#4) \:x\:X \:y\:Y + \if:IIID \:d\:Z \fi \MoveToLoc(#3) + \advance\:x -\:X \:x#1\:x + \advance\:y -\:Y \:y#1\:y + \if:IIID \advance\:d -\:Z \:d#1\:d \fi + \:t{#2} + \edef\:temp{\the\:t( + \expandafter\:Frac\the\:x\noexpand\:du, + \expandafter\:Frac\the\:y\noexpand\:du \if:IIID , + \expandafter\:Frac\the\:d\noexpand\:du \fi)} + \MoveToLoc($^) \:temp}\Define\LSeg{\:Opt[]\:LSeg1} +\def\:LSeg[#1]#2(#3,#4){ \:distance(#3,#4) + \:d#1\:d \:t{#2} + \edef\:temp{\the\:t(\expandafter\:Frac\the\:d\noexpand\:du)} + \:temp}\Define\DSeg{\:Opt[]\:DSeg1} + +\def\:DSeg[#1]#2(#3,#4){ \MarkLoc(^) + \MoveToLoc(#4) \:xxx\:X \:yyy\:Y \:xxxx\:Z + \MoveToLoc(#3) + \advance\:xxx -\:X \advance\:yyy -\:Y + \ifdim \:AbsVal\:xxx<\:mmmp + \ifdim \:AbsVal\:yyy<\:mmmp \:wrn5{#3,#4} + \fi\fi + \if:IIID + \advance \:xxxx -\:Z + \:divide\:xxx\:Xunitsx + \:divide\:yyy\:Yunitsy + \:divide\:xxxx\:Zunits + \:x\:xxx \:y\:yyy \:ddd\z@ \:length + \:x\:d \:y\:xxxx \:SearchDir + \:yyyy\:ddd + \:x\:xxx \:y\:yyy + \else + \:x \:AbsVal\:Yunitsy +\:y \:AbsVal\:Xunitsy \ifdim \:y>\:x \:x\:y \fi +\:y \:AbsVal\:Yunitsx \ifdim \:y>\:x \:x\:y \fi +\:y \:AbsVal\:Xunitsx \ifdim \:y>\:x \:x\:y \fi +\:K \:InCons\:x \relax + \ifnum \:K<\thr@@ \:K\@ne +\else \ifnum \:K<\sixt@@n \:K4 +\else \ifnum \:K<\:XC \:K\sixt@@n +\else \ifnum \:K<\@m \:K\@cclvi +\fi \fi \fi \fi +\divide\:xxx \:K +\divide\:yyy \:K + \:x \:Cons\:Yunitsy\:xxx +\advance\:x -\:Cons\:Yunitsx\:yyy + \:y-\:Cons\:Xunitsy\:xxx +\advance\:y \:Cons\:Xunitsx\:yyy + \fi + \:SearchDir \:ddd#1\:ddd \:t{#2} + \edef\:temp{\the\:t( + \:Cons\:ddd \if:IIID ,\:Cons\:yyyy \fi)} + \MoveToLoc(^) \:temp} \def\:theDoReg{\def\DoReg{\the\:DoReg}} + +\Define\MarkLoc{ \:theDoReg + \expandafter\edef \csname \:MarkLoc} + +\Define\MarkGLoc{ \:theDoReg + \expandafter\xdef \csname \:MarkLoc} + +\Define\:MarkLoc(1){ Loc\space#1:\endcsname{ + \:X\the\:X \:Y\the\:Y + \if:IIID \:Z\the\:Z \fi } \let\DoReg\:DoReg } + +\Define\MoveToLoc(1){ \:theDoReg \expandafter\ifx + \csname Loc\space#1:\endcsname\relax \:err2{#1}\fi + \csname Loc\space#1:\endcsname \let\DoReg\:DoReg } + +\Define\MarkPLoc(1){ \:theDoReg + \if:IIID \:project + \expandafter\edef \csname Loc\space#1:\endcsname{ + \:X\the\:x \:Y\the\:y \:Z\z@} + \else \:err1\MarkPLoc \fi \let\DoReg\:DoReg} + +\Define\WriteLoc(1){{ \:theDoReg \edef\:temp{#1} + \ifx \:temp\empty \else \MoveToLoc(#1) \fi + \immediate\write\sixt@@n{... + \:temp=(\the\:X,\the\:Y\if:IIID,\the\:Z\fi)}}} + +\Define\:LnToLoc(1){ + \:x\:X \:y\:Y \MoveToLoc(#1) + { \:LnTo(\:x\du,\:y\du) }} + +\Define\:tLnToLoc(1){ + \:xx\:X \:yy\:Y \:dd\:Z \MoveToLoc(#1) + { \:tLnTo(\:xx\du,\:yy\du,\:dd\du) }}\def\:GetLine#1#2#3#4#5{ + \MoveToLoc(#1) \divide\:X \:eight \divide\:Y \:eight + #3\:X #4\:Y + \MoveToLoc(#2) \divide\:X \:eight \divide\:Y \:eight + \advance #3 -\:X \advance #4 -\:Y + #5\:Cons#3\:Y \advance #5 -\:Cons#4\:X + \divide #3 \:eight \divide #4 \:eight \relax } +\def\MoveToLL(#1,#2)(#3,#4){ + \:GetLine{#1}{#2}\:x \:y \:xxx + \:GetLine{#3}{#4}\:xx\:yy\:xxxx + \:ddd \:Cons\:x \:yy \advance\:ddd -\:Cons\:xx\:y + \ifdim \:AbsVal\:ddd < \:mmmp + \:X\@cclv\p@ \:Y\:X + \:wrn3{(\string#1,\string#2)(\string#3,\string#4)} + \else + \:divide\:xxx\:ddd \:divide\:xxxx\:ddd + \:X\:Cons\:xxx\:xx \advance\:X -\:Cons\:xxxx\:x + \:Y\:Cons\:xxx\:yy \advance\:Y -\:Cons\:xxxx\:y + \fi }\Define\MoveToCC{\:Opt[]\:MoveToCC{}} + +\def\:MoveToCC[#1](#2,#3)(#4,#5){ + \:UserUnits(#2,#3)(#4,#5) + \:distance($#2,$#4) +\ifnum \:d<\:mp \MoveToLoc(#3) + \:wrn3{(#1,#2)(#3,#4)} +\else \:xx \:d + \:distance($#2,$#3) \:xxx\:d + \:distance($#5,$#4) + \:yy \:xxx \advance\:yy -\:d +\:yyy\:xxx \advance\:yyy \:d +\:divide\:yy\:xx \:yy\:Cons\:yy\:yyy +\advance\:yy \:xx \divide\:yy \tw@ + \:yyy \ifdim \:AbsVal\:xxx>\:AbsVal\:yy \:xxx \else \:yy \fi +\ifdim \:AbsVal\:yyy<\:mp \:yyy\z@ \else + \:divide\:xxx\:yyy \:sqr\:xxx + \:yyyy\:yy \:divide\:yyyy\:yyy \:sqr\:yyyy + \advance\:xxx -\:yyyy \:Sqrt\:xxx + \:yyy\:Cons\:yyy\:xxx +\fi + \MoveToLoc($#4) \:x\:X \:y\:Y \:divide\:yy\:xx +\MoveToLoc($#2) +\advance\:x -\:X \advance\:y -\:Y +\advance\:X \:Cons\:yy\:x +\advance\:Y \:Cons\:yy\:y + \:divide\:yyy\:xx +\advance\:X #1\:Cons\:yyy\:y +\advance\:Y -#1\:Cons\:yyy\:x + + \fi \:SysUnits }\def\:UserUnits(#1,#2)(#3,#4){ + \:xx\:Xunitsx \:xxx\:Xunitsy + \:yy\:Yunitsx \:yyy\:Yunitsy + \:xxxx\:Cons\:yy\:xxx \advance\:xxxx \:Cons\:yyy\:xx + \ifdim \:AbsVal\:xxxx>\:mmmp + \:divide\:xx\:xxxx \:divide\:xxx{-\:xxxx} + \:divide\:yy{\:xxxx} \:divide\:yyy\:xxxx + \fi + \:UnLoc(#1) \:UnLoc(#2) + \:UnLoc(#3) \:UnLoc(#4)}\Define\:SysUnits{ + \MoveTo(\:Cons\:X,\:Cons\:Y)}\Define\:UnLoc(1){ + \MoveToLoc(#1) \:d\:Cons\:yyy\:X + \advance\:d \:Cons\:yy\:Y + \:Y\:Cons\:xx\:Y + \advance\:Y \:Cons\:xxx\:X \:X\:d + \MarkLoc($#1)}\def\MoveToLC{\:Opt[]\:MoveToLC{}} + +\def\:MoveToLC[#1](#2,#3)(#4,#5){ + \:UserUnits(#2,#3)(#4,#5) + \MoveToLoc($#2) \:x\:X \:y\:Y +\MoveToLoc($#3) \advance\:x -\:X + \advance\:y -\:Y + \edef\:temp{ \:xxx\the\:x \:yyy\the\:y } +\MoveToLoc($#4) +\advance\:X \:y \advance\:Y -\:x +\MarkLoc(^$) \MoveToLL($#4,^$)($#2,$#3) +\MarkLoc(^$) + \:distance($#4,$#5) \:xx\:d \:distance($#4,^$) +\ifdim \:d>\:xx \:wrn3{(#2,#3)(#4,#5)} +\else \ifdim \:d<\:mmp \:yy\:xx \else \:yy\:d + \:divide\:yy\:xx \:sqr\:yy + \:yy-\:yy \advance\:yy \p@ + \:Sqrt\:yy \:yy\:Cons\:xx\:yy +\fi \fi + \:temp \:x\:xxx \:y\:yyy \:length \:xx\:d +\:divide\:xxx\:xx +\:divide\:yyy\:xx +\advance\:X #1\:Cons\:yy\:xxx +\advance\:Y #1\:Cons\:yy\:yyy + \:SysUnits } \def\Object#1{\:Opt(){\:DefineSD#1}0} + +\def\:DefineSD#1(#2){\begingroup \:multid#1 + \:DraCatCodes \:DefSD#1(#2)} + +\def\:DefSD#1(#2)#3{ + \expandafter\::Define\csname\string#1.\endcsname(#2){ + \:t{\:SubD{#3}} + \if:IIID \edef\:temp{\noexpand\TwoDim \the\:t + \noexpand\EndTwoDim} + \else \def\:temp{\the\:t} \fi \:temp} + \def#1{\def\:SDname{\csname\string#1.\endcsname} + \:Opt[]\:CallSD{}}} + +\def\:CallSD[#1]{ \edef\:Entry{#1} \:SDname }\def\:SubD#1{ + \let\::RecallXLoc\:AddXLoc \gdef\:AddXLoc{} + \edef\:RecallBor{ \global\:LBorder \the\:LBorder + \global\:RBorder \the\:RBorder + \xdef\noexpand\:UBorder{\:UBorder} + \global\:TeXLoc\the\:TeXLoc } +\global\:TeXLoc\z@ +\setbox\:box\vbox{\EntryExit(0,0,0,0) +\begingroup + \def\MarkXLoc{\:MarkXLoc} + \:InDraw #1 +\endgroup +\:SetDrawWidth \let\:XLoc\relax +\xdef\:AddXLoc{\:dd\the\:LBorder \:AddXLoc}} +\:RecallBor + \:ddd\dp\:box + \ifx \:Entry\empty + \:DrawBox +\else + \let\:RecallIn\:InOut + \:x\:X \:y\:Y + \def\:XLoc(##1,##2,##3){ + \def\:temp{##1} + \ifx \:temp\:Entry \:X\:x \advance\:X -##2 + \:Y\:y \advance\:Y -##3 + \fi} + \:AddXLoc + \advance\:X \:dd \advance\:Y -\:ddd + \EntryExit(-1,-1,\:InOut2,\:InOut3) \:DrawBox + \let\:InOut\:RecallIn +\fi + \MarkLoc(^) + \MoveToExit(-1,-1) + \:xxx\:X \:yyy\:Y \advance\:yyy \:ddd + \def\:XLoc(##1,##2,##3){ + \:X\:xxx \advance\:X ##2 \advance\:X -\:dd + \:Y\:yyy \advance\:Y ##3 + \MarkLoc(##1)} + \:AddXLoc + \MoveToLoc(^) + \ifx \:Entry\empty \else \MoveToLoc(\:Entry) \fi + \global\let\:AddXLoc\::RecallXLoc } +\Define\:MarkXLoc(1){ \:theDoReg + \let\:XLoc\relax + \xdef\:AddXLoc{\:AddXLoc \:XLoc(#1,\the\:X,\the\:Y)} + \let\DoReg\:DoReg} + \catcode`\ 10 \catcode`\^^M5 \catcode`\^^I10 + \let\wlog\:wlog \let\:wlog\:undefined +\:RestoreCatcodes \tracingstats1 \endinput |