Sample name: Chart that gets parameters from flashvars
Nosaukums: Diagramma, kura saņem datus no flashvars
Download source:
//  -------------------------------
//      Proj: Chart
//		Author: Ēriks Krūze
//  -------------------------------

package
{
	import flash.display.Sprite;
	import flash.display.Shape;
	import flash.text.TextField;
	import flash.text.TextFormat;
    import flash.text.TextFieldAutoSize;
    import flash.text.AntiAliasType;
    import flash.text.GridFitType;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import Math;
	import flash.display.LoaderInfo;

	//backgroundColor="#e9e9e9"
	[SWF(width="124", height="124", frameRate="1")]

    public class poll_percentage extends Sprite
    {
		public var radius : Number = 62; // radus of chart

		public function poll_percentage()
        {
			// read percents from flashvars
			//var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
			//this.click_tag_url = String(flashvars['clickTAG']);

			// print out all sectors
			var par_key:String;
			var par_val:Number;
			var rot_val:Number = 0; // how much rotate
			var par_col:Number;
			var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
			for (par_key in paramObj)
			{
				if (par_key == 'p1') par_col = 0xffffff;
				else if (par_key == 'p2') par_col = 0x000000;
				else if (par_key == 'p3') par_col = 0xff0000;
				else if (par_key == 'p4') par_col = 0x0000ff;

				par_val = Number(paramObj[par_key]);
				draw_sector(par_val, rot_val, par_col);
				rot_val -= par_val;
			}
        }

		public function draw_sector(percents:Number, rotation_percents:Number, circle_color:Number):void
		{
			var percents_reminder: Number = percents; // percents that stay when quarters ar drawn
			var x_cur: Number; // current position
			var y_cur: Number;
			var x_old: Number; // to save old pos
			var y_old: Number;
			var x_sign: Number; // in witch direction go
			var y_sign: Number;

			// create circle
			var circ:Shape = new Shape();
			circ.graphics.beginFill(circle_color,1);
			circ.graphics.drawCircle(radius,radius,radius);
			circ.graphics.endFill();

			// create sector mask for circle
			var cmask:Shape = new Shape();
			cmask.graphics.beginFill( 0x000000, 1 );

			x_cur = radius;
			y_cur = radius;
			cmask.graphics.moveTo( x_cur, y_cur );

			x_cur = radius;
			y_cur = 2*radius;
			cmask.graphics.lineTo( x_cur, y_cur );

			// draw quartes
			x_sign = 1; // for 1. quarter
			y_sign = 0;

			if (percents >= 25)
			{
				percents_reminder -= 25;
				x_old = x_cur;
				y_old = y_cur;
				x_cur = 2 * radius;
				y_cur = radius;
				cmask.graphics.curveTo(x_old + (x_sign * radius), y_old + (y_sign * radius), x_cur, y_cur );

				// for 2. quarter
				x_sign = 0;
				y_sign = -1;
			}
			if (percents >= 50)
			{
				percents_reminder -= 25;
				x_old = x_cur;
				y_old = y_cur;
				x_cur = radius;
				y_cur = 0;
				cmask.graphics.curveTo(x_old + (x_sign * radius), y_old + (y_sign * radius), x_cur, y_cur );

				// for 3. quarter
				x_sign = -1;
				y_sign = 0;
			}
			if (percents >= 75)
			{
				percents_reminder -= 25;
				x_old = x_cur;
				y_old = y_cur;
				x_cur = 0;
				y_cur = radius;
				cmask.graphics.curveTo(x_old + (x_sign * radius), y_old + (y_sign * radius), x_cur, y_cur );

				// for 4. quarter
				x_sign = 0;
				y_sign = 1;
			}
			if (percents == 100)
			{
				percents_reminder -= 25;
				x_old = x_cur;
				y_old = y_cur;
				x_cur = radius;
				y_cur = 2*radius;
				cmask.graphics.curveTo(x_old + (x_sign * radius), y_old + (y_sign * radius), x_cur, y_cur );
			}

			// draw reminder
			if (percents_reminder > 0)
			{
				var radians:Number = percents_reminder * ( (2 * Math.PI) / 100); // convert percents to radians
				var side_length:Number = Math.tan(radians) * radius;
				x_cur = x_cur + x_sign * (side_length);
				y_cur = y_cur + y_sign * (side_length);
				cmask.graphics.lineTo( x_cur, y_cur );
			}


			// go back to center
			cmask.graphics.lineTo( radius, radius );
			cmask.graphics.endFill();

			// rotate sector
			rotate_around_center(cmask,radius,rotation_percents);

			circ.mask = cmask;
			addChild(circ);
		}


		// rotates circle sector in clockwise direction
		public function rotate_around_center (ob:Shape, radius:Number, rotation_percents:Number):void
		{
			var m:Matrix=ob.transform.matrix;
			m.tx -= radius; // set rotation center point
			m.ty -= radius;


			m.rotate (rotation_percents * ( (2 * Math.PI) / 100 ));

			m.tx += radius;
			m.ty += radius;
			ob.transform.matrix=m;
		}

	}
}