package away3dPlus.objects
{
import away3d.core.mesh.Mesh;
import away3d.core.material.ISegmentMaterial;
import away3d.core.utils.Init;
import away3d.core.mesh.WireMesh;
import away3d.core.mesh.Vertex;
import away3d.core.mesh.Segment;
import away3d.core.math.Number3D;
/** Wire curve */
public class WireCurve extends WireMesh
{
private var _vertices:Array;
override public function get vertices():Array {
return _vertices;
}
public function get lastVertex():Vertex {
var lastx:int = _vertices.length - 1;
if(lastx < 0)
return null;
return _vertices[lastx];
}
public function WireCurve(init:Object = null)
{
super(init);
init = Init.parse(init);
_vertices = [];
}
public function addVertex3D(v:Vertex):Vertex {
if(v != lastVertex) {
if(vertices.length > 1) {
addSegment(new Segment(lastVertex, v));
}
_vertices.push(v);
}
return v;
}
public function addSegmentedLine(start:Vertex, end:Vertex, segments:uint):void {
if(segments == 0)
return;
var len:int = vertices.length;
var delta:Number3D = Number3D.sub(end.position, start.position);
delta = Number3D.scale(delta, 1/segments);
addVertex3D(start);
for(var i:int = 1; i < segments; i++) {
addVertex3D(new Vertex()).position = Number3D.add(start.position, Number3D.scale(delta,i));
}
addVertex3D(end);
}
public function addWire(wire:WireCurve):void {
for(var i:int = 0; i < wire.vertices.length; i++) {
addVertex3D(wire.vertex(i));
}
}
public function vertex(ix:int):Vertex
{
return vertices[ix];
}
}
}