样条曲线添加读写,拖拽功能

pull/69/head
Zoe 6 years ago
parent 5308ff3636
commit 1f3471d64b

@ -47,6 +47,8 @@ export class DrawSpline implements Command
}
else
{
// 弹出预存点
pts.pop();
break;
}
}

@ -1,31 +1,74 @@
import * as THREE from 'three';
import { Geometry, Object3D, Vector3 } from 'three';
import { arrayLast } from '../Common/ArrayExt';
import { ColorMaterial } from '../Common/ColorPalette';
import { RenderType } from '../GraphicsSystem/Enum';
import { Factory } from './CADFactory';
import { Entity } from './Entity';
import { CADFile } from './CADFile';
import { Curve } from './Curve';
@Factory
export class Spline extends Entity
export class Spline extends Curve
{
private m_Points: Vector3[];
private m_PointList: Vector3[];
constructor(points?: Vector3[])
{
super();
this.m_Points = points || [];
this.m_PointList = points || [];
}
get Points()
{
return this.m_Points;
return this.m_PointList;
}
set Points(v: Vector3[])
{
this.WriteAllObjectRecord();
this.m_Points = v;
this.m_PointList = v;
this.Update();
}
get StartPoint()
{
return this.m_PointList[0];
}
get EndPoint()
{
return arrayLast(this.m_PointList);
}
get StartParam()
{
return 0;
}
get EndParam()
{
return this.m_PointList.length - 1;
}
GetSnapPoints()
{
return this.m_PointList
}
GetStretchPoints()
{
return this.m_PointList;
}
MoveSnapPoints(indexList: Array<number>, vec: Vector3)
{
this.WriteAllObjectRecord();
for (let index of indexList)
{
this.m_PointList[index].add(vec)
}
this.Update()
}
MoveStretchPoints(indexList: Array<number>, vec: Vector3)
{
this.WriteAllObjectRecord();
for (let index of indexList)
{
this.m_PointList[index].add(vec)
}
this.Update()
}
InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D
{
let curve = new THREE.CatmullRomCurve3(this.Points);
@ -43,4 +86,22 @@ export class Spline extends Entity
geo.verticesNeedUpdate = true;
geo.computeBoundingSphere();
}
ReadFile(file: CADFile)
{
super.ReadFile(file);
let ver = file.Read();//1
let count = file.Read();
this.m_PointList = [];
for (let i = 0; i < count; i++)
{
this.m_PointList.push(new Vector3().fromArray(file.Read()));
}
}
WriteFile(file: CADFile)
{
super.WriteFile(file);
file.Write(1);//ver
file.Write(this.m_PointList.length)
this.m_PointList.forEach(p => file.Write(p.toArray()))
}
}

Loading…
Cancel
Save