package { import flash.display.BitmapData; import flash.display.Shape; import flash.display.Sprite; import flash.system.ApplicationDomain; import flash.display.Bitmap; public class KaleidoscopeItem extends Sprite{ private var imageWidth:Number; private var imageHeight:Number; private var graphicHolder:Sprite; private var graphic : Bitmap; private var angle:Number = 0; private var angleInc:Number = 1; private var thisBitmapData:BitmapData; public function KaleidoscopeItem(image:BitmapData) { thisBitmapData=image; imageWidth=image.width; imageHeight=image.height; } public function init(angle:Number, imageDiameter:Number, radius:Number, overlap:Number):void{ var centerX:Number = imageDiameter / 2; var centerY:Number = imageDiameter / 2; graphic = new Bitmap(thisBitmapData,"auto",true); graphic.x = - centerX; graphic.y = -centerY; graphicHolder = new Sprite(); graphicHolder.addChild(graphic); graphicHolder.x = centerX; graphicHolder.y = centerY; var mask : Shape = new Shape(); mask.graphics.beginFill(0xFFFFFF); mask.graphics.moveTo(centerX, centerY); var theta:Number = (Math.PI / 180)*angle /2 var lineX:Number = Math.sin(theta+overlap) * radius;//1.000099218 var lineY:Number = Math.cos(theta+overlap) * radius; mask.graphics.lineTo(centerX + lineX, centerY- lineY); mask.graphics.lineTo(centerX - lineX, centerY- lineY); mask.graphics.lineTo(centerX, centerY); mask.graphics.endFill(); this.mask = mask; addChild(graphicHolder); addChild(mask); } public function rotate(newAngle:Number):void { graphicHolder.rotation = newAngle; } public function translate(x:Number, y:Number):void { graphicHolder.x = imageWidth / 2 + x; graphicHolder.y = imageHeight / 2 + y; } } }