package com.lafabrick.uigfx.utils
{
import flash.display.Graphics;
import flash.geom.Point;
/**
* Utils for drawing primitives
*
* <p>Original drawing method (drawRoundPath) by <b>Philippe Elsass</b></p>
*
* @author Philippe Elsass
* @see http://philippe.elsass.me
*/
public class UigfxUtils
{
/**
* Draw a path, using a Vector of Point
*
* @author Philippe Elsass
* @see http://philippe.elsass.me/2009/05/as3-rounding-corners/
*/
static public function drawRoundPath(g:Graphics, points:Vector.<Point>, radius:Number = 20, closePath:Boolean = false):void
{
var count:int = points.length;
if (count < 2) return;
if (closePath && count < 3) return;
var p0:Point = points[0];
var p1:Point = points[1];
var p2:Point;
var pp0:Point;
var pp2:Point;
var last:Point;
if (!closePath)
{
g.moveTo(p0.x, p0.y);
last = points[count - 1];
}
var n:int = (closePath) ? count + 1 : count - 1;
for (var i:int = 1; i < n; i++)
{
p2 = points[(i + 1) % count];
var v0:Point = p0.subtract(p1);
var v2:Point = p2.subtract(p1);
var r:Number = Math.max(1, Math.min(radius, Math.min(v0.length / 2, v2.length / 2)));
v0.normalize(r);
v2.normalize(r);
pp0 = p1.add(v0);
pp2 = p1.add(v2);
if (i == 1 && closePath)
{
g.moveTo(pp0.x, pp0.y);
last = pp0;
}
else g.lineTo(pp0.x, pp0.y);
g.curveTo(p1.x, p1.y, pp2.x, pp2.y);
p0 = p1;
p1 = p2;
}
g.lineTo(last.x, last.y);
}
}
}