diff options
Diffstat (limited to 'graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex')
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex b/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex new file mode 100644 index 0000000000..53b2345838 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex @@ -0,0 +1,472 @@ +%% +%% This is Package `pst-fill' +%% +%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr> +%% Herbert Voss <hvoss@tug.org> +%% (C) 2003-2021 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% DESCRIPTION: +%% `pst-fill' is a PSTricks package for filling and tiling areas +%% +%% \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5, +%% addfillstyle=boxfill](2,2){2} +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi +\def\fileversion{1.02} +\def\filedate{2021/10/01} +\message{`PST-Fill' v\fileversion, \filedate\space (tvz,dg,hv)} +\csname PSTboxfillLoaded\endcsname +\let\PSTboxfillLoaded\endinput +\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax + +\pst@addfams{pst-fill} +\def\pst@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{% + \begingroup + \ifx\@empty#7\relax + \pst@dima\z@ + \pst@dimb\z@ + \pssetxlength\pst@dimc{#2}% + \pssetylength\pst@dimd{#3}% + \else + \pssetxlength\pst@dima{#2}% + \pssetylength\pst@dimb{#3}% + \pssetxlength\pst@dimc{#5}% + \pssetylength\pst@dimd{#6}% + \fi + \xdef\pst@tempg{% + \pst@dima=\number\pst@dima sp + \pst@dimb=\number\pst@dimb sp + \pst@dimc=\number\pst@dimc sp + \pst@dimd=\number\pst@dimd sp }% + \endgroup + \let\psk@boxfillsize\pst@tempg} + +\define@key[psset]{pst-fill}{boxfillsize}{% + \def\pst@tempg{#1}\def\pst@temph{auto}% + \ifx\pst@tempg\pst@temph + \let\psk@boxfillsize\relax + \else + \pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil + \fi} +\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}} +\define@key[psset]{pst-fill}{boxfillcolor}{\pst@getcolor{#1}\psboxfillcolor} +\psset{boxfillcolor=black}% hv +\define@key[psset]{pst-fill}{boxfillangle}{\pst@getangle{#1}\psk@boxfillangle} +\psset{boxfillangle=0} +\define@key[psset]{pst-fill}{fillsepx}{\pst@getlength{#1}\psk@fillsepx} +\define@key[psset]{pst-fill}{fillsepy}{\pst@getlength{#1}\psk@fillsepy} +\define@key[psset]{pst-fill}{fillsep}{% + \pst@getlength{#1}\psk@fillsepx% + \let\psk@fillsepy\psk@fillsepx} +\psset{fillsep=2pt} + +\ifx\PstTiling\@undefined + \define@key[psset]{pst-fill}{fillcycle}{\pst@getint{#1}\psk@fillcycle} + \psset{fillcycle=0} +\else + \define@key[psset]{pst-fill}{fillangle}{\pst@getangle{#1}\psk@boxfillangle} + \define@key[psset]{pst-fill}{fillsize}{% + \def\pst@tempg{#1}\def\pst@temph{auto}% + \ifx\pst@tempg\pst@temph\let\psk@boxfillsize\relax + \else\pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil\fi} + \psset{fillsep=0,fillsize=auto} + \define@key[psset]{pst-fill}{fillcyclex}{\pst@getint{#1}\psk@fillcyclex} + \define@key[psset]{pst-fill}{fillcycley}{\pst@getint{#1}\psk@fillcycley} + \define@key[psset]{pst-fill}{fillcycle}{% + \pst@getint{#1}\psk@fillcyclex\let\psk@fillcycley\psk@fillcyclex} + \psset{fillcycle=0} + \define@key[psset]{pst-fill}{fillmovex}{\pst@getlength{#1}\psk@fillmovex} + \define@key[psset]{pst-fill}{fillmovey}{\pst@getlength{#1}\psk@fillmovey} + \define@key[psset]{pst-fill}{fillmove}{% + \pst@getlength{#1}\psk@fillmovex\let\psk@fillmovey\psk@fillmovex} + \psset{fillmove=0pt} + \define@key[psset]{pst-fill}{fillloopaddx}{\pst@getint{#1}\psk@fillloopaddx} + \define@key[psset]{pst-fill}{fillloopaddy}{\pst@getint{#1}\psk@fillloopaddy} + \define@key[psset]{pst-fill}{fillloopadd}{% + \pst@getint{#1}\psk@fillloopaddx\let\psk@fillloopaddy\psk@fillloopaddx} + \psset{fillloopadd=0} +%% \define@key[psset]{pst-fill}{PstDebug}{\pst@getint{#1}\psk@PstDebug} + \psset{PstDebug=0} +\fi + +\def\pstFillSetDefaults{% + \psset{% + boxfillsize={(-15cm,-15cm)(15cm,15cm)}, + boxfillcolor=black, + boxfillangle=0, + fillsep=2pt, + fillsep=0,fillsize=auto, + fillcycle=0, + fillmove=0pt, + fillloopadd=0, + PstDebug=0}% +} + + +\def\txfillDict{ fill@Dict begin } + +\newbox\pst@fillbox +\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i} +\def\psboxfill@i{\null\setbox\pst@fillbox\box\pst@hbox\ignorespaces}% \null to prevent empty page +\def\psfs@boxfill{% + \ifvoid\pst@fillbox + \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa + \else + \ifx\psk@boxfillsize\relax \pst@AutoBoxFill + \else\pst@ManualBoxFill\fi + \fi} + +\def\pst@ManualBoxFill{% + \leavevmode + \begingroup + \pst@FlushCode + \begin@psclip + \pstVerb{clip}% + \expandafter\pst@AddFillBox\psk@boxfillsize + \end@psclip + \endgroup} + +\def\pst@FlushCode{% + \pst@Verb{% + /mtrxc CM def + CP CP T + \tx@STV + \psk@origin + \psk@swapaxes + \pst@newpath + \pst@code + mtrxc setmatrix + moveto + 0 setgray}% + \gdef\pst@code{}} + +\def\pst@AddFillBox#1 #2 #3 #4 {% + \begingroup + \setbox\pst@fillbox=\vbox{% + \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}% + \vskip\psk@fillsepy\p@}% + \psk@boxfillsize + \pst@cnta=\pst@dimc + \advance\pst@cnta-\pst@dima + \divide\pst@cnta\wd\pst@fillbox + \pst@cntb=\pst@dimd + \advance\pst@cntb-\pst@dimb + \pst@dimd=\ht\pst@fillbox + \divide\pst@cntb\pst@dimd + \def\pst@@tempA{% + \pst@tempg + \copy\pst@fillbox + \advance\pst@cntc\@ne + \ifnum\pst@cntc<\pst@cntd\expandafter\pst@@tempA\fi}% + \let\pst@tempg\relax + \pst@cntc-\tw@ + \pst@cntd\pst@cnta + \setbox\pst@fillbox=\hbox to \z@{% + \kern\pst@dima + \kern-\wd\pst@fillbox + \pst@@tempA + \hss}% + \pst@cntd\pst@cntb +%% DG modification begin - Dec. 11, 1997 - Patch 2 + \ifx\PstTiling\@undefined + \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi + \else + \ifnum\psk@fillcyclex=\z@\pst@ManualFillCycle\fi + \fi +%% DG modification end + \global\setbox\pst@boxg=\vbox to\z@{% + \offinterlineskip + \vss + \pst@@tempA + \vskip\pst@dimb}% + \endgroup + \setbox\pst@fillbox\box\pst@boxg + \pst@rotate\psk@boxfillangle\pst@fillbox + \box\pst@fillbox} + +\def\pst@ManualFillCycle{% + \ifx\PstTiling\@undefined + \pst@cntg=\psk@fillcycle + \else + \pst@cntg=\psk@fillcyclex + \fi + \pst@dimg=\wd\pst@fillbox + \ifnum\pst@cntg=\z@ + \else + \divide\pst@dimg\pst@cntg + \fi + \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi + \advance\pst@cntg\m@ne + \pst@cnth=\pst@cntg + \def\pst@tempg{% + \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi + \moveright\pst@cnth\pst@dimg}} + +\ifx\PstTiling\@undefined + \pst@def{AutoFillCycle}<% + fill@Dict begin + /c ED + /n 0 def + /s { + /x x w c div n mul add def + /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def + } def + end + > +\pst@def{BoxFill}<% + fill@Dict begin + gsave + gsave \tx@STV CM grestore dtransform CM idtransform + abs /h ED abs /w ED + pathbbox + h div round 2 add cvi /y2 ED + w div round 2 add cvi /x2 ED + h div round 2 sub cvi /y1 ED + w div round 2 sub cvi /x1 ED + /y2 y2 y1 sub def + /x2 x2 x1 sub def + CP + y1 h mul sub neg /y1 ED + x1 w mul sub neg /x1 ED + clip + y2 { + /x x1 def + s + x2 { + save CP x y1 + \ifx\VTeXversion\undefined + \else + neg + \fi + T moveto Box restore + /x x w add def + } repeat + /y1 y1 h add def + } repeat + % Next line not useful... To see that, suppress clipping (DG) + CP x y1 T moveto Box + end + currentpoint currentfont grestore setfont moveto + > +\else% Tiling is defined ----------------------------------- + \pst@def{AutoFillCycleX}< +% fill@Dict begin + /cX ED + /nX 0 def + /CycleX { + /x x w cX div nX mul add def + /nX nX cX abs 1 sub lt { nX 1 add } { 0 } ifelse def + } def +% end + > + \pst@def{AutoFillCycleY}<% +% fill@Dict begin + /cY ED + /mY 0 def + /nY 0 def + /CycleY { + /y1 y1 h cY div mY mul sub def + nY cY abs 1 sub lt { /nY nY 1 add def /mY 1 def } + { /nY 0 def /mY cY abs 1 sub neg def } ifelse + } def +% end + > + \pst@def{BoxFill}< + \ifPSTlualatex + /save /gsave load def + /restore /grestore load def + fill@Dict begin + \fi + gsave + gsave \tx@STV CM grestore dtransform CM idtransform + abs /h ED abs /w ED + pathbbox + \ifPSTlualatex + h div 2 add cvi /y2 ED + w div 2 add cvi /x2 ED + h div 2 sub cvi /y1 ED + w div 2 sub cvi /x1 ED + \else + h div round 2 add cvi /y2 ED + w div round 2 add cvi /x2 ED + h div round 2 sub cvi /y1 ED + w div round 2 sub cvi /x1 ED + \fi + /CoefLoopX 0 def + /CoefLoopY 0 def + /CoefMoveX 0 def + /CoefMoveY 0 def + \psk@boxfillangle\space 0 ne {/CoefLoopX 8 def /CoefLoopY 8 def} if + \psk@fillcyclex\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if + \psk@fillcycley\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if + \psk@fillmovex\space 0 ne + {/CoefLoopX CoefLoopX 2 add def + \psk@fillmovex\space 0 gt {/CoefMoveX CoefLoopX def} + {/CoefMoveX CoefLoopX neg def} ifelse} if + \psk@fillmovey\space 0 ne + {/CoefLoopY CoefLoopY 2 add def + \psk@fillmovey\space 0 gt {/CoefMoveY CoefLoopY def} + {/CoefMoveY CoefLoopY neg def} ifelse} if + \psk@fillsepx\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if + \psk@fillsepy\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if + /CoefLoopX CoefLoopX \psk@fillloopaddx\space add def + /CoefLoopY CoefLoopY \psk@fillloopaddy\space add def + /x2 x2 x1 sub 4 sub CoefLoopX 2 mul add def + /y2 y2 y1 sub 4 sub CoefLoopY 2 mul add def + %% We must fix the origin of tiling, as it must not vary according other stuff in the page! + w x1 CoefLoopX add CoefMoveX add mul + h y1 y2 add 1 sub CoefLoopY sub CoefMoveY sub mul moveto + CP + y1 h mul sub neg /y1 ED + x1 w mul sub neg /x1 ED + \Pst@Debug 0 eq {clip} if + \psk@fillmovex\space \psk@fillmovey + gsave \tx@STV CM grestore + dtransform CM idtransform + /hmove ED /wmove ED + /row 0 def + y2 { + /row row 1 add def + /column 0 def + /x x1 def + CycleX + save + x2 { + /column column 1 add def + CycleY + save CP x y1 + \ifPSTlualatex neg \fi + T moveto Box restore + /x x w add def + 0 hmove translate + } repeat + restore + /y1 y1 h add def + wmove 0 translate + } repeat + currentpoint + currentfont + grestore + setfont + moveto + \ifPSTlualatex end \fi + > +\fi % edn of tiling=true + +\ifPSTlualatex + \def\pst@AutoBoxFill{% + \leavevmode + \begingroup + \pst@stroke + \pst@FlushCode + \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}% + \pstVerb{ + \pst@dict /Box [ /gsave cvx currentpoint /translate cvx \luaPSTbox\hbox{% + \ifx\PstTiling\@undefined + \else + \ifx\pst@tempa\@undefined % Undefined for instance for \pscharpath + \else\ifx\pst@tempa\@empty\else + \def\pst@temph{0}% + \ifx\pst@tempa\pst@temph + \else + \fi + \fi\fi + \fi + \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}% + } /.TeXBox findresource /grestore cvx ] cvx def + \ifx\PstTiling\@undefined + \ifnum\psk@fillcycle=\z@ + /s {} def + \else + \psk@fillcycle \tx@AutoFillCycle + \fi + \else + \ifnum\psk@fillcyclex=\z@ + /CycleX {} def + \else + \psk@fillcyclex\space \tx@AutoFillCycleX + \fi + \ifnum\psk@fillcycley=\z@ + /CycleY {} def + \else + \psk@fillcycley\space \tx@AutoFillCycleY + \fi + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx\space add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy\space add add + \tx@BoxFill + end + }% + \pst@Verb{\tx@RotEnd}% + \endgroup} +\else%%%%%%%%%%%%%%% latex->dvips definition + \def\pst@AutoBoxFill{% + \leavevmode + \begingroup + \pst@stroke + \pst@FlushCode + \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}% + \pstVerb{\pst@dict /Box \pslbrace end}% + \ifx\PstTiling\@undefined + \else + \ifx\pst@@tempA\@undefined % Undefined for instance for \pscharpath + \else\ifx\pst@@tempA\@empty\else + \def\pst@temph{0}% + \ifx\pst@@tempA\pst@temph + \else + \pstVerb{/TR {pop pop currentpoint translate \pst@@tempA\space translate } def}% + \fi + \fi\fi + \fi + \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}% + \ifx\PstTiling\@undefined + \pstVerb{% + tx@Dict begin \psrbrace def + \ifnum\psk@fillcycle=\z@ + /s {} def + \else + \psk@fillcycle \tx@AutoFillCycle + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx\space add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy\space add add + \tx@BoxFill + end}% + \else + \pstVerb{% + tx@Dict begin \psrbrace def + \ifnum\psk@fillcyclex=\z@ + /CycleX {} def + \else + \psk@fillcyclex\space \tx@AutoFillCycleX + \fi + \ifnum\psk@fillcycley=\z@ + /CycleY {} def + \else + \psk@fillcycley\space \tx@AutoFillCycleY + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx\space add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy\space add add + \tx@BoxFill + end}% + \fi + \pst@Verb{\tx@RotEnd}% + \endgroup} +\fi +% +\catcode`\@=\PstAtCode\relax +\endinput +%% +%% End of file `pst-fill.tex'. |