简化更新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 pts = shape.getPoints(50).map(Vec2DTo3D);
let plObj = en as THREE.Line; let plObj = en as THREE.Line;
let geo = plObj.geometry as BufferGeometry; 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); updateGeometry(plObj, BufferGeometryUtils.CreateFromPts(pts));
geo.drawRange.count = pts.length;
}
else
{
geo = BufferGeometryUtils.CreateFromPts(pts);
updateGeometry(plObj, geo);
} }
} }
GetObjectSnapPoints( GetObjectSnapPoints(

@ -11,11 +11,23 @@ export namespace BufferGeometryUtils
return geo; 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; let bf = geo.getAttribute("position") as BufferAttribute;
bf.copyVector3sArray(pts); if (bf.count >= pts.length)
bf.needsUpdate = true; {
bf.copyVector3sArray(pts);
bf.needsUpdate = true;
geo.drawRange.count = pts.length;
return true;
}
return false;
} }
let arrowGeometry: ShapeGeometry; let arrowGeometry: ShapeGeometry;

Loading…
Cancel
Save