Draw Grid ... @author ... mtok forked:2favorite:1lines:144license : All rights reserved modified : 2009-01-25 22:55:52 Embed Tweet package { import flash.display.Sprite; import flash.geom.Rectangle; /** * ... * @author ... */ public class Tategaki extends Sprite { public function Tategaki() { graphics.lineStyle(1, 0xA0EBF3); GraphicsUtils.drawGrid(graphics, new Rectangle(5, 5, 460, 460), 50); GraphicsUtils.drawGrid(graphics, new Rectangle(5, 5, 460, 460), 25, Vector.<Number>([2.5,2.5])); } } } import flash.display.Graphics; import flash.geom.Point; import flash.geom.Rectangle; class GraphicsUtils { public function GraphicsUtils() { ; } public static function drawGrid(g:Graphics, rect:Rectangle, size:Number, pattern:Vector.<Number> = null):void { var i:Number; var limitW:Number; var limitH:Number; limitW = rect.x + rect.width; limitH = rect.y + rect.height; if (pattern == null) { i = rect.y; while (i < limitH) { g.moveTo(rect.x, i); g.lineTo(limitW, i); i += size; } i = rect.x; while ( i < limitW) { g.moveTo(i, rect.y); g.lineTo(i, limitH); i += size; } }else { i = rect.y; while (i < limitH) { drawDotLine(g, rect.x, i, limitW, i, pattern); i += size; } i = rect.x; while (i < limitW) { drawDotLine(g, i, rect.y, i, limitH, pattern); i += size; } } } public static function drawDotLine(g:Graphics, fromX:Number, fromY:Number, toX:Number, toY:Number, pattern:Vector.<Number>):void { var i:int; var n:Number; var v:Point = new Point(toX - fromX, toY - fromY); var tmp:Point; var l:Number = v.length; var sl:SimpleList = new SimpleList(); var s:Boolean = true; v.normalize(1); for (i = 0; i < pattern.length; i++) { n = pattern[i]; tmp = v.clone(); tmp.normalize(n); sl.append({v:tmp, length:n}); } var pos:Point = new Point(fromX, fromY); var obj:Object; n = 0; g.moveTo(pos.x, pos.y); while (true) { obj = sl.next(); n += obj.length; if (n > l) { pos.x = toX; pos.y = toY; s = step(g, pos, s); break; }else { pos.offset(obj.v.x, obj.v.y); s = step(g, pos, s); } } } private static function step(g:Graphics, p:Point, s:Boolean):Boolean { if (s) { g.lineTo(p.x, p.y); }else { g.moveTo(p.x, p.y); } return !s; } } class SimpleList { private var currentElement:ListElement; private var appendFunc:Function; public function SimpleList(data:* = null) { if (data != null) { _initialize(data); }else{ appendFunc = _initialize; } } public function append(data:*):void { appendFunc.call(null, data); } public function _initialize(data:*):void { currentElement = new ListElement(data); currentElement.next = currentElement; currentElement.prev = currentElement; appendFunc = _append; } public function _append(data:*):void { var elem:ListElement = new ListElement(data); var tmp:ListElement; tmp = currentElement.next; currentElement.next = elem; elem.prev = currentElement; elem.next = tmp; tmp.prev = elem; currentElement = elem; } public function current():*{ return currentElement.data; } public function next():* { currentElement = currentElement.next; return currentElement.data; } public function prev():*{ currentElement = currentElement.prev; return currentElement.data; } } class ListElement { public var next:ListElement; public var prev:ListElement; public var data:*; public function ListElement(data:*) { this.data = data; } } Code Fullscreen Preview Fullscreen narahater size Rectangle call normalize Boolean clone offset lineTo width height moveTo Object lineStyle length Vector int Number sort new page view favorite forked pv5130 フォントサイズ20 送り48 べた組 mtok forked:4 favorite:7lines:225 (diff:102) tag: font typo pv7682 Text Engine 縦書きサンプル mtok forked:7 favorite:15lines:195 (diff:69) tag: FP10 text