mx3d 0.0.33 → 0.0.34
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 +1 -1
- package/mx3d.min.js +1 -1
- package/package.json +1 -1
package/mx3d.js
CHANGED
|
@@ -10113,7 +10113,7 @@ class UI_UI {
|
|
|
10113
10113
|
icon.size = _size;
|
|
10114
10114
|
icon.height = _height;
|
|
10115
10115
|
icon.pint = new BABYLON.Mesh(_id + '_pint');
|
|
10116
|
-
let pos = _anchor.
|
|
10116
|
+
let pos = _anchor.visualAngle.focus.clone();
|
|
10117
10117
|
// if (_anchor[0].objectType == ObjectType.Floor) {
|
|
10118
10118
|
// pos = _anchor[0].instance.getAbsolutePivotPoint();
|
|
10119
10119
|
// }
|
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])}}}class R extends w{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==y.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==y.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==y.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==y.Corner&&t.push(s)}let e=new S(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==y.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 E(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==y.Window)e=new T(this.app);else if(a.objectType==y.Door)e=new _(this.app);else if(a.objectType!=y.Cabinet||i)if(a.objectType!=y.LeakWater||i)if(a.objectType!=y.VirtualBox||i)if(a.objectType!=y.UI3D||i)if(a.objectType!=y.Conduit||i)if(a.objectType!=y.Building||i){if(a.objectType==y.Wall)continue;if(a.objectType==y.Corner)continue;if(a.objectType==y.Floor)continue;if(i)continue;e=new w(this.app)}else e=new I(this.app);else e=new x(this.app);else e=new L(this.app);else e=new C(this.app);else e=new O(this.app);else e=new k(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 M(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!=y.ParkModel&&t.objectType!=y.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 F=i(3);class V{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=F.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 Y(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 P(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==y.Storey||c.objectType==y.ParkModel?(a=new z(this,c),this.project.objectDatas.add(a.id,a),i.add(a.id,a),s.add(a.id,new Array),c.objectType==y.ParkModel&&(this.project.root=a)):c.objectType==y.Floor&&i.add(c.id,c)}for(let e=0;e<r.scenes.length;e++){var h,l=r.scenes[e];l.objectType!=y.Storey&&l.objectType!=y.ParkModel&&((h=i.find(l.parentId)).objectType==y.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),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==y.Storey||a.objectType==y.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==y.ParkModel&&(this.project.root=r)):a.objectType==y.Floor&&s.add(a.id,a)}for(let e=0;e<i.scenes.length;e++){var c,h=i.scenes[e];h.objectType!=y.Storey&&h.objectType!=y.ParkModel&&((c=s.find(h.parentId)).objectType==y.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!=y.Wall&&l.objectType!=y.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!=y.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!=y.Wall&&e.objectType!=y.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==y.Wall||e.objectType==y.Corner)}}).then(e=>{e.downloadFiles(),t&&t()})}showTips(){this.tipsTool=new V(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){return new F.IconFromMesh(e,t.instance,i,s,n,t.app.scene)}static createIcon(e,t,i,s){let n;t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,n=new F.Icon(e,t.app.scene),n.size=i,n.height=s,n.pint=new BABYLON.Mesh(e+"_pint");e=t.instance.getAbsolutePosition();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:y,EffectMgr:void 0,EffectType:g,EventType:v,EffectControls:class{static createCapacity(e,t,i,s="200px"){return F.Builder.createCapacity(e,t,i,s)}static createMatrixHeatMap(e,t){if(e.objectType==y.Floor)return F.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 F.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])}}}class R extends w{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==y.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==y.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==y.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==y.Corner&&t.push(s)}let e=new S(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==y.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 E(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==y.Window)e=new T(this.app);else if(a.objectType==y.Door)e=new _(this.app);else if(a.objectType!=y.Cabinet||i)if(a.objectType!=y.LeakWater||i)if(a.objectType!=y.VirtualBox||i)if(a.objectType!=y.UI3D||i)if(a.objectType!=y.Conduit||i)if(a.objectType!=y.Building||i){if(a.objectType==y.Wall)continue;if(a.objectType==y.Corner)continue;if(a.objectType==y.Floor)continue;if(i)continue;e=new w(this.app)}else e=new I(this.app);else e=new x(this.app);else e=new L(this.app);else e=new C(this.app);else e=new O(this.app);else e=new k(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 M(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!=y.ParkModel&&t.objectType!=y.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 F=i(3);class V{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=F.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 Y(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 P(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==y.Storey||c.objectType==y.ParkModel?(a=new z(this,c),this.project.objectDatas.add(a.id,a),i.add(a.id,a),s.add(a.id,new Array),c.objectType==y.ParkModel&&(this.project.root=a)):c.objectType==y.Floor&&i.add(c.id,c)}for(let e=0;e<r.scenes.length;e++){var h,l=r.scenes[e];l.objectType!=y.Storey&&l.objectType!=y.ParkModel&&((h=i.find(l.parentId)).objectType==y.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),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==y.Storey||a.objectType==y.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==y.ParkModel&&(this.project.root=r)):a.objectType==y.Floor&&s.add(a.id,a)}for(let e=0;e<i.scenes.length;e++){var c,h=i.scenes[e];h.objectType!=y.Storey&&h.objectType!=y.ParkModel&&((c=s.find(h.parentId)).objectType==y.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!=y.Wall&&l.objectType!=y.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!=y.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!=y.Wall&&e.objectType!=y.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==y.Wall||e.objectType==y.Corner)}}).then(e=>{e.downloadFiles(),t&&t()})}showTips(){this.tipsTool=new V(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){return new F.IconFromMesh(e,t.instance,i,s,n,t.app.scene)}static createIcon(e,t,i,s){let n;t.app.scene.blockfreeActiveMeshesAndRenderingGroups=!0,n=new F.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:y,EffectMgr:void 0,EffectType:g,EventType:v,EffectControls:class{static createCapacity(e,t,i,s="200px"){return F.Builder.createCapacity(e,t,i,s)}static createMatrixHeatMap(e,t){if(e.objectType==y.Floor)return F.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 F.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});
|