import de.alex_uhlmann.animationpackage.*; import de.alex_uhlmann.animationpackage.animation.*; import de.alex_uhlmann.animationpackage.drawing.*; import de.alex_uhlmann.animationpackage.utility.*; import com.itechnica.svg.PathToArray; import mx.utils.Delegate; /** * Created by Helen Triolo as an example of using PathToArray with AnimationPackage * Notes at http://flash-creations.com/notes/sample_svgtoflash.php * Reads an SVG file, creates an array of Drawer objects. Draws sequential outline of all objects, then * sequentially fades in fill for each piece. */ APCore.initialize(); var wholeDrawing:Array; // array of Drawer instances var x:XML = new XML(); x.ignoreWhite = true; var nPathNodes:Number; var thisPath:Number; var conv:PathToArray; var paths:Array; var fill:Object = {}; var stroke:Object = {}; redraw._visible = false; function xmlLoaded(gotit:Boolean) { if (gotit) { msg.text = "Parsing SVG nodes..."; // uncomment the path assignment that is right for your file: // if your SVG file includes tags, use this line: paths = x.firstChild.firstChild.childNodes; // if your SVG file includes no tags, use this line instead: // paths = x.firstChild.childNodes; nPathNodes = paths.length; wholeDrawing = new Array(); getShapes(0); } else { trace("couldn't read xml"); } } // calls itself til all paths have been read and saved in wholeDrawing (array of Drawers) function getShapes(iPath:Number) { var dCmds:Array = new Array(); // draw the shapes in clips in holder movieclip holder.createEmptyMovieClip("p"+iPath, iPath+1); var oneShape:Drawer = new Drawer(holder["p"+iPath]); var firstPx:Number; var firstPy:Number; var d:Array; var dp:Array; var l:Line; var q:QuadCurve; conv = new PathToArray(paths[iPath], dCmds); for (var i:Number=0; i 0) wholeDrawing[thisPath].removeAllEventListeners("onEnd"); if (++thisPath < nPathNodes-1) { wholeDrawing[thisPath].addEventListener("onEnd", this, "drawOutlines"); wholeDrawing[thisPath].animationStyle(40,Linear.easeNone); wholeDrawing[thisPath].lineMovieclip._alpha = 100; wholeDrawing[thisPath].animateBy(0,100); } else if (thisPath == nPathNodes-1) { // when the last path is drawn, go to fade in routine thisPath = -1; wholeDrawing[nPathNodes-1].addEventListener("onEnd", this, "fadeIn"); wholeDrawing[nPathNodes-1].animationStyle(40,Linear.easeNone); wholeDrawing[nPathNodes-1].lineMovieclip._alpha = 100; wholeDrawing[nPathNodes-1].animate(0,100); } } // fade in fills function fadeIn() { wholeDrawing.animationStyle(30,Linear.easeNone); if (++thisPath < nPathNodes) { wholeDrawing[thisPath].fill(); wholeDrawing[thisPath].fillMovieclip._alpha = 0; var inFader:Alpha = new Alpha(wholeDrawing[thisPath].fillMovieclip,[0,100]); inFader.addEventListener("onEnd",this,"onFaded"); inFader.animate(0,100); } else { redraw._visible = true; } } // make stroke disappear and start next piece fading in function onFaded() { var outFader:Alpha = new Alpha(wholeDrawing[thisPath].lineMovieclip, 0); outFader.animate(0,100); fadeIn(); } redraw.onRelease = function() { this._visible = false; for (var iPath=0; iPath