Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function arc(x:Number, y:Number, radius:Number, startAngle:Number, endAngle:Number, anticlockwise:Boolean = false):void
- {
- if (!isFinite(x) || !isFinite(y) || !isFinite(radius) ||
- !isFinite(startAngle) || !isFinite(endAngle))
- {
- return;
- }
- var startX:Number = x + radius * Math.cos(startAngle);
- var startY:Number = y + radius * Math.sin(startAngle);
- // check that path contains subpaths
- if (path.length == 0)
- {
- moveTo(startX, startY);
- }
- else
- {
- lineTo(startX, startY);
- }
- if (startAngle == endAngle)
- {
- return;
- }
- var theta:Number = endAngle - startAngle;
- var PI2:Number = Math.PI * 2;
- if (anticlockwise)
- {
- if (theta <= -PI2)
- {
- theta = PI2;
- }
- else
- {
- while (theta >= 0)
- {
- theta -= PI2;
- }
- }
- }
- else
- {
- if (theta >= PI2)
- {
- theta = PI2;
- }
- else
- {
- while (theta <= 0)
- {
- theta += PI2;
- }
- }
- }
- var angle:Number = startAngle;
- var segments:Number = Math.ceil(Math.abs(theta) / (Math.PI / 4));
- var delta:Number = theta / (segments * 2);
- var radiusMid:Number = radius / Math.cos(delta);
- for (var i:int = 0; i < segments; i++)
- {
- angle += delta;
- var cpx:Number = x + Math.cos(angle) * radiusMid;
- var cpy:Number = y + Math.sin(angle) * radiusMid;
- var cp:Point = state.matrix.transformPoint(new Point(cpx,cpy));
- angle += delta;
- var apx:Number = x + Math.cos(angle) * radius;
- var apy:Number = y + Math.sin(angle) * radius;
- var ap:Point = state.matrix.transformPoint(new Point(apx,apy));
- path.curveTo(cp.x, cp.y, ap.x, ap.y);
- }
- if (theta == PI2)
- {
- var endX:Number = x + radius * Math.cos(endAngle);
- var endY:Number = y + radius * Math.sin(endAngle);
- moveTo(endX, endY);
- }
- else
- {
- path.curPoint.x = ap.x;
- path.curPoint.y = ap.y;
- //currentPoint.x = ap.x;
- //currentPoint.y = ap.y;
- }
- }
Add Comment
Please, Sign In to add comment