iflow-engine-base 3.9.205 → 3.9.211
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/dist/bim-engine-sdk.es.js +5 -5
- package/dist/bim-engine-sdk.umd.js +818 -818
- package/dist/chunks/{engine-2d-DAiE1uAy.js → engine-2d-DfXdo35a.js} +106 -99
- package/dist/chunks/{engine-3d-CdsLfd0i.js → engine-3d-pR92L_EF.js} +26108 -12822
- package/dist/chunks/{engine-720-K9uF9wMA.js → engine-720-B9i7xmDy.js} +32 -31
- package/dist/chunks/{engine-gaussian-x3jsCp15.js → engine-gaussian-BO2fXRFQ.js} +137 -136
- package/dist/chunks/{engine-gis-BStgPU0Q.js → engine-gis-DNuY4ydw.js} +3 -3
- package/dist/chunks/{sdk-runtime-cY1Wn7o-.js → sdk-runtime-CvEwm_hr.js} +1359 -1262
- package/dist/chunks/{three-vendor-Dbcwwhki.js → three-vendor-BislQYFI.js} +52 -52
- package/dist/index.d.ts +12 -0
- package/dist2d/dwg-preview.es.js +1559 -1456
- package/dist2d/dwg-preview.umd.js +16 -16
- package/distGaussian/gaussian.es.js +368 -271
- 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,C){"use strict";function y(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const c=y(l),S=y(C);var d=(t=>(t.LoadStart="gaussian-load-start",t.LoadProgress="gaussian-load-progress",t.Loaded="gaussian-loaded",t.LoadError="gaussian-load-error",t.SceneRemoved="gaussian-scene-removed",t.FpsUpdated="gaussian-fps-updated",t.ViewChanged="gaussian-view-changed",t))(d||{});class I{listeners=new Map;on(e,n){const i=String(e);this.listeners.has(i)||this.listeners.set(i,[]),this.listeners.get(i).push(n)}off(e,n){const i=String(e),r=this.listeners.get(i);if(!r)return;const s=r.indexOf(n);s!==-1&&r.splice(s,1),r.length===0&&this.listeners.delete(i)}trigger(e,n){const i=this.listeners.get(String(e));!i||i.length===0||[...i].forEach(r=>{try{r(n)}catch(s){console.error(`[EventModuleGaussian] event handler failed: ${e}`,s)}})}clear(){this.listeners.clear()}dispose(){this.clear()}}class R{scene;constructor(e){this.scene=new c.Scene,e&&(this.scene.background=new c.Color(e))}getScene(){return this.scene}setBackgroundColor(e){this.scene.background=e==null?null:new c.Color(e)}dispose(){this.scene.clear(),this.scene.background=null,this.scene.environment=null}}class E{camera;container;cameraUp;initialLookAt;constructor(e,n,i,r){this.container=e,this.cameraUp=n,this.initialLookAt=r,this.camera=this.createCamera(i)}createCamera(e){const n=Math.max(this.container.clientWidth,1),i=Math.max(this.container.clientHeight,1),r=new c.PerspectiveCamera(65,n/i,.1,5e3);return r.position.fromArray(e),r.up.fromArray(this.cameraUp).normalize(),r.lookAt(new c.Vector3().fromArray(this.initialLookAt)),r.updateProjectionMatrix(),r}getCamera(){return this.camera}updateAspectRatio(e,n){this.camera.aspect=Math.max(e,1)/Math.max(n,1),this.camera.updateProjectionMatrix()}reset(e,n){e&&this.camera.position.fromArray(e),this.camera.lookAt(new c.Vector3().fromArray(n??this.initialLookAt)),this.camera.updateMatrixWorld(!0)}dispose(){this.camera=null}}class T{renderer;viewer;container;animationId=null;isRenderingPaused=!0;fpsFrameCount=0;fpsLastTime=performance.now();fpsInfo={fps:0,frameTimeMs:0,minFps:0};onBeforeRenderCallback;onAfterRenderCallback;onFpsUpdatedCallback;constructor(e,n,i,r){this.container=e,this.renderer=this.createRenderer(r.antialias),this.viewer=new S.Viewer({selfDrivenMode:!1,renderer:this.renderer,camera:i,threeScene:n,rootElement:e,useBuiltInControls:!0,cameraUp:r.cameraUp,initialCameraPosition:r.initialCameraPosition,initialCameraLookAt:r.initialCameraLookAt,sharedMemoryForWorkers:r.sharedMemoryForWorkers,gpuAcceleratedSort:r.gpuAcceleratedSort,sphericalHarmonicsDegree:r.sphericalHarmonicsDegree,...r.viewerOptions??{}})}createRenderer(e){const n=new c.WebGLRenderer({antialias:e,alpha:!0,preserveDrawingBuffer:!1});return n.setSize(Math.max(this.container.clientWidth,1),Math.max(this.container.clientHeight,1)),n.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.container.appendChild(n.domElement),n}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(),n=e-this.fpsLastTime;if(n<1e3)return;const i=Math.round(this.fpsFrameCount*1e3/n);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,n){this.renderer.setSize(Math.max(e,1),Math.max(n,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 b={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 P{orientationPreset;constructor(e="x180"){this.orientationPreset=e}setOrientationPreset(e){this.orientationPreset=e}getOrientationPreset(){return this.orientationPreset}getOrientationRotation(){return[...b[this.orientationPreset]]}active(){}disActive(){}update(){}dispose(){}}function x(t,e){return`${t}#${e}`}class O{viewer;getDefaultRotation;scenes=new Map;constructor(e,n){this.viewer=e,this.getDefaultRotation=n}async loadModel(e,n={}){const i=this.viewer.getSceneCount(),r={showLoadingUI:!0,progressiveLoad:!1,position:[0,0,0],rotation:this.getDefaultRotation(),scale:[1,1,1],...n};await this.viewer.addSplatScene(e,r);const s={id:r.id??x(e,i),name:r.name??e.split(/[\\/]/).pop()??e,url:e,index:i,options:r};return this.scenes.set(s.id,s),s}async loadModels(e){const n=[];for(const i of e)n.push(await this.loadModel(i.url,i.options));return n}async unloadModel(e,n=!0){const i=this.scenes.get(e);i&&(await this.viewer.removeSplatScene(i.index,n),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 n=typeof e=="number"?e:this.scenes.get(e)?.index;return n==null?void 0:this.viewer.getSplatScene(n)}async clear(e=!1){const n=this.getAllModels().map(i=>i.index);n.length>0&&await this.viewer.removeSplatScenes(n,e),this.scenes.clear()}reindexScenesAfterRemove(e){this.scenes.forEach(n=>{n.index>e&&(n.index-=1)})}}const u={version:"3.9.205"}.version;function w(){const t=globalThis.crypto?.subtle;if(!t)throw new Error("[BimEngine] Web Crypto API is required for secure sdkAuth credentials mode");return t}function h(t){return new TextEncoder().encode(t)}function p(t){return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function v(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n)}),btoa(e)}function z(t){const e=t.getUTCFullYear(),n=String(t.getUTCMonth()+1).padStart(2,"0"),i=String(t.getUTCDate()).padStart(2,"0");return`${e}${n}${i}`}async function L(t){const e=await w().digest("SHA-256",p(h(t)));return Array.from(new Uint8Array(e)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function F(t,e){const n=w(),i=await n.importKey("raw",p(t),{name:"HMAC",hash:"SHA-256"},!1,["sign"]);return n.sign("HMAC",i,p(h(e)))}function U(t){return h([t.appId,t.engineType,t.requestDate,String(t.timestamp),t.nonce].join("|"))}async function D(t){const e=w(),n=new Date,i=n.getTime(),r=z(n),s=globalThis.crypto.randomUUID(),o=globalThis.crypto.getRandomValues(new Uint8Array(12)),f=await L(t.appSecret),N=await F(h(f),r),W=await e.importKey("raw",N,"AES-GCM",!1,["encrypt"]),q=JSON.stringify({appKey:t.appKey,appSecret:t.appSecret}),J=await e.encrypt({name:"AES-GCM",iv:o,additionalData:p(U({appId:t.appId,engineType:t.engineType,requestDate:r,timestamp:i,nonce:s})),tagLength:128},W,p(h(q)));return{appId:t.appId,engineType:t.engineType,requestDate:r,timestamp:i,nonce:s,iv:v(o),cipherText:v(new Uint8Array(J)),sdkVersion:t.sdkVersion,origin:t.origin,product:t.product}}const k=new Map;function m(t){return t.replace(/\/+$/,"")}function g(t){if(t)return t;if(typeof window<"u"&&typeof window.location?.origin=="string")return window.location.origin}function K(t,e){return JSON.stringify({endpoint:m(t.endpoint),token:t.token??"",appId:t.appId??"",appKey:t.appKey??"",appSecret:t.appSecret??"",origin:g(t.origin)??"",product:t.product??"",engineType:e,sdkVersion:u})}async function M(t,e,n){const i=typeof AbortController<"u"?new AbortController:void 0,r=i?setTimeout(()=>i.abort(),n):void 0;try{const s=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),o=await s.json().catch(()=>({}));if(!s.ok){const f=o?.error?.message??o?.message??`SDK authentication failed with status ${s.status}`;throw new Error(f)}return o}finally{r!=null&&clearTimeout(r)}}async function B(t,e){const n=await M(`${m(t.endpoint)}/oauth/sdk-verify`,{sdkToken:t.token,engineType:e,sdkVersion:u,origin:g(t.origin),product:t.product},t.timeoutMs??8e3);return n.sdkToken=t.token,n}async function V(t,e){const n=await D({appId:t.appId,appKey:t.appKey,appSecret:t.appSecret,engineType:e,sdkVersion:u,origin:g(t.origin),product:t.product}),i=await M(`${m(t.endpoint)}/oauth/sdk-token/secure`,n,t.timeoutMs??8e3),r=await M(`${m(t.endpoint)}/oauth/sdk-verify`,{sdkToken:i.sdkToken,engineType:e,sdkVersion:u,origin:g(t.origin),product:t.product},t.timeoutMs??8e3);return r.sdkToken=i.sdkToken,r}async function j(t,e){const n=t?.sdkAuth;if(!n)throw new Error("[BimEngine] sdkAuth is required. Provide sdkAuth.token or sdkAuth.appId/appKey/appSecret");if(!n.endpoint)throw new Error("[BimEngine] sdkAuth.endpoint is required");if(!n.token&&!(n.appId&&n.appKey&&n.appSecret))throw new Error("[BimEngine] Provide sdkAuth.token or sdkAuth.appId/appKey/appSecret");const i=K(n,e),r=k.get(i);if(r){const o=await r;return t&&(t.__sdkAuthSession=o),o}const s=(n.token?B(n,e):V(n,e)).then(o=>{if(o.authorized!==!0)throw new Error("[BimEngine] SDK authorization rejected");return t&&(t.__sdkAuthSession=o),o}).catch(o=>{throw k.delete(i),o});return k.set(i,s),s}function $(t){return t.replace(/\/+$/,"")}async function G(t,e,n){const i=typeof AbortController<"u"?new AbortController:void 0,r=i?setTimeout(()=>i.abort(),n):void 0;try{const s=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),o=await s.json().catch(()=>({}));if(!s.ok){const f=o?.error?.message??o?.message??`ViewToken resolve failed with status ${s.status}`;throw new Error(f)}return o}finally{r!=null&&clearTimeout(r)}}async function H(t,e,n){const i=await j(t,n),r=t?.sdkAuth;if(!r?.endpoint)throw new Error("[BimEngine] sdkAuth.endpoint is required for viewToken loading");if(!i?.sdkToken)throw new Error("[BimEngine] sdkToken is missing after SDK authorization");return G(`${$(r.endpoint)}/models/view-token/resolve`,{sdkToken:i.sdkToken,viewToken:e,engineType:n},r.timeoutMs??8e3)}class A{eventModule;sceneModule;cameraModule;renderModule;controlModule;loaderModule;isInitialized=!1;options;version=u;constructor(e){this.options=e,this.initialize(e)}initialize(e){const n={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(n.containerId);if(!i)throw new Error(`Container with id "${n.containerId}" not found`);this.eventModule=new I,this.sceneModule=new R(n.backgroundColor),this.cameraModule=new E(i,n.cameraUp,n.initialCameraPosition,n.initialCameraLookAt),this.controlModule=new P(n.orientationPreset),this.renderModule=new T(i,this.sceneModule.getScene(),this.cameraModule.getCamera(),n),this.loaderModule=new O(this.renderModule.getViewer(),()=>this.controlModule.getOrientationRotation()),this.renderModule.setOnBeforeRender(()=>{this.controlModule.update()}),this.renderModule.setOnFpsUpdated(r=>{this.eventModule.trigger(d.FpsUpdated,r)}),this.renderModule.startRenderLoop(),this.isInitialized=!0}async loadModel(e,n={}){this.checkInitialized(),this.eventModule.trigger(d.LoadStart,{url:e,name:n.name});try{const i=await this.loaderModule.loadModel(e,{showLoadingUI:!0,...n,onProgress:(r,s,o)=>{this.eventModule.trigger(d.LoadProgress,{url:e,name:n.name,progress:r}),n.onProgress?.(r,s,o)}});return this.eventModule.trigger(d.Loaded,{url:e,name:i.name,progress:100}),i}catch(i){throw this.eventModule.trigger(d.LoadError,{url:e,name:n.name,error:i instanceof Error?i:new Error(String(i))}),i}}async loadModelByViewToken(e,n={}){const i=await H(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,n)}async unloadModel(e){this.checkInitialized(),await this.loaderModule.unloadModel(e,!1),this.eventModule.trigger(d.SceneRemoved,{id:e})}setOrientationPreset(e){this.checkInitialized(),this.controlModule.setOrientationPreset(e)}getOrientationPreset(){return this.checkInitialized(),this.controlModule.getOrientationPreset()}resize(e,n){this.checkInitialized();const i=this.renderModule.getDomElement(),r=e??i.parentElement?.clientWidth??i.clientWidth,s=n??i.parentElement?.clientHeight??i.clientHeight;this.renderModule.resize(r,s),this.cameraModule.updateAspectRatio(r,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,n){this.checkInitialized(),this.eventModule.on(e,n)}off(e,n){this.checkInitialized(),this.eventModule.off(e,n)}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 _(t){return new A(t)}a.GaussianSplats3D=S,a.EngineKernelGaussian=A,a.EventTypeGaussian=d,a.createEngineGaussian=_,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,x){"use strict";function I(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=I(u),T=I(x);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),r=this.listeners.get(i);if(!r)return;const s=r.indexOf(t);s!==-1&&r.splice(s,1),r.length===0&&this.listeners.delete(i)}trigger(e,t){const i=this.listeners.get(String(e));!i||i.length===0||[...i].forEach(r=>{try{r(t)}catch(s){console.error(`[EventModuleGaussian] event handler failed: ${e}`,s)}})}clear(){this.listeners.clear()}dispose(){this.clear()}}class O{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 z{camera;container;cameraUp;initialLookAt;constructor(e,t,i,r){this.container=e,this.cameraUp=t,this.initialLookAt=r,this.camera=this.createCamera(i)}createCamera(e){const t=Math.max(this.container.clientWidth,1),i=Math.max(this.container.clientHeight,1),r=new d.PerspectiveCamera(65,t/i,.1,5e3);return r.position.fromArray(e),r.up.fromArray(this.cameraUp).normalize(),r.lookAt(new d.Vector3().fromArray(this.initialLookAt)),r.updateProjectionMatrix(),r}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){}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,r=Math.ceil(t/S)+2,s=i*r;this.ensureSpriteCount(s);let a=0;const h=-e/2-w/2,R=-t/2-S/2;for(let c=0;c<r;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,r){this.container=e,this.renderer=this.createRenderer(r.antialias),this.watermark=new K(d),this.viewer=new T.Viewer({selfDrivenMode:!1,renderer:this.renderer,camera:i,threeScene:t,rootElement:e,useBuiltInControls:!0,cameraUp:r.cameraUp,initialCameraPosition:r.initialCameraPosition,initialCameraLookAt:r.initialCameraLookAt,sharedMemoryForWorkers:r.sharedMemoryForWorkers,gpuAcceleratedSort:r.gpuAcceleratedSort,sphericalHarmonicsDegree:r.sphericalHarmonicsDegree,...r.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(),r={showLoadingUI:!0,progressiveLoad:!1,position:[0,0,0],rotation:this.getDefaultRotation(),scale:[1,1,1],...t};await this.viewer.addSplatScene(e,r);const s={id:r.id??B(e,i),name:r.name??e.split(/[\\/]/).pop()??e,url:e,index:i,options:r};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 p={version:"3.9.21"}.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 E(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(),r=V(t),s=globalThis.crypto.randomUUID(),a=globalThis.crypto.getRandomValues(new Uint8Array(12)),h=await $(n.appSecret),R=await N(m(h),r),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:r,timestamp:i,nonce:s})),tagLength:128},c,f(m(g)));return{appId:n.appId,engineType:n.engineType,requestDate:r,timestamp:i,nonce:s,iv:E(a),cipherText:E(new Uint8Array(y)),sdkVersion:n.sdkVersion,origin:n.origin,product:n.product}}const A=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 C(n,e,t){const i=typeof AbortController<"u"?new AbortController:void 0,r=i?setTimeout(()=>i.abort(),t):void 0;try{const s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),a=await s.json().catch(()=>({}));if(!s.ok){const h=a?.error?.message??a?.message??`SDK authentication failed with status ${s.status}`;throw new Error(h)}return a}finally{r!=null&&clearTimeout(r)}}async function Y(n,e){const t=await C(`${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 C(`${M(n.endpoint)}/oauth/sdk-token/secure`,t,n.timeoutMs??8e3),r=await C(`${M(n.endpoint)}/oauth/sdk-verify`,{sdkToken:i.sdkToken,engineType:e,sdkVersion:p,origin:k(n.origin),product:n.product},n.timeoutMs??8e3);return r.sdkToken=i.sdkToken,r}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),r=A.get(i);if(r){const a=await r;return n&&(n.__sdkAuthSession=a),a}const s=(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 A.delete(i),a});return A.set(i,s),s}function ee(n){return n.replace(/\/+$/,"")}async function te(n,e,t){const i=typeof AbortController<"u"?new AbortController:void 0,r=i?setTimeout(()=>i.abort(),t):void 0;try{const s=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),signal:i?.signal}),a=await s.json().catch(()=>({}));if(!s.ok){const h=a?.error?.message??a?.message??`ViewToken resolve failed with status ${s.status}`;throw new Error(h)}return a}finally{r!=null&&clearTimeout(r)}}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 re(n,e){return{applicationId:0,engineType:e,assetCategory:ne(e),url:n,urls:[n],info:e==="gis"?ie(n):void 0}}async function se(n,e,t){const i=n?.sdkAuth;if(!i?.endpoint)return re(e,t);let r;(i.token||i.appId&&i.appKey&&i.appSecret)&&(r=(await Z(n,t))?.sdkToken);const s={viewToken:e,engineType:t};return r&&(s.sdkToken=r),te(`${ee(i.endpoint)}/models/view-token/resolve`,s,i.timeoutMs??8e3)}class b{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 O(t.backgroundColor),this.cameraModule=new z(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(r=>{this.eventModule.trigger(l.FpsUpdated,r)}),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:(r,s,a)=>{this.eventModule.trigger(l.LoadProgress,{url:e,name:t.name,progress:r}),t.onProgress?.(r,s,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 se(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(),r=e??i.parentElement?.clientWidth??i.clientWidth,s=t??i.parentElement?.clientHeight??i.clientHeight;this.renderModule.resize(r,s),this.cameraModule.updateAspectRatio(r,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 ae(n){return new b(n)}o.GaussianSplats3D=T,o.EngineKernelGaussian=b,o.EventTypeGaussian=l,o.createEngineGaussian=ae,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})}));
|