// -------------------------------
// 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;
}
}
}