diff --git a/src/Add-on/DrawSpline.ts b/src/Add-on/DrawSpline.ts index 1512b49f0..ce4196f81 100644 --- a/src/Add-on/DrawSpline.ts +++ b/src/Add-on/DrawSpline.ts @@ -47,6 +47,8 @@ export class DrawSpline implements Command } else { + // 弹出预存点 + pts.pop(); break; } } diff --git a/src/DatabaseServices/Spline.ts b/src/DatabaseServices/Spline.ts index e46f2298b..0557554bf 100644 --- a/src/DatabaseServices/Spline.ts +++ b/src/DatabaseServices/Spline.ts @@ -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, vec: Vector3) + { + this.WriteAllObjectRecord(); + for (let index of indexList) + { + this.m_PointList[index].add(vec) + } + this.Update() + } + MoveStretchPoints(indexList: Array, 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())) + } }