Hi everyone,
I’m trying to draw an arc (like a rainbow, with an outer radius and inner radius) in flash dynamically … here’s an example: http://www.infosoftglobal.com/FusionCharts/IS/Site_Doc/HelpDocs/Images/CO_Arc_1.gif . However, I’m having trouble drawing the inner radius. Also, I’m trying to do this without using a mask. If anyone can help out, it would be great:
public static function drawArc(mc:MovieClip, x_pos:Number, y_pos:Number, radius:Number, innerRadius:Number, startAngle:Number, endAngle:Number, styles:DrawingStyle):Void {
styles.applyStyles(mc);
if (endAngle < startAngle) {
endAngle += 360;
}
var r:Number = radius;
var n:Number = Math.ceil((endAngle - startAngle) / 45);
var theta:Number = ((endAngle - startAngle) / n) * degToRad;
var cr:Number = radius / Math.cos(theta / 2);
var angle:Number = startAngle * degToRad;
var cangle:Number = angle - theta / 2;
var inner_r:Number = innerRadius;
var inner_cr:Number = innerRadius / Math.cos(theta / 2);
mc.moveTo(x_pos + inner_r * Math.cos(angle), y_pos + inner_r * Math.sin(angle));
mc.lineTo(x_pos + r * Math.cos(angle), y_pos + r * Math.sin(angle));
for (var i:Number = 0; i < n; i++) {
angle += theta;
cangle += theta;
var endX = r * Math.cos(angle);
var endY = r * Math.sin(angle);
var cX = cr * Math.cos(cangle);
var cY = cr * Math.sin(cangle);
mc.curveTo(x_pos + cX, y_pos + cY, x_pos + endX, y_pos + endY);
}
mc.lineTo(x_pos + inner_r * Math.cos(angle), y_pos + inner_r * Math.sin(angle));
angle = endAngle * degToRad;
cangle = angle - theta / 2;
for (var i:Number = 0; i < n; i++) {
angle += theta;
cangle += theta;
var endX = inner_r * Math.cos(angle);
var endY = inner_r * Math.sin(angle);
var cX = inner_cr * Math.cos(cangle);
var cY = inner_cr * Math.sin(cangle);
mc.curveTo(x_pos + cX, y_pos + cY, x_pos + endX, y_pos + endY);
}
mc.endFill();
}
thank you,