AncaA's tech journal

28 aoû, 2007

(English) Drawing a dashed/dotted line

Posted by: Anca Alimanescu In: ActionScript 3.0

Drawing a dashed/dotted line

These days I needed in one of my applications to draw some dashed and dotted lines. After doing some research, I realized that there is no line style that would enable one to draw lines like this.
So I started implementing an algorithm that would draw a dashed/dotted line given two points. Drawing a dashed line is determined by setting the length of the dash and the length of the gap.

I decided drawing my dashed line by drawing smaller lines and adding gaps after each one of them.


private function drawDashedLine (x1:Number, y1:Number, x2:Number,y2:Number, dashLength:int, gapLength:int, color:uint):void
{
var lineLength:Number=0;
//counts the current length of the dashed line
startLength = 0;
//the container where the dashed line will be added
drawingCanvas = new UIComponent();
//set up the line style of the dashed line
drawingCanvas.graphics.lineStyle(3,color,1);
//move mouse to starting point
drawingCanvas.graphics.moveTo(x1,y1);

//start drawing dash
lineLength = Math.sqrt((Math.pow((x1-x2),2)+Math.pow((y1-y2),2)));
//while have the necessary space dashes and gaps can be drawn
while ((lineLength-startLength)>=(dashLength+gapLength))
{
drawDash(x1,x2,y1,y2,lineLength,dashLength);
drawGap(x1,x2,y1,y2,lineLength,gapLength);
}

//if there is not enough space to draw another dash, just draw part of the dash
if ((lineLength-startLength)<=dashLength)
{
drawingCanvas.graphics.lineTo(x2,y2)
}
else
{
drawDash(x1,x2,y1,y2,lineLength,dashLength);
}

try
{
cnvContainer.addChild(drawingCanvas);
}
catch (e:Error)
{
trace("child adding failed ")
}

}

The dash is drawn by determining the coordinates of the ending point of the dash.

//calculate the point where the dash ends and draw line
private function drawDash(x1:Number,x2:Number,y1:Number,y2:Number,lineLength:Number, dashLength:Number):void
{

var proportionDash:Number = 0;
startLength = startLength + dashLength;
//the percentage of the line(relative to the starting point)
//at wich the end point of the dash will be found
proportionDash = (startLength*100)/lineLength;

var retPoint:Point = getCoordinatesForProportion(x1,x2,y1,y2,proportionDash);
drawingCanvas.graphics.lineTo(retPoint.x,retPoint.y);

}

The gap is also implemented by moving the mouse cursor to the starting point of a new dash.

//calculate the point where the gap ends and move mouse cursor
private function drawGap(x1:Number,x2:Number,y1:Number,y2:Number,lineLength:Number, gapLength:Number):void
{
var proportionGap:Number = 0;
startLength = startLength + gapLength;
//the percentage of the line(relative to the starting point)
//at wich the end point of the gap will be found
proportionGap = (startLength*100)/lineLength;

var retPoint:Point = getCoordinatesForProportion(x1,x2,y1,y2,proportionGap);
drawingCanvas.graphics.moveTo(retPoint.x,retPoint.y);

}

Next I use a function that will determine the coordinates of the point located at a certain distance (in percents) from the starting point of the line. This does mostly what the Point.interpolate method of the framework does.

private function getCoordinatesForProportion(x1:Number,x2:Number,y1:Number,y2:Number,proportion:Number):Point
{
var newX:Number = 0;
var newY:Number = 0;
var retPoint:Point = new Point(0,0);

if (x1>=x2)
newX = x1 - Math.abs(x1-x2)*proportion/100;
else
newX = x1 + Math.abs(x1-x2)*proportion/100;

if (y1>=y2)
newY = y1 - Math.abs(y1-y2)*proportion/100;
else
newY = y1 + Math.abs(y1-y2)*proportion/100;

retPoint.x = newX;
retPoint.y = newY;

return retPoint;
}

You can download the source code here.

  • Share/Bookmark

No Responses to "(English) Drawing a dashed/dotted line"

Comment Form

Arhive

Mobile Barcode

qrcode

This is a 2D-barcode containing the address of my mobile site.If your mobile has a barcode reader, simply snap this bar code with the camera and launch the site.

About me

Client-focused software engineer with high intellectual mobility and experience in international teams.

Some of my interests are open innovation, design patterns, networking, personal branding, blogging and study of foreign languages.

Enjoy your visit and don’t hesitate to leave me a feedback!


Software entropy

1. A computer program that is used will be modified.

2. When a program is modified, its complexity will increase, provided that one does not actively work against this.

Switch to our mobile site