diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex | 222 |
1 files changed, 146 insertions, 76 deletions
diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex index 90ca205c835..14b81c1a7c4 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex @@ -130,23 +130,47 @@ \fi \fi \def\pgfplots@stacked@getnextzerolevelpoint{}% will remain constant anyway. + \ifpgfplots@curplot@threedim + \def\pgfplots@stacked@zerolevelpoint@z{0}% + \ifpgfplots@datascaletrafo@initialised + \else + \ifpgfplots@zislinear + \pgfmathfloatcreate{0}{0.0}{0}% + \let\pgfplots@stacked@zerolevelpoint@z=\pgfmathresult + \fi + \fi + \fi \else {\globaldefs=1 \pgfplotslistcopy\pgfplots@stacked@nextzerolevellist\to\pgfplots@stacked@zerolevellist }% - \def\pgfplots@stacked@getnextzerolevelpoint{% - {\globaldefs=1 - \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult + \ifpgfplots@curplot@threedim + \def\pgfplots@stacked@getnextzerolevelpoint{% + {\globaldefs=1 + \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult + }% + \expandafter\pgfplots@stacked@parsezerolevelpoint@threedim\pgfmathresult\relax }% - \expandafter\pgfplots@stacked@parsezerolevelpoint\pgfmathresult - }% + \else + \def\pgfplots@stacked@getnextzerolevelpoint{% + {\globaldefs=1 + \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult + }% + \expandafter\pgfplots@stacked@parsezerolevelpoint\pgfmathresult\relax + }% + \fi \fi \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist }% -\def\pgfplots@stacked@parsezerolevelpoint(#1,#2){% +\def\pgfplots@stacked@parsezerolevelpoint(#1,#2)\relax{% + \def\pgfplots@stacked@zerolevelpoint@x{#1}% + \def\pgfplots@stacked@zerolevelpoint@y{#2}% +} +\def\pgfplots@stacked@parsezerolevelpoint@threedim(#1,#2,#3)\relax{% \def\pgfplots@stacked@zerolevelpoint@x{#1}% \def\pgfplots@stacked@zerolevelpoint@y{#2}% + \def\pgfplots@stacked@zerolevelpoint@z{#3}% } \def\pgfplots@stacked@endplot{% @@ -168,7 +192,7 @@ % \ifpgfplots@stacked@isfirstplot NOR the zero level lists are % initialised! \def\pgfplots@stacked@initzerolevelhandler{% - \ifpgfplots@stacked@x + \if\pgfplots@stacked@dir x \pgfplotxzerolevelstream@@list \pgfplotyzerolevelstreamconstant{\pgfplots@ZERO@y}% \else @@ -177,16 +201,25 @@ \fi }% +% #1: a point as (x,y) (or (x,y,z) ) \def\pgfplots@stacked@rememberzerolevelpoint@for@next@plot#1{% \edef\pgfplots@loc@TMPa{#1}% \expandafter\pgfplotslistpushbackglobal\pgfplots@loc@TMPa\to\pgfplots@stacked@nextzerolevellist } -\def\pgfplots@stacked@finishpoint#1#2{% +% PRECONDITION: +% Is in invoked inside of a coord preparation routine, that means +% - \pgfplots@current@point@[xyz] +% - \ifpgfplots@curplot@threedim +% are all set properly. +\def\pgfplots@stacked@finishpoint{% \ifpgfplots@stacked@isfirstplot \else + % FIXME : This needs to be converted to logical coords. + % + % FIXME : 3D is not supported by the low level plot interface (yet). \pgfpointxy{\pgfplots@stacked@zerolevelpoint@x}{\pgfplots@stacked@zerolevelpoint@y}% - \ifpgfplots@stacked@x + \if\pgfplots@stacked@dir x \edef\pgfplots@loc@TMPa{\the\pgf@x}% \else \edef\pgfplots@loc@TMPa{\the\pgf@y}% @@ -199,46 +232,42 @@ \fi }% -\def\pgfplots@stacked@preparepoint@inmacro#1#2{% +% PRECONDITION: +% Is in invoked inside of a coord preparation routine, that means +% - \pgfplots@current@point@[xyz] +% - \ifpgfplots@curplot@threedim +% are all set properly. +% +% POSTCONDITION: +% - \pgfplots@current@point@[xyz] are adjusted. +\def\pgfplots@stacked@preparepoint@inmacro{% \pgfplots@stacked@getnextzerolevelpoint - \ifpgfplots@stacked@x - \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmathadd@ - \else - \let\pgfplots@stacked@op=\pgfmathsubtract@ - \fi - \ifpgfplots@xislinear - \ifpgfplots@datascaletrafo@initialised - \else - \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmathfloatadd@ - \else - \let\pgfplots@stacked@op=\pgfmathfloatsubtract@ - \fi - \fi - \fi - \pgfplots@stacked@op{\pgfplots@stacked@zerolevelpoint@x}{#1}% - \let#1=\pgfmathresult + \ifpgfplots@stacked@plus + \let\pgfplots@stacked@op=\pgfmathadd@ \else - \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmathadd@ + \let\pgfplots@stacked@op=\pgfmathsubtract@ + \fi + \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{% + \ifpgfplots@datascaletrafo@initialised \else - \let\pgfplots@stacked@op=\pgfmathsubtract@ - \fi - \ifpgfplots@yislinear - \ifpgfplots@datascaletrafo@initialised + \ifpgfplots@stacked@plus + \let\pgfplots@stacked@op=\pgfmathfloatadd@ \else - \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmathfloatadd@ - \else - \let\pgfplots@stacked@op=\pgfmathfloatsubtract@ - \fi + \let\pgfplots@stacked@op=\pgfmathfloatsubtract@ \fi \fi - \pgfplots@stacked@op{\pgfplots@stacked@zerolevelpoint@y}{#2}% - \let#2=\pgfmathresult + }{}% + \edef\pgfplots@loc@TMPa{ + \noexpand\pgfplots@stacked@op + {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}% + {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}}% + \pgfplots@loc@TMPa + \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult + \ifpgfplots@curplot@threedim + \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% + \else + \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y)}% \fi - \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(#1,#2)}% } % This here is a re-implementation of the stored plot processing. @@ -301,13 +330,13 @@ % preparation commands to ensure the functionality of % \pgfplots@stacked@finalize@stored@plots % -% Instead, it generates a macro #4 which - if used as "precommand" -% befor a draw operation - restores all required options and performs +% The macro #4 will - if used as "precommand" +% befor a draw operation - restore all required options and performs % pre-drawing. -\long\def\pgfplots@stacked@finalize@stored@coords@START plot coordinates #1#2;\to#3#4{% +\long\def\pgfplots@stacked@finalize@stored@coords@START normalized coordinates #1#2;\to#3#4{% \pgfplots@stacked@beginplot \pgfplots@coord@stream@INIT@finalize@stackedcoords@recordto{#3}{\pgfplots@recorded@marker@stream}% - \pgfplots@coord@stream@foreach{#1}% + \pgfplots@coord@stream@foreach@NORMALIZED{#1}% \pgfplots@stacked@endplot \pgfplots@stacked@savestateto\pgfplots@loc@TMPa \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa\def\pgfplots@stacked@stored@postpath{#2}}% @@ -345,43 +374,82 @@ \global\let#2=\pgfplots@loc@TMPa \fi }% + % + \begingroup + \let\E=\noexpand + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \pgfplots@coord@stream@INIT@finalize@storedcoords@prepare@scaletrafomacro + % Will be inserted in one of two possible places below: + \def\pgfplots@loc@TMPa{% + \E\edef\E\pgfmathresult{\E\noexpand\E\pgfplots@stream{\E\the\E\pgf@x}{\E\the\E\pgf@y}}% + \E\expandafter\E\pgfplotsapplistXpushback\E\expandafter{\E\pgfmathresult}\E\to\E\pgfplots@stacked@record@mark@cmds%% + }% + % This finalize command maps the logical coordinate into PGF's + % point space. Furthermore, it collects marker coordinates + % (properly clipped by position) if markers are required (see + % above). + % + % It is prepared here to eliminate if's. + \xdef\pgfplots@coord@stream@finalize@currentpt{% + \ifpgfplots@curplot@threedim + \E\pgfplotsqpointxyz{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}{\E\pgfplots@current@point@z}% + \else + \ifpgfplots@threedim + \E\pgfplotsqpointxyz{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}{0.0}% + \else + \E\pgfplotsqpointxy{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}% + \fi + \fi + \E\edef\E\pgfmathresult{{\E\the\E\pgf@x}{\E\the\E\pgf@y}}% + \E\t@pgfplots@toka=\E\expandafter{\E#1}% + \E\t@pgfplots@tokb=\E\expandafter{\E\pgfmathresult}% + \E\xdef\E#1{\E\the\E\t@pgfplots@toka + \E\noexpand\E\pgfplots@stream\E\the\E\t@pgfplots@tokb}% + % + \ifpgfplots@record@marker@stream + \E\pgf@xa=\E\pgfplots@current@point@x pt % FIXME : SCOPE REGISTERS!? + \E\pgf@ya=\E\pgfplots@current@point@y pt % + \ifpgfplots@curplot@threedim + \E\pgf@yb=\E\pgfplots@current@point@z pt % + \fi + \E\ifdim\E\pgf@xa<\E\pgfplots@xmin@reg + \E\else + \E\ifdim\E\pgf@xa>\E\pgfplots@xmax@reg + \E\else + \E\ifdim\E\pgf@ya<\E\pgfplots@ymin@reg + \E\else + \E\ifdim\E\pgf@ya>\E\pgfplots@ymax@reg + \E\else + \ifpgfplots@curplot@threedim + \E\ifdim\E\pgf@yb<\E\pgfplots@zmin@reg + \E\else + \E\ifdim\E\pgf@yb>\E\pgfplots@zmax@reg + \E\else + \pgfplots@loc@TMPa + \E\fi + \E\fi + \else + \pgfplots@loc@TMPa + \fi + \E\fi + \E\fi + \E\fi + \E\fi + \fi + }% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \endgroup + % \ifpgfplots@apply@datatrafo - \def\pgfplots@coord@stream@coord@##1##2##3##4{% - \pgfplots@apply@data@scaletrafo@to@one@point{##1}{##2}{##3}{##4}% + \def\pgfplots@coord@stream@coord@{% + \pgfplots@apply@data@scaletrafo@to@one@point% \pgfplots@coord@stream@finalize@currentpt }% \else - \def\pgfplots@coord@stream@coord@##1##2##3##4{% - \def\pgfplots@current@point@x{##1}% - \def\pgfplots@current@point@y{##2}% + \def\pgfplots@coord@stream@coord@{% \pgfplots@coord@stream@finalize@currentpt }% \fi - \def\pgfplots@coord@stream@finalize@currentpt{% - \pgfqpointxy{\pgfplots@current@point@x}{\pgfplots@current@point@y}% - \edef\pgfmathresult{{\the\pgf@x}{\the\pgf@y}}% - \t@pgfplots@toka=\expandafter{#1}% - \t@pgfplots@tokb=\expandafter{\pgfmathresult}% - \xdef#1{\the\t@pgfplots@toka - \noexpand\pgfplots@stream\the\t@pgfplots@tokb}% - % - \ifpgfplots@record@marker@stream - \ifdim\pgf@x<\pgfplots@xcoordminTEX - \else - \ifdim\pgf@x>\pgfplots@xcoordmaxTEX - \else - \ifdim\pgf@y<\pgfplots@ycoordminTEX - \else - \ifdim\pgf@y>\pgfplots@ycoordmaxTEX - \else - \edef\pgfmathresult{\noexpand\pgfplots@stream{\the\pgf@x}{\the\pgf@y}}% - \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfplots@stacked@record@mark@cmds% - \fi - \fi - \fi - \fi - \fi - }% } % This command gets called after the sequence reversal has been done. @@ -407,12 +475,14 @@ \ifx\pgfplots@recorded@marker@stream\pgfutil@empty \else \ifpgfplots@clip@marker@paths + \scope% make sure that 'fill opacity' and 'dotted' styles remain local! \pgfplots@stored@current@cmd[current plot style] \pgfextra \pgfplots@install@plotmark@handler \pgfplots@recorded@marker@stream \endpgfextra ; + \endscope \else \pgfplots@stored@REMEMBER@MARK@COMMAND \fi |