1  /**
     2   * com.sekati.draw.Ring
     3   * @version 1.0.5
     4   * @author jason m horwitz | sekati.com
     5   * Copyright (C) 2007  jason m horwitz, Sekat LLC. All Rights Reserved.
     6   * Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
     7   */
     8  
     9  import com.sekati.geom.Point;
    10  
    11  /**
    12   * Ring drawing utility.
    13   */
    14  class com.sekati.draw.Ring {
    15  
    16  	/**
    17  	 * Draw a Ring in an existing clip.
    18  	 * @param mc (Movie	Clip) target clip to draw in
    19  	 * @param p (Point) center point
    20  	 * @param outerRadius (Number) radius of outer circle
    21  	 * @param innerRadius (Number) radius of inner (cut out) circle
    22  	 * @param fillColor (Number) hex fill [default: 0x000000]
    23  	 * @param fillAlpha (Number) fill alpha transparency [default: 100]
    24  	 * @return Void
    25  	 */
    26  	public static function draw(mc:MovieClip, p:Point, outerRadius:Number, innerRadius:Number, fillColor:Number, fillAlpha:Number):Void {
    27  		var fc:Number = (!fillColor) ? 0x000000 : fillColor;		
    28  		var fa:Number = (isNaN( fillAlpha )) ? 100 : fillAlpha;
    29  		var x:Number = p.x;
    30  		var y:Number = p.y;
    31  		var r1:Number = outerRadius;
    32  		var r2:Number = innerRadius;
    33  		var _rad:Number = Math.PI / 180;
    34  		
    35  		mc.clear( );
    36  		mc.beginFill( fc, fa );
    37  		
    38  		mc.moveTo( 0, 0 );
    39  		mc.lineTo( r1, 0 );
    40  
    41  		// draw the 30-degree segments
    42  		var a:Number = 0.268;  
    43  		// tan(15)
    44  		var endx:Number;
    45  		var endy:Number;
    46  		var ax:Number;
    47  		var ay:Number;
    48  		for (var i:Number = 0; i < 12 ; i++) {
    49  			endx = r1 * Math.cos( (i + 1) * 30 * _rad );
    50  			endy = r1 * Math.sin( (i + 1) * 30 * _rad );
    51  			ax = endx + r1 * a * Math.cos( ((i + 1) * 30 - 90) * _rad );
    52  			ay = endy + r1 * a * Math.sin( ((i + 1) * 30 - 90) * _rad );
    53  			mc.curveTo( ax, ay, endx, endy );   
    54  		}		
    55  		
    56  		// cut out middle (go in reverse)
    57  		mc.moveTo( 0, 0 );
    58  		mc.lineTo( r2, 0 );		
    59  
    60  		for (var j:Number = 12; j > 0 ; j--) {
    61  			endx = r2 * Math.cos( (j - 1) * 30 * _rad );
    62  			endy = r2 * Math.sin( (j - 1) * 30 * _rad );
    63  			ax = endx + r2 * (0 - a) * Math.cos( ((j - 1) * 30 - 90) * _rad );
    64  			ay = endy + r2 * (0 - a) * Math.sin( ((j - 1) * 30 - 90) * _rad );
    65  			mc.curveTo( ax, ay, endx, endy );   
    66  		}
    67  		mc.endFill( );		
    68  		mc._x = x;
    69  		mc._y = y;		
    70  	}	
    71  
    72  	private function Ring() {
    73  	}
    74  }