diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex new file mode 100644 index 00000000000..616c0730726 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex @@ -0,0 +1,231 @@ +%-------------------------------------------- +% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/libs/pgflibrarysurfshading.code.tex,v 1.18 2009/06/26 17:56:58 ludewich Exp $ +% +% Package pgfplots +% +% Provides a user-friendly interface to create function plots (normal +% plots, semi-logplots and double-logplots). +% +% It is based on Till Tantau's PGF package. +% +% Copyright 2007/2008 by Christian Feuersänger. +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +%-------------------------------------------- + +%-------------------------------------------------- +% \pgfqkeys{/pgfplots/surf shading}{ +% cols=3, +% % test colormap 1, +% } +% \pgfplotslibrarysurfstreamstart +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{10pt}}{0} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{100pt}{10pt}}{100} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{180pt}{10pt}}{30} +% % +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{100pt}}{300} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{110pt}{90pt}}{1000} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{190pt}{110pt}}{600} +% % +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{200pt}}{0} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{110pt}{200pt}}{100} +% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{190pt}{200pt}}{60} +% \pgfplotslibrarysurfstreamend +% \fbox{% +% \pgfplotslibrarysurfdraw +% }% +%-------------------------------------------------- + + +\pgfkeys{% + % the extends need to provided as \pgfpoint... The boundary box + % won't be computed manually! + /pgfplots/surf shading/south west corner/.initial={\pgfpointorigin},% + /pgfplots/surf shading/north east corner/.initial={\pgfqpoint{6cm}{6cm}},% + /pgfplots/surf shading/anchor/.initial=\pgfpointorigin,% + /pgfplots/surf shading/precision/.is choice, + /pgfplots/surf shading/precision/pdf/.code={% + % Lossless coordinate output. + \def\pgfplotslibrarysurf@bitspercoordinate{32}% + \def\pgfplotslibrarysurf@bytespercoordinate{4}% + \def\pgfplotslibrarysurf@filter@encode{}% raw binary. + \def\pgfplotslibrarysurf@filter@decode{}% + },% + /pgfplots/surf shading/precision/ps/.code={% + % quantized coordinate output (introduces quantization error). + \def\pgfplotslibrarysurf@bitspercoordinate{24}% + \def\pgfplotslibrarysurf@bytespercoordinate{3}% + % doesn't improve behavior of pdf2ps: + %\def\pgfplotslibrarysurf@filter@encode{ASCIIHexEncode}% + %\def\pgfplotslibrarysurf@filter@decode{ASCIIHexDecode}% + \def\pgfplotslibrarysurf@filter@encode{}% raw binary. + \def\pgfplotslibrarysurf@filter@decode{}% + },% + /pgfplots/surf shading/precision/postscript/.style={% + /pgfplots/surf shading/precision/ps},% + /pgfplots/surf shading/precision/ps,% + /pgfplots/surf shading/cols/.initial=,% + /pgfplots/surf shading/colormap/.initial={% + << + /FunctionType 2 + /Domain [0 1] + /C0 [0 0 1] /C1 [1 0 0] /N 1 + >> + },% + /pgfplots/surf shading/test colormap 1/.style={% + /pgfplots/surf shading/colormap={ + << + /FunctionType 3 + /Domain [0 1] + /Functions [ + << + /FunctionType 2 + /Domain [0 1] + /C0 [0 0 1] /C1 [1 1 0] /N 1 + >> + << + /FunctionType 2 + /Domain [0 1] + /C0 [1 1 0] /C1 [1 0.5 0] /N 1 + >> + << + /FunctionType 2 + /Domain [0 1] + /C0 [1 0.5 0] /C1 [1 0 0] /N 1 + >> + ] + /Bounds [ 0.3 0.6 ] + /Encode [0 1 0 1 0 1] + %/Range [0 1 0 1 0 1] INCOMPATIBLE WITH ACROBAT 6.0 + >> + }% + },% +}% + +\def\pgfplotslibrarysurf@corner@sw{\pgfkeysvalueof{/pgfplots/surf shading/south west corner}} +\def\pgfplotslibrarysurf@corner@ne{\pgfkeysvalueof{/pgfplots/surf shading/north east corner}}% + + +\def\pgfplotslibrarysurf@decode{% + -16383.999992 16384 % see the docs of \pgfplotsbinaryencodedimenmaplinearly + -16383.999992 16384 % + 0 \pgfplotscolormappdfmax % map [0,2^BitsPerComponent-1] linearly to [0 1] for parametric color data +}% +\def\pgfplotslibrarysurf@count{0}% + +% driver specific: +\def\pgfplotslibrarysurf@initstream{} +\def\pgfplotslibrarysurf@advancestreamlen#1{}% + +\def\pgfplotslibrarysurfstreamstart{% + \pgfplotsapplistXnewempty\pgfplotslibrarysurf@binarystream@accum + \pgfplotslibrarysurf@initstream + \ifx\pgfplotslibrarysurf@filter@encode\pgfutil@empty + \else + \pgfkeysalso{/pgfplots/bin/\pgfplotslibrarysurf@filter@encode}% + \fi +}% +\def\pgfplotslibrarysurfstreamend{% + \pgfplotsapplistXlet\pgfplotslibrarysurf@binarystream=\pgfplotslibrarysurf@binarystream@accum +}% + +% #1: a pgf point. +% #2: a color coordinate in the range [0,1000] +\def\pgfplotslibrarysurfstreamcoord#1#2{% + \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercoordinate% + \pgf@process{#1}% + % The idea is to map + % the low-level point coordinates LINEARLY into [0,2^{8*<bytes>}]. + % + % This is what the pdf standard expects for surface shadings. + % + % To do that, we simply map + % [-16384,16384] linearly into [0,2^{32}] + % and write the resulting integer in big endian binary format to + % the pdf low level stream. + % + % The decode procedure tells the pdf viewer how to invert that + % stuff. + % + \pgf@sys@bp@correct\pgf@x% + \pgfplotsbinaryencodedimenmaplinearly\pgf@x +%\message{POINT \the\c@pgfplots@scanlineindex: ENCODING(x=\the\pgf@x)=\pgfplotsbinaryresult.}\advance\c@pgfplots@scanlineindex by1 + \t@pgfplots@toka=\expandafter{\pgfplotsbinaryresult}% + \pgf@sys@bp@correct\pgf@y% + \pgfplotsbinaryencodedimenmaplinearly\pgf@y +%\message{ENCODING(y=\the\pgf@y)=\pgfplotsbinaryresult.}% + \t@pgfplots@tokb=\expandafter{\pgfplotsbinaryresult}% + {% + % read fixed point input (in the range [0,1000]). + \pgf@xa=#2pt + % convert to integer (= *65536): + \c@pgf@counta=\pgf@xa + % provide map [0,1000] -> [0,2^16-1] + \divide\c@pgf@counta by1000 + % now, we have \c@pgf@counta in [0,2^16]. Simply strip it into + % the required range, that's ok. + \ifnum\c@pgf@counta<0 + \c@pgf@counta=0 + \else + \ifnum\c@pgf@counta>65535 + \c@pgf@counta=65535 + \fi + \fi + % Now, we have CDATA in the range [0,65535] + \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% +%\message{ENCODING(C=\pgfplots@glob@TMPa\space for \the\pgf@xa)=}% + }% + \pgfplotsbinarysetbytes2% + \pgfplotsbinaryencodeunsigned\pgfplots@glob@TMPa +%\message{\pgfplotsbinaryresult.}% + \t@pgfplots@tokc=\expandafter{\pgfplotsbinaryresult}% + \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% + \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum + \pgfplotslibrarysurf@advancestreamlen{10}% +} + +\def\pgfplotslibrarysurfactivateshadefill{% + \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa% + \expandafter\pgfutil@addpdfresource@patterns\expandafter{\pgfplots@loc@TMPa}%% +} + +%-------------------------------------------------- +% \def\pgfplotslibrarysurfdraw{% +% % \pgftext[at=\pgfqpoint{0pt}{0pt}]% +% {\pgfplotssys@do@surfshading}% +% }% +%-------------------------------------------------- + +\def\pgfplotslibrarysurfdrawinpicture{% + \begingroup + \pgftransformshift{\pgfplotslibrarysurf@corner@sw}% + \pgftext[at=\pgfqpoint{0pt}{0pt},left,bottom] {% + \pgfplotslibrarysurfdraw +% this does NOT work because I can't undo the box' shift: +%\pgfplotssys@do@surfshading + }% + \endgroup +} + +\pgfplotsiffileexists{pgflibrarypgfplots.surfshading.\pgfsysdriver}{% + \input pgflibrarypgfplots.surfshading.\pgfsysdriver\relax + \def\pgflibrarysurfshadingifactive#1#2{#1}% +}{% + \def\pgfplotslibrarysurfdraw{% + \pgfplots@error{Sorry, surfshading (shader=interp) is NOT available for the selected driver `\pgfsysdriver'.}% + }% + \def\pgflibrarysurfshadingifactive#1#2{#2}% +} +\endinput |