优化Extrude缓存几何体

pull/267/MERGE
ChenX 6 years ago
parent f569c62313
commit a0ba0b71b1

@ -5,6 +5,7 @@ interface IHostApplicationServices
{
Application?: ApplicationService;
DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;
UseShadow?: boolean;
}
export let HostApplicationServices: IHostApplicationServices = {};

@ -11,7 +11,6 @@ import { BSPGroupParse } from "../Geometry/BSPGroupParse";
import { EdgesGeometry2 } from "../Geometry/EdgeGeometry";
import { cZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, MoveMatrix } from "../Geometry/GeUtils";
import { CSG } from "../Geometry/ThreeCSG";
import { GraphicsConfig } from "../GraphicsSystem/Config";
import { RenderType } from "../GraphicsSystem/RenderType";
import { BlockTableRecord } from "./BlockTableRecord";
import { Factory } from "./CADFactory";
@ -966,25 +965,45 @@ export class ExtureSolid extends Entity
private GetObject3DByRenderType(renderType: RenderType)
{
if (renderType === RenderType.Wireframe)
return new LineSegments(new EdgesGeometry2(this.GeneralGeometry(), 2), ColorMaterial.GetLineMaterial(this.ColorIndex))
return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))
else
{
let mesh = new Mesh(this.GeneralGeometry(), this.MeshMaterial);
let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);
mesh.castShadow = true;
mesh.receiveShadow = GraphicsConfig.useShadow;
mesh.receiveShadow = HostApplicationServices.UseShadow;
return mesh;
}
}
InitDrawObject(renderType: RenderType = RenderType.Wireframe)
{
return new Object3D().add(this.GetObject3DByRenderType(renderType));
return new Object3D().add(this.GetObject3DByRenderType(renderType)).add(this.GetObject3DByRenderType(RenderType.Wireframe));
}
get UCGenerator()
{
return boardUVGenerator;
}
GeneralGeometry()
private _MeshGeometry: Geometry;
private get MeshGeometry()
{
if (this._MeshGeometry)
return this._MeshGeometry;
this._MeshGeometry = this.GeneralGeometry();
return this._MeshGeometry;
}
private _EdgeGeometry: EdgesGeometry2;
private get EdgeGeometry()
{
if (this._EdgeGeometry)
return this._EdgeGeometry;
this._EdgeGeometry = new EdgesGeometry2(this.MeshGeometry, 2);
return this._EdgeGeometry;
}
private GeneralGeometry()
{
let extrudeSettings: ExtrudeGeometryOptions = {
steps: 1,
@ -1028,6 +1047,8 @@ export class ExtureSolid extends Entity
UpdateDrawObject(type: RenderType, obj: Object3D)
{
DisposeThreeObj(obj);
this._EdgeGeometry = undefined;
this._MeshGeometry = undefined;
obj.add(this.GetObject3DByRenderType(type));
}

@ -1,4 +0,0 @@
export let GraphicsConfig = {
useShadow: false
};

@ -2,13 +2,13 @@ import { autorun, observable } from "mobx";
import { Light as TLight, Mesh, MeshPhysicalMaterial, Vector3 } from 'three';
import { end } from "xaop";
import { app } from "../../ApplicationServices/Application";
import { HostApplicationServices } from "../../ApplicationServices/HostApplicationServices";
import { Board } from "../../DatabaseServices/Board";
import { Entity } from "../../DatabaseServices/Entity";
import { AmbientLight } from "../../DatabaseServices/Lights/AmbientLight";
import { DirectionalLight } from "../../DatabaseServices/Lights/DirectionalLight";
import { HemisphereLight } from "../../DatabaseServices/Lights/HemisphereLight";
import { Light } from "../../DatabaseServices/Lights/Light";
import { GraphicsConfig } from "../../GraphicsSystem/Config";
export interface LightModalState
{
@ -116,7 +116,7 @@ export class LightStore
}
ShowShadowObject(isShow: boolean)
{
GraphicsConfig.useShadow = isShow;
HostApplicationServices.UseShadow = isShow;
app.m_Viewer.Scene.traverse(obj =>
{
if (obj.visible && obj.userData && obj.userData.Entity instanceof Board)

Loading…
Cancel
Save