fix #IWO9R 修正顶线实体的显示效果错误

pull/299/MERGE
ChenX 5 years ago
parent 8886e8e9d0
commit 05f5713250

@ -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;
}
}
/**

@ -161,6 +161,7 @@ export class Entity extends CADObject
else
{
let drawObj = this.InitDrawObject(renderType);
if (drawObj === undefined) return;
//矩阵直接使用指针,因为已经关闭自动更新,所以矩阵不会被Object3D修改.
drawObj.matrixAutoUpdate = false;

Loading…
Cancel
Save