diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex | 1047 |
1 files changed, 527 insertions, 520 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex b/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex index 541c7de8d48..a1122b91370 100644 --- a/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex +++ b/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex @@ -9,34 +9,34 @@ \ProvidesFileRCS{pgfmoduledatavisualization.code.tex} -\usepgfmodule{oo,shapes}% -\usepgflibrary{fpu}% +\usepgfmodule{oo,shapes} +\usepgflibrary{fpu} -% This module defines the basic framework for data visualization. +% This module defines the basic framework for data visualization. % In order to visualize data, you first need data. The format for this % data is not specified, indeed, different formats are possible. A % data point is created each time the command \pgfdatapoint is % used. The "parameters" of the data point are just the current values -% of the keys or macros in the current scope. +% of the keys or macros in the current scope. % % A set of data points created using the \pgfdata command. % When a data point is created, a number of signals are emitted, see % the description of \pgfdatapoint. To actually visualize something, % objects should be created that listen to these signals and that -% handle them. +% handle them. % % The following class manages a data visualization \pgfooclass{data visualization} -{% +{ % Class data visualization % % This class is used to "manage" a data visualization. It provides % methods for hooking into the data visualization process and its % constructor initializes the signals that are issued during a data - % visualization. + % visualization. % % When a data visualization object is created, a whole bunch of % signal objects. You should then create objects that connect to @@ -77,20 +77,20 @@ % 12. "at end visualization" code % 13. "end visualization" phase signal % 14. "after visualization" code - \attribute before survey;% - \attribute at start survey;% - \attribute at end survey;% - \attribute after survey;% - \attribute before visualization;% - \attribute at start visualization;% - \attribute at end visualization;% - \attribute after visualization;% - + \attribute before survey; + \attribute at start survey; + \attribute at end survey; + \attribute after survey; + \attribute before visualization; + \attribute at start visualization; + \attribute at end visualization; + \attribute after visualization; + % % Survey counts and handling % - - \attribute survey count=1;% + + \attribute survey count=1; % Each time a survey is done before the visualization is done, this % count is incremented. Normally, there is only one survey, but % objects may request another survey or even more surveys to be @@ -98,28 +98,28 @@ % accessing this count (via the get survey count method), you can % find out which survey is currently being done. - \attribute number of surveys=1;% + \attribute number of surveys=1; % By increasing this count, you can request additional surveys to be % done. - + % Stores the to-be-visualized data - \attribute data;% - + \attribute data; + % Stores the signal objects - \attribute prepare datapoint signal;% - \attribute map datapoint signal;% - \attribute transform datapoint signal;% - \attribute visualize datapoint signal;% - \attribute finish datapoint signal;% - \attribute survey datapoint signal;% - \attribute phase signal;% - \attribute path signal;% - \attribute direction signal;% - \attribute style signal;% - - + \attribute prepare datapoint signal; + \attribute map datapoint signal; + \attribute transform datapoint signal; + \attribute visualize datapoint signal; + \attribute finish datapoint signal; + \attribute survey datapoint signal; + \attribute phase signal; + \attribute path signal; + \attribute direction signal; + \attribute style signal; + + % Constructor % % Inits the signals @@ -139,71 +139,71 @@ % \pgfoothis.get handle(\pgf@dv@me) \pgfkeyslet{/pgf/data visualization/obj}\pgf@dv@me - }% + } % The phase signal will emit the following constants: - \def\pgfdvbeforesurvey{1}% - \def\pgfdvbeginsurvey{2}% - \def\pgfdvendsurvey{3}% - \def\pgfdvaftersurvey{4}% - \def\pgfdvbeforevisualization{5}% - \def\pgfdvbeginvisualization{6}% - \def\pgfdvendvisualization{7}% - \def\pgfdvaftervisualization{8}% + \def\pgfdvbeforesurvey{1} + \def\pgfdvbeginsurvey{2} + \def\pgfdvendsurvey{3} + \def\pgfdvaftersurvey{4} + \def\pgfdvbeforevisualization{5} + \def\pgfdvbeginvisualization{6} + \def\pgfdvendvisualization{7} + \def\pgfdvaftervisualization{8} % The path signale will meit the following constants: - \def\pgfdvpathmovetotoken{5}% - \def\pgfdvpathlinetotoken{6}% - \def\pgfdvdirectionfromtoken{7}% - \def\pgfdvdirectiontotoken{8}% - \def\pgfdvdirectionattoken{9}% + \def\pgfdvpathmovetotoken{5} + \def\pgfdvpathlinetotoken{6} + \def\pgfdvdirectionfromtoken{7} + \def\pgfdvdirectiontotoken{8} + \def\pgfdvdirectionattoken{9} % Method % % Connect the object #1's slot "#2" to the signal named "#3" \method connect(#1,#2,#3) { \pgfoovalueof{#3}.connect(#1,#2) - }% - + } + % Method % % Add data that is to be visualized. The code #1 should call the % \pgfdatapoint macro for each data point it creates. \method add data(#1) { \pgf@dv@stripped@add#1\pgf@stop - }% + } \def\pgf@dv@stripped@add#1\pgf@stop{% \pgfooappend{data}{#1}% - }% - + } + % Setters \method before survey(#1) { \pgfooappend{before survey}{#1} - }% + } \method at start survey(#1) { \pgfooappend{at start survey}{#1} - }% + } \method before visualization(#1) { \pgfooappend{before visualization}{#1} - }% + } \method at start visualization(#1) { \pgfooappend{at start visualization}{#1} - }% + } % Method \method at end survey(#1) { \pgfooprefix{at end survey}{#1} - }% + } \method after survey(#1) { \pgfooprefix{after survey}{#1} - }% + } \method at end visualization(#1) { \pgfooprefix{at end visualization}{#1} - }% + } \method after visualization(#1) { \pgfooprefix{after visualization}{#1} - }% + } % Method @@ -220,9 +220,9 @@ \pgfooget{path signal}\pgf@signalpath \pgfooget{direction signal}\pgf@signaldirection \pgfooget{style signal}\pgf@signalstyle - }% - + } + % Survey method % % Call this method to "survey" the data. This should be done before @@ -247,21 +247,21 @@ \ifnum\c@pgf@counta<\c@pgf@countb \advance\c@pgf@counta by1\relax \pgfooeset{survey count}{\the\c@pgf@counta} - \pgfutil@repeat - }% + \pgfutil@repeat + } % Getter \method get survey count(#1) { \pgfooget{survey count}{#1} - }% + } % Request another survey to be done \method do an additional survey() { \c@pgf@counta=\pgfoovalueof{number of surveys}\relax \advance\c@pgf@counta by1\relax \pgfooeset{number of surveys}{\the\c@pgf@counta} - }% - + } + % Visualize method % % This method will cause the actual visualization. @@ -278,8 +278,8 @@ \pgf@signalphase.emit(\pgfdvendvisualization)% \pgfoovalueof{after visualization} \pgf@signalphase.emit(\pgfdvaftervisualization)% - }% -}% + } +} % @@ -290,8 +290,7 @@ % be. \pgfkeys{/data point/.unknown/.code={% \pgfkeyssetvalue{/data point/\pgfkeyscurrentname}{#1} - }, -}% + }} @@ -313,13 +312,13 @@ % points are produced and handled in order to find out things like % their number or the minimum and maximum values of attributes, so % that axes and picture sizes can be prepared correctly. In the -% visualization phase, data point are actually shown. +% visualization phase, data point are actually shown. % % During the survey phase, for each data point the signal % "surveydatapoint" is emitted. % % During the visualization phase, more signals are emitted. A prepare -% signal is emitted first, giving all objects a +% signal is emitted first, giving all objects a % chance to "prepare" for the data point. Note that it is permissible % for an object to manipulate the data point here (and also % in later on). @@ -327,11 +326,11 @@ % Next, the command \pgfdvmapdatapointtocanvas is called. Mainly, % the effect of this command is to setup the keys /data point/canvas x % and /data point/canvas y, see the description of this command for -% more details. +% more details. % % The next step consists of signaling "visualize data point". Objects % listening to this will cause some form of visualization of the -% data point to occur. +% data point to occur. % % Before the visualization is started, it is checked whether the key % /data point/name is set (to a non-empty value). If so, @@ -345,7 +344,7 @@ \pgf@signalpreparedatapoint.emit()% \pgf@signalmapdatapoint.emit()% \pgf@signalsurveydatapoint.emit()% -}% +} \def\pgfdatapoint@visualizationphase{% \pgf@signalpreparedatapoint.emit()% @@ -356,7 +355,7 @@ }{}% \pgf@signalvisualizedatapoint.emit()% \pgf@signalfinishdatapoint.emit()% -}% +} @@ -374,7 +373,7 @@ % lets listening objects "map" the object by setting up % attributes of the data point. The second asks objects % listening to this signal to transform the current transformation -% matrix. After the signals, we compute where +% matrix. After the signals, we compute where % the origin lies inside this transformed coordinate system. Then the % two keys /data point/canvas x and /data point/canvas y are set to % the values of this position. The local scope ends (but the settings @@ -392,7 +391,7 @@ \noexpand\pgfkeyssetvalue{/data point/canvas y}{\the\pgf@y} }% \pgf@marshal% -}% +} % Help functions for locating a canvas data point % @@ -403,7 +402,7 @@ \def\pgfpointdvdatapoint{% \pgfqpoint{\pgfkeysvalueof{/data point/canvas x}}{\pgfkeysvalueof{/data point/canvas y}}% -}% +} \def\pgfpointdvlocaldatapoint{% {% @@ -414,7 +413,7 @@ \pgf@signaltransformdatapoint.emit()% \pgfpointtransformed{\pgfpointorigin}% }% -}% +} @@ -463,7 +462,7 @@ #3{}% \fi% }% -}% +} % Handle a moveto @@ -472,7 +471,7 @@ % given by the canvas position of the current local data point. \def\pgfpathdvmoveto{% \pgfdv@generic{\pgf@signalpath}{\pgfdvpathmovetotoken}{\pgfpathmoveto} -}% +} % Handle a lineto @@ -481,7 +480,7 @@ % given by the canvas position of the current local data point. \def\pgfpathdvlineto{% \pgfdv@generic{\pgf@signalpath}{\pgfdvpathlinetotoken}{\pgfpathlineto} -}% +} @@ -492,9 +491,9 @@ % #2 = code for setting the attributes of the second point % % The current point should be a point on a line from #1 to -% #2. Both points as well as the current point are +% #2. Both points as well as the current point are % localized on the canvas and a vector pointing from the first point -% to the second one is returned. However, for instance in polar +% to the second one is returned. However, for instance in polar % coordinates the vector may actually "point along" the angle axis. % % Internally, this command first sets up the first data point and then @@ -520,7 +519,7 @@ } }}} } -}% +} @@ -535,7 +534,7 @@ % Run the rendering pipeline on a dataset and/or save the dataset. -% +% % #1 = options with path /pgf/data/ % #2 = optionally data given inline in curly braces. % @@ -544,7 +543,7 @@ % This command is used to define a data set. For a single data % visualization, multiple data sets can be defined, they will % accumulate. Data can be in different formats, as specified by the -% "format" key, and you can define new formats. +% "format" key, and you can define new formats. % % The settings of the following keys are important: % @@ -556,17 +555,17 @@ % % /pgf/data/read from file % determines where the data is. -% +% % /pgf/data/store in group % when nonempty, the data is stored here instead of being fed to the % rendering pipeline % % /pgf/data/use group -% when nonempty, data that has previously been stored here using +% when nonempty, data that has previsouly been stored here using % |define group| is read from here and all other keys are ignored % % If "read from file" is empty, the data is stored in the argument that -% follows. Otherwise, the data is read from the specified source file. +% follows. Otherwise, the data is read from the specified source file. % This data is stored in an internal variable, which is local to the % current group. % @@ -578,7 +577,7 @@ % handler is started for each data set. This works as follows: first, % the handler's startup code is executed. Then for each line of the % data file/the data given inline, the line handler function is -% called. Finally, the data format end handler is called. +% called. Finally, the data format end handler is called. % % The format handler's job is to call \pgfdatapoint each time a % complete data point has been produced. @@ -598,18 +597,18 @@ % \pgfdata[format=space separated columns] % { % % today -% 2000 2300 2100 2200 +% 2000 2300 2100 2200 % 2000 2350 2200 2500 -% 2200 2300 2250 2260 -% 1800 2260 2260 1900 +% 2200 2300 2250 2260 +% 1800 2260 2260 1900 % 2000 2300 2100 2200 % } % % \pgfdata[format=comma separated columns] % { % % yesterday -% 2000, 2350, 2200, 2250 -% 2200, 2300, 2250, 2260 +% 2000, 2350, 2200, 2250 +% 2200, 2300, 2250, 2260 % } % % \pgfdata[read from file=data.csv,format=comma separated columns] @@ -617,7 +616,7 @@ % \dv.survey() % \dv.visualize() -\def\pgfdata{\pgfutil@ifnextchar[{\pgf@datagroup@data@opt}{\pgf@datagroup@data@opt[]}}%}% +\def\pgfdata{\pgfutil@ifnextchar[{\pgf@datagroup@data@opt}{\pgf@datagroup@data@opt[]}}%} \def\pgf@datagroup@data@opt[#1]{% % Ok, add one data thing... \begingroup% @@ -637,10 +636,10 @@ \csname pgf@dv@group@@\pgf@dv@use@group\endcsname% }% \fi% - \endgroup% + \endgroup% \expandafter\pgf@dv@cont@code% \fi% -}% +} \def\pgf@datagroup@data@opt@cont{% \pgfkeysgetvalue{/pgf/data/format}\pgf@dv@format% \expandafter\let\expandafter\pgf@dv@format@catcodes\csname pgfdv@format@\pgf@dv@format @catcodes\endcsname% @@ -654,8 +653,8 @@ \let\pgf@next\pgf@datagroup@grab@external% \fi% \pgf@next% -}% - +} + \def\pgf@datagroup@grab@inline{% \pgfutil@ifnextchar\bgroup{% \begingroup% @@ -663,13 +662,13 @@ \pgf@dv@format@catcodes% \pgf@datagroup@grab@@inline}% {\pgferror{Opening brace expected}}% -}% +} \def\pgf@datagroup@grab@external{% \fi% \endgroup% \pgf@dv@do@adddata{\pgfkeysvalueof{/pgf/data visualization/obj}.add data({{{\pgf@datagroup@do@external}}})}% \pgf@dv@cont@code% -}% +} \def\pgf@dv@do@adddata#1{% \pgfkeysgetvalue{/pgf/data/store in group}\pgf@dv@temp% @@ -678,9 +677,9 @@ \else% \expandafter\pgfutil@g@addto@macro\csname pgf@dv@group@@\pgf@dv@temp\endcsname{#1}% \fi% -}% +} -{\catcode`\^=7 \catcode`\^^M=13 +{\catcode`\^^M=\active% \gdef\pgf@datagroup@grab@@inline#1{% \endgroup% \pgf@dv@do@adddata{\pgfkeysvalueof{/pgf/data visualization/obj}.add data({{{\pgf@datagroup@do@inline#1^^M\pgf@@eol}}})}% @@ -689,7 +688,7 @@ \pgf@dv@cont@code% }% }% -\def\pgf@@eol{\pgf@eol}% +\def\pgf@@eol{\pgf@eol} \def\pgf@do@data#1#2{% \begingroup% @@ -701,7 +700,7 @@ #2% \csname pgfdv@format@\pgfkeysvalueof{/pgf/data/format}@end\endcsname% \endgroup% -}% +} % @@ -717,7 +716,7 @@ \pgf@datagroup@readline% \fi \immediate\closein\r@pgf@reada% -}% +} \def\pgf@partext{\par}% \def\pgf@datagroup@readline{% @@ -732,7 +731,7 @@ \fi% \fi% \ifeof\r@pgf@reada\else\expandafter\pgf@datagroup@readline\fi% -}% +} % @@ -741,9 +740,9 @@ \def\pgf@datagroup@do@inline{% \pgf@dv@handle@line% -}% +} -{\catcode`\^=7 \catcode`\^^M=13 +{\catcode`\^^M=\active% \gdef\pgf@dv@handle@line{% \pgfutil@ifnextchar^^M{\pgf@dv@format@emptyline\expandafter\pgf@dv@handle@line\pgfutil@gobble}% {\pgfutil@ifnextchar\pgf@@eol{\pgfutil@gobble}{\pgf@dv@handle@nonemptyline}}% @@ -752,7 +751,7 @@ \pgf@dv@format@line#1\pgfeol% \pgf@dv@handle@line% }% -}% +} \pgfkeys{ /pgf/data/data visualization obj/.initial=\undefined, @@ -763,7 +762,7 @@ /pgf/data/store in group/.initial=, /pgf/data/new group/.code={\expandafter\global\expandafter\let\csname pgf@dv@group@@#1\endcsname\pgfutil@empty}, /pgf/data/use group/.initial=, -}% +} @@ -800,7 +799,7 @@ \expandafter\def\csname pgfdv@format@#1@line\endcsname#4\pgfeol{#5}% \expandafter\def\csname pgfdv@format@#1@empty\endcsname{#6}% \expandafter\def\csname pgfdv@format@#1@end\endcsname{#7}% -}% +} @@ -827,7 +826,7 @@ % \pgfdatapoint % } -\pgfdeclaredataformat{TeX code}{}{}{#1}{#1 }{}{}% +\pgfdeclaredataformat{TeX code}{}{}{#1}{#1 }{}{} @@ -845,10 +844,10 @@ % x=7, y=6, lo=10 % } -\pgfdeclaredataformat{named}{}{}{#1}{\pgf@dv@parse@named#1,\pgf@stop}{}{}% +\pgfdeclaredataformat{named}{}{}{#1}{\pgf@dv@parse@named#1,\pgf@stop}{}{} \def\pgf@dv@parse@named{% \pgfutil@ifnextchar\pgf@stop{\pgfdatapoint\pgfutil@gobble}{\pgf@dv@parse@named@} -}% +} \def\pgf@dv@parse@named@#1=#2,#3\pgf@stop{% \foreach \pgf@dv@temp in {#2} {% \def\pgf@dv@tempb{/data point/#1=}% @@ -856,7 +855,7 @@ \expandafter\expandafter\expandafter{\expandafter\pgf@dv@tempb\pgf@dv@temp}% \pgf@dv@parse@named#3\pgf@stop% } -}% +} @@ -869,12 +868,12 @@ % A table consists of a head line, which contains the attribute names % of the values that will be found in the following lines. Each line % (except for the headline) contains one data point. -% +% % Inside each line the data points are separated by a separator like a % comma or a space or a colon. The separator can be configured using % the key /pgf/data/separator (leave the separator empty or set it to % \space for a space as separator). The default separator is a comma. -% +% % Some tables will miss the headline. In this case, using the % /pgf/data/headline key you can provide a headline yourself. % @@ -912,14 +911,14 @@ \let\pgf@dv@separator\space \fi \expandafter\def\expandafter\pgf@dv@till@separator% - \expandafter##\expandafter1\pgf@dv@separator{\pgf@dv@table@handle{##1}} + \expandafter##\expandafter1\pgf@dv@separator{\pgf@dv@table@handle{##1}} \expandafter\def\expandafter\pgf@dv@till@separator@head% - \expandafter##\expandafter1\pgf@dv@separator{\pgf@dv@head@handle{##1}} + \expandafter##\expandafter1\pgf@dv@separator{\pgf@dv@head@handle{##1}} \ifx\pgf@dv@headline\pgfutil@empty % Ok, read headline from file \pgfdv@firstlinetrue \else - % Headline already set + % Headline already set \pgfdv@firstlinefalse \expandafter\pgf@dv@parse@headline\expandafter{\pgf@dv@headline} \fi @@ -934,27 +933,27 @@ \c@pgf@counta=0\relax% keep track of attribute number \def\pgf@marshal{\pgf@dv@parse@table#1} \expandafter\expandafter\expandafter\pgf@marshal% - \expandafter\pgf@dv@separator\expandafter\pgfeol\pgf@dv@separator + \expandafter\pgf@dv@separator\expandafter\pgfeol\pgf@dv@separator \pgfdatapoint } \fi } -{}% ignore empty lines -{}% no special end code +{} % ignore empty lines +{} % no special end code \newif\ifpgfdv@firstline \pgfkeys{ /pgf/data/separator/.initial={,}, /pgf/data/headline/.initial= -}% -\def\pgf@dv@spacetext{\space}% +} +\def\pgf@dv@spacetext{\space} \def\pgf@dv@parse@table{% \pgfutil@ifnextchar"% Special, but ignored right now... {\pgferror{csv with quotes not yet implemented}} {\pgf@dv@till@separator} -}% +} \def\pgf@dv@table@handle#1{% \def\pgf@temp{#1}% \ifx\pgf@temp\pgfeoltext% @@ -970,8 +969,8 @@ \pgfkeyssetvalue{/data point/\pgf@dv@target}{#1} \let\pgf@next=\pgf@dv@parse@table% \fi% - \pgf@next% -}% + \pgf@next% +} @@ -979,14 +978,14 @@ \c@pgf@counta=0\relax% keep track of attribute number \def\pgf@marshal{\pgf@dv@doparse@headline#1} \expandafter\expandafter\expandafter\pgf@marshal% - \expandafter\pgf@dv@separator\expandafter\pgfeol\pgf@dv@separator -}% + \expandafter\pgf@dv@separator\expandafter\pgfeol\pgf@dv@separator +} \def\pgf@dv@doparse@headline{% \pgfutil@ifnextchar"% Special, but ignored right now... {\pgferror{csv with quotes not yet implemented}} {\pgf@dv@till@separator@head} -}% +} \def\pgf@dv@head@handle#1{% \def\pgf@temp{#1}% \ifx\pgf@temp\pgfeoltext% @@ -997,10 +996,10 @@ \pgfkeyssetvalue{/pgf/data/table/attribute \the\c@pgf@counta}{#1} \let\pgf@next=\pgf@dv@doparse@headline% \fi% - \pgf@next% -}% + \pgf@next% +} -\def\pgfeoltext{\pgfeol}% +\def\pgfeoltext{\pgfeol} % @@ -1013,16 +1012,16 @@ % math engine is used. In the future, something fancy build on luatex % might be used, so it would we should not rely directly on the % fpu library code. -% +% % The system works as follows: First, you "enter" a number into the % engine. When you do so, it is converted into some internal % representation that cannot be accessed any more and is called a % "math variable" henceforth. All commands of the % math system only work on math variables. -% +% % In order to "exit" a value stored in a math variable from the % engine, some other macros can be used. -% +% % Operations like addition or multiplication take two math variables % and store the result in another math variable. @@ -1032,95 +1031,95 @@ % % #1 = a math variable (a macro name) that is to store the value % #2 = an expression describing a number -% +% % % Description: -% +% % The #2 should be an expression that evaluates to a number. However, % due to the way the pgf math engine(s) work, currently, there are % several restrictions/the syntax is not as simple as one might % hope. Fortunately, the syntax is hopefully compatible with % easier-to-use future systems. -% +% % The syntax is as follows: #2 may be -% +% % 1. a simple high-precision number. This number is currently directly % passed to \pgfmathfloatparsenumber, so typical permissible values % are "100" or "10000000000000" or "nan" or "-5.673543345345e9000" -% +% % 2. a mathematical expression, which *must* be surrounded by -% parentheses. From a "mathematical" point of view these -% parentheses are superfluous, but the they are used to help pgf +% parantheses. From a "mathematical" point of view these +% parantheses are superfluous, but the they are used to help pgf % distinguish expressions from high-precision numbers. (If, in the % future, expressions may contain high precision numbers, the -% parentheses will simply be ignored.) -% +% parantheses will simply be ignored.) +% % The expression is evaluated using \pgfmathparse, which means that % TeX-precision is used. This means, for instance, that numbers % larger than about 16500 will create error messages. -% +% % The advantage is that you may say write things like "(5+6)" or % "(pi/2)". -% +% % 3. In case #2 starts with an exclamation mark (indicating an % "escape"), everything following the mark is simply evaluated by % TeX. The effect of evaluating #2 should be that the math % variable "\pgfdvmathvalue" is set to some value. This value will % then be transferred to #1. -% +% % 4. In case #2 is the result of calling \pgfdvmathexitbyserializing, the % "serialized" value is restored. The idea is that the serialized % will turn its internal representation of a number into something % that can be stored as a text somewhere. -% +% % Currently, "@" at the beginning of #2 is used to indicate that % what follows is a serialized version of a math variable. -% +% % In order to determine which of the above cases is to be used for a % variable, the first symbol #2 is checked, *after* the first symbol -% of #2 has been expanded once (using \expandafter once). +% of #2 has been expanded once (using \expandafter once). % % Example: % % \pgfdvmathenter{\mymacro}{20000000000000} % \pgfdvmathenter{\mymacro}{(5+pi)} % \pgfdvmathenter{\mymacro}{!\pgfdvmathadd{\pgfdvmathvalue}{\a}{\b}} -% +% % \pgfdvmathenter{\foo}{5} % \pgfdvmathexitbyserializing{\somevalue}{\foo} % \pgfdvmathenter{\mymacro}{\somevalue} \def\pgfdvmathenter#1#2{% \expandafter\pgfdvmathenter@check\expandafter#1#2\pgfdvmath@end% -}% +} \def\pgfdvmathenter@check#1{% \pgfutil@ifnextchar @{\pgfdvmath@internal#1}{% \pgfutil@ifnextchar ({\pgfdvmath@expression#1}{%) \pgfutil@ifnextchar !{\pgfdvmath@execute#1}{\pgfdvmath@normal#1}}}% -}% +} \def\pgfdvmath@internal#1@#2\pgfdvmath@end{% \def#1{#2}% -}% +} \def\pgfdvmath@expression#1(#2)#3\pgfdvmath@end{% \pgfmathparse{#2}% \pgfmathfloatparsenumber{\pgfmathresult}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmath@execute#1!#2\pgfdvmath@end{% #2% \let#1=\pgfdvmathvalue% -}% +} \def\pgfdvmath@normal#1#2\pgfdvmath@end{% \pgfmathfloatparsenumber{#2}% \let#1=\pgfmathresult% -}% +} % Print a math variable in the math engine using \pgfmathprintnumber % -% #1 = math variable +% #1 = math variable % % Description: % @@ -1133,15 +1132,15 @@ \def\pgfdvmathexitbyprinting#1{% \pgfmathprintnumber{#1}% -}% +} % Exit a math variable as a number in a scientific and portable number -% format in a macro +% format in a macro % % #1 = macro in which to store the value -% #2 = math variable +% #2 = math variable % % Description: % @@ -1155,18 +1154,18 @@ \def\pgfdvmathexitbyscientificformat#1#2{% \edef#1{\pgfmathfloatvalueof#2}% -}% +} % Exit a math variable as a "serialized" (= string-based) -% version. +% version. % % #1 = macro in which to store the value -% #2 = math variable +% #2 = math variable % % Description: -% +% % The serialized version can be reentered using % \pgfmathenter and is similar to \pgfdvmathexitbyscientificformat, % but exiting and entering are (a bit) faster. @@ -1178,7 +1177,7 @@ \def\pgfdvmathexitbyserializing#1#2{% \edef#1{@#2}% -}% +} @@ -1204,19 +1203,19 @@ \def\pgfdvmathadd#1#2#3{% \pgfmathfloatadd{#2}{#3}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathsub#1#2#3{% \pgfmathfloatsubtract{#2}{#3}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathmul#1#2#3{% \pgfmathfloatmultiply{#2}{#3}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathdiv#1#2#3{% \pgfmathfloatdivide{#2}{#3}% \let#1=\pgfmathresult% -}% +} % Multiply by small number % @@ -1235,20 +1234,20 @@ % \pgfdvmathadd{\b}{\a}{0.2} % % \b now stores 400 -\def\pgfdvmathmulfixed#1#2#3{% +\def\pgfdvmathmulfixed#1#2#3{% \pgfmathfloatmultiplyfixed{#2}{#3}% \let#1=\pgfmathresult% -}% +} % Log, ln and exponent functions -% +% % #1 = a math variable % #2 = a math variable -% +% % Description -% +% % \pgfdvmathln will compute #1 = ln(#2) % \pgfdvmathlog will compute #1 = log_{10}(#2) % \pgfdvmathexp will compute #1 = exp(#2) @@ -1257,18 +1256,18 @@ \def\pgfdvmathln#1#2{% \pgfmathfloatln{#2}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathlog#1#2{% \pgfmathfloatln{#2}% \pgfmathfloatmultiply{\pgfmathresult}{\pgfdvmathalwaysloge}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathexp#1#2{% \pgfmathfloatexp{#2}% \let#1=\pgfmathresult% -}% +} \def\pgfdvmathpowten#1#2{% \pgfmathfloattofixed{#2}% @@ -1292,16 +1291,16 @@ \fi \fi \let#1=\pgfmathresult% -}% +} % Floor functions -% +% % #1 = a math variable % #2 = a math variable -% +% % Description -% +% % Sets #1 to the largest integer less or equal to #2 \def\pgfdvmathfloor#1#2{% @@ -1324,7 +1323,7 @@ \or\let#1=#2% \fi% }% -}% +} % Advanced unary operations @@ -1346,7 +1345,7 @@ \def\pgfdvmathunaryop#1#2#3{% \csname pgfmathfloat#2\endcsname{#3}% \let#1=\pgfmathresult% -}% +} % Advanced binary operations @@ -1370,7 +1369,7 @@ \def\pgfdvmathbinop#1#2#3#4{% \csname pgfmathfloat#2\endcsname{#3}{#4}% \let#1=\pgfmathresult% -}% +} @@ -1391,7 +1390,7 @@ \def\pgfdvmathifless#1#2#3#4{% \pgfmathfloatlessthan{#1}{#2}% \ifpgfmathfloatcomparison#3\else#4\fi% -}% +} @@ -1399,7 +1398,7 @@ % % % Standard objects for data visualization -% +% % @@ -1408,7 +1407,7 @@ % \pgfooclass{linear transformer} -{% +{ % Class linear transformer % % This class is a transformer class. It reacts to the transform @@ -1418,22 +1417,22 @@ % current value of this.origin. If the current value is 1, the % system is shifted to this.origin + this.unit vector. For other % values of /data point/this.attribuate, the shift is interpolated - % between these two values. - + % between these two values. - \attribute attribute;% + + \attribute attribute; % The attribute (/data point/this.attribute) by which % the unit vector is multiplied. If it is empty (which is % different from 0), no transformation is done at all. - \attribute origin = \pgfpointorigin;% + \attribute origin = \pgfpointorigin; % The shift in case the /data point/this.attribute is 0. - \attribute unit vector;% + \attribute unit vector; % The coordinate system is additionally shifted by this amount % times the current value of /data point/this.attribute. - + % Constructor % % #1 = attribute that is being transformed. Example: x @@ -1444,20 +1443,20 @@ \pgf@process{#2} \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}} \pgfoolet{unit vector}\pgf@temp% - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,transform,transform datapoint signal) - }% - + } + % Setter \method set origin(#1) { \pgf@process{#1} \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}} \pgfoolet{origin}\pgf@temp% - }% + } % Slot % @@ -1480,8 +1479,9 @@ \fi% \fi% \fi% - }% -}% + } + +} % @@ -1489,7 +1489,7 @@ % \pgfooclass{interval mapper} -{% +{ % Class interval mapper % % This interval mapper reacts to the map datapoint signal. Its purpose is to @@ -1507,15 +1507,15 @@ % It is permissible to specify an additional non-linear % transformation function f. In this case, for an input value x the % position of f(x) inside the interval [f(a),f(b)] is determined and - % this position is linearly mapped to [c,d]. + % this position is linearly mapped to [c,d]. % % For example, if f(x) = log_10 (x) and the first range [a,b] = % [10,1000] and the second range is [1,2], then 10 is mapped to 1, % 100 is mapped to 1.5 (since f(100) = 3 lies in the middle % between f(10) = 2 and f(1000) = 4) and 100000 is mapped to 3. + - - \attribute in;% + \attribute in; % The name of the input attribute. If the value of this attribute % is empty or undefined, no mapping is done. % @@ -1523,30 +1523,30 @@ % has a value different from \relax, it will always be used instead % of the in attribute itself. This can be useful to temporarily % set a constant value to a key inside a mapping chain. - % + % % If the subkey /is min or max is set to "min" or "max", the mapping % will always be done to the respective out min or out max values. - \attribute out;% + \attribute out; % The name of the output attribute. - - \attribute trans;% + + \attribute trans; % Stores (more or less) the transformation function. - \attribute out min;% + \attribute out min; % Start of the second range (the value of c). - \attribute out min;% + \attribute out min; % End of the second range (the value of d). - \attribute trans in min;% + \attribute trans in min; % Transformed value of the start of the first range (the value % f(a)). - \attribute scale;% + \attribute scale; % The scaling factor, that is, the value of (f(b)-f(a))/(d-c). - + % Constructor % % #1 = input attribute. Example: velocity. @@ -1568,13 +1568,13 @@ #3% }% \fi% - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,map,map datapoint signal) - }% + } % Method % @@ -1584,7 +1584,7 @@ % #4 = out interval maximum % % This method will (re)compute the correct mappings for the interval - % mapper. + % mapper. \method set interval values(#1,#2,#3,#4) { {% \pgfdvmathenter{\pgf@in@interval@min}{#1} @@ -1604,18 +1604,18 @@ \pgfoovalueof{trans} \let\pgf@in@interval@max@transformed=\pgfvalue \pgfdvmathsub{\pgf@diff@in@transformed}{\pgf@in@interval@max@transformed}{\pgf@in@interval@min@transformed} - % + % % Precompute the scaling - % + % \pgfdvmathdiv{\pgf@scale}{\pgf@out@diff}{\pgf@diff@in@transformed}% \pgfoolet{scale}{\pgf@scale}% }{% \pgfoolet{scale}\pgf@dv@no@scale% }% }% - }% - \def\pgf@dv@no@scale{noscale}% - + } + \def\pgf@dv@no@scale{noscale} + % Slot \method map() { \pgfooget{scale}\pgf@dv@scale @@ -1650,18 +1650,18 @@ \fi% \fi% \fi% - }% + } \def\pgf@dv@set@out@min{% \pgfkeyslet{/data point/\pgfoovalueof{out}/is min or max}\pgf@min@text% \pgfooget{out min}{\pgf@minmax@temp}% \pgf@dv@set@out@now% - }% + } \def\pgf@dv@set@out@max{% \pgfkeyslet{/data point/\pgfoovalueof{out}/is min or max}\pgf@max@text% \pgfooget{out max}{\pgf@minmax@temp}% \pgf@dv@set@out@now% - }% + } \def\pgf@dv@set@out@now{% \pgfkeysgetvalue{/data point/\pgfoovalueof{out}/offset}\pgf@dv@external@offset% \ifx\pgf@dv@external@offset\relax\else% @@ -1673,8 +1673,8 @@ \fi \fi \pgfkeyslet{/data point/\pgfoovalueof{out}}\pgf@minmax@temp% - }% - + } + \def\pgf@dv@mapper@trans{ \pgfooget{trans in min}{\pgf@dv@trans@in@min}% \pgfooget{scale}{\pgf@dv@scale}% @@ -1692,7 +1692,7 @@ \fi \pgfdvmathexitbyserializing{\pgf@temp}{\pgfvalue}% \pgfkeyslet{/data point/\pgfoovalueof{out}}\pgf@temp% - }% + } \def\pgf@dv@mapper@pos@check{% \pgfkeysgetvalue{/data point/\pgfoovalueof{in}/out pos}\pgf@dv@pos@value% @@ -1708,8 +1708,8 @@ \pgfdvmathexitbyserializing{\pgf@temp}{\pgf@out@val}% \pgfkeyslet{/data point/\pgfoovalueof{out}}\pgf@temp% \fi\fi% - }% - + } + \def\pgf@dv@mapper@goto@mid{% % Ok, compute transformed min position: \pgfooget{out min}{\pgf@out@interval@min} @@ -1719,8 +1719,8 @@ \pgfdvmathadd{\pgf@out@val}{\pgf@out@interval@min}{\pgf@out@interval@max}% \pgfdvmathexitbyserializing{\pgf@temp}{\pgf@out@val}% \pgfkeyslet{/data point/\pgfoovalueof{out}}\pgf@temp% - }% -}% + } +} @@ -1730,7 +1730,7 @@ \newif\ifpgf@dvignore \pgfooclass{scaling mapper} -{% +{ % Class scaling mapper % % A scaling mapper is (mainly) used to scale an attribute in such a way @@ -1747,16 +1747,16 @@ % and a interval mapper for then mapping the values to the scaled % values. Additionally, interval objects are needed. - \attribute in;% + \attribute in; % The to-be-scaled attribute; - \attribute out;% + \attribute out; % The attribute storing the scaled value. - \attribute in range obj;% + \attribute in range obj; % This interval keep track of the range of the in attribute - - \attribute scaling spec;% + + \attribute scaling spec; % A specification of how the scaling should be performed. % % The format is the following: @@ -1777,24 +1777,24 @@ % that deforms the linear mapping. In case f is specified, % f(#1) is mapped to #2 and f(#3) is mapped to #4. - \attribute spec maps min;% + \attribute spec maps min; % When the scaling spec maps "min" to some value, rather than some % specific value to that value, then spec maps min will be set to % \pgfutil@firstoftwo, otherwise to \pgfutil@secondoftwo - \attribute spec maps max;% + \attribute spec maps max; % Like spec maps min - \attribute function;% + \attribute function; % Stores the function - - \attribute interval mapper;% + + \attribute interval mapper; % Stores the interval mapper object - - \attribute range surveyor;% + + \attribute range surveyor; % Stores the range surveyor object - - + + % Constructor % % #1 = in attribute @@ -1825,54 +1825,54 @@ % % % The interval mapper: - % + % \pgfoonew{interval mapper}=new interval mapper(#1,#2,#4) \pgfoovalueof{interval mapper}.default connects() - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% + } % Getter % % Returns an interval object that stores the range of the in - % attribute. + % attribute. \method get in range interval() { \pgfooget{in range obj}\pgfdvinrangeinterval - }% - - + } + + % Getter % % Returns the out attribute. - % + % \method get out() { \pgfooget{out}\pgfdvout - }% + } % Getter % % Returns the function attribute. - % + % \method get function(#1) { \pgfooget{function}#1 - }% + } % Method % % #1 = a included in value - % + % % This method only affects the survey. The value #1 is recorded as % if it were encountered for the in attribute at some point. - % + % \method include in value(#1) { \pgfoovalueof{range surveyor}.include attribute value({#1}) - }% - + } + % Method % % #1 = value for the attribute @@ -1880,7 +1880,7 @@ % Sets the attribute to the (evaluated) given value (evaluation % using \pgfmathparse). When the value is evaluated, the values of % \pgfdvmin and \pgfdvmax will be set to the minimum and maximum - % values of the in interval. (See \pgfdvmathenter with the "!"-notation). + % values of the in interval. (See \pgfdvmathenter with the "!"-notation). % % In case #1 is set to the special value "min", it evaluates to % \pgfdvmin, when set to "max" it evaluates to \pgfdvmax. @@ -1902,14 +1902,14 @@ \fi% \pgfdvmathexitbyserializing{\pgf@dv@serial}{\pgf@dv@value}% \pgfkeyslet{/data point/\pgfoovalueof{in}}\pgf@dv@serial% - }% + } \def\pgf@dv@lib@set@mm{ \pgfooget{in range obj}\pgfdvinrangeinterval \pgfdvinrangeinterval.get min and max()% - }% - + } - % Slot + + % Slot \method phase(#1) { \ifx#1\pgfdvendsurvey % Ok, we setup the interval mapper. @@ -1925,9 +1925,9 @@ \pgf@lib@dv@min@at,\pgf@lib@dv@max@at) \fi \fi - }% - + } + % Internal helper \def\pgf@lib@dv@parse@scaling#1 at#2and #3 at#4\pgf@stop{% \def\pgf@lib@dv@min{#1}% @@ -1952,10 +1952,10 @@ \pgfdvmathexitbyserializing{\pgf@lib@dv@min@at}{\pgf@lib@dv@min@at@mv} \pgfdvmathexitbyserializing{\pgf@lib@dv@max}{\pgf@lib@dv@max@mv} \pgfdvmathexitbyserializing{\pgf@lib@dv@max@at}{\pgf@lib@dv@max@at@mv} - }% - \def\pgf@min@text{min}% - \def\pgf@max@text{max}% -}% + } + \def\pgf@min@text{min} + \def\pgf@max@text{max} +} @@ -1966,13 +1966,13 @@ % \pgfooclass{range surveyor} -{% +{ % Class range surveyor % % A range surveyor is used only in the survey phase. Its job is to % determine the minimum and maximum values of an attribute that are % "seen" during the survey phase. Based on this value, the size of, - % say, an axis can be determined later on. + % say, an axis can be detemined later on. % % You can also set the key "sub attributes" of the attribute. In % this case, this key should contain -- as the name suggests -- a @@ -1984,12 +1984,12 @@ % "/data point/velocity", then "/data point/velocity/sub attributes" % should be set to "\pgfdvsub{/min}\pgfdvsub{/max}". - \attribute attribute;% + \attribute attribute; % The to-be-surveyed attribute - \attribute interval obj;% + \attribute interval obj; % The interval object that protocols the minimum and maximum - % values. + % values. % Constructor @@ -2000,27 +2000,27 @@ \method range surveyor(#1,#2) { \pgfooset{attribute}{#1} \pgfoolet{interval obj}#2 - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,survey,survey datapoint signal) - }% + } % Method % % #1 = a value - % + % % Adjust the interval as if during the survey this value were - % encountered + % encountered \method include attribute value(#1) { \pgf@dv@assign@val@stripped#1\pgf@stop% \pgfoovalueof{interval obj}.adjust(\pgf@dv@range@surv) - }% + } \def\pgf@dv@assign@val@stripped#1\pgf@stop{% \def\pgf@dv@val{#1} - }% + } % Slot % @@ -2032,7 +2032,7 @@ \let\pgfdvsub\pgf@dv@range@surv@sub \pgfdvsub{}% \pgfkeysvalueof{/data point/\pgfoovalueof{attribute}/sub attributes} - }% + } \def\pgf@dv@range@surv@sub#1{ \pgfkeysgetvalue{/data point/\pgfoovalueof{attribute}#1}\pgf@dv@val% @@ -2044,7 +2044,7 @@ \pgfoovalueof{interval obj}.adjust(\pgf@dv@range@surv)% \fi% \fi% - }% + } \def\pgf@dv@range@surv{% \pgfdvmathenter{\pgf@dv@value}{\pgf@dv@val}% @@ -2059,8 +2059,8 @@ \else% \pgfdvmathifless{\pgfdvmax}{\pgf@dv@value}{\let\pgfdvmax\pgf@dv@value}{}% \fi% - }% -}% + } +} @@ -2068,19 +2068,19 @@ % Visualizers % -\usepgflibrary{plothandlers}% +\usepgflibrary{plothandlers} \pgfooclass{plot handler visualizer} -{% +{ % Class plot handler visualizer % % This visualizer uses one or more plot handlers to visualize data points. - % As the data points are processed, the canvas positions of the data + % As the data points are processed, the canvas positions of the data % points are recorded. At the end of a group of data points, the % recorded stream of canvas position is visualized (rendered) - % using plot handlers. For instance, when the lineto plot handler + % using plot handlers. For instance, when the lineto plot handler % is used, the data points are connected by straight lines, when the % curveto plot handler is used, they are connected by smooth curves % and so on. @@ -2092,7 +2092,7 @@ % You can specify a "filter", which will cause only those data % points to be visualized by the visualizer that pass the test. The % filter should set \pgfdvfilterpassedfalse for to-be-filtered data - % point. + % point. % % You can specify "projection code" that changes the canvas x and % canvas y positions. This projection code allows you to draw, say, @@ -2103,35 +2103,35 @@ % the visualizer, should store code that is to be executed directly % before and after the stream of coordinates is created. Typically, % these keys will store commands to use the path created by the plot - % handler. + % handler. - \attribute handlers;% + \attribute handlers; % The to-be-used handlers - - \attribute name;% + + \attribute name; % The attribute - - \attribute filter=\pgfdvnamedvisualizerfilter;% + + \attribute filter=\pgfdvnamedvisualizerfilter; % Filter code - - \attribute positions;% + + \attribute positions; % An internal protocol of the positions on the stream - - \attribute cache;% + + \attribute cache; % An internal cache. Positions are first inserted into this % cache. Every 100 steps this cache is moved to positions. The idea % behind this is that it will avoid the quadratic time increase that % is normally caused when a protocol is build in TeX. - - \attribute projection code;% + + \attribute projection code; % This code is empty by default. However, you can set it for % instance to the following - % + % % \pgfkeyssetvalue{/data point/y=0}\pgfdvmapdatapointtocanvas - % + % % in order to visualize the data point with its y-coordinate % replaced by 0. - + % Constructor % % #1 = A name @@ -2141,24 +2141,24 @@ \method plot handler visualizer(#1,#2) { \pgfooset{name}{#1} \pgfooset{handlers}{#2} - }% - + } + % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,protocol,visualize datapoint signal) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% + } % Setter \method set filter(#1) { \pgfooset{filter}{#1} - }% + } % Setter \method set projection code(#1) { \pgfooset{projection code}{#1} - }% + } % Slot \method protocol() { @@ -2167,7 +2167,7 @@ \ifpgfdvfilterpassed% \pgf@dv@line@cache@it \fi% - }% + } \def\pgf@dv@line@cache@it{ % Cache it @@ -2199,14 +2199,14 @@ \let\pgf@dv@cache\pgfutil@empty \fi \pgfoolet{cache}\pgf@dv@cache - }% - + } + % Slot \method phase(#1) {% \ifx#1\pgfdvendvisualization% \pgfoothis.render()% \fi% - }% + } % Internal method \method render() { @@ -2227,19 +2227,19 @@ \endpgfscope \pgfoolet{positions}\pgfutil@empty \pgfoolet{cache}\pgfutil@empty - }% + } - \def\pgf@dv@ph#1#2{\ifpgfdvnewstream\pgfplotstreamstart\pgfdvnewstreamfalse\fi\pgfplotstreampoint{\pgfqpoint{#1}{#2}}}% - \def\pgf@dv@outliner{\ifpgfdvnewstream\else\pgfplotstreamend\pgfdvnewstreamtrue\fi}% -}% + \def\pgf@dv@ph#1#2{\ifpgfdvnewstream\pgfplotstreamstart\pgfdvnewstreamfalse\fi\pgfplotstreampoint{\pgfqpoint{#1}{#2}}} + \def\pgf@dv@outliner{\ifpgfdvnewstream\else\pgfplotstreamend\pgfdvnewstreamtrue\fi} +} \newif\ifpgfdvnewstream \newcount\pgf@lib@dv@cache@count \pgfkeys{% /data point/outlier/.initial=, - /data point/outlier/.default=true, -}% + /data point/outlier/.default=true +} % A possible filter for unnamed visualizers @@ -2250,10 +2250,10 @@ % % In a data visualization with multiple visualizers, data points % typically "belong" only to a single visualizer. It is, thus, -% necessary to filter data points according to the current +% necessary to filter data points accoring to the current % visualizer. This current visualizer is assumed to be stored in /data % point/visualizer. -% +% % When objects allow you to set a filter, you can use this filter to % test against /data point/set being equal to #1. @@ -2264,14 +2264,14 @@ \else \pgfdvfilterpassedfalse \fi% -}% +} % A filter for named visualizer -% +% % Description: -% +% % This filter works like \pgfdvvisualizerfilter, only it assumes the % the object defines a "name" attribute. In this case, the value of % /data point/set is tested against this attribute. @@ -2283,12 +2283,12 @@ \else \pgfdvfilterpassedfalse \fi% -}% +} \pgfooclass{rectangle visualizer} -{% +{ % Class rectangle visualizer % % This visualizer visualizes a datapoint as a rectangle. It needs @@ -2296,33 +2296,33 @@ % point/<name>/attribute 2 store two attributes names a1 to a2. Then, % provided the current value of /data point/set equals name, for % each data point a rectangle between (a1/min,a2/min) and - % (a1/max,a2/max) is created. - + % (a1/max,a2/max) is created. + - \attribute name;% + \attribute name; % The name - - \attribute a1;% - \attribute a2;% + + \attribute a1; + \attribute a2; % The attributes, filled from /data point/<name>/attribute 1 and 2 - + % Constructor % - % #1 = first attribute - % #2 = second attribute + % #1 = first attribute + % #2 = second attribute % \method rectangle visualizer(#1) { \pgfooset{name}{#1} - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,visualize,visualize datapoint signal) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% - + } + % Slot \method phase(#1) {% \ifx#1\pgfdvbeginsurvey% @@ -2331,8 +2331,8 @@ \pgfkeyssetvalue{\pgfoovalueof{a1}/sub attributes}{\pgfdvsub{/min}\pgfdvsub{/max}} \pgfkeyssetvalue{\pgfoovalueof{a2}/sub attributes}{\pgfdvsub{/min}\pgfdvsub{/max}} \fi% - }% - + } + % Slot \method visualize() { { @@ -2342,7 +2342,7 @@ \pgf@dv@rect@do \fi } - }% + } \def\pgf@dv@rect@do{ \pgfkeysgetvalue{\pgfoovalueof{a1}/min}\pgf@dv@amin @@ -2371,8 +2371,8 @@ \fi\fi \fi\fi \fi\fi - }% -}% + } +} \newcount\pgf@lib@dv@cache@count @@ -2383,12 +2383,12 @@ % \pgfooclass{label visualizer} -{% +{ % Class label visualizer % % The job of this class is to visualize a label of a curve or some % other object. - % + % % The idea is as follows: This class monitors a certain % attribute. When this attribute reaches a certain value for the % first time, the following happens: A normalized vector of the line @@ -2397,29 +2397,29 @@ % coordinate system is shifted so that the current data point is at % the origin. Then, some drawing code is executed. - \attribute attribute;% + \attribute attribute; % The monitored attribute - \attribute filter;% + \attribute filter; % Filter code, see plot handler visualizer doc. - - \attribute threshold;% + + \attribute threshold; % When the attribute exceeds this threshold, the drawing code is % executed - \attribute before canvas position=;% + \attribute before canvas position=; % Stores canvas position of the data point before the interesting one - - \attribute canvas position=;% + + \attribute canvas position=; % Stores canvas position of the data point - \attribute code;% + \attribute code; % To-be-executed code when the label should be drawn - - + + % Constructor % - % #1 = attribute + % #1 = attribute % #2 = a macro, storing the threshold % #3 = code % #4 = filter code @@ -2430,14 +2430,14 @@ \pgfoolet{threshold}\pgf@temp \pgfooset{code}{#3} \pgfooset{filter}{#4} - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,test,visualize datapoint signal) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% + } % Slot \method test() { @@ -2451,7 +2451,7 @@ \pgf@dv@label@vis@record \fi% \fi% - }% + } \def\pgf@dv@label@vis@record{ % Record current position @@ -2479,8 +2479,8 @@ }% \fi\fi% \fi% - }% - + } + % Slot \method phase(#1) {% \ifx#1\pgfdvendvisualization% @@ -2490,8 +2490,9 @@ \pgfoovalueof{code} \endscope \fi% - }% -}% + } + +} @@ -2499,12 +2500,12 @@ % Style sheets % \pgfooclass{style attribute} -{% +{ % Class style attribute - % + % % Instances of this class are used to select a style based on the % current value of an attribute. - % + % % Instances of this class monitor an attribute. Whenever the "style" % signal is raised, the object investigates the current value of the % attribute. It then looks up /pgf/data visualization/style @@ -2513,27 +2514,27 @@ % /pgf/data visualization/style sheets/<name of style sheet>/default % style is executed with the value as a parameter. - \attribute attribute;% + \attribute attribute; % The name of the attribute - \attribute style sheet name;% + \attribute style sheet name; % The styling function % Constructor % % #1 = attribute (including, if present, /data point/) - % #2 = style sheet name + % #2 = style sheet name % \method style attribute(#1,#2) { \pgfooset{attribute}{#1} \pgfooset{style sheet name}{#2} - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,invoke style,style signal) - }% + } % Slots \method invoke style() { @@ -2549,22 +2550,22 @@ \pgfkeysalso{\pgf@temp/default style/.expand once=\pgf@dv@temp@val} } \fi\fi% - }% -}% + } +} % Declares a new style sheet -% -% #1 = name of style sheet +% +% #1 = name of style sheet % #2 = settings -% +% % Description: -% +% % This is a shortcut for doing a /.cd to /pgf/data visualization/style sheets/#1 \def\pgfdvdeclarestylesheet#1#2{ \pgfkeys{/pgf/data visualization/style sheets/#1/.cd,#2} -}% +} @@ -2579,22 +2580,22 @@ % \pgfooclass{legend} -{% +{ % Class legend - % + % % This class is used to collect entries into a legend. The idea is % that, say, for each line of a picture you would like to have an % entry in a legend. Then you prepare these entries and send % them to a legend container object. It will collect the entries - % and, at the end, arrange them in rows and columns by + % and, at the end, arrange them in rows and columns by % separating them using \pgfdvnextcell and \pgfdvendrow. % % By surrounding the resulting arrangement by a call to \pgfmatrix or % a call to \halign you can then create a legend. - % + % % To specify how the entries should be arranged, a size % specification and two directions are needed. - % + % % For the size specification you specify either the ideal number of % columns and the maximum number of rows or you specify the ideal % number of rows and the maximum number of columns. In the first @@ -2609,10 +2610,10 @@ % columns that the ideal number -- to ensure that no column contains % more than the desired number. The case is symmetric, but with the % roles of columns and rows exchanged. - % + % % Here is an example: You specify that you want 2 columns, ideally, % each having a maximum of 4 entries. Here is what you would get: - % + % % Number of entries & Number of resulting columns ... & ... and rows % 1 & 1 & 1 % 2 & 2 & 1 @@ -2628,7 +2629,7 @@ % 12 & 3 & 4 % 13 & 4 & 4 % - % + % % Once the number of columns and rows has been computed, the next % step is to "fill" the table. For this, eight strategies may be % specified: right then down, right then up, left then down, left @@ -2638,14 +2639,14 @@ % arrangement. However, once the maximum number of elements in a row % has been reached, the a new row should be started that is placed % above ("up") then just-assembled row. - % - % - % + % + % + % % % Example: - % + % % You create an object \legend and then call - % + % % \pgfoofnew \legend=new legend(columns,2,3,down then right) % \legend.add entry(first) % \legend.add entry(second) @@ -2654,37 +2655,37 @@ % \legend.add entry(fifth) % \legend.add entry(sixth) % \legend.add entry(seventh) - % \legend.get arrangement(\arrangement) - % + % \legend.get arrangment(\arrangement) + % % Then \arrangment will expand to - % + % % first \pgfdvnextcell fourth \pgfdvnextcell seventh \pgfdvendrow % second \pgfdvnextcell fifth \pgfdvnextcell third \pgfdvendrow % third \pgfdvendrow sixth \pgfdvnextcell \pgfdvendrow - % + % % By saying \let\pgfdvendrow=\\ and \let\pgfdvnextcell=&, you % can use \arrangment inside a table. + + + \attribute entries; + % Collectes the entries - - \attribute entries;% - % Collects the entries - - \attribute columns or rows;% + \attribute columns or rows; % Specifies whether columns or rows are specified - \attribute ideal;% + \attribute ideal; % The ideal number of columns/rows - \attribute max;% + \attribute max; % The maximum number of entries per column/row - \attribute strategy;% + \attribute strategy; % Specifies how the matrix should be filled - - \attribute number of entries=0;% + + \attribute number of entries=0; % Counts the number of entries that have been stored - - + + % Constructor % % #1 = "columns" or "rows" -> specifies whether the ideal number and @@ -2698,11 +2699,11 @@ \pgfooset{ideal}{#2} \pgfooset{max}{#3} \pgfooset{strategy}{#4} - }% + } % Method \method default connects() { - }% + } % Method \method add entry(#1) { @@ -2710,19 +2711,19 @@ \c@pgf@counta=\pgfoovalueof{number of entries}\relax% \advance\c@pgf@counta by1\relax% \pgfooeset{number of entries}{\the\c@pgf@counta} - }% + } % Method \method get arrangement(#1) { { - % + % % Step 1: Compute the desired number of rows or columns - % - % + % + % % Compute the ideal number of entries per row/column (called % "target" in the following) and entries per colum/row (called % "per target" in the following) - % + % % if (number of entries > ideal) \ifnum\pgfoovalueof{number of entries}>\pgfoovalueof{ideal}\relax% % { @@ -2761,9 +2762,9 @@ \c@pgf@counta=\pgfoovalueof{number of entries}\relax% \c@pgf@countb=1\relax% \fi% - % - % Ensure that counta = rows, countb = columns - % + % + % Ensure that counta = rows, countb = columns + % \pgfooget{columns or rows}\pgf@temp \ifx\pgf@temp\pgf@dv@columnstext% \c@pgf@countc=\c@pgf@counta\relax @@ -2771,14 +2772,14 @@ \c@pgf@countb=\c@pgf@countc\relax \fi %\edef\temp{rows: \the\c@pgf@counta, columns: \the\c@pgf@countb}\temp - % - % Now arrange the matrix - % + % + % Now arrange the matrix + % \csname pgf@dv@legend@init@\pgfoovalueof{strategy}\endcsname \expandafter\let\expandafter\pgf@dv@updater\csname pgf@dv@legend@update@\pgfoovalueof{strategy}\endcsname \pgfooget{entries}\pgf@temp \expandafter\pgf@dv@legend@arrange\pgf@temp\pgf@stop - % + % % Now assemble the matrix % \edef\pgf@dv@row@list{1,...,\the\c@pgf@counta} @@ -2806,24 +2807,24 @@ } \let#1\pgf@dv@matrix \global\let\pgf@dv@matrix\relax - }% - - \def\pgf@dv@first@mark{\pgf@dv@first@mark}% - + } + + \def\pgf@dv@first@mark{\pgf@dv@first@mark} + \def\pgf@dv@legend@arrange{% \pgfutil@ifnextchar\pgf@stop{\pgfutil@gobble}{\pgf@dv@legend@handle@entry} - }% + } \def\pgf@dv@legend@handle@entry#1{ \expandafter\def\csname pgf@dv@legend@entry@\the\c@pgf@countc @\the\c@pgf@countd\endcsname{#1}% \pgf@dv@updater% \pgf@dv@legend@arrange% - }% + } \expandafter\def\csname pgf@dv@legend@init@down then right\endcsname{% \c@pgf@countc=1\relax% \c@pgf@countd=1\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@down then right\endcsname{% \advance\c@pgf@countc by1\relax @@ -2831,25 +2832,25 @@ \c@pgf@countc=1\relax% \advance\c@pgf@countd by1\relax% \fi% - }% + } \expandafter\def\csname pgf@dv@legend@init@right then down\endcsname{% \c@pgf@countc=1\relax% \c@pgf@countd=1\relax% - }% - + } + \expandafter\def\csname pgf@dv@legend@update@right then down\endcsname{% \advance\c@pgf@countd by1\relax \ifnum\c@pgf@countd>\c@pgf@countb\relax% \c@pgf@countd=1\relax% \advance\c@pgf@countc by1\relax% \fi% - }% + } \expandafter\def\csname pgf@dv@legend@init@up then right\endcsname{% \c@pgf@countc=\c@pgf@counta\relax% \c@pgf@countd=1\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@up then right\endcsname{% \advance\c@pgf@countc by-1\relax @@ -2857,12 +2858,12 @@ \c@pgf@countc=\c@pgf@counta\relax% \advance\c@pgf@countd by1\relax% \fi% - }% - + } + \expandafter\def\csname pgf@dv@legend@init@right then up\endcsname{% \c@pgf@countc=\c@pgf@counta\relax% \c@pgf@countd=1\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@right then up\endcsname{% \advance\c@pgf@countd by1\relax @@ -2870,12 +2871,12 @@ \c@pgf@countd=1\relax% \advance\c@pgf@countc by-1\relax% \fi% - }% - + } + \expandafter\def\csname pgf@dv@legend@init@left then up\endcsname{% \c@pgf@countc=\c@pgf@counta\relax% \c@pgf@countd=\c@pgf@countb\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@left then up\endcsname{% \advance\c@pgf@countd by-1\relax @@ -2883,12 +2884,12 @@ \c@pgf@countd=\c@pgf@countb\relax% \advance\c@pgf@countc by-1\relax% \fi% - }% - + } + \expandafter\def\csname pgf@dv@legend@init@up then left\endcsname{% \c@pgf@countc=\c@pgf@counta\relax% \c@pgf@countd=\c@pgf@countb\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@up then left\endcsname{% \advance\c@pgf@countc by-1\relax @@ -2896,12 +2897,12 @@ \c@pgf@countc=\c@pgf@counta\relax% \advance\c@pgf@countd by-1\relax% \fi% - }% - + } + \expandafter\def\csname pgf@dv@legend@init@left then down\endcsname{% \c@pgf@countc=1\relax% \c@pgf@countd=\c@pgf@countb\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@left then down\endcsname{% \advance\c@pgf@countd by-1\relax @@ -2909,12 +2910,12 @@ \c@pgf@countd=\c@pgf@countb\relax% \advance\c@pgf@countc by1\relax% \fi% - }% - + } + \expandafter\def\csname pgf@dv@legend@init@down then left\endcsname{% \c@pgf@countc=1\relax% \c@pgf@countd=\c@pgf@countb\relax% - }% + } \expandafter\def\csname pgf@dv@legend@update@down then left\endcsname{% \advance\c@pgf@countc by1\relax @@ -2922,10 +2923,10 @@ \c@pgf@countc=1\relax% \advance\c@pgf@countd by-1\relax% \fi% - }% - - \def\pgf@dv@columnstext{columns}% -}% + } + + \def\pgf@dv@columnstext{columns} +} @@ -2934,17 +2935,17 @@ % \pgfooclass{interval} -{% +{ % Class interval % % Instances of this class store intervals. When either the min or % the max value is empty, this corresponds to "not yet set", (not to - % "infinity). + % "infinity). - \attribute min;% + \attribute min; % The minimum value of the interval - - \attribute max;% + + \attribute max; % The maximum value of the interval % Constructor @@ -2955,25 +2956,25 @@ \method interval(#1,#2) { \pgfooset{min}{#1} \pgfooset{max}{#2} - }% + } % Method \method default connects() { - }% + } % Sets the minimum/maximum to a new value \method set min(#1) { \pgfooset{min}{#1} - }% + } \method set max(#1) { \pgfooset{max}{#1} - }% + } \method let min(#1) { \pgfoolet{min}{#1} - }% + } \method let max(#1) { \pgfoolet{max}{#1} - }% + } % Getter % @@ -2982,9 +2983,9 @@ \method get min and max() { \pgfooget{min}\pgfdvmin \pgfooget{max}\pgfdvmax - }% + } - % Adjusts the minimum and maximum values + % Adjusts the mimum and maximum values % % #1 = some code. When this code is executed, the values of % \pgfdvmin and \pgfdvmax will be set to the current values of @@ -3001,13 +3002,13 @@ \pgfoolet{min}\pgfdvmin \pgfoolet{max}\pgfdvmax }% - }% -}% + } +} \pgfooclass{count} -{% +{ % Class count % % This class can be used to count the number of data points that are @@ -3017,70 +3018,70 @@ % the counter. You can specify that certain data points should % not have an effect on the counter. - - \attribute attribute;% + + \attribute attribute; % The attribute that will be set to the current value of the counter - - \attribute val=0;% + + \attribute val=0; % The current value of the counter - - \attribute max=0;% + + \attribute max=0; % The current value of the counter - - \attribute step=1;% + + \attribute step=1; % The stepping by which the counter is incremented for each % datapoint - - \attribute start val=0;% + + \attribute start val=0; % The start value of the counter - \attribute filter=;% + \attribute filter=; % This attribute stores some code that is executed for each % data point. If the data point sets the TeX-if ifpgfdvfilterpassed to % true, then the counter is not incremented. - + % Constructor % % #1 = The attribute in which the counter value is stored % \method count(#1) { \pgfooset{attribute}{#1} - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,apply,prepare datapoint signal) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% + } % Getter \method get max(#1) { \pgfooget{max}{#1} - }% + } % Setter \method set value(#1) { \pgfooset{val}{#1} \pgfkeyssetvalue{/data point/\pgfoovalueof{attribute}}{#1}% - }% + } % Setter \method set start value(#1) { \pgfooset{start val}{#1} \pgfooset{max}{#1} - }% + } % Setter \method set filter(#1) { \pgfooset{filter}{#1} - }% + } % Setter \method set step(#1) { \pgfooset{step}{#1} - }% + } % Slot \method apply() { @@ -3096,17 +3097,17 @@ \pgfooget{max}\pgfmathresult% \pgfkeyslet{/data point/\pgfoovalueof{attribute}/max}\pgfmathresult% \fi% - }% + } - % Slot + % Slot \method phase(#1) { \ifx#1\pgfdvbeginsurvey \pgfooeset{val}{\pgfoovalueof{start val}} \else \ifx#1\pgfdvbeginvisualization \pgfooeset{val}{\pgfoovalueof{start val}} \fi\fi - }% -}% + } +} \newif\ifpgfdvfilterpassed @@ -3114,7 +3115,7 @@ \pgfooclass{accumulator} -{% +{ % Class accumulator % % This class is used to keep track of the sum of the values of some @@ -3123,12 +3124,12 @@ % all previous data points with respect to this % attribute. Furthermore, the subkey attribute/prev key will hold % the previous sum, which is sometimes also useful to have access - % to. + % to. - \attribute attribute;% + \attribute attribute; % The attribute to-be-accumulated - - \attribute sum;% + + \attribute sum; % The initial value of the sum % Constructor @@ -3137,19 +3138,19 @@ \method accumulator(#1) { \pgfooset{attribute}{#1} \pgfoothis.reset() - }% + } % Method \method default connects() { \pgfoothis.get handle(\pgf@dv@me) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,apply,prepare datapoint signal) \pgfkeysvalueof{/pgf/data visualization/obj}.connect(\pgf@dv@me,phase,phase signal) - }% + } % Slot \method apply() {% % Save old sum - \pgfkeysgetvalue{/data point/\pgfoovalueof{attribute}/sum}\pgf@temp% + \pgfkeysgetvalue{/data point/\pgfoovalueof{attribute}/sum}\pgf@temp% \pgfkeyslet{/data point/\pgfoovalueof{attribute}/prev sum}\pgf@temp% % Add new attribute... \pgfkeysgetvalue{/data point/\pgfoovalueof{attribute}}{\pgf@temp@b}% @@ -3161,7 +3162,7 @@ % Record in attribute \pgfdvmathexitbyscientificformat{\pgf@dv@serial@sum}{\pgf@dv@sum} \pgfkeyslet{/data point/\pgfoovalueof{attribute}/sum}\pgf@dv@serial@sum - }% + } % Method % @@ -3173,7 +3174,7 @@ \pgfdvmathexitbyserializing{\pgf@dv@zero}{\pgf@dv@temp} \pgfkeyslet{/data point/\pgfoovalueof{attribute}/prev sum}{\pgf@dv@zero} \pgfkeyslet{/data point/\pgfoovalueof{attribute}/sum}{\pgf@dv@zero} - }% + } % Slot \method phase(#1) { @@ -3182,8 +3183,8 @@ \else \ifx#1\pgfdvbeginvisualization \pgfoothis.reset() \fi\fi - }% -}% + } +} @@ -3203,13 +3204,19 @@ /data point/always 0/.initial=0, /data point/always 1/.initial=1, /data point/always empty/.initial=, - /data point/always pgfusepath stroke/.initial=\pgfusepath{stroke}, -}% + /data point/always pgfusepath stroke/.initial=\pgfusepath{stroke} +} -\pgfdvmathenter{\pgfdvmathalwaysloge}{0.434294481903252}% -\pgfdvmathenter{\pgfdvmathalwayslnten}{2.302585092994046}% -\pgfdvmathenter{\pgfdvmathalwayszero}{0}% -\pgfdvmathenter{\pgfdvmathalwaysone}{1}% +\pgfdvmathenter{\pgfdvmathalwaysloge}{0.434294481903252} +\pgfdvmathenter{\pgfdvmathalwayslnten}{2.302585092994046} +\pgfdvmathenter{\pgfdvmathalwayszero}{0} +\pgfdvmathenter{\pgfdvmathalwaysone}{1} \endinput + + + + + + |