|
|
@ -1,31 +1,74 @@
|
|
|
|
import * as THREE from 'three';
|
|
|
|
import * as THREE from 'three';
|
|
|
|
import { Geometry, Object3D, Vector3 } from 'three';
|
|
|
|
import { Geometry, Object3D, Vector3 } from 'three';
|
|
|
|
|
|
|
|
import { arrayLast } from '../Common/ArrayExt';
|
|
|
|
import { ColorMaterial } from '../Common/ColorPalette';
|
|
|
|
import { ColorMaterial } from '../Common/ColorPalette';
|
|
|
|
import { RenderType } from '../GraphicsSystem/Enum';
|
|
|
|
import { RenderType } from '../GraphicsSystem/Enum';
|
|
|
|
import { Factory } from './CADFactory';
|
|
|
|
import { Factory } from './CADFactory';
|
|
|
|
import { Entity } from './Entity';
|
|
|
|
import { CADFile } from './CADFile';
|
|
|
|
|
|
|
|
import { Curve } from './Curve';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Factory
|
|
|
|
@Factory
|
|
|
|
export class Spline extends Entity
|
|
|
|
export class Spline extends Curve
|
|
|
|
{
|
|
|
|
{
|
|
|
|
private m_Points: Vector3[];
|
|
|
|
private m_PointList: Vector3[];
|
|
|
|
constructor(points?: Vector3[])
|
|
|
|
constructor(points?: Vector3[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
super();
|
|
|
|
super();
|
|
|
|
this.m_Points = points || [];
|
|
|
|
this.m_PointList = points || [];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
get Points()
|
|
|
|
get Points()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return this.m_Points;
|
|
|
|
return this.m_PointList;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
set Points(v: Vector3[])
|
|
|
|
set Points(v: Vector3[])
|
|
|
|
{
|
|
|
|
{
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
this.WriteAllObjectRecord();
|
|
|
|
this.m_Points = v;
|
|
|
|
this.m_PointList = v;
|
|
|
|
this.Update();
|
|
|
|
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
|
|
|
|
InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D
|
|
|
|
{
|
|
|
|
{
|
|
|
|
let curve = new THREE.CatmullRomCurve3(this.Points);
|
|
|
|
let curve = new THREE.CatmullRomCurve3(this.Points);
|
|
|
@ -43,4 +86,22 @@ export class Spline extends Entity
|
|
|
|
geo.verticesNeedUpdate = true;
|
|
|
|
geo.verticesNeedUpdate = true;
|
|
|
|
geo.computeBoundingSphere();
|
|
|
|
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()))
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|