summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex')
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex86
1 files changed, 76 insertions, 10 deletions
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
index bad6354b2f..4f138c8077 100644
--- a/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
@@ -1952,6 +1952,7 @@
\newif\ifpgfplotsplothandlercontour@labels
\newif\ifpgfplotsplothandlercontour@filled
+\newif\ifpgfplotsplothandlercontour@corners
\def\pgfplotsplothandlercontour@axis@set@inverse#1#2#3#4{%
\pgfplotsutilifstringequal{#1}{#4}{%
@@ -2041,6 +2042,8 @@
contour/contour label style/.style={
/pgfplots/contour/every contour label/.append style={#1}},
%
+ contour/corners/.is if=pgfplotsplothandlercontour@corners,
+ contour/corners=false,
%
% Styles to actually *compute* the contour.
% These are mostly placeholders here: As long as the
@@ -2090,6 +2093,16 @@
contour external/script extension/.initial=script,
contour external/script/.initial=,% not yet initialised
contour external/cmd/.initial=,% not yet initialised
+ contour external/script type/.is choice=,%
+ contour external/script type/system call/.code={\def\pgfplotsplothandlercontourexternal@script@type{S}},%
+ contour external/script type/lua/.code={\def\pgfplotsplothandlercontourexternal@script@type{L}\pgfkeyssetvalue{/pgfplots/contour external/script extension}{lua}},%
+ contour external/script type/system call,%
+ contour external/script input format/.is choice,%
+ contour external/script input format/x y meta meta/.code={\def\pgfplotsplothandlercontourexternal@script@input@format{M}},%
+ contour external/script input format/x y z meta/.code={\def\pgfplotsplothandlercontourexternal@script@input@format{Z}},%
+ contour external/script input format=x y meta meta,%
+ contour external/@before cmd/.initial=,
+ contour external/@after cmd/.initial=,
contour external/.search also=/pgfplots/contour,
contour gnuplot/.style={
contour external={%
@@ -2684,6 +2697,7 @@
\else
\pgfplotsset{plot to file/scanline marks/if in input}% the choice 'always' is unaware of existing end-of-scanline marks
\fi
+ %
\pgfplotsplothandlertofile{\pgfplotsplothandlercontourexternal@file.dat}%
\pgfplotsplothandlersurveystart
\let\pgfplotsplothandlersurveypoint@tofile=\pgfplotsplothandlersurveypoint
@@ -2694,6 +2708,10 @@
\pgfplotsplothandlersurveypoint@contour@prepare@axes x%
\pgfplotsplothandlersurveypoint@contour@prepare@axes y%
\pgfplotsplothandlersurveypoint@contour@prepare@axes z%
+ %
+ \global\let\pgfplotsplothandlercontourexternal@metamin=\relax
+ \global\let\pgfplotsplothandlercontourexternal@metamax=\relax
+ %
}%
% #1: either x, y, or z
@@ -2745,22 +2763,39 @@
}%
\def\pgfplotsplothandlersurveypoint@contourexternal{%
- % temporarily disable updates to point meta limits. They should be
- % updated during the contour prepared processing.
- \let\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits=\pgfplots@set@perpointmeta@limits
- \let\pgfplots@set@perpointmeta@limits=\relax
+ \ifx\pgfplotsplothandlercontourexternal@metamin\relax
+ % remember values. We want to restore them right before we parse the output of contour external:
+ \global\let\pgfplotsplothandlercontourexternal@metamin=\pgfplots@metamin
+ \global\let\pgfplotsplothandlercontourexternal@metamax=\pgfplots@metamax
+ \fi
+ \pgfplotsplothandlersurveypoint@contour@axes@std@to@reordered
%
\pgfplotsaxissurveysetpointmeta
- \let\pgfplots@current@point@z=\pgfplots@current@point@meta
%
- \let\pgfplots@set@perpointmeta@limits=\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits
+ \if M\pgfplotsplothandlercontourexternal@script@input@format
+ \let\pgfplots@current@point@z=\pgfplots@current@point@meta
+ \fi
%
- \pgfplotsplothandlersurveypoint@contour@axes@std@to@reordered
%
-%\message{contour gnuplot: collecting point (\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z) [\pgfplots@current@point@meta]...}%
+%\message{contour external collecting point (\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z) [\pgfplots@current@point@meta]...}%
\pgfplotsplothandlersurveypoint@tofile
}%
+% Utility function which is NOT normally invoked. It can be invoked inside of 'contour external/@before cmd'. Should it become the default?
+\def\pgfplotscontourpopulateallkeys{%
+ \pgfkeysgetvalue{/pgfplots/contour/levels}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \ifx\pgfplots@metamax\pgfutil@empty
+ \else
+ \edef\pgfplots@loc@TMPa{\pgfplots@metamin:\pgfplots@metamax}%
+ \edef\thecontournumber{\pgfkeysvalueof{/pgfplots/contour/number}}%
+ \expandafter\pgfplots@domain@to@foreach\pgfplots@loc@TMPa\relax{\thecontournumber}%
+ \expandafter\pgfplots@foreach@to@list@macro\expandafter{\pgfplotsretval}%
+ \pgfkeyslet{/pgfplots/contour/levels}\pgfplotsretval
+ \fi
+ \fi
+}%
+
{
\catcode`\`=12
\catcode`\'=12
@@ -2777,6 +2812,7 @@
\fi
\fi
%
+ \pgfkeysvalueof{/pgfplots/contour external/@before cmd}\relax%
\begingroup
\let\numcoords=\pgfplots@current@point@coordindex%
\pgfplotsautocompletemeshkeys
@@ -2790,16 +2826,46 @@
\edef\ordering{\pgfplots@plot@mesh@ordering}%
\edef\infile{\pgfplotsplothandlercontourexternal@file.dat}%
\edef\outfile{\pgfplotsplothandlercontourexternal@file.table}%
- \edef\script{\pgfplotsplothandlercontourexternal@file.\pgfkeysvalueof{/pgfplots/contour external/script extension}}%
+ %
+ \pgfkeysgetvalue{/pgfplots/contour external/cmd}\cmd
+ \pgfkeysgetvalue{/pgfplots/contour external/script extension}\scriptext
+ \if S\pgfplotsplothandlercontourexternal@script@type
+ \else
+ % script type=lua
+ \ifx\cmd\pgfutil@empty
+ \pgfkeyssetvalue{/pgfplots/contour external/cmd}{require(\"\scriptbase\")}%
+ \pgfkeysgetvalue{/pgfplots/contour external/cmd}\cmd
+ \fi
+ \fi
+ %
+ \pgfplotscoordmath{meta}{tofixed}{\pgfplots@metamin}%
+ \let\pgfplotsmetamin=\pgfmathresult
+ \pgfplotscoordmath{meta}{tofixed}{\pgfplots@metamax}%
+ \let\pgfplotsmetamax=\pgfmathresult
+ %
+ \edef\script{\pgfplotsplothandlercontourexternal@file.\scriptext}%
+ \edef\scriptbase{\pgfplotsplothandlercontourexternal@file}%
\edef\thecontourlevels{\pgfkeysvalueof{/pgfplots/contour/levels}}%
\edef\thecontournumber{\pgfkeysvalueof{/pgfplots/contour/number}}%
\immediate\openout\w@pgf@writea=\script
\immediate\write\w@pgf@writea{\pgfkeysvalueof{/pgfplots/contour external/script}}%
\immediate\closeout\w@pgf@writea
%
- \pgfplots@shellescape{\pgfkeysvalueof{/pgfplots/contour external/cmd}}%
+ \if S\pgfplotsplothandlercontourexternal@script@type
+ \pgfplots@shellescape{\cmd}%
+ \else
+ \ifpgfplots@LUA@supported
+ \pgfplotsutil@directlua{\pgfkeysvalueof{/pgfplots/contour external/cmd}}%
+ \else
+ \pgfplots@error{Calls to 'lua' are currently unsupported. Please invoke lualatex instead.}%
+ \fi
+ \fi
+ \pgfkeysvalueof{/pgfplots/contour external/@after cmd}\relax%
\endgroup
%
+ % RESET point meta computation here such that it can be collected from the 'contour prepared' stream (i.e. the output of contour external):
+ \global\let\pgfplots@metamin=\pgfplotsplothandlercontourexternal@metamin
+ \global\let\pgfplots@metamax=\pgfplotsplothandlercontourexternal@metamax
%
\pgfplotsplothandlercontourprepared
% the PREPARE steps in the coord stream start/end have already