简化更新BufferGeometry顶点的方法.

pull/192/head
ChenX 6 years ago
parent 9733fc20b9
commit 46bd32785c

@ -1019,15 +1019,9 @@ export class Polyline extends Curve
let pts = shape.getPoints(50).map(Vec2DTo3D);
let plObj = en as THREE.Line;
let geo = plObj.geometry as BufferGeometry;
if (pts.length <= geo.drawRange.count && geo.drawRange.count !== Infinity)
if (!BufferGeometryUtils.UpdatePts(geo, pts))
{
BufferGeometryUtils.UpdatePts(geo, pts);
geo.drawRange.count = pts.length;
}
else
{
geo = BufferGeometryUtils.CreateFromPts(pts);
updateGeometry(plObj, geo);
updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));
}
}
GetObjectSnapPoints(

@ -11,11 +11,23 @@ export namespace BufferGeometryUtils
return geo;
}
export function UpdatePts(geo: BufferGeometry, pts: Vector3[])
/**
* BufferGeometry
* @param geo
* @param pts
* @returns true,false
*/
export function UpdatePts(geo: BufferGeometry, pts: Vector3[]): boolean
{
let bf = geo.getAttribute("position") as BufferAttribute;
bf.copyVector3sArray(pts);
bf.needsUpdate = true;
if (bf.count >= pts.length)
{
bf.copyVector3sArray(pts);
bf.needsUpdate = true;
geo.drawRange.count = pts.length;
return true;
}
return false;
}
let arrowGeometry: ShapeGeometry;

Loading…
Cancel
Save