Циферки можно менять/удалять/добавлять новые:
drawDiagram.as
Код AS3:
package
{
import flash.display.DisplayObjectContainer;
import flash.display.Graphics;
import flash.display.Sprite;
/**
* ...
* @author wolsh
*/
public function drawDiagram (container:DisplayObjectContainer, radius:Number, values:Array):void
{
var k:Number = radius / Math.max.apply(null, values);
var sectors:uint = values.length;
var sectorAngle:Number = 2 * Math.PI / sectors;
for (var i:uint = 0; i < sectors; i++)
{
var color:uint = 0x808080 + Math.random() * 0x404040;
var startAngle:Number = i * sectorAngle;
var sectorRadius:Number = values[i] * k;
var sector:Sprite = new Sprite();
container.addChild(sector);
// calculate fragments (18 gradians max at one step for cute round curve)
var frags:Number = Math.abs( Math.ceil(sectorAngle * 10 / Math.PI) );
if (sectorAngle < 0) frags += 1;
var fragAngle:Number = sectorAngle / frags;
// control points radius
var controlOutRadius:Number = sectorRadius / Math.cos( -fragAngle / 2);
// start drawings
var g:Graphics = sector.graphics;
g.lineStyle(1, 0xFFFFFF)
g.beginFill(color);
g.moveTo(0, 0);
var startX:Number = sectorRadius * Math.cos(startAngle);
var startY:Number = sectorRadius * Math.sin(startAngle);
g.lineTo(startX, startY);
// arc
for (var j:uint = 1; j < frags + 1; j++)
{
var aA:Number = startAngle + fragAngle * j;
var aX:Number = sectorRadius * Math.cos(aA);
var aY:Number = sectorRadius * Math.sin(aA);
var cA:Number = aA - fragAngle / 2;
var cX:Number = controlOutRadius * Math.cos(cA);
var cY:Number = controlOutRadius * Math.sin(cA);
g.curveTo(cX, cY, aX, aY);
}
g.lineTo(0, 0);
}
}
}
Main.as
Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
/**
* ...
* @author wolsh
*/
public class Main extends Sprite
{
private var _txt:TextField;
private var _diagram:Sprite;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
_diagram = new Sprite();
addChild(_diagram);
_diagram.x = _diagram.y = 220;
var data:Array = [300, 250, 320, 115, 234, 52, 186, 256, 370];
drawDiagram(_diagram, 200, data);
_txt = new TextField();
_txt.defaultTextFormat = new TextFormat("Arial", 18, 0x808080);
_txt.wordWrap = true;
_txt.type = "input";
_txt.background = true;
_txt.backgroundColor = 0x505050;
addChild(_txt);
_txt.x = 440;
_txt.y = 180;
_txt.width = 310;
_txt.height = 100;
_txt.text = data.toString();
_txt.addEventListener(Event.CHANGE, handlerChange);
}
private function handlerChange(event:Event):void
{
var data:Array = _txt.text.split(',');
_diagram.removeChildren();
drawDiagram(_diagram, 200, data);
}
}
}