[NTG-context] Re: Animations in ConTeXt

Willi Egger w.egger at boede.nl
Mon May 23 19:54:54 CEST 2005


Hi Richard,

thanks for this example. I tried it and voilà!

Willi

Richard Hirsch wrote:
> Richard Rascher-Friesenhausen asked
> 
>>So again. Is it possible to write something like the above animation
> 
> packages 
> 
>>in ConTeXt (as a module)?
> 
> 
> If Acrobat can display them, ConTeXt can generate them.
> 
> Here is a simple example. 
> 
> \setupoutput      [pdf]
> \setupcolors      [state=start]
> \setupinteraction [state=start]
> \setuppapersize   [S6][S6]
> 
> %% this is just code to get something to animate
> \startMPinclusions
>   picture thearrow, thestar;
> 
>   drawarrow (origin--up) scaled 10mm
>     withpen pencircle scaled 3pt
>     withcolor .9 red;
>   setbounds currentpicture to (fullcircle scaled 22mm);
> 
>   thearrow:= currentpicture scaled 5;
>   currentpicture:= nullpicture;
> 
>   for angle=0 step 72 until 359:
>     draw thearrow rotated angle;
>   endfor
> 
>   thestar:= currentpicture;
>   currentpicture:= nullpicture
> \stopMPinclusions
> 
> \setupMPvariables [drawstar] [rotation=0]
> \startuniqueMPgraphic{drawstar}{rotation}
>   draw thestar rotated \MPvar{rotation};
> \stopuniqueMPgraphic
> 
> 
> %% now we define some symbols (the frames of the animated sequence)
> \def\definestarsymbol#1{%
>   \definesymbol [star #1] [\uniqueMPgraphic{drawstar}{rotation=#1}]}
> 
> \definestarsymbol{0}
> \definestarsymbol{6}
> \definestarsymbol{12}
> \definestarsymbol{18}
> \definestarsymbol{24}
> \definestarsymbol{30}
> \definestarsymbol{36}
> \definestarsymbol{42}
> \definestarsymbol{48}
> \definestarsymbol{54}
> \definestarsymbol{60}
> \definestarsymbol{66}
> 
> %% the frames are put into a fieldstack
> \definefieldstack [vortex]
>   [star 0,  star 6,  star 12, star 18, star 24, star 30, 
>    star 36, star 42, star 48, star 54, star 60, star 66]
> 
> %% and this is the JavaScrip code that displays the frames one by one
> \startJSpreamble MyField used later
> var current = 1;
> var delay   = 200;              % 200 milliseconds
> var timer;
> var running = false;            % animation currently not running
> 
> function Advance_Angle ( ) {
>   this.getField("vortex:"+current).value = "Off";
>   if (++current > 12)    % number of frames
>     { current = 1; }    % loop through frames
>   this.getField("vortex:"+current).value = "On";
> }
> \stopJSpreamble
> 
> %% we want to control the starting and stopping of the animation
> \startJScode Rotate_Star uses MyField
> if (running) { 
>   try { app.clearInterval(timer); } catch(except) {};
>   running = false;
> }
> else { 
>   timer = app.setInterval("Advance_Angle()",delay); 
>   running = true;
> }
> \stopJScode
> 
> 
> \starttext
>   \placefigure [here] [fig:animation]
>   {A simple \MetaFun\ animation,
>   click \goto {here} [JS(Rotate_Star)] to start (or stop)}
>   {\fieldstack [vortex]}
> \stoptext
> 
> Of course you would want to put the symbol definitions and the
> definition of the fieldstack into a loop. I tried 
> %% \newcount\angle
> %% \angle=0%\zerocount
> %% \dorecurse{12} {%
> %%    \number\angle:\qquad
> %%    \definestarsymbol{\the\angle}
> %%    \symbol[star \number\angle]\par
> %%    \advance\angle by 6}
> and did get the single symbols. I wasn't successful however in putting
> the symbol list of the fieldstack definition into a loop. Perhaps the
> ConTeXt gurus can help.
> 
> Best regards,
> 
>   Richard
> 
> _______________________________________________
> ntg-context mailing list
> ntg-context at ntg.nl
> http://www.ntg.nl/mailman/listinfo/ntg-context


More information about the ntg-context mailing list