class PieChart extends MovieClip { //PROPERTIES/////////////////////////////////////// //Objects private var chart:MovieClip; //Data private var chartData:Object; private var tempChartData:Array = new Array(); private var total:Number = 0; public var radius:Number = 50; private var sectors:Number; private var chartX; private var chartY; private var radians:Number; //private var test:Number;//For Highlight function //Apperance public var sectorColours:Array = new Array(); public var bGColour:Number = 0xFFFFFF; //METHODS////////////////////////////////////////// //CONSTRUCTOR public function PieChart() { //trace("constructed pieChart"); radians =(Math.PI / 180); } //Draw the complete chart public function drawChart():Void { trace("Draw whole chart- drawChart"); initializeChart(); //Initialize for drawing drawSectors(0); //Draw all sectors } //Initialize Chart public function initializeChart():Void { try { removeChart(); //If chart already exsists remove it } finally { //Initialize a new chart chart = this.createEmptyMovieClip("chart", 1); chart._x = chartX; chart._y = chartY; chart.lineStyle(0.1,0x000000,100); //line style sectors = chartData.cols; //Number of groups drawBackground(); //Draw background //getColours(); //Get colours for categories } } //Draw background circle public function drawBackground():Void { chart.createEmptyMovieClip("baseCircle",chart.getNextHighestDepth()); var baseCircle = this["chart"]["baseCircle"]; //Degrees to radians var rs = 0 * radians; var re = 360 * radians; //Draw a circle baseCircle.beginFill(bGColour); baseCircle.lineStyle(0.1, 0x888888); baseCircle.moveTo(radius * Math.cos(0), radius * Math.sin(0)); for (var t = rs+0.1; t < re-0.1; t += .01) { baseCircle.lineTo(radius * Math.cos(t), radius * Math.sin(t)); } baseCircle.lineTo(radius * Math.cos(0), radius * Math.sin(0)); baseCircle.endFill(); } //Sector drawing function private function drawSec(sector:MovieClip, rs:Number, re:Number):Void { sector.moveTo(0,0); for (var t = rs; t < re; t += .01) { sector.lineTo(radius * Math.cos(t), radius * Math.sin(t)); } sector.lineTo(0,0); } //Draw specific sector public function drawSector(i:Number,j:Number):Void { chart.createEmptyMovieClip("sector"+i,chart.getNextHighestDepth()); var sector = this["chart"]["sector"+i]; //Degrees to radians var rs = chartData.row[i].angles[j-1] * radians; if (j == 0) { rs = 0; } var re = chartData.row[i].angles[j] * radians; //Draw sector.lineStyle(0, 0xFFFFFF); sector.beginFill(chartData.colours[j]); drawSec(sector,rs,re); sector.endFill(); sector.lineStyle(0.1, 0x888888); var matrix = {matrixType:"box", x:-radius, y:-radius, w:(2*radius), h:(2*radius), r:0}; sector.beginGradientFill("radial",[0xFFFFFF,0xFFFFFF],[0,80],[200, 255],matrix); drawSec(sector,rs,re); sector.endFill(); } //Draw all sectors public function drawSectors(row:Number):Void { for (var i:Number =0; i