This had me scratching my head for ages
I found this code somewhere in my travels but can’t remember where so sorry for not crediting the creator of it, but here it is for anyone wanting a nice slice of vector!
package com.kafkaris.utils
{
import flash.display.Shape;
import flash.events.Event;
/**
* Draw a segment of a circle
* @param target <Sprite> The object we want to draw into
* @param x <Number> The x-coordinate of the origin of the segment
* @param y <Number> The y-coordinate of the origin of the segment
* @param r <Number> The radius of the segment
* @param aStart <Number> The starting angle (degrees) of the segment (0 = East)
* @param aEnd <Number> The ending angle (degrees) of the segment (0 = East)
* @param step <Number=1> The number of degrees between each point on the segment's circumference
*/
public dynamic class Wedge extends Shape {
private var _colour:Number;
private var _x:Number;
private var _y:Number;
private var _radius:Number;
private var _aStart:Number;
private var _aEnd:Number;
private var _step:Number;
public function Wedge(colour:Number, x:Number, y:Number, radius:Number, aStart:Number, aEnd:Number, step:Number = 1)
{
_colour = colour;
_x = x;
_y = y;
_radius = radius;
_aStart = aStart;
_aEnd = aEnd;
_step = step;
init();
}
private function init(e:Event = null):void
{
this.graphics.beginFill(_colour);
this.drawSegment(this, _x, _y, _radius, _aStart, _aEnd, _step);
this.graphics.endFill();
}
private function drawSegment(target:Sprite, x:Number, y:Number, r:Number, aStart:Number, aEnd:Number, step:Number = 1):void {
// More efficient to work in radians
var degreesPerRadian:Number = Math.PI / 180;
aStart *= degreesPerRadian;
aEnd *= degreesPerRadian;
step *= degreesPerRadian;
// Draw the segment
target.graphics.moveTo(x, y);
for (var theta:Number = aStart; theta < aEnd; theta += Math.min(step, aEnd - theta)) {
target.graphics.lineTo(x + r * Math.cos(theta), y + r * Math.sin(theta));
}
target.graphics.lineTo(x + r * Math.cos(aEnd), y + r * Math.sin(aEnd));
target.graphics.lineTo(x, y);
}
}
}
JK


