forked from: forked from: forked from: How can I draw a circle with dashed line/stroke?

by aobyrne forked from forked from: forked from: How can I draw a circle with dashed line/stroke? (diff: 93)
Hi! Why don't you use the DrawArc class below?

How can I draw a circle with dashed line/stroke?
Using a for cycle and using the equation of the circle wouldn't it be too slow?
♥0 | Line 149 | Modified 2011-11-19 20:58:31 | MIT License
play

ActionScript3 source code

/**
 * Copyright aobyrne ( http://wonderfl.net/user/aobyrne )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/8raw
 */

// forked from SoWhat1983's forked from: How can I draw a circle with dashed line/stroke?
// Hi! Why don't you use the DrawArc class below?

// forked from maesy's How can I draw a circle with dashed line/stroke?
//How can I draw a circle with dashed line/stroke?
//Using a for cycle and using the equation of the circle wouldn't it be too slow?
package {
    import flash.geom.Point;
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.display.LineScaleMode;
    import flash.display.CapsStyle;
    import flash.display.JointStyle;

    public class Root extends Sprite {
        private var shape:Shape;
        private var theRadius:Number = 100;
        private var c:Point=new Point(200,200);
        private var r:Number = 40;
        public function Root() {
           circle();
        }
        
        private function circle():void {
            shape = new Shape();
            shape.graphics.beginFill(0xFFcccc, 1);
            //Can i set a dashed line style?
//        shape.graphics.lineStyle(2, 0x000000, 1, true, LineScaleMode.NONE, CapsStyle.SQUARE, JointStyle.MITER, 3);
        shape.graphics.drawCircle(c.x, c.y, theRadius);
        shape.graphics.endFill();
//            this.addChild(shape);
//            shape.x = stage.stageWidth/2;
//            shape.y = stage.stageHeight/2;
            
            
            var dashedCircle:Sprite = new Sprite();
            var arcAngle:Number            =  4;
            var dashedLineColor:uint       =  0;
            var dashedLineThickness:Number =  4;
            
            dashedCircle.addChild(shape);
            for(var i:Number=0;i<360/(arcAngle*2);i++){
                var a:drawArc = new drawArc(c.x,c.y,theRadius,i*(arcAngle*2),arcAngle,0x000000,dashedLineThickness,dashedLineColor);
                dashedCircle.addChild(a);
            }
            //dashedCircle.x=dashedCircle.y=stage.stageWidth/2;
            addChild(dashedCircle);
            for(var ii:int=1;ii<10+1;ii++)addChild(new drawArc((r*1.1)*(ii-1), r, r, 0, 18*ii, 0xffffff, 1, 0));
            for (var iik:int = 1; iik < 10 + 1; iik++) addChild(new drawArc((r * 1.1) * (iik - 1), r, r, 0, -18 * iik, 0xffffff, 1, 0));
            var dr:Number = 5;
            var ri:Number = 20;
            var rr:Number = ri;
            var posr:Number = 0;
            var point:Point;
            for (var j:int = 0; j < 10 ; j++)
            {
                //posr = 2*ri * iikk + 4 * dr * iikk;        
                posr += 2*(ri+(j+0.5)*dr);        
                rr += dr;
                point = new Point(posr, 200);
                addChild( new DashedCircle(rr, point));
                graphics.lineStyle(0);
                graphics.drawCircle(point.x, point.y, ri);
            }
            rr = ri;
            posr = 0;
            for (var jk:int = 0; jk < 10 ; jk++)
            {
                //posr = 2*ri * iikk + 4 * dr * iikk;        
                posr += 2*(ri+(jk+0.5)*dr);        
                rr += dr;
                point = new Point(posr, 400);
                addChild( new DashedCircle(rr, point,7));
                graphics.lineStyle(0);
                graphics.drawCircle(point.x, point.y, ri);
            }
        }
    }
}


import flash.display.*;
import flash.geom.Point;
class drawArc extends Sprite
{ 
    public function drawArc(baseX:Number, baseY:Number, radius:Number, startAngle:Number, arcAngle:Number, fillColor:uint,lineThickness:Number,lineColor:uint):void {
        
        var yRadius:Number = radius;
        
        var segAngle:Number, theta:Number, angle:Number, angleMid:Number, segs:Number, ax:Number, ay:Number, bx:Number, by:Number, cx:Number, cy:Number, return_arr:Array;
        
        segs = Math.ceil(Math.abs(arcAngle)/45);
        segAngle = arcAngle/segs;
        
        theta = -(segAngle/180)*Math.PI;
        angle = -(startAngle/180)*Math.PI;
        
        // angle += theta;
        
        ax = baseX;
        ay = baseY;
        angleMid = angle-(theta/2);
        bx = ax+Math.cos(angle)*radius;
        by = ay+Math.sin(angle)*yRadius;
        
        with(graphics){
            beginFill(fillColor);
            lineStyle(lineThickness,lineColor);
//            moveTo(0,0); 
//            lineTo(bx, by);
            moveTo(bx, by);
        }
        
        
        if (segs>0) {
            for (var i:int = 0; i<segs; i++) { 
                angle += theta;
                angleMid = angle-(theta/2);
                bx = ax+Math.cos(angle)*radius;
                by = ay+Math.sin(angle)*yRadius;
                cx = ax+Math.cos(angleMid)*(radius/Math.cos(theta/2));
                cy = ay+Math.sin(angleMid)*(yRadius/Math.cos(theta/2));
                graphics.curveTo(cx, cy, bx, by);
            }
        }
//        graphics.lineTo(0,0); 
    };
}

class DashedCircle extends Sprite {
    private var _radius:Number;
    private var _c:Point;
    private var dashSize:Number;
    private var color:uint;
    private var thickness:Number;
    public function DashedCircle(radius:Number ,c:Point,dashSize:Number=-1,color:uint=0,thickness:Number=3) {
       this.thickness = thickness;
       this.color = color;
       this.dashSize = dashSize;
       this.radius = radius;
       this.c = c;
       circle();
    }
    
    private function circle():void {
        var shape:Shape = new Shape();
        shape.graphics.beginFill(0xFFcccc, 0.1);
        shape.graphics.drawCircle(c.x, c.y, radius);
        shape.graphics.endFill();
        var perimeter:Number = Math.PI * 2 * radius;
        var d:Number = perimeter / dashSize;

        
        var dashedCircle:Sprite = new Sprite();
        var arcAngle:Number            =  4;
        if (dashSize!=-1) 
        {
            arcAngle = 360 / d;
        }
        var dashedLineColor:uint       =  color;
        var dashedLineThickness:Number =  thickness;
        var dfsdf:Number = 360 / (arcAngle * 2);
        dashedCircle.addChild(shape);
        for (var i:Number = 0; i < dfsdf; i++)
        {
            var a:drawArc = new drawArc(c.x, c.y, radius, (i * (arcAngle * 2)), arcAngle, 0x000000, dashedLineThickness, dashedLineColor);
            dashedCircle.addChild(a);
        }
        addChild(dashedCircle);
    }
    
    public function get radius():Number 
    {
        return _radius;
    }
    
    public function set radius(value:Number):void 
    {
        _radius = value;
    }
    
    public function get c():Point 
    {
        return _c;
    }
    
    public function set c(value:Point):void 
    {
        _c = value;
    }
}

Forked