|
|
|
@ -1,5 +1,7 @@
|
|
|
|
|
import * as THREE from 'three';
|
|
|
|
|
import { Matrix4, Mesh, MeshNormalMaterial, Object3D, Vector3, LineSegments } from "three";
|
|
|
|
|
import { LineSegments, Matrix4, Mesh, Object3D, Vector3 } from "three";
|
|
|
|
|
import { ColorMaterial } from '../../Common/ColorPalette';
|
|
|
|
|
import { DisposeThreeObj } from '../../Common/Dispose';
|
|
|
|
|
import { EdgesGeometry } from '../../Geometry/EdgeGeometry';
|
|
|
|
|
import { equalv3, isParallelTo, MoveMatrix } from '../../Geometry/GeUtils';
|
|
|
|
|
import { SweepGeometry } from '../../Geometry/SweepGeometry';
|
|
|
|
|
import { RenderType } from "../../GraphicsSystem/RenderType";
|
|
|
|
@ -10,9 +12,6 @@ import { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';
|
|
|
|
|
import { IsPointInPolyLine } from '../PointInPolyline';
|
|
|
|
|
import { Polyline } from '../Polyline';
|
|
|
|
|
import { Solid3D } from "./Solid3D";
|
|
|
|
|
import { EdgesGeometry } from '../../Geometry/EdgeGeometry';
|
|
|
|
|
import { ColorMaterial } from '../../Common/ColorPalette';
|
|
|
|
|
import { DisposeThreeObj } from '../../Common/Dispose';
|
|
|
|
|
|
|
|
|
|
@Factory
|
|
|
|
|
export class SweepSolid extends Solid3D
|
|
|
|
@ -101,37 +100,68 @@ export class SweepSolid extends Solid3D
|
|
|
|
|
console.log("提供的轮廓没有和路径垂直");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateGeomtry()
|
|
|
|
|
private _MeshGeometry: SweepGeometry;
|
|
|
|
|
private get MeshGeometry()
|
|
|
|
|
{
|
|
|
|
|
if (this._MeshGeometry)
|
|
|
|
|
return this._MeshGeometry;
|
|
|
|
|
|
|
|
|
|
let swpGeo = new SweepGeometry(this.m_Contour, this.m_PathCurve);
|
|
|
|
|
swpGeo.applyMatrix(this.m_Contour.OCS);
|
|
|
|
|
return new SweepGeometry(this.m_Contour, this.m_PathCurve);
|
|
|
|
|
this._MeshGeometry = new SweepGeometry(this.m_Contour, this.m_PathCurve);
|
|
|
|
|
|
|
|
|
|
return this._MeshGeometry;
|
|
|
|
|
}
|
|
|
|
|
private GetObject3DByRenderType(renderType: RenderType)
|
|
|
|
|
|
|
|
|
|
private _EdgeGeometry: EdgesGeometry;
|
|
|
|
|
private get EdgeGeometry()
|
|
|
|
|
{
|
|
|
|
|
if (renderType === RenderType.Wireframe)
|
|
|
|
|
{
|
|
|
|
|
let geo = new EdgesGeometry().fromGeometry(this.CreateGeomtry());
|
|
|
|
|
return new LineSegments(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (this.materialId && this.materialId.Object)
|
|
|
|
|
{
|
|
|
|
|
let material = this.materialId.Object as PhysicalMaterialRecord;
|
|
|
|
|
return new Mesh(this.CreateGeomtry(), material.Material);
|
|
|
|
|
}
|
|
|
|
|
else return new THREE.Mesh(this.CreateGeomtry(), new MeshNormalMaterial());
|
|
|
|
|
}
|
|
|
|
|
if (this._EdgeGeometry)
|
|
|
|
|
return this._EdgeGeometry;
|
|
|
|
|
|
|
|
|
|
this._EdgeGeometry = new EdgesGeometry().FromGeometry(this.MeshGeometry);
|
|
|
|
|
return this._EdgeGeometry;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
InitDrawObject(renderType: RenderType): Object3D
|
|
|
|
|
{
|
|
|
|
|
return new Object3D().add(this.GetObject3DByRenderType(renderType));
|
|
|
|
|
if (renderType === RenderType.Wireframe)
|
|
|
|
|
return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));
|
|
|
|
|
else if (renderType === RenderType.Conceptual)
|
|
|
|
|
{
|
|
|
|
|
return new Object3D().add(
|
|
|
|
|
new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),
|
|
|
|
|
new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
if (renderType === RenderType.Physical)
|
|
|
|
|
return new Mesh(this.MeshGeometry, this.MeshMaterial);
|
|
|
|
|
}
|
|
|
|
|
UpdateDrawObject(type: RenderType, en: Object3D)
|
|
|
|
|
UpdateDrawObject(renderType: RenderType, obj: Object3D)
|
|
|
|
|
{
|
|
|
|
|
DisposeThreeObj(en);
|
|
|
|
|
en.add(this.GetObject3DByRenderType(type));
|
|
|
|
|
DisposeThreeObj(obj);
|
|
|
|
|
this._EdgeGeometry = undefined;
|
|
|
|
|
this._MeshGeometry = undefined;
|
|
|
|
|
|
|
|
|
|
if (renderType === RenderType.Wireframe)
|
|
|
|
|
{
|
|
|
|
|
let l = obj as LineSegments;
|
|
|
|
|
l.geometry = this.EdgeGeometry;
|
|
|
|
|
l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);
|
|
|
|
|
}
|
|
|
|
|
else if (renderType === RenderType.Conceptual)
|
|
|
|
|
{
|
|
|
|
|
return obj.add(
|
|
|
|
|
new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)),
|
|
|
|
|
new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
else if (renderType === RenderType.Physical)
|
|
|
|
|
{
|
|
|
|
|
let mesh = obj as Mesh;
|
|
|
|
|
mesh.geometry = this.MeshGeometry;
|
|
|
|
|
mesh.material = this.MeshMaterial;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|