From 1f3471d64b714c51be1c0b56e43f8ec3203ad989 Mon Sep 17 00:00:00 2001 From: Zoe Date: Wed, 16 May 2018 10:28:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E6=9D=A1=E6=9B=B2=E7=BA=BF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=AF=BB=E5=86=99=EF=BC=8C=E6=8B=96=E6=8B=BD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/DrawSpline.ts | 2 + src/DatabaseServices/Spline.ts | 75 ++++++++++++++++++++++++++++++---- 2 files changed, 70 insertions(+), 7 deletions(-) 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())) + } }