You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2009 lines
58 KiB
2009 lines
58 KiB
% Copyright 2016 by Till Tantau
|
|
%
|
|
% This file may be distributed and/or modified
|
|
%
|
|
% 1. under the LaTeX Project Public License and/or
|
|
% 2. under the GNU Public License.
|
|
%
|
|
% See the file doc/generic/pgf/licenses/LICENSE for more details.
|
|
|
|
|
|
|
|
% Guard against reading twice
|
|
\ifx\pgfsysanimationsloaded\pgfutil@undefined
|
|
\let\pgfsysanimationsloaded=\relax
|
|
\else
|
|
\expandafter\endinput
|
|
\fi
|
|
|
|
|
|
% We need some support:
|
|
\usepgfmodule{decorations}
|
|
|
|
|
|
% Animation abstraction layer
|
|
%
|
|
% This layer provides an abstraction of the
|
|
% \pgfsys@anim... commands. The idea is to provide an interface that
|
|
% can map animation commands either to "real" animations (for instance
|
|
% in the sense of SVG) or to "snapshots" of animations, which are
|
|
% especially useful for printing. For these snapshots, instead of
|
|
% adding an animation property to a scope, the property is actually
|
|
% set to a certain value computed by \TeX.
|
|
%
|
|
% For each \pgfsys@animation@... command there is a corresponding
|
|
% \pgfsysanim command.
|
|
|
|
|
|
% Set the current time to a snapshot time
|
|
%
|
|
% #1 = a global snapshot time (a dimensionless number, measured in
|
|
% seconds).
|
|
%
|
|
% Description:
|
|
%
|
|
% When this command is used in a scope, instead of creating an
|
|
% animation, pgf will insert appropriate commands that show the state
|
|
% of the animation at the given time.
|
|
%
|
|
% The value #1 can be thought of as the "global time", which can be
|
|
% thought of as the time that elapsed since the "onload" event.
|
|
%
|
|
% The command \pgfsysanimsnapshotafter works the same way as
|
|
% pgfsysanimsnapshot, only the time #1 is interpreted as "global time
|
|
% #1 + epsilon". This means that when two or more values are specified
|
|
% for time #1, the last of them is used rather than the
|
|
% first. Likewise, when a non-freezing timeline ends at time #1,
|
|
% \pgfsysanimsnapshot will set the value to the last value in the
|
|
% timeline, while \pgfsysanimsnapshotafter removes the animation.
|
|
%
|
|
% The following commands and effect for animations are ignored / not
|
|
% implemented for snapshots (meaning that even if the "real" animation
|
|
% would look in a certain way because of one of the following commands
|
|
% or effects, the snapshot will not reflect this):
|
|
%
|
|
% - Events and restarts are ignored. For the snapshot, all animations
|
|
% start at global time 0, except if the command
|
|
% \pgfsysanimkeysnapshotstart is used to specify a different
|
|
% start for a specific animation.
|
|
% - The "current value" as starting value (pgf has no real chance of
|
|
% determining the correct value of this). Using this with a snapshot
|
|
% will raise an error.
|
|
%
|
|
% Example:
|
|
%
|
|
% {
|
|
% \pgfsyssnapshot{2}%
|
|
% \pgfsysanimkeytime{0}{1}{1}{0}{0}
|
|
% \pgfsysanimvalscalar{1}
|
|
% \pgfsysanimkeytime{5}{1}{1}{0}{0}
|
|
% \pgfsysanimvalscalar{0}
|
|
% \pgfsysanimkeywhom{\someid}{}
|
|
% \pgfsysanimate{fillopacity}%
|
|
% % Will set the opacity of \someid to 0.6
|
|
% }
|
|
|
|
\def\pgfsysanimsnapshot#1{%
|
|
\def\pgfsysanim@snaptime{#1}%
|
|
\pgfsysanim@snap@firsttrue%
|
|
\pgfsysanim@is@snaptrue%
|
|
}
|
|
\def\pgfsysanimsnapshotafter#1{%
|
|
\def\pgfsysanim@snaptime{#1}%
|
|
\pgfsysanim@snap@firstfalse%
|
|
\pgfsysanim@is@snaptrue%
|
|
}
|
|
\newif\ifpgfsysanim@is@snap
|
|
\newif\ifpgfsysanim@snap@first
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animate
|
|
%
|
|
% #1 = attribute
|
|
%
|
|
% Description:
|
|
%
|
|
% If not snapshot is set, \pgfsys@animate is simply called. Otherwise,
|
|
% appropriate code is generated that sets the specified attribute of
|
|
% the whom object to the value it would have during the animation at
|
|
% the moment of the snapshot.
|
|
|
|
\def\pgfsysanimate#1{%
|
|
\csname pgfsysanim@checks@#1\endcsname%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@do@snap{#1}%
|
|
\else%
|
|
\pgfsys@animate{#1}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@do@snap#1{%
|
|
{%
|
|
\expandafter\ifx\csname pgfsysanim@prep@attr@#1\endcsname\pgfutil@undefined%
|
|
\else%
|
|
% First, compute time frame:
|
|
\pgfsysanim@compute@interval%
|
|
% Second, compute code:
|
|
\let\pgfsysanim@code@begin\relax%
|
|
\let\pgfsysanim@code@end\pgfutil@empty%
|
|
\csname pgfsysanim@prep@attr@#1\endcsname%
|
|
\ifx\pgfsysanim@code@begin\relax%
|
|
\else%
|
|
% Attach to object:
|
|
\expandafter\expandafter\expandafter\pgfsysanim@call@attacher%
|
|
\expandafter\expandafter\expandafter{\expandafter\pgfsysanim@code@begin\expandafter}\expandafter{\pgfsysanim@code@end}{}%
|
|
\fi%
|
|
\fi%
|
|
}%
|
|
}
|
|
\def\pgfsysanim@call@attacher{\pgfsys@attach@to@id{\pgfsysanim@whom@id}{\pgfsysanim@whom@type}}
|
|
|
|
|
|
% Do some checks:
|
|
\def\pgfsysanim@checks@path{%
|
|
\expandafter\global\expandafter\let\csname pgfsysanim@path@is@animated@\pgfsysanim@whom@id @\pgfsysanim@whom@type\endcsname\pgfutil@empty%
|
|
}
|
|
|
|
|
|
% Companions for \pgfsys@animation@restart@...
|
|
%
|
|
% Description:
|
|
%
|
|
% These commands just call \pgfsys@animation@restart@... and they are
|
|
% *ignored* when it comes to snapshots.
|
|
|
|
\def\pgfsysanimkeyrestartalways{\pgfsys@animation@restart@always}
|
|
\def\pgfsysanimkeyrestartnever{\pgfsys@animation@restart@never}
|
|
\def\pgfsysanimkeyrestartwhennotactive{\pgfsys@animation@restart@whennotactive}
|
|
|
|
|
|
|
|
% Companions for \pgfsys@animation@repeat...
|
|
%
|
|
% Description:
|
|
%
|
|
% These commands call \pgfsys@animation@repeat... and, if there is a
|
|
% snapshot installed, the passed values are taken into consideration.
|
|
|
|
\def\pgfsysanimkeyrepeat#1{%
|
|
\pgfsys@animation@repeat{#1}%
|
|
% Snapshot
|
|
\let\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@normal%
|
|
{%
|
|
\pgf@x#1pt\relax%
|
|
\expandafter}%
|
|
\expandafter\def\expandafter\pgfsysanim@snap@repeat@arg\expandafter{\the\pgf@x}%
|
|
}
|
|
\def\pgfsysanimkeyrepeatindefinite{%
|
|
\pgfsys@animation@repeat@indefinite%
|
|
% Snapshot
|
|
\let\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@indefinite%
|
|
\let\pgfsysanim@snap@repeat@arg\pgfutil@empty%
|
|
}
|
|
\def\pgfsysanimkeyrepeatdur#1{%
|
|
\pgfsys@animation@repeat@dur{#1}%
|
|
% Snapshot
|
|
\let\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@dur%
|
|
{%
|
|
\pgf@x#1pt\relax%
|
|
\expandafter}%
|
|
\expandafter\def\expandafter\pgfsysanim@snap@repeat@arg\expandafter{\the\pgf@x}%
|
|
}
|
|
\def\pgfsysanim@snap@repeat@none{n}%
|
|
\def\pgfsysanim@snap@repeat@normal{m}%
|
|
\def\pgfsysanim@snap@repeat@indefinite{i}%
|
|
\def\pgfsysanim@snap@repeat@dur{d}%
|
|
\let\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@none
|
|
\let\pgfsysanim@snap@repeat@arg\pgfutil@empty
|
|
|
|
|
|
|
|
% Companions for \pgfsys@animation@freezeatend and
|
|
% \pgfsys@animation@removeatend
|
|
%
|
|
% Description:
|
|
%
|
|
% These commands call the two system commands and, if there is a
|
|
% snapshot installed, the settings are taken into consideration.
|
|
|
|
\def\pgfsysanimkeyfreezeatend{\pgfsys@animation@freezeatend\pgfsysanim@freezeatendtrue}
|
|
\def\pgfsysanimkeyremoveatend{\pgfsys@animation@removeatend\pgfsysanim@freezeatendfalse}
|
|
\newif\ifpgfsysanim@freezeatend
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@time
|
|
%
|
|
% #1 to #5 = as in \pgfsys@animation@time
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@time. Furthermore, the specified times are
|
|
% recorded so that they can later be analysed for the computation
|
|
% needed for a snapshot.
|
|
|
|
\def\pgfsysanimkeytime#1#2#3#4#5{%
|
|
% Setup animation
|
|
\pgfsys@animation@time{#1}{#2}{#3}{#4}{#5}%
|
|
% and remember for snapshots
|
|
\def\pgfsysanim@time{{#1}{#2}{#3}{#4}{#5}}%
|
|
}
|
|
|
|
|
|
% Sets the base value
|
|
%
|
|
% Description:
|
|
%
|
|
% This will set the "base" value for an animation, which is installed
|
|
% prior to any animation of the attribute.
|
|
|
|
\def\pgfsysanimkeybase{%
|
|
\pgfsys@animation@base%
|
|
\let\pgfsysanim@time\pgfsysanim@base@text%
|
|
}
|
|
\def\pgfsysanim@base@text{base}%
|
|
|
|
% Sets the beginning of the timeline for snapshots
|
|
%
|
|
% #1 = a time (a scalar)
|
|
%
|
|
% Description:
|
|
%
|
|
% Sets the start of current animation to #1 for snapshots. For
|
|
% instance, if #1 is 5 (=five seconds), and you say
|
|
% \pgfsysanimsnapshot{6}, the attribute will be set to whatever the
|
|
% animation specifies after one second.
|
|
|
|
\def\pgfsysanimkeysnapshotstart#1{%
|
|
\def\pgfsysanim@snapshotstart{#1}%
|
|
}
|
|
\def\pgfsysanim@snapshotstart{0}
|
|
|
|
|
|
% Companion for \pgfsys@animation@offset
|
|
%
|
|
% #1, #2 = as in \pgfsys@animation@offset
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@offset.
|
|
|
|
\def\pgfsysanimkeyoffset#1#2{%
|
|
\pgfsys@animation@offset{#1}{#2}%
|
|
}
|
|
|
|
|
|
% Companion for \pgfsys@animation@sync(begin|end)
|
|
%
|
|
% #1 to #4 = as in \pgfsys@animation@sync(begin|end)
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@sync(begin|end).
|
|
|
|
\def\pgfsysanimkeysyncbegin#1#2#3#4{%
|
|
\pgfsys@animation@syncbegin{#1}{#2}{#3}{#4}%
|
|
}
|
|
|
|
\def\pgfsysanimkeysyncend#1#2#3#4{%
|
|
\pgfsys@animation@syncend{#1}{#2}{#3}{#4}%
|
|
}
|
|
|
|
|
|
% Companion for \pgfsys@animation@event
|
|
%
|
|
% #1 to #5 = as in \pgfsys@animation@event
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@event.
|
|
|
|
\def\pgfsysanimkeyevent#1#2#3#4#5{%
|
|
\pgfsys@animation@event{#1}{#2}{#3}{#4}{#5}%
|
|
}
|
|
|
|
|
|
% Companion for \pgfsys@animation@repeat@event
|
|
%
|
|
% #1 to #5 = as in \pgfsys@animation@repeat@event
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@repeat@event.
|
|
|
|
\def\pgfsysanimkeyrepeatevent#1#2#3#4#5{%
|
|
\pgfsys@animation@repeat@event{#1}{#2}{#3}{#4}{#5}%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@accesskey
|
|
%
|
|
% #1 to #3 = as in \pgfsys@animation@accesskey
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@accesskey.
|
|
|
|
\def\pgfsysanimkeyaccesskey#1#2#3{%
|
|
\pgfsys@animation@accesskey{#1}{#2}{#3}%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Companions for \pgfsys@animation@(no)accumulate
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animaion@(no)accumulate and records the setting for
|
|
% snapshots.
|
|
|
|
\def\pgfsysanimkeyaccumulate{\pgfsys@animation@accumulate\pgfsysanim@accumulatetrue}
|
|
\def\pgfsysanimkeynoaccumulate{\pgfsys@animation@noaccumulate\pgfsysanim@accumulatefalse}
|
|
\newif\ifpgfsysanim@accumulate
|
|
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@whom
|
|
%
|
|
% #1 and #2 = as for \pgfsys@animation@whom
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls \pgfsys@animation@whom and records the setting for snapshots.
|
|
|
|
\def\pgfsysanimkeywhom#1#2{%
|
|
\pgfsys@register@type{#2}%
|
|
\pgfsys@animation@whom{#1}{#2}%
|
|
% Snapshots
|
|
\def\pgfsysanim@whom@id{#1}%
|
|
\def\pgfsysanim@whom@type{#2}%
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
% Companions for \pgfsys@animation@rotatealong and
|
|
% \pgfsys@animation@norotatealong
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command and records the setting for
|
|
% snapshots.
|
|
|
|
\def\pgfsysanimkeyrotatealong{\pgfsys@animation@rotatealong\pgfsysanim@rotatealongtrue}
|
|
\def\pgfsysanimkeynorotatealong{\pgfsys@animation@norotatealong\pgfsysanim@rotatealongfalse}
|
|
\newif\ifpgfsysanim@rotatealong
|
|
|
|
|
|
% Companion for \pgfsys@animation@movealong
|
|
%
|
|
% #1 = the path
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command and records the setting for
|
|
% snapshots.
|
|
|
|
\def\pgfsysanimkeymovealong#1{%
|
|
\pgfsys@animation@movealong{#1}%
|
|
% Snapshot
|
|
\def\pgfsysanim@snap@movealong{#1}%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@tip@markers
|
|
%
|
|
% #1, #2 = the markers
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command and records the setting for
|
|
% snapshots.
|
|
|
|
\def\pgfsysanimkeytipmarkers#1#2{%
|
|
\pgfsys@animation@tip@markers{#1}{#2}%
|
|
% Snapshot
|
|
\def\pgfsysanim@snap@tip@start{#1}%
|
|
\def\pgfsysanim@snap@tip@end{#2}%
|
|
}
|
|
\let\pgfsysanim@snap@tip@start\pgfutil@empty%
|
|
\let\pgfsysanim@snap@tip@end\pgfutil@empty%
|
|
|
|
|
|
% Companion for \pgfsys@animation@canvas@transform
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command and records the setting for
|
|
% snapshots.
|
|
|
|
\def\pgfsysanimkeycanvastransform#1#2{%
|
|
\pgfsys@animation@canvas@transform{#1}{#2}%
|
|
% Snapshot
|
|
\def\pgfsysanim@snap@canvas@transform@pre{#1}%
|
|
\def\pgfsysanim@snap@canvas@transform@post{#2}%
|
|
}
|
|
\let\pgfsysanim@snap@canvas@transform@pre\relax
|
|
\let\pgfsysanim@snap@canvas@transform@post\relax
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@current
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% an error results.
|
|
|
|
\def\pgfsysanimvalcurrent{%
|
|
\pgfsys@animation@val@current%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgferror{You may not use "current value" with an animation snapshot}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
% Suppresses the animation value
|
|
%
|
|
% Description:
|
|
%
|
|
% The animation value is simply ignored.
|
|
|
|
\def\pgfsysanimvalnone{%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@text
|
|
%
|
|
% #1 = as for \pgfsys@animation@val@text
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvaltext#1{%
|
|
\pgfsys@animation@val@text{#1}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{#1}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@scalar
|
|
%
|
|
% #1 = as for \pgfsys@animation@val@scalar
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalscalar#1{%
|
|
\pgfsys@animation@val@scalar{#1}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{#1}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@dimension
|
|
%
|
|
% #1 = as for \pgfsys@animation@val@dimension
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvaldimension#1{%
|
|
\pgfsys@animation@val@dimension{#1}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{#1}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Dispatcher for different color values
|
|
%
|
|
% #1 = a color value (like "red" or "black!20")
|
|
%
|
|
% Description:
|
|
%
|
|
% This macro transforms #1 into its correct color model and, then,
|
|
% calls the correct \pgfsysanimcolor... macro.
|
|
|
|
\def\pgfsysanimvalcolor#1{%
|
|
\pgfutil@colorlet{pgf@anim@temp}{#1}%
|
|
\pgfutil@ifundefined{applycolormixins}{}{\applycolormixins{pgf@anim@temp}}%
|
|
\expandafter\let\expandafter\pgf@sys@temp\csname\string\color@pgf@anim@temp\endcsname
|
|
\expandafter\pgfanim@parse@type@color@\pgf@sys@temp%
|
|
}
|
|
\def\pgfanim@parse@type@color@#1#2#3#4#5{%
|
|
\expandafter\ifx\csname pgfsysanimvalcolor#4\endcsname\relax%
|
|
\pgferror{Unsupported color model `#4'}%
|
|
\else%
|
|
\edef\pgf@sys@colmarshal{\expandafter\noexpand\csname pgfsysanimvalcolor#4\endcsname}%
|
|
\pgf@sys@uncomma#5,,%
|
|
\pgf@sys@colmarshal%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgf@sys@uncomma#1,{%
|
|
\def\pgf@sys@coltest{#1}%
|
|
\ifx\pgf@sys@coltest\pgfutil@empty%
|
|
\else%
|
|
\expandafter\def\expandafter\pgf@sys@colmarshal\expandafter{\pgf@sys@colmarshal{#1}}%
|
|
\expandafter\pgf@sys@uncomma%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@color@rgb
|
|
%
|
|
% #1, #2, #3 = as for \pgfsys@animation@val@color@rgb
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalcolorrgb#1#2#3{%
|
|
\pgfsys@animation@val@color@rgb{#1}{#2}{#3}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#2}{#3}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@color@cmyk
|
|
%
|
|
% #1, #2, #3, #4 = as for \pgfsys@animation@val@color@cmyk
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalcolorcmyk#1#2#3#4{%
|
|
\pgfsys@animation@val@color@cmyk{#1}{#2}{#3}{#4}%
|
|
\ifpgfsysanim@is@snap%
|
|
{%
|
|
\pgf@xa=1pt%
|
|
\advance\pgf@xa by-#1pt%
|
|
\advance\pgf@xa by-#4pt\relax%
|
|
\ifdim\pgf@xa<0pt\pgf@xa0pt\fi%
|
|
\pgf@xb=1pt%
|
|
\advance\pgf@xb by-#1pt%
|
|
\advance\pgf@xb by-#4pt\relax%
|
|
\ifdim\pgf@xb<0pt\pgf@xb0pt\fi%
|
|
\pgf@xc=1pt%
|
|
\advance\pgf@xc by-#1pt%
|
|
\advance\pgf@xc by-#4pt\relax%
|
|
\ifdim\pgf@xc<0pt\pgf@xc0pt\fi%
|
|
\edef\pgfsys@temp{{\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xc}}%
|
|
\expandafter}%
|
|
\expandafter\pgfsysanim@esnap@record\expandafter{\pgfsys@temp}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@color@cmy
|
|
%
|
|
% #1, #2, #3 = as for \pgfsys@animation@val@color@cmy
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalcolorcmy#1#2#3{%
|
|
\pgfsys@animation@val@color@cmy{#1}{#2}{#3}%
|
|
\ifpgfsysanim@is@snap%
|
|
{%
|
|
\pgf@xa=1pt%
|
|
\advance\pgf@xa by-#1pt%
|
|
\pgf@xb=1pt%
|
|
\advance\pgf@xb by-#1pt%
|
|
\pgf@xc=1pt%
|
|
\advance\pgf@xc by-#1pt%
|
|
\edef\pgfsys@temp{{\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xc}}%
|
|
\expandafter}%
|
|
\expandafter\pgfsysanim@esnap@record\expandafter{\pgfsys@temp}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@color@gray
|
|
%
|
|
% #1 = as for \pgfsys@animation@val@color@gray
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalcolorgray#1{%
|
|
\pgfsys@animation@val@color@gray{#1}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#1}{#1}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Special companion for \pgfsys@animation@val@path
|
|
%
|
|
% #1 = as for \pgfsys@animation@val@path
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalpath#1{%
|
|
\pgfsys@animation@val@path{#1}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@snap@record{#1}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@translate
|
|
%
|
|
% #1, #2 = as for \pgfsys@animation@val@translate
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvaltranslate#1#2{%
|
|
\pgfsys@animation@val@translate{#1}{#2}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#2}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@scale
|
|
%
|
|
% #1, #2 = as for \pgfsys@animation@val@scale
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalscale#1#2{%
|
|
\pgfsys@animation@val@scale{#1}{#2}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#2}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@viewbox
|
|
%
|
|
% #1, #2, #3, #4 = as for \pgfsys@animation@val@viewbox
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvalviewbox#1#2#3#4{%
|
|
\pgfsys@animation@val@viewbox{#1}{#2}{#3}{#4}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#2}{#3}{#4}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Companion for \pgfsys@animation@val@dash
|
|
%
|
|
% #1, #2 = as for \pgfsys@animation@val@dash
|
|
%
|
|
% Description:
|
|
%
|
|
% Calls the system layer command. If a snapshot is currently active,
|
|
% the value is recorded in the timeline.
|
|
|
|
\def\pgfsysanimvaldash#1#2{%
|
|
\pgfsys@animation@val@dash{#1}{#2}%
|
|
\ifpgfsysanim@is@snap%
|
|
\pgfsysanim@esnap@record{{#1}{#2}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
%
|
|
% Recording mechanism: We record entries in an array.
|
|
%
|
|
|
|
\def\pgfsysanim@esnap@record#1{% records a new entry for the timeline
|
|
\edef\pgfsysanim@temp{#1}%
|
|
\expandafter\pgfsysanim@snap@record\expandafter{\pgfsysanim@temp}%
|
|
}
|
|
\def\pgfsysanim@snap@record#1{% records a new entry for the timeline
|
|
\ifx\pgfsysanim@time\pgfsysanim@base@text%
|
|
\def\pgfsysanim@base@value{#1}%
|
|
\else%
|
|
\advance\pgfsysanim@snap@count by1\relax%
|
|
\expandafter\def\expandafter\pgfsysanim@temp\expandafter{\pgfsysanim@time{#1}}%
|
|
\expandafter\let\csname pgfsysanim@snap@\the\pgfsysanim@snap@count\endcsname\pgfsysanim@temp%
|
|
\fi%
|
|
}
|
|
\newcount\pgfsysanim@snap@count
|
|
\let\pgfsysanim@base@value\pgfutil@empty%
|
|
|
|
|
|
% Compute the time-value interval of the snapshot: Based on the value of \pgfsysanim@snaptime,
|
|
% computes the interval containing the specified time. This interval
|
|
% will start at \pgfsysanim@prev@time and end at
|
|
% \pgfsysanim@next@time. The values will be \pgfsysanim@prev@val and
|
|
% \pgfsysanim@next@val.
|
|
%
|
|
\def\pgfsysanim@compute@interval{%
|
|
\let\pgfsysanim@prev@val\relax%
|
|
\let\pgfsysanim@prev@time\relax%
|
|
\let\pgfsysanim@prev@spline\pgfsysanim@default@spline%
|
|
\let\pgfsysanim@next@val\relax%
|
|
\let\pgfsysanim@next@time\relax%
|
|
\let\pgfsysanim@next@spline\pgfsysanim@default@spline%
|
|
\let\pgfsysanim@first@time\relax%
|
|
\let\pgfsysanim@last@time\relax%
|
|
\let\pgfsysanim@last@val\relax%
|
|
\ifnum\pgfsysanim@snap@count>0\relax%
|
|
\pgf@xc\pgfsysanim@snaptime pt\relax%
|
|
\pgf@x\pgfsysanim@snapshotstart pt\relax%
|
|
\advance\pgf@xc-\pgf@x\relax%
|
|
% Compute the start and end times:
|
|
\pgfsysanim@compute@start@end%
|
|
\pgfsysanim@compute@value%
|
|
\fi%
|
|
% Test whether a valid interval has been found:
|
|
\pgfsysanim@valid@snapshot@timefalse%
|
|
\ifx\pgfsysanim@prev@time\relax%
|
|
\else\ifx\pgfsysanim@next@time\relax%
|
|
\else\pgfsysanim@valid@snapshot@timetrue%
|
|
\fi\fi%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
% ok, computed later
|
|
\else%
|
|
\ifx\pgfsysanim@base@value\pgfutil@empty%
|
|
\else%
|
|
% Ah, use base value!
|
|
\let\pgfsysanim@prev@val\pgfsysanim@base@value%
|
|
\def\pgfsysanim@prev@time{0}%
|
|
\let\pgfsysanim@prev@spline\pgfsysanim@default@spline%
|
|
\let\pgfsysanim@next@val\pgfsysanim@base@value%
|
|
\let\pgfsysanim@next@time\pgfsysanim@prev@time%
|
|
\let\pgfsysanim@next@spline\pgfsysanim@default@spline%
|
|
\def\pgfsysanim@first@time{-16382}%
|
|
\let\pgfsysanim@last@time\pgfsysanim@prev@time%
|
|
\let\pgfsysanim@last@val\pgfsysanim@base@value%
|
|
\def\pgfsysanim@frac@a{1}%
|
|
\def\pgfsysanim@frac@b{0}%
|
|
\pgfsysanim@valid@snapshot@timetrue% counts as valid!
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\newif\ifpgfsysanim@cont%
|
|
\newif\ifpgfsysanim@valid@snapshot@time
|
|
\def\pgfsysanim@default@spline{{0}{0}{1}{1}}
|
|
|
|
\def\pgfsysanim@compute@start@end{%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@compute@start\csname pgfsysanim@snap@1\endcsname%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@compute@end\csname pgfsysanim@snap@\the\pgfsysanim@snap@count\endcsname%
|
|
}
|
|
\def\pgfsysanim@compute@start#1#2#3#4#5#6{%
|
|
\def\pgfsysanim@first@time{#1}%
|
|
}
|
|
\def\pgfsysanim@compute@end#1#2#3#4#5#6{%
|
|
\def\pgfsysanim@last@time{#1}%
|
|
\def\pgfsysanim@last@val{#6}%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@compute@value{%
|
|
% First, are we before start?
|
|
\ifdim\pgf@xc<\pgfsysanim@first@time pt\relax%
|
|
% snapshot time (xc) is before start of animation. So, nothing happens:
|
|
\else%
|
|
\ifx\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@none%
|
|
\pgfsysanim@handle@repeat@none%
|
|
\else\ifx\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@normal%
|
|
\pgfsysanim@handle@repeat@normal%
|
|
\else\ifx\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@indefinite%
|
|
\pgfsysanim@handle@repeat@indefinite%
|
|
\else\ifx\pgfsysanim@snap@repeat@kind\pgfsysanim@snap@repeat@dur%
|
|
\pgfsysanim@handle@repeat@dur%
|
|
\fi\fi\fi\fi%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@handle@repeat@none{%
|
|
\ifdim\pgf@xc<\pgfsysanim@last@time pt\relax%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
\ifdim\pgf@xc=\pgfsysanim@last@time pt\relax%
|
|
% A bit tricky:
|
|
\ifpgfsysanim@snap@first%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
\ifpgfsysanim@freezeatend%
|
|
\let\pgfsysanim@prev@val\pgfsysanim@last@val%
|
|
\let\pgfsysanim@prev@time\pgfsysanim@last@time%
|
|
\let\pgfsysanim@next@val\pgfsysanim@last@val%
|
|
\let\pgfsysanim@next@time\pgfsysanim@last@time%
|
|
\fi%
|
|
\fi%
|
|
\else%
|
|
% Called when we are past the end.
|
|
\ifpgfsysanim@freezeatend%
|
|
\let\pgfsysanim@prev@val\pgfsysanim@last@val%
|
|
\let\pgfsysanim@prev@time\pgfsysanim@last@time%
|
|
\let\pgfsysanim@next@val\pgfsysanim@last@val%
|
|
\let\pgfsysanim@next@time\pgfsysanim@last@time%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@handle@repeat@indefinite{%
|
|
\ifdim\pgf@xc<\pgfsysanim@last@time pt\relax%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
% Compute interval length
|
|
\pgf@xa=\pgfsysanim@last@time pt%
|
|
\pgf@xb=\pgfsysanim@first@time pt%
|
|
\advance\pgf@xa by-\pgf@xb%
|
|
% Compute repeat count and fraction:
|
|
\pgf@ya\pgf@xc%
|
|
\advance\pgf@ya by-\pgf@xb%
|
|
\ifdim\pgf@xa<0.01pt\relax%
|
|
% Interval too small: Goto end of interval
|
|
\def\pgfmathresult{1.0}%
|
|
\else%
|
|
\pgfmathdivide@{\pgf@ya}{\pgf@xa}%
|
|
\fi%
|
|
\pgf@x\pgfmathresult pt\relax%
|
|
\expandafter\pgfsysanim@splitter\the\pgf@x%
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
\fi%
|
|
}
|
|
{\catcode`\p=12\catcode`\t=12\gdef\Pgfsysanim@sPliTTer#1.#2pt{\Pgfsysanim@seTTer{#1}{#2}}}
|
|
\let\pgfsysanim@splitter\Pgfsysanim@sPliTTer
|
|
\def\Pgfsysanim@seTTer#1#2{%
|
|
\def\pgfsysanim@repeat@decimal{#1}%
|
|
\def\pgfsysanim@repeat@frac{.#2}%
|
|
\ifdim\pgfsysanim@repeat@frac pt=0pt% goto one before:
|
|
\c@pgf@counta\pgfsysanim@repeat@decimal%
|
|
\advance\c@pgf@counta by-1\relax%
|
|
\edef\pgfsysanim@repeat@decimal{\the\c@pgf@counta}%
|
|
\def\pgfsysanim@repeat@frac{1}%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@repeat@decimal{0}%
|
|
|
|
|
|
\def\pgfsysanim@handle@repeat@normal{%
|
|
% Compute interval length
|
|
\pgf@xa=\pgfsysanim@last@time pt%
|
|
\pgf@xb=\pgfsysanim@first@time pt%
|
|
\advance\pgf@xa by-\pgf@xb%
|
|
% Compute repeat count and fraction:
|
|
\pgf@ya\pgf@xc%
|
|
\advance\pgf@ya by-\pgf@xb%
|
|
\ifdim\pgf@xa<0.01pt\relax%
|
|
% Interval too small: Goto end of interval
|
|
\def\pgfmathresult{1.0}%
|
|
\else%
|
|
\pgfmathdivide@{\pgf@ya}{\pgf@xa}%
|
|
\fi%
|
|
\pgf@x\pgfmathresult pt\relax%
|
|
\expandafter\pgfsysanim@splitter\the\pgf@x%
|
|
% Cases:
|
|
\ifdim\pgfmathresult pt<\pgfsysanim@snap@repeat@arg\relax%
|
|
% Ok! Compute!
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
% Hmm. Freeze?
|
|
\ifpgfsysanim@freezeatend%
|
|
\expandafter\pgfsysanim@splitter\pgfsysanim@snap@repeat@arg%
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
\ifdim\pgfmathresult pt=\pgfsysanim@snap@repeat@arg\relax%
|
|
\ifpgfsysanim@snap@first%
|
|
\expandafter\pgfsysanim@splitter\pgfsysanim@snap@repeat@arg%
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
\fi%
|
|
% else: nothing!
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@handle@repeat@dur{%
|
|
\pgf@yb=\pgfsysanim@first@time pt%
|
|
\advance\pgf@yb by\pgfsysanim@snap@repeat@arg\relax%
|
|
\ifdim\pgf@xc<\pgf@yb% inside interval
|
|
\pgf@xa=\pgfsysanim@last@time pt%
|
|
\pgf@xb=\pgfsysanim@first@time pt%
|
|
\advance\pgf@xa by-\pgf@xb%
|
|
% Compute repeat count and fraction:
|
|
\pgf@ya\pgf@xc%
|
|
\advance\pgf@ya by-\pgf@xb%
|
|
\ifdim\pgf@xa<0.01pt\relax%
|
|
% Interval too small: Goto end of interval
|
|
\def\pgfmathresult{1.0}%
|
|
\else%
|
|
\pgfmathdivide@{\pgf@ya}{\pgf@xa}%
|
|
\fi%
|
|
\pgf@x\pgfmathresult pt\relax%
|
|
\expandafter\pgfsysanim@splitter\the\pgf@x%
|
|
%
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
\else%
|
|
\ifpgfsysanim@freezeatend%
|
|
\pgfsysanim@handle@repeat@dur@freeze%
|
|
\else%
|
|
\ifdim\pgf@xc=\pgf@yb%
|
|
\ifpgfsysanim@snap@first%
|
|
\pgfsysanim@handle@repeat@dur@freeze%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@handle@repeat@dur@freeze{%
|
|
\pgf@xa=\pgfsysanim@last@time pt%
|
|
\pgf@xb=\pgfsysanim@first@time pt%
|
|
\advance\pgf@xa by-\pgf@xb%
|
|
% Compute repeat count and fraction:
|
|
\ifdim\pgf@xa<0.01pt\relax%
|
|
% Interval too small: Goto end of interval
|
|
\def\pgfmathresult{1.0}%
|
|
\else%
|
|
\pgfmathdivide@{\pgfsysanim@snap@repeat@arg}{\pgf@xa}%
|
|
\fi%
|
|
\pgf@x\pgfmathresult pt\relax%
|
|
\expandafter\pgfsysanim@splitter\the\pgf@x%
|
|
%
|
|
\pgf@xc=\pgfsysanim@repeat@frac\pgf@xa%
|
|
\advance\pgf@xc by\pgf@xb%
|
|
\pgfsysanim@compute@time%
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
\def\pgfsysanim@compute@time{%
|
|
% Ok, let us iterate over all points of time.
|
|
\pgfutil@tempcnta=1\relax%
|
|
\pgfsysanim@conttrue%
|
|
\pgfutil@loop%
|
|
\ifnum\pgfutil@tempcnta>\pgfsysanim@snap@count%
|
|
\pgfsysanim@contfalse%
|
|
\else%
|
|
\expandafter\let\expandafter\pgfsys@temp\csname pgfsysanim@snap@\the\pgfutil@tempcnta\endcsname%
|
|
\expandafter\pgfsysanim@test@time\pgfsys@temp%
|
|
\fi%
|
|
\ifpgfsysanim@cont%
|
|
\advance\pgfutil@tempcnta by1\relax%
|
|
\pgfutil@repeat%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@test@time#1#2#3#4#5#6{%
|
|
% #1 = time in seconds
|
|
% #2 to #5 = spline controls
|
|
% #6 = value
|
|
\ifdim#1pt<\pgf@xc%
|
|
% snap time not yet reached. Update previous:
|
|
\def\pgfsysanim@prev@val{#6}%
|
|
\def\pgfsysanim@prev@time{#1}%
|
|
\def\pgfsysanim@prev@spline{{#2}{#3}{#4}{#5}}%
|
|
\else%
|
|
\ifdim#1pt=\pgf@xc%
|
|
\ifpgfsysanim@snap@first%
|
|
\ifx\pgfsysanim@next@val\relax%
|
|
% first? Save!
|
|
\def\pgfsysanim@prev@val{#6}%
|
|
\def\pgfsysanim@prev@time{#1}%
|
|
\def\pgfsysanim@prev@spline{{#2}{#3}{#4}{#5}}%
|
|
\let\pgfsysanim@next@val\pgfsysanim@prev@val%
|
|
\let\pgfsysanim@next@time\pgfsysanim@prev@time%
|
|
\let\pgfsysanim@next@spline\pgfsysanim@prev@spline%
|
|
\pgfsysanim@contfalse%
|
|
% else, do nothing
|
|
\fi
|
|
\else%
|
|
% always overwrite:
|
|
\def\pgfsysanim@prev@val{#6}%
|
|
\def\pgfsysanim@prev@time{#1}%
|
|
\def\pgfsysanim@prev@spline{{#2}{#3}{#4}{#5}}%
|
|
\let\pgfsysanim@next@val\pgfsysanim@prev@val%
|
|
\let\pgfsysanim@next@time\pgfsysanim@prev@time%
|
|
\let\pgfsysanim@next@spline\pgfsysanim@prev@spline%
|
|
\fi%
|
|
\else%
|
|
% we passed the time!
|
|
\ifx\pgfsysanim@next@val\relax%
|
|
% first? Then save!
|
|
\def\pgfsysanim@next@val{#6}%
|
|
\def\pgfsysanim@next@time{#1}%
|
|
\def\pgfsysanim@next@spline{{#2}{#3}{#4}{#5}}%
|
|
\else%
|
|
% ignore later times!
|
|
\pgfsysanim@contfalse%
|
|
\fi%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
|
|
\let\pgfsysanim@prev@val\relax%
|
|
\let\pgfsysanim@prev@time\relax%
|
|
\let\pgfsysanim@next@val\relax%
|
|
\let\pgfsysanim@next@time\relax%
|
|
|
|
% Help function
|
|
\def\pgfsysanim@attach#1#2#3{%
|
|
\expandafter\pgfsysanim@prep@beg\expandafter{\pgfsysanim@first@time}{#2}{#3}%
|
|
\expandafter\def\expandafter\pgfsysanim@code@main\expandafter{\csname pgfsysanim@main@of@\pgfsysanim@whom@id @\pgfsysanim@whom@type @#1\endcsname}%
|
|
\expandafter\ifx\pgfsysanim@code@main\relax%
|
|
\edef\pgfsysanim@code@begin{%
|
|
\let\noexpand\pgfsysanim@c@begin\noexpand\pgfutil@empty%
|
|
\let\noexpand\pgfsysanim@c@end\noexpand\pgfutil@empty%
|
|
\pgfsysanim@lasttime-16383pt\relax%
|
|
\expandafter\noexpand\pgfsysanim@code@main%
|
|
\global\let\expandafter\noexpand\pgfsysanim@code@main\relax%
|
|
\noexpand\pgfsysanim@c@begin%
|
|
}%
|
|
\let\pgfsysanim@code@end\pgfsysanim@code@closer%
|
|
\expandafter\global\expandafter\let\pgfsysanim@code@main\pgfutil@empty%
|
|
\else%
|
|
\let\pgfsysanim@code@begin\relax%
|
|
\let\pgfsysanim@code@end\relax%
|
|
\fi%
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\def%
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfsysanim@new@main%
|
|
\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\pgfsysanim@code@main\pgfsysanim@add@main}
|
|
\expandafter\global\expandafter\let\pgfsysanim@code@main\pgfsysanim@new@main%
|
|
}
|
|
\def\pgfsysanim@code@closer{\pgfsysanim@c@end}
|
|
|
|
\def\pgfsysanim@prep@beg#1#2#3{%
|
|
\edef\pgfsysanim@add@main{%
|
|
\noexpand\ifdim\pgfsysanim@lasttime>#1pt%
|
|
% ignore!
|
|
\noexpand\else%
|
|
\pgfsysanim@lasttime#1pt%
|
|
\def\noexpand\pgfsysanim@c@begin{#2}%
|
|
\def\noexpand\pgfsysanim@c@end{#3}%
|
|
\noexpand\fi%
|
|
}
|
|
}
|
|
|
|
\def\pgfsysanim@prep@beg@special#1#2{%
|
|
\def\pgfsysanim@add@main{%
|
|
\ifdim\pgfsysanim@lasttime>#1pt%
|
|
% ignore!
|
|
\else%
|
|
\pgfsysanim@lasttime#1pt%
|
|
\def\pgfsysanim@c@begin{#2}%
|
|
\fi%
|
|
}
|
|
}
|
|
|
|
|
|
|
|
\def\pgfsysanim@attach@special#1#2{%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@prep@beg@special\expandafter\expandafter\expandafter{\expandafter\pgfsysanim@first@time\expandafter}\expandafter{#2}%
|
|
\ifx#1\relax%
|
|
\def#1{%
|
|
\pgfsysanim@lasttime-16383pt\relax%
|
|
\let\pgfsysanim@c@begin\pgfutil@empty%
|
|
}%
|
|
\fi%
|
|
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter#1\pgfsysanim@add@main}%
|
|
}
|
|
|
|
|
|
|
|
\newdimen\pgfsysanim@lasttime
|
|
|
|
|
|
\def\pgfsysanim@add@trans{%
|
|
\ifx\pgfsysanim@snap@canvas@transform@pre\relax%
|
|
\else%
|
|
\ifx\pgfsysanim@code@begin\relax%
|
|
\let\pgfsysanim@code@begin\pgfutil@empty%
|
|
\fi%
|
|
\pgfsysanim@add@trans@%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@add@trans@{%
|
|
\toks0\expandafter{\pgfsysanim@snap@canvas@transform@pre}%
|
|
\toks1\expandafter{\pgfsysanim@code@begin}%
|
|
\toks2\expandafter{\pgfsysanim@snap@canvas@transform@post}%
|
|
\edef\pgfsysanim@code@begin{{\the\toks0 \the\toks1 \the\toks2}}%
|
|
}
|
|
|
|
% The code for the different attributes
|
|
|
|
\def\pgfsysanim@prep@attr@opacity{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@attach{opacity}{\noexpand\pgfsys@opacity{\pgfsysanim@x@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@fillopacity{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@attach{fillopacity}{\noexpand\pgfsys@fill@opacity{\pgfsysanim@x@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@strokeopacity{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@attach{strokeopacity}{\noexpand\pgfsys@stroke@opacity{\pgfsysanim@x@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@visibility{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@text%
|
|
\ifx\pgfsysanim@text@val\pgf@hidden@text%
|
|
\pgfsysanim@attach{visibility}{\noexpand\pgfsys@begininvisiblescope}{\noexpand\pgfsys@endinvisiblescope}%
|
|
\else%
|
|
\pgfsysanim@attach{visibility}{}{}%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgf@hidden@text{hidden}
|
|
|
|
\def\pgfsysanim@prep@attr@linewidth{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@dimension%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{16382}%
|
|
\pgfsysanim@attach{linewidth}{\noexpand\pgfsys@setlinewidth{\pgfsysanim@x@val pt}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@dash{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@dash%
|
|
\pgfsysanim@attach{dash}{\noexpand\pgfsys@setdash{\pgfsysanim@dash@vals}{\pgfsysanim@x@val pt}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@translate{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@translate%
|
|
\edef\pgfsysanim@code@begin{\noexpand\pgfsys@transformshift{\pgfsysanim@x@val pt}{\pgfsysanim@y@val pt}}%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@prep@attr@scale{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scale%
|
|
\edef\pgfsysanim@code@begin{\noexpand\pgfsys@transformxyscale{\pgfsysanim@x@val}{\pgfsysanim@y@val}}%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@rotate{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
{%
|
|
\pgfmathsin@{\pgfsysanim@x@val}%
|
|
\let\pgftransform@sin=\pgfmathresult%
|
|
\pgfmathcos@{\pgfsysanim@x@val}%
|
|
\let\pgftransform@cos=\pgfmathresult%
|
|
\pgf@x=\pgftransform@sin pt%
|
|
\pgf@xa=-\pgf@x%
|
|
\edef\pgfsysanim@code@begin{\noexpand\pgfsys@transformcm{\pgftransform@cos}{\pgftransform@sin}{\pgf@sys@tonumber{\pgf@xa}}{\pgftransform@cos}{0pt}{0pt}}%
|
|
\expandafter}%
|
|
\expandafter\def\expandafter\pgfsysanim@code@begin\expandafter{\pgfsysanim@code@begin}%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@skewx{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
{%
|
|
\pgfmathtan@{\pgfsysanim@x@val}%
|
|
\edef\pgfsysanim@code@begin{\noexpand\pgfsys@transformcm{1}{0}{\pgfmathresult}{1}{0pt}{0pt}}%
|
|
\expandafter}%
|
|
\expandafter\def\expandafter\pgfsysanim@code@begin\expandafter{\pgfsysanim@code@begin}%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@skewy{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@scalar%
|
|
{%
|
|
\pgfmathtan@{\pgfsysanim@x@val}%
|
|
\edef\pgfsysanim@code@begin{\noexpand\pgfsys@transformcm{1}{\pgfmathresult}{0}{1}{0pt}{0pt}}%
|
|
\expandafter}%
|
|
\expandafter\def\expandafter\pgfsysanim@code@begin\expandafter{\pgfsysanim@code@begin}%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@motion{%
|
|
\ifx\pgfsysanim@base@value\pgfutil@empty%
|
|
\else%
|
|
\pgferror{You may not provide a base value for a motion}%
|
|
\let\pgfsysanim@base@value\pgfutil@empty%
|
|
\fi%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@motion%
|
|
\expandafter\pgfsysanim@prep@attr@motion@\pgfsysanim@motion@trans%
|
|
\fi%
|
|
\pgfsysanim@add@trans%
|
|
}
|
|
\def\pgfsysanim@prep@attr@motion@#1#2#3#4#5#6{%
|
|
\ifpgfsysanim@rotatealong%
|
|
\def\pgfsysanim@code@begin{\pgfsys@transformcm{#1}{#2}{#3}{#4}{#5}{#6}}%
|
|
\else%
|
|
\def\pgfsysanim@code@begin{\pgfsys@transformshift{#5}{#6}}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@prep@attr@strokecolor{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@color%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@y@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@z@val}{0}{1}%
|
|
\pgfsysanim@attach{strokecolor}{\noexpand\pgfsys@color@rgb@stroke{\pgfsysanim@x@val}{\pgfsysanim@y@val}{\pgfsysanim@z@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@fillcolor{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@color%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@y@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@z@val}{0}{1}%
|
|
\pgfsysanim@attach{fillcolor}{\noexpand\pgfsys@color@rgb@fill{\pgfsysanim@x@val}{\pgfsysanim@y@val}{\pgfsysanim@z@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\def\pgfsysanim@prep@attr@color{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@color%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@x@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@y@val}{0}{1}%
|
|
\pgfsysanim@cap@scalar{\pgfsysanim@z@val}{0}{1}%
|
|
\pgfsysanim@attach{color}{\noexpand\pgfsys@color@rgb{\pgfsysanim@x@val}{\pgfsysanim@y@val}{\pgfsysanim@z@val}}{}%
|
|
\fi%
|
|
}
|
|
|
|
\newif\ifpgfsys@animation@view@hooked
|
|
|
|
\def\pgfsysanim@prep@attr@viewbox{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@viewbox%
|
|
\pgfsys@attach@to@id{\pgfsysanim@whom@id}{}{%
|
|
\ifpgfsys@animation@view@hooked%
|
|
\else%
|
|
% Hook into viewbox systems layer commands
|
|
\let\pgfsys@viewboxmeet@orig\pgfsys@viewboxmeet%
|
|
\let\pgfsys@viewboxmeet\pgfsysanim@hooked@viewboxmeet%
|
|
\let\pgfsys@viewboxslice@orig\pgfsys@viewboxslice%
|
|
\let\pgfsys@viewboxslice\pgfsysanim@hooked@viewboxslice%
|
|
\pgfsys@animation@view@hookedtrue%
|
|
\fi%
|
|
}{}{}%
|
|
\edef\pgfsysanim@temp{{\pgfsysanim@x@val}{\pgfsysanim@y@val}{\pgfsysanim@z@val}{\pgfsysanim@w@val}}%
|
|
\expandafter\pgfsysanim@attach@special\csname pgfsysanim@hook@for@\pgfsys@id@ref{\pgfsysanim@whom@id}{\pgfsysanim@whom@type}\endcsname\pgfsysanim@temp%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@hooked@viewboxmeet#1#2#3#4#5#6#7#8{%
|
|
\expandafter\ifx\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
\pgfsys@viewboxmeet@orig{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
|
|
\else%
|
|
\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname%
|
|
\ifx\pgfsysanim@c@begin\pgfutil@empty%
|
|
% should not happen, but, then, ignore
|
|
\else%
|
|
\expandafter\pgfsysanim@hooked@viewboxmeet@\pgfsysanim@c@begin{#1}{#2}{#3}{#4}%
|
|
\fi%
|
|
\expandafter\global\expandafter\let\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@hooked@viewboxmeet@#1#2#3#4#5#6#7#8{%
|
|
\pgfsys@viewboxmeet@orig{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
|
|
}
|
|
\def\pgfsysanim@hooked@viewboxslice#1#2#3#4#5#6#7#8{%
|
|
\expandafter\ifx\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
\pgfsys@viewboxslice@orig{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
|
|
\else%
|
|
\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname%
|
|
\expandafter\pgfsysanim@hooked@viewboxslice@\pgfsysanim@c@begin{#1}{#2}{#3}{#4}%
|
|
\expandafter\global\expandafter\let\csname pgfsysanim@hook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@hooked@viewboxslice@#1#2#3#4#5#6#7#8{%
|
|
\pgfsys@viewboxslice@orig{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
|
|
}
|
|
|
|
|
|
\newif\ifpgfsys@animation@path@hooked
|
|
|
|
\def\pgfsysanim@prep@attr@path{%
|
|
\ifpgfsysanim@valid@snapshot@time%
|
|
\pgfsysanim@comp@path%
|
|
\pgfsys@attach@to@id{\pgfsysanim@whom@id}{}{%
|
|
\ifpgfsys@animation@path@hooked%
|
|
\else%
|
|
% Hook into path systems layer commands
|
|
\let\pgfsys@discardpath@orig\pgfsys@discardpath%
|
|
\let\pgfsys@stroke@orig\pgfsys@stroke%
|
|
\let\pgfsys@fill@orig\pgfsys@fill%
|
|
\let\pgfsys@fillstroke@orig\pgfsys@fillstroke%
|
|
\let\pgfsys@closestroke@orig\pgfsys@closestroke%
|
|
\let\pgfsys@discardpath\pgfsys@discardpath@hook%
|
|
\let\pgfsys@stroke\pgfsys@stroke@hook%
|
|
\let\pgfsys@fill\pgfsys@fill@hook%
|
|
\let\pgfsys@fillstroke\pgfsys@fillstroke@hook%
|
|
\let\pgfsys@closestroke\pgfsys@closestroke@hook%
|
|
\pgfsys@animation@path@hookedtrue%
|
|
\fi%
|
|
}{}{}%
|
|
\expandafter\pgfsysanim@attach@special\csname pgfsysanim@phook@for@\pgfsys@id@ref{\pgfsysanim@whom@id}{\pgfsysanim@whom@type}\endcsname\pgfsysanim@path@all%
|
|
\fi%
|
|
}
|
|
\def\pgfsys@stroke@hook{\pgfsysanim@with@tipstrue\pgfsysanim@path@hooks\pgfsys@stroke@orig}
|
|
\def\pgfsys@fill@hook{\pgfsysanim@with@tipsfalse\pgfsysanim@path@hooks\pgfsys@fill@orig}
|
|
\def\pgfsys@fillstroke@hook{\pgfsysanim@with@tipstrue\pgfsysanim@path@hooks\pgfsys@fillstroke@orig}
|
|
\def\pgfsys@closestroke@hook{\pgfsysanim@with@tipsfalse\pgfsysanim@path@hooks\pgfsys@closestroke@orig}
|
|
\def\pgfsys@discardpath@hook{\pgfsysanim@with@tipsfalse\pgfsysanim@path@hooks\pgfsys@discardpath@orig}
|
|
|
|
\newif\ifpgfsysanim@with@tips
|
|
|
|
\def\pgfsysanim@path@hooks#1{%
|
|
{%
|
|
\expandafter\ifx\csname pgfsysanim@phook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
#1%
|
|
\else%
|
|
\pgfsys@discardpath@orig%
|
|
\csname pgfsysanim@phook@for@\pgfsys@id@refcurrent\endcsname%
|
|
\pgfsysanim@c@begin%
|
|
\pgfsysanim@path@val%
|
|
#1%
|
|
\ifpgfsysanim@with@tips%
|
|
\ifx\pgfsysanim@path@val\pgfutil@empty\else%
|
|
\pgfsysanim@prepare@end@of@path%
|
|
\begingroup%
|
|
\pgfsysanim@prepare@start@of@path%
|
|
\pgfsysanim@add@marker@at@start%
|
|
\endgroup%
|
|
\pgfsysanim@add@marker@at@end%
|
|
\fi%
|
|
\fi%
|
|
\expandafter\global\expandafter\let\csname pgfsysanim@phook@for@\pgfsys@id@refcurrent\endcsname\relax%
|
|
\fi%
|
|
}%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@prepare@start@of@path{%
|
|
\ifx\pgfsysanim@snap@tip@start\pgfutil@empty\else
|
|
%
|
|
% Step 1: Split
|
|
%
|
|
\ifx\pgfprocessresultpathsuffix\relax%
|
|
% Ok, still need to compute the split:
|
|
\pgfprocesssplitpath{\pgf@arrowpath}%
|
|
\fi%
|
|
%
|
|
% Step 2: extract
|
|
%
|
|
\expandafter\pgf@parse@start\pgfprocessresultpathsuffix\pgf@stop\pgf@stop\pgf@stop%
|
|
%
|
|
% Step 3: prep
|
|
%
|
|
\pgf@prep@start%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@add@marker@at@start{%
|
|
\ifx\pgfsysanim@snap@tip@start\pgfutil@empty\else
|
|
%
|
|
% Step 4: draw
|
|
%
|
|
{%
|
|
\pgftransformreset%
|
|
\pgftransformarrow{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\pgfqpoint{\pgf@xb}{\pgf@yb}}%
|
|
\pgfsys@beginscope%
|
|
\pgflowlevelsynccm%
|
|
\pgfsys@marker@use{\pgfsysanim@snap@tip@start}%
|
|
\pgfsys@endscope%
|
|
}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@prepare@end@of@path{%
|
|
\let\pgfprocessresultpathsuffix\relax% flag that nothing has happened...
|
|
\let\pgfprocessresultsubpathsuffix\relax%
|
|
\pgf@precise@shorteningfalse%
|
|
\edef\pgf@path@shortening@distance{0pt}%
|
|
\ifx\pgfsysanim@snap@tip@end\pgfutil@empty\else
|
|
%
|
|
% Step 1: Split
|
|
%
|
|
\pgfprocesssplitpath{\pgfsysanim@path@val}%
|
|
\pgfprocesssplitsubpath{\pgfprocessresultpathsuffix}%
|
|
%
|
|
% Step 2: extract
|
|
%
|
|
\expandafter\pgf@parse@end\pgfprocessresultsubpathsuffix\pgf@stop\pgf@stop\pgf@stop%
|
|
%
|
|
% Step 3: prep
|
|
%
|
|
\pgf@prep@end%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@add@marker@at@end{%
|
|
\ifx\pgfsysanim@snap@tip@end\pgfutil@empty\else
|
|
%
|
|
% Step 4: draw
|
|
%
|
|
{%
|
|
\pgftransformreset%
|
|
\pgftransformarrow{\pgfqpoint{\pgf@xc}{\pgf@yc}}{\pgfqpoint{\pgf@xb}{\pgf@yb}}%
|
|
\pgfsys@beginscope%
|
|
\pgflowlevelsynccm%
|
|
\pgfsys@marker@use{\pgfsysanim@snap@tip@end}%
|
|
\pgfsys@endscope%
|
|
}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
|
|
%
|
|
% Interpolation functions
|
|
%
|
|
|
|
% Scalar interpolation
|
|
|
|
\def\pgfsysanim@comp@scalar{%
|
|
\pgfsysanim@compute@fractions%
|
|
\pgfsysanim@mix@scalar%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\let\pgfsysanim@prev@val\pgfsysanim@x@val%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\let\pgfsysanim@next@val\pgfsysanim@last@val%
|
|
\pgfsysanim@mix@scalar%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@one{1}
|
|
|
|
\def\pgfsysanim@mix@scalar{%
|
|
\pgf@x\pgfsysanim@prev@val pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y\pgfsysanim@next@val pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
}
|
|
\def\pgfsysanim@cap@scalar#1#2#3{%
|
|
\ifdim#1 pt<#2 pt%
|
|
\def#1{#2}%
|
|
\else\ifdim#1 pt>#3 pt%
|
|
\def#1{#3}%
|
|
\fi\fi%
|
|
}
|
|
|
|
|
|
% Scale interpolation
|
|
|
|
\def\pgfsysanim@comp@scale{%
|
|
\pgfsysanim@compute@fractions%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@scale\expandafter\pgfsysanim@prev@val\pgfsysanim@next@val%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\expandafter\pgfsysanim@mix@scale\expandafter\pgfsysanim@x@val\expandafter\pgfsysanim@y@val\pgfsysanim@last@val%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@scale#1#2#3#4{%
|
|
\pgf@x#1pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#3pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
\pgf@x#2pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#4pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@y@val{\pgf@sys@tonumber\pgf@x}%
|
|
}
|
|
|
|
|
|
% Dimension interpolation
|
|
|
|
\def\pgfsysanim@comp@dimension{%
|
|
\pgfsysanim@compute@fractions%
|
|
\pgfsysanim@mix@dimension%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\def\pgfsysanim@prev@val{\pgfsysanim@x@val pt}%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\let\pgfsysanim@next@val\pgfsysanim@last@val%
|
|
\pgfsysanim@mix@dimension%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@dimension{%
|
|
\pgf@x\pgfsysanim@prev@val%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y\pgfsysanim@next@val%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
}
|
|
|
|
|
|
|
|
% Translate interpolation
|
|
|
|
\def\pgfsysanim@comp@translate{%
|
|
\pgfsysanim@compute@fractions%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@translate\expandafter\pgfsysanim@prev@val\pgfsysanim@next@val%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\edef\pgfsysanim@prev@val{{\pgfsysanim@x@val pt}{\pgfsysanim@y@val pt}}
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@translate\expandafter\pgfsysanim@prev@val\pgfsysanim@last@val%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@translate#1#2#3#4{%
|
|
\pgf@x#1%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#3%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
\pgf@x#2%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#4%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@y@val{\pgf@sys@tonumber\pgf@x}%
|
|
}
|
|
|
|
|
|
|
|
% Color interpolation
|
|
|
|
\def\pgfsysanim@comp@color{%
|
|
\pgfsysanim@compute@fractions%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@color\expandafter\pgfsysanim@prev@val\pgfsysanim@next@val%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\expandafter\pgfsysanim@mix@color\expandafter\pgfsysanim@x@val\expandafter\pgfsysanim@y@val\expandafter\pgfsysanim@z@val\pgfsysanim@last@val%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@color#1#2#3#4#5#6{%
|
|
\pgf@x#1pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#4pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
\pgf@x#2pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#5pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@y@val{\pgf@sys@tonumber\pgf@x}%
|
|
\pgf@x#3pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#6pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@z@val{\pgf@sys@tonumber\pgf@x}%
|
|
}
|
|
|
|
|
|
% Text interpolation
|
|
|
|
\def\pgfsysanim@comp@text{%
|
|
\let\pgfsysanim@text@val\pgfsysanim@prev@val%
|
|
}
|
|
|
|
|
|
|
|
% Dash interpolation
|
|
|
|
\def\pgfsysanim@comp@dash{%
|
|
\pgfsysanim@compute@fractions%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@dash\expandafter\pgfsysanim@prev@val\pgfsysanim@next@val%
|
|
\ifpgfsysanim@accumulate%
|
|
\ifnum\pgfsysanim@repeat@decimal=0\else%
|
|
\let\pgfsysanim@frac@b\pgfsysanim@one%
|
|
\let\pgfsysanim@frac@a\pgfsysanim@repeat@decimal%
|
|
\edef\pgfsysanim@prev@val{{\pgfsysanim@dash@vals}{\pgfsysanim@x@val pt}}%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@dash\expandafter\pgfsysanim@prev@val\pgfsysanim@last@val%
|
|
\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@dash#1#2#3#4{%
|
|
\pgf@x#2\relax%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#4\relax%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
\let\pgfsysanim@dash@vals\pgfutil@empty%
|
|
\pgfsysanim@parse@dash#1,\pgf@stop#3,\pgf@stop%
|
|
}
|
|
\def\pgfsysanim@parse@dash{\pgfutil@ifnextchar\pgf@stop\pgfsysanim@parse@dash@done\pgfsysanim@parse@dash@first}
|
|
\def\pgfsysanim@parse@dash@done\pgf@stop\pgf@stop{}%
|
|
\def\pgfsysanim@parse@dash@first#1,#2\pgf@stop#3\pgf@stop{%
|
|
\pgf@x#1\relax%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgfsysanim@parse@dash@second#3\pgf@stop{#2}%
|
|
}
|
|
\def\pgfsysanim@parse@dash@second#1,#2\pgf@stop#3{%
|
|
\pgf@y#1\relax%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\def\pgfsys@temp{#2}%
|
|
\edef\pgfsysanim@dash@vals{\pgfsysanim@dash@vals\the\pgf@x\ifx\pgfsys@temp\pgfutil@empty\else,\fi}%
|
|
\pgfsysanim@parse@dash#3\pgf@stop#2\pgf@stop%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Viewbox interpolation
|
|
|
|
\def\pgfsysanim@comp@viewbox{%
|
|
\pgfsysanim@compute@fractions%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@mix@viewbox\expandafter\pgfsysanim@prev@val\pgfsysanim@next@val%
|
|
\ifpgfsysanim@accumulate%
|
|
\pgferror{viewbox animations cannot accumulate / add}%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@mix@viewbox#1#2#3#4#5#6#7#8{%
|
|
\pgf@x#1%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#5%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\the\pgf@x}%
|
|
\pgf@x#2%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#6%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@y@val{\the\pgf@x}%
|
|
\pgf@x#3%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#7%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@z@val{\the\pgf@x}%
|
|
\pgf@x#4%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#8%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@w@val{\the\pgf@x}%
|
|
}
|
|
|
|
|
|
|
|
|
|
% Path interpolation
|
|
|
|
\def\pgfsysanim@comp@path{%
|
|
\pgfsysanim@compute@fractions%
|
|
\edef\pgfsysanim@path@tips{%
|
|
\def\noexpand\pgfsysanim@snap@tip@start{\pgfsysanim@snap@tip@start}%
|
|
\def\noexpand\pgfsysanim@snap@tip@end{\pgfsysanim@snap@tip@end}%
|
|
}%
|
|
\let\pgfsysanim@path@val\pgfutil@empty%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@parse@path\expandafter\pgfsysanim@prev@val\expandafter\pgf@stop\expandafter\relax\pgfsysanim@next@val\pgf@stop\relax%
|
|
\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfsysanim@path@all\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfsysanim@path@val\expandafter\expandafter\expandafter{\expandafter\pgfsysanim@path@val\expandafter}\pgfsysanim@path@tips}%
|
|
\ifpgfsysanim@accumulate%
|
|
\pgferror{path animations cannot accumulate / add}%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@parse@path{\pgfutil@ifnextchar\pgf@stop\pgfsysanim@parse@path@done\pgfsysanim@parse@path@first}
|
|
\def\pgfsysanim@parse@path@done\pgf@stop\relax\pgf@stop\relax{}%
|
|
\def\pgfsysanim@parse@path@first{\pgfutil@ifnextchar\bgroup\pgfsysanim@parse@path@first@num\pgfsysanim@parse@path@token}
|
|
\def\pgfsysanim@parse@path@token#1#2\relax#3#4\relax{%
|
|
\expandafter\def\expandafter\pgfsysanim@path@val\expandafter{\pgfsysanim@path@val#1}%
|
|
\pgfsysanim@parse@path#2\relax#4\relax%
|
|
}
|
|
\def\pgfsysanim@parse@path@first@num#1#2\relax#3#4\relax{%
|
|
\pgf@x#1%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y#3%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfsysanim@path@val\expandafter\expandafter\expandafter{\expandafter\pgfsysanim@path@val\expandafter{\the\pgf@x}}%
|
|
\pgfsysanim@parse@path#2\relax#4\relax%
|
|
}
|
|
|
|
|
|
|
|
% Motion interpolation
|
|
|
|
\def\pgfsysanim@comp@motion{%
|
|
\pgfsysanim@compute@fractions%
|
|
\pgf@x\pgfsysanim@prev@val pt%
|
|
\pgf@x\pgfsysanim@frac@b\pgf@x%
|
|
\pgf@y\pgfsysanim@next@val pt%
|
|
\advance\pgf@x by\pgfsysanim@frac@a\pgf@y%
|
|
\edef\pgfsysanim@x@val{\pgf@sys@tonumber\pgf@x}%
|
|
\ifdim\pgfsysanim@x@val pt=1pt%
|
|
\def\pgfsysanim@x@val{0.9999}% because of rounding problems in decorations
|
|
\fi%
|
|
\pgf@relevantforpicturesizefalse%
|
|
\pgfdecoratepath{pgfsysanim@motion}{%
|
|
\pgfsyssoftpath@setcurrentpath\pgfsysanim@snap@movealong%
|
|
}%
|
|
\ifpgfsysanim@accumulate%
|
|
\pgferror{motion animations cannot accumulate / add}%
|
|
\fi%
|
|
}
|
|
\pgfdeclaredecoration{pgfsysanim@motion}{s}{%
|
|
\state{s}[width=\pgfsysanim@x@val\pgfdecoratedremainingdistance,next state=final]{}%
|
|
\state{final}{\pgfgettransform\pgfsysanim@motion@trans\global\let\pgfsysanim@motion@trans\pgfsysanim@motion@trans}%
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% Compute fractions and splines:
|
|
|
|
\def\pgfsysanim@compute@fractions{%
|
|
\ifdim\pgf@xc=\pgfsysanim@prev@time pt%
|
|
\def\pgfsysanim@frac@a{0}%
|
|
\def\pgfsysanim@frac@b{1}%
|
|
\else%
|
|
\pgfmathsubtract@{\pgfsysanim@next@time}{\pgfsysanim@prev@time}%
|
|
\ifdim\pgfmathresult pt<0.01pt%
|
|
\def\pgfsysanim@frac@a{0}%
|
|
\def\pgfsysanim@frac@b{1}%
|
|
\else%
|
|
\let\pgfsysanim@divby\pgfmathresult%
|
|
\pgfmathsubtract@{\pgf@xc}{\pgfsysanim@prev@time}%
|
|
\pgfmathdivide@{\pgfmathresult}{\pgfsysanim@divby}%
|
|
\ifdim\pgfmathresult pt<0pt\def\pgfmathresult{0}\fi%
|
|
\ifdim\pgfmathresult pt>1pt\def\pgfmathresult{1}\fi%
|
|
\let\pgfsysanim@frac@a\pgfmathresult%
|
|
\pgfmathsubtract@{1}{\pgfmathresult}%
|
|
\let\pgfsysanim@frac@b\pgfmathresult%
|
|
\fi%
|
|
\fi%
|
|
\ifdim\pgfsysanim@frac@a pt=0pt%
|
|
\else\ifdim\pgfsysanim@frac@b pt=0pt%
|
|
\else%
|
|
\expandafter\expandafter\expandafter\pgfsysanim@apply@spline\expandafter\pgfsysanim@prev@spline\pgfsysanim@next@spline%
|
|
\fi\fi%
|
|
}
|
|
|
|
|
|
\def\pgfsysanim@apply@spline#1#2#3#4#5#6#7#8{%
|
|
\edef\pgfsys@temp{#3,#5,#4,#6}%
|
|
\ifx\pgfsys@temp\pgfsysanim@id@spline%
|
|
\else%
|
|
\def\pgfsysanim@prev@out@time{{#3}{#4}}%
|
|
\def\pgfsysanim@next@in@time{{#5}{#6}}%
|
|
\ifx\pgfsysanim@prev@out@time\pgfsys@stay@text%
|
|
\pgfsysanim@jump@splines%
|
|
\else\ifx\pgfsysanim@next@in@time\pgfsys@jump@text%
|
|
\pgfsysanim@jump@splines%
|
|
\else%
|
|
\pgf@xa#3pt%
|
|
\pgf@xb#5pt%
|
|
% #4 is val support a
|
|
% #6 is val support b
|
|
% our first approximation
|
|
\let\pgfsysanim@t\pgfsysanim@frac@a%
|
|
\let\pgfsysanim@s\pgfsysanim@frac@b%
|
|
\pgfsysanim@eval@spline%
|
|
\edef\pgfsysanim@ft{\the\pgf@x}%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by256sp%
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
\pgfsysanim@eval@spline%
|
|
% Ok, now do Newton one step
|
|
\advance\pgf@x by-\pgfsysanim@ft%
|
|
\pgf@x256\pgf@x%
|
|
% \pgf@x is f'(t)
|
|
% must compute t - (f(t)-frac@a)/f'(t)
|
|
\pgf@ya\pgfsysanim@ft%
|
|
\advance\pgf@ya by-\pgfsysanim@frac@a pt%
|
|
\pgf@yb\pgf@x
|
|
\pgfmathreciprocal@{\pgf@yb}%
|
|
\ifdim\pgfmathresult pt>2.5pt%
|
|
\def\pgfmathresult{2.5}%
|
|
\fi%
|
|
\ifdim\pgfmathresult pt<-2.5pt%
|
|
\def\pgfmathresult{-2.5}%
|
|
\fi%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by-\pgfmathresult\pgf@ya%
|
|
% \pgf@x is new t:
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
\pgfsysanim@eval@spline%
|
|
\edef\pgfsysanim@ft{\the\pgf@x}%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by256sp%
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
\pgfsysanim@eval@spline%
|
|
% Ok, now do Newton one step2
|
|
\advance\pgf@x by-\pgfsysanim@ft%
|
|
\pgf@x256\pgf@x%
|
|
% \pgf@x is f'(t)
|
|
% must compute t - (f(t)-frac@a)/f'(t)
|
|
\pgf@ya\pgfsysanim@ft%
|
|
\advance\pgf@ya by-\pgfsysanim@frac@a pt%
|
|
\pgf@yb\pgf@x
|
|
\pgfmathreciprocal@{\pgf@yb}%
|
|
\ifdim\pgfmathresult pt>2.5pt%
|
|
\def\pgfmathresult{2.5}%
|
|
\fi%
|
|
\ifdim\pgfmathresult pt<-2.5pt%
|
|
\def\pgfmathresult{-2.5}%
|
|
\fi%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by-\pgfmathresult\pgf@ya%
|
|
% \pgf@x is new t:
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
% Third Newton:
|
|
\pgfsysanim@eval@spline%
|
|
\edef\pgfsysanim@ft{\the\pgf@x}%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by256sp%
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
\pgfsysanim@eval@spline%
|
|
% Ok, now do Newton one step2
|
|
\advance\pgf@x by-\pgfsysanim@ft%
|
|
\pgf@x256\pgf@x%
|
|
% \pgf@x is f'(t)
|
|
% must compute t - (f(t)-frac@a)/f'(t)
|
|
\pgf@ya\pgfsysanim@ft%
|
|
\advance\pgf@ya by-\pgfsysanim@frac@a pt%
|
|
\pgf@yb\pgf@x
|
|
\pgfmathreciprocal@{\pgf@yb}%
|
|
\ifdim\pgfmathresult pt>2.5pt%
|
|
\def\pgfmathresult{2.5}%
|
|
\fi%
|
|
\ifdim\pgfmathresult pt<-2.5pt%
|
|
\def\pgfmathresult{-2.5}%
|
|
\fi%
|
|
\pgf@x\pgfsysanim@t pt%
|
|
\advance\pgf@x by-\pgfmathresult\pgf@ya%
|
|
% \pgf@x is new t:
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@t{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@s{\pgf@sys@tonumber\pgf@y}%
|
|
% now, evaluate target:
|
|
\pgf@xa#4pt%
|
|
\pgf@xb#6pt%
|
|
\pgfsysanim@eval@spline%
|
|
% \pgf@x is result:
|
|
\pgf@y1pt%
|
|
\advance\pgf@y by-\pgf@x%
|
|
\edef\pgfsysanim@frac@a{\pgf@sys@tonumber\pgf@x}%
|
|
\edef\pgfsysanim@frac@b{\pgf@sys@tonumber\pgf@y}%
|
|
\fi\fi%
|
|
\fi%
|
|
}
|
|
\def\pgfsysanim@id@spline{0,1,0,1}
|
|
|
|
\def\pgfsysanim@eval@spline{%
|
|
% Iteration one: (0,#1,#2,1) reduced to (ya,yb,yc)
|
|
\pgf@ya\pgfsysanim@t\pgf@xa%
|
|
\pgf@yb\pgfsysanim@t\pgf@xb%
|
|
\advance\pgf@yb by\pgfsysanim@s\pgf@xa%
|
|
\pgf@yc\pgfsysanim@t pt%
|
|
\advance\pgf@yc by\pgfsysanim@s\pgf@xb%
|
|
% Iteration two: (ya,yb,yc) reduced to (y,xc)
|
|
\pgf@y\pgfsysanim@t\pgf@yb%
|
|
\advance\pgf@y by\pgfsysanim@s\pgf@ya%
|
|
\pgf@xc\pgfsysanim@t\pgf@yc%
|
|
\advance\pgf@xc by\pgfsysanim@s\pgf@yb%
|
|
% Iteration three: (y,xc) reduced to (x)
|
|
\pgf@x\pgfsysanim@t\pgf@xc%
|
|
\advance\pgf@x by\pgfsysanim@s\pgf@y%
|
|
}
|
|
|
|
\def\pgfsysanim@jump@splines{%
|
|
\ifx\pgfsysanim@prev@out@time\pgfsys@stay@text%
|
|
\ifx\pgfsysanim@next@in@time\pgfsys@jump@text%
|
|
\ifdim\pgfsysanim@frac@a pt<0.5pt%
|
|
\def\pgfsysanim@frac@a{0}%
|
|
\def\pgfsysanim@frac@b{1}%
|
|
\else%
|
|
\def\pgfsysanim@frac@a{1}%
|
|
\def\pgfsysanim@frac@b{0}%
|
|
\fi%
|
|
\else%
|
|
% Only stay, so go to begin
|
|
\def\pgfsysanim@frac@a{0}%
|
|
\def\pgfsysanim@frac@b{1}%
|
|
\fi%
|
|
\else
|
|
% Only jump, so go to end
|
|
\def\pgfsysanim@frac@a{1}%
|
|
\def\pgfsysanim@frac@b{0}%
|
|
\fi%
|
|
}
|
|
|
|
|
|
\endinput
|
|
|