00001 import flash.geom.ColorTransform;
00002 import flash.geom.Point;
00003 import flash.display.BitmapData;
00004 import flash.geom.Matrix;
00005 class gugga.utils.DrawUtil
00006 {
00007 public static function fillRect(aContainer:MovieClip, aColor:Number, aAlpha:Number, aX:Number, aY:Number, aWidth:Number, aHeight:Number){
00008 aContainer.beginFill(aColor, aAlpha);
00009 aContainer.moveTo(aX, aY);
00010 aContainer.lineTo(aX, aY + aHeight);
00011 aContainer.lineTo(aX + aWidth, aY + aHeight);
00012 aContainer.lineTo(aX + aWidth, aY);
00013 aContainer.lineTo(aX, aY);
00014 aContainer.endFill();
00015 }
00016
00017 public static function fillBitmapRect(aContainer:MovieClip, aBitmap:BitmapData, aX:Number, aY:Number, aWidth:Number, aHeight:Number){
00018 aContainer.beginBitmapFill(aBitmap, new Matrix(), true, false);
00019 aContainer.moveTo(aX, aY);
00020 aContainer.lineTo(aX, aY + aHeight);
00021 aContainer.lineTo(aX + aWidth, aY + aHeight);
00022 aContainer.lineTo(aX + aWidth, aY);
00023 aContainer.lineTo(aX, aY);
00024 aContainer.endFill();
00025 }
00026
00027 public static function fillPolygon(aContainer:MovieClip, aColor:Number, aAlpha:Number, aPoints:Array){
00028 aContainer.beginFill(aColor, aAlpha);
00029 aContainer.moveTo(aPoints[0].x, aPoints[0].y);
00030
00031 for(var i = 1; i < aPoints.length; i++){
00032 aContainer.lineTo(aPoints[i].x, aPoints[i].y);
00033 }
00034
00035 aContainer.lineTo(aPoints[0].x, aPoints[0].y);
00036 aContainer.endFill();
00037 }
00038
00039 public static function createBoundingBoxCover(aName:String, aContainer:MovieClip):MovieClip
00040 {
00041 var cover:MovieClip = aContainer.createEmptyMovieClip(aName, aContainer.getNextHighestDepth());
00042 fillRect(cover, 0xFF0000, 0, 0, 0, 1, 1);
00043
00044 var boundsObject:Object = aContainer.getBounds(aContainer);
00045 cover._x = boundsObject.xMin;
00046 cover._y = boundsObject.yMin;
00047 cover._width = boundsObject.xMax - boundsObject.xMin;
00048 cover._height = boundsObject.yMax - boundsObject.yMin;
00049
00050 return cover;
00051 }
00052
00053 public static function createCoverForMovieClip(aName:String, aContainer:MovieClip, aTarget:MovieClip):MovieClip
00054 {
00055 var newMovieClip:MovieClip = aContainer.createEmptyMovieClip(aName, aContainer.getNextHighestDepth());
00056
00057 DrawUtil.fillRect(newMovieClip, 0xFF0000, 0, 0, 0, 1, 1);
00058
00059 newMovieClip._x = aTarget._x;
00060 newMovieClip._y = aTarget._y;
00061 newMovieClip._width = aTarget._width;
00062 newMovieClip._height= aTarget._height;
00063
00064 return newMovieClip;
00065 }
00066
00067 public static function createCoverForMovieClips(aName:String, aContainer:MovieClip, aTargets:Array):MovieClip
00068 {
00069 var newMovieClip:MovieClip = aContainer.createEmptyMovieClip(aName, aContainer.getNextHighestDepth(), {_width:1, _height:1});
00070 if (aTargets.length == 0)
00071 {
00072 return newMovieClip;
00073 }
00074
00075 DrawUtil.fillRect(newMovieClip, 0xFF0000, 0, 0, 0, 1, 1);
00076
00077 var tempMovieClip:MovieClip = aTargets[0];
00078
00079 var x1:Number = tempMovieClip._x;
00080 var y1:Number = tempMovieClip._y;
00081 var x2:Number = x1 + tempMovieClip._width;
00082 var y2:Number = y1 + tempMovieClip._height;
00083
00084 for (var i:Number = 1; i < aTargets.length; i++)
00085 {
00086 tempMovieClip = aTargets[i];
00087 x1 = Math.min(x1, tempMovieClip._x);
00088 y1 = Math.min(y1, tempMovieClip._y);
00089 x2 = Math.max(x2, tempMovieClip._x + tempMovieClip._width);
00090 y2 = Math.max(y2, tempMovieClip._y + tempMovieClip._height);
00091
00092 }
00093
00094 newMovieClip._x = x1;
00095 newMovieClip._y = y1;
00096 newMovieClip._width = Math.abs(x2 - x1);
00097 newMovieClip._height= Math.abs(y2 - y1);
00098
00099 return newMovieClip;
00100 }
00101
00102 public static function drawArc(aCanvas:MovieClip, aCenter:Point, aRadius:Number, aAngle:Number, aStartAngle:Number):Point
00103 {
00104 var angleMid:Number;
00105 var bx:Number;
00106 var by:Number;
00107 var cx:Number;
00108 var cy:Number;
00109
00110 var segs:Number = Math.ceil(Math.abs(aAngle)/(Math.PI/4));
00111 var segAngle:Number = aAngle/segs;
00112 var theta:Number = segAngle;
00113 var angle:Number = aStartAngle;
00114
00115 if (segs>0) {
00116 for (var i:Number = 0; i < segs; i++) {
00117 angle += theta;
00118 angleMid = angle - (theta / 2);
00119 bx = aCenter.x + Math.cos(angle) * aRadius;
00120 by = aCenter.y + Math.sin(angle) * aRadius;
00121 cx = aCenter.x + Math.cos(angleMid) * (aRadius / Math.cos(theta / 2));
00122 cy = aCenter.y + Math.sin(angleMid) * (aRadius / Math.cos(theta / 2));
00123 aCanvas.curveTo(cx, cy, bx, by);
00124 }
00125 }
00126
00127 return new Point(bx, by);
00128 }
00129
00130 public static function getRelativePolarAngle(aCenter:Point, aPoint:Point):Number
00131 {
00132 var quadrantOffsetAngle:Number = 0;
00133 var xOffset:Number = aPoint.x - aCenter.x;
00134 var yOffset:Number = aPoint.y - aCenter.y;
00135
00136 if(xOffset < 0)
00137 {
00138 quadrantOffsetAngle = Math.PI;
00139 }
00140 else if(xOffset > 0 && yOffset < 0)
00141 {
00142 quadrantOffsetAngle = 2 * Math.PI;
00143 }
00144
00145 return (quadrantOffsetAngle + Math.atan(yOffset /xOffset));
00146 }
00147
00148 public static function colorMovieClip(aMovieClip:MovieClip, aColor:Number)
00149 {
00150 var colorTransform = new ColorTransform();
00151 colorTransform.rgb = aColor;
00152 aMovieClip.transform.colorTransform = colorTransform;
00153 }
00154
00155 public static function convertCoordinateSystem(aPoint:Point, aSourceCoordinateSystem:MovieClip, aTargetCoordinateSystem:MovieClip) : Point
00156 {
00157 aSourceCoordinateSystem.localToGlobal(aPoint);
00158 aTargetCoordinateSystem.globalToLocal(aPoint);
00159
00160 return aPoint;
00161 }
00162
00163 public static function convertCoordinateSystemX(aX:Number, aSourceCoordinateSystem:MovieClip, aTargetCoordinateSystem:MovieClip) : Number
00164 {
00165 var point : Point = new Point(aX, 0);
00166 convertCoordinateSystem(point, aSourceCoordinateSystem, aTargetCoordinateSystem);
00167
00168 return point.x;
00169 }
00170
00171 public static function convertCoordinateSystemY(aY:Number, aSourceCoordinateSystem:MovieClip, aTargetCoordinateSystem:MovieClip) : Number
00172 {
00173 var point : Point = new Point(0, aY);
00174 convertCoordinateSystem(point, aSourceCoordinateSystem, aTargetCoordinateSystem);
00175
00176 return point.y;
00177 }
00178 }