diff options
author | Karl Berry <karl@freefriends.org> | 2010-10-15 23:09:30 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-10-15 23:09:30 +0000 |
commit | 19b68112afa7a9fefc611f2e796e82a3884d0e08 (patch) | |
tree | 569ff823f08987a1733ee6de9d4507b15599632d /Master/texmf-dist/tex | |
parent | 1df1829282a57c887b9dc8ceefc83905a3359252 (diff) |
pst-bspline (15oct10)
git-svn-id: svn://tug.org/texlive/trunk@20115 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-bspline/pst-bspline.tex | 109 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pst-bspline/pst-bspline.sty | 16 |
2 files changed, 105 insertions, 20 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-bspline/pst-bspline.tex b/Master/texmf-dist/tex/generic/pst-bspline/pst-bspline.tex index ded6c31d4f4..b5a0b11b139 100644 --- a/Master/texmf-dist/tex/generic/pst-bspline/pst-bspline.tex +++ b/Master/texmf-dist/tex/generic/pst-bspline/pst-bspline.tex @@ -8,8 +8,8 @@ \ifx\PSTricksLoaded\endinput \else\input pstricks.tex\fi \ifx\PSTnodeLoaded\endinput \else\input pst-node.tex\fi \ifx\PSTXKeyLoaded\endinput \else\input pst-xkey \fi -\def\fileversion{1.3} -\def\filedate{2010/09/04} +\def\fileversion{1.4} +\def\filedate{2010/10/14} \message{`pst-bspline' v\fileversion, \filedate\space Bspline routines for pstricks (ms)} % @@ -40,6 +40,8 @@ % showframe key and its default are global \define@boolkey[psset]{pst-bspline}[Pst@]{showframe}[true]{} \psset[pst-bspline]{showframe=false}% +\define@boolkey[psset]{pst-bspline}[Pst@]{reverseclip}[true]{} +\psset[pst-bspline]{reverseclip=false}% % %Bspline drawing macros \def\psBsplineNodes{\def\pst@par{}\pst@object{psBsplineNodes}}% @@ -212,16 +214,21 @@ \def\noderoot{#1}% \pnode(\noderoot 0){\noderoot B0}% \pnode(\noderoot #2){\noderoot B#2}% -\psLCNode(\noderoot 1){6}(\noderoot 0){-1}{\noderoot B1}% 6*S1-S0->SB1 -\multido{\iA=2+1,\iAA=1+1}{\top@mone}{\psLCNodeVar(\noderoot\iA)(\noderoot B\iAA)(! 6 mcoeff \iAA\space get neg ){\noderoot B\iA}}%2 to n-2, 6*S_k-m_{k-1}*SB_{k-1}->SB_k -\psLCNodeVar(\noderoot \the\top@ndx)(\noderoot #2)(! mcoeff \the\top@ndx\space get dup 6 mul exch neg ){tmp@node}%m_{99}*(6*S99-S100)->tmp@node -\psLCNodeVar(tmp@node)(\noderoot B\the\top@mone)(! 1 mcoeff \the\top@ndx\space get mcoeff \the\top@mone\space get mul neg ){\noderoot B\the\top@ndx}% temp@node -m_{98}*m_{99}*SB98->SB99 -\multido{\iA=\the\top@mone+-1,\iAA=\the\top@ndx+-1}{\the\top@mone}{\psLCNodeVar(\noderoot B\iA)(\noderoot B\iAA)(! mcoeff \iA\space get dup neg ){\noderoot B\iA}% m_k*SB_k-m_k*SB_{k+1}->SB_k, k=98 downto 1 -}% end multido +\ifnum\top@mone>\m@ne% at least 3 points to interpolate + \ifnum\top@mone>\z@% we started with 4 or more points to interpolate + \psLCNode(\noderoot 1){6}(\noderoot 0){-1}{\noderoot B1}% 6*S1-S0->SB1 + \multido{\iA=2+1,\iAA=1+1}{\top@mone}{\psLCNodeVar(\noderoot\iA)(\noderoot B\iAA)(! 6 mcoeff \iAA\space get neg ){\noderoot B\iA}}%2 to n-2, 6*S_k-m_{k-1}*SB_{k-1}->SB_k + \psLCNodeVar(\noderoot \the\top@ndx)(\noderoot #2)(! mcoeff \the\top@ndx\space get dup 6 mul exch neg ){tmp@node}%m_{99}*(6*S99-S100)->tmp@node + \psLCNodeVar(tmp@node)(\noderoot B\the\top@mone)(! 1 mcoeff \the\top@ndx\space get mcoeff \the\top@mone\space get mul neg ){\noderoot B\the\top@ndx}% temp@node -m_{98}*m_{99}*SB98->SB99 + \multido{\iA=\the\top@mone+-1,\iAA=\the\top@ndx+-1}{\the\top@mone}{\psLCNodeVar(\noderoot B\iA)(\noderoot B\iAA)(! mcoeff \iA\space get dup neg ){\noderoot B\iA}% m_k*SB_k-m_k*SB_{k+1}->SB_k, k=98 downto 1 + }% end multido + \else% exactly 3 points to interpolate + \nodexn{1.5(\noderoot1)-.25(\noderoot0)-.25(\noderoot2)}{\noderoot B1}% +\fi\fi% }% end def \def\psBsplineInterpC#1#2{% % #1=node name root, #2=top index, - % eg, if we want to interpolate S0,..., S100, #1=100, #2=S + % eg, if we want to interpolate S0,..., S100, #1=S, #2=100 % interpolation in this case is periodic (closed curve) \pst@killglue \newcount\top@mone \top@mone=#2\relax% @@ -269,5 +276,89 @@ ycoeff \iA\space ycoeff \iA\space get mcoeff \iA\space get ycoeff \iB\space get {\noderoot B\iA}}% \pnode(\noderoot B\the\top@ndx){\noderoot B0}% \ignorespaces}% +% +\def\thickBspline{\def\pst@par{}\pst@object{thickBspline}}% +\def\thickBspline@i#1#2#3#4{{% +% #1=root | #2=nsegments | #3=thickness | #4=items to clip + \pst@killglue% + \use@par% + %prepare array + \pssetlength{\pst@dimp}{#3}\pst@dimtonum{\pst@dimp}{\thickness}% thickness in TeX pt + \newcount\n@cnt% + \newcount\np@cnt% + \newcount\ary@max \ary@max=\psk@plotpoints \relax% + \multiply\ary@max #2\np@cnt=\ary@max \multiply\ary@max 4\relax% + \advance\ary@max 4\relax % + \n@cnt=\ary@max \advance\n@cnt \m@ne% + \multiply\np@cnt \tw@\advance\np@cnt \tw@% count of points in array + \pstVerb{ gsave tx@Dict begin % + /psxu \pst@number\psxunit\space def /psyu \pst@number\psyunit\space def % + /uratio psyu psxu div def % so that perp to a, b is -b*uratio a + /nseg #2 def /nplotpt \psk@plotpoints\space def % + /clipary #2 nplotpt mul 4 mul 4 add array def % + /lindex 2 def /uindex \the\ary@max\space 1 sub def % + /dt 1 \psk@plotpoints\space div def % +% /halfthck #3 2 div def % + end grestore }% + \multido{\iA=0+1,\iB=1+1}{#2}{% +% pass control points of this segment to PostScript variables +\pstVerb{% + gsave tx@Dict begin % + STV CP T \psGetNodeCenter{#1\iA}\space \psGetNodeCenter{#1BR\iA}\space \psGetNodeCenter{#1BL\iB}\space \psGetNodeCenter{#1\iB}\space % + /bez@1.x #1\iA.x def /bez@1.y #1\iA.y def %initial point on segment + %(START) = bez@1.x = bez@1.y = SB1.x = % + /bez@2.x #1BR\iA.x bez@1.x sub def %adjusted control points (less init pt) + /bez@2.y #1BR\iA.y bez@1.y sub def % + /bez@3.x #1BL\iB.x bez@1.x sub def % + /bez@3.y #1BL\iB.y bez@1.y sub def % + /bez@4.x #1\iB.x bez@1.x sub def % + /bez@4.y #1\iB.y bez@1.y sub def % + /bez@1x bez@2.x 3 mul def % for position--w1=3z1 + /bez@1y bez@2.y 3 mul def % + /bez@2x bez@3.x bez@2.x 2 mul sub 3 mul def %position w2=3(z2-2z1) + /bez@2y bez@3.y bez@2.y 2 mul sub 3 mul def % + /bez@2xT bez@2x 2 mul def % for tangent + /bez@2yT bez@2y 2 mul def % + /bez@3x bez@4.x bez@2.x bez@3.x sub 3 mul add def % w3=z3+3z1-3z2 + /bez@3y bez@4.y bez@2.y bez@3.y sub 3 mul add def % + /bez@3xT bez@3x 3 mul def % tangent + /bez@3yT bez@3y 3 mul def % + /Func % position + ( bez@3x t mul bez@2x add t mul bez@1x add t mul bez@1.x add psxu mul % + bez@3y t mul bez@2y add t mul bez@1y add t mul bez@1.y add psyu mul ) cvx def % +%/FuncT % tangent +% ( bez@1x t bez@2xT mul add t t bez@3xT mul mul add % +% bez@1y t bez@2yT mul add t t bez@3yT mul mul add ) cvx def +/FuncN % unit normal times delta + ( bez@2yT t bez@3yT mul add t mul bez@1y add uratio mul neg + bez@2xT t bez@3xT mul add t mul bez@1x add 2 copy Pyth dup % + 3 1 roll div 3 1 roll div \thickness\space 2 div dup 3 1 roll mul 3 1 roll mul ) cvx def % + end grestore }% +\ifnum\iA=0 \relax% + \pnode(! /t 0 def FuncN /dy exch def /dx exch def Func 2 copy % + /y0 ED /x0 ED % + clipary 0 x0 dx add put clipary 1 y0 dy add put % + clipary uindex y0 dy sub put clipary uindex 1 sub x0 dx sub put % + /uindex uindex 2 sub def ){tmp@P}% +\fi% +\multido{\i=1+1}{\psk@plotpoints}{% + %make array elements for this segment using #3 + \pnode(! /t dt \i\space mul def FuncN /dy ED /dx ED Func 2 copy /y0 ED /x0 ED % + clipary lindex x0 dx add put clipary lindex 1 add y0 dy add put % + clipary uindex y0 dy sub put clipary uindex 1 sub x0 dx sub put % + /lindex lindex 2 add def /uindex uindex 2 sub def ){tmp@P}% +}% end multido \i +}% end multido \iA +% make a clipping path in PS and pass commands #4 +\psclip{\pscustom{% + \code{ clipary aload pop moveto nseg nplotpt mul 2 mul % + 1 add { lineto } repeat closepath % + \ifPst@reverseclip\space reversepath \fi}}}% + #4 +\endpsclip% +\pstVerb{% +tx@Dict begin % +}}% +\ignorespaces}% \catcode`\@=\TheAtCode\relax \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/pst-bspline/pst-bspline.sty b/Master/texmf-dist/tex/latex/pst-bspline/pst-bspline.sty index 58c9eca005b..6500f4dbefb 100644 --- a/Master/texmf-dist/tex/latex/pst-bspline/pst-bspline.sty +++ b/Master/texmf-dist/tex/latex/pst-bspline/pst-bspline.sty @@ -1,11 +1,5 @@ -\RequirePackage{pstricks} -\ProvidesPackage{pst-bspline}[2007/12/23 package wrapper for - pst-bspline.tex (hv)] -\input{pst-bspline.tex} -%\IfFileExists{pst-bspline.pro}{% -% \ProvidesFile{pst-bspline.pro} -% [2007/03/23 v. 0.01, PostScript prologue file (hv)] -% \@addtofilelist{pst-bspline.pro}}{}% -\ProvidesFile{pst-bspline.tex} - [\filedate\space v\fileversion\space `pst-bspline' (ms)] -\endinput +\ProvidesPackage{pst-bspline} + +\input{pst-bspline} + +\endinput
\ No newline at end of file |