Feb 5, 2009
Here is a recent code snippet I wrote to draw dashed lines in Actionscript (I am using it in Flex). Very cool. I’m displaying it using the new “Snipt Embed” functionality from Snipt.org , pretty neat!
package com.dlw.common.graphics {
import flash.geom.Point;
public class DashedLine {
public var dashLen:int;
public var spaceLen:int;
public var lineThickness:int;
public var lineColor:uint;
public function DashedLine(dashLen:int=5, spaceLen:int=5, lineThickness:int=1, lineColor:uint=0x000000) {
this.dashLen = dashLen;
this.spaceLen = spaceLen;
this.lineThickness = lineThickness;
this.lineColor = lineColor;
}
public function drawDashedLine(target:*, startPoint:Point, endPoint:Point):void {
var complete:Boolean = false;
var dLen:int = this.dashLen;
var sLen:int = this.spaceLen;
var tempVal:int = 0;
//ONE WAY DRAWING!!
if (startPoint.y == endPoint.y) { //drawing on the same y axis, next point will be x-based
if (startPoint.x > endPoint.x) { //always draw from the smaller val to the larger (flip vals)
tempVal = startPoint.x;
startPoint.x = endPoint.x;
endPoint.x = tempVal;
}
}else{ //drawing on same x axis, next point will be y-based
if (startPoint.y > endPoint.y) { //always draw from the smaller val to the larger (flip vals)
tempVal = startPoint.y;
startPoint.y = endPoint.y;
endPoint.y = tempVal;
}
}
//============
target.graphics.lineStyle(this.lineThickness, this.lineColor, 1);
target.graphics.moveTo(startPoint.x, startPoint.y); //move to the start point
while (!complete) {
//check to see if the next dash draw will exceed the distance
//and if so, shrink the dashlen
if (startPoint.y == endPoint.y) {
if (startPoint.x + dLen >= endPoint.x) {
dLen -= ((startPoint.x + dLen) - endPoint.x);
complete = true;
}
target.graphics.lineTo(startPoint.x + dLen, startPoint.y);
startPoint.x += dLen;
if (startPoint.x + sLen >= endPoint.x) {
sLen -= ((startPoint.x + sLen) - endPoint.x);
}
target.graphics.moveTo(startPoint.x + sLen, startPoint.y);
startPoint.x += sLen;
}else{
if (startPoint.y + dLen >= endPoint.y) {
dLen -= ((startPoint.y + dLen) - endPoint.y);
complete = true;
}
target.graphics.lineTo(startPoint.x, startPoint.y + dLen);
startPoint.y += dLen;
if (startPoint.y + sLen >= endPoint.y) {
sLen -= ((startPoint.y + sLen) - endPoint.y);
}
target.graphics.moveTo(startPoint.x, startPoint.y + sLen);
startPoint.y += sLen;
}
}
}
}
} [code snippet: http://snipt.org/Jkl ]