iflow-engine-base 3.9.18 → 3.9.21
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/README.md +118 -0
- package/dist/bim-engine-sdk.es.js +7 -7
- package/dist/bim-engine-sdk.umd.js +697 -697
- package/dist/chunks/{engine-2d-Di06Ry30.js → engine-2d-DAiE1uAy.js} +98 -85
- package/dist/chunks/{engine-3d-Dp-2o5Fl.js → engine-3d-CdsLfd0i.js} +1228 -1216
- package/dist/chunks/{engine-720-Co-3Kqdv.js → engine-720-K9uF9wMA.js} +40 -26
- package/dist/chunks/{engine-gaussian-8fZrDPJR.js → engine-gaussian-x3jsCp15.js} +141 -126
- package/dist/chunks/{engine-gis-DlbR-2fG.js → engine-gis-BStgPU0Q.js} +778 -578
- package/dist/chunks/{sdk-assets-F7qFhuao.js → sdk-assets-1SXx8Tbf.js} +1 -1
- package/dist/chunks/{sdk-runtime-gCd6dMmU.js → sdk-runtime-cY1Wn7o-.js} +1554 -1350
- package/dist/index.d.ts +74 -1
- package/dist2d/dwg-preview.es.js +1075 -859
- package/dist2d/dwg-preview.umd.js +17 -17
- package/distGaussian/gaussian.es.js +396 -75
- package/distGaussian/gaussian.umd.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(a,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("three"),require("@mkkellogg/gaussian-splats-3d")):typeof define=="function"&&define.amd?define(["exports","three","@mkkellogg/gaussian-splats-3d"],l):(a=typeof globalThis<"u"?globalThis:a||self,l(a.Gaussian={},a.THREE,a.GaussianSplats3D))})(this,(function(a,l,m){"use strict";function c(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>r[t]})}}return e.default=r,Object.freeze(e)}const d=c(l),h=c(m);var o=(r=>(r.LoadStart="gaussian-load-start",r.LoadProgress="gaussian-load-progress",r.Loaded="gaussian-loaded",r.LoadError="gaussian-load-error",r.SceneRemoved="gaussian-scene-removed",r.FpsUpdated="gaussian-fps-updated",r.ViewChanged="gaussian-view-changed",r))(o||{});class f{listeners=new Map;on(e,t){const i=String(e);this.listeners.has(i)||this.listeners.set(i,[]),this.listeners.get(i).push(t)}off(e,t){const i=String(e),n=this.listeners.get(i);if(!n)return;const s=n.indexOf(t);s!==-1&&n.splice(s,1),n.length===0&&this.listeners.delete(i)}trigger(e,t){const i=this.listeners.get(String(e));!i||i.length===0||[...i].forEach(n=>{try{n(t)}catch(s){console.error(`[EventModuleGaussian] event handler failed: ${e}`,s)}})}clear(){this.listeners.clear()}dispose(){this.clear()}}class g{scene;constructor(e){this.scene=new d.Scene,e&&(this.scene.background=new d.Color(e))}getScene(){return this.scene}setBackgroundColor(e){this.scene.background=e==null?null:new d.Color(e)}dispose(){this.scene.clear(),this.scene.background=null,this.scene.environment=null}}class p{camera;container;cameraUp;initialLookAt;constructor(e,t,i,n){this.container=e,this.cameraUp=t,this.initialLookAt=n,this.camera=this.createCamera(i)}createCamera(e){const t=Math.max(this.container.clientWidth,1),i=Math.max(this.container.clientHeight,1),n=new d.PerspectiveCamera(65,t/i,.1,5e3);return n.position.fromArray(e),n.up.fromArray(this.cameraUp).normalize(),n.lookAt(new d.Vector3().fromArray(this.initialLookAt)),n.updateProjectionMatrix(),n}getCamera(){return this.camera}updateAspectRatio(e,t){this.camera.aspect=Math.max(e,1)/Math.max(t,1),this.camera.updateProjectionMatrix()}reset(e,t){e&&this.camera.position.fromArray(e),this.camera.lookAt(new d.Vector3().fromArray(t??this.initialLookAt)),this.camera.updateMatrixWorld(!0)}dispose(){this.camera=null}}class M{renderer;viewer;container;animationId=null;isRenderingPaused=!0;fpsFrameCount=0;fpsLastTime=performance.now();fpsInfo={fps:0,frameTimeMs:0,minFps:0};onBeforeRenderCallback;onAfterRenderCallback;onFpsUpdatedCallback;constructor(e,t,i,n){this.container=e,this.renderer=this.createRenderer(n.antialias),this.viewer=new h.Viewer({selfDrivenMode:!1,renderer:this.renderer,camera:i,threeScene:t,rootElement:e,useBuiltInControls:!0,cameraUp:n.cameraUp,initialCameraPosition:n.initialCameraPosition,initialCameraLookAt:n.initialCameraLookAt,sharedMemoryForWorkers:n.sharedMemoryForWorkers,gpuAcceleratedSort:n.gpuAcceleratedSort,sphericalHarmonicsDegree:n.sphericalHarmonicsDegree,...n.viewerOptions??{}})}createRenderer(e){const t=new d.WebGLRenderer({antialias:e,alpha:!0,preserveDrawingBuffer:!1});return t.setSize(Math.max(this.container.clientWidth,1),Math.max(this.container.clientHeight,1)),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.container.appendChild(t.domElement),t}setOnBeforeRender(e){this.onBeforeRenderCallback=e}setOnAfterRender(e){this.onAfterRenderCallback=e}setOnFpsUpdated(e){this.onFpsUpdatedCallback=e}startRenderLoop(){this.animationId===null&&(this.isRenderingPaused=!1,this.animate())}animate(){if(this.isRenderingPaused){this.animationId=null;return}this.animationId=requestAnimationFrame(()=>this.animate()),this.render()}render(){this.onBeforeRenderCallback?.(),this.viewer.update(this.renderer),this.viewer.render(),this.onAfterRenderCallback?.(),this.updateFps()}updateFps(){this.fpsFrameCount++;const e=performance.now(),t=e-this.fpsLastTime;if(t<1e3)return;const i=Math.round(this.fpsFrameCount*1e3/t);this.fpsInfo={fps:i,frameTimeMs:i>0?1e3/i:0,minFps:this.fpsInfo.minFps===0?i:Math.min(this.fpsInfo.minFps,i)},this.fpsFrameCount=0,this.fpsLastTime=e,this.onFpsUpdatedCallback?.({...this.fpsInfo})}resetFpsStats(){this.fpsInfo={fps:0,frameTimeMs:0,minFps:0},this.fpsFrameCount=0,this.fpsLastTime=performance.now()}pauseRendering(){this.isRenderingPaused=!0,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null)}resumeRendering(){this.isRenderingPaused&&this.startRenderLoop()}isRenderingPausedState(){return this.isRenderingPaused}resize(e,t){this.renderer.setSize(Math.max(e,1),Math.max(t,1)),this.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2))}getViewer(){return this.viewer}getRenderer(){return this.renderer}getDomElement(){return this.renderer.domElement}getFpsInfo(){return{...this.fpsInfo}}async dispose(){this.pauseRendering(),await this.viewer.dispose(),this.container.contains(this.renderer.domElement)&&this.container.removeChild(this.renderer.domElement),this.renderer.dispose(),this.renderer.forceContextLoss()}}const w={identity:[0,0,0,1],"x-90":[-.7071068,0,0,.7071068],x90:[.7071068,0,0,.7071068],x180:[1,0,0,0],"y-90":[0,-.7071068,0,.7071068],y90:[0,.7071068,0,.7071068],"z-90":[0,0,-.7071068,.7071068],z90:[0,0,.7071068,.7071068],z180:[0,0,1,0]};class v{orientationPreset;constructor(e="x180"){this.orientationPreset=e}setOrientationPreset(e){this.orientationPreset=e}getOrientationPreset(){return this.orientationPreset}getOrientationRotation(){return[...w[this.orientationPreset]]}active(){}disActive(){}update(){}dispose(){}}function R(r,e){return`${r}#${e}`}class k{viewer;getDefaultRotation;scenes=new Map;constructor(e,t){this.viewer=e,this.getDefaultRotation=t}async loadModel(e,t={}){const i=this.viewer.getSceneCount(),n={showLoadingUI:!0,progressiveLoad:!1,position:[0,0,0],rotation:this.getDefaultRotation(),scale:[1,1,1],...t};await this.viewer.addSplatScene(e,n);const s={id:n.id??R(e,i),name:n.name??e.split(/[\\/]/).pop()??e,url:e,index:i,options:n};return this.scenes.set(s.id,s),s}async loadModels(e){const t=[];for(const i of e)t.push(await this.loadModel(i.url,i.options));return t}async unloadModel(e,t=!0){const i=this.scenes.get(e);i&&(await this.viewer.removeSplatScene(i.index,t),this.scenes.delete(e),this.reindexScenesAfterRemove(i.index))}getModel(e){return this.scenes.get(e)}getAllModels(){return Array.from(this.scenes.values())}getRawSplatScene(e){const t=typeof e=="number"?e:this.scenes.get(e)?.index;return t==null?void 0:this.viewer.getSplatScene(t)}async clear(e=!1){const t=this.getAllModels().map(i=>i.index);t.length>0&&await this.viewer.removeSplatScenes(t,e),this.scenes.clear()}reindexScenesAfterRemove(e){this.scenes.forEach(t=>{t.index>e&&(t.index-=1)})}}const I={version:"3.9.16"}.version;class u{eventModule;sceneModule;cameraModule;renderModule;controlModule;loaderModule;isInitialized=!1;version=I;constructor(e){this.initialize(e)}initialize(e){const t={containerId:e.containerId,cameraUp:e.cameraUp??[0,1,0],initialCameraPosition:e.initialCameraPosition??[0,0,6],initialCameraLookAt:e.initialCameraLookAt??[0,0,0],backgroundColor:e.backgroundColor,antialias:e.antialias??!1,showLoadingUI:e.showLoadingUI??!0,sharedMemoryForWorkers:e.sharedMemoryForWorkers??!1,gpuAcceleratedSort:e.gpuAcceleratedSort??!1,sphericalHarmonicsDegree:e.sphericalHarmonicsDegree??0,orientationPreset:e.orientationPreset??"x180",viewerOptions:e.viewerOptions},i=document.getElementById(t.containerId);if(!i)throw new Error(`Container with id "${t.containerId}" not found`);this.eventModule=new f,this.sceneModule=new g(t.backgroundColor),this.cameraModule=new p(i,t.cameraUp,t.initialCameraPosition,t.initialCameraLookAt),this.controlModule=new v(t.orientationPreset),this.renderModule=new M(i,this.sceneModule.getScene(),this.cameraModule.getCamera(),t),this.loaderModule=new k(this.renderModule.getViewer(),()=>this.controlModule.getOrientationRotation()),this.renderModule.setOnBeforeRender(()=>{this.controlModule.update()}),this.renderModule.setOnFpsUpdated(n=>{this.eventModule.trigger(o.FpsUpdated,n)}),this.renderModule.startRenderLoop(),this.isInitialized=!0}async loadModel(e,t={}){this.checkInitialized(),this.eventModule.trigger(o.LoadStart,{url:e,name:t.name});try{const i=await this.loaderModule.loadModel(e,{showLoadingUI:!0,...t,onProgress:(n,s,C)=>{this.eventModule.trigger(o.LoadProgress,{url:e,name:t.name,progress:n}),t.onProgress?.(n,s,C)}});return this.eventModule.trigger(o.Loaded,{url:e,name:i.name,progress:100}),i}catch(i){throw this.eventModule.trigger(o.LoadError,{url:e,name:t.name,error:i instanceof Error?i:new Error(String(i))}),i}}async unloadModel(e){this.checkInitialized(),await this.loaderModule.unloadModel(e,!1),this.eventModule.trigger(o.SceneRemoved,{id:e})}setOrientationPreset(e){this.checkInitialized(),this.controlModule.setOrientationPreset(e)}getOrientationPreset(){return this.checkInitialized(),this.controlModule.getOrientationPreset()}resize(e,t){this.checkInitialized();const i=this.renderModule.getDomElement(),n=e??i.parentElement?.clientWidth??i.clientWidth,s=t??i.parentElement?.clientHeight??i.clientHeight;this.renderModule.resize(n,s),this.cameraModule.updateAspectRatio(n,s)}pauseRendering(){this.checkInitialized(),this.renderModule.pauseRendering()}resumeRendering(){this.checkInitialized(),this.renderModule.resumeRendering()}resetFpsStats(){this.checkInitialized(),this.renderModule.resetFpsStats()}getFpsInfo(){return this.checkInitialized(),this.renderModule.getFpsInfo()}on(e,t){this.checkInitialized(),this.eventModule.on(e,t)}off(e,t){this.checkInitialized(),this.eventModule.off(e,t)}getVersion(){return this.version}async dispose(){this.isInitialized&&(await this.loaderModule.clear(!1),await this.renderModule.dispose(),this.controlModule.dispose(),this.cameraModule.dispose(),this.sceneModule.dispose(),this.eventModule.dispose(),this.isInitialized=!1)}checkInitialized(){if(!this.isInitialized)throw new Error("EngineKernelGaussian: Not initialized")}}function S(r){return new u(r)}a.GaussianSplats3D=h,a.EngineKernelGaussian=u,a.EventTypeGaussian=o,a.createEngineGaussian=S,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(o,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("three"),require("@mkkellogg/gaussian-splats-3d")):typeof define=="function"&&define.amd?define(["exports","three","@mkkellogg/gaussian-splats-3d"],u):(o=typeof globalThis<"u"?globalThis:o||self,u(o.Gaussian={},o.THREE,o.GaussianSplats3D))})(this,(function(o,u,b){"use strict";function T(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const d=T(u),I=T(b);var l=(n=>(n.LoadStart="gaussian-load-start",n.LoadProgress="gaussian-load-progress",n.Loaded="gaussian-loaded",n.LoadError="gaussian-load-error",n.SceneRemoved="gaussian-scene-removed",n.FpsUpdated="gaussian-fps-updated",n.ViewChanged="gaussian-view-changed",n))(l||{});class P{listeners=new Map;on(e,t){const i=String(e);this.listeners.has(i)||this.listeners.set(i,[]),this.listeners.get(i).push(t)}off(e,t){const i=String(e),s=this.listeners.get(i);if(!s)return;const r=s.indexOf(t);r!==-1&&s.splice(r,1),s.length===0&&this.listeners.delete(i)}trigger(e,t){const i=this.listeners.get(String(e));!i||i.length===0||[...i].forEach(s=>{try{s(t)}catch(r){console.error(`[EventModuleGaussian] event handler failed: ${e}`,r)}})}clear(){this.listeners.clear()}dispose(){this.clear()}}class z{scene;constructor(e){this.scene=new d.Scene,e&&(this.scene.background=new d.Color(e))}getScene(){return this.scene}setBackgroundColor(e){this.scene.background=e==null?null:new d.Color(e)}dispose(){this.scene.clear(),this.scene.background=null,this.scene.environment=null}}class O{camera;container;cameraUp;initialLookAt;constructor(e,t,i,s){this.container=e,this.cameraUp=t,this.initialLookAt=s,this.camera=this.createCamera(i)}createCamera(e){const t=Math.max(this.container.clientWidth,1),i=Math.max(this.container.clientHeight,1),s=new d.PerspectiveCamera(65,t/i,.1,5e3);return s.position.fromArray(e),s.up.fromArray(this.cameraUp).normalize(),s.lookAt(new d.Vector3().fromArray(this.initialLookAt)),s.updateProjectionMatrix(),s}getCamera(){return this.camera}updateAspectRatio(e,t){this.camera.aspect=Math.max(e,1)/Math.max(t,1),this.camera.updateProjectionMatrix()}reset(e,t){e&&this.camera.position.fromArray(e),this.camera.lookAt(new d.Vector3().fromArray(t??this.initialLookAt)),this.camera.updateMatrixWorld(!0)}dispose(){this.camera=null}}const L="iflowbim.cn",U=512,F=128,D=150,_=38,w=290,S=190;class K{THREE;text;scene;camera;material;sprites=[];size;viewportWidth=0;viewportHeight=0;constructor(e,t=L){this.THREE=e,this.text=t,this.scene=new e.Scene,this.camera=new e.OrthographicCamera(0,1,1,0,-10,10),this.material=new e.SpriteMaterial({map:new e.CanvasTexture(this.createTextTexture()),transparent:!0,opacity:.46,depthTest:!1,depthWrite:!1,toneMapped:!1}),this.size=new e.Vector2}render(e){if(!e?.domElement||e.domElement.width<=0||e.domElement.height<=0)return;e.getSize(this.size);const t=Math.max(1,Math.floor(this.size.x)),i=Math.max(1,Math.floor(this.size.y));this.updateLayout(t,i);const s=e.autoClear,r=e.getRenderTarget?.()??null,a=e.xr?.enabled;e.autoClear=!1,e.xr&&(e.xr.enabled=!1),e.setRenderTarget?.(null),e.clearDepth?.(),e.render(this.scene,this.camera),e.setRenderTarget?.(r),e.xr&&a!==void 0&&(e.xr.enabled=a),e.autoClear=s}dispose(){this.material.map?.dispose?.(),this.material.dispose?.(),this.sprites.length=0}createTextTexture(){const e=document.createElement("canvas");e.width=U,e.height=F;const t=e.getContext("2d");return t&&(t.clearRect(0,0,e.width,e.height),t.textAlign="center",t.textBaseline="middle",t.font="600 54px Arial, Helvetica, sans-serif",t.lineWidth=3,t.strokeStyle="rgba(0, 0, 0, 0.20)",t.fillStyle="rgba(255, 255, 255, 0.24)",t.strokeText(this.text,e.width/2,e.height/2),t.fillText(this.text,e.width/2,e.height/2)),e}updateLayout(e,t){if(e===this.viewportWidth&&t===this.viewportHeight)return;this.viewportWidth=e,this.viewportHeight=t,this.camera.left=-e/2,this.camera.right=e/2,this.camera.top=t/2,this.camera.bottom=-t/2,this.camera.updateProjectionMatrix();const i=Math.ceil(e/w)+2,s=Math.ceil(t/S)+2,r=i*s;this.ensureSpriteCount(r);let a=0;const h=-e/2-w/2,R=-t/2-S/2;for(let c=0;c<s;c+=1)for(let g=0;g<i;g+=1){const y=this.sprites[a],oe=h+g*w+c%2*(w/2),ce=R+c*S;y.position.set(oe,ce,0),y.visible=!0,a+=1}for(let c=a;c<this.sprites.length;c+=1)this.sprites[c].visible=!1}ensureSpriteCount(e){for(;this.sprites.length<e;){const t=new this.THREE.Sprite(this.material);t.scale.set(D,_,1),t.rotation.z=-.32,t.renderOrder=999999,this.scene.add(t),this.sprites.push(t)}}}class W{renderer;viewer;container;animationId=null;isRenderingPaused=!0;fpsFrameCount=0;fpsLastTime=performance.now();fpsInfo={fps:0,frameTimeMs:0,minFps:0};watermark;onBeforeRenderCallback;onAfterRenderCallback;onFpsUpdatedCallback;constructor(e,t,i,s){this.container=e,this.renderer=this.createRenderer(s.antialias),this.watermark=new K(d),this.viewer=new I.Viewer({selfDrivenMode:!1,renderer:this.renderer,camera:i,threeScene:t,rootElement:e,useBuiltInControls:!0,cameraUp:s.cameraUp,initialCameraPosition:s.initialCameraPosition,initialCameraLookAt:s.initialCameraLookAt,sharedMemoryForWorkers:s.sharedMemoryForWorkers,gpuAcceleratedSort:s.gpuAcceleratedSort,sphericalHarmonicsDegree:s.sphericalHarmonicsDegree,...s.viewerOptions??{}})}createRenderer(e){const t=new d.WebGLRenderer({antialias:e,alpha:!0,preserveDrawingBuffer:!1});return t.setSize(Math.max(this.container.clientWidth,1),Math.max(this.container.clientHeight,1)),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.container.appendChild(t.domElement),t}setOnBeforeRender(e){this.onBeforeRenderCallback=e}setOnAfterRender(e){this.onAfterRenderCallback=e}setOnFpsUpdated(e){this.onFpsUpdatedCallback=e}startRenderLoop(){this.animationId===null&&(this.isRenderingPaused=!1,this.animate())}animate(){if(this.isRenderingPaused){this.animationId=null;return}this.animationId=requestAnimationFrame(()=>this.animate()),this.render()}render(){this.onBeforeRenderCallback?.(),this.viewer.update(this.renderer),this.viewer.render(),this.watermark.render(this.renderer),this.onAfterRenderCallback?.(),this.updateFps()}updateFps(){this.fpsFrameCount++;const e=performance.now(),t=e-this.fpsLastTime;if(t<1e3)return;const i=Math.round(this.fpsFrameCount*1e3/t);this.fpsInfo={fps:i,frameTimeMs:i>0?1e3/i:0,minFps:this.fpsInfo.minFps===0?i:Math.min(this.fpsInfo.minFps,i)},this.fpsFrameCount=0,this.fpsLastTime=e,this.onFpsUpdatedCallback?.({...this.fpsInfo})}resetFpsStats(){this.fpsInfo={fps:0,frameTimeMs:0,minFps:0},this.fpsFrameCount=0,this.fpsLastTime=performance.now()}pauseRendering(){this.isRenderingPaused=!0,this.animationId!==null&&(cancelAnimationFrame(this.animationId),this.animationId=null)}resumeRendering(){this.isRenderingPaused&&this.startRenderLoop()}isRenderingPausedState(){return this.isRenderingPaused}resize(e,t){this.renderer.setSize(Math.max(e,1),Math.max(t,1)),this.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2))}getViewer(){return this.viewer}getRenderer(){return this.renderer}getDomElement(){return this.renderer.domElement}getFpsInfo(){return{...this.fpsInfo}}async dispose(){this.pauseRendering(),await this.viewer.dispose(),this.container.contains(this.renderer.domElement)&&this.container.removeChild(this.renderer.domElement),this.watermark.dispose(),this.renderer.dispose(),this.renderer.forceContextLoss()}}const H={identity:[0,0,0,1],"x-90":[-.7071068,0,0,.7071068],x90:[.7071068,0,0,.7071068],x180:[1,0,0,0],"y-90":[0,-.7071068,0,.7071068],y90:[0,.7071068,0,.7071068],"z-90":[0,0,-.7071068,.7071068],z90:[0,0,.7071068,.7071068],z180:[0,0,1,0]};class G{orientationPreset;constructor(e="x180"){this.orientationPreset=e}setOrientationPreset(e){this.orientationPreset=e}getOrientationPreset(){return this.orientationPreset}getOrientationRotation(){return[...H[this.orientationPreset]]}active(){}disActive(){}update(){}dispose(){}}function B(n,e){return`${n}#${e}`}class j{viewer;getDefaultRotation;scenes=new Map;constructor(e,t){this.viewer=e,this.getDefaultRotation=t}async loadModel(e,t={}){const i=this.viewer.getSceneCount(),s={showLoadingUI:!0,progressiveLoad:!1,position:[0,0,0],rotation:this.getDefaultRotation(),scale:[1,1,1],...t};await this.viewer.addSplatScene(e,s);const r={id:s.id??B(e,i),name:s.name??e.split(/[\\/]/).pop()??e,url:e,index:i,options:s};return this.scenes.set(r.id,r),r}async loadModels(e){const t=[];for(const i of e)t.push(await this.loadModel(i.url,i.options));return t}async unloadModel(e,t=!0){const i=this.scenes.get(e);i&&(await this.viewer.removeSplatScene(i.index,t),this.scenes.delete(e),this.reindexScenesAfterRemove(i.index))}getModel(e){return this.scenes.get(e)}getAllModels(){return Array.from(this.scenes.values())}getRawSplatScene(e){const t=typeof e=="number"?e:this.scenes.get(e)?.index;return t==null?void 0:this.viewer.getSplatScene(t)}async clear(e=!1){const t=this.getAllModels().map(i=>i.index);t.length>0&&await this.viewer.removeSplatScenes(t,e),this.scenes.clear()}reindexScenesAfterRemove(e){this.scenes.forEach(t=>{t.index>e&&(t.index-=1)})}}const p={version:"3.9.20"}.version;function v(){const n=globalThis.crypto?.subtle;if(!n)throw new Error("[BimEngine] Web Crypto API is required for secure sdkAuth credentials mode");return n}function m(n){return new TextEncoder().encode(n)}function f(n){return n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}function x(n){let e="";return n.forEach(t=>{e+=String.fromCharCode(t)}),btoa(e)}function V(n){const e=n.getUTCFullYear(),t=String(n.getUTCMonth()+1).padStart(2,"0"),i=String(n.getUTCDate()).padStart(2,"0");return`${e}${t}${i}`}async function $(n){const e=await v().digest("SHA-256",f(m(n)));return Array.from(new Uint8Array(e)).map(t=>t.toString(16).padStart(2,"0")).join("")}async function N(n,e){const t=v(),i=await t.importKey("raw",f(n),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return t.sign("HMAC",i,f(m(e)))}function q(n){return m([n.appId,n.engineType,n.requestDate,String(n.timestamp),n.nonce].join("|"))}async function J(n){const e=v(),t=new Date,i=t.getTime(),s=V(t),r=globalThis.crypto.randomUUID(),a=globalThis.crypto.getRandomValues(new Uint8Array(12)),h=await $(n.appSecret),R=await N(m(h),s),c=await e.importKey("raw",R,"AES-GCM",!1,["encrypt"]),g=JSON.stringify({appKey:n.appKey,appSecret:n.appSecret}),y=await e.encrypt({name:"AES-GCM",iv:a,additionalData:f(q({appId:n.appId,engineType:n.engineType,requestDate:s,timestamp:i,nonce:r})),tagLength:128},c,f(m(g)));return{appId:n.appId,engineType:n.engineType,requestDate:s,timestamp:i,nonce:r,iv:x(a),cipherText:x(new Uint8Array(y)),sdkVersion:n.sdkVersion,origin:n.origin,product:n.product}}const C=new Map;function M(n){return n.replace(/\/+$/,"")}function k(n){if(n)return n;if(typeof window<"u"&&typeof window.location?.origin=="string")return window.location.origin}function X(n,e){return JSON.stringify({endpoint:M(n.endpoint),token:n.token??"",appId:n.appId??"",appKey:n.appKey??"",appSecret:n.appSecret??"",origin:k(n.origin)??"",product:n.product??"",engineType:e,sdkVersion:p})}async function A(n,e,t){const i=typeof AbortController<"u"?new AbortController:void 0,s=i?setTimeout(()=>i.abort(),t):void 0;try{const r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),a=await r.json().catch(()=>({}));if(!r.ok){const h=a?.error?.message??a?.message??`SDK authentication failed with status ${r.status}`;throw new Error(h)}return a}finally{s!=null&&clearTimeout(s)}}async function Y(n,e){const t=await A(`${M(n.endpoint)}/oauth/sdk-verify`,{sdkToken:n.token,engineType:e,sdkVersion:p,origin:k(n.origin),product:n.product},n.timeoutMs??8e3);return t.sdkToken=n.token,t}async function Q(n,e){const t=await J({appId:n.appId,appKey:n.appKey,appSecret:n.appSecret,engineType:e,sdkVersion:p,origin:k(n.origin),product:n.product}),i=await A(`${M(n.endpoint)}/oauth/sdk-token/secure`,t,n.timeoutMs??8e3),s=await A(`${M(n.endpoint)}/oauth/sdk-verify`,{sdkToken:i.sdkToken,engineType:e,sdkVersion:p,origin:k(n.origin),product:n.product},n.timeoutMs??8e3);return s.sdkToken=i.sdkToken,s}async function Z(n,e){const t=n?.sdkAuth;if(!t)return null;if(!t.endpoint)throw new Error("[BimEngine] sdkAuth.endpoint is required");if(!t.token&&!(t.appId&&t.appKey&&t.appSecret))return null;const i=X(t,e),s=C.get(i);if(s){const a=await s;return n&&(n.__sdkAuthSession=a),a}const r=(t.token?Y(t,e):Q(t,e)).then(a=>{if(a.authorized!==!0)throw new Error("[BimEngine] SDK authorization rejected");return n&&(n.__sdkAuthSession=a),a}).catch(a=>{throw C.delete(i),a});return C.set(i,r),r}function ee(n){return n.replace(/\/+$/,"")}async function te(n,e,t){const i=typeof AbortController<"u"?new AbortController:void 0,s=i?setTimeout(()=>i.abort(),t):void 0;try{const r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),a=await r.json().catch(()=>({}));if(!r.ok){const h=a?.error?.message??a?.message??`ViewToken resolve failed with status ${r.status}`;throw new Error(h)}return a}finally{s!=null&&clearTimeout(s)}}function ne(n){switch(n){case"2d":return"cad_model";case"720":return"panorama";case"gis":return"gis_scene";case"gaussian":return"gaussian_model";case"3d":default:return"model"}}function ie(n){return{models:[{modelType:n.toLowerCase().endsWith(".json")?"3dtiles":"glb",url:n}]}}function se(n,e){return{applicationId:0,engineType:e,assetCategory:ne(e),url:n,urls:[n],info:e==="gis"?ie(n):void 0}}async function re(n,e,t){const i=n?.sdkAuth;if(!i?.endpoint)return se(e,t);let s;(i.token||i.appId&&i.appKey&&i.appSecret)&&(s=(await Z(n,t))?.sdkToken);const r={viewToken:e,engineType:t};return s&&(r.sdkToken=s),te(`${ee(i.endpoint)}/models/view-token/resolve`,r,i.timeoutMs??8e3)}class E{eventModule;sceneModule;cameraModule;renderModule;controlModule;loaderModule;isInitialized=!1;options;version=p;constructor(e){this.options=e,this.initialize(e)}initialize(e){const t={containerId:e.containerId,cameraUp:e.cameraUp??[0,1,0],initialCameraPosition:e.initialCameraPosition??[0,0,6],initialCameraLookAt:e.initialCameraLookAt??[0,0,0],backgroundColor:e.backgroundColor,antialias:e.antialias??!1,showLoadingUI:e.showLoadingUI??!0,sharedMemoryForWorkers:e.sharedMemoryForWorkers??!1,gpuAcceleratedSort:e.gpuAcceleratedSort??!1,sphericalHarmonicsDegree:e.sphericalHarmonicsDegree??0,orientationPreset:e.orientationPreset??"x180",viewerOptions:e.viewerOptions},i=document.getElementById(t.containerId);if(!i)throw new Error(`Container with id "${t.containerId}" not found`);this.eventModule=new P,this.sceneModule=new z(t.backgroundColor),this.cameraModule=new O(i,t.cameraUp,t.initialCameraPosition,t.initialCameraLookAt),this.controlModule=new G(t.orientationPreset),this.renderModule=new W(i,this.sceneModule.getScene(),this.cameraModule.getCamera(),t),this.loaderModule=new j(this.renderModule.getViewer(),()=>this.controlModule.getOrientationRotation()),this.renderModule.setOnBeforeRender(()=>{this.controlModule.update()}),this.renderModule.setOnFpsUpdated(s=>{this.eventModule.trigger(l.FpsUpdated,s)}),this.renderModule.startRenderLoop(),this.isInitialized=!0}async loadModel(e,t={}){this.checkInitialized(),this.eventModule.trigger(l.LoadStart,{url:e,name:t.name});try{const i=await this.loaderModule.loadModel(e,{showLoadingUI:!0,...t,onProgress:(s,r,a)=>{this.eventModule.trigger(l.LoadProgress,{url:e,name:t.name,progress:s}),t.onProgress?.(s,r,a)}});return this.eventModule.trigger(l.Loaded,{url:e,name:i.name,progress:100}),i}catch(i){throw this.eventModule.trigger(l.LoadError,{url:e,name:t.name,error:i instanceof Error?i:new Error(String(i))}),i}}async loadModelByViewToken(e,t={}){const i=await re(this.options,e,"gaussian");if(i.assetCategory==="composite_model"&&i.urls.length>1)throw new Error("EngineKernelGaussian: composite_model viewToken is not supported");return this.loadModel(i.url,t)}async unloadModel(e){this.checkInitialized(),await this.loaderModule.unloadModel(e,!1),this.eventModule.trigger(l.SceneRemoved,{id:e})}setOrientationPreset(e){this.checkInitialized(),this.controlModule.setOrientationPreset(e)}getOrientationPreset(){return this.checkInitialized(),this.controlModule.getOrientationPreset()}resize(e,t){this.checkInitialized();const i=this.renderModule.getDomElement(),s=e??i.parentElement?.clientWidth??i.clientWidth,r=t??i.parentElement?.clientHeight??i.clientHeight;this.renderModule.resize(s,r),this.cameraModule.updateAspectRatio(s,r)}pauseRendering(){this.checkInitialized(),this.renderModule.pauseRendering()}resumeRendering(){this.checkInitialized(),this.renderModule.resumeRendering()}resetFpsStats(){this.checkInitialized(),this.renderModule.resetFpsStats()}getFpsInfo(){return this.checkInitialized(),this.renderModule.getFpsInfo()}on(e,t){this.checkInitialized(),this.eventModule.on(e,t)}off(e,t){this.checkInitialized(),this.eventModule.off(e,t)}getVersion(){return this.version}async dispose(){this.isInitialized&&(await this.loaderModule.clear(!1),await this.renderModule.dispose(),this.controlModule.dispose(),this.cameraModule.dispose(),this.sceneModule.dispose(),this.eventModule.dispose(),this.isInitialized=!1)}checkInitialized(){if(!this.isInitialized)throw new Error("EngineKernelGaussian: Not initialized")}}function ae(n){return new E(n)}o.GaussianSplats3D=I,o.EngineKernelGaussian=E,o.EventTypeGaussian=l,o.createEngineGaussian=ae,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})}));
|