package { import com.nitoyon.potras.*; import flash.display.*; import flash.geom.*; import flash.events.*; [SWF(width="320",height="320")] public class AjustVertex extends Sprite { [Embed(source='data1.gif')] private var Data1:Class; private static const SCALE:int = 8; public function AjustVertex() { var bmp:Bitmap = new Data1(); bmp.scaleX = bmp.scaleY = SCALE; var bmd:BitmapData = bmp.bitmapData; addChild(bmp); var i:int = 0; var j:int = 0; var pathList:Array = PathList.create(bmp.bitmapData); drawPath(bmd, pathList); var lons:Array = []; var sprite:Sprite = new Sprite(); addChild(sprite); var movePos:Function = function(pt:Point):void { pt.x *= SCALE; pt.x += SCALE / 2; pt.y *= SCALE; pt.y += SCALE / 2; } for(i = 0; i < pathList.length; i++) { var sums:Array = ProcessPath.calcSums(pathList[i].priv as Array) as Array; lons[i] = ProcessPath.calcLon(pathList[i].priv as Array); var po:Array = ProcessPath.bestPolygon(pathList[i].priv as Array, lons[i], sums); var vertex:Array = ProcessPath.adjustVertices(pathList[i].priv as Array, sums, po); for(j = 0; j < vertex.length; j++) { var num:int = po[j]; var pt:Point = pathList[i].priv[num].clone(); movePos(pt); sprite.graphics.beginFill(0x000000); sprite.graphics.lineStyle(); sprite.graphics.drawCircle(pt.x, pt.y, 2); sprite.graphics.endFill(); pt = vertex[j].clone(); movePos(pt); var s:Sprite = createCross(); s.x = pt.x; s.y = pt.y; addChild(s); } } } public static function drawPath(bmd:BitmapData, pathList:Array):void { bmd.fillRect(new Rectangle(0, 0, bmd.width, bmd.height), 0xffffffff); for(var i:int = 0; i < pathList.length; i++) { for(var j:int = 0; j < pathList[i].priv.length; j++) { var pt:Point = pathList[i].priv[j] as Point; if(pt) { bmd.setPixel(pt.x, pt.y, 0x999999); } } } } private function createCross():Sprite { var s:Sprite = new Sprite(); s.graphics.lineStyle(2, 0xffffff); s.graphics.moveTo(-5, 0) s.graphics.lineTo(5, 0); s.graphics.moveTo(0, -5); s.graphics.lineTo(0, 5); s.graphics.lineStyle(1, 0x0066cc); s.graphics.moveTo(-5, 0) s.graphics.lineTo(5, 0); s.graphics.moveTo(0, -5); s.graphics.lineTo(0, 5); return s; } } }