mx3d 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/mx3d.js +11 -1
- package/mx3d.min.js +1 -1
- package/package.json +1 -1
package/mx3d.js
CHANGED
|
@@ -8859,8 +8859,18 @@ class ConduitObject_ConduitObject extends DefaultObject_DefaultObject {
|
|
|
8859
8859
|
this.objectType = _m.objectType;
|
|
8860
8860
|
this.isVisible = true;
|
|
8861
8861
|
this.color = _m.color;
|
|
8862
|
+
this.instance = new BABYLON.Mesh(this.id);
|
|
8862
8863
|
let pists = Tools.ToARRVector3(_m.pints);
|
|
8863
|
-
|
|
8864
|
+
let _tube = Tools.createTube(_m.id, pists, _m.radius, this.app);
|
|
8865
|
+
this.instance.position = _tube.getBoundingInfo().boundingBox.center.clone();
|
|
8866
|
+
this.instance.addChild(_tube);
|
|
8867
|
+
if (_m.rotation)
|
|
8868
|
+
this.instance.rotation = src.Tools.ToVector3(_m.rotation);
|
|
8869
|
+
if (_m.position)
|
|
8870
|
+
this.instance.position = src.Tools.ToVector3(_m.position);
|
|
8871
|
+
_tube.setParent(this.instance.parent);
|
|
8872
|
+
this.instance.dispose();
|
|
8873
|
+
this.instance = _tube;
|
|
8864
8874
|
let mat = new BABYLON.StandardMaterial(_m.id, this.app.scene);
|
|
8865
8875
|
mat.diffuseColor = BABYLON.Color3.FromHexString(_m.color);
|
|
8866
8876
|
mat.alpha = _m.alpha;
|
package/mx3d.min.js
CHANGED
|
@@ -22,4 +22,4 @@
|
|
|
22
22
|
diffuseColor = res.rgb;
|
|
23
23
|
alpha = res.a;
|
|
24
24
|
}
|
|
25
|
-
`),s.freeze()}return s}delete(e=!1){if(this.BOX&&this.BOX.dispose(),this.transparentBox&&this.transparentBox.dispose(!0,!0),this.BOX=null,this.transparentBox=null,e){for(const t in this.resources.map)this.resources.find(t).removeAllFromScene(),this.resources.remove(t);this.resources.clear()}}async GetWalls(e,t){let i=await BABYLON.SceneLoader.LoadAssetContainerAsync(e,t+".gltf",this.app.scene);if(i.meshes){var s=i.meshes[0].getChildMeshes();for(let e=0;e<s.length;e++)this.walls.add(s[e].id,s[e])}}}(s=g=g||{}).leftClick="leftClick",s.rightClick="rightClick",s.doubleClick="doubleClick",s.eover="eover",s.longPress="longPress",s.out="out",(s=y=y||{})[s.Opaque=0]="Opaque",s[s.Flash=1]="Flash",s[s.Transparent=2]="Transparent";class T{constructor(e){this.isVisible=!0,this.executes=new m,this.clickEvents=new m,this.touchtime=(new Date).getTime(),this.effectType=y.Opaque,this._isMonitor=!0,this.app=e}set isMonitor(e){this._isMonitor=e}get isMonitor(){return this._isMonitor}setEnabled(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.setEnabled(e),this.isEnabled=e,this.isEnabled?(this.instance.isPickable=0<this.executes.count(),this.executes.find(g.eover)||this.executes.find(g.out)?this.instance.enablePointerMoveEvents=!0:this.instance.enablePointerMoveEvents=!1):(this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}set showBoundingBox(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.showBoundingBox=e,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}get showBoundingBox(){return this.instance.showBoundingBox}bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.animation=e.animation,this.isAutoPlay=e.isAutoPlay,this.isloop=e.isloop,this.isMonitor=e.isMonitor,null!=e.isVisible&&(this.isVisible=e.isVisible),this.objectType=e.objectType;let t=new BABYLON.Mesh(this.id,this.app.scene),i=this.app.Resources.resources.find(this.modelId);i.meshes[0].getChildMeshes().forEach(e=>{e=e.createInstance(this.id);e.isPickable=!1,e.enablePointerMoveEvents=!1,e.parent=t}),t.rotation=H.Tools.ToVector3(e.rotation),t.position=H.Tools.ToVector3(e.position),t.scaling=H.Tools.ToVector3(e.scaling);e=H.Tools.computeBounds(t);t.setBoundingInfo(e),this.instance=this.app.Resources.BOX.clone(this.id),this.instance.id=this.id,this.instance.enablePointerMoveEvents=!1,this.instance.isPickable=!1,this.instance.scaling=new BABYLON.Vector3((e.maximum.x-e.minimum.x)*t.scaling.x,(e.maximum.y-e.minimum.y)*t.scaling.y,(e.maximum.z-e.minimum.z)*t.scaling.z),0==this.instance.scaling.y&&(this.instance.scaling.y=.01),this.instance.position=t.position.clone(),this.instance.position.y=(e.maximum.y-e.minimum.y)/2+t.position.y,this.instance.rotation=t.rotation.clone(),t.setParent(this.instance),this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView(),this.isAutoPlay&&this.play()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.focus=this.instance.getAbsolutePosition(),this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}optimization(t){this.instance.getChildMeshes().forEach(e=>{t?e.freezeWorldMatrix():e.unfreezeWorldMatrix()}),t?this.instance.freezeWorldMatrix():this.instance.unfreezeWorldMatrix(),this.instance.material&&(t?this.instance.material.freeze():this.instance.material.unfreeze())}alwaysActive(){this.instance.getChildMeshes().forEach(e=>{e.alwaysSelectAsActiveMesh=!0,e.doNotSyncBoundingInfo=!1,e.ignoreNonUniformScaling=!0}),this.instance.alwaysSelectAsActiveMesh=!0,this.instance.doNotSyncBoundingInfo=!1}addEventListener(e,t){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=null;var s;e==g.leftClick||e==g.rightClick?(this.clickEvents.remove(e),this.clickEvents.add(e,t),this.instance.isPickable=!0,i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger,e=>{let t=this.clickEvents.find(g.leftClick);t&&0==e.sourceEvent.button&&t(this,e);let i=this.clickEvents.find(g.rightClick);i&&2==e.sourceEvent.button&&i(this,e),this.touchtime=(new Date).getTime()}),e="click"):e==g.doubleClick?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnDoublePickTrigger,e=>t(this,e)):e==g.eover?(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0):e==g.longPress?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnLongPressTrigger,e=>t(this,e)):e==g.out&&(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0),i&&(this.action||(this.action=new BABYLON.ActionManager(this.app.scene),this.instance.actionManager=this.action),(s=this.executes.find(e))&&this.action.unregisterAction(s),this.executes.remove(e),this.executes.add(e,i),this.action.registerAction(i)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}removeEventListener(e){if(e==g.leftClick||e==g.rightClick||e==g.doubleClick){if(this.clickEvents.remove(e),0<this.clickEvents.count())return;e="click"}this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;var t=this.executes.find(e);t&&this.action.unregisterAction(t),this.executes.remove(e),0==this.executes.count()&&(this.action=null,this.instance.actionManager=this.action),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setFlash(t){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>{e.instancedBuffers&&(e.instancedBuffers.color=H.EffectMgr.colors[t])}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Flash)}setOpaque(){this.effectType!=y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>{e.setEnabled(!0),e.instancedBuffers&&(e.instancedBuffers.color=new BABYLON.Color4(1,1,1,1))}),this.instance.disableEdgesRendering(),this.instance.visibility=0,this.setEnabled(this.isEnabled),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Opaque)}setTransparent(e=.3){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>e.setEnabled(!1)),this.instance.visibility=e,this.instance.enableEdgesRendering(),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Transparent)}play(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(t=>{let i;t.animations.forEach(e=>{-1!=e.name.indexOf("open")&&(i=e)}),i?this.app.scene.beginDirectAnimation(t,[i],0,10*i.getKeys().length,this.isloop):t.animations.forEach(e=>this.app.scene.beginDirectAnimation(t,[e],0,10*e.getKeys().length,this.isloop))}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}stop(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(t=>{let i;t.animations.forEach(e=>{-1!=e.name.indexOf("close")&&(i=e)}),i?this.app.scene.beginDirectAnimation(t,[i],0,10*i.getKeys().length,!1):t.animations.forEach(e=>this.app.scene.beginDirectAnimation(t,[e],10*e.getKeys().length,0,!1))}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}flyTo(){this.app.camera.translation(this.visualAngle,500)}focus(){}}class _ extends T{constructor(){super(...arguments),this.baseModel=null}bind(e){this.id=r.getGUID(12),this.objectType="Wall",this.name="墙体",this.isMonitor=!1,this.instance=H.Tools.MergeMeshes(e.walls,this.app),this.instance.receiveShadows=!0,e.t&&""!=e.t?(this.modelId=e.t.modelId,this.baseModel=e.t,this.baseModel.length||(this.baseModel.length=3.1),this.nativeMaterial=this.app.Resources.GetMergeMaterial(e.t,this.app.scene)):this.nativeMaterial=null,this.instance.material=this.nativeMaterial,this.instance.id=this.id,this.instance.name=this.id,this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.instance.position.y=this.height,this.alwaysActive(),this.optimization(!0)}}class k extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.height=e.baseModel.height,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.instance=new BABYLON.Mesh(this.id,this.app.scene);let t=this.app.Resources.resources.find(this.modelId);t.meshes[0].getChildMeshes().forEach(e=>{(this.app.highQualityMode?e.clone(this.id):e.createInstance(this.id)).parent=this.instance});var i=H.Tools.computeBounds(this.instance);this.instance.rotation=H.Tools.ToVector3(e.rotation),this.instance.position=H.Tools.ToVector3(e.position),this.visualAngle=H.Tools.getVisualAngle(i,this.app);let s=this.app.Resources.BOX.createInstance(this.id);s.setBoundingInfo(i),s.enablePointerMoveEvents=!1,s.isPickable=!1,s.scaling=new BABYLON.Vector3((i.maximum.x-i.minimum.x)*this.instance.scaling.x,(i.maximum.y-i.minimum.y)*this.instance.scaling.y,(i.maximum.z-i.minimum.z)*this.instance.scaling.z),s.position=this.instance.position.clone(),s.position.y=(i.maximum.y-i.minimum.y)/2+this.instance.position.y,s.rotation=this.instance.rotation.clone(),this.instance.getChildMeshes().forEach(e=>e.setParent(s)),this.instance.dispose(),this.instance=s,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView()}}class O extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.height=e.baseModel.height,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.instance=new BABYLON.Mesh(this.id,this.app.scene);let t=this.app.Resources.resources.find(this.modelId);t.meshes[0].getChildMeshes().forEach(e=>{(this.app.highQualityMode?e.clone(this.id):e.createInstance(this.id)).parent=this.instance});var i=H.Tools.computeBounds(this.instance);this.instance.rotation=H.Tools.ToVector3(e.rotation),this.instance.position=H.Tools.ToVector3(e.position);let s=this.app.Resources.BOX.createInstance(this.id);s.setBoundingInfo(i),s.enablePointerMoveEvents=!1,s.isPickable=!1,s.scaling=new BABYLON.Vector3((i.maximum.x-i.minimum.x)*this.instance.scaling.x,(i.maximum.y-i.minimum.y)*this.instance.scaling.y,(i.maximum.z-i.minimum.z)*this.instance.scaling.z),s.position=this.instance.position.clone(),s.position.y=(i.maximum.y-i.minimum.y)/2+this.instance.position.y,s.rotation=this.instance.rotation.clone(),this.instance.getChildMeshes().forEach(e=>e.setParent(s)),this.instance.dispose(),this.instance=s,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView()}}class L extends T{}class C extends T{bind(e){this.visualAngle=new w;let t=H.Tools.ToARRVector3(e.lines);this.visualAngle.focus=t[0].clone(),this.instance=H.Tools.createTube(e.id,t,.02,this.app),this.instance.setEnabled(!1),this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.objectType=e.objectType,this.isMonitor=e.isMonitor;e=this.app.Resources.GetMaterial(e.baseModel,this.app.scene).clone(this.id);BABYLON.Animation.CreateAndStartAnimation("u",e.diffuseTexture,"vOffset",15,30,0,1,1),e.diffuseTexture.vScale=this.instance.getTotalVertices()/50,this.instance.material=e,this.alwaysActive(),this.optimization(!0),this.computeView()}computeView(){var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}addEventListener(e,t){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=null;var s;e==g.leftClick||e==g.rightClick||e==g.doubleClick?(this.clickEvents.remove(e),this.clickEvents.add(e,t),this.instance.isPickable=!0,i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger,e=>{let t=this.clickEvents.find(g.leftClick);t&&0==e.sourceEvent.button&&t(this,e);let i=this.clickEvents.find(g.rightClick);i&&2==e.sourceEvent.button&&i(this,e);let s=this.clickEvents.find(g.doubleClick);s&&0==e.sourceEvent.button&&(new Date).getTime()-this.touchtime<500&&s(this,e),this.touchtime=(new Date).getTime()}),e="click"):e==g.eover?(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0):e==g.longPress?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnLongPressTrigger,e=>t(this,e)):e==g.out&&(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0),i&&(this.action||(this.action=new BABYLON.ActionManager(this.app.scene),this.instance.actionManager=this.action),(s=this.executes.find(e))&&this.action.unregisterAction(s),this.executes.remove(e),this.executes.add(e,i),this.action.registerAction(i)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}removeEventListener(e){if(e==g.leftClick||e==g.rightClick||e==g.doubleClick){if(this.clickEvents.remove(e),0<this.clickEvents.count())return;e="click"}this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;var t=this.executes.find(e);t&&this.action.unregisterAction(t),this.executes.remove(e),0==this.executes.count()&&(this.action=null,this.instance.actionManager=this.action,this.instance.getChildMeshes().forEach(e=>e.actionManager=this.action)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}}class E extends T{async bind(t){if(this.id=t.id,this.name=t.name,this.parentId=t.parentId,this.isMonitor=t.isMonitor,this.objectType=t.objectType,this.isVisible=t.isVisible,t.virtualType&&t.isVisible){"Cylinder"==t.virtualType?this.instance=BABYLON.MeshBuilder.CreateCylinder(this.id,{height:1,diameterTop:1,diameterBottom:1},this.app.scene):this.instance=BABYLON.MeshBuilder.CreateBox(this.id,{size:1},this.app.scene),this.instance.setEnabled(!1),this.instance.id=this.id;let e=new BABYLON.StandardMaterial(this.id,this.app.scene);e.diffuseColor=BABYLON.Color3.FromHexString(t.color),t.alpha<.98&&(e.alpha=t.alpha,e.alphaMode=2,e.useAlphaFromDiffuseTexture=!0),this.instance.material=e,t.isEdges&&(this.instance.enableEdgesRendering(),this.instance.edgesWidth=1,this.instance.edgesColor=new BABYLON.Color4(0,1,1,1)),t.edgesWidth&&0<t.edgesWidth&&(this.instance.enableEdgesRendering(),this.instance.edgesWidth=t.edgesWidth,this.instance.edgesColor=BABYLON.Color3.FromHexString(t.edgesColor).toColor4(1))}else this.instance=BABYLON.Mesh.CreateBox(this.id,1,this.app.scene),this.instance.setEnabled(!1),this.instance.id=this.id;this.instance.enablePointerMoveEvents=this.isMonitor,this.instance.isPickable=this.isMonitor,this.instance.rotation=H.Tools.ToVector3(t.rotation),this.instance.position=H.Tools.ToVector3(t.position),this.instance.scaling=H.Tools.ToVector3(t.scaling),this.alwaysActive(),this.optimization(!0),this.computeView()}}class j extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.objectType=e.objectType,this.isMonitor=e.isMonitor;let t={};t.color=e.color,e.size?(t.clearColor=null,t.position=H.Tools.ToVector3(e.position),n=H.Tools.ToVector3(e.rotation),t.rotation=new BABYLON.Vector3(n.x+Math.PI,n.y,n.z),i=Number.parseInt(e.size.replace("px",""))/40,n=e.scaling?H.Tools.ToVector3(e.scaling):BABYLON.Vector3.One(),t.scaling=new BABYLON.Vector3(14*i/50*n.x,1,14*i/50*n.z)):(t.clearColor=e.clearColor,t.position=H.Tools.ToVector3(e.position),t.rotation=H.Tools.ToVector3(e.rotation),t.scaling=H.Tools.ToVector3(e.scaling));var i="bold 100px Arial";let s=new BABYLON.DynamicTexture(this.id,64,this.app.scene,!1);var n=s.getContext();n.font=i;e=n.measureText(this.name).width+8,n=.02*e;s=new BABYLON.DynamicTexture(this.id,{width:e,height:150},this.app.scene,!1);e=new BABYLON.StandardMaterial(this.id,this.app.scene);e.backFaceCulling=!1,e.diffuseTexture=s,t.clearColor||(s.hasAlpha=!0),s.drawText(this.name,null,null,i,t.color,t.clearColor,!1),this.instance=BABYLON.Mesh.CreateGround(this.id,n,3,1,this.app.scene),this.instance.setEnabled(!1),this.instance.scaling=t.scaling,this.instance.position=t.position,this.instance.rotation=t.rotation,this.instance.material=e,this.alwaysActive(),this.optimization(!0),this.computeView()}}class S extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.isVisible=!0,this.color=e.color;var t=u.ToARRVector3(e.pints);this.instance=u.createTube(e.id,t,e.radius,this.app);let i=new BABYLON.StandardMaterial(e.id,this.app.scene);i.diffuseColor=BABYLON.Color3.FromHexString(e.color),i.alpha=e.alpha,this.alpha=e.alpha,this.instance.material=i,this.instance.enablePointerMoveEvents=this.isMonitor,this.instance.isPickable=this.isMonitor,this.instance.setEnabled(!1),this.alwaysActive(),this.optimization(!0),this.computeView()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),e=H.Tools.getVisualAngle(e,this.app);this.alpha=e.alpha,this.visualAngle.beta=e.beta,this.visualAngle.focus=e.focus,this.visualAngle.radius=e.radius,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}setFlash(e=1){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.optimization(!1),this.instance.material.emissiveColor=H.EffectMgr.colors[e],this.app.Glow.addIncludedOnlyMesh(this.instance),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Flash)}setOpaque(){this.effectType!=y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.app.Glow.removeIncludedOnlyMesh(this.instance),this.optimization(!0),this.instance.material.alpha=this.alpha,this.instance.material.emissiveColor=null,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Opaque)}setTransparent(e=.3){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.app.Glow.removeIncludedOnlyMesh(this.instance),this.optimization(!1),this.instance.material.alpha=e,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Transparent)}}class I extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.objectType=e.objectType,this.isMonitor=!0,this.instance=BABYLON.MeshBuilder.CreatePolygon("地板",{shape:u.Expand(e.vectors,-.01),holes:e.buckles,sideOrientation:BABYLON.Mesh.DOUBLESIDE},this.app.scene),this.alwaysActive(),this.instance.setEnabled(!1),this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.instance.position.y=this.height,this.instance.id=e.id,this.instance.name="地板";var t=this.app.Resources.GetMaterial(e.baseModel,this.app.scene).clone(e.id),i=this.instance.getBoundingInfo();this.visualAngle=u.getVisualAngle(i,this.app),e.baseModel.isTiling&&(t.diffuseTexture.uScale=(i.maximum.x-i.minimum.x)/e.baseModel.width,t.diffuseTexture.vScale=(i.maximum.z-i.minimum.z)/e.baseModel.length),this.instance.material=t,this.optimization(!0),this.computeView()}}class N extends T{bind(e){this.id=e.id,this.parentId=e.parentId,this.objectType="Wall",this.isMonitor=!1,this.instance=this.app.Resources.walls.find(e.id),this.instance&&(this.app.scene.addMesh(this.instance),this.app.Resources.walls.remove(e.id),e.baseModel?(this.modelId=e.baseModel.modelId,this.nativeMaterial=this.app.Resources.GetMergeMaterial(e.baseModel,this.app.scene)):this.nativeMaterial=null,this.instance.material=this.nativeMaterial,this.instance.id=this.id,this.instance.name=this.id,this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView())}}class z extends T{bind(i){let e=!1;this.id=r.getGUID(12),this.name="墙角",this.isMonitor=!1,this.objectType="Corner";let s=new Array;for(let t=0;t<i.length;t++)if(2<i[t].pints.length){let e=BABYLON.MeshBuilder.CreatePolygon(this.id,{shape:i[t].pints,sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);e.setEnabled(!1),e.position.y=i[t].height,e.isPickable=!0,e.enablePointerMoveEvents=!1,s.push(e)}return s.length<1||(1<s.length?this.instance=u.MergeMeshes(s,this.app):this.instance=s[0],this.instance.id=this.id,this.instance.name=this.id,this.instance.position.y=this.height,this.instance.setEnabled(!1),this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.alwaysActive(),this.optimization(!0),e=!0),e}}class P extends T{focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=new Array;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id&&i.push(e),e.setEnabled(!1)}for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);t.objectType!=v.Wall&&t.objectType!=v.Corner&&t.objectType!=v.Floor&&t.objectType!=v.Window&&t.objectType!=v.Door||i.forEach(e=>{t.parentId==e.id&&t.setEnabled(!0)})}this.isEnabled=!0,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}restVisualAngle(){this.visualAngle=u.getVisualAngle(this.instance.getBoundingInfo(),this.app)}}class D extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.animation=!0,this.isAutoPlay=!0,this.isloop=!0,this.isVisible=!1,this.isMonitor=e.isMonitor,null!=e.isVisible&&(this.isVisible=e.isVisible),this.objectType=e.objectType;let t=new BABYLON.Mesh(this.id,this.app.scene),i=this.app.Resources.resources.find(this.modelId);i.meshes[0].getChildMeshes().forEach(e=>{e=e.createInstance(this.id);e.isPickable=!1,e.enablePointerMoveEvents=!1,e.parent=t}),t.rotation=H.Tools.ToVector3(e.rotation),t.position=H.Tools.ToVector3(e.position),t.scaling=H.Tools.ToVector3(e.scaling);e=H.Tools.computeBounds(t);t.setBoundingInfo(e),this.instance=t,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView(),this.isAutoPlay&&this.play()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.focus=this.instance.getAbsolutePosition(),this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}setFlash(e){}setTransparent(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.setEnabled(!1),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setOpaque(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.setEnabled(!0),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}play(){}stop(){}}class Y extends T{constructor(e,t){super(e),this.height=0,this.id=t.id,this.objectType=t.objectType,this.name=t.name,this.parentId=t.parentId,this.height=t.height,this.objectType==v.ParkModel&&(this.height=0),this.index=t.index}bind(n,e=0){let t=!1;for(let e=0;e<n.length;e++){var i=n[e];if(i.objectType==v.optimizedWall){t=!0;let e=new N(this.app);e.bind(i),e.instance&&this.app.project.objectDatas.add(e.id,e)}}let r=new Array;for(let t=0;t<n.length;t++){let e=n[t];e.objectType==v.Wall&&(e.height||(e.height=3.1),e.ply||(e.ply=.09),r.push(e))}let o=new m;for(let e=0;e<n.length;e++){let i=n[e];i.objectType==v.Corner&&(o.add(i.id,i.corner),2<i.pints.length&&(i.height=3.1,i.walls.forEach(t=>{r.forEach(e=>{t==e.id&&parseFloat(e.height)<i.height&&(i.height=parseFloat(e.height))})})))}if(!t){let t=new Array;for(let e=0;e<n.length;e++){var s=n[e];s.objectType==v.Corner&&t.push(s)}let e=new z(this.app);e.height=this.height,e.bind(t)?(e.parentId=this.id,this.app.project.objectDatas.add(e.id,e)):e=null}for(let i=0;i<n.length;i++){let s=n[i];if(s.objectType==v.Floor){s.vectors=new Array;let e=n[i];e.pints.forEach(e=>{o.find(e)||console.log(e),s.vectors.push(o.find(e))}),s.buckles=new Array,e.holes&&e.holes.forEach(e=>{let t=new Array;e.forEach(e=>t.push(o.find(e))),s.buckles.push(t)}),e.middles&&e.middles.forEach(t=>{let i=Array();for(let e=0;e<n.length;e++)n[e].id==t&&n[e].pints.forEach(e=>{e=o.find(e);i.push(new BABYLON.Vector3(e.x,0,e.z))});s.buckles.push(i)});let t=new I(this.app);t.height=this.height,t.bind(s),this.app.project.objectDatas.add(t.id,t)}}o=null;for(let t=0;t<n.length;t++){var a=n[t];let e;if(a.objectType==v.Window)e=new k(this.app);else if(a.objectType==v.Door)e=new O(this.app);else if(a.objectType==v.Cabinet)e=new L(this.app);else if(a.objectType==v.LeakWater)e=new C(this.app);else if(a.objectType==v.VirtualBox)e=new E(this.app);else if(a.objectType==v.UI3D)e=new j(this.app);else if(a.objectType==v.Conduit)e=new S(this.app);else if(a.objectType==v.Building)e=new P(this.app);else{if(a.objectType==v.Wall||a.objectType==v.optimizedWall)continue;if(a.objectType==v.Corner)continue;if(a.objectType==v.Floor)continue;e=new(a.objectType==v.AirFlow?D:T)(this.app)}e.bind(a),this.app.project.objectDatas.add(e.id,e)}if(!t){let o=new m;o.add("body",{t:"",walls:new Array});for(let n=0;n<r.length;n++){let s=BABYLON.MeshBuilder.ExtrudePolygon(r[n].id,{shape:[H.Tools.ToVector3(r[n].wtop),H.Tools.ToVector3(r[n].wleft),H.Tools.ToVector3(r[n].wbottom),H.Tools.ToVector3(r[n].wright)],depth:parseFloat(r[n].height),sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);s.setEnabled(!1),s.position.y=parseFloat(r[n].height),s.subMeshes=[];var c=s.getTotalVertices();s.subMeshes.push(new BABYLON.SubMesh(0,0,c,0,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,1,c,18,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,2,c,30,6,s));for(let i=0;i<r[n].wallwindows.length;i++){const d=BABYLON.CSG.FromMesh(s);let e=this.app.project.objectDatas.find(r[n].wallwindows[i]);var h=e.instance.getBoundingInfo(),l=BABYLON.MeshBuilder.CreateBox((new Date).getTime().toString(),{height:h.maximum.y-h.minimum.y,width:h.maximum.x-h.minimum.x,depth:2*parseFloat(r[n].ply)+.1},this.app.scene);l.position=e.instance.position.clone(),l.position.y=(h.maximum.y-h.minimum.y)/2+e.height,l.rotation=e.instance.rotation.clone();h=BABYLON.CSG.FromMesh(l);let t=d.subtract(h);l.dispose(),s.dispose(),s=t.toMesh(r[n].id,null,this.app.scene,!0),s.setEnabled(!1)}let t=o.find(r[n].leftMap.modelId);t||(t={t:r[n].leftMap,walls:new Array},o.add(r[n].leftMap.modelId,t));let i=o.find(r[n].rightMap.modelId);i||(i={t:r[n].rightMap,walls:new Array},o.add(r[n].rightMap.modelId,i));var p=H.Tools.DeconsTructMesh(s,parseFloat(r[n].height),this.app);for(let e=0;e<p.length;e++)(2==e||3==e?t:4==e||5==e?i:o.find("body")).walls.push(p[e])}for(const u in o.map)if(0<o.find(u).walls.length){let e=new _(this.app);e.parentId=this.id,e.height=this.height,e.bind(o.find(u)),this.app.project.objectDatas.add(e.id,e)}}r=null,this.computeView()}computeView(){this.visualAngle=new w;var e=this.getBounding(),e=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=e.alpha,this.visualAngle.beta=e.beta,this.visualAngle.focus=e.focus,this.visualAngle.radius=e.radius,this.visualAngle.focus.y=this.height}flyTo(){this.app.camera.flyTo(this.visualAngle,500)}focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id?e.setEnabled(e.isVisible):e.setEnabled(!1)}this.isEnabled=!0,(this.app.project.current=this).app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setEnabled(e){}getBounding(){var i,s;for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);if(t.objectType!=v.ParkModel&&t.objectType!=v.Storey&&t.parentId==this.id){let e=t.instance.getBoundingInfo();i&&s||(i=s=e.boundingBox.center.clone()),i=BABYLON.Vector3.Minimize(i,e.minimum.add(t.instance.position)),s=BABYLON.Vector3.Maximize(s,e.maximum.add(t.instance.position))}}return i&&s||(i=BABYLON.Vector3.Zero(),s=new BABYLON.Vector3(12,this.height,8)),new BABYLON.BoundingInfo(i,s)}dispose(){}}class R extends T{constructor(e,t){super(e),this.height=0,this.id=t.id,this.objectType=t.objectType,this.name=t.name,this.parentId=t.parentId,this.height=t.height,this.objectType==v.ParkModel&&(this.height=0),this.index=t.index}bind(n,i=!1){let o=new Array;for(let t=0;t<n.length;t++){let e=n[t];e.objectType==v.Wall&&(e.height||(e.height=3.1),e.ply||(e.ply=.09),o.push(e))}let r=new m;for(let e=0;e<n.length;e++){let i=n[e];i.objectType==v.Corner&&(r.add(i.id,i.corner),2<i.pints.length&&(i.height=3.1,i.walls.forEach(t=>{o.forEach(e=>{t==e.id&&parseFloat(e.height)<i.height&&(i.height=parseFloat(e.height))})})))}let t=new Array;for(let e=0;e<n.length;e++){var s=n[e];s.objectType==v.Corner&&t.push(s)}let e=new z(this.app);if(e.height=this.height,e.bind(t)?(e.parentId=this.id,this.app.project.objectDatas.add(e.id,e)):e=null,!i)for(let i=0;i<n.length;i++){let s=n[i];if(s.objectType==v.Floor){s.vectors=new Array;let e=n[i];e.pints.forEach(e=>{r.find(e)||console.log(e),s.vectors.push(r.find(e))}),s.buckles=new Array,e.holes&&e.holes.forEach(e=>{let t=new Array;e.forEach(e=>t.push(r.find(e))),s.buckles.push(t)}),e.middles&&e.middles.forEach(t=>{let i=Array();for(let e=0;e<n.length;e++)n[e].id==t&&n[e].pints.forEach(e=>{e=r.find(e);i.push(new BABYLON.Vector3(e.x,0,e.z))});s.buckles.push(i)});let t=new I(this.app);t.height=this.height,t.bind(s),this.app.project.objectDatas.add(t.id,t)}}r=null;for(let t=0;t<n.length;t++){var a=n[t];let e;if(a.objectType==v.Window)e=new k(this.app);else if(a.objectType==v.Door)e=new O(this.app);else if(a.objectType!=v.Cabinet||i)if(a.objectType!=v.LeakWater||i)if(a.objectType!=v.VirtualBox||i)if(a.objectType!=v.UI3D||i)if(a.objectType!=v.Conduit||i)if(a.objectType!=v.Building||i){if(a.objectType==v.Wall)continue;if(a.objectType==v.Corner)continue;if(a.objectType==v.Floor)continue;if(i)continue;e=new T(this.app)}else e=new P(this.app);else e=new S(this.app);else e=new j(this.app);else e=new E(this.app);else e=new C(this.app);else e=new L(this.app);e.bind(a),this.app.project.objectDatas.add(e.id,e)}let c=new m;c.add("body",{t:"",walls:new Array});for(let n=0;n<o.length;n++){let s=BABYLON.MeshBuilder.ExtrudePolygon(o[n].id,{shape:[H.Tools.ToVector3(o[n].wtop),H.Tools.ToVector3(o[n].wleft),H.Tools.ToVector3(o[n].wbottom),H.Tools.ToVector3(o[n].wright)],depth:parseFloat(o[n].height),sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);s.setEnabled(!1),s.position.y=parseFloat(o[n].height),s.subMeshes=[];var h=s.getTotalVertices();s.subMeshes.push(new BABYLON.SubMesh(0,0,h,0,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,1,h,18,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,2,h,30,6,s));for(let i=0;i<o[n].wallwindows.length;i++){const u=BABYLON.CSG.FromMesh(s);let e=this.app.project.objectDatas.find(o[n].wallwindows[i]);var l=e.instance.getBoundingInfo(),p=BABYLON.MeshBuilder.CreateBox((new Date).getTime().toString(),{height:l.maximum.y-l.minimum.y,width:l.maximum.x-l.minimum.x,depth:2*parseFloat(o[n].ply)+.1},this.app.scene);p.position=e.instance.position.clone(),p.position.y=(l.maximum.y-l.minimum.y)/2+e.height,p.rotation=e.instance.rotation.clone();l=BABYLON.CSG.FromMesh(p);let t=u.subtract(l);p.dispose(),s.dispose(),s=t.toMesh(o[n].id,null,this.app.scene,!0),s.setEnabled(!1)}let t=c.find(o[n].leftMap.modelId);t||(t={t:o[n].leftMap,walls:new Array},c.add(o[n].leftMap.modelId,t));let i=c.find(o[n].rightMap.modelId);i||(i={t:o[n].rightMap,walls:new Array},c.add(o[n].rightMap.modelId,i));var d=H.Tools.DeconsTructMesh(s,parseFloat(o[n].height),this.app);for(let e=0;e<d.length;e++)(2==e||3==e?t:4==e||5==e?i:c.find("body")).walls.push(d[e])}for(const f in c.map)if(0<c.find(f).walls.length){let e=new _(this.app);e.parentId=this.id,e.height=this.height,e.bind(c.find(f)),this.app.project.objectDatas.add(e.id,e)}o=null,this.restVisualAngle()}focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id?e.setEnabled(!0):e.setEnabled(!1)}this.isEnabled=!0,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setEnabled(e){}restVisualAngle(){var i,s;for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);if(t.objectType!=v.ParkModel&&t.objectType!=v.Storey&&t.parentId==this.id){let e=t.instance.getBoundingInfo();i&&s||(i=s=e.boundingBox.center.clone()),i=BABYLON.Vector3.Minimize(i,e.minimum.add(t.instance.position)),s=BABYLON.Vector3.Maximize(s,e.maximum.add(t.instance.position))}}i&&s||(i=BABYLON.Vector3.Zero(),s=new BABYLON.Vector3(12,this.height,8)),this.visualAngle=u.getVisualAngle(new BABYLON.BoundingInfo(i,s),this.app),this.visualAngle.focus.y=this.height}}var V=i(3);class F{constructor(e,t){this.isOK=!1,this.app=t,this.ele=document.createElement("div"),this.ele.style.cssText="position: absolute;z-index:999999999; font-size: 10px;color: rgb(211, 211, 211);text-shadow:rgba(0, 0, 0, 0.2) 1px 1px 0; padding: 5px 8px;",e.appendChild(this.ele),this.close(),setInterval(()=>{var e;1e3<(new Date).getTime()-this.time&&this.isOK&&!this.text&&((e=this.app.project.objectDatas.find(this.id))&&(this.text=e.name))},100)}set text(e){this._text=e,(this.ele.innerText=e)&&(this.ele.style.display=null)}update(e){e.pickInfo.pickedMesh?e.pickInfo.pickedMesh.id!=this.id?(this.close(),this.id=e.pickInfo.pickedMesh.id,this.time=(new Date).getTime()):this.isOK=!0:this.close(),this.ele.style.top=e.event.offsetY+"px",this.ele.style.left=e.event.offsetX+20+"px"}close(){this.isOK=!1,this.time=(new Date).getTime(),this.ele.style.display="none",this.text=""}setBackground(e){this.url=e,this.ele.style.background="url("+this.url+") no-repeat",this.ele.style.backgroundSize="cover"}}var i={App:class{constructor(e,t){this.index=0,this.highQualityMode=!1;e=V.SceneLoader.create(e);this.canvas=e.canvas,this.engine=e.engine,this.scene=e.scene,this.rootUrl=t||"http://models.wodashijie.com/",this.Resources=new M(this),this.camera=new o(this),this.highlightLayer=new BABYLON.HighlightLayer("highlightLayer",this.scene),this.container=BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("screenUI"),this.Environment=new f(this),this.project=new x(this),H.EffectMgr=new A,this.engine.runRenderLoop(()=>{this.fps&&(this.fps.innerText=this.engine.getFps().toFixed()+" fps"),this.scene.render(),l.a.update()}),window.addEventListener("resize",()=>{this.engine.resize()}),this.scene.onPointerObservable.add(e=>{switch(e.type){case BABYLON.PointerEventTypes.POINTERMOVE:if(!this.tipsTool)return;e.pickInfo&&e.pickInfo.pickedPoint?this.tipsTool.update(e):this.tipsTool.close();break;case BABYLON.PointerEventTypes.POINTERWHEEL:var t;this.camera.isOverLook?this.camera._wheel(e.event):(t=1e3/(this.camera.camera.radius/20),this.camera.camera.panningSensibility=2e3<t?2e3:t<10?10:t)}}),this.scene.onKeyboardObservable.add(e=>{e.type===BABYLON.KeyboardEventTypes.KEYDOWN&&70===e.event.keyCode&&prompt("请复制输入框内的视角参数",JSON.stringify({alpha:this.camera.camera.alpha,focus:u.vector3ToJson(this.camera.camera.target),radius:this.camera.camera.radius,beta:this.camera.camera.beta}))})}create(f){return this.highQualityMode=f.highQualityMode,this.highQualityMode&&(this.Glow=new BABYLON.GlowLayer("glow",this.scene),this.Glow.addIncludedOnlyMesh(this.Resources.BOX)),f.libraryUrl&&(this.Resources.resourcePath=f.libraryUrl),new Promise(async(n,t)=>{try{var o=await class{static read(s,n){return new Promise(function(e,t){let i=new XMLHttpRequest;i.open(s,n),i.onload=function(){200<=this.status&&this.status<300?e(i.response):t({status:this.status,statusText:i.statusText})},i.onerror=function(){t({status:this.status,statusText:i.statusText})},i.send()})}}.read("GET",f.fileUrl),r=JSON.parse(B.de(o));this.project.id=r.id,this.Environment.color="#7A7A7A"==r.environmentSettings.backColor?new BABYLON.Color4(0,.0588,.1176,1):new BABYLON.Color4(...BABYLON.Color3.FromHexString(r.environmentSettings.backColor).asArray(),1),this.Environment.fogDistance=r.environmentSettings.fogDensity,this.Environment.setFlexIntensity(r.environmentSettings.reflexIntensity),this.Environment.setReflexEnabled(r.environmentSettings.reflexEnabled),this.Environment.loadLight(r.environmentSettings.lights),this.scene.blockfreeActiveMeshesAndRenderingGroups=!0,r.isOptimized&&await this.Resources.GetWalls(f.fileUrl.replace(r.id+".json",""),r.id);let t=new m;for(let e=0;e<r.scenes.length;e++){const p=r.scenes[e];!p.baseModel||".gltf"!=p.baseModel.extension||t.find(p.baseModel.modelId)||this.Resources.resources.find(p.baseModel.modelId)||(p.baseModel.objectType=p.objectType,t.add(p.baseModel.modelId,p.baseModel))}let e=0;for(const d in t.map)await this.Resources.loadModelMesh(t.find(d)),e++,f.progress&&f.progress(e/t.count()*.8);e=0,t=null;let i=new m,s=new m;for(let e=0;e<r.scenes.length;e++){var a,c=r.scenes[e];c.objectType==v.Storey||c.objectType==v.ParkModel?(a=new Y(this,c),this.project.objectDatas.add(a.id,a),i.add(a.id,a),s.add(a.id,new Array),c.objectType==v.ParkModel&&(this.project.root=a)):c.objectType==v.Floor&&i.add(c.id,c)}for(let e=0;e<r.scenes.length;e++){var h,l=r.scenes[e];l.objectType!=v.Storey&&l.objectType!=v.ParkModel&&((h=i.find(l.parentId)).objectType==v.Floor?s.find(h.parentId):s.find(l.parentId)).push(l)}for(const u in s.map)await this.project.objectDatas.find(u).bind(s.find(u)),e++,f.progress&&f.progress(.8+e/r.scenes.length*.2);i=null,s=null,this.project.optimization(),this.scene.blockfreeActiveMeshesAndRenderingGroups=!1,n(null),this.engine.resize(),f.complete&&f.complete()}catch(e){t(e)}})}optimized(g){return g.libraryUrl&&(this.Resources.resourcePath=g.libraryUrl),new Promise(async(o,t)=>{try{let i=JSON.parse(B.de(g.file));this.project.id=i.id,this.Environment.color="#7A7A7A"==i.environmentSettings.backColor?new BABYLON.Color4(0,.0588,.1176,1):new BABYLON.Color4(...BABYLON.Color3.FromHexString(i.environmentSettings.backColor).asArray(),1),this.Environment.fogDistance=i.environmentSettings.fogDensity,this.Environment.setFlexIntensity(i.environmentSettings.reflexIntensity),this.Environment.setReflexEnabled(i.environmentSettings.reflexEnabled),this.Environment.loadLight(i.environmentSettings.lights),this.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let t=new m;for(let e=0;e<i.scenes.length;e++){const p=i.scenes[e];g._isOptimized&&"Window"!=p.objectType&&"Door"!=p.objectType||!p.baseModel||".gltf"!=p.baseModel.extension||t.find(p.baseModel.modelId)||this.Resources.resources.find(p.baseModel.modelId)||(p.baseModel.objectType=p.objectType,t.add(p.baseModel.modelId,p.baseModel))}let e=0;for(const d in t.map)await this.Resources.loadModelMesh(t.find(d)),e++,g.progress&&g.progress(e/t.count()*.8);e=0,t=null;let s=new m,n=new m;for(let e=0;e<i.scenes.length;e++){var r,a=i.scenes[e];a.objectType==v.Storey||a.objectType==v.ParkModel?(r=new R(this,a),this.project.objectDatas.add(r.id,r),s.add(r.id,r),n.add(r.id,new Array),a.objectType==v.ParkModel&&(this.project.root=r)):a.objectType==v.Floor&&s.add(a.id,a)}for(let e=0;e<i.scenes.length;e++){var c,h=i.scenes[e];h.objectType!=v.Storey&&h.objectType!=v.ParkModel&&((c=s.find(h.parentId)).objectType==v.Floor?n.find(c.parentId):n.find(h.parentId)).push(h)}for(const u in n.map)await this.project.objectDatas.find(u).bind(n.find(u),g._isOptimized),e++,g.progress&&g.progress(.8+e/i.scenes.length*.2);if(s=null,n=null,this.project.optimization(),this.scene.blockfreeActiveMeshesAndRenderingGroups=!1,g._isOptimized){let t=[];for(const f in this.project.objectDatas.map){var l=this.project.objectDatas.find(f);l.objectType!=v.Wall&&l.objectType!=v.Corner||t.push({id:l.id,parentId:l.parentId,objectType:"optimizedWall",baseModel:l.baseModel})}for(let e=0;e<i.scenes.length;e++)i.scenes[e].objectType!=v.Wall&&t.push(i.scenes[e]);i.isOptimized=!0,i.scenes=t}o(JSON.stringify(i)),g.complete&&g.complete()}catch(e){t(e)}})}outGltf(t){this.Resources.delete(!0);for(const i in this.project.objectDatas.map){let e=this.project.objectDatas.find(i);e.objectType!=v.Wall&&e.objectType!=v.Corner?(e.instance&&e.instance.dispose(),this.project.objectDatas.remove(i)):e.instance.material=null}return BABYLON.GLTF2Export.GLTFAsync(this.scene,this.project.id,{shouldExportNode:e=>{e=this.project.objectDatas.find(e.id);return e&&(e.objectType==v.Wall||e.objectType==v.Corner)}}).then(e=>{e.downloadFiles(),t&&t()})}showTips(){this.tipsTool=new F(this.canvas.parentElement,this)}showFps(e="position: absolute;left: 5px;bottom: 5px;z-index:999999999; font-size: 10px;color: rgb(0, 255, 0);text-shadow:rgba(0, 0, 0, 0.2) 1px 1px 0;"){this.fps||(this.fps=document.createElement("div"),this.canvas.parentElement.appendChild(this.fps)),this.fps.style.cssText=e}showMonitoringParameters(){var e=new BABYLON.EngineInstrumentation(this.engine);e.captureGPUFrameTime=!0,e.captureShaderCompilationTime=!0;let t=document.createElement("div");t.style.cssText="position: absolute;left: 5px;top: 5px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(t);let i=document.createElement("div");i.style.cssText="position: absolute;left: 5px;top: 25px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(i);let s=document.createElement("div");s.style.cssText="position: absolute;left: 5px;top: 45px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(s);let n=document.createElement("div");n.style.cssText="position: absolute;left: 5px;top: 65px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(n);let o=document.createElement("div");o.style.cssText="position: absolute;left: 5px;top: 85px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(o),this.scene.registerBeforeRender(()=>{t.innerText="current frame time (GPU): "+(1e-6*e.gpuFrameTimeCounter.current).toFixed(2)+"ms",i.innerText="average frame time (GPU): "+(1e-6*e.gpuFrameTimeCounter.average).toFixed(2)+"ms",s.innerText="total shader compilation time: "+e.shaderCompilationTimeCounter.total.toFixed(2)+"ms",n.innerText="average shader compilation time: "+e.shaderCompilationTimeCounter.average.toFixed(2)+"ms",o.innerText="compiler shaders count: "+e.shaderCompilationTimeCounter.count})}hideFps(){this.fps&&this.canvas.parentElement.removeChild(this.fps),this.fps=null}dispose(){this.fps&&this.canvas.parentElement.removeChild(this.fps),this.fps=null,this.project.delete(),this.Resources.delete(),this.engine.dispose()}showDebug(){this.scene.debugLayer.show()}},Tools:u,UI:class{static createIconFromMesh(e,t,i,s,n){let o=t.visualAngle.focus.clone();var r=t.instance.getBoundingInfo();return o.y+=(r.boundingBox.maximum.y-r.boundingBox.minimum.y)/2,new V.IconFromMesh(e,o,i,s,n,t.app.scene)}static createIcon(e,t,i,s){let n;t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,n=new V.Icon(e,t.app.scene),n.size=i,n.height=s,n.pint=new BABYLON.Mesh(e+"_pint");e=t.visualAngle.focus.clone();return n.pint.position=e,n.pint.position.y+=s,n.rect=new BABYLON.GUI.Rectangle,n.rect.isPointerBlocker=!1,n.rect.width=i.width+"px",n.rect.height=i.height+"px",n.rect.thickness=0,t.app.container.addControl(n.rect),n.rect.linkWithMesh(n.pint),t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,n}},ObjectType:v,EffectMgr:void 0,EffectType:y,EventType:g,EffectControls:class{static createCapacity(e,t,i,s="200px"){return V.Builder.createCapacity(e,t,i,s)}static createMatrixHeatMap(e,t){if(e.objectType==v.Floor)return V.Builder.createMatrixHeatMap({anchor:e.instance,rootUrl:e.app.rootUrl,FogTex:e.app.Resources.FogTex,container:e.app.container,config:t.config,displayValues:t.displayValues,height:t.height,isAlpha:t.isAlpha,isLevelRender:t.isLevelRender,isParticle:t.isParticle,radius:t.radius,range:t.range});console.error("矩阵云图对象必须为房间!")}static createColumnarHeatMap(e,t){return V.Builder.createColumnarHeatMap({anchor:e.instance,FogTex:e.app.Resources.FogTex,container:e.app.container,config:t.config,displayValues:t.displayValues,isAlpha:t.isAlpha,isLevelRender:t.isLevelRender,isParticle:t.isParticle,radius:t.radius,range:t.range})}},Dictionary:m},H=t.default=i}],p={},h.m=l,h.c=p,h.d=function(e,t,i){h.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},h.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},h.t=function(t,e){if(1&e&&(t=h(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(h.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)h.d(i,s,function(e){return t[e]}.bind(null,s));return i},h.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return h.d(t,"a",t),t},h.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},h.p="",h(h.s=44).default;function h(e){if(p[e])return p[e].exports;var t=p[e]={i:e,l:!1,exports:{}};return l[e].call(t.exports,t,t.exports,h),t.l=!0,t.exports}var l,p});
|
|
25
|
+
`),s.freeze()}return s}delete(e=!1){if(this.BOX&&this.BOX.dispose(),this.transparentBox&&this.transparentBox.dispose(!0,!0),this.BOX=null,this.transparentBox=null,e){for(const t in this.resources.map)this.resources.find(t).removeAllFromScene(),this.resources.remove(t);this.resources.clear()}}async GetWalls(e,t){let i=await BABYLON.SceneLoader.LoadAssetContainerAsync(e,t+".gltf",this.app.scene);if(i.meshes){var s=i.meshes[0].getChildMeshes();for(let e=0;e<s.length;e++)this.walls.add(s[e].id,s[e])}}}(s=g=g||{}).leftClick="leftClick",s.rightClick="rightClick",s.doubleClick="doubleClick",s.eover="eover",s.longPress="longPress",s.out="out",(s=y=y||{})[s.Opaque=0]="Opaque",s[s.Flash=1]="Flash",s[s.Transparent=2]="Transparent";class T{constructor(e){this.isVisible=!0,this.executes=new m,this.clickEvents=new m,this.touchtime=(new Date).getTime(),this.effectType=y.Opaque,this._isMonitor=!0,this.app=e}set isMonitor(e){this._isMonitor=e}get isMonitor(){return this._isMonitor}setEnabled(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.setEnabled(e),this.isEnabled=e,this.isEnabled?(this.instance.isPickable=0<this.executes.count(),this.executes.find(g.eover)||this.executes.find(g.out)?this.instance.enablePointerMoveEvents=!0:this.instance.enablePointerMoveEvents=!1):(this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}set showBoundingBox(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.showBoundingBox=e,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}get showBoundingBox(){return this.instance.showBoundingBox}bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.animation=e.animation,this.isAutoPlay=e.isAutoPlay,this.isloop=e.isloop,this.isMonitor=e.isMonitor,null!=e.isVisible&&(this.isVisible=e.isVisible),this.objectType=e.objectType;let t=new BABYLON.Mesh(this.id,this.app.scene),i=this.app.Resources.resources.find(this.modelId);i.meshes[0].getChildMeshes().forEach(e=>{e=e.createInstance(this.id);e.isPickable=!1,e.enablePointerMoveEvents=!1,e.parent=t}),t.rotation=H.Tools.ToVector3(e.rotation),t.position=H.Tools.ToVector3(e.position),t.scaling=H.Tools.ToVector3(e.scaling);e=H.Tools.computeBounds(t);t.setBoundingInfo(e),this.instance=this.app.Resources.BOX.clone(this.id),this.instance.id=this.id,this.instance.enablePointerMoveEvents=!1,this.instance.isPickable=!1,this.instance.scaling=new BABYLON.Vector3((e.maximum.x-e.minimum.x)*t.scaling.x,(e.maximum.y-e.minimum.y)*t.scaling.y,(e.maximum.z-e.minimum.z)*t.scaling.z),0==this.instance.scaling.y&&(this.instance.scaling.y=.01),this.instance.position=t.position.clone(),this.instance.position.y=(e.maximum.y-e.minimum.y)/2+t.position.y,this.instance.rotation=t.rotation.clone(),t.setParent(this.instance),this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView(),this.isAutoPlay&&this.play()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.focus=this.instance.getAbsolutePosition(),this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}optimization(t){this.instance.getChildMeshes().forEach(e=>{t?e.freezeWorldMatrix():e.unfreezeWorldMatrix()}),t?this.instance.freezeWorldMatrix():this.instance.unfreezeWorldMatrix(),this.instance.material&&(t?this.instance.material.freeze():this.instance.material.unfreeze())}alwaysActive(){this.instance.getChildMeshes().forEach(e=>{e.alwaysSelectAsActiveMesh=!0,e.doNotSyncBoundingInfo=!1,e.ignoreNonUniformScaling=!0}),this.instance.alwaysSelectAsActiveMesh=!0,this.instance.doNotSyncBoundingInfo=!1}addEventListener(e,t){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=null;var s;e==g.leftClick||e==g.rightClick?(this.clickEvents.remove(e),this.clickEvents.add(e,t),this.instance.isPickable=!0,i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger,e=>{let t=this.clickEvents.find(g.leftClick);t&&0==e.sourceEvent.button&&t(this,e);let i=this.clickEvents.find(g.rightClick);i&&2==e.sourceEvent.button&&i(this,e),this.touchtime=(new Date).getTime()}),e="click"):e==g.doubleClick?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnDoublePickTrigger,e=>t(this,e)):e==g.eover?(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0):e==g.longPress?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnLongPressTrigger,e=>t(this,e)):e==g.out&&(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0),i&&(this.action||(this.action=new BABYLON.ActionManager(this.app.scene),this.instance.actionManager=this.action),(s=this.executes.find(e))&&this.action.unregisterAction(s),this.executes.remove(e),this.executes.add(e,i),this.action.registerAction(i)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}removeEventListener(e){if(e==g.leftClick||e==g.rightClick||e==g.doubleClick){if(this.clickEvents.remove(e),0<this.clickEvents.count())return;e="click"}this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;var t=this.executes.find(e);t&&this.action.unregisterAction(t),this.executes.remove(e),0==this.executes.count()&&(this.action=null,this.instance.actionManager=this.action),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setFlash(t){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>{e.instancedBuffers&&(e.instancedBuffers.color=H.EffectMgr.colors[t])}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Flash)}setOpaque(){this.effectType!=y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>{e.setEnabled(!0),e.instancedBuffers&&(e.instancedBuffers.color=new BABYLON.Color4(1,1,1,1))}),this.instance.disableEdgesRendering(),this.instance.visibility=0,this.setEnabled(this.isEnabled),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Opaque)}setTransparent(e=.3){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(e=>e.setEnabled(!1)),this.instance.visibility=e,this.instance.enableEdgesRendering(),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Transparent)}play(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(t=>{let i;t.animations.forEach(e=>{-1!=e.name.indexOf("open")&&(i=e)}),i?this.app.scene.beginDirectAnimation(t,[i],0,10*i.getKeys().length,this.isloop):t.animations.forEach(e=>this.app.scene.beginDirectAnimation(t,[e],0,10*e.getKeys().length,this.isloop))}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}stop(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.instance.getChildMeshes().forEach(t=>{let i;t.animations.forEach(e=>{-1!=e.name.indexOf("close")&&(i=e)}),i?this.app.scene.beginDirectAnimation(t,[i],0,10*i.getKeys().length,!1):t.animations.forEach(e=>this.app.scene.beginDirectAnimation(t,[e],10*e.getKeys().length,0,!1))}),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}flyTo(){this.app.camera.translation(this.visualAngle,500)}focus(){}}class _ extends T{constructor(){super(...arguments),this.baseModel=null}bind(e){this.id=r.getGUID(12),this.objectType="Wall",this.name="墙体",this.isMonitor=!1,this.instance=H.Tools.MergeMeshes(e.walls,this.app),this.instance.receiveShadows=!0,e.t&&""!=e.t?(this.modelId=e.t.modelId,this.baseModel=e.t,this.baseModel.length||(this.baseModel.length=3.1),this.nativeMaterial=this.app.Resources.GetMergeMaterial(e.t,this.app.scene)):this.nativeMaterial=null,this.instance.material=this.nativeMaterial,this.instance.id=this.id,this.instance.name=this.id,this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.instance.position.y=this.height,this.alwaysActive(),this.optimization(!0)}}class k extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.height=e.baseModel.height,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.instance=new BABYLON.Mesh(this.id,this.app.scene);let t=this.app.Resources.resources.find(this.modelId);t.meshes[0].getChildMeshes().forEach(e=>{(this.app.highQualityMode?e.clone(this.id):e.createInstance(this.id)).parent=this.instance});var i=H.Tools.computeBounds(this.instance);this.instance.rotation=H.Tools.ToVector3(e.rotation),this.instance.position=H.Tools.ToVector3(e.position),this.visualAngle=H.Tools.getVisualAngle(i,this.app);let s=this.app.Resources.BOX.createInstance(this.id);s.setBoundingInfo(i),s.enablePointerMoveEvents=!1,s.isPickable=!1,s.scaling=new BABYLON.Vector3((i.maximum.x-i.minimum.x)*this.instance.scaling.x,(i.maximum.y-i.minimum.y)*this.instance.scaling.y,(i.maximum.z-i.minimum.z)*this.instance.scaling.z),s.position=this.instance.position.clone(),s.position.y=(i.maximum.y-i.minimum.y)/2+this.instance.position.y,s.rotation=this.instance.rotation.clone(),this.instance.getChildMeshes().forEach(e=>e.setParent(s)),this.instance.dispose(),this.instance=s,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView()}}class O extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.height=e.baseModel.height,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.instance=new BABYLON.Mesh(this.id,this.app.scene);let t=this.app.Resources.resources.find(this.modelId);t.meshes[0].getChildMeshes().forEach(e=>{(this.app.highQualityMode?e.clone(this.id):e.createInstance(this.id)).parent=this.instance});var i=H.Tools.computeBounds(this.instance);this.instance.rotation=H.Tools.ToVector3(e.rotation),this.instance.position=H.Tools.ToVector3(e.position);let s=this.app.Resources.BOX.createInstance(this.id);s.setBoundingInfo(i),s.enablePointerMoveEvents=!1,s.isPickable=!1,s.scaling=new BABYLON.Vector3((i.maximum.x-i.minimum.x)*this.instance.scaling.x,(i.maximum.y-i.minimum.y)*this.instance.scaling.y,(i.maximum.z-i.minimum.z)*this.instance.scaling.z),s.position=this.instance.position.clone(),s.position.y=(i.maximum.y-i.minimum.y)/2+this.instance.position.y,s.rotation=this.instance.rotation.clone(),this.instance.getChildMeshes().forEach(e=>e.setParent(s)),this.instance.dispose(),this.instance=s,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView()}}class L extends T{}class C extends T{bind(e){this.visualAngle=new w;let t=H.Tools.ToARRVector3(e.lines);this.visualAngle.focus=t[0].clone(),this.instance=H.Tools.createTube(e.id,t,.02,this.app),this.instance.setEnabled(!1),this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.objectType=e.objectType,this.isMonitor=e.isMonitor;e=this.app.Resources.GetMaterial(e.baseModel,this.app.scene).clone(this.id);BABYLON.Animation.CreateAndStartAnimation("u",e.diffuseTexture,"vOffset",15,30,0,1,1),e.diffuseTexture.vScale=this.instance.getTotalVertices()/50,this.instance.material=e,this.alwaysActive(),this.optimization(!0),this.computeView()}computeView(){var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}addEventListener(e,t){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=null;var s;e==g.leftClick||e==g.rightClick||e==g.doubleClick?(this.clickEvents.remove(e),this.clickEvents.add(e,t),this.instance.isPickable=!0,i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPickTrigger,e=>{let t=this.clickEvents.find(g.leftClick);t&&0==e.sourceEvent.button&&t(this,e);let i=this.clickEvents.find(g.rightClick);i&&2==e.sourceEvent.button&&i(this,e);let s=this.clickEvents.find(g.doubleClick);s&&0==e.sourceEvent.button&&(new Date).getTime()-this.touchtime<500&&s(this,e),this.touchtime=(new Date).getTime()}),e="click"):e==g.eover?(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOverTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0):e==g.longPress?i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnLongPressTrigger,e=>t(this,e)):e==g.out&&(i=new BABYLON.ExecuteCodeAction(BABYLON.ActionManager.OnPointerOutTrigger,e=>t(this,e)),this.instance.enablePointerMoveEvents=!0),i&&(this.action||(this.action=new BABYLON.ActionManager(this.app.scene),this.instance.actionManager=this.action),(s=this.executes.find(e))&&this.action.unregisterAction(s),this.executes.remove(e),this.executes.add(e,i),this.action.registerAction(i)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}removeEventListener(e){if(e==g.leftClick||e==g.rightClick||e==g.doubleClick){if(this.clickEvents.remove(e),0<this.clickEvents.count())return;e="click"}this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;var t=this.executes.find(e);t&&this.action.unregisterAction(t),this.executes.remove(e),0==this.executes.count()&&(this.action=null,this.instance.actionManager=this.action,this.instance.getChildMeshes().forEach(e=>e.actionManager=this.action)),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}}class E extends T{async bind(t){if(this.id=t.id,this.name=t.name,this.parentId=t.parentId,this.isMonitor=t.isMonitor,this.objectType=t.objectType,this.isVisible=t.isVisible,t.virtualType&&t.isVisible){"Cylinder"==t.virtualType?this.instance=BABYLON.MeshBuilder.CreateCylinder(this.id,{height:1,diameterTop:1,diameterBottom:1},this.app.scene):this.instance=BABYLON.MeshBuilder.CreateBox(this.id,{size:1},this.app.scene),this.instance.setEnabled(!1),this.instance.id=this.id;let e=new BABYLON.StandardMaterial(this.id,this.app.scene);e.diffuseColor=BABYLON.Color3.FromHexString(t.color),t.alpha<.98&&(e.alpha=t.alpha,e.alphaMode=2,e.useAlphaFromDiffuseTexture=!0),this.instance.material=e,t.isEdges&&(this.instance.enableEdgesRendering(),this.instance.edgesWidth=1,this.instance.edgesColor=new BABYLON.Color4(0,1,1,1)),t.edgesWidth&&0<t.edgesWidth&&(this.instance.enableEdgesRendering(),this.instance.edgesWidth=t.edgesWidth,this.instance.edgesColor=BABYLON.Color3.FromHexString(t.edgesColor).toColor4(1))}else this.instance=BABYLON.Mesh.CreateBox(this.id,1,this.app.scene),this.instance.setEnabled(!1),this.instance.id=this.id;this.instance.enablePointerMoveEvents=this.isMonitor,this.instance.isPickable=this.isMonitor,this.instance.rotation=H.Tools.ToVector3(t.rotation),this.instance.position=H.Tools.ToVector3(t.position),this.instance.scaling=H.Tools.ToVector3(t.scaling),this.alwaysActive(),this.optimization(!0),this.computeView()}}class j extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.objectType=e.objectType,this.isMonitor=e.isMonitor;let t={};t.color=e.color,e.size?(t.clearColor=null,t.position=H.Tools.ToVector3(e.position),n=H.Tools.ToVector3(e.rotation),t.rotation=new BABYLON.Vector3(n.x+Math.PI,n.y,n.z),i=Number.parseInt(e.size.replace("px",""))/40,n=e.scaling?H.Tools.ToVector3(e.scaling):BABYLON.Vector3.One(),t.scaling=new BABYLON.Vector3(14*i/50*n.x,1,14*i/50*n.z)):(t.clearColor=e.clearColor,t.position=H.Tools.ToVector3(e.position),t.rotation=H.Tools.ToVector3(e.rotation),t.scaling=H.Tools.ToVector3(e.scaling));var i="bold 100px Arial";let s=new BABYLON.DynamicTexture(this.id,64,this.app.scene,!1);var n=s.getContext();n.font=i;e=n.measureText(this.name).width+8,n=.02*e;s=new BABYLON.DynamicTexture(this.id,{width:e,height:150},this.app.scene,!1);e=new BABYLON.StandardMaterial(this.id,this.app.scene);e.backFaceCulling=!1,e.diffuseTexture=s,t.clearColor||(s.hasAlpha=!0),s.drawText(this.name,null,null,i,t.color,t.clearColor,!1),this.instance=BABYLON.Mesh.CreateGround(this.id,n,3,1,this.app.scene),this.instance.setEnabled(!1),this.instance.scaling=t.scaling,this.instance.position=t.position,this.instance.rotation=t.rotation,this.instance.material=e,this.alwaysActive(),this.optimization(!0),this.computeView()}}class S extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.isMonitor=e.isMonitor,this.objectType=e.objectType,this.isVisible=!0,this.color=e.color,this.instance=new BABYLON.Mesh(this.id);var t=u.ToARRVector3(e.pints);let i=u.createTube(e.id,t,e.radius,this.app);this.instance.position=i.getBoundingInfo().boundingBox.center.clone(),this.instance.addChild(i),e.rotation&&(this.instance.rotation=H.Tools.ToVector3(e.rotation)),e.position&&(this.instance.position=H.Tools.ToVector3(e.position)),i.setParent(this.instance.parent),this.instance.dispose(),this.instance=i;let s=new BABYLON.StandardMaterial(e.id,this.app.scene);s.diffuseColor=BABYLON.Color3.FromHexString(e.color),s.alpha=e.alpha,this.alpha=e.alpha,this.instance.material=s,this.instance.enablePointerMoveEvents=this.isMonitor,this.instance.isPickable=this.isMonitor,this.instance.setEnabled(!1),this.alwaysActive(),this.optimization(!0),this.computeView()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),e=H.Tools.getVisualAngle(e,this.app);this.alpha=e.alpha,this.visualAngle.beta=e.beta,this.visualAngle.focus=e.focus,this.visualAngle.radius=e.radius,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}setFlash(e=1){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.optimization(!1),this.instance.material.emissiveColor=H.EffectMgr.colors[e],this.app.Glow.addIncludedOnlyMesh(this.instance),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Flash)}setOpaque(){this.effectType!=y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.app.Glow.removeIncludedOnlyMesh(this.instance),this.optimization(!0),this.instance.material.alpha=this.alpha,this.instance.material.emissiveColor=null,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Opaque)}setTransparent(e=.3){this.effectType==y.Opaque&&(this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.app.Glow.removeIncludedOnlyMesh(this.instance),this.optimization(!1),this.instance.material.alpha=e,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,this.effectType=y.Transparent)}}class I extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.objectType=e.objectType,this.isMonitor=!0,this.instance=BABYLON.MeshBuilder.CreatePolygon("地板",{shape:u.Expand(e.vectors,-.01),holes:e.buckles,sideOrientation:BABYLON.Mesh.DOUBLESIDE},this.app.scene),this.alwaysActive(),this.instance.setEnabled(!1),this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.instance.position.y=this.height,this.instance.id=e.id,this.instance.name="地板";var t=this.app.Resources.GetMaterial(e.baseModel,this.app.scene).clone(e.id),i=this.instance.getBoundingInfo();this.visualAngle=u.getVisualAngle(i,this.app),e.baseModel.isTiling&&(t.diffuseTexture.uScale=(i.maximum.x-i.minimum.x)/e.baseModel.width,t.diffuseTexture.vScale=(i.maximum.z-i.minimum.z)/e.baseModel.length),this.instance.material=t,this.optimization(!0),this.computeView()}}class N extends T{bind(e){this.id=e.id,this.parentId=e.parentId,this.objectType="Wall",this.isMonitor=!1,this.instance=this.app.Resources.walls.find(e.id),this.instance&&(this.app.scene.addMesh(this.instance),this.app.Resources.walls.remove(e.id),e.baseModel?(this.modelId=e.baseModel.modelId,this.nativeMaterial=this.app.Resources.GetMergeMaterial(e.baseModel,this.app.scene)):this.nativeMaterial=null,this.instance.material=this.nativeMaterial,this.instance.id=this.id,this.instance.name=this.id,this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView())}}class z extends T{bind(i){let e=!1;this.id=r.getGUID(12),this.name="墙角",this.isMonitor=!1,this.objectType="Corner";let s=new Array;for(let t=0;t<i.length;t++)if(2<i[t].pints.length){let e=BABYLON.MeshBuilder.CreatePolygon(this.id,{shape:i[t].pints,sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);e.setEnabled(!1),e.position.y=i[t].height,e.isPickable=!0,e.enablePointerMoveEvents=!1,s.push(e)}return s.length<1||(1<s.length?this.instance=u.MergeMeshes(s,this.app):this.instance=s[0],this.instance.id=this.id,this.instance.name=this.id,this.instance.position.y=this.height,this.instance.setEnabled(!1),this.instance.isPickable=!1,this.instance.enablePointerMoveEvents=!1,this.alwaysActive(),this.optimization(!0),e=!0),e}}class P extends T{focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let i=new Array;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id&&i.push(e),e.setEnabled(!1)}for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);t.objectType!=v.Wall&&t.objectType!=v.Corner&&t.objectType!=v.Floor&&t.objectType!=v.Window&&t.objectType!=v.Door||i.forEach(e=>{t.parentId==e.id&&t.setEnabled(!0)})}this.isEnabled=!0,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}restVisualAngle(){this.visualAngle=u.getVisualAngle(this.instance.getBoundingInfo(),this.app)}}class D extends T{bind(e){this.id=e.id,this.name=e.name,this.parentId=e.parentId,this.modelId=e.baseModel.modelId,this.animation=!0,this.isAutoPlay=!0,this.isloop=!0,this.isVisible=!1,this.isMonitor=e.isMonitor,null!=e.isVisible&&(this.isVisible=e.isVisible),this.objectType=e.objectType;let t=new BABYLON.Mesh(this.id,this.app.scene),i=this.app.Resources.resources.find(this.modelId);i.meshes[0].getChildMeshes().forEach(e=>{e=e.createInstance(this.id);e.isPickable=!1,e.enablePointerMoveEvents=!1,e.parent=t}),t.rotation=H.Tools.ToVector3(e.rotation),t.position=H.Tools.ToVector3(e.position),t.scaling=H.Tools.ToVector3(e.scaling);e=H.Tools.computeBounds(t);t.setBoundingInfo(e),this.instance=t,this.alwaysActive(),this.optimization(!0),this.instance.setEnabled(!1),this.computeView(),this.isAutoPlay&&this.play()}computeView(){this.visualAngle=new w;var e=this.instance.getBoundingInfo(),t=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=t.alpha,this.visualAngle.beta=t.beta,this.visualAngle.focus=this.instance.getAbsolutePosition(),this.visualAngle.radius=e.boundingSphere.radiusWorld+3,this.visualAngle.minimumLimit=.3,this.visualAngle.maximumLimit=2*this.visualAngle.radius,this.visualAngle.minBeta=.01,this.visualAngle.maxBeta=Math.PI/2*.98}setFlash(e){}setTransparent(e){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.setEnabled(!1),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setOpaque(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,this.setEnabled(!0),this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}play(){}stop(){}}class Y extends T{constructor(e,t){super(e),this.height=0,this.id=t.id,this.objectType=t.objectType,this.name=t.name,this.parentId=t.parentId,this.height=t.height,this.objectType==v.ParkModel&&(this.height=0),this.index=t.index}bind(n,e=0){let t=!1;for(let e=0;e<n.length;e++){var i=n[e];if(i.objectType==v.optimizedWall){t=!0;let e=new N(this.app);e.bind(i),e.instance&&this.app.project.objectDatas.add(e.id,e)}}let r=new Array;for(let t=0;t<n.length;t++){let e=n[t];e.objectType==v.Wall&&(e.height||(e.height=3.1),e.ply||(e.ply=.09),r.push(e))}let o=new m;for(let e=0;e<n.length;e++){let i=n[e];i.objectType==v.Corner&&(o.add(i.id,i.corner),2<i.pints.length&&(i.height=3.1,i.walls.forEach(t=>{r.forEach(e=>{t==e.id&&parseFloat(e.height)<i.height&&(i.height=parseFloat(e.height))})})))}if(!t){let t=new Array;for(let e=0;e<n.length;e++){var s=n[e];s.objectType==v.Corner&&t.push(s)}let e=new z(this.app);e.height=this.height,e.bind(t)?(e.parentId=this.id,this.app.project.objectDatas.add(e.id,e)):e=null}for(let i=0;i<n.length;i++){let s=n[i];if(s.objectType==v.Floor){s.vectors=new Array;let e=n[i];e.pints.forEach(e=>{o.find(e)||console.log(e),s.vectors.push(o.find(e))}),s.buckles=new Array,e.holes&&e.holes.forEach(e=>{let t=new Array;e.forEach(e=>t.push(o.find(e))),s.buckles.push(t)}),e.middles&&e.middles.forEach(t=>{let i=Array();for(let e=0;e<n.length;e++)n[e].id==t&&n[e].pints.forEach(e=>{e=o.find(e);i.push(new BABYLON.Vector3(e.x,0,e.z))});s.buckles.push(i)});let t=new I(this.app);t.height=this.height,t.bind(s),this.app.project.objectDatas.add(t.id,t)}}o=null;for(let t=0;t<n.length;t++){var a=n[t];let e;if(a.objectType==v.Window)e=new k(this.app);else if(a.objectType==v.Door)e=new O(this.app);else if(a.objectType==v.Cabinet)e=new L(this.app);else if(a.objectType==v.LeakWater)e=new C(this.app);else if(a.objectType==v.VirtualBox)e=new E(this.app);else if(a.objectType==v.UI3D)e=new j(this.app);else if(a.objectType==v.Conduit)e=new S(this.app);else if(a.objectType==v.Building)e=new P(this.app);else{if(a.objectType==v.Wall||a.objectType==v.optimizedWall)continue;if(a.objectType==v.Corner)continue;if(a.objectType==v.Floor)continue;e=new(a.objectType==v.AirFlow?D:T)(this.app)}e.bind(a),this.app.project.objectDatas.add(e.id,e)}if(!t){let o=new m;o.add("body",{t:"",walls:new Array});for(let n=0;n<r.length;n++){let s=BABYLON.MeshBuilder.ExtrudePolygon(r[n].id,{shape:[H.Tools.ToVector3(r[n].wtop),H.Tools.ToVector3(r[n].wleft),H.Tools.ToVector3(r[n].wbottom),H.Tools.ToVector3(r[n].wright)],depth:parseFloat(r[n].height),sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);s.setEnabled(!1),s.position.y=parseFloat(r[n].height),s.subMeshes=[];var c=s.getTotalVertices();s.subMeshes.push(new BABYLON.SubMesh(0,0,c,0,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,1,c,18,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,2,c,30,6,s));for(let i=0;i<r[n].wallwindows.length;i++){const d=BABYLON.CSG.FromMesh(s);let e=this.app.project.objectDatas.find(r[n].wallwindows[i]);var h=e.instance.getBoundingInfo(),l=BABYLON.MeshBuilder.CreateBox((new Date).getTime().toString(),{height:h.maximum.y-h.minimum.y,width:h.maximum.x-h.minimum.x,depth:2*parseFloat(r[n].ply)+.1},this.app.scene);l.position=e.instance.position.clone(),l.position.y=(h.maximum.y-h.minimum.y)/2+e.height,l.rotation=e.instance.rotation.clone();h=BABYLON.CSG.FromMesh(l);let t=d.subtract(h);l.dispose(),s.dispose(),s=t.toMesh(r[n].id,null,this.app.scene,!0),s.setEnabled(!1)}let t=o.find(r[n].leftMap.modelId);t||(t={t:r[n].leftMap,walls:new Array},o.add(r[n].leftMap.modelId,t));let i=o.find(r[n].rightMap.modelId);i||(i={t:r[n].rightMap,walls:new Array},o.add(r[n].rightMap.modelId,i));var p=H.Tools.DeconsTructMesh(s,parseFloat(r[n].height),this.app);for(let e=0;e<p.length;e++)(2==e||3==e?t:4==e||5==e?i:o.find("body")).walls.push(p[e])}for(const u in o.map)if(0<o.find(u).walls.length){let e=new _(this.app);e.parentId=this.id,e.height=this.height,e.bind(o.find(u)),this.app.project.objectDatas.add(e.id,e)}}r=null,this.computeView()}computeView(){this.visualAngle=new w;var e=this.getBounding(),e=H.Tools.getVisualAngle(e,this.app);this.visualAngle.alpha=e.alpha,this.visualAngle.beta=e.beta,this.visualAngle.focus=e.focus,this.visualAngle.radius=e.radius,this.visualAngle.focus.y=this.height}flyTo(){this.app.camera.flyTo(this.visualAngle,500)}focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id?e.setEnabled(e.isVisible):e.setEnabled(!1)}this.isEnabled=!0,(this.app.project.current=this).app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setEnabled(e){}getBounding(){var i,s;for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);if(t.objectType!=v.ParkModel&&t.objectType!=v.Storey&&t.parentId==this.id){let e=t.instance.getBoundingInfo();i&&s||(i=s=e.boundingBox.center.clone()),i=BABYLON.Vector3.Minimize(i,e.minimum.add(t.instance.position)),s=BABYLON.Vector3.Maximize(s,e.maximum.add(t.instance.position))}}return i&&s||(i=BABYLON.Vector3.Zero(),s=new BABYLON.Vector3(12,this.height,8)),new BABYLON.BoundingInfo(i,s)}dispose(){}}class R extends T{constructor(e,t){super(e),this.height=0,this.id=t.id,this.objectType=t.objectType,this.name=t.name,this.parentId=t.parentId,this.height=t.height,this.objectType==v.ParkModel&&(this.height=0),this.index=t.index}bind(n,i=!1){let o=new Array;for(let t=0;t<n.length;t++){let e=n[t];e.objectType==v.Wall&&(e.height||(e.height=3.1),e.ply||(e.ply=.09),o.push(e))}let r=new m;for(let e=0;e<n.length;e++){let i=n[e];i.objectType==v.Corner&&(r.add(i.id,i.corner),2<i.pints.length&&(i.height=3.1,i.walls.forEach(t=>{o.forEach(e=>{t==e.id&&parseFloat(e.height)<i.height&&(i.height=parseFloat(e.height))})})))}let t=new Array;for(let e=0;e<n.length;e++){var s=n[e];s.objectType==v.Corner&&t.push(s)}let e=new z(this.app);if(e.height=this.height,e.bind(t)?(e.parentId=this.id,this.app.project.objectDatas.add(e.id,e)):e=null,!i)for(let i=0;i<n.length;i++){let s=n[i];if(s.objectType==v.Floor){s.vectors=new Array;let e=n[i];e.pints.forEach(e=>{r.find(e)||console.log(e),s.vectors.push(r.find(e))}),s.buckles=new Array,e.holes&&e.holes.forEach(e=>{let t=new Array;e.forEach(e=>t.push(r.find(e))),s.buckles.push(t)}),e.middles&&e.middles.forEach(t=>{let i=Array();for(let e=0;e<n.length;e++)n[e].id==t&&n[e].pints.forEach(e=>{e=r.find(e);i.push(new BABYLON.Vector3(e.x,0,e.z))});s.buckles.push(i)});let t=new I(this.app);t.height=this.height,t.bind(s),this.app.project.objectDatas.add(t.id,t)}}r=null;for(let t=0;t<n.length;t++){var a=n[t];let e;if(a.objectType==v.Window)e=new k(this.app);else if(a.objectType==v.Door)e=new O(this.app);else if(a.objectType!=v.Cabinet||i)if(a.objectType!=v.LeakWater||i)if(a.objectType!=v.VirtualBox||i)if(a.objectType!=v.UI3D||i)if(a.objectType!=v.Conduit||i)if(a.objectType!=v.Building||i){if(a.objectType==v.Wall)continue;if(a.objectType==v.Corner)continue;if(a.objectType==v.Floor)continue;if(i)continue;e=new T(this.app)}else e=new P(this.app);else e=new S(this.app);else e=new j(this.app);else e=new E(this.app);else e=new C(this.app);else e=new L(this.app);e.bind(a),this.app.project.objectDatas.add(e.id,e)}let c=new m;c.add("body",{t:"",walls:new Array});for(let n=0;n<o.length;n++){let s=BABYLON.MeshBuilder.ExtrudePolygon(o[n].id,{shape:[H.Tools.ToVector3(o[n].wtop),H.Tools.ToVector3(o[n].wleft),H.Tools.ToVector3(o[n].wbottom),H.Tools.ToVector3(o[n].wright)],depth:parseFloat(o[n].height),sideOrientation:BABYLON.Mesh.FRONTSIDE},this.app.scene);s.setEnabled(!1),s.position.y=parseFloat(o[n].height),s.subMeshes=[];var h=s.getTotalVertices();s.subMeshes.push(new BABYLON.SubMesh(0,0,h,0,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,1,h,18,6,s)),s.subMeshes.push(new BABYLON.SubMesh(0,2,h,30,6,s));for(let i=0;i<o[n].wallwindows.length;i++){const u=BABYLON.CSG.FromMesh(s);let e=this.app.project.objectDatas.find(o[n].wallwindows[i]);var l=e.instance.getBoundingInfo(),p=BABYLON.MeshBuilder.CreateBox((new Date).getTime().toString(),{height:l.maximum.y-l.minimum.y,width:l.maximum.x-l.minimum.x,depth:2*parseFloat(o[n].ply)+.1},this.app.scene);p.position=e.instance.position.clone(),p.position.y=(l.maximum.y-l.minimum.y)/2+e.height,p.rotation=e.instance.rotation.clone();l=BABYLON.CSG.FromMesh(p);let t=u.subtract(l);p.dispose(),s.dispose(),s=t.toMesh(o[n].id,null,this.app.scene,!0),s.setEnabled(!1)}let t=c.find(o[n].leftMap.modelId);t||(t={t:o[n].leftMap,walls:new Array},c.add(o[n].leftMap.modelId,t));let i=c.find(o[n].rightMap.modelId);i||(i={t:o[n].rightMap,walls:new Array},c.add(o[n].rightMap.modelId,i));var d=H.Tools.DeconsTructMesh(s,parseFloat(o[n].height),this.app);for(let e=0;e<d.length;e++)(2==e||3==e?t:4==e||5==e?i:c.find("body")).walls.push(d[e])}for(const f in c.map)if(0<c.find(f).walls.length){let e=new _(this.app);e.parentId=this.id,e.height=this.height,e.bind(c.find(f)),this.app.project.objectDatas.add(e.id,e)}o=null,this.restVisualAngle()}focus(){this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0;for(const t in this.app.project.objectDatas.map){let e=this.app.project.objectDatas.find(t);e.parentId==this.id?e.setEnabled(!0):e.setEnabled(!1)}this.isEnabled=!0,this.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1}setEnabled(e){}restVisualAngle(){var i,s;for(const e in this.app.project.objectDatas.map){let t=this.app.project.objectDatas.find(e);if(t.objectType!=v.ParkModel&&t.objectType!=v.Storey&&t.parentId==this.id){let e=t.instance.getBoundingInfo();i&&s||(i=s=e.boundingBox.center.clone()),i=BABYLON.Vector3.Minimize(i,e.minimum.add(t.instance.position)),s=BABYLON.Vector3.Maximize(s,e.maximum.add(t.instance.position))}}i&&s||(i=BABYLON.Vector3.Zero(),s=new BABYLON.Vector3(12,this.height,8)),this.visualAngle=u.getVisualAngle(new BABYLON.BoundingInfo(i,s),this.app),this.visualAngle.focus.y=this.height}}var V=i(3);class F{constructor(e,t){this.isOK=!1,this.app=t,this.ele=document.createElement("div"),this.ele.style.cssText="position: absolute;z-index:999999999; font-size: 10px;color: rgb(211, 211, 211);text-shadow:rgba(0, 0, 0, 0.2) 1px 1px 0; padding: 5px 8px;",e.appendChild(this.ele),this.close(),setInterval(()=>{var e;1e3<(new Date).getTime()-this.time&&this.isOK&&!this.text&&((e=this.app.project.objectDatas.find(this.id))&&(this.text=e.name))},100)}set text(e){this._text=e,(this.ele.innerText=e)&&(this.ele.style.display=null)}update(e){e.pickInfo.pickedMesh?e.pickInfo.pickedMesh.id!=this.id?(this.close(),this.id=e.pickInfo.pickedMesh.id,this.time=(new Date).getTime()):this.isOK=!0:this.close(),this.ele.style.top=e.event.offsetY+"px",this.ele.style.left=e.event.offsetX+20+"px"}close(){this.isOK=!1,this.time=(new Date).getTime(),this.ele.style.display="none",this.text=""}setBackground(e){this.url=e,this.ele.style.background="url("+this.url+") no-repeat",this.ele.style.backgroundSize="cover"}}var i={App:class{constructor(e,t){this.index=0,this.highQualityMode=!1;e=V.SceneLoader.create(e);this.canvas=e.canvas,this.engine=e.engine,this.scene=e.scene,this.rootUrl=t||"http://models.wodashijie.com/",this.Resources=new M(this),this.camera=new o(this),this.highlightLayer=new BABYLON.HighlightLayer("highlightLayer",this.scene),this.container=BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("screenUI"),this.Environment=new f(this),this.project=new x(this),H.EffectMgr=new A,this.engine.runRenderLoop(()=>{this.fps&&(this.fps.innerText=this.engine.getFps().toFixed()+" fps"),this.scene.render(),l.a.update()}),window.addEventListener("resize",()=>{this.engine.resize()}),this.scene.onPointerObservable.add(e=>{switch(e.type){case BABYLON.PointerEventTypes.POINTERMOVE:if(!this.tipsTool)return;e.pickInfo&&e.pickInfo.pickedPoint?this.tipsTool.update(e):this.tipsTool.close();break;case BABYLON.PointerEventTypes.POINTERWHEEL:var t;this.camera.isOverLook?this.camera._wheel(e.event):(t=1e3/(this.camera.camera.radius/20),this.camera.camera.panningSensibility=2e3<t?2e3:t<10?10:t)}}),this.scene.onKeyboardObservable.add(e=>{e.type===BABYLON.KeyboardEventTypes.KEYDOWN&&70===e.event.keyCode&&prompt("请复制输入框内的视角参数",JSON.stringify({alpha:this.camera.camera.alpha,focus:u.vector3ToJson(this.camera.camera.target),radius:this.camera.camera.radius,beta:this.camera.camera.beta}))})}create(f){return this.highQualityMode=f.highQualityMode,this.highQualityMode&&(this.Glow=new BABYLON.GlowLayer("glow",this.scene),this.Glow.addIncludedOnlyMesh(this.Resources.BOX)),f.libraryUrl&&(this.Resources.resourcePath=f.libraryUrl),new Promise(async(n,t)=>{try{var o=await class{static read(s,n){return new Promise(function(e,t){let i=new XMLHttpRequest;i.open(s,n),i.onload=function(){200<=this.status&&this.status<300?e(i.response):t({status:this.status,statusText:i.statusText})},i.onerror=function(){t({status:this.status,statusText:i.statusText})},i.send()})}}.read("GET",f.fileUrl),r=JSON.parse(B.de(o));this.project.id=r.id,this.Environment.color="#7A7A7A"==r.environmentSettings.backColor?new BABYLON.Color4(0,.0588,.1176,1):new BABYLON.Color4(...BABYLON.Color3.FromHexString(r.environmentSettings.backColor).asArray(),1),this.Environment.fogDistance=r.environmentSettings.fogDensity,this.Environment.setFlexIntensity(r.environmentSettings.reflexIntensity),this.Environment.setReflexEnabled(r.environmentSettings.reflexEnabled),this.Environment.loadLight(r.environmentSettings.lights),this.scene.blockfreeActiveMeshesAndRenderingGroups=!0,r.isOptimized&&await this.Resources.GetWalls(f.fileUrl.replace(r.id+".json",""),r.id);let t=new m;for(let e=0;e<r.scenes.length;e++){const p=r.scenes[e];!p.baseModel||".gltf"!=p.baseModel.extension||t.find(p.baseModel.modelId)||this.Resources.resources.find(p.baseModel.modelId)||(p.baseModel.objectType=p.objectType,t.add(p.baseModel.modelId,p.baseModel))}let e=0;for(const d in t.map)await this.Resources.loadModelMesh(t.find(d)),e++,f.progress&&f.progress(e/t.count()*.8);e=0,t=null;let i=new m,s=new m;for(let e=0;e<r.scenes.length;e++){var a,c=r.scenes[e];c.objectType==v.Storey||c.objectType==v.ParkModel?(a=new Y(this,c),this.project.objectDatas.add(a.id,a),i.add(a.id,a),s.add(a.id,new Array),c.objectType==v.ParkModel&&(this.project.root=a)):c.objectType==v.Floor&&i.add(c.id,c)}for(let e=0;e<r.scenes.length;e++){var h,l=r.scenes[e];l.objectType!=v.Storey&&l.objectType!=v.ParkModel&&((h=i.find(l.parentId)).objectType==v.Floor?s.find(h.parentId):s.find(l.parentId)).push(l)}for(const u in s.map)await this.project.objectDatas.find(u).bind(s.find(u)),e++,f.progress&&f.progress(.8+e/r.scenes.length*.2);i=null,s=null,this.project.optimization(),this.scene.blockfreeActiveMeshesAndRenderingGroups=!1,n(null),this.engine.resize(),f.complete&&f.complete()}catch(e){t(e)}})}optimized(g){return g.libraryUrl&&(this.Resources.resourcePath=g.libraryUrl),new Promise(async(o,t)=>{try{let i=JSON.parse(B.de(g.file));this.project.id=i.id,this.Environment.color="#7A7A7A"==i.environmentSettings.backColor?new BABYLON.Color4(0,.0588,.1176,1):new BABYLON.Color4(...BABYLON.Color3.FromHexString(i.environmentSettings.backColor).asArray(),1),this.Environment.fogDistance=i.environmentSettings.fogDensity,this.Environment.setFlexIntensity(i.environmentSettings.reflexIntensity),this.Environment.setReflexEnabled(i.environmentSettings.reflexEnabled),this.Environment.loadLight(i.environmentSettings.lights),this.scene.blockfreeActiveMeshesAndRenderingGroups=!0;let t=new m;for(let e=0;e<i.scenes.length;e++){const p=i.scenes[e];g._isOptimized&&"Window"!=p.objectType&&"Door"!=p.objectType||!p.baseModel||".gltf"!=p.baseModel.extension||t.find(p.baseModel.modelId)||this.Resources.resources.find(p.baseModel.modelId)||(p.baseModel.objectType=p.objectType,t.add(p.baseModel.modelId,p.baseModel))}let e=0;for(const d in t.map)await this.Resources.loadModelMesh(t.find(d)),e++,g.progress&&g.progress(e/t.count()*.8);e=0,t=null;let s=new m,n=new m;for(let e=0;e<i.scenes.length;e++){var r,a=i.scenes[e];a.objectType==v.Storey||a.objectType==v.ParkModel?(r=new R(this,a),this.project.objectDatas.add(r.id,r),s.add(r.id,r),n.add(r.id,new Array),a.objectType==v.ParkModel&&(this.project.root=r)):a.objectType==v.Floor&&s.add(a.id,a)}for(let e=0;e<i.scenes.length;e++){var c,h=i.scenes[e];h.objectType!=v.Storey&&h.objectType!=v.ParkModel&&((c=s.find(h.parentId)).objectType==v.Floor?n.find(c.parentId):n.find(h.parentId)).push(h)}for(const u in n.map)await this.project.objectDatas.find(u).bind(n.find(u),g._isOptimized),e++,g.progress&&g.progress(.8+e/i.scenes.length*.2);if(s=null,n=null,this.project.optimization(),this.scene.blockfreeActiveMeshesAndRenderingGroups=!1,g._isOptimized){let t=[];for(const f in this.project.objectDatas.map){var l=this.project.objectDatas.find(f);l.objectType!=v.Wall&&l.objectType!=v.Corner||t.push({id:l.id,parentId:l.parentId,objectType:"optimizedWall",baseModel:l.baseModel})}for(let e=0;e<i.scenes.length;e++)i.scenes[e].objectType!=v.Wall&&t.push(i.scenes[e]);i.isOptimized=!0,i.scenes=t}o(JSON.stringify(i)),g.complete&&g.complete()}catch(e){t(e)}})}outGltf(t){this.Resources.delete(!0);for(const i in this.project.objectDatas.map){let e=this.project.objectDatas.find(i);e.objectType!=v.Wall&&e.objectType!=v.Corner?(e.instance&&e.instance.dispose(),this.project.objectDatas.remove(i)):e.instance.material=null}return BABYLON.GLTF2Export.GLTFAsync(this.scene,this.project.id,{shouldExportNode:e=>{e=this.project.objectDatas.find(e.id);return e&&(e.objectType==v.Wall||e.objectType==v.Corner)}}).then(e=>{e.downloadFiles(),t&&t()})}showTips(){this.tipsTool=new F(this.canvas.parentElement,this)}showFps(e="position: absolute;left: 5px;bottom: 5px;z-index:999999999; font-size: 10px;color: rgb(0, 255, 0);text-shadow:rgba(0, 0, 0, 0.2) 1px 1px 0;"){this.fps||(this.fps=document.createElement("div"),this.canvas.parentElement.appendChild(this.fps)),this.fps.style.cssText=e}showMonitoringParameters(){var e=new BABYLON.EngineInstrumentation(this.engine);e.captureGPUFrameTime=!0,e.captureShaderCompilationTime=!0;let t=document.createElement("div");t.style.cssText="position: absolute;left: 5px;top: 5px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(t);let i=document.createElement("div");i.style.cssText="position: absolute;left: 5px;top: 25px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(i);let s=document.createElement("div");s.style.cssText="position: absolute;left: 5px;top: 45px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(s);let n=document.createElement("div");n.style.cssText="position: absolute;left: 5px;top: 65px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(n);let o=document.createElement("div");o.style.cssText="position: absolute;left: 5px;top: 85px;z-index:999999999;font-size: 10px;color: rgb(0, 255, 0);",this.canvas.parentElement.appendChild(o),this.scene.registerBeforeRender(()=>{t.innerText="current frame time (GPU): "+(1e-6*e.gpuFrameTimeCounter.current).toFixed(2)+"ms",i.innerText="average frame time (GPU): "+(1e-6*e.gpuFrameTimeCounter.average).toFixed(2)+"ms",s.innerText="total shader compilation time: "+e.shaderCompilationTimeCounter.total.toFixed(2)+"ms",n.innerText="average shader compilation time: "+e.shaderCompilationTimeCounter.average.toFixed(2)+"ms",o.innerText="compiler shaders count: "+e.shaderCompilationTimeCounter.count})}hideFps(){this.fps&&this.canvas.parentElement.removeChild(this.fps),this.fps=null}dispose(){this.fps&&this.canvas.parentElement.removeChild(this.fps),this.fps=null,this.project.delete(),this.Resources.delete(),this.engine.dispose()}showDebug(){this.scene.debugLayer.show()}},Tools:u,UI:class{static createIconFromMesh(e,t,i,s,n){let o=t.visualAngle.focus.clone();var r=t.instance.getBoundingInfo();return o.y+=(r.boundingBox.maximum.y-r.boundingBox.minimum.y)/2,new V.IconFromMesh(e,o,i,s,n,t.app.scene)}static createIcon(e,t,i,s){let n;t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,n=new V.Icon(e,t.app.scene),n.size=i,n.height=s,n.pint=new BABYLON.Mesh(e+"_pint");e=t.visualAngle.focus.clone();return n.pint.position=e,n.pint.position.y+=s,n.rect=new BABYLON.GUI.Rectangle,n.rect.isPointerBlocker=!1,n.rect.width=i.width+"px",n.rect.height=i.height+"px",n.rect.thickness=0,t.app.container.addControl(n.rect),n.rect.linkWithMesh(n.pint),t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!1,n}},ObjectType:v,EffectMgr:void 0,EffectType:y,EventType:g,EffectControls:class{static createCapacity(e,t,i,s="200px"){return V.Builder.createCapacity(e,t,i,s)}static createMatrixHeatMap(e,t){if(e.objectType==v.Floor)return V.Builder.createMatrixHeatMap({anchor:e.instance,rootUrl:e.app.rootUrl,FogTex:e.app.Resources.FogTex,container:e.app.container,config:t.config,displayValues:t.displayValues,height:t.height,isAlpha:t.isAlpha,isLevelRender:t.isLevelRender,isParticle:t.isParticle,radius:t.radius,range:t.range});console.error("矩阵云图对象必须为房间!")}static createColumnarHeatMap(e,t){return V.Builder.createColumnarHeatMap({anchor:e.instance,FogTex:e.app.Resources.FogTex,container:e.app.container,config:t.config,displayValues:t.displayValues,isAlpha:t.isAlpha,isLevelRender:t.isLevelRender,isParticle:t.isParticle,radius:t.radius,range:t.range})}},Dictionary:m},H=t.default=i}],p={},h.m=l,h.c=p,h.d=function(e,t,i){h.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},h.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},h.t=function(t,e){if(1&e&&(t=h(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(h.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)h.d(i,s,function(e){return t[e]}.bind(null,s));return i},h.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return h.d(t,"a",t),t},h.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},h.p="",h(h.s=44).default;function h(e){if(p[e])return p[e].exports;var t=p[e]={i:e,l:!1,exports:{}};return l[e].call(t.exports,t,t.exports,h),t.l=!0,t.exports}var l,p});
|