summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgfplots/pgfplots.stackedplots.code.tex
diff options
context:
space:
mode:
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.tex222
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