Changeset 92
- Timestamp:
- 07/13/08 19:34:31 (6 months ago)
- Files:
-
- trunk/obsolete (added)
- trunk/obsolete/par-projectionchemin.tex (moved) (moved from trunk/doc/par-projectionchemin.tex) (1 prop)
- trunk/obsolete/test_21.pdf (moved) (moved from trunk/tests/test_21.pdf) (1 prop)
- trunk/obsolete/test_21.tex (moved) (moved from trunk/tests/test_21.tex) (1 prop)
- trunk/pst-solides3d.tex (modified) (6 diffs)
- trunk/tests/test_02.pdf (modified) (previous)
- trunk/tests/test_02.tex (modified) (1 diff)
- trunk/tests/test_04.ps (modified) (134 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/obsolete/par-projectionchemin.tex
- Property svn:mergeinfo set
trunk/obsolete/test_21.pdf
- Property svn:mergeinfo set
trunk/obsolete/test_21.tex
- Property svn:mergeinfo set
trunk/pst-solides3d.tex
r88 r92 687 687 %% la macro \psSolid 688 688 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 689 %\newif\ifsolidmemory690 %\solidmemoryfalse691 689 692 690 \define@boolkey[psset]{pst-solides3d}[Pst@]{solidmemory}[true]{} … … 696 694 \def\psSolid@i{\@ifnextchar({\psSolid@ii}{\psSolid@ii(0.,0.,0.)}} 697 695 \def\psSolid@ii(#1,#2,#3){{% 698 \use@par 699 \ifPst@solidmemory 700 \else 701 \begin@ClosedObj 702 \fi 703 \addto@pscode{% 696 \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi 697 \addto@pscode{ 704 698 1 setlinejoin 705 699 \tx@optionssolides … … 709 703 /CY exch def 710 704 /CX exch def 711 %% /CX #1 def712 %% /CY #2 def713 %% /CZ #3 def714 705 % nature du solide 715 706 \psk@solides@object\space 716 % 717 end 718 }% fin du code ps 719 \ifPst@solidmemory 720 \else 721 \end@ClosedObj% 722 \fi 723 \ignorespaces 724 }} 707 end 708 }% fin du code ps 709 \ifPst@solidmemory\else\end@ClosedObj\fi 710 \ignorespaces}} 725 711 726 712 \def\composeSolid{\use@pscode} … … 762 748 \def\psPoint{\def\pst@par{}\pst@object{psPoint}} 763 749 \def\psPoint@i(#1,#2,#3)#4{{% coordonnees cartesiennes 764 \begin@SpecialObj765 \pnode(!750 \begin@SpecialObj 751 \pnode(! 766 752 \tx@optionssolides 767 753 SolidesDict begin 768 754 #1 #2 #3 769 3dto2d cm_1 exch cm_1 exch 770 end){#4}% 771 \end@SpecialObj 772 }\ignorespaces% 755 3dto2d cm_1 exch cm_1 exch 756 end){#4}% 757 \end@SpecialObj}\ignorespaces% 773 758 } 774 759 … … 912 897 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 913 898 \def\defFunction{\@ifnextchar[{\defFunction@i}{\defFunction@i[]}} 914 \def\defFunction@i[#1]#2(#3)#4#5#6{ \bgroup899 \def\defFunction@i[#1]#2(#3)#4#5#6{% 915 900 \pst@killglue 916 \psset{#1} 917 \defFunction@ii{#3}\edef\@tempa{\the\toks@}% 918 \ifPst@algebraic\toks@={}% 919 \def\@tempb{#4}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi 920 \def\@tempb{#5}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi 921 \def\@tempb{#6}\ifx\@tempb\@empty 922 \else\store@toks@after\@tempb\fi 923 \pstVerb{ 924 /#2 { 3 dict begin \@tempa \the\toks@ 925 gere_pst-deffunction end } def }% 20080625 926 \else 927 \pstVerb{ 901 \begingroup 902 \psset{#1} 903 \defFunction@ii{#3}\edef\@tempa{\the\toks@}% 904 \ifPst@algebraic 905 \toks@={}% 906 \def\@tempb{#4}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi 907 \def\@tempb{#5}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi 908 \def\@tempb{#6}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi 909 \pstVerb{ 910 /#2 { 3 dict begin \@tempa \the\toks@ 911 gere_pst-deffunction end } def }% 20080625 912 \else 913 \pstVerb{ 928 914 /#2 { 3 dict begin \the\toks@ #4 #5 #6 929 gere_pst-deffunction end } def }% 20080625 930 \fi 931 \egroup} 915 gere_pst-deffunction end } def }% 20080625 916 \fi 917 \endgroup} 918 % 932 919 \def\defFunction@ii#1{\defFunction@iii#1,,,\end} 933 920 \def\defFunction@iii#1,#2,#3,#4\end{% … … 939 926 \global\toks@=\expandafter{\@tmpPSDefns}}% 20080625 940 927 \def\store@toks@before#1{% 941 \edef\@tmpPSDefns{/#1 exch def \the\toks@}%928 \edef\@tmpPSDefns{/#1 exch def \the\toks@}% 942 929 \global\toks@=\expandafter{\@tmpPSDefns}% 943 930 } 944 931 \def\store@toks@after#1{% 945 \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx }%932 \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx }% 946 933 \global\toks@=\expandafter{\@tmpPSDefns}% 947 934 } 948 935 % 949 936 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 950 937 %% la macro de projection trunk/tests/test_02.tex
r89 r92 56 56 affinagecoeff=.5, 57 57 affinagerm, 58 fcolor=.5 setfillopacityYellow,58 fcolor=.5 .setopacityalpha Yellow, 59 59 hollow, 60 60 affinage=all] trunk/tests/test_04.ps
r9 r92 1 1 %!PS-Adobe-2.0 2 %%Creator: dvips(k) 5.96 .1Copyright 2007 Radical Eye Software2 %%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software 3 3 %%Title: test_04.dvi 4 %%CreationDate: Sun Mar 23 09:43:2020084 %%CreationDate: Sun Jul 13 14:11:44 2008 5 5 %%Pages: 2 6 6 %%PageOrder: Ascend 7 7 %%BoundingBox: 0 0 596 842 8 %%DocumentFonts: SFTT1728 SFRM1728 SFRM1200 SFBX1440 SFRM1000 8 9 %%DocumentPaperSizes: a4 9 10 %%EndComments 10 11 %DVIPSWebPage: (www.radicaleye.com) 11 %DVIPSCommandLine: dvips test_04 12 %DVIPSCommandLine: dvips test_04.dvi 12 13 %DVIPSParameters: dpi=600 13 %DVIPSSource: TeX output 2008.0 3.23:094314 %DVIPSSource: TeX output 2008.07.13:1411 14 15 %%BeginProcSet: tex.pro 0 0 15 16 %! … … 59 60 %%EndProcSet 60 61 %%BeginProcSet: pstricks.pro 0 0 61 %! 62 % PostScript prologue for pstricks.tex. 63 % Version 1.02, 2007/09/13 64 % For distribution and copyright, see pstricks.tex. 62 % $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $ 65 63 % 66 /tx@Dict 200 dict def tx@Dict begin 67 /ADict 25 dict def 64 %% PostScript prologue for pstricks.tex. 65 %% Version 1.05, 2008/06/25 66 %% 67 %% This program can be redistributed and/or modified under the terms 68 %% of the LaTeX Project Public License Distributed from CTAN archives 69 %% in directory macros/latex/base/lppl.txt. 70 % 71 % 72 % Define the follwing gs-functions if not known, eg when using distiller 73 % 74 systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if 75 systemdict /.setblendmode known not {/.setblendmode { pop } def } if 76 systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if 77 % 78 /tx@Dict 200 dict def % the main PSTricks dictionary 79 tx@Dict begin 80 /ADict 25 dict def % The arrow dictionaray 68 81 /CM { matrix currentmatrix } bind def 69 82 /SLW /setlinewidth load def … … 77 90 /Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments 78 91 /Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known 79 /ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) 80 /Div { dup 0 eq { pop } { div } ifelse } def % control the division 81 /Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees 82 /NET { neg exch neg exch T } def % change coordinate system to the negative one 83 /Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter 84 /Pyth2 { % Pythagoras, xA yA xB yB 85 3 -1 roll % xA xB yB yA 86 sub % xA xB yB-yA 87 3 1 roll % yB-yA xA xB 88 sub % yB-yA xA-xB 92 /ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) 93 /Div { dup 0 eq { pop } { div } ifelse } def % control the division 94 /tan { dup cos abs 1.e-10 lt 95 { pop 1.e10 } % return 1.e10 as infinit 96 { dup sin exch cos div } ifelse % default sin/cos 97 } def 98 /Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees 99 /Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root 100 pop pop 0 }{ sqrt exch atan} ifelse } def 101 /NET { neg exch neg exch T } def % change coordinate system to the negative one 102 /Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter 103 /Pyth2 { % Pythagoras, xA yA xB yB 104 3 -1 roll % xA xB yB yA 105 sub % xA xB yB-yA 106 3 1 roll % yB-yA xA xB 107 sub % yB-yA xA-xB 89 108 Pyth } def 90 /PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian 109 /PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian 110 /Rand { rand 4294967295 div } def % a real random number 91 111 %----------------- hv added 20050516 --------------- 112 /PiDiv2 1.57079632680 def 92 113 /Pi 3.14159265359 def 93 114 /TwoPi 6.28318530718 def 94 115 /Euler 2.71828182846 def 95 /RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees 96 /DegtoRad { Pi mul 180 div } bind def % viceversa 116 %/e Euler bind def 117 /RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees 118 /DegtoRad { Pi mul 180 div } bind def % viceversa 97 119 %----------------- hv end--------------------------- 98 120 /PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def 99 /PathLength { flattenpath /z 0 def 100 { /y1 ED /x1 ED /y2 y1 def /x2 x1 def 101 }{ /y ED /x ED PathLength@ } {} { /y y2 def /x x2 def PathLength@ } 102 /pathforall load stopped { pop pop pop pop } if z } def 103 /STP { .996264 dup scale } def 104 /STV { SDict begin normalscale end STP } def 121 /PathLength { 122 flattenpath /z 0 def 123 { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } 124 { /y ED /x ED PathLength@ } 125 {} 126 { /y y2 def /x x2 def PathLength@ } 127 /pathforall load stopped { pop pop pop pop } if 128 z 129 } def 130 % 131 /STP { .996264 dup scale } def % BP/PT scaling 132 /STV { SDict begin normalscale end STP } def % 105 133 % 106 134 %%-------------- DG begin patch 15 ---------------%% … … 175 203 pop pop } def 176 204 % 205 /PenroseFill {% on stack: scaling factor 206 dup dup scale 207 1 exch div round /penroseFactor ED 208 a 0 dtransform round exch round exch 209 2 copy idtransform 210 exch Atan rotate 211 idtransform pop /a ED 212 .25 .25 itransform pathbbox 213 /y2 ED 214 a Div ceiling cvi /x2 ED /y1 ED 215 a Div cvi /x1 ED /y2 y2 y1 sub def 216 clip 217 newpath 218 systemdict 219 /setstrokeadjust known { true setstrokeadjust } if 220 /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} 221 { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall 222 [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto 223 i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 224 mul j l + S rmoveto}F i L j L stroke }F}F}F}F 225 grestore 226 pop pop 227 } def 228 % 177 229 %gsave abs CLW add /a ED a 0 dtransform round exch round exch 178 230 %2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25 … … 190 242 %% DG/SR modification end 191 243 % 192 /BeginArrow { ADict begin 244 /BeginArrow { 245 ADict begin % hold it local, for end see EndArrow 193 246 /@mtrx CM def 194 247 gsave … … 199 252 } def 200 253 % 201 /EndArrow { @mtrx setmatrix CP grestore end } def 254 /EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict 202 255 % 203 256 /Arrow { … … 211 264 gsave fill grestore 212 265 } def 266 % 267 /ArrowD { % the sides are drawn as curves (hv 20071211) 268 CLW mul add dup 269 2 div /w ED 270 mul dup /h ED 271 mul /Inset ED 272 { 0 h T 1 -1 scale } if % changes the direction 273 % we use y=w/h^2 * x^2 as equation for the control points 274 % for the coordinates the arrow is seen from top to bottom 275 % the bottom (tip) is (0;0) 276 w neg h moveto % lower left of > 277 w 9 div 4 mul neg h 3 div 2 mul 278 w 9 div neg h 3 div 279 0 0 curveto % tip of > 280 w 9 div h 3 div 281 w 9 div 4 mul h 3 div 2 mul 282 w h curveto % upper left of > 283 w neg Inset neg rlineto % move to x=0 and inset 284 gsave fill grestore 285 } def 213 286 % 214 287 /Tbar { … … 248 321 load } if ] cvx newpath 3 1 roll T exec } def 249 322 % 250 /NArray { aload length 2 div dup dup cvi eq not { exch pop } if /n exch 251 cvi def } def 323 %/NArray { 324 % aload length 2 div dup dup cvi eq not { exch pop } if /n exch 325 % cvi def 326 %} def 327 % 252 328 /NArray { % holds the coordinates and on top of stack the showpoints boolean 253 / fED329 /showpoints ED 254 330 counttomark 2 div dup cvi /n ED 255 331 n eq not { exch pop } if 256 f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse 257 } def 332 showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse 333 } def 334 % 258 335 /Line { 259 336 NArray n 0 eq not … … 263 340 } if 264 341 } def 265 /Arcto { /a [ 6 -2 roll ] cvx def a r /arcto load stopped { 5 } { 4 } 266 ifelse { pop } repeat a } def 342 % 343 /Arcto { 344 /a [ 6 -2 roll ] cvx def 345 a r 346 /arcto load stopped { 5 } { 4 } ifelse { pop } repeat 347 a 348 } def 349 % 267 350 /CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq 268 351 and { pop pop /n n 1 sub def } if } def … … 301 384 setmatrix pop } def 302 385 % DG/SR modification end 303 /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth 304 def } def 305 /CCA { /y ED /x ED 2 copy y sub /dy1 ED x sub /dx1 ED /l1 dx1 dy1 Pyth 306 def } def 307 /CC { /l0 l1 def /x1 x dx sub def /y1 y dy sub def /dx0 dx1 def /dy0 dy1 308 def CCA /dx dx0 l1 c exp mul dx1 l0 c exp mul add def /dy dy0 l1 c exp 309 mul dy1 l0 c exp mul add def /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos 310 abs b exp a mul dx dy Pyth Div 2 div def /x2 x l0 dx mul m mul sub def 311 /y2 y l0 dy mul m mul sub def /dx l1 dx mul m mul neg def /dy l1 dy mul 312 m mul neg def } def 313 /IC { /c c 1 add def c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } 314 ifelse /a a 2 mul 3 div 45 cos b exp div def CCA /dx 0 def /dy 0 def } 315 def 386 % 387 /CCA { 388 /y ED /x ED 389 2 copy y sub /dy1 ED 390 x sub /dx1 ED 391 /l1 dx1 dy1 Pyth def 392 } def 393 % 394 /CC { 395 /l0 l1 def 396 /x1 x dx sub def 397 /y1 y dy sub def 398 /dx0 dx1 def 399 /dy0 dy1 def 400 CCA 401 /dx dx0 l1 c exp mul dx1 l0 c exp mul add def 402 /dy dy0 l1 c exp mul dy1 l0 c exp mul add def 403 /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def 404 /x2 x l0 dx mul m mul sub def 405 /y2 y l0 dy mul m mul sub def 406 /dx l1 dx mul m mul neg def 407 /dy l1 dy mul m mul neg def 408 } def 409 % 410 /IC { 411 /c c 1 add def 412 c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse 413 /a a 2 mul 3 div 45 cos b exp div def 414 CCA 415 /dx 0 def 416 /dy 0 def 417 } def 418 % 316 419 /BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def 317 420 /NC { CC x1 y1 x2 y2 x y curveto } def … … 320 423 /NAC { x2 y2 x y curveto CC x1 y1 } def 321 424 /EAC { x2 y2 x y ArrowB curveto pop pop } def 425 % 322 426 /OpenCurve { 323 427 NArray n 3 lt … … 325 429 { BOC /n n 3 sub def n { NC } repeat EOC } ifelse 326 430 } def 327 /AltCurve { { false NArray n 2 mul 2 roll [ n 2 mul 3 sub 1 roll ] aload 328 /Points ED n 2 mul -2 roll } { false NArray } ifelse n 4 lt { n { pop 329 pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse } def 330 /ClosedCurve { NArray n 3 lt { n { pop pop } repeat } { n 3 gt { 331 CheckClosed } if 6 copy n 2 mul 6 add 6 roll IC CC x y moveto n { NC } 332 repeat closepath pop pop } ifelse } def 431 % 432 /AltCurve { 433 { false NArray n 2 mul 2 roll 434 [ n 2 mul 3 sub 1 roll ] aload 435 /Points ED 436 n 2 mul -2 roll } 437 { false NArray } ifelse 438 n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse 439 } def 440 % 441 /ClosedCurve { 442 NArray n 3 lt 443 { n { pop pop } repeat } 444 { n 3 gt { CheckClosed } if 445 6 copy n 2 mul 6 add 6 roll 446 IC CC x y moveto n { NC } repeat 447 closepath pop pop 448 } ifelse 449 } def 450 % 333 451 /SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def 334 452 /ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def … … 348 466 /y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq { 349 467 pop pop Rect } { OvalFrame } ifelse } def 350 /BezierNArray { /f ED counttomark 2 div dup cvi /n ED n eq not { exch pop 351 } if n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat f { ] 352 aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse } def 353 /OpenBezier { BezierNArray n 1 eq { pop pop } { ArrowA n 4 sub 3 idiv { 6 354 2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB curveto } 355 ifelse } def 356 /ClosedBezier { BezierNArray n 1 eq { pop pop } { moveto n 1 sub 3 idiv { 357 6 2 roll 4 2 roll curveto } repeat closepath } ifelse } def 358 /BezierShowPoints { gsave Points aload length 2 div cvi /n ED moveto n 1 359 sub { lineto } repeat CLW 2 div SLW [ 4 4 ] 0 setdash stroke grestore } 360 def 361 /Parab { /y0 exch def /x0 exch def /y1 exch def /x1 exch def /dx x0 x1 362 sub 3 div def /dy y0 y1 sub 3 div def x0 dx sub y0 dy add x1 y1 ArrowA 363 x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB curveto /Points [ x1 y1 x0 364 y0 x0 2 mul x1 sub y1 ] def } def 468 % 469 /BezierNArray { 470 /f ED 471 counttomark 2 div dup cvi /n ED 472 n eq not { exch pop } if 473 n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat 474 f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse 475 } def 476 % 477 /OpenBezier { 478 BezierNArray 479 n 1 eq 480 { pop pop } 481 { ArrowA n 4 sub 3 idiv 482 { 6 2 roll 4 2 roll curveto } repeat 483 6 2 roll 4 2 roll ArrowB curveto } ifelse 484 } def 485 % 486 /ClosedBezier { 487 BezierNArray 488 n 1 eq 489 { pop pop } 490 { moveto n 1 sub 3 idiv 491 { 6 2 roll 4 2 roll curveto } repeat 492 closepath } ifelse 493 } def 494 % 495 /BezierShowPoints { 496 gsave 497 Points aload length 2 div cvi /n ED 498 moveto 499 n 1 sub { lineto } repeat 500 CLW 2 div SLW [ 4 4 ] 0 setdash stroke 501 grestore 502 } def 503 % 504 /Parab { 505 /y0 ED /x0 ED /y1 ED /x1 ED 506 /dx x0 x1 sub 3 div def 507 /dy y0 y1 sub 3 div def 508 x0 dx sub y0 dy add x1 y1 ArrowA 509 x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB 510 curveto 511 /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def 512 } def 365 513 % 366 514 /Grid { … … 398 546 { gsave c i a cvs dup stringwidth pop 399 547 /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse 400 h 0 gt {b neg}{z1} ifelse548 h 0 gt {b neg}{z1} ifelse 401 549 rmoveto show grestore } if 402 550 dup t f moveto … … 575 723 /IfVisible true def } def 576 724 end 725 %-----------------------------------------------------------------------------% 726 727 % END pstricks.pro 728 729 %%EndProcSet 730 %%BeginProcSet: pst-algparser.pro 0 0 731 %! 732 % PostScript prologue for PSTricks algorithm parser 733 % Version 0.01, 2008/01/01 734 % For distribution and copyright, see pstricks.tex. hv@pstricks.de 577 735 % 578 /AlgParser { tx@AlgToPs begin AlgToPs end } def 579 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 736 %-----------------------------------------------------------------------------% 737 /AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez 738 % 580 739 /tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin 581 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%740 % 582 741 % PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12 583 742 % E->T|E+T … … 589 748 % params->E|E,param 590 749 % number->TOBEFINISHED 591 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%750 % 592 751 %% E expression, T term, SF signed factor, F factor, P power 593 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%752 % 594 753 %% parser 595 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%754 % 596 755 %% str 597 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%756 % 598 757 %% C->E<condition_operators>E 599 758 %% STR index -> STR index+lenExpr 600 759 /AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def 601 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%760 % 602 761 %% analyze Expression List (separator , or | ) 603 762 %% STR index -> STR index+lenExpr … … 768 927 /BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def 769 928 end 770 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%771 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%772 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%929 % 930 %-------------------------------------------------------------------------------% 931 % 773 932 /tx@AlgToPs 12 dict def tx@AlgToPs begin 774 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%933 % 775 934 %% algExpr -> PSVector 776 935 /AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def … … 801 960 { dup (IfTE) eq { EvalCond } 802 961 { dup (Derive) eq { pop EvalDerive } 803 { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc962 { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc 804 963 /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx 805 exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }964 exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse } 806 965 { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def 807 966 dup 91 eq%%% there is an open bracket -> vector element … … 860 1019 /TrigoFunc { 861 1020 dup (cos) eq 1 index (sin) eq or exch (tan) eq or 862 { /ExpressionVector ExpressionVector aload length 3.14159265359/div cvx 180 /mul cvx 5 -1 roll 4 add1021 { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add 863 1022 array astore def 864 1023 } if … … 899 1058 /AnalyzePostHook {} def 900 1059 /RollOp { 3 1 roll } bind def 901 end %%%tx@CoreAnalyzerDict902 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%903 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%904 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1060 end %tx@CoreAnalyzerDict 1061 % 1062 %--------------------------------------------------------------------% 1063 % 905 1064 /tx@Derive 41 dict def tx@Derive begin 906 1065 %%increase ^^ for each function added … … 1035 1194 { dup dup (1) eq exch (1.0) eq or 1036 1195 { StrConcat } 1037 { StrConcat1038 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 11039 { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 091020061196 { StrConcat 1197 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1 1198 { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006 1040 1199 (*\() StrConcat 8 index StrConcat (\)) StrConcat 1041 1200 5 index dup dup (2) eq exch (2.0) eq or 1042 { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }1201 { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse } 1043 1202 { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat 1044 1203 5 index StrConcat (-1\)) StrConcat } ifelse … … 1220 1379 /TrigoFunc { 1221 1380 dup (cos) eq 1 index (sin) eq or exch (tan) eq or 1222 { /ExpressionVector ExpressionVector aload length 3.14159265359/div cvx 180 /mul cvx 5 -1 roll 4 add1381 { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add 1223 1382 array astore def 1224 1383 } if … … 1276 1435 /asin {% 1277 1436 dup abs 1 gt { EQDFasinrangeerror } if 1278 dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if 90 div 1.57079632680 mul1437 dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad 1279 1438 } def 1280 1439 %% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x) … … 1282 1441 /acos {% 1283 1442 dup abs 1 gt { EQDFacosrangeerror } if 1284 dup dup mul 1 exch sub sqrt exch atan 90 div 1.57079632680 mul1443 dup dup mul 1 exch sub sqrt exch atan DegtoRad 1285 1444 } def 1286 1445 %% function arctangent in radians 1287 1446 %% x -> theta 1288 /atg { 1 atan dup 90 gt { 360 sub } if 90 div 1.57079632680 mul} bind def1447 /atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def 1289 1448 %% HYPERBOLIC FUNCTIONS 1290 1449 /sh { dup Ex exch neg Ex sub 2 div } def … … 1299 1458 %% modified exponential funtion for 0 1300 1459 %% x -> e^x 1301 /Ex { 2.71828182846exch exp } bind def1460 /Ex { Euler exch exp } bind def 1302 1461 %% 1303 1462 %% factorial function … … 1305 1464 /Fact { 1 exch 2 exch 1 exch { mul } for } bind def 1306 1465 /fact { Fact } bind def 1307 /PI 3.14159265358 def1308 /e 2.71828182846 def1309 1466 end 1310 1467 … … 1313 1470 %%EndProcSet 1314 1471 %%BeginProcSet: pst-dots.pro 0 0 1315 %! 1472 % $Id: pst-dots.pro 11 2008-01-24 13:37:27Z herbert $ 1473 % 1316 1474 %% PostScript prologue for pstricks.tex. 1317 %% Version 2.00, Suggestion of 2006/12/19 1475 %% Version 2.01, 2008/04/18 1476 %% 1318 1477 %% For distribution, see pstricks.tex. 1319 1478 %% 1320 1479 %% Timothy Van Zandt <tvz@Princeton.EDU> 1321 1480 %% 1481 %% This program can be redistributed and/or modified under the terms 1482 %% of the LaTeX Project Public License Distributed from CTAN archives 1483 %% in directory macros/latex/base/lppl.txt. 1484 %% 1322 1485 %% Modified by Etienne Riga - Dec. 16, 1999 1323 %% Modified by Herbert Voss (hv) - 2004/12/271324 1486 %% Modified by Etienne Riga - 2005/01/01 (er) 1325 1487 %% to add /Diamond, /SolidDiamond and /BoldDiamond 1488 %% Modified by Herbert Voss (hv) - 2008/04/17 1326 1489 % 1327 10 dict dup begin 1490 10 dict dup begin % hold local 1328 1491 /FontType 3 def 1329 1492 /FontMatrix [.001 0 0 .001 0 0] def 1330 1493 /FontBBox [-571.5 -742.5 571.5 742.5] def 1331 % /FontBBox [-1000 -1000 1000 1000] def 1332 % See end of file in /BuildGlyph 1494 % /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph 1333 1495 /Encoding 256 array def 1334 0 1 255 {Encoding exch/.notdef put} for 1335 Encoding 1336 dup (b) 0 get /Bullet put 1496 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef 1497 Encoding % replace with given dot names 1498 dup (b) 0 get /Bullet put % get the numerical position of b in ASCII 1499 % % and save /Bullet at this place in Encoding 1337 1500 dup (c) 0 get /Circle put 1338 dup (C) 0 get /BoldCircle put 1501 dup (C) 0 get /BoldCircle put % 67 1339 1502 dup (u) 0 get /SolidTriangle put 1340 1503 dup (t) 0 get /Triangle put … … 1353 1516 dup (H) 0 get /BoldHexagon put 1354 1517 dup (G) 0 get /SolidHexagon put 1518 dup (f) 0 get /Octogon put % 2008-04-18 hv 1519 dup (F) 0 get /BoldOctogon put % 2008-04-18 hv 1520 dup (g) 0 get /SolidOctogon put % 2008-04-18 hv 1355 1521 dup (a) 0 get /Add put 1356 dup (A) 0 get /BoldAdd put 1522 dup (A) 0 get /BoldAdd put % 65 1357 1523 dup (x) 0 get /Mul put 1358 1524 dup (X) 0 get /BoldMul put … … 1370 1536 %%% 1371 1537 /CharProcs 47 dict def 1372 CharProcs begin1373 /CirclePath {0 0 500 0 360 arc closepath} def1374 /Bullet {CirclePath fill} def1375 /Circle {CirclePath .9 .9 scale CirclePath eofill} def1376 /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def1377 /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto1378 closepath} def1379 /SolidTriangle {TrianglePathfill} def1380 /Triangle {TrianglePath .85 .85scale TrianglePath eofill} def1381 /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def1382 /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto1383 closepath} def1384 /SolidSquare {SquarePathfill} def1385 /Square {SquarePath .89 .89 scale SquarePath eofill} def1386 /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def1387 /PentagonPath {-337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto1388 0 574.7 lineto -546.6 177.6 lineto closepath} def1389 /SolidPentagon {PentagonPath fill} def1390 /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def1391 /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def1538 CharProcs begin 1539 /CirclePath {0 0 500 0 360 arc closepath} def 1540 /Bullet {CirclePath fill} def 1541 /Circle {CirclePath .9 .9 scale CirclePath eofill} def 1542 /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def 1543 /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def 1544 /SolidTriangle {TrianglePath fill} def 1545 /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def 1546 /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def 1547 /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def 1548 /SolidSquare {SquarePath fill} def 1549 /Square {SquarePath .89 .89 scale SquarePath eofill} def 1550 /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def 1551 /PentagonPath { 1552 -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto 1553 0 574.7 lineto -546.6 177.6 lineto closepath 1554 } def 1555 /SolidPentagon {PentagonPath fill} def 1556 /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def 1557 /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def 1392 1558 %-------------- hv begin 2004/07/25 from: er 2003/03/24 1393 /HexagonPath {0 550 moveto -476 275 lineto -476 -275 lineto 1394 0 -550 lineto 476 -275 lineto 476 275 lineto closepath} def 1395 /SolidHexagon {HexagonPath fill} def 1396 /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def 1397 /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def 1398 /AsteriskPath {20 0 moveto 10 250 180 500 0 500 curveto 1399 -180 500 -10 250 -20 0 curveto closepath} def 1400 /Asterisk {AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 1401 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 1402 fill} def 1403 /Basterp {50 250 220 500 0 500 curveto 1404 -220 500 -50 250 -50 30 cos 100 mul curveto} def 1405 /BoldAsteriskPath {50 30 cos 100 mul moveto Basterp 1406 60 rotate Basterp 60 rotate Basterp 1407 60 rotate Basterp 60 rotate Basterp 1408 60 rotate Basterp closepath} def 1409 /BoldAsterisk {BoldAsteriskPath fill} def 1410 /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def 1411 /CrossPath {40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto 1412 -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto 1413 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath} def 1414 /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto 1415 -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto 1416 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath} def 1417 /Add {CrossPath fill} def 1418 /Mul {45 rotate CrossPath fill} def 1419 /BoldAdd {BoldCrossPath fill} def 1420 /BoldMul {45 rotate BoldCrossPath fill} def 1421 /Oplus {CirclePath .9 .9 scale CirclePath eofill 1422 .775 .775 scale CrossPath fill} def 1423 /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def 1424 /BOplus {CirclePath .8 .8 scale CirclePath eofill 1425 .775 .775 scale BoldCrossPath fill} def 1426 /Otimes {CirclePath .9 .9 scale CirclePath eofill 1427 45 rotate .775 .775 scale CrossPath fill} def 1428 /BOtimes {CirclePath .8 .8 scale CirclePath eofill 1429 45 rotate .775 .775 scale BoldCrossPath fill } def 1430 /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def 1431 /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto 1432 closepath} def 1433 /Bar {BarPath fill} def 1434 /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto 1435 closepath} def 1436 /BoldBar {BoldBarPath fill} def 1437 /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 1438 428.5 0 lineto closepath} def 1439 /SolidDiamond {DiamondPath fill} def 1440 /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def 1441 /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def 1559 /HexagonPath { 1560 0 550 moveto -476 275 lineto -476 -275 lineto 1561 0 -550 lineto 476 -275 lineto 476 275 lineto closepath 1562 } def 1563 /SolidHexagon {HexagonPath fill} def 1564 /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def 1565 /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def 1566 % 2008-04-18 hv 1567 /OctogonPath { 1568 228 550 moveto 7 { -456 0 rlineto 45 rotate } repeat 1569 closepath 1570 } def 1571 /SolidOctogon { OctogonPath fill } def 1572 /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def 1573 /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def 1574 % 1575 /AsteriskPath { 1576 20 0 moveto 10 250 180 500 0 500 curveto 1577 -180 500 -10 250 -20 0 curveto closepath 1578 } def 1579 /Asterisk { 1580 AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath 1581 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill 1582 } def 1583 % 1584 /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def 1585 /BoldAsteriskPath { 1586 50 30 cos 100 mul moveto Basterp 1587 60 rotate Basterp 60 rotate Basterp 1588 60 rotate Basterp 60 rotate Basterp 1589 60 rotate Basterp closepath 1590 } def 1591 /BoldAsterisk {BoldAsteriskPath fill} def 1592 /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def 1593 /CrossPath { 1594 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto 1595 -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto 1596 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath 1597 } def 1598 /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto 1599 -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto 1600 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath 1601 } def 1602 /Add {CrossPath fill} def 1603 /Mul {45 rotate CrossPath fill} def 1604 /BoldAdd {BoldCrossPath fill} def 1605 /BoldMul {45 rotate BoldCrossPath fill} def 1606 /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def 1607 /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def 1608 /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def 1609 /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def 1610 /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def 1611 /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def 1612 /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def 1613 /Bar {BarPath fill} def 1614 /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def 1615 /BoldBar {BoldBarPath fill} def 1616 /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def 1617 /SolidDiamond {DiamondPath fill} def 1618 /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def 1619 /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def 1442 1620 %%% 1443 /.notdef { } def 1621 /.notdef { } def 1622 end 1623 % 1624 /BuildGlyph { 1625 exch 1626 begin 1627 % Metrics 1 index get exec 0 1628 0 0 1629 % BBoxes 3 index get exec 1630 -1000 -1000 1000 1000 1631 % -571.5 -742.5 571.5 742.5 1632 setcachedevice 1633 CharProcs begin load exec end 1444 1634 end 1445 /BuildGlyph { 1446 exch 1447 begin 1448 % Metrics 1 index get exec 0 1449 0 0 1450 % BBoxes 3 index get exec 1451 -1000 -1000 1000 1000 1452 % -571.5 -742.5 571.5 742.5 1453 setcachedevice 1454 CharProcs begin load exec end 1455 end 1456 } def 1457 /BuildChar { 1458 1 index /Encoding get exch get 1459 1 index /BuildGlyph get exec 1460 } bind def 1635 } def 1636 % 1637 /BuildChar { 1638 1 index /Encoding get exch get 1639 1 index /BuildGlyph get exec 1640 } bind def 1641 1461 1642 end 1462 1643 /PSTricksDotFont exch definefont pop 1463 1644 1645 %% end 1464 1646 1465 1647 %%EndProcSet 1466 1648 %%BeginProcSet: pst-node.pro 0 0 1467 %! 1649 %!PS 1468 1650 % PostScript prologue for pst-node.tex. 1469 1651 % Version 97 patch 1, 97/05/09. … … 1471 1653 % 1472 1654 /tx@NodeDict 400 dict def tx@NodeDict begin 1473 tx@Dict begin /T /translate load def end 1474 /NewNode { gsave /next ED dict dup 3 1 roll def exch { dup 3 1 roll def } 1475 if begin tx@Dict begin STV CP T exec end /NodeMtrx CM def next end 1476 grestore } def 1477 /InitPnode { /Y ED /X ED /NodePos { NodeSep Cos mul NodeSep Sin mul } def 1478 } def 1479 /InitCnode { /r ED /Y ED /X ED /NodePos { NodeSep r add dup Cos mul exch 1480 Sin mul } def } def 1655 tx@Dict begin 1656 /T /translate load def 1657 end 1658 /NewNode { % on stack: { x y } boolean N@name type InitXnode 1659 gsave 1660 /next ED % { x y } boolean N@name type 1661 dict dup % { x y } boolean N@name dict dict 1662 3 1 roll def % { x y } boolean dict N@name dict def 1663 exch { dup 3 1 roll def } if % { x y } dict boolean 1664 begin % { x y } dict begin 1665 tx@Dict begin 1666 STV CP T exec % set scaling 1667 end 1668 /NodeMtrx CM def % save CM 1669 next % InitXNode 1670 end 1671 grestore 1672 } def 1673 % 1674 /NewNode2 { % on stack: x y N@name type 1675 gsave 1676 dict dup % x y N@name dict dict 1677 3 1 roll def % x y dict N@name dict def 1678 begin % x y dict begin 1679 tx@Dict begin 1680 STV CP T % set scaling 1681 end 1682 /NodeMtrx CM def % save CM 1683 /Y ED /X ED 1684 /NodePos { NodeSep Cos mul NodeSep Sin mul } def 1685 end 1686 grestore 1687 } def 1688 % 1689 /InitPnode { 1690 /Y ED /X ED 1691 /NodePos { NodeSep Cos mul NodeSep Sin mul } def 1692 } def 1693 % 1694 /InitCnode { 1695 /r ED /Y ED /X ED 1696 /NodePos { NodeSep r add dup Cos mul exch Sin mul } def 1697 } def 1698 % 1481 1699 /GetRnodePos { Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def 1482 1700 } ifelse Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } … … 1497 1715 hh mul Atan dup cos ww mul exch sin hh mul } def 1498 1716 /GetCenter { begin X Y NodeMtrx transform CM itransform end } def 1717 % 1499 1718 /XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist 1500 Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg } 1501 { 0 Dist Sin mul } ifelse } ifelse Do } def 1719 Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg } 1720 { 0 Dist Sin mul } ifelse } ifelse Do 1721 } def 1502 1722 /GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform 1503 exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx 1504 dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop 1505 XYPos } ifelse } def 1723 exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx 1724 dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop 1725 XYPos } ifelse 1726 } def 1506 1727 /AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1 1507 1728 roll sin mul sub exch } ifelse } def … … 1518 1739 ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED 1519 1740 } ifelse } def 1520 /InitNC { /b ED /a ED /NodeSepTypeB ED /NodeSepTypeA ED /NodeSepB ED 1521 /NodeSepA ED /OffsetB ED /OffsetA ED tx@NodeDict a known tx@NodeDict b 1522 known and dup { /NodeA a load def /NodeB b load def NodeA GetCenter /yA 1523 ED /xA ED NodeB GetCenter /yB ED /xB ED } if } def 1741 /InitNC { 1742 /b ED /a ED % second and first node 1743 /NodeSepTypeB ED /NodeSepTypeA ED 1744 /NodeSepB ED /NodeSepA ED 1745 /OffsetB ED /OffsetA ED 1746 tx@NodeDict a known tx@NodeDict b known and dup { 1747 /NodeA a load def 1748 /NodeB b load def 1749 NodeA GetCenter /yA ED /xA ED 1750 NodeB GetCenter /yB ED /xB ED } if 1751 } def 1752 % 1524 1753 /LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub 1525 1754 mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def … … 1573 1802 cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines 1574 1803 } HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def 1575 /NCAngles { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate 1576 def xA2 yA2 mtrx transform pop xB2 yB2 mtrx transform exch pop mtrx 1577 itransform /y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA2 1578 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end /LPutVar [ xB1 1579 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def /LPutPos { LPutLines } def 1580 /HPutPos { HPutLines } def /VPutPos { VPutLines } def } def 1804 % 1805 /NCAngles { 1806 GetEdgeA GetEdgeB GetArmA GetArmB 1807 /mtrx AngleA matrix rotate def 1808 xA2 yA2 mtrx transform pop 1809 xB2 yB2 mtrx transform exch pop 1810 mtrx itransform 1811 /y0 ED /x0 ED 1812 mark ArmB 0 ne { xB1 yB1 } if 1813 xB2
