qg3dviewer 1.0.0

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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/dist/controls/CameraControls.d.ts +14 -0
  4. package/dist/controls/SetupCameraControls.d.ts +35 -0
  5. package/dist/controls/SetupFlying.d.ts +2 -0
  6. package/dist/convert/PlyToSplatConverter.d.ts +1 -0
  7. package/dist/convert/SplatToPlyConverter.d.ts +1 -0
  8. package/dist/events/EventConstants.d.ts +438 -0
  9. package/dist/events/EventListener.d.ts +2 -0
  10. package/dist/events/Events.d.ts +12 -0
  11. package/dist/events/SetupGlobalEV.d.ts +2 -0
  12. package/dist/index.d.ts +11 -0
  13. package/dist/index.es.js +6817 -0
  14. package/dist/index.umd.js +747 -0
  15. package/dist/internal/Index.d.ts +1 -0
  16. package/dist/internal/WebglVars.d.ts +31 -0
  17. package/dist/mapviewer/Reall3dMapViewer.d.ts +59 -0
  18. package/dist/mapviewer/Reall3dMapViewerOptions.d.ts +34 -0
  19. package/dist/mapviewer/events/MapEventListener.d.ts +2 -0
  20. package/dist/mapviewer/tween/SetupTween.d.ts +2 -0
  21. package/dist/mapviewer/utils/MapUtils.d.ts +6 -0
  22. package/dist/mapviewer/warpsplatmesh/WarpSplatMesh.d.ts +23 -0
  23. package/dist/meshs/boundbox/BoundBox.d.ts +7 -0
  24. package/dist/meshs/controlplane/ArrowHelper.d.ts +12 -0
  25. package/dist/meshs/controlplane/SetupControlPlane.d.ts +2 -0
  26. package/dist/meshs/focusmaker/SetupFocusMarker.d.ts +2 -0
  27. package/dist/meshs/mark/MarkCirclePlan.d.ts +36 -0
  28. package/dist/meshs/mark/MarkDistanceLine.d.ts +38 -0
  29. package/dist/meshs/mark/MarkMulitPlans.d.ts +40 -0
  30. package/dist/meshs/mark/MarkMultiLines.d.ts +37 -0
  31. package/dist/meshs/mark/MarkSinglePoint.d.ts +23 -0
  32. package/dist/meshs/mark/SetupMark.d.ts +2 -0
  33. package/dist/meshs/mark/data/MarkData.d.ts +6 -0
  34. package/dist/meshs/mark/data/MarkDataCirclePlan.d.ts +34 -0
  35. package/dist/meshs/mark/data/MarkDataDistanceLine.d.ts +34 -0
  36. package/dist/meshs/mark/data/MarkDataMultiLines.d.ts +32 -0
  37. package/dist/meshs/mark/data/MarkDataMultiPlans.d.ts +36 -0
  38. package/dist/meshs/mark/data/MarkDataSinglePoint.d.ts +24 -0
  39. package/dist/meshs/splatmesh/SetupSplatMesh.d.ts +2 -0
  40. package/dist/meshs/splatmesh/SplatMesh.d.ts +38 -0
  41. package/dist/meshs/splatmesh/SplatMeshOptions.d.ts +106 -0
  42. package/dist/modeldata/ModelData.d.ts +205 -0
  43. package/dist/modeldata/ModelOptions.d.ts +17 -0
  44. package/dist/modeldata/SplatTexdata.d.ts +40 -0
  45. package/dist/modeldata/SplatTexdataManager.d.ts +5 -0
  46. package/dist/modeldata/loaders/FileLoader.d.ts +2 -0
  47. package/dist/modeldata/loaders/PlyLoader.d.ts +5 -0
  48. package/dist/modeldata/loaders/SogLoader.d.ts +2 -0
  49. package/dist/modeldata/loaders/SplatLoader.d.ts +2 -0
  50. package/dist/modeldata/loaders/SpxLoader.d.ts +2 -0
  51. package/dist/modeldata/loaders/SpzLoader.d.ts +2 -0
  52. package/dist/modeldata/text/SetupGaussianText.d.ts +2 -0
  53. package/dist/modeldata/wasm/WasmParser.d.ts +19 -0
  54. package/dist/raycaster/SetupRaycaster.d.ts +2 -0
  55. package/dist/sorter/SetupSorter.d.ts +2 -0
  56. package/dist/sorter/Sorter.d.ts +1 -0
  57. package/dist/tools/brush-selection.d.ts +10 -0
  58. package/dist/tools/lasso-selection.d.ts +10 -0
  59. package/dist/tools/polygon-selection.d.ts +10 -0
  60. package/dist/tools/rect-selection.d.ts +8 -0
  61. package/dist/tools/tool-manager.d.ts +15 -0
  62. package/dist/utils/CommonUtils.d.ts +171 -0
  63. package/dist/utils/ViewerUtils.d.ts +10 -0
  64. package/dist/utils/consts/GlobalConstants.d.ts +62 -0
  65. package/dist/utils/consts/Index.d.ts +2 -0
  66. package/dist/utils/consts/WkConstants.d.ts +76 -0
  67. package/dist/viewer/Reall3dViewer.d.ts +57 -0
  68. package/dist/viewer/Reall3dViewerOptions.d.ts +174 -0
  69. package/package.json +50 -0
@@ -0,0 +1,747 @@
1
+ (function(w,h){typeof exports=="object"&&typeof module<"u"?h(exports,require("three"),require("@gotoeasy/three-tile")):typeof define=="function"&&define.amd?define(["exports","three","@gotoeasy/three-tile"],h):(w=typeof globalThis<"u"?globalThis:w||self,h(w.qg3dviewer={},w.THREE,w.tt))})(this,function(w,h,Ae){"use strict";var nA=Object.defineProperty;var iA=(w,h,Ae)=>h in w?nA(w,h,{enumerable:!0,configurable:!0,writable:!0,value:Ae}):w[h]=Ae;var fi=(w,h,Ae)=>iA(w,typeof h!="symbol"?h+"":h,Ae);function Oo(n){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const e in n)if(e!=="default"){const i=Object.getOwnPropertyDescriptor(n,e);Object.defineProperty(t,e,i.get?i:{enumerable:!0,get:()=>n[e]})}}return t.default=n,Object.freeze(t)}const ea=Oo(Ae);let E=1;const Zt=E++,pi=E++,te=E++,na=E++,An=E++,un=E++,mi=E++,dn=E++,Ci=E++,ee=E++,lt=E++,tt=E++,yi=E++,gn=E++,Dt=E++,ne=E++,Bt=E++,ue=E++,Ii=E++,wi=E++,Ei=E++,vi=E++,Si=E++,Mi=E++,hn=E++,ia=E++,sa=E++,bi=E++,At=E++,zo=E++,st=E++,ie=E++,se=E++,Bi=E++,Qi=E++,xi=E++,Di=E++,aa=E++,ki=E++,Te=E++,Le=E++,Ti=E++,Li=E++,Ri=E++,Wt=E++,_i=E++,de=E++,Fi=E++,ge=E++,he=E++,Re=E++,Pi=E++,fn=E++,oa=E++,_e=E++,pn=E++,mn=E++,Fe=E++,Pe=E++,Ue=E++,Ne=E++,Ui=E++,Cn=E++,F=E++,$t=E++,fe=E++,z=E++,Ve=E++,yn=E++,ra=E++,ft=E++,In=E++,It=E++,Ni=E++,Vi=E++,Hi=E++,Oi=E++,wn=E++,zi=E++,jt=E++,En=E++,vn=E++,pe=E++,ca=E++,Gi=E++,Yi=E++,Go=E++,He=E++,Sn=E++,qi=E++,Wi=E++,Mn=E++,Oe=E++,bn=E++,me=E++,Mt=E++,Bn=E++,Yo=E++,$i=E++,ji=E++,ze=E++,Qn=E++,xn=E++,la=E++,Ge=E++,Ye=E++,Dn=E++,ae=E++,Jt=E++,Ce=E++,qe=E++,Ji=E++,et=E++,rt=E++,Aa=E++,Ki=E++,We=E++,$e=E++,ua=E++,kn=E++,Tn=E++,Yt=E++,ye=E++,oe=E++,da=E++,Xi=E++,ga=E++,qo=E++,Wo=E++,$o=E++,jo=E++,Jo=E++,qt=E++,Ie=E++,je=E++,Ln=E++,Zi=E++,ts=E++,Rn=E++,_t=E++,we=E++,es=E++,_n=E++,ns=E++,ha=E++,fa=E++,Fn=E++,Pn=E++,Un=E++,Nn=E++,Vn=E++,Ee=E++,is=E++,ss=E++,Je=E++,Ct=E++,as=E++,Hn=E++,os=E++,ve=E++,rs=E++,cs=E++,On=E++,ls=E++,As=E++,us=E++,ds=E++,gs=E++,hs=E++,Se=E++,fs=E++,zn=E++,pa=E++,ps=E++,Ke=E++,Xe=E++,Ze=E++,Gn=E++,Yn=E++,qn=E++,Wn=E++,ms=E++,Cs=E++,Ko=E++,ys=E++,Is=E++,at=E++,$n=E++,jn=E++,Jn=E++,ma=E++,ws=E++,Ca=E++,ya=E++,Ia=E++,wa=E++,Ea=E++,Es=E++,vs=E++,Xo=E++,Zo=E++,tr=E++,er=E++,nr=E++,ir=E++,sr=E++,ar=E++,Kn=E++,Xn=E++,Zn=E++,ti=E++,ei=E++,Ss=E++,Ms=E++,or=E++,rr=E++,cr=E++,lr=E++,Ar=E++;class ni{constructor(){this.functions=new Map,this.map=new Map}on(t,e=null,i=!1){if(!t)return console.error("Invalid event key",t),null;if(!e)return this.map.get(t);if(i){let a=this.map.get(t);a?typeof a=="function"?console.error("Invalid event type","multiFn=true",t):a.push(e):(a=[],this.map.set(t,a),a.push(e))}else{let a=this.map.get(t);a?typeof a=="function"?console.warn("Replace event",t):console.error("Invalid event type","multiFn=false",t):this.map.set(t,e)}return this.map.get(t)}fire(t,...e){const i=this.map.get(t);if(!i){this.map.size&&[...e];return}if(typeof i=="function")return i(...e);let a=[];return i.forEach(o=>a.push(o(...e))),a}tryFire(t,...e){return this.map.get(t)?this.fire(t,...e):void 0}off(t){this.map.delete(t)}clear(){this.map.clear()}function(t,e){if(this.functions.has(t))throw new Error(`error: function ${t} already exists`);this.functions.set(t,e)}invoke(t,...e){const i=this.functions.get(t);if(i)return i(...e)}}class ur{}class dr{constructor(t,e={}){this.fileSize=0,this.downloadSize=0,this.status=0,this.splatData=null,this.watermarkData=null,this.dataSplatCount=0,this.watermarkCount=0,this.sh12Data=[],this.sh3Data=[],this.sh12Count=0,this.sh3Count=0,this.rowLength=0,this.modelSplatCount=-1,this.downloadSplatCount=0,this.renderSplatCount=0,this.header=null,this.CompressionRatio="",this.dataShDegree=0,this.minX=1/0,this.maxX=-1/0,this.minY=1/0,this.maxY=-1/0,this.minZ=1/0,this.maxZ=-1/0,this.topY=0,this.currentRadius=0,this.maxRadius=0,this.textWatermarkVersion=0,this.lastTextWatermarkVersion=0,this.fetchLimit=0,this.opts={...t};const i=this;i.meta=e,e.autoCut&&(i.map=new Map),i.metaMatrix=e.transform?new h.Matrix4().fromArray(e.transform):null,t.format||(t.url?.endsWith(".spx")?i.opts.format="spx":t.url?.endsWith(".splat")?i.opts.format="splat":t.url?.endsWith(".ply")?i.opts.format="ply":t.url?.endsWith(".spz")?i.opts.format="spz":t.url?.endsWith(".sog")?i.opts.format="sog":console.error("unknown format!")),i.abortController=new AbortController}}var U=(n=>(n[n.FetchReady=0]="FetchReady",n[n.Fetching=1]="Fetching",n[n.FetchDone=2]="FetchDone",n[n.FetchAborted=3]="FetchAborted",n[n.FetchFailed=4]="FetchFailed",n[n.Invalid=5]="Invalid",n))(U||{});const bs="v2.0.0-dev",yt=navigator.userAgent.includes("Mobi"),gr="QWERTYUIOPLKJHGFDSAZXCVBNM1234567890qwertyuioplkjhgfdsazxcvbnm`~!@#$%^&*()-_=+\\|]}[{'\";::,<.>//? ",hr=yt?600:300,fr=yt?2e3:300,Me=128,ii=32,G=32,pr=20,mr=16,va=64*1024,Cr=1024*1e4,yr=10240*1e4,Ft=.28209479177387814,Ir=1,be=5,wr=9,Er=0,vr=20,Sr=190,tn=1,Pt=2,re=3,Mr=4,br=3141592653;var en=(n=>(n[n.Default=1]="Default",n[n.ZdepthFrontNearest2010=2010]="ZdepthFrontNearest2010",n[n.ZdepthFront2011=2011]="ZdepthFront2011",n[n.ZdepthFrontNearFar2012=2012]="ZdepthFrontNearFar2012",n[n.ZdepthFullNearFar2112=2112]="ZdepthFullNearFar2112",n))(en||{});function Br(n){if(Object.prototype.hasOwnProperty.call(n,"__esModule"))return n;var t=n.default;if(typeof t=="function"){var e=function i(){return this instanceof i?Reflect.construct(t,arguments,this.constructor):t.apply(this,arguments)};e.prototype=t.prototype}else e={};return Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(n).forEach(function(i){var a=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(e,i,a.get?a:{enumerable:!0,get:function(){return n[i]}})}),e}var si={exports:{}};const Qr=Br(Object.freeze(Object.defineProperty({__proto__:null,default:{}},Symbol.toStringTag,{value:"Module"})));/*!
2
+ * Based on xzwasm (c) Steve Sanderson. License: MIT - https://github.com/SteveSanderson/xzwasm
3
+ * Contains xz-embedded by Lasse Collin and Igor Pavlov. License: Public domain - https://tukaani.org/xz/embedded.html
4
+ * and walloc (c) 2020 Igalia, S.L. License: MIT - https://github.com/wingo/walloc
5
+ */var xr=si.exports,Sa;function Dr(){return Sa||(Sa=1,function(n,t){(function(i,a){n.exports=a(Qr)})(xr,e=>(()=>{var i=[,r=>{r.exports="data:application/wasm;base64,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ACABQX9qIgENAAsgAkJ/hSECCyACC8oQAgx/An4CQAJAIAAoAiRFDQAgACgCACECDAELQQAhAiAAQQA6ACggAEIANwMAIABCADcDGCAAQcgAakEAQeQAEIaAgIAAGiAAQawBakEMNgIACyAAIAEoAgQiAzYCECAAQeAAaiEEIABByABqIQUgAEG2AWohBiAAQbABaiEHIABBqAFqIQggASgCECEJAkACQAJAAkADQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACDgoBAgAEBQYHCAkKDwsgASgCACEKIAAoAqgBIQIgACgCrAEhCyABKAIEIQwgASgCCCENDAILIAcgACgCqAEiDGogASgCACABKAIEIgJqIAEoAgggAmsiAiAAKAKsASAMayIMIAIgDEkbIgIQh4CAgAAaIAEgASgCBCACajYCBEEAIQwgAEEAIAAoAqgBIAJqIgIgAiAAKAKsASILRhs2AqgBIAIgC0cNESAAQQE2AgACQCAHQaiIgIAAQQYQhICAgABFDQBBBSEMDBILIAZBAkEAEI2AgIAAIAAoALgBRw0QQQYhDCAGLQAADREgACAALQC3ASICNgIgIAJBBEsNEUEBIAJ0QRNxRQ0RCyABKAIEIgwgASgCCCINRg0OAkAgASgCACIKIAxqLQAAIgsNACAAIAw2AhAgASAMQQFqNgIEQQYhAgwMC0EAIQIgAEEANgKoASAAQQI2AgAgACALQQJ0QQRqIgs2AqwBIAAgCzYCQAsgByACaiAKIAxqIA0gDGsiDCALIAJrIgIgDCACSRsiAhCHgICAABogASABKAIEIAJqNgIEQQAhDCAAQQAgACgCqAEgAmoiAiACIAAoAqwBIgtGGzYCqAEgAiALRw0PIAAgAkF8aiICNgKsAUEHIQwgByACQQAQjYCAgAAgByAAKAKsASICaigAAEcNDyAAQQI2AqgBIAAtALEBIgtBP3ENDAJAAkAgC0HAAHFFDQAgACAHIAggAhCRgICAAEEBRw0RIAAgACkDCDcDMCAAKAKsASECIAAtALEBIQsMAQsgAEJ/NwMwC0J/IQ4CQCALwEF/Sg0AIAAgByAIIAIQkYCAgABBAUcNECAAKAKsASECIAApAwghDgsgACAONwM4IAIgACgCqAEiC2tBAkkNDyAAIAtBAWoiCjYCqAEgCCALakEI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AA8LIAEgA0EBaiIFNgIEAkAgASgCACADai0AACAAKQMYIAAoAgQiA62Ip0H/AXFGDQBBBw8LIAAgA0EIaiIGNgIEIAUhAyAGIAJJDQALIABBADYCBCAAQgA3AxhBAQtvAQF/QQchAQJAIABBugFqLwAAQdm0AUcNACAAQbQBakEGQQAQjYCAgAAgAEGwAWooAABHDQAgAEGAAWopAwBCAoggADUAtAFSDQAgAEG4AWotAAANAEEBQQcgACgCICAAQbkBai0AAEYbIQELIAELwAIBA38CQAJAAkAgACgCJA0AIABBADoAKCAAQQA2AgBBASECDAELAkAgACgCAEEKRw0AQQAhAwwCC0ECIQMMAQtBASEDCwJAAkADQAJAAkACQAJAIAMOAwABAwMLIAEoAgQiAyABKAIIIgRGDQQgASgCACEFAkADQCAFIANqLQAADQEgASADQQFqIgM2AgQgACAAKAIEQQFqQQNxNgIEIAQgA0YNBgwACwsCQCAAKAIERQ0AQQcPCyAAKAIkRQ0BIABBADoAKCAAQQA2AgBBASEDDAMLIABCADcDGCAAQQA2AgQgAEHIAGpBAEHkABCGgICAABogAEGsAWpBDDYCAAtBAiEDDAELIAAgARCQgICAACIDQQFHDQIgAEEKNgIAQQAhAwwACwsCQCACDQBBAA8LQQdBASAAKAIEGyEDCyADC3UBAX8CQEG4CRCAgICAACICRQ0AIAIgADYCJCACIAAgARCbgICAACIANgKwCQJAIABFDQAgAkEAOgAoIAJCADcDACACQgA3AxggAkHIAGpBAEHkABCGgICAABogAkGsAWpBDDYCACACDwsgAhCCgICAAAtBAAseAAJAIABFDQAgACgCsAkQnYCAgAAgABCCgICAAAsL3RABCn8gAEHo3QFqIQIgAEHUAGohAyAAQRxqIgRBCGohBQJAAkADQCAAKAJAIQYCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCBCIHIAEoAghJDQAgBkEHRg0BDBELIAYOCQECAwQFBgcACQ4LIAAoAkwhBgwHC0EBIQYgASAHQQFqNgIEIAEoAgAgB2otAAAiB0UNCAJAAkAgB0HfAUsNACAHQQFHDQELIABBgAI7AVACQCAAKAI8DQAgACABKAIMIAEoAhAiBmo2AhggACABKAIUIAZr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"},r=>{r.exports=e}],a={};function o(r){var c=a[r];if(c!==void 0)return c.exports;var A=a[r]={exports:{}};return i[r](A,A.exports,o),A.exports}o.d=(r,c)=>{for(var A in c)o.o(c,A)&&!o.o(r,A)&&Object.defineProperty(r,A,{enumerable:!0,get:c[A]})},o.o=(r,c)=>Object.prototype.hasOwnProperty.call(r,c),o.r=r=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})};var s={};return(()=>{o.r(s),o.d(s,{XzReadableStream:()=>d});var r=o(1);const c=globalThis.ReadableStream||o(2).ReadableStream,A=0,l=1;class u{constructor(p){this.exports=p.exports,this.memory=this.exports.memory,this.ptr=this.exports.create_context(),this._refresh(),this.bufSize=this.mem32[0],this.inStart=this.mem32[1]-this.ptr,this.inEnd=this.inStart+this.bufSize,this.outStart=this.mem32[4]-this.ptr}supplyInput(p){this._refresh(),this.mem8.subarray(this.inStart,this.inEnd).set(p,0),this.exports.supply_input(this.ptr,p.byteLength),this._refresh()}getNextOutput(){const p=this.exports.get_next_output(this.ptr);if(this._refresh(),p!==A&&p!==l)throw new Error(`get_next_output failed with error code ${p}`);return{outChunk:this.mem8.slice(this.outStart,this.outStart+this.mem32[5]),finished:p===l}}needsMoreInput(){return this.mem32[2]===this.mem32[3]}outputBufferIsFull(){return this.mem32[5]===this.bufSize}resetOutputBuffer(){this.outPos=this.mem32[5]=0}dispose(){this.exports.destroy_context(this.ptr),this.exports=null}_refresh(){this.memory.buffer!==this.mem8?.buffer&&(this.mem8=new Uint8Array(this.memory.buffer,this.ptr),this.mem32=new Uint32Array(this.memory.buffer,this.ptr))}}class f{constructor(){this.locked=!1,this.waitQueue=[]}async acquire(){if(!this.locked){this.locked=!0;return}return new Promise(p=>{this.waitQueue.push(p)})}release(){this.waitQueue.length>0?this.waitQueue.shift()():this.locked=!1}}const g=class g extends c{static async _getModuleInstance(){const p=r.replace("data:application/wasm;base64,",""),m=Uint8Array.from(atob(p),Q=>Q.charCodeAt(0)).buffer,I={},S=await WebAssembly.instantiate(m,I);g._moduleInstance=S.instance}constructor(p){let m,I=null;const S=p.getReader();super({async start(Q){await g._contextMutex.acquire();try{g._moduleInstance||await(g._moduleInstancePromise||(g._moduleInstancePromise=g._getModuleInstance())),m=new u(g._moduleInstance)}catch(k){throw g._contextMutex.release(),k}},async pull(Q){try{if(m.needsMoreInput()){if(I===null||I.byteLength===0){const{done:b,value:C}=await S.read();b||(I=C)}const M=Math.min(m.bufSize,I.byteLength);m.supplyInput(I.subarray(0,M)),I=I.subarray(M)}const k=m.getNextOutput();Q.enqueue(k.outChunk),m.resetOutputBuffer(),k.finished&&(m.dispose(),g._contextMutex.release(),Q.close())}catch(k){throw m&&m.dispose(),g._contextMutex.release(),k}},cancel(){try{return m&&m.dispose(),S.cancel()}finally{g._contextMutex.release()}}})}};fi(g,"_moduleInstancePromise"),fi(g,"_moduleInstance"),fi(g,"_contextMutex",new f);let d=g})(),s})())}(si)),si.exports}var kr=Dr(),bt=Uint8Array,Be=Uint16Array,Tr=Int32Array,Ma=new bt([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ba=new bt([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Lr=new bt([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Ba=function(n,t){for(var e=new Be(31),i=0;i<31;++i)e[i]=t+=1<<n[i-1];for(var a=new Tr(e[30]),i=1;i<30;++i)for(var o=e[i];o<e[i+1];++o)a[o]=o-e[i]<<5|i;return{b:e,r:a}},Qa=Ba(Ma,2),xa=Qa.b,Rr=Qa.r;xa[28]=258,Rr[258]=28;for(var _r=Ba(ba,0),Fr=_r.b,Bs=new Be(32768),it=0;it<32768;++it){var Kt=(it&43690)>>1|(it&21845)<<1;Kt=(Kt&52428)>>2|(Kt&13107)<<2,Kt=(Kt&61680)>>4|(Kt&3855)<<4,Bs[it]=((Kt&65280)>>8|(Kt&255)<<8)>>1}for(var nn=function(n,t,e){for(var i=n.length,a=0,o=new Be(t);a<i;++a)n[a]&&++o[n[a]-1];var s=new Be(t);for(a=1;a<t;++a)s[a]=s[a-1]+o[a-1]<<1;var r;if(e){r=new Be(1<<t);var c=15-t;for(a=0;a<i;++a)if(n[a])for(var A=a<<4|n[a],l=t-n[a],u=s[n[a]-1]++<<l,f=u|(1<<l)-1;u<=f;++u)r[Bs[u]>>c]=A}else for(r=new Be(i),a=0;a<i;++a)n[a]&&(r[a]=Bs[s[n[a]-1]++]>>15-n[a]);return r},sn=new bt(288),it=0;it<144;++it)sn[it]=8;for(var it=144;it<256;++it)sn[it]=9;for(var it=256;it<280;++it)sn[it]=7;for(var it=280;it<288;++it)sn[it]=8;for(var Da=new bt(32),it=0;it<32;++it)Da[it]=5;var Pr=nn(sn,9,1),Ur=nn(Da,5,1),Qs=function(n){for(var t=n[0],e=1;e<n.length;++e)n[e]>t&&(t=n[e]);return t},kt=function(n,t,e){var i=t/8|0;return(n[i]|n[i+1]<<8)>>(t&7)&e},xs=function(n,t){var e=t/8|0;return(n[e]|n[e+1]<<8|n[e+2]<<16)>>(t&7)},Nr=function(n){return(n+7)/8|0},Ds=function(n,t,e){return(t==null||t<0)&&(t=0),(e==null||e>n.length)&&(e=n.length),new bt(n.subarray(t,e))},Vr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Qt=function(n,t,e){var i=new Error(t||Vr[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,Qt),!e)throw i;return i},Hr=function(n,t,e,i){var a=n.length,o=i?i.length:0;if(!a||t.f&&!t.l)return e||new bt(0);var s=!e,r=s||t.i!=2,c=t.i;s&&(e=new bt(a*3));var A=function(Z){var St=e.length;if(Z>St){var mt=new bt(Math.max(St*2,Z));mt.set(e),e=mt}},l=t.f||0,u=t.p||0,f=t.b||0,d=t.l,g=t.d,y=t.m,p=t.n,m=a*8;do{if(!d){l=kt(n,u,1);var I=kt(n,u+1,3);if(u+=3,I)if(I==1)d=Pr,g=Ur,y=9,p=5;else if(I==2){var M=kt(n,u,31)+257,b=kt(n,u+10,15)+4,C=M+kt(n,u+5,31)+1;u+=14;for(var v=new bt(C),x=new bt(19),B=0;B<b;++B)x[Lr[B]]=kt(n,u+B*3,7);u+=b*3;for(var R=Qs(x),L=(1<<R)-1,_=nn(x,R,1),B=0;B<C;){var D=_[kt(n,u,L)];u+=D&15;var S=D>>4;if(S<16)v[B++]=S;else{var T=0,N=0;for(S==16?(N=3+kt(n,u,3),u+=2,T=v[B-1]):S==17?(N=3+kt(n,u,7),u+=3):S==18&&(N=11+kt(n,u,127),u+=7);N--;)v[B++]=T}}var H=v.subarray(0,M),P=v.subarray(M);y=Qs(H),p=Qs(P),d=nn(H,y,1),g=nn(P,p,1)}else Qt(1);else{var S=Nr(u)+4,Q=n[S-4]|n[S-3]<<8,k=S+Q;if(k>a){c&&Qt(0);break}r&&A(f+Q),e.set(n.subarray(S,k),f),t.b=f+=Q,t.p=u=k*8,t.f=l;continue}if(u>m){c&&Qt(0);break}}r&&A(f+131072);for(var O=(1<<y)-1,Y=(1<<p)-1,q=u;;q=u){var T=d[xs(n,u)&O],W=T>>4;if(u+=T&15,u>m){c&&Qt(0);break}if(T||Qt(2),W<256)e[f++]=W;else if(W==256){q=u,d=null;break}else{var J=W-254;if(W>264){var B=W-257,V=Ma[B];J=kt(n,u,(1<<V)-1)+xa[B],u+=V}var ut=g[xs(n,u)&Y],ot=ut>>4;ut||Qt(3),u+=ut&15;var P=Fr[ot];if(ot>3){var V=ba[ot];P+=xs(n,u)&(1<<V)-1,u+=V}if(u>m){c&&Qt(0);break}r&&A(f+131072);var Gt=f+J;if(f<P){var Rt=o-P,$=Math.min(P,Gt);for(Rt+f<0&&Qt(3);f<$;++f)e[f]=i[Rt+f]}for(;f<Gt;++f)e[f]=e[f-P]}}t.l=d,t.p=q,t.b=f,t.f=l,d&&(l=1,t.m=y,t.d=g,t.n=p)}while(!l);return f!=e.length&&s?Ds(e,0,f):e.subarray(0,f)},Or=new bt(0),Ut=function(n,t){return n[t]|n[t+1]<<8},Tt=function(n,t){return(n[t]|n[t+1]<<8|n[t+2]<<16|n[t+3]<<24)>>>0},ks=function(n,t){return Tt(n,t)+Tt(n,t+4)*4294967296};function zr(n,t){return Hr(n,{i:2},t&&t.out,t&&t.dictionary)}var Ts=typeof TextDecoder<"u"&&new TextDecoder,Gr=0;try{Ts.decode(Or,{stream:!0}),Gr=1}catch{}var Yr=function(n){for(var t="",e=0;;){var i=n[e++],a=(i>127)+(i>223)+(i>239);if(e+a>n.length)return{s:t,r:Ds(n,e-1)};a?a==3?(i=((i&15)<<18|(n[e++]&63)<<12|(n[e++]&63)<<6|n[e++]&63)-65536,t+=String.fromCharCode(55296|i>>10,56320|i&1023)):a&1?t+=String.fromCharCode((i&31)<<6|n[e++]&63):t+=String.fromCharCode((i&15)<<12|(n[e++]&63)<<6|n[e++]&63):t+=String.fromCharCode(i)}};function qr(n,t){if(t){for(var e="",i=0;i<n.length;i+=16384)e+=String.fromCharCode.apply(null,n.subarray(i,i+16384));return e}else{if(Ts)return Ts.decode(n);var a=Yr(n),o=a.s,e=a.r;return e.length&&Qt(8),o}}var Wr=function(n,t){return t+30+Ut(n,t+26)+Ut(n,t+28)},$r=function(n,t,e){var i=Ut(n,t+28),a=qr(n.subarray(t+46,t+46+i),!(Ut(n,t+8)&2048)),o=t+46+i,s=Tt(n,t+20),r=e&&s==4294967295?jr(n,o):[s,Tt(n,t+24),Tt(n,t+42)],c=r[0],A=r[1],l=r[2];return[Ut(n,t+10),c,A,a,o+Ut(n,t+30)+Ut(n,t+32),l]},jr=function(n,t){for(;Ut(n,t)!=1;t+=4+Ut(n,t+2));return[ks(n,t+12),ks(n,t+4),ks(n,t+20)]};function Jr(n,t){for(var e={},i=n.length-22;Tt(n,i)!=101010256;--i)(!i||n.length-i>65558)&&Qt(13);var a=Ut(n,i+8);if(!a)return{};var o=Tt(n,i+16),s=o==4294967295||a==65535;if(s){var r=Tt(n,i-12);s=Tt(n,r)==101075792,s&&(a=Tt(n,r+32),o=Tt(n,r+48))}for(var c=0;c<a;++c){var A=$r(n,o,s),l=A[0],u=A[1],f=A[2],d=A[3],g=A[4],y=A[5],p=Wr(n,y);o=g,l?l==8?e[d]=zr(n.subarray(p,p+u),{out:new bt(f)}):Qt(14,"unknown compression type "+l):e[d]=Ds(n,p,p+u)}return e}function Ls(n){let t=!1;const e=(d,g,y)=>n.on(d,g,y),i=(d,...g)=>n.fire(d,...g);e(It,()=>i(F).debugMode),e(Cn,()=>t=!0);let a=0;(function d(){a++,!t&&requestAnimationFrame(d)})(),e(Zt,(d,g=null,y=0)=>{const p=()=>{t||(y>0?!(a%y)&&d(a):d(a),g&&g()&&requestAnimationFrame(p))};p()}),e(pi,(d,g=null,y=20)=>{const p=()=>{t||(d(),g&&g()&&setTimeout(p,y))};p()});let o=!1,s=0,r=0;e(En,()=>{o=!0,(async()=>{const d=document.querySelector("#gsviewer #progressBarWrap");if(d){d.style.display="block";const g=document.querySelector("#gsviewer #progressBar");g&&(g.style.width="0%")}})(),(async()=>document.querySelector("#gsviewer .logo")?.classList.add("loading"))(),parent?.onProgress&&parent.onProgress(.001,"0.001%"),window.onProgress&&window.onProgress(.001,"0.001%")}),e(pe,d=>{d&&(s=d),o=!1,d!==void 0&&((async()=>{const g=document.querySelector("#gsviewer #progressBarWrap");g&&(g.style.display="none")})(),(async()=>document.querySelector("#gsviewer .logo")?.classList.remove("loading"))(),parent?.onProgress&&parent.onProgress(0,"100%",9),window.onProgress&&window.onProgress(0,"100%",9))}),e(vn,d=>{o=!0,(async()=>{const g=document.querySelector("#gsviewer #progressBar");g&&(g.style.width=`${d}%`)})(),parent?.onProgress&&parent.onProgress(d,`${d}%`),window.onProgress&&window.onProgress(d,`${d}%`)}),e(ca,()=>o),e(Gi,d=>{r=d}),e(Yi,()=>!o&&s&&r>=s),e($t,()=>{const g=i(ee).parentElement.getBoundingClientRect();return{width:g.width,height:g.height,left:g.left,top:g.top}}),e(jt,d=>{let g=d.x.toFixed(3).split("."),y=d.y.toFixed(3).split("."),p=d.z.toFixed(3).split(".");return(g[1]==="000"||g[1]==="00000")&&(g[1]="0"),(y[1]==="000"||y[1]==="00000")&&(y[1]="0"),(p[1]==="000"||p[1]==="00000")&&(p[1]="0"),`${g.join(".")}, ${y.join(".")}, ${p.join(".")}`}),e(ia,d=>btoa(d)),e(sa,d=>atob(d));const c=.001;let A=new h.Vector3,l=new h.Vector3,u=0;e(ra,()=>{const d=i(lt),g=d.fov,y=d.position.clone(),p=d.getWorldDirection(new h.Vector3);return Math.abs(u-g)<c&&Math.abs(y.x-A.x)<c&&Math.abs(y.y-A.y)<c&&Math.abs(y.z-A.z)<c&&Math.abs(p.x-l.x)<c&&Math.abs(p.y-l.y)<c&&Math.abs(p.z-l.z)<c?!1:(u=g,A=y,l=p,!0)}),e(_t,d=>{if(!d)return;const g=[];d.traverse(y=>g.push(y)),g.forEach(y=>{y.dispose?y.dispose():(y.geometry?.dispose?.(),y.material&&y.material instanceof Array?y.material.forEach(p=>p?.dispose?.()):y.material?.dispose?.())}),d.clear()}),e(st,async({renderSplatCount:d,visibleSplatCount:g,modelSplatCount:y,fps:p,realFps:m,sortTime:I,bucketBits:S,sortType:Q,qualityLevel:k,fov:M,position:b,lookUp:C,lookAt:v,worker:x,scene:B,scale:R,cuts:L,shDegree:_}={})=>{if(!i(It))return;_!==void 0&&f("shDegree",`${_}`),d!==void 0&&f("renderSplatCount",`${d}`),g!==void 0&&f("visibleSplatCount",`${g}`),y!==void 0&&f("modelSplatCount",`${y}`),p!==void 0&&f("fps",p),m!==void 0&&f("realFps",`raw ${m}`),I!==void 0&&f("sort",`${I} ms (L ${i(F).qualityLevel||be}, ${S} B, T ${Q})`),L!==void 0&&f("cuts",L===""?"":`(${L} cuts)`),x&&f("worker",`${x}`),B&&f("scene",B),M&&f("fov",M),b&&f("position",b),C&&f("lookUp",C),v&&f("lookAt",v),v&&f("viewer-version",bs);let D=performance.memory||{usedJSHeapSize:0,totalJSHeapSize:0,jsHeapSizeLimit:0},T="",N=D.usedJSHeapSize/1024/1024;N>1e3?T+=(N/1024).toFixed(2)+" G":T+=N.toFixed(0)+" M",T+=" / ";let H=D.totalJSHeapSize/1024/1024;H>1e3?T+=(H/1024).toFixed(2)+" G":T+=H.toFixed(0)+" M";let P=D.jsHeapSizeLimit/1024/1024;T+=" / ",P>1e3?T+=(P/1024).toFixed(2)+" G":T+=P.toFixed(0)+" M",f("memory",T),R&&f("scale",R)});async function f(d,g){let y=document.querySelector(`#gsviewer .debug .${d}`);y&&(y.innerText=g)}}function Kr(n=0){const t=new Date;return t.setDate(t.getDate()-7),n>=t.getFullYear()*1e4+(t.getMonth()+1)*100+t.getDate()}function K(n){return n<0?0:n>255?255:n|0}function ai(n){const t=K(Math.round(n*128)+128);return K(Math.floor((t+4)/8)*8)}function oi(n,t){return((1500+n*248)/t).toFixed(2)+"x"}async function ka(n){try{const t=new ReadableStream({async start(i){i.enqueue(n),i.close()}}),e=new Response(t.pipeThrough(new DecompressionStream("gzip")));return new Uint8Array(await e.arrayBuffer())}catch(t){return console.error("Decompress gzip failed:",t),null}}async function Xr(n){try{const t=URL.createObjectURL(new Blob([n],{type:"application/octet-stream"})),e=await fetch(t),i=new Response(new kr.XzReadableStream(e.body));return new Uint8Array(await i.arrayBuffer())}catch(t){return console.error("Decompress xz failed:",t),null}}async function Zr(n){const t=new Uint32Array(n.slice(0,12).buffer),e=t[0],i=t[2];let a=8;const o=n.slice(a+4,a+4+i),{rgba:s}=await wt(o);a+=4+i;const r=new Uint32Array(n.slice(a,a+4).buffer)[0],c=n.slice(a+4,a+4+r),{rgba:A}=await wt(c);a+=4+r;const l=new Uint32Array(n.slice(a,a+4).buffer)[0],u=n.slice(a+4,a+4+l),{rgba:f}=await wt(u);a+=4+l;const d=new Uint32Array(n.slice(a,a+4).buffer)[0],g=n.slice(a+4,a+4+d),{rgba:y}=await wt(g),p=new Uint8Array(8+e*19);let m=0;p[m]=n[m++],p[m]=n[m++],p[m]=n[m++],p[m]=n[m++],p[m++]=19,p[m++]=0,p[m++]=0,p[m++]=0;for(let I=0;I<e;I++)p[m++]=s[I*4+0];for(let I=0;I<e;I++)p[m++]=s[I*4+1];for(let I=0;I<e;I++)p[m++]=s[I*4+2];for(let I=0;I<e;I++)p[m++]=s[e*4+I*4+0];for(let I=0;I<e;I++)p[m++]=s[e*4+I*4+1];for(let I=0;I<e;I++)p[m++]=s[e*4+I*4+2];for(let I=0;I<e;I++)p[m++]=s[e*8+I*4+0];for(let I=0;I<e;I++)p[m++]=s[e*8+I*4+1];for(let I=0;I<e;I++)p[m++]=s[e*8+I*4+2];for(let I=0;I<e;I++)p[m++]=A[I*4+0];for(let I=0;I<e;I++)p[m++]=A[I*4+1];for(let I=0;I<e;I++)p[m++]=A[I*4+2];for(let I=0;I<e;I++)p[m++]=f[I*4+0];for(let I=0;I<e;I++)p[m++]=f[I*4+1];for(let I=0;I<e;I++)p[m++]=f[I*4+2];for(let I=0;I<e;I++)p[m++]=f[I*4+3];for(let I=0;I<e;I++)p[m++]=y[I*4+0];for(let I=0;I<e;I++)p[m++]=y[I*4+1];for(let I=0;I<e;I++)p[m++]=y[I*4+2];return p}async function tc(n){const e=new Uint32Array(n.slice(0,8).buffer)[0],i=n.slice(8),{rgba:a}=await wt(i),o=new Uint8Array(8+e*9);let s=0;o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s++]=1,o[s++]=0,o[s++]=0,o[s++]=0;for(let r=0;r<e;r++)for(let c=0;c<3;c++)o[s++]=a[r*60+c*4+0],o[s++]=a[r*60+c*4+1],o[s++]=a[r*60+c*4+2];return o}async function Ta(n){const e=new Uint32Array(n.slice(0,8).buffer)[0],i=n.slice(8),{rgba:a}=await wt(i),o=new Uint8Array(8+e*24);let s=0;o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s++]=2,o[s++]=0,o[s++]=0,o[s++]=0;for(let r=0;r<e;r++)for(let c=0;c<8;c++)o[s++]=a[r*60+c*4+0],o[s++]=a[r*60+c*4+1],o[s++]=a[r*60+c*4+2];return o}async function ec(n){const e=new Uint32Array(n.slice(0,8).buffer)[0],i=n.slice(8),{rgba:a}=await wt(i),o=new Uint8Array(8+e*21);let s=0;o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s]=n[s++],o[s++]=3,o[s++]=0,o[s++]=0,o[s++]=0;for(let r=0;r<e;r++)for(let c=8;c<15;c++)o[s++]=a[r*60+c*4+0],o[s++]=a[r*60+c*4+1],o[s++]=a[r*60+c*4+2];return o}async function wt(n){const t=new Blob([n],{type:"image/webp"}),e=URL.createObjectURL(t),i=await createImageBitmap(await fetch(e).then(A=>A.blob())),o=new OffscreenCanvas(i.width,i.height).getContext("2d");o.drawImage(i,0,0);const s=o.getImageData(0,0,i.width,i.height),r=i.width,c=i.height;return i.close(),URL.revokeObjectURL(e),{width:r,height:c,rgba:s.data}}function nc(n){const t=new Map;try{const e=Jr(n);for(const[i,a]of Object.entries(e))if(a){const o=new Uint8Array(a);t.set(i,o)}}catch(e){console.error("解压失败:",e)}return t}function ic(n){return new TextDecoder("utf-8").decode(n)}const Rs="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",_s="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bGohESADIAJBAnRqIRIgAyACQQNsaiETIAMgAkEBdGohFCABIAJqQQhqIRUgASACQQR0akEIaiEWQQAhAQNAIAEgBWotAAAhFyABIBZqLQAAIRggASAEai0AACEZIAEgCGotAAAhGiABIAlqLQAAIRsgASAHai0AACEcIAEgBmotAAAhDiABIApqLQAAIR0gASALai0AACEgIAAgAUEDdCABIANqLQAAIAEgE2otAABBCHRyIAEgEGosAAAiHkH/AXFBEHRyIh9BgICAeHIgHyAeQQBIG7JDAACAOZQgASAVai0AACABIBJqLQAAQQh0ciABIA9qLAAAIh5B/wFxQRB0ciIfQYCAgHhyIB8gHkEASBuyQwAAgDmUIAEgFGotAAAgASARai0AAEEIdHIgASANaiwAACIeQf8BcUEQdHIiH0GAgIB4ciAfIB5BAEgbskMAAIA5lCABIAxqLQAAs0MAAIA9lEMAACDBkhAAICCzQwAAgD2UQwAAIMGSEAAgHbNDAACAPZRDAAAgwZIQAEMAAAAAQwAAgD8gGbNDAAAAw5JDAAAAPJQiISAhlCAYs0MAAADDkkMAAAA8lCIiICKUIBezQwAAAMOSQwAAADyUIiMgI5SSkpMiJJEgJEMAAAAAXRsgIiAjICEgGyAaQQh0ciAcQRB0ciAOQRh0chAEIAFBAWoiASACRw0ACwsMBAsgASgCACICQQBKBEAgASoCHCABKgIYIiSTQwD/f0eVISUgASoCFCABKgIQIiaTQwD/f0eVIScgASoCDCABQQhqIgMqAgAiKJNDAP9/R5UhKSADIAJBD2xqIQQgAyACQQ5saiEFIAMgAkENbGohBiADIAJBDGxqIQcgAyACQQtsaiEIIAMgAkEKbGohCSADIAJBCWxqIQogAyACQQN0aiELIAMgAkEHbGohDCADIAJBBmxqIQ0gAyACQQVsaiEPIAMgAkECdGohECADIAJBA2xqIREgAyACQQF0aiESIAEgAmpBCGohE0EAIQEDQCABIAVqLQAAIRQgASAGai0AACEVIAEgBGotAAAhFiABIAlqLQAAIRcgASAKai0AACEYIAEgCGotAAAhGSABIAdqLQAAIRogASALai0AACEbIAEgDGotAAAhHCAAIAFBA3QgASADai0AACABIBFqLQAAQQh0crMgKZQgKJIgASATai0AACABIBBqLQAAQQh0crMgJ5QgJpIgASASai0AACABIA9qLQAAQQh0crMgJZQgJJIgASANai0AALNDAACAPZRDAAAgwZIQACAcs0MAAIA9lEMAACDBkhAAIBuzQwAAgD2UQwAAIMGSEABDAAAAAEMAAIA/IBazQwAAAMOSQwAAADyUIiEgIZQgFbNDAAAAw5JDAAAAPJQiIiAilCAUs0MAAADDkkMAAAA8lCIjICOUkpKTIiqRICpDAAAAAF0bICIgIyAhIBggF0EIdHIgGUEQdHIgGkEYdHIQBCABQQFqIgEgAkcNAAsLDAMLQQAhAyABKAIAIgVBAEoEQANAIAEgA0EJbGoiAi0ADSEGIAItAAwhByACLQALIQggAi0ACiEJIAItAAkhCiACLQAIIQsgAi0AECEMIAItAA8hDSACLQAOIQIgACADQQR0aiIEQoCAgIAQNwIIIAQgDEEQdEGAgOAHcSANQRV0QYCAgPgBcSACQRp0QYCAgIB+cXJyNgIEIAQgBkEBdkH8AHEgB0EEdEGAH3EgCEEJdEGA4AdxIAlBDnRBgID4AXEgCkETdEGAgIA+cSALQRh0QYCAgEBxcnJycnIgAkEGdnI2AgAgA0EBaiIDIAVHDQALCwwCC0EAIQMgASgCACIHQQBKBEADQCABIANBGGxqIgItABohCCACLQAZIQkgAi0AGCEKIAItABchCyACLQAWIQwgAi0AFSENIAItAA0hDyACLQAMIRAgAi0ACyERIAItAAohEiACLQAJIRMgAi0ACCEUIAItABQhBSACLQATIRUgAi0AEiEWIAItABEhFyACLQAQIRggAi0ADyEZIAItAA4hBiAAIANBBHRqIgQgAi0AH0EFdEGAPnEgAi0AHkEKdEGAwA9xIAItAB1BD3RBgIDwA3EgAi0AHEEUdEGAgID8AHEgAi0AGyICQRl0QYCAgIB/cXJycnJBAXI2AgwgBCAVQQF0QfADcSAWQQZ0QYD8AHEgF0ELdEGAgB9xIBhBEHRBgIDgB3EgGUEVdEGAgID4AXEgBkEadEGAgICAfnFycnJyciAFQQR2cjYCBCAEIA9BAXZB/ABxIBBBBHRBgB9xIBFBCXRBgOAHcSASQQ50QYCA+AFxIBNBE3RBgICAPnEgFEEYdEGAgIBAcXJycnJyIAZBBnZyNgIAIAQgCEECdkE+cSAJQQN0QcAPcSAKQQh0QYDwA3EgC0ENdEGAgPwAcSAMQRJ0QYCAgB9xIA1BF3RBgICA4AdxIAVBHHRBgICAgHhxcnJycnJyIAJBB3ZyNgIIIANBAWoiAyAHRw0ACwsMAQtBACEDIAEoAgAiB0EASgRAA0AgASADQRVsaiICLQAaIQggAi0AGSEJIAItABghCiACLQAXIQsgAi0AFiEMIAItABUhDSACLQANIQ8gAi0ADCEQIAItAAshESACLQAKIRIgAi0ACSETIAItAAghFCACLQAUIQUgAi0AEyEVIAItABIhFiACLQARIRcgAi0AECEYIAItAA8hGSACLQAOIQYgACADQQR0aiIEIAItABxBFHRBgICA/ABxIAItABsiAkEZdEGAgICAf3FyQQFyNgIMIAQgFUEBdEHwA3EgFkEGdEGA/ABxIBdBC3RBgIAfcSAYQRB0QYCA4AdxIBlBFXRBgICA+AFxIAZBGnRBgICAgH5xcnJycnIgBUEEdnI2AgQgBCAPQQF2QfwAcSAQQQR0QYAfcSARQQl0QYDgB3EgEkEOdEGAgPgBcSATQRN0QYCAgD5xIBRBGHRBgICAQHFycnJyciAGQQZ2cjYCACAEIAhBAnZBPnEgCUEDdEHAD3EgCkEIdEGA8ANxIAtBDXRBgID8AHEgDEESdEGAgIAfcSANQRd0QYCAgOAHcSAFQRx0QYCAgIB4cXJycnJyciACQQd2cjYCCCADQQFqIgMgB0cNAAsLC0EAIQILIAIL";async function sc(n){const t=new Uint32Array(n.buffer),e=new Float32Array(n.buffer),i=new ur;i.Fixed=String.fromCharCode(n[0])+String.fromCharCode(n[1])+String.fromCharCode(n[2]),i.Version=n[3],i.SplatCount=t[1],i.MinX=e[2],i.MaxX=e[3],i.MinY=e[4],i.MaxY=e[5],i.MinZ=e[6],i.MaxZ=e[7],i.MinTopY=e[8],i.MaxTopY=e[9],i.CreateDate=t[10],i.CreaterId=t[11],i.ExclusiveId=t[12],i.ShDegree=n[52],i.Flag1=n[53],i.Flag2=n[54],i.Flag3=n[55],i.Reserve1=t[14],i.Reserve2=t[15];let a="";for(let f=64;f<124;f++)a+=String.fromCharCode(n[f]);if(i.Comment=a.trim(),i.HashCheck=!0,i.Fixed!=="spx"&&i.Version!==1)return null;const o=i.CreaterId==1202056903?_s:Rs,s=WebAssembly.compile(Uint8Array.from(atob(o),f=>f.charCodeAt(0)).buffer),r=new WebAssembly.Memory({initial:1,maximum:1}),A=(await WebAssembly.instantiate(await s,{env:{memory:r,expf:ri}})).exports.H;return new Uint8Array(r.buffer).set(n,0),A(0)&&(i.HashCheck=!1),i}async function Et(n,t=null){let e=new Uint32Array(n.slice(0,8).buffer);const i=e[0],a=e[1];if(a==Mr){if(t.ShDegree==tn){const o=await tc(n);return an(i,tn,o)}else if(t.ShDegree==Pt){const o=await Ta(n);return an(i,Pt,o)}else if(t.ShDegree==re){const o=await Ta(n),s=await ec(n),r=await an(i,Pt,o),c=await an(i,re,s);return r.success=r.success&&c.success,r.isSh23=!0,r.dataSh3=c.datas,r}}return a==Sr&&(n=await Zr(n)),an(i,a,n)}async function an(n,t,e){const i=tn==t,a=Pt==t,o=re==t,s=i||a||o,r=!s,A=t<=255||s?_s:Rs,l=n*(s?mr:G),u=WebAssembly.compile(Uint8Array.from(atob(A),I=>I.charCodeAt(0)).buffer),f=Math.floor((l+e.byteLength)/va)+2,d=new WebAssembly.Memory({initial:f,maximum:f}),y=(await WebAssembly.instantiate(await u,{env:{memory:d,expf:ri}})).exports.D,p=new Uint8Array(d.buffer);return p.set(e,l),y(0,l)?{splatCount:n,blockFormat:t,success:!1}:{splatCount:n,blockFormat:t,success:!0,datas:p.slice(0,l),isSplat:r,isSh:s,isSh1:i,isSh2:a,isSh3:o}}async function on(n,t){const e=WebAssembly.compile(Uint8Array.from(atob(_s),A=>A.charCodeAt(0)).buffer),i=Math.floor(t*G/va)+2,a=new WebAssembly.Memory({initial:i,maximum:i}),s=(await WebAssembly.instantiate(await e,{env:{memory:a,expf:ri}})).exports.s,r=new Uint8Array(a.buffer);r.set(n.slice(0,t*G),0);const c=s(0,t);return c?(console.error("splat data parser failed:",c),new Uint8Array(0)):r.slice(0,t*G)}async function ac(n,t,e=!0,i=!0){const a=WebAssembly.compile(Uint8Array.from(atob(Rs),u=>u.charCodeAt(0)).buffer),o=new WebAssembly.Memory({initial:1,maximum:1}),r=(await WebAssembly.instantiate(await a,{env:{memory:o,expf:ri}})).exports.w,c=new Uint8Array(o.buffer),A=new Float32Array(c.buffer),l=i?-1:1;return A[0]=n,e?A[1]=l*t:A[2]=l*t,r(0,e?1:0),c.slice(0,G)}function ri(n){return Math.exp(n)}const rn=yt?20480:51200;async function oc(n){try{n.status=U.Fetching;const a=n.abortController.signal,o=n.opts.fetchReload?"reload":"default",s=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:o,signal:a});if(s.status!=200){console.warn(`fetch error: ${s.status}`),n.status===U.Fetching&&(n.status=U.FetchFailed);return}const r=s.body.getReader(),c=parseInt(s.headers.get("content-length")||"0");n.fileSize=c,n.downloadSize=0,n.downloadSplatCount=0,n.watermarkData=new Uint8Array(0);let A=new Uint8Array(256),l=0,u=[],f;for(;;){let{done:d,value:g}=await r.read();if(d)break;if(n.downloadSize+=g.byteLength,u){if(u.push(g),n.downloadSize<200)continue;const y=new Uint8Array(n.downloadSize);for(let p=0,m=0;p<u.length;p++)y.set(u[p],m),m+=u[p].byteLength;if(f=i(y),!f){u=[y];continue}u=null,g=y.slice(f.headerLength),n.rowLength=f.rowLength,n.dataShDegree=f.shDegree,n.modelSplatCount=f.vertexCount,n.splatData=new Uint8Array(Math.min(n.modelSplatCount,n.fetchLimit)*32)}l+g.byteLength<n.rowLength?(A.set(g,l),l+=g.byteLength):(l=await t(f,n,l,A,g),l&&A.set(g.slice(g.byteLength-l),0)),n.downloadSplatCount>=n.fetchLimit&&n.abortController.abort()}}catch(a){a.name==="AbortError"?(n.opts.url,n.status===U.Fetching&&(n.status=U.FetchAborted)):(console.error(a),n.status===U.Fetching&&(n.status=U.FetchFailed))}finally{n.status===U.Fetching&&(n.status=U.FetchDone)}async function t(a,o,s,r,c){return new Promise(async A=>{let l=(s+c.byteLength)/o.rowLength|0,u=(s+c.byteLength)%o.rowLength,f;s?(f=new Uint8Array(l*o.rowLength),f.set(r.slice(0,s),0),f.set(c.slice(0,c.byteLength-u),s)):f=c.slice(0,l*o.rowLength),o.downloadSplatCount+l>o.fetchLimit&&(l=o.fetchLimit-o.downloadSplatCount,u=0);const d=async()=>{if(l>rn){const g=await e(a,f,rn);La(o,g),o.downloadSplatCount+=rn,l-=rn,f=f.slice(rn*o.rowLength),setTimeout(d)}else{const g=await e(a,f,l);La(o,g),o.downloadSplatCount+=l,A(u)}};await d()})}async function e(a,o,s){const r=new Uint8Array(s*ii),c=new Float32Array(o.buffer),A=new Float32Array(r.buffer);for(let l=0;l<s;l++)A[l*8+0]=c[(l*n.rowLength+a.offsets.x)/4],A[l*8+1]=c[(l*n.rowLength+a.offsets.y)/4],A[l*8+2]=c[(l*n.rowLength+a.offsets.z)/4],A[l*8+3]=Math.exp(c[(l*n.rowLength+a.offsets.scale_0)/4]),A[l*8+4]=Math.exp(c[(l*n.rowLength+a.offsets.scale_1)/4]),A[l*8+5]=Math.exp(c[(l*n.rowLength+a.offsets.scale_2)/4]),r[l*32+24]=K((.5+Ft*c[(l*n.rowLength+a.offsets.f_dc_0)/4])*255),r[l*32+25]=K((.5+Ft*c[(l*n.rowLength+a.offsets.f_dc_1)/4])*255),r[l*32+26]=K((.5+Ft*c[(l*n.rowLength+a.offsets.f_dc_2)/4])*255),r[l*32+27]=K(1/(1+Math.exp(-c[(l*n.rowLength+a.offsets.opacity)/4]))*255),r[l*32+28]=K(c[(l*n.rowLength+a.offsets.rot_0)/4]*128+128),r[l*32+29]=K(c[(l*n.rowLength+a.offsets.rot_1)/4]*128+128),r[l*32+30]=K(c[(l*n.rowLength+a.offsets.rot_2)/4]*128+128),r[l*32+31]=K(c[(l*n.rowLength+a.offsets.rot_3)/4]*128+128);if(a.shDegree==3){const u=new Uint8Array(s*24+8),f=new Uint8Array(s*21+8),d=new Uint32Array(2);d[0]=s,d[1]=Pt,u.set(new Uint8Array(d.buffer),0);const g=new Uint32Array(2);g[0]=s,g[1]=re,f.set(new Uint8Array(g.buffer),0);for(let m=0,I=0;m<s;m++)for(let S=0;S<8;S++)for(let Q=0;Q<3;Q++)u[8+I++]=ai(c[(m*n.rowLength+a.offsets["f_rest_"+(S+Q*15)])/4]);for(let m=0,I=0;m<s;m++)for(let S=8;S<15;S++)for(let Q=0;Q<3;Q++)f[8+I++]=ai(c[(m*n.rowLength+a.offsets["f_rest_"+(S+Q*15)])/4]);const y=await Et(u);n.sh12Data.push(y.datas);const p=await Et(f);n.sh3Data.push(p.datas)}else if(a.shDegree==2){const u=new Uint8Array(s*24+8),f=new Uint32Array(2);f[0]=s,f[1]=Pt,u.set(new Uint8Array(f.buffer),0);for(let g=0,y=0;g<s;g++)for(let p=0;p<8;p++)for(let m=0;m<3;m++)u[8+y++]=ai(c[(g*n.rowLength+a.offsets["f_rest_"+(p+m*8)])/4]);const d=await Et(u);n.sh12Data.push(d.datas)}else if(a.shDegree==1){const u=new Uint8Array(s*9+8),f=new Uint32Array(2);f[0]=s,f[1]=tn,u.set(new Uint8Array(f.buffer),0);for(let g=0,y=0;g<s;g++)for(let p=0;p<3;p++)for(let m=0;m<3;m++)u[8+y++]=ai(c[(g*n.rowLength+a.offsets["f_rest_"+(p+m*3)])/4]);const d=await Et(u);n.sh12Data.push(d.datas)}return await on(r,s)}function i(a){let o=new TextDecoder().decode(a.slice(0,2048));const s=`end_header
6
+ `,r=o.indexOf(s);if(r<0){if(a.byteLength>1024*2)throw new Error("Unable to read .ply file header");return null}if(!o.startsWith("ply")||o.indexOf("format binary_little_endian 1.0")<0)throw new Error("Unknow .ply file header");const c=parseInt(/element vertex (\d+)\n/.exec(o)[1]);let A=0,l={},u={};const f={double:"getFloat64",int:"getInt32",uint:"getUint32",float:"getFloat32",short:"getInt16",ushort:"getUint16",uchar:"getUint8"};for(let y of o.slice(0,r).split(`
7
+ `).filter(p=>p.startsWith("property "))){const[p,m,I]=y.split(" "),S=f[m]||"getInt8";u[I]=S,l[I]=A,A+=parseInt(S.replace(/[^\d]/g,""))/8}let d=0;u.f_rest_44?d=3:u.f_rest_23?d=2:u.f_rest_8&&(d=1);const g=["x","y","z","scale_0","scale_1","scale_2","f_dc_0","f_dc_1","f_dc_2","opacity","rot_0","rot_1","rot_2","rot_3"];for(let y=0;y<g.length;y++){const p=g[y];if(!u[p])throw new Error(`Property not found: ${p}`)}return{headerLength:r+s.length,offsets:l,rowLength:A,vertexCount:c,shDegree:d}}}function La(n,t){let e=t.byteLength/G;const i=Math.min(n.fetchLimit,n.modelSplatCount);n.dataSplatCount+e>i?(e=i-n.dataSplatCount,n.splatData.set(t.slice(0,e*G),n.dataSplatCount*G)):n.splatData.set(t,n.dataSplatCount*G);const a=new Float32Array(t.buffer);for(let s=0,r=0,c=0,A=0;s<e;s++)r=a[s*8],c=a[s*8+1],A=a[s*8+2],n.minX=Math.min(n.minX,r),n.maxX=Math.max(n.maxX,r),n.minY=Math.min(n.minY,c),n.maxY=Math.max(n.maxY,c),n.minZ=Math.min(n.minZ,A),n.maxZ=Math.max(n.maxZ,A);n.dataSplatCount+=e;const o=0;n.currentRadius=Math.sqrt(n.maxX*n.maxX+o*o+n.maxZ*n.maxZ),n.aabbCenter=new h.Vector3((n.minX+n.maxX)/2,(n.minY+n.maxY)/2,(n.minZ+n.maxZ)/2),n.maxRadius=.5*Math.sqrt(Math.pow(n.maxX-n.minX,2)+Math.pow(n.maxY-n.minY,2)+Math.pow(n.maxZ-n.minZ,2)),n.metaMatrix&&n.aabbCenter.applyMatrix4(n.metaMatrix)}const Qe=yt?20480:51200;async function rc(n){let t=0;try{n.status=U.Fetching;const i=n.abortController.signal,a=n.opts.fetchReload?"reload":"default",o=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:a,signal:i});if(o.status!=200){console.warn(`fetch error: ${o.status}`),n.status===U.Fetching&&(n.status=U.FetchFailed);return}const s=o.body.getReader(),r=parseInt(o.headers.get("content-length")||"0");n.rowLength=32,n.fileSize=r;const c=r/n.rowLength|0;if(c<1){console.warn("data empty",n.opts.url),n.status===U.Fetching&&(n.status=U.Invalid);return}n.CompressionRatio="7.75x",n.modelSplatCount=c,n.downloadSplatCount=0,n.splatData=new Uint8Array(Math.min(n.modelSplatCount,n.fetchLimit)*32),n.watermarkData=new Uint8Array(0);let A=new Uint8Array(32),l=0;for(;;){let{done:u,value:f}=await s.read();if(u)break;l+f.byteLength<n.rowLength?(A.set(f,l),l+=f.byteLength,t+=f.length,n.downloadSize=t):(l=await e(n,l,A,f),l&&A.set(f.slice(f.byteLength-l),0)),n.downloadSplatCount>=n.fetchLimit&&n.abortController.abort()}}catch(i){i.name==="AbortError"?(n.opts.url,n.status===U.Fetching&&(n.status=U.FetchAborted)):(console.error(i),n.status===U.Fetching&&(n.status=U.FetchFailed))}finally{n.status===U.Fetching&&(n.status=U.FetchDone)}async function e(i,a,o,s){return new Promise(async r=>{let c=(a+s.byteLength)/i.rowLength|0,A=(a+s.byteLength)%i.rowLength,l;a?(l=new Uint8Array(c*i.rowLength),l.set(o.slice(0,a),0),l.set(s.slice(0,s.byteLength-A),a)):l=s.slice(0,c*i.rowLength),i.downloadSplatCount+c>i.fetchLimit&&(c=i.fetchLimit-i.downloadSplatCount,A=0);const u=async()=>{if(c>Qe){const f=await on(l,Qe);Ra(i,f),i.downloadSplatCount+=Qe,t+=Qe*i.rowLength,i.downloadSize=t,c-=Qe,l=l.slice(Qe*i.rowLength),setTimeout(u)}else{const f=await on(l,c);Ra(i,f),i.downloadSplatCount+=c,t+=c*i.rowLength,i.downloadSize=t,r(A)}};await u()})}}function Ra(n,t){let e=t.byteLength/G;const i=Math.min(n.fetchLimit,n.modelSplatCount);n.dataSplatCount+e>i?(e=i-n.dataSplatCount,n.splatData.set(t.slice(0,e*G),n.dataSplatCount*G)):n.splatData.set(t,n.dataSplatCount*G);const a=new Float32Array(t.buffer);for(let s=0,r=0,c=0,A=0;s<e;s++)r=a[s*8],c=a[s*8+1],A=a[s*8+2],n.minX=Math.min(n.minX,r),n.maxX=Math.max(n.maxX,r),n.minY=Math.min(n.minY,c),n.maxY=Math.max(n.maxY,c),n.minZ=Math.min(n.minZ,A),n.maxZ=Math.max(n.maxZ,A);n.dataSplatCount+=e;const o=n.header?.MinTopY||0;n.currentRadius=Math.sqrt(n.maxX*n.maxX+o*o+n.maxZ*n.maxZ),n.aabbCenter=new h.Vector3((n.minX+n.maxX)/2,(n.minY+n.maxY)/2,(n.minZ+n.maxZ)/2),n.maxRadius=.5*Math.sqrt(Math.pow(n.maxX-n.minX,2)+Math.pow(n.maxY-n.minY,2)+Math.pow(n.maxZ-n.minZ,2)),n.metaMatrix&&n.aabbCenter.applyMatrix4(n.metaMatrix)}const cc=[Er,br];async function lc(n){try{n.status=U.Fetching;const t=n.abortController.signal,e=n.opts.fetchReload?"reload":"default",i=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:e,signal:t});if(i.status!=200){console.warn(`fetch error: ${i.status}`),n.status===U.Fetching&&(n.status=U.FetchFailed);return}const a=i.body.getReader(),o=parseInt(i.headers.get("content-length")||"0");if(o-Me<pr){console.warn("data empty",n.opts.url),n.status===U.Fetching&&(n.status=U.Invalid);return}n.fileSize=o;let r=[],c=new Uint8Array(Me),A=new Uint8Array(G),l=0,u=!1,f=0,d=0,g,y=!1,p=0;for(;;){let{done:m,value:I}=await a.read();if(m)break;if(n.downloadSize+=I.byteLength,r){r.push(I);let k=0;for(let C=0;C<r.length;C++)k+=r[C].byteLength;if(k<Me)continue;let M=0;for(let C=0;C<r.length;C++)M+r[C].byteLength<Me?(c.set(r[C],M),M+=r[C].byteLength):(c.set(r[C].slice(0,Me-M),M),I=new Uint8Array(r[C].slice(Me-M)));const b=await sc(c);if(!b){n.abortController.abort(),n.status===U.Fetching&&(n.status=U.Invalid),console.error("invalid spx format");continue}if(n.meta.autoCut>1&&!uc(b)){n.abortController.abort(),n.status===U.Fetching&&(n.status=U.Invalid),console.error("invalid LOD format");continue}if(n.header=b,n.CompressionRatio=oi(b.SplatCount,o),n.modelSplatCount=b.SplatCount,n.dataShDegree=b.ShDegree,n.aabbCenter=new h.Vector3((b.MinX+b.MaxX)/2,(b.MinY+b.MaxY)/2,(b.MinZ+b.MaxZ)/2),n.maxRadius=.5*Math.sqrt(Math.pow(b.MaxX-b.MinX,2)+Math.pow(b.MaxY-b.MinY,2)+Math.pow(b.MaxZ-b.MinZ,2)),n.metaMatrix&&n.aabbCenter.applyMatrix4(n.metaMatrix),r=null,c=null,!cc.includes(b.ExclusiveId)){n.abortController.abort(),n.status=U.Invalid,console.error("Unrecognized format, creater id =",b.CreaterId,", exclusive id =",b.ExclusiveId,b.Comment);continue}}if(!u){if(l+I.byteLength<4){A.set(I,l),l+=I.byteLength;continue}const k=new Uint8Array(l+I.byteLength);k.set(A.slice(0,l),0),k.set(I,l),I=k.slice(4),l=0,u=!0,g=[],d=0;const M=new Int32Array(k.slice(0,4).buffer)[0];y=M<0,p=Math.abs(M)>>28>>>0,f=Math.abs(M)<<4>>>4}let S=d+I.byteLength;if(g.push(I),S<f){d+=I.byteLength;continue}for(;S>=f;){let k=new Uint8Array(f),M=0;for(let C=0;C<g.length;C++)M+g[C].byteLength<f?(k.set(g[C],M),M+=g[C].byteLength):(k.set(g[C].slice(0,f-M),M),I=new Uint8Array(g[C].slice(f-M)));y&&(p===0?k=await ka(k):p===1?k=await Xr(k):console.error("unsuported compress type:",p));const b=await Et(k,n.header);if(!b.success){console.error("spx block data parser failed. block format:",b.blockFormat),n.abortController.abort(),n.status=U.Invalid;break}if(b.isSplat)n.downloadSplatCount+=b.splatCount,Ac(n,b.datas);else{const C=Math.min(n.fetchLimit,n.modelSplatCount);if(b.isSh23){if(n.sh12Count+b.splatCount>C){const v=C-n.sh12Count;n.sh12Data.push(b.datas.slice(0,v*16)),n.sh12Count+=v}else n.sh12Data.push(b.datas),n.sh12Count+=b.splatCount;if(n.sh3Count+b.splatCount>C){const v=C-n.sh3Count;n.sh3Data.push(b.dataSh3.slice(0,v*16)),n.sh3Count+=v}else n.sh3Data.push(b.dataSh3),n.sh3Count+=b.splatCount}else if(b.isSh3)if(n.sh3Count+b.splatCount>C){const v=C-n.sh3Count;n.sh3Data.push(b.datas.slice(0,v*16)),n.sh3Count+=v}else n.sh3Data.push(b.datas),n.sh3Count+=b.splatCount;else if(n.sh12Count+b.splatCount>C){const v=C-n.sh12Count;n.sh12Data.push(b.datas.slice(0,v*16)),n.sh12Count+=v}else n.sh12Data.push(b.datas),n.sh12Count+=b.splatCount}if(I.byteLength<4){A.set(I,0),l=I.byteLength,u=!1;break}else{const C=new Int32Array(I.slice(0,4).buffer)[0];y=C<0,p=Math.abs(C)>>28>>>0,f=Math.abs(C)<<4>>>4,I=I.slice(4),S=I.byteLength,g=[I],d=I.byteLength}}const Q=n.fetchLimit;n.header.ShDegree===3?n.downloadSplatCount>=Q&&n.sh12Count>=Q&&n.sh3Count>=Q&&n.abortController.abort():n.header.ShDegree?n.downloadSplatCount>=Q&&n.sh12Count>=Q&&n.abortController.abort():n.downloadSplatCount>=Q&&n.abortController.abort()}}catch(t){t.name==="AbortError"?(console.warn("Fetch Abort",n.opts.url),n.status===U.Fetching&&(n.status=U.FetchAborted)):(console.error(t),n.status===U.Fetching&&(n.status=U.FetchFailed),n.abortController.abort())}finally{n.status===U.Fetching&&(n.status=U.FetchDone)}}function Ac(n,t){let e=!!n.meta.autoCut,i=t.byteLength/32;const a=4096;if(!e){const c=Math.min(n.fetchLimit,n.modelSplatCount);if(!n.splatData&&(n.splatData=new Uint8Array(c*G)),!n.watermarkData&&(n.watermarkData=new Uint8Array(0)),n.dataSplatCount+i>c&&(i=c-n.dataSplatCount,!i))return;const A=new Float32Array(t.buffer),l=new Uint32Array(t.buffer);for(let f=0,d=0,g=0,y=0;f<i;f++)if(d=A[f*8],g=A[f*8+1],y=A[f*8+2],n.minX=Math.min(n.minX,d),n.maxX=Math.max(n.maxX,d),n.minY=Math.min(n.minY,g),n.maxY=Math.max(n.maxY,g),n.minZ=Math.min(n.minZ,y),n.maxZ=Math.max(n.maxZ,y),l[f*8+3]>>16){if(n.watermarkCount*G===n.watermarkData.byteLength){const p=new Uint8Array((n.watermarkCount+a)*G);p.set(n.watermarkData,0),n.watermarkData=p}n.watermarkData.set(t.slice(f*32,f*32+32),n.watermarkCount++*G)}else n.splatData.set(t.slice(f*32,f*32+32),n.dataSplatCount++*G);const u=n.header.MinTopY||0;n.currentRadius=Math.sqrt(n.maxX*n.maxX+u*u+n.maxZ*n.maxZ);return}let o=Math.min(Math.max(n.meta.autoCut,2),50);!n.watermarkData&&(n.watermarkData=new Uint8Array(0));const s=new Float32Array(t.buffer),r=new Uint32Array(t.buffer);for(let c=0,A=Math.floor(t.byteLength/G),l=0,u=0,f=0,d="";c<A;c++){if(r[c*8+3]>>16){if(n.watermarkCount*G===n.watermarkData.byteLength){const m=new Uint8Array((n.watermarkCount+a)*G);m.set(n.watermarkData,0),n.watermarkData=m}n.watermarkData.set(t.slice(c*32,c*32+32),n.watermarkCount++*G);continue}l=s[c*8],u=s[c*8+1],f=s[c*8+2];let g=Math.min(o-1,Math.floor(Math.max(0,l-n.header.MinX)/(n.header.MaxX-n.header.MinX)*o)),y=Math.min(o-1,Math.floor(Math.max(0,f-n.header.MinZ)/(n.header.MaxZ-n.header.MinZ)*o));d=`${g}-${y}`;let p=n.map.get(d);if(!p)p={},p.minX=l,p.maxX=l,p.minY=u,p.maxY=u,p.minZ=f,p.maxZ=f,p.center=new h.Vector3(l,u,f),n.metaMatrix&&p.center.applyMatrix4(n.metaMatrix),p.radius=0,p.splatData=new Uint8Array(a*G),p.splatData.set(t.slice(c*G,c*G+G),0),p.splatCount=1,n.map.set(d,p);else{if(p.splatData.byteLength/G==p.splatCount){const Q=new Uint8Array(p.splatData.byteLength+a*G);Q.set(p.splatData,0),p.splatData=Q}p.minX=Math.min(p.minX,l),p.maxX=Math.max(p.maxX,l),p.minY=Math.min(p.minY,u),p.maxY=Math.max(p.maxY,u),p.minZ=Math.min(p.minZ,f),p.maxZ=Math.max(p.maxZ,f),p.center=new h.Vector3((p.maxX+p.minX)/2,(p.maxY+p.minY)/2,(p.maxZ+p.minZ)/2),n.metaMatrix&&p.center.applyMatrix4(n.metaMatrix);const m=p.maxX-p.minX,I=p.maxY-p.minY,S=p.maxZ-p.minZ;p.radius=Math.sqrt(m*m+I*I+S*S)/2,n.metaMatrix&&(p.radius*=n.metaMatrix.getMaxScaleOnAxis()),p.splatData.set(t.slice(c*G,c*G+G),p.splatCount++*G)}n.dataSplatCount++}}function uc(n){return((n?.Flag1||0)&128)>0}const X=yt?20480:51200,Fs=16,_a=511;async function dc(n){try{n.status=U.Fetching;const a=n.abortController.signal,o=n.opts.fetchReload?"reload":"default",s=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:o,signal:a});if(s.status!=200){console.warn(`fetch error: ${s.status}`),n.status===U.Fetching&&(n.status=U.FetchFailed);return}const r=s.body.getReader(),c=parseInt(s.headers.get("content-length")||"0");n.fileSize=c,n.downloadSize=0,n.downloadSplatCount=0,n.watermarkData=new Uint8Array(0);const A=new Uint8Array(c);for(;;){let{done:f,value:d}=await r.read();if(f)break;A.set(d,n.downloadSize),n.downloadSize+=d.length}const l=await ka(A);if(!l||l.length<16){console.error("Invalid spz format"),n.status=U.Invalid;return}const u=i(l);n.CompressionRatio=oi(u.numPoints,c),n.spzVersion=u.version,n.modelSplatCount=u.numPoints,n.dataShDegree=u.shDegree,n.splatData=new Uint8Array(Math.min(n.modelSplatCount,n.fetchLimit)*32),await t(u,n,l)}catch(a){a.name==="AbortError"?(n.opts.url,n.status===U.Fetching&&(n.status=U.FetchAborted)):(console.error(a),n.status===U.Fetching&&(n.status=U.FetchFailed))}finally{n.status===U.Fetching&&(n.status=U.FetchDone)}async function t(a,o,s){const r=a.numPoints*9,c=a.numPoints,A=a.numPoints*3,l=a.numPoints*3,u=a.numPoints*(a.version==2?3:4),f=Fs,d=f+r,g=d+c,y=g+A,p=y+l,m=p+u,I=Math.min(a.numPoints,o.fetchLimit),S=Math.ceil(I/X);for(let Q=0;Q<S;Q++){let k=Q<S-1?X:I-Q*X;o.dataSplatCount+k>o.fetchLimit&&(k=o.fetchLimit-o.dataSplatCount);const M=new Uint8Array(k*20+8),b=new Uint32Array(2);b[0]=k,b[1]=vr,M.set(new Uint8Array(b.buffer),0);let C=8;for(let B=0;B<k;B++)M[C++]=s[f+(Q*X+B)*9+0],M[C++]=s[f+(Q*X+B)*9+1],M[C++]=s[f+(Q*X+B)*9+2];for(let B=0;B<k;B++)M[C++]=s[f+(Q*X+B)*9+3],M[C++]=s[f+(Q*X+B)*9+4],M[C++]=s[f+(Q*X+B)*9+5];for(let B=0;B<k;B++)M[C++]=s[f+(Q*X+B)*9+6],M[C++]=s[f+(Q*X+B)*9+7],M[C++]=s[f+(Q*X+B)*9+8];for(let B=0;B<k;B++)M[C++]=s[y+(Q*X+B)*3];for(let B=0;B<k;B++)M[C++]=s[y+(Q*X+B)*3+1];for(let B=0;B<k;B++)M[C++]=s[y+(Q*X+B)*3+2];for(let B=0;B<k;B++)M[C++]=Ps(s[g+(Q*X+B)*3]);for(let B=0;B<k;B++)M[C++]=Ps(s[g+(Q*X+B)*3+1]);for(let B=0;B<k;B++)M[C++]=Ps(s[g+(Q*X+B)*3+2]);const v=[];if(a.version==2)for(let B=0,R=0,L=0,_=0;B<k;B++)M[C++]=s[d+(Q*X+B)],R=s[p+(Q*X+B)*3+0],L=s[p+(Q*X+B)*3+1],_=s[p+(Q*X+B)*3+2],v.push(gc(R,L,_));else for(let B=0,R=0,L=0,_=0,D=0;B<k;B++){M[C++]=s[d+(Q*X+B)],R=s[p+(Q*X+B)*4+0],L=s[p+(Q*X+B)*4+1],_=s[p+(Q*X+B)*4+2],D=s[p+(Q*X+B)*4+3];const T=R|L<<8|_<<16|D<<24,N=T>>>30;let H=T,P=0,O=[];for(let Y=3;Y>=0;Y--)if(Y!==N){const q=H&_a,W=(H>>9&1)>0;O[Y]=Math.SQRT1_2*(q/_a),W&&(O[Y]=-O[Y]),P+=O[Y]*O[Y],H=H>>10}O[N]=Math.sqrt(Math.max(1-P,0));for(let Y=0;Y<4;Y++)O[Y]=K(O[Y]*128+128);v.push(O)}for(let B=0;B<k;B++)M[C++]=v[B][0];for(let B=0;B<k;B++)M[C++]=v[B][1];for(let B=0;B<k;B++)M[C++]=v[B][2];for(let B=0;B<k;B++)M[C++]=v[B][3];const x=await Et(M);if(e(a,o,x.datas),a.shDegree===1){const B=new Uint8Array(k*9+8),R=new Uint32Array(2);R[0]=k,R[1]=tn,B.set(new Uint8Array(R.buffer),0);for(let _=0,D=8;_<k;_++)B.set(s.slice(m+(Q*X+_)*9,m+(Q*X+_)*9+9),D),D+=9;const L=await Et(B);o.sh12Data.push(L.datas)}else if(a.shDegree===2){const B=new Uint8Array(k*24+8),R=new Uint32Array(2);R[0]=k,R[1]=Pt,B.set(new Uint8Array(R.buffer),0);for(let _=0,D=8;_<k;_++)B.set(s.slice(m+(Q*X+_)*24,m+(Q*X+_)*24+24),D),D+=24;const L=await Et(B);o.sh12Data.push(L.datas)}else if(a.shDegree===3){const B=new Uint8Array(k*24+8),R=new Uint32Array(2);R[0]=k,R[1]=Pt,B.set(new Uint8Array(R.buffer),0);for(let N=0,H=8;N<k;N++)B.set(s.slice(m+(Q*X+N)*45,m+(Q*X+N)*45+24),H),H+=24;const L=await Et(B);o.sh12Data.push(L.datas);const _=new Uint8Array(k*21+8),D=new Uint32Array(2);D[0]=k,D[1]=re,_.set(new Uint8Array(D.buffer),0);for(let N=0,H=8;N<k;N++)_.set(s.slice(m+(Q*X+N)*45+24,m+(Q*X+N)*45+45),H),H+=21;const T=await Et(_);o.sh3Data.push(T.datas)}if(o.dataSplatCount>=o.fetchLimit)break}}function e(a,o,s){let r=s.byteLength/G;const c=Math.min(o.fetchLimit,a.numPoints);o.dataSplatCount+r>c?(r=c-o.dataSplatCount,o.splatData.set(s.slice(0,r*G),o.dataSplatCount*G)):o.splatData.set(s,o.dataSplatCount*G);const A=new Float32Array(s.buffer);for(let u=0,f=0,d=0,g=0;u<r;u++)f=A[u*8],d=A[u*8+1],g=A[u*8+2],o.minX=Math.min(o.minX,f),o.maxX=Math.max(o.maxX,f),o.minY=Math.min(o.minY,d),o.maxY=Math.max(o.maxY,d),o.minZ=Math.min(o.minZ,g),o.maxZ=Math.max(o.maxZ,g);o.dataSplatCount+=r,o.downloadSplatCount+=r;const l=0;o.currentRadius=Math.sqrt(o.maxX*o.maxX+l*l+o.maxZ*o.maxZ),o.aabbCenter=new h.Vector3((o.minX+o.maxX)/2,(o.minY+o.maxY)/2,(o.minZ+o.maxZ)/2),o.maxRadius=.5*Math.sqrt(Math.pow(o.maxX-o.minX,2)+Math.pow(o.maxY-o.minY,2)+Math.pow(o.maxZ-o.minZ,2)),o.metaMatrix&&o.aabbCenter.applyMatrix4(o.metaMatrix)}function i(a){const o=a.slice(0,Fs),s=new Uint32Array(o.buffer),r={};if(r.magic=s[0],r.version=s[1],r.numPoints=s[2],r.shDegree=o[12],r.fractionalBits=o[13],r.flags=o[14],r.reserved=o[15],r.magic!==1347635022)throw new Error("[SPZ ERROR] header not found");if(r.version<2||r.version>3)throw new Error("[SPZ ERROR] version not supported:"+r.version);if(r.shDegree>3)throw new Error("[SPZ ERROR] unsupported SH degree:"+r.shDegree);if(r.fractionalBits!==12)throw new Error("[SPZ ERROR] unsupported FractionalBits:"+r.fractionalBits);const c=r.version==2?19:20;let A=0;if(r.shDegree===1?A=9:r.shDegree===2?A=24:r.shDegree===3&&(A=45),a.length!==Fs+r.numPoints*(c+A))throw new Error("[SPZ ERROR] invalid spz data");return r}}function Ps(n){const t=(n-127.5)/38.25;return K((.5+Ft*t)*255)}function gc(n,t,e){const i=n/127.5-1,a=t/127.5-1,o=e/127.5-1,s=Math.sqrt(Math.max(0,1-(i*i+a*a+o*o)));return[K(s*128+128),K(i*128+128),K(a*128+128),K(o*128+128)]}async function Xt(n,t){if(!n)return new Uint8Array(0);const e=new AbortController,i=e.signal;try{t?.fire(En);const a=await fetch(n,{mode:"cors",credentials:"omit",cache:"reload",signal:i});if(a.status!=200)return console.warn(`fetch error: ${a.status}`),null;const o=a.body.getReader(),s=parseInt(a.headers.get("content-length")||"0"),r=new Uint8Array(s);let c=0;for(;;){let{done:A,value:l}=await o.read();if(A)break;r.set(l,c),c+=l.length,t?.fire(vn,100*c/s)}return r}catch(a){console.error(a),e.abort()}return null}const Fa=yt?20480:51200,xe=Math.sqrt(2);async function hc(n){try{if(n.status=U.Fetching,n.opts.url.startsWith("blob:")||n.opts.url.endsWith(".sog")){n.status=U.Fetching;const t=n.abortController.signal,e=n.opts.fetchReload?"reload":"default",i=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:e,signal:t});if(i.status!=200){console.warn(`fetch error: ${i.status}`),n.status===U.Fetching&&(n.status=U.FetchFailed);return}const a=i.body.getReader(),o=parseInt(i.headers.get("content-length")||"0");n.fileSize=o,n.downloadSize=0,n.downloadSplatCount=0,n.watermarkData=new Uint8Array(0);const s=new Uint8Array(o);for(;;){let{done:l,value:u}=await a.read();if(l)break;s.set(u,n.downloadSize),n.downloadSize+=u.length}const r=nc(s),c=JSON.parse(ic(r.get("meta.json"))),A=c.count||c.means.shape[0];n.modelSplatCount=A,n.CompressionRatio=oi(A,o),n.sogVersion=c.version?c.version:1,await Pa(n,r,c)}else{const t=await fetch(n.opts.url,{mode:"cors",credentials:"omit",cache:"reload"});if(t.status!=200)return console.error(`fetch error: ${t.status}`);const e=await t.json(),i=n.opts.url.split("/"),a=new Map,o=e.count||e.means.shape[0];n.modelSplatCount=o;const s=e.means.files[0];i[i.length-1]=s;const r=i.join("/"),c=e.means.files[1];i[i.length-1]=c;const A=i.join("/"),l=e.scales.files[0];i[i.length-1]=l;const u=i.join("/"),f=e.quats.files[0];i[i.length-1]=f;const d=i.join("/"),g=e.sh0.files[0];i[i.length-1]=g;const y=i.join("/"),p=e.shN?e.shN.files[0]:"shN_centroids.webp";i[i.length-1]=p;const m=i.join("/"),I=e.shN?e.shN.files[1]:"shN_labels.webp";i[i.length-1]=I;const S=i.join("/"),[Q,k,M,b,C,v,x]=await Promise.all([Xt(r),Xt(A),Xt(u),Xt(d),Xt(y),Xt(e.shN?m:""),Xt(e.shN?S:"")]);a.set(s,Q),a.set(c,k),a.set(l,M),a.set(f,b),a.set(g,C),a.set(p,v),a.set(I,x);const B=JSON.stringify(e).length+Q.length+k.length+M.length+b.length+C.length+v.length+x.length;n.fileSize=B,n.downloadSize=B,n.watermarkData=new Uint8Array(0),n.CompressionRatio=oi(o,B),n.sogVersion=e.version?e.version:1,await Pa(n,a,e)}}catch(t){t.name==="AbortError"?(n.opts.url,n.status===U.Fetching&&(n.status=U.FetchAborted)):(console.error(t),n.status===U.Fetching&&(n.status=U.FetchFailed))}finally{n.status===U.Fetching&&(n.status=U.FetchDone)}}async function Pa(n,t,e){const i=!e.version,a=i?e.means.shape[0]:e.count,o=Math.min(a,n.fetchLimit),s=e.shN?3:0,r=new Uint8Array(o*ii);n.modelSplatCount=a,n.dataShDegree=s,n.splatData=r;const{rgba:c}=await wt(t.get(e.means.files[0])),{rgba:A}=await wt(t.get(e.means.files[1])),{rgba:l}=await wt(t.get(e.scales.files[0])),{rgba:u}=await wt(t.get(e.quats.files[0])),{rgba:f}=await wt(t.get(e.sh0.files[0])),{rgba:d,width:g}=e.shN?await wt(t.get(e.shN.files[0])):{rgba:null,width:0},{rgba:y}=e.shN?await wt(t.get(e.shN.files[1])):{rgba:null};for(;o>n.dataSplatCount;){const S=i?await p(n.dataSplatCount):await m(n.dataSplatCount);n.splatData.set(S.slice(0),n.dataSplatCount*G),I(n,S),n.dataSplatCount+=S.byteLength/G,n.downloadSplatCount=n.dataSplatCount}async function p(S){const Q=Math.min(S+Fa,o),k=Q-S,M=new Uint8Array(k*ii),b=new Float32Array(M.buffer);for(let C=S,v=0;C<Q;C++){let x=(A[C*4+0]<<8|c[C*4+0])/65535,B=(A[C*4+1]<<8|c[C*4+1])/65535,R=(A[C*4+2]<<8|c[C*4+2])/65535,L=e.means.mins[0]+(e.means.maxs[0]-e.means.mins[0])*x,_=e.means.mins[1]+(e.means.maxs[1]-e.means.mins[1])*B,D=e.means.mins[2]+(e.means.maxs[2]-e.means.mins[2])*R;L=Math.sign(L)*(Math.exp(Math.abs(L))-1),_=Math.sign(_)*(Math.exp(Math.abs(_))-1),D=Math.sign(D)*(Math.exp(Math.abs(D))-1);let T=l[C*4+0]/255,N=l[C*4+1]/255,H=l[C*4+2]/255;T=Math.exp(e.scales.mins[0]+(e.scales.maxs[0]-e.scales.mins[0])*T),N=Math.exp(e.scales.mins[1]+(e.scales.maxs[1]-e.scales.mins[1])*N),H=Math.exp(e.scales.mins[2]+(e.scales.maxs[2]-e.scales.mins[2])*H);let P=(u[C*4+0]/255-.5)*xe,O=(u[C*4+1]/255-.5)*xe,Y=(u[C*4+2]/255-.5)*xe,q=Math.sqrt(Math.max(0,1-P*P-O*O-Y*Y)),W=u[C*4+3]-252,J,V,ut,ot;W==0?(J=q,V=P,ut=O,ot=Y):W==1?(J=P,V=q,ut=O,ot=Y):W==2?(J=P,V=O,ut=q,ot=Y):(J=P,V=O,ut=Y,ot=q);let Gt=e.sh0.mins[0]+(e.sh0.maxs[0]-e.sh0.mins[0])*(f[C*4+0]/255),Rt=e.sh0.mins[1]+(e.sh0.maxs[1]-e.sh0.mins[1])*(f[C*4+1]/255),$=e.sh0.mins[2]+(e.sh0.maxs[2]-e.sh0.mins[2])*(f[C*4+2]/255),Z=e.sh0.mins[3]+(e.sh0.maxs[3]-e.sh0.mins[3])*(f[C*4+3]/255);b[v*8+0]=L,b[v*8+1]=_,b[v*8+2]=D,b[v*8+3]=T,b[v*8+4]=N,b[v*8+5]=H,M[v*32+24]=K((.5+Ft*Gt)*255),M[v*32+25]=K((.5+Ft*Rt)*255),M[v*32+26]=K((.5+Ft*$)*255),M[v*32+27]=K(1/(1+Math.exp(-Z))*255),M[v*32+28]=K(J*128+128),M[v*32+29]=K(V*128+128),M[v*32+30]=K(ut*128+128),M[v*32+31]=K(ot*128+128),v++}if(s>0){const C=new Uint32Array(2);C[0]=k,C[1]=Pt;const v=new Uint8Array(8+k*24);v.set(new Uint8Array(C.buffer),0);const x=new Uint32Array(2);x[0]=k,x[1]=re;const B=new Uint8Array(8+k*21);B.set(new Uint8Array(x.buffer),0);for(let _=S,D=0;_<Q;_++){const T=y[_*4+0]+(y[_*4+1]<<8),N=(T&63)*15,P=(T>>6)*g+N,O=new Uint8Array(9),Y=new Uint8Array(15),q=new Uint8Array(21);let W;for(let J=0;J<3;J++){for(let V=0;V<3;V++)W=(e.shN.maxs-e.shN.mins)*d[(P+V)*4+J]/255+e.shN.mins,O[V*3+J]=K(Math.round(W*128)+128);for(let V=0;V<5;V++)W=(e.shN.maxs-e.shN.mins)*d[(P+3+V)*4+J]/255+e.shN.mins,Y[V*3+J]=K(Math.round(W*128)+128);for(let V=0;V<7;V++)W=(e.shN.maxs-e.shN.mins)*d[(P+8+V)*4+J]/255+e.shN.mins,q[V*3+J]=K(Math.round(W*128)+128)}v.set(O,8+D*24),v.set(Y,8+D*24+9),B.set(q,8+D*21),D++}const R=await Et(v);n.sh12Data.push(R.datas);const L=await Et(B);n.sh3Data.push(L.datas)}return await on(M,k)}async function m(S){const Q=Math.min(S+Fa,o),k=Q-S,M=new Uint8Array(k*ii),b=new Float32Array(M.buffer);for(let C=S,v=0;C<Q;C++){let x=(A[C*4+0]<<8|c[C*4+0])/65535,B=(A[C*4+1]<<8|c[C*4+1])/65535,R=(A[C*4+2]<<8|c[C*4+2])/65535,L=e.means.mins[0]+(e.means.maxs[0]-e.means.mins[0])*x,_=e.means.mins[1]+(e.means.maxs[1]-e.means.mins[1])*B,D=e.means.mins[2]+(e.means.maxs[2]-e.means.mins[2])*R;L=Math.sign(L)*(Math.exp(Math.abs(L))-1),_=Math.sign(_)*(Math.exp(Math.abs(_))-1),D=Math.sign(D)*(Math.exp(Math.abs(D))-1);let T=Math.exp(e.scales.codebook[l[C*4+0]]),N=Math.exp(e.scales.codebook[l[C*4+1]]),H=Math.exp(e.scales.codebook[l[C*4+2]]),P=(u[C*4+0]/255-.5)*xe,O=(u[C*4+1]/255-.5)*xe,Y=(u[C*4+2]/255-.5)*xe,q=Math.sqrt(Math.max(0,1-P*P-O*O-Y*Y)),W=u[C*4+3]-252,J,V,ut,ot;W==0?(J=q,V=P,ut=O,ot=Y):W==1?(J=P,V=q,ut=O,ot=Y):W==2?(J=P,V=O,ut=q,ot=Y):(J=P,V=O,ut=Y,ot=q);let Gt=e.sh0.codebook[f[C*4+0]],Rt=e.sh0.codebook[f[C*4+1]],$=e.sh0.codebook[f[C*4+2]],Z=f[C*4+3];b[v*8+0]=L,b[v*8+1]=_,b[v*8+2]=D,b[v*8+3]=T,b[v*8+4]=N,b[v*8+5]=H,M[v*32+24]=K((.5+Ft*Gt)*255),M[v*32+25]=K((.5+Ft*Rt)*255),M[v*32+26]=K((.5+Ft*$)*255),M[v*32+27]=Z,M[v*32+28]=K(J*128+128),M[v*32+29]=K(V*128+128),M[v*32+30]=K(ut*128+128),M[v*32+31]=K(ot*128+128),v++}if(s>0){const C=new Uint32Array(2);C[0]=k,C[1]=Pt;const v=new Uint8Array(8+k*24);v.set(new Uint8Array(C.buffer),0);const x=new Uint32Array(2);x[0]=k,x[1]=re;const B=new Uint8Array(8+k*21);B.set(new Uint8Array(x.buffer),0);for(let _=S,D=0;_<Q;_++){const T=y[_*4+0]+(y[_*4+1]<<8),N=(T&63)*15,P=(T>>6)*g+N,O=new Uint8Array(9),Y=new Uint8Array(15),q=new Uint8Array(21);let W;for(let J=0;J<3;J++){for(let V=0;V<3;V++)W=e.shN.codebook[d[(P+V)*4+J]],O[V*3+J]=K(Math.round(W*128)+128);for(let V=0;V<5;V++)W=e.shN.codebook[d[(P+3+V)*4+J]],Y[V*3+J]=K(Math.round(W*128)+128);for(let V=0;V<7;V++)W=e.shN.codebook[d[(P+8+V)*4+J]],q[V*3+J]=K(Math.round(W*128)+128)}v.set(O,8+D*24),v.set(Y,8+D*24+9),B.set(q,8+D*21),D++}const R=await Et(v);n.sh12Data.push(R.datas);const L=await Et(B);n.sh3Data.push(L.datas)}return await on(M,k)}function I(S,Q){const k=Q.byteLength/G,M=new Float32Array(Q.buffer);for(let C=0,v=0,x=0,B=0;C<k;C++)v=M[C*8],x=M[C*8+1],B=M[C*8+2],S.minX=Math.min(S.minX,v),S.maxX=Math.max(S.maxX,v),S.minY=Math.min(S.minY,x),S.maxY=Math.max(S.maxY,x),S.minZ=Math.min(S.minZ,B),S.maxZ=Math.max(S.maxZ,B);const b=0;S.currentRadius=Math.sqrt(S.maxX*S.maxX+b*b+S.maxZ*S.maxZ),S.aabbCenter=new h.Vector3((S.minX+S.maxX)/2,(S.minY+S.maxY)/2,(S.minZ+S.maxZ)/2),S.maxRadius=.5*Math.sqrt(Math.pow(S.maxX-S.minX,2)+Math.pow(S.maxY-S.minY,2)+Math.pow(S.maxZ-S.minZ,2)),S.metaMatrix&&S.aabbCenter.applyMatrix4(S.metaMatrix)}}function fc(n){const t=(C,v,x)=>n.on(C,v,x),e=(C,...v)=>n.fire(C,...v);let i,a=Date.now()+36e5,o=null,s,r={index:0,version:0},c={index:1,version:0},A=!1;const l=e(ft);let u=!1,f=0;t(As,()=>s?.aabbCenter||new h.Vector3);let d;const g=new Promise(C=>d=C);t(ie,async()=>{const C=e(F);let v=yt?C.maxRenderCountOfMobile:C.maxRenderCountOfPc;if(!C.bigSceneMode){let x=await g;v=Math.min(x,v)+10240}return v}),t(ve,async C=>{const v=e(F);if(v.bigSceneMode)return 1;let x=yt?v.maxRenderCountOfMobile:v.maxRenderCountOfPc,B=await g;if(x=Math.min(B,x),!s.dataShDegree)return 1;if(C>=3){if(s.dataShDegree<3)return 1}else if(C>=1){if(s.dataShDegree<1)return 1}else return 1;const R=1024*2;return Math.ceil(x/R)}),t(On,async()=>e(F).bigSceneMode?0:(await g,s.dataShDegree)),t(_n,async(C,v=!0)=>{try{await g;const x=!!s.header?.Flag2;o=await e(es,C,v,x),s&&(s.textWatermarkVersion=Date.now())}catch{console.info("failed to generate watermark")}}),t(os,C=>{l&&(C?(!c.active&&(c.activeTime=Date.now()),c.active=!0):(!r.active&&(r.activeTime=Date.now()),r.active=!0))}),t(Mn,()=>{if(l)return r.version<=c.version?r.xyz:c.xyz;if(s?.status===U.FetchDone||s?.status===U.FetchAborted){if(s.activePoints&&s.activePoints.length===void 0)return s.activePoints;const C={},v=r.xyz;for(let x=0,B=v.length/3,R=0,L=0,_=0,D="";x<B;x++)R=v[x*3],L=v[x*3+1],_=v[x*3+2],D=`${Math.floor(R/2)*2+1},${Math.floor(L/2)*2+1},${Math.floor(_/2)*2+1}`,(C[D]=C[D]||[]).push(R,L,_);return s.activePoints=C}return r.xyz});async function y(C){if(i)return;if(s&&(s.status===U.Invalid||s.status===U.FetchFailed))return e(F).viewerEvents?.fire(At),e(pe,0)||e(st,{renderSplatCount:0,visibleSplatCount:0,modelSplatCount:0});if(!s||!s.downloadSize)return;const v=s.status!==U.FetchReady&&s.status!==U.Fetching;if(Q(v),v){const x=Math.min(s.fetchLimit,s.downloadSplatCount);x&&!s.notifyFetchStopDone&&(s.notifyFetchStopDone=!0)&&e(pe,x)}else e(vn,100*s.downloadSize/s.fileSize);s.dataSplatCount&&(A||(A=!0,setTimeout(async()=>{C?await m(v):await p(v),A=!1})))}async function p(C){if(i)return;const v=r,x=await e(ie),B=o;let R=s.dataSplatCount,L=C?s.watermarkCount:0,_=s.meta.showWatermark&&C?(B?.byteLength||0)/32:0;if(s.renderSplatCount=R+L+_,s.renderSplatCount>=x&&(s.renderSplatCount=x,L=0,_=0,R>x&&(R=x)),e(st,{visibleSplatCount:s.renderSplatCount,modelSplatCount:s.modelSplatCount+_}),Date.now()-v.textureReadyTime<hr||s.smallSceneUploadDone&&s.lastTextWatermarkVersion==s.textWatermarkVersion)return;if(!v.version){e(Fi,(s.header?.Flag2?s.header.MaxTopY:s.header?.MinTopY)||0);let q=s.opts.format,W=" ";s.opts.format=="spx"?(q="spx v"+s.header.Version+(s.header.ExclusiveId?(", "+s.header.ExclusiveId).substring(0,5):""),W+=s.CompressionRatio):s.opts.format=="spz"?(q="spz v"+s.spzVersion,W+=s.CompressionRatio):s.opts.format=="sog"?(q="sog v"+s.sogVersion,W+=s.CompressionRatio):s.opts.format=="splat"&&(W+=s.CompressionRatio);const J=" "+(s.fileSize/1024/1024).toFixed(1)+"M";e(st,{scene:`small (${q}) ${W}${J}`})}s.lastTextWatermarkVersion=s.textWatermarkVersion,v.textureReady=!1;const D=1024*2,T=Math.ceil(2*x/D),N=new Uint32Array(D*T*4),H=new Float32Array(N.buffer),P=new Uint8Array(N.buffer);P.set(s.splatData.slice(0,R*32),0),L&&P.set(s.watermarkData.slice(0,L*32),R*32),_&&P.set(B.slice(0,_*32),(R+L)*32);const O=new Float32Array(s.renderSplatCount*3);for(let q=0,W=0;q<s.renderSplatCount;q++)O[q*3]=H[q*8],O[q*3+1]=H[q*8+1],O[q*3+2]=H[q*8+2];const Y=Date.now();if(v.version=Y,v.txdata=N,v.xyz=O,v.renderSplatCount=s.renderSplatCount,v.visibleSplatCount=s.downloadSplatCount+_,v.modelSplatCount=s.downloadSplatCount+_,v.watermarkCount=L+_,v.minX=s.minX,v.maxX=s.maxX,v.minY=s.minY,v.maxY=s.maxY,v.minZ=s.minZ,v.maxZ=s.maxZ,s.meta.particleMode&&!f&&(f=performance.now(),e(Ke,f),e(Wt,!1),e(Ze,1)),s.maxRadius&&e(ps,s.maxRadius),e(Hn,v,s.currentRadius,s.currentRadius),a=Y,C&&!s.smallSceneUploadDone){s.smallSceneUploadDone=!0,e(rs,s.sh12Data),e(cs,s.sh3Data),s.sh12Data=null,s.sh3Data=null;const q=e(F);e(_e,q.shDegree===void 0?3:q.shDegree),e(Mn),s.meta.particleMode&&setTimeout(()=>{e(Ke,performance.now()+5e3),e(Ze,2),setTimeout(()=>e(Xe,!0),5e3)},Math.max(5e3+f-performance.now(),0))}e(st,{renderSplatCount:s.renderSplatCount})}async function m(C){if(i)return;const v=await e(ie),x=1024*2,B=Math.ceil(2*v/x),R=o,L=0,_=(R?.byteLength||0)/32,D=v-L-_;e(st,{modelSplatCount:s.downloadSplatCount+_});let T=r.version<=c.version?r:c;if(r.version&&(!T.index&&!c.active||T.index&&!r.active)||Date.now()-T.activeTime<fr)return;if(C){const $=e(F).viewerEvents;if($&&!$.fire(yn))return}if(!T.version){let $=s.opts.format,Z=" ";s.opts.format=="spx"&&($="spx"+(s.header.ExclusiveId?(" "+s.header.ExclusiveId).substring(0,6):""),Z+=s.CompressionRatio);const St=" "+(s.fileSize/1024/1024).toFixed(1)+"M";e(st,{scene:`large (${$}) ${Z}${St}`})}const N=Date.now();T.version=N,T.active=!1;let H=0;const P=[],O=e(vi),Y=e(Bt),q=e(Dt);for(const $ of s.map.values())S(O,Y,q,$)&&(P.push($),$.currentRenderCnt=$.splatCount,H+=$.splatCount);e(st,{cuts:`${P.length} / ${s.map.size}`});const W=Math.min(D/H,1);if(W>.95)for(const $ of P)$.currentRenderCnt=$.splatCount*W|0;else{P.sort((Z,St)=>Z.distance-St.distance);for(const Z of P)Z.distance<5?Z.distance*=.5:Z.distance<4?Z.distance*=.4:Z.distance<3?Z.distance*=.3:Z.distance<2&&(Z.distance*=.1);I(P,D);let $=0;for(let Z of P)$+=Z.currentRenderCnt;if($>D){let Z=$-D;for(let St=P.length-1;St>=0&&!(Z<=0);St--){const mt=P[St];mt.currentRenderCnt>=Z?(mt.currentRenderCnt-=Z,Z=0):(Z-=mt.currentRenderCnt,mt.currentRenderCnt=0)}}else if($<D){let Z=D-$;for(let St=0;St<P.length&&!(Z<=0);St++){let mt=P[St];if(mt.splatCount>mt.currentRenderCnt)if(mt.splatCount-mt.currentRenderCnt>=Z)mt.currentRenderCnt+=Z,Z=0;else{const Ho=mt.splatCount-mt.currentRenderCnt;mt.currentRenderCnt+=Ho,Z-=Ho}}}}const J=new Uint32Array(x*B*4),V=new Float32Array(J.buffer),ut=new Uint8Array(J.buffer);let ot=0;for(let $ of P)ut.set($.splatData.slice(0,$.currentRenderCnt*32),ot*32),ot+=$.currentRenderCnt;_&&ut.set(R.slice(0,_*32),(ot+L)*32);const Gt=ot+L+_,Rt=new Float32Array(Gt*3);for(let $=0,Z=0;$<Gt;$++)Rt[$*3]=V[$*8],Rt[$*3+1]=V[$*8+1],Rt[$*3+2]=V[$*8+2];T.txdata=J,T.xyz=Rt,T.renderSplatCount=Gt,T.visibleSplatCount=H+s.watermarkCount+_,T.modelSplatCount=s.downloadSplatCount+_,T.watermarkCount=L+_,T.minX=s.header.MinX,T.maxX=s.header.MaxX,T.minY=s.header.MinY,T.maxY=s.header.MaxY,T.minZ=s.header.MinZ,T.maxZ=s.header.MaxZ,e(Hn,T),a=N,e(st,{visibleSplatCount:T.visibleSplatCount,modelSplatCount:T.modelSplatCount})}function I(C,v){const x=C.map(L=>1/(L.distance+1e-6)),B=x.reduce((L,_)=>L+_,0);let R=0;if(C.forEach((L,_)=>{L.currentRenderCnt=Math.min(Math.floor(x[_]/B*v),L.splatCount),R+=L.currentRenderCnt}),R<v){const L=v-R,_=C.map((T,N)=>T.currentRenderCnt<T.splatCount?x[N]:0),D=_.reduce((T,N)=>T+N,0);C.forEach((T,N)=>{if(D>0&&T.currentRenderCnt<T.splatCount){const H=Math.min(Math.floor(_[N]/D*L),T.splatCount-T.currentRenderCnt);T.currentRenderCnt+=H}})}}function S(C,v,x,B){if(B.distance=Math.max(B.center.distanceTo(v)-B.radius,0),!B.distance||B.center.distanceTo(x)<=2*B.radius)return!0;const R=new h.Vector4(B.center.x,B.center.y,B.center.z,1).applyMatrix4(C),L=3*R.w;return!(R.z<-L||R.x<-L||R.x>L||R.y<-L||R.y>L)}function Q(C){if(!u){if(s.header){u=!0;const v=new h.Vector3(s.header.MinX,s.header.MinY,s.header.MinZ),x=new h.Vector3(s.header.MaxX,s.header.MaxY,s.header.MaxZ);e(zn,v.x,v.y,v.z,x.x,x.y,x.z,s.meta.showBoundBox)}else if(C){u=!0;const v=new h.Vector3(s.minX,s.minY,s.minZ),x=new h.Vector3(s.maxX,s.maxY,s.maxZ);e(zn,v.x,v.y,v.z,x.x,x.y,x.z,s.meta.showBoundBox)}}}function k(){i||(i=!0,s?.abortController?.abort(),s?.map?.clear(),s=null,o=null,r=null,c=null)}function M(C){if(C.opts.format==="spx")lc(C);else if(C.opts.format==="splat")rc(C);else if(C.opts.format==="ply")oc(C);else if(C.opts.format==="spz")dc(C);else if(C.opts.format==="sog")hc(C);else return!1;return!0}async function b(C,v){if(i)return;const x=e(F),B=yt?x.maxRenderCountOfMobile:x.maxRenderCountOfPc,R=e(ft);if(C.fetchReload=Kr(v.updateDate||0),s=new dr(C,v),R&&v.autoCut){const _=v.pcDownloadLimitSplatCount||yr,D=v.mobileDownloadLimitSplatCount||Cr,T=yt?D:_;s.fetchLimit=Math.min(v.autoCut*v.autoCut*B+B,T)}else s.fetchLimit=B;const L=()=>{if(!s||s.status==U.Invalid||s.status==U.FetchFailed)return d(0);s.modelSplatCount>0?(d(s.modelSplatCount),!s.meta.particleMode&&s.dataSplatCount?setTimeout(()=>e(zi),5):setTimeout(L,10)):setTimeout(L,10)};if(L(),!M(s)){console.error("Unsupported format:",C.format),e(pe,0);return}e(En),e(st,{cuts:""})}t(Ni,async(C,v)=>await b(C,v)),t(Vi,(C=1e4)=>Date.now()-a<C),t(Hi,()=>k()),e(Zt,async()=>await y(l),()=>!i)}var ci=(n=>(n[n.ModelCenterCirccle=1]="ModelCenterCirccle",n[n.ScreenCenterCircle=2]="ScreenCenterCircle",n[n.ScreenMiddleToLeftRight=3]="ScreenMiddleToLeftRight",n[n.ScreenMiddleToTopBottom=4]="ScreenMiddleToTopBottom",n))(ci||{});const Ua="currentVisibleRadius",Na="currentLightRadius",Va="transitionEffect",Us="splatShTexture12",Ha="maxPixelDiameter",Oa="minPixelDiameter",Ns="splatShTexture3",za="performanceNow",Vs="performanceAct",pc="waterMarkColor",Ga="showWaterMark",Ya="useSimilarExp",Hs="splatTexture0",Os="splatTexture1",qa="particleMode",Wa="bigSceneMode",$a="lightFactor",ja="debugEffect",Ja="usingIndex",mc="splatIndex",Ka="maxRadius",Xa="flagValue",Za="pointMode",to="markPoint",eo="shDegree",no="viewport",io="minAlpha",so="focal",ao="topY";let j=0;j++;const oo=`$${j++}`,Cc=`$${j++}`;j++,j++,j++;const ro=`$${j++}`,yc=`$${j++}`,co=`$${j++}`,Ic=`$${j++}`,wc=`$${j++}`,Ec=`$${j++}`,vc=`$${j++}`,Sc=`$${j++}`;j++;const Mc=`$${j++}`,bc=`$${j++}`;j++;const Bc=`$${j++}`;j++;const Qc=`$${j++}`;j++;const xc=`$${j++}`,Dc=`$${j++}`,kc=`$${j++}`,Tc=`$${j++}`,Lc=`$${j++}`,Rc=`$${j++}`,_c=`$${j++}`,Fc=`$${j++}`,Pc=`$${j++}`,Uc=`$${j++}`,lo=`$${j++}`,Nc=`$${j++}`,Vc=`$${j++}`,zs=`$${j++}`,Ao=`$${j++}`,uo=`$${j++}`;var Hc=`precision highp float;\r
8
+ precision highp int;
9
+
10
+ uniform highp usampler2D splatTexture0, splatTexture1, splatShTexture12, splatShTexture3;\r
11
+ uniform vec2 focal, viewport;\r
12
+ uniform int usingIndex, shDegree, particleMode, transitionEffect;\r
13
+ uniform bool pointMode, bigSceneMode, showWaterMark, debugEffect;\r
14
+ uniform float topY, maxRadius, currentVisibleRadius, currentLightRadius, performanceNow, performanceAct;\r
15
+ uniform float minPixelDiameter, maxPixelDiameter, minAlpha;\r
16
+ uniform vec4 markPoint, waterMarkColor;\r
17
+ uniform uint flagValue;
18
+
19
+ attribute uint splatIndex;
20
+
21
+ varying vec4 vColor;\r
22
+ varying vec3 vPosition;\r
23
+ vec3 animateParticle(vec3 v3Cen) {\r
24
+ if (particleMode < 1)\r
25
+ return v3Cen;\r
26
+ float factor = particleMode > 1 ? ((performanceAct - performanceNow) / 5000.0) : ((performanceNow - performanceAct) / 5000.0);\r
27
+ float radius = particleMode > 1 ? (max(currentVisibleRadius, maxRadius) * 0.6 * min((performanceNow) / 3000.0, 1.0)) : (max(currentVisibleRadius, maxRadius) * 0.6 * min((performanceNow - performanceAct) / 3000.0, 1.0));\r
28
+ if (factor <= 0.0)\r
29
+ return v3Cen;
30
+
31
+
32
+ vec3 randSeed = fract(sin(vec3(dot(v3Cen, vec3(12.9898, 78.233, 37.719)), dot(v3Cen.yzx, vec3(49.123, 23.456, 87.654)), dot(v3Cen.zxy, vec3(34.567, 91.234, 56.789))))) * 2.0 - 1.0;
33
+
34
+
35
+ float phase = factor * 12.0 + v3Cen.y * (15.0 + randSeed.x * 3.0) + v3Cen.z * (13.0 + randSeed.y * 2.0);
36
+
37
+
38
+ float wave1 = sin(phase * (2.0 + randSeed.y * 1.5 + randSeed.z * 1.5));\r
39
+ float wave2 = cos(phase * (1.2 + randSeed.x * 0.3) + v3Cen.x * 20.0);\r
40
+ float dynamicFactor = mix(wave1, wave2, 0.5 + randSeed.z * 0.2) * 0.5 + 0.5;
41
+
42
+
43
+ float amplitude = radius * 0.25 * factor * (0.9 + randSeed.z * 0.2);
44
+
45
+
46
+ vec3 offset = vec3(amplitude * (dynamicFactor * 2.0 - 1.0), amplitude * randSeed.x * 5.0, amplitude * randSeed.y * 2.5);
47
+
48
+
49
+ vec3 newPos = v3Cen + offset;\r
50
+ float newDist = length(newPos);\r
51
+ if (newDist > radius) {\r
52
+ vec3 dir = normalize(newPos);\r
53
+ float penetration = newDist - radius;\r
54
+ float elasticity = 0.7 + randSeed.z * 0.2;
55
+
56
+
57
+ vec3 bounceVec = dir * penetration * elasticity;\r
58
+ vec3 tangent = normalize(cross(dir, vec3(randSeed.x, randSeed.y, 1.0)));\r
59
+ newPos -= bounceVec - tangent * (length(randSeed.xy) * penetration * 0.2);\r
60
+ }
61
+
62
+
63
+ return normalize(newPos) * min(length(newPos), radius);\r
64
+ }\r
65
+ const float FactorSH = 0.0625;\r
66
+ const uint MaskSH = 0x1Fu;\r
67
+ const float SH_C1 = 0.4886025119029199;\r
68
+ const float[5] SH_C2 = float[](1.0925484305920792, -1.0925484305920792, 0.31539156525252005, -1.0925484305920792, 0.5462742152960396);\r
69
+ const float[7] SH_C3 = float[](-0.5900435899266435, 2.890611442640554, -0.4570457994644658, 0.3731763325901154, -0.4570457994644658, 1.445305721320277, -0.5900435899266435);
70
+
71
+ vec3[15] splatReadShDatas() {\r
72
+ int shCnt = 0;\r
73
+ float[45] fSHs;\r
74
+ uvec4 rgb12 = texelFetch(splatShTexture12, ivec2((splatIndex & 0x7ffu), (splatIndex >> 11)), 0);\r
75
+ if (rgb12.a > 0u) {\r
76
+ shCnt = 3;\r
77
+ fSHs[0] = float((rgb12.r >> 27) & MaskSH) * FactorSH - 1.0;\r
78
+ fSHs[1] = float((rgb12.r >> 22) & MaskSH) * FactorSH - 1.0;\r
79
+ fSHs[2] = float((rgb12.r >> 17) & MaskSH) * FactorSH - 1.0;\r
80
+ fSHs[3] = float((rgb12.r >> 12) & MaskSH) * FactorSH - 1.0;\r
81
+ fSHs[4] = float((rgb12.r >> 7) & MaskSH) * FactorSH - 1.0;\r
82
+ fSHs[5] = float((rgb12.r >> 2) & MaskSH) * FactorSH - 1.0;\r
83
+ fSHs[6] = float(((rgb12.r << 3) | (rgb12.g >> 29)) & MaskSH) * FactorSH - 1.0;\r
84
+ fSHs[7] = float((rgb12.g >> 24) & MaskSH) * FactorSH - 1.0;\r
85
+ fSHs[8] = float((rgb12.g >> 19) & MaskSH) * FactorSH - 1.0;
86
+
87
+ if (shDegree > 1) {\r
88
+ shCnt = 8;\r
89
+ fSHs[9] = float((rgb12.g >> 14) & MaskSH) * FactorSH - 1.0;\r
90
+ fSHs[10] = float((rgb12.g >> 9) & MaskSH) * FactorSH - 1.0;\r
91
+ fSHs[11] = float((rgb12.g >> 4) & MaskSH) * FactorSH - 1.0;\r
92
+ fSHs[12] = float(((rgb12.g << 1) | (rgb12.b >> 31)) & MaskSH) * FactorSH - 1.0;\r
93
+ fSHs[13] = float((rgb12.b >> 26) & MaskSH) * FactorSH - 1.0;\r
94
+ fSHs[14] = float((rgb12.b >> 21) & MaskSH) * FactorSH - 1.0;\r
95
+ fSHs[15] = float((rgb12.b >> 16) & MaskSH) * FactorSH - 1.0;\r
96
+ fSHs[16] = float((rgb12.b >> 11) & MaskSH) * FactorSH - 1.0;\r
97
+ fSHs[17] = float((rgb12.b >> 6) & MaskSH) * FactorSH - 1.0;\r
98
+ fSHs[18] = float((rgb12.b >> 1) & MaskSH) * FactorSH - 1.0;\r
99
+ fSHs[19] = float(((rgb12.b << 4) | (rgb12.a >> 28)) & MaskSH) * FactorSH - 1.0;\r
100
+ fSHs[20] = float(((rgb12.a >> 23) & MaskSH)) * FactorSH - 1.0;\r
101
+ fSHs[21] = float((rgb12.a >> 18) & MaskSH) * FactorSH - 1.0;\r
102
+ fSHs[22] = float((rgb12.a >> 13) & MaskSH) * FactorSH - 1.0;\r
103
+ fSHs[23] = float((rgb12.a >> 8) & MaskSH) * FactorSH - 1.0;
104
+
105
+ if (shDegree > 2) {\r
106
+ uvec4 rgb3 = texelFetch(splatShTexture3, ivec2(splatIndex & 0x7ffu, splatIndex >> 11), 0);\r
107
+ if (rgb3.a > 0u) {\r
108
+ shCnt = 15;\r
109
+ fSHs[24] = float((rgb3.r >> 27) & MaskSH) * FactorSH - 1.0;\r
110
+ fSHs[25] = float((rgb3.r >> 22) & MaskSH) * FactorSH - 1.0;\r
111
+ fSHs[26] = float((rgb3.r >> 17) & MaskSH) * FactorSH - 1.0;\r
112
+ fSHs[27] = float((rgb3.r >> 12) & MaskSH) * FactorSH - 1.0;\r
113
+ fSHs[28] = float((rgb3.r >> 7) & MaskSH) * FactorSH - 1.0;\r
114
+ fSHs[29] = float((rgb3.r >> 2) & MaskSH) * FactorSH - 1.0;\r
115
+ fSHs[30] = float(((rgb3.r << 3) | (rgb3.g >> 29)) & MaskSH) * FactorSH - 1.0;\r
116
+ fSHs[31] = float((rgb3.g >> 24) & MaskSH) * FactorSH - 1.0;\r
117
+ fSHs[32] = float((rgb3.g >> 19) & MaskSH) * FactorSH - 1.0;\r
118
+ fSHs[33] = float((rgb3.g >> 14) & MaskSH) * FactorSH - 1.0;\r
119
+ fSHs[34] = float((rgb3.g >> 9) & MaskSH) * FactorSH - 1.0;\r
120
+ fSHs[35] = float((rgb3.g >> 4) & MaskSH) * FactorSH - 1.0;\r
121
+ fSHs[36] = float(((rgb3.g << 1) | (rgb3.b >> 31)) & MaskSH) * FactorSH - 1.0;\r
122
+ fSHs[37] = float((rgb3.b >> 26) & MaskSH) * FactorSH - 1.0;\r
123
+ fSHs[38] = float((rgb3.b >> 21) & MaskSH) * FactorSH - 1.0;\r
124
+ fSHs[39] = float((rgb3.b >> 16) & MaskSH) * FactorSH - 1.0;\r
125
+ fSHs[40] = float((rgb3.b >> 11) & MaskSH) * FactorSH - 1.0;\r
126
+ fSHs[41] = float((rgb3.b >> 6) & MaskSH) * FactorSH - 1.0;\r
127
+ fSHs[42] = float((rgb3.b >> 1) & MaskSH) * FactorSH - 1.0;\r
128
+ fSHs[43] = float(((rgb3.b << 4) | (rgb3.a >> 28)) & MaskSH) * FactorSH - 1.0;\r
129
+ fSHs[44] = float((rgb3.a >> 23) & MaskSH) * FactorSH - 1.0;\r
130
+ }\r
131
+ }\r
132
+ }\r
133
+ }
134
+
135
+ vec3[15] sh;\r
136
+ for (int i = 0; i < 15; ++i) {\r
137
+ sh[i] = i < shCnt ? vec3(fSHs[i * 3], fSHs[i * 3 + 1], fSHs[i * 3 + 2]) : vec3(0.0);\r
138
+ }\r
139
+ return sh;\r
140
+ }
141
+
142
+ vec3 splatEvalSH(in vec3 v3Cen) {\r
143
+ vec3 dir = normalize(v3Cen - cameraPosition);\r
144
+ float x = dir.x;\r
145
+ float y = dir.y;\r
146
+ float z = dir.z;
147
+
148
+ vec3[15] sh = splatReadShDatas();\r
149
+ vec3 result = SH_C1 * (-sh[0] * y + sh[1] * z - sh[2] * x);
150
+
151
+ if (shDegree > 1) {\r
152
+ float xx = x * x;\r
153
+ float yy = y * y;\r
154
+ float zz = z * z;\r
155
+ float xy = x * y;\r
156
+ float yz = y * z;\r
157
+ float xz = x * z;
158
+
159
+ result += sh[3] * (SH_C2[0] * xy) +\r
160
+ sh[4] * (SH_C2[1] * yz) +\r
161
+ sh[5] * (SH_C2[2] * (2.0 * zz - xx - yy)) +\r
162
+ sh[6] * (SH_C2[3] * xz) +\r
163
+ sh[7] * (SH_C2[4] * (xx - yy));
164
+
165
+ if (shDegree > 2) {\r
166
+ result += sh[8] * (SH_C3[0] * y * (3.0 * xx - yy)) +\r
167
+ sh[9] * (SH_C3[1] * xy * z) +\r
168
+ sh[10] * (SH_C3[2] * y * (4.0 * zz - xx - yy)) +\r
169
+ sh[11] * (SH_C3[3] * z * (2.0 * zz - 3.0 * xx - 3.0 * yy)) +\r
170
+ sh[12] * (SH_C3[4] * x * (4.0 * zz - xx - yy)) +\r
171
+ sh[13] * (SH_C3[5] * z * (xx - yy)) +\r
172
+ sh[14] * (SH_C3[6] * x * (xx - 3.0 * yy));\r
173
+ }\r
174
+ }\r
175
+ return result;\r
176
+ }\r
177
+ float getFvAlpha(uvec4 cen) {\r
178
+ uint fvSplat = cen.w & 65535u;\r
179
+ uint fvHide = flagValue >> 16u;\r
180
+ uint fvShow = flagValue & 65535u;\r
181
+ float fvAlpha = 1.0;\r
182
+ if (fvSplat > 0u) {\r
183
+ if (fvSplat == fvShow) {\r
184
+ fvAlpha = clamp((performanceNow - performanceAct) / 2000.0, 0.0, 1.0);\r
185
+ } else if (fvSplat == fvHide) {\r
186
+ fvAlpha = 1.0 - clamp((performanceNow - performanceAct) / 2000.0, 0.0, 1.0);\r
187
+ } else {\r
188
+ fvAlpha = 0.0;\r
189
+ }\r
190
+ }\r
191
+ return fvAlpha;\r
192
+ }
193
+
194
+ void main() {\r
195
+ uvec4 cen, cov3d;\r
196
+ if (bigSceneMode) {\r
197
+ if (usingIndex == 0) {\r
198
+ cen = texelFetch(splatTexture0, ivec2((splatIndex & 0x3ffu) << 1, splatIndex >> 10), 0);\r
199
+ cov3d = texelFetch(splatTexture0, ivec2(((splatIndex & 0x3ffu) << 1) | 1u, splatIndex >> 10), 0);\r
200
+ } else {\r
201
+ cen = texelFetch(splatTexture1, ivec2((splatIndex & 0x3ffu) << 1, splatIndex >> 10), 0);\r
202
+ cov3d = texelFetch(splatTexture1, ivec2(((splatIndex & 0x3ffu) << 1) | 1u, splatIndex >> 10), 0);\r
203
+ }\r
204
+ } else {\r
205
+ cen = texelFetch(splatTexture0, ivec2((splatIndex & 0x3ffu) << 1, splatIndex >> 10), 0);\r
206
+ cov3d = texelFetch(splatTexture0, ivec2(((splatIndex & 0x3ffu) << 1) | 1u, splatIndex >> 10), 0);\r
207
+ }
208
+
209
+ bool isWatermark = (cen.w & 65536u) > 0u;\r
210
+ float colorA = (float(cov3d.w >> 24) / 255.0) * getFvAlpha(cen);\r
211
+ if (colorA < minAlpha && !isWatermark) {\r
212
+ vColor = vec4(0.0);\r
213
+ return;\r
214
+ }
215
+
216
+ vec3 v3Cen = uintBitsToFloat(cen.xyz);\r
217
+ v3Cen = animateParticle(v3Cen);\r
218
+ if (isWatermark && debugEffect) {\r
219
+ v3Cen.y += sin(performanceNow * 0.002 + v3Cen.x) * 0.1;
220
+ }
221
+
222
+ vec4 cam = modelViewMatrix * vec4(v3Cen, 1.0);\r
223
+ vec4 pos2d = projectionMatrix * cam;\r
224
+ float clip = 1.05 * pos2d.w;\r
225
+ if (pos2d.z < -clip || pos2d.x < -clip || pos2d.x > clip || pos2d.y < -clip || pos2d.y > clip || isWatermark && (!showWaterMark || pointMode)) {\r
226
+ vColor = vec4(0.0);\r
227
+ return;\r
228
+ }
229
+
230
+ float currentRadius = length(vec3(0.0, topY, 0.0) - v3Cen);\r
231
+ if (currentVisibleRadius > 0.0 && currentRadius > currentVisibleRadius) {\r
232
+ vColor = vec4(0.0);\r
233
+ return;\r
234
+ }
235
+
236
+ vec2 uh1 = unpackHalf2x16(cov3d.x), uh2 = unpackHalf2x16(cov3d.y), uh3 = unpackHalf2x16(cov3d.z);\r
237
+ mat3 Vrk = mat3(uh1.x, uh1.y, uh2.x, uh1.y, uh2.y, uh3.x, uh2.x, uh3.x, uh3.y);
238
+
239
+ float ZxZ = cam.z * cam.z;\r
240
+ mat3 J_m3 = mat3(focal.x / cam.z, 0.0, -(focal.x * cam.x) / ZxZ, 0.0, focal.y / cam.z, -(focal.y * cam.y) / ZxZ, 0.0, 0.0, 0.0);
241
+
242
+ mat3 T_m3 = transpose(mat3(modelViewMatrix)) * J_m3;\r
243
+ mat3 cov2d = transpose(T_m3) * Vrk * T_m3;
244
+
245
+ cov2d[0][0] += 0.3;\r
246
+ cov2d[1][1] += 0.3;\r
247
+ vec3 cov2Dv = vec3(cov2d[0][0], cov2d[0][1], cov2d[1][1]);\r
248
+ float disc = max(0.0, (cov2Dv.x + cov2Dv.z) * (cov2Dv.x + cov2Dv.z) / 4.0 - (cov2Dv.x * cov2Dv.z - cov2Dv.y * cov2Dv.y));\r
249
+ float eigenValue1 = 0.5 * (cov2Dv.x + cov2Dv.z) + sqrt(disc);\r
250
+ float eigenValue2 = max(0.5 * (cov2Dv.x + cov2Dv.z) - sqrt(disc), 0.0);\r
251
+ float eigenValueOrig1 = eigenValue1;\r
252
+ float eigenValueOrig2 = eigenValue2;
253
+
254
+ bool isLightColor = false;\r
255
+ if (!isWatermark) {\r
256
+ if (pointMode) {\r
257
+ eigenValue1 = eigenValue2 = 0.5;\r
258
+ }
259
+
260
+ if (!bigSceneMode && currentLightRadius > 0.0) {\r
261
+
262
+ if (transitionEffect == 1) {\r
263
+ if (currentRadius < currentLightRadius && currentRadius > currentLightRadius * 0.9) {\r
264
+ eigenValue1 = eigenValueOrig1;\r
265
+ eigenValue2 = eigenValueOrig2;\r
266
+ isLightColor = true;\r
267
+ }\r
268
+ if (currentRadius < currentLightRadius * 0.9) {\r
269
+ if (pointMode) {\r
270
+ eigenValue1 = eigenValueOrig1;\r
271
+ eigenValue2 = eigenValueOrig2;\r
272
+ } else {\r
273
+ eigenValue1 = eigenValue2 = 0.5;\r
274
+ }\r
275
+ }\r
276
+ } else {\r
277
+ vec4 p = projectionMatrix * (modelViewMatrix * vec4(v3Cen, 1.0));\r
278
+ float currentRatio = transitionEffect == 2 ? length(p.xy / p.w) : (transitionEffect == 3 ? length(p.xx / p.w) : length(p.yy / p.w));
279
+ float currentLightRatio = (performanceNow - performanceAct) / 500.0;\r
280
+ if (currentRatio < currentLightRatio) {\r
281
+ if (pointMode) {\r
282
+ eigenValue1 = eigenValueOrig1;\r
283
+ eigenValue2 = eigenValueOrig2;\r
284
+ } else {\r
285
+ eigenValue1 = eigenValue2 = 0.5;\r
286
+ }\r
287
+ }
288
+
289
+ }
290
+
291
+ }\r
292
+ }
293
+
294
+ vPosition = vec3(position.xy, -1.0);\r
295
+ vec2 eigenVector1 = normalize(vec2(cov2Dv.y, eigenValue1 - cov2Dv.x));\r
296
+ if (markPoint.w > 0.0 && length(vec3(markPoint.xyz) - v3Cen) < 0.000001) {\r
297
+ vColor = vec4(1.0, 1.0, 0.0, 1.0);\r
298
+ eigenValue1 = eigenValue2 = 11.0;\r
299
+ eigenVector1 = normalize(vec2(11.0, 0.0));\r
300
+ vPosition.z = 1.0;
301
+ } else if (isLightColor) {\r
302
+ vColor = vec4(1.0, 1.0, 1.0, 0.2);\r
303
+ } else if (isWatermark) {\r
304
+ vColor = waterMarkColor;\r
305
+ } else {\r
306
+ vColor = vec4(float(cov3d.w & 0xFFu) / 255.0, float((cov3d.w >> 8) & 0xFFu) / 255.0, float((cov3d.w >> 16) & 0xFFu) / 255.0, colorA);\r
307
+ if (shDegree > 0) {\r
308
+ vColor.rgb += splatEvalSH(v3Cen);\r
309
+ }\r
310
+ }
311
+
312
+ float diameter1 = min(sqrt(2.0 * eigenValue1), maxPixelDiameter);\r
313
+ float diameter2 = min(sqrt(2.0 * eigenValue2), maxPixelDiameter);\r
314
+ if (diameter1 < minPixelDiameter && diameter2 < minPixelDiameter && (pointMode && currentRadius < currentLightRadius || !pointMode && currentRadius > currentLightRadius)) {\r
315
+ vColor = vec4(0.0);\r
316
+ return;\r
317
+ }
318
+
319
+ vec2 eigenVector2 = vec2(eigenVector1.y, -eigenVector1.x);\r
320
+ vec2 majorAxis = eigenVector1 * diameter1;\r
321
+ vec2 minorAxis = eigenVector2 * diameter2;
322
+
323
+ vec2 v2Center = vec2(pos2d) / pos2d.w;
324
+ gl_Position = vec4(v2Center + vPosition.x * majorAxis / viewport + vPosition.y * minorAxis / viewport, 1.0, 1.0);\r
325
+ }`,Oc=`precision highp float;
326
+
327
+ uniform float lightFactor;\r
328
+ uniform float minAlpha;\r
329
+ uniform bool useSimilarExp;\r
330
+ varying vec4 vColor;\r
331
+ varying vec3 vPosition;
332
+
333
+ void main() {\r
334
+ float alpha = vColor.a;\r
335
+ if (alpha < minAlpha) {\r
336
+ gl_FragColor = vec4(0.0);\r
337
+ return;\r
338
+ }
339
+
340
+ if (vPosition.z >= 1.0) {\r
341
+ alpha = 1.0;\r
342
+ } else {\r
343
+ float r2 = dot(vPosition.xy, vPosition.xy);\r
344
+ if (r2 > 4.0) {\r
345
+ gl_FragColor = vec4(0.0);\r
346
+ return;\r
347
+ }\r
348
+ alpha *= useSimilarExp ? (1.0 / (1.0 + r2 * (1.0 + 0.5 * r2))) : exp(-r2);\r
349
+ if (alpha <= minAlpha) {\r
350
+ gl_FragColor = vec4(0.0);\r
351
+ return;\r
352
+ }\r
353
+ }
354
+
355
+ gl_FragColor = vec4(lightFactor * vColor.rgb, alpha);\r
356
+ }`;function zc(n){let t=!1;const e=(d,g,y)=>n.on(d,g,y),i=(d,...g)=>n.fire(d,...g);let a=0,o=0;const s=[];let r=0,c=0,A=0;e(ls,()=>A),e(pn,()=>{},!0),e(mn,()=>{},!0),e(Te,()=>{},!0),e(Le,()=>{},!0),e(Qi,async()=>{const d=new h.InstancedBufferGeometry;d.setIndex([0,1,2,0,2,3]);const g=new Float32Array(4*3),y=new h.BufferAttribute(g,3);d.setAttribute("position",y),y.setXYZ(0,-2,-2,0),y.setXYZ(1,-2,2,0),y.setXYZ(2,2,2,0),y.setXYZ(3,2,-2,0),y.needsUpdate=!0;let p=new h.InstancedBufferGeometry().copy(d);const m=await i(ie);if(t)return;const I=new Uint32Array(m),S=new h.InstancedBufferAttribute(I,1,!1);return S.setUsage(h.DynamicDrawUsage),S.needsUpdate=!0,p.setAttribute(mc,S),p.instanceCount=0,e(Ti,(Q,k,M,b,C)=>{i(Ri,k),I.set(Q,0),S.clearUpdateRanges(),S.addUpdateRange(0,C),S.needsUpdate=!0,S.onUpload(()=>{i(os,k),i(st,{renderSplatCount:C})}),p.instanceCount=C,i(et),i(st,{sortTime:`${M} / ${Date.now()-b}`,bucketBits:r,sortType:c})}),e(aa,()=>p),e(pn,()=>{S.array=null,p.dispose()},!0),p}),e(xi,async()=>{const d=await i(ie);if(t)return;const g=1024*2,y=Math.ceil(2*d/g),p=i(F),m=new h.ShaderMaterial({uniforms:i(Bi),vertexShader:Hc,fragmentShader:Oc,transparent:!0,alphaTest:1,blending:h.NormalBlending,depthTest:p.depthTest!==!1,depthWrite:!1,side:h.DoubleSide}),I=new Uint32Array(g*y*4);let S=new h.DataTexture(I,g,y,h.RGBAIntegerFormat,h.UnsignedIntType);S.internalFormat="RGBA32UI",S.needsUpdate=!0,m.uniforms[Hs].value=S;const Q=i(ft)?y:1,k=new Uint32Array(g*Q*4);let M=new h.DataTexture(k,g,Q,h.RGBAIntegerFormat,h.UnsignedIntType);M.internalFormat="RGBA32UI",M.needsUpdate=!0,m.uniforms[Os].value=M;const b=await i(ve,1),C=new Uint32Array(g*b*4);let v=new h.DataTexture(C,g,b,h.RGBAIntegerFormat,h.UnsignedIntType);v.internalFormat="RGBA32UI",v.needsUpdate=!0,m.uniforms[Us].value=v;const x=await i(ve,3),B=new Uint32Array(g*x*4);let R=new h.DataTexture(B,g,x,h.RGBAIntegerFormat,h.UnsignedIntType);R.internalFormat="RGBA32UI",R.needsUpdate=!0,m.uniforms[Ns].value=R,m.needsUpdate=!0;let L=!1;e(Li,D=>{if(!i(ft)){if(L&&!D.renderSplatCount)return;L=!D.renderSplatCount}const T=D.txdata;D.txdata=null;const N=new h.DataTexture(T,g,y,h.RGBAIntegerFormat,h.UnsignedIntType);N.onUpdate=()=>{D.textureReady=!0,D.textureReadyTime=Date.now(),f(D),i(Gi,D.renderSplatCount)},N.internalFormat="RGBA32UI",N.needsUpdate=!0,D.index?(m.uniforms[Os].value=N,M=N):(m.uniforms[Hs].value=N,S=N),m.needsUpdate=!0,i(et)}),e(rs,async D=>{if(i(ft)||!D||!D.length)return;const T=new Uint32Array(g*await i(ve,1)*4),N=new Uint8Array(T.buffer);for(let P=0,O=0;P<D.length;P++)N.set(D[P],O),O+=D[P].byteLength;const H=new h.DataTexture(T,g,b,h.RGBAIntegerFormat,h.UnsignedIntType);H.internalFormat="RGBA32UI",H.needsUpdate=!0,m.uniforms[Us].value=H,m.needsUpdate=!0,i(et)}),e(cs,async D=>{if(i(ft)||!D||!D.length)return;const T=new Uint32Array(g*await i(ve,3)*4),N=new Uint8Array(T.buffer);for(let P=0,O=0;P<D.length;P++)N.set(D[P],O),O+=D[P].byteLength;const H=new h.DataTexture(T,g,b,h.RGBAIntegerFormat,h.UnsignedIntType);H.internalFormat="RGBA32UI",H.needsUpdate=!0,m.uniforms[Ns].value=H,m.needsUpdate=!0,i(et)}),e(ki,()=>m),e(Te,()=>{const D=i(lt),{width:T,height:N}=i($t),H=Math.abs(D.projectionMatrix.elements[0])*.5*T,P=Math.abs(D.projectionMatrix.elements[5])*.5*N,O=i(ki);O.uniforms[so].value.set(H,P),O.uniformsNeedUpdate=!0,i(et)},!0),e(Le,()=>{const{width:D,height:T}=i($t);m.uniforms[no].value.set(D,T),m.uniformsNeedUpdate=!0,i(et)},!0),e(Ri,D=>{m.uniforms[Ja].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Ss,D=>{m.uniforms[Va].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Wt,D=>{const T=i(F);D===void 0&&(D=!T.pointcloudMode),m.uniforms[Za].value=D,m.uniformsNeedUpdate=!0,T.pointcloudMode=D,i(et),T.viewerEvents&&(T.viewerEvents.fire(F).pointcloudMode=D)}),e(_i,D=>{m.uniforms[Wa].value=D,m.uniformsNeedUpdate=!0;const T=i(F);T.bigSceneMode=D,i(et)}),e(de,D=>{m.uniforms[$a].value=D,m.uniformsNeedUpdate=!0;const T=i(F);T.lightFactor=D,i(et)});let _=!1;return e(Fi,D=>{i(ft)||_||(_=!0,m.uniforms[ao].value=D,m.uniformsNeedUpdate=!0,i(et))}),e(ge,D=>{m.uniforms[Ua].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(he,D=>{m.uniforms[Na].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(ps,D=>{m.uniforms[Ka].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Re,(D,T,N,H)=>{m.uniforms[to].value=[D,T,N,H?1:-1],m.uniformsNeedUpdate=!0,i(et)}),e(fn,(D=!0)=>{m.uniforms[Ga].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Pi,D=>{m.uniforms[za].value=D,m.uniformsNeedUpdate=!0}),e(Ke,D=>{m.uniforms[Vs].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Gn,(D,T)=>{m.uniforms[Oa].value=D,m.uniforms[Ha].value=T,m.uniformsNeedUpdate=!0,i(et)}),e(Yn,D=>{m.uniforms[io].value=Math.min(Math.max(0,D),255)/255,m.uniformsNeedUpdate=!0,i(et)}),e(qn,(D=!1)=>{m.uniforms[Ya].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(Ze,D=>{m.uniforms[qa].value=D,m.uniformsNeedUpdate=!0,i(et)}),e(oa,D=>{m.uniforms[ja].value=D,m.uniformsNeedUpdate=!0}),e(_e,async D=>{if(i(ft))return;const T=await i(On);D<0&&(D=0),D>T&&(D=T),A=D,m.uniforms[eo].value=D,m.uniformsNeedUpdate=!0,i(st,{shDegree:`${D} / max ${T}`}),i(et)}),e(hs,(D=0,T=0)=>{m.uniforms[Xa].value=D<<16|T,m.uniforms[Vs].value=performance.now(),m.uniformsNeedUpdate=!0,i(et)}),e(mn,()=>{m.dispose(),S&&S.dispose(),M&&M.dispose(),v&&v.dispose(),R&&R.dispose()},!0),m}),e(Di,async()=>{const d=new h.Mesh(await i(Qi),await i(xi));return i(Te),i(Le),i(_i,i(ft)),i(Wt,i(In)),d});function l(){i(Te),i(Le)}window.addEventListener("resize",l),e(Oi,()=>{t=!0,window.removeEventListener("resize",l),i(pn),i(mn)}),e(Wn,()=>{if(!i(Ms))return;const d=i(F),g=i(Ct)?.meta||{},y=d.qualityLevel||be;if(i(_e,[0,1,2,3,3,3,3,3,3][y-1]),yt){const m=[4,3,3,2,2,2,1,1,1],I=[7,6,5,4,4,3,2,2,2],S=g.minPixelDiameter||m[y-1],Q=g.maxPixelDiameter||(y<4?128:y>6?512:256);i(Gn,S,Q),i(Yn,g.minAlpha||I[y-1]),i(qn,!1)}else{const m=[128,256,256,512,512,1024,1024,1024,1024],I=[5,4,3,2,2,1,1,1,1],S=g.minPixelDiameter||(y<4?2:1),Q=g.maxPixelDiameter||m[y-1];i(Gn,S,Q),i(Yn,g.minAlpha||I[y-1]),i(qn,y>6)}i(ei)}),e(zi,async()=>{if(i(ft))return;if(i(F).disableTransitionEffectOnLoad)return i(ge,0);let g=.01,y=.01,p=!1,m=0;i(ge,y),i(Zt,()=>{if(t)return;y+=(o-y)*g,i(ge,y);let I=i(Yi);I&&!m&&(m=Date.now());let S=y/a;I&&(S>.9||Date.now()-m>2500)?(i(In)&&i(wn,!0),i(ge,0),p=!0,setTimeout(()=>i(F)?.viewerEvents?.fire(Se),5e3)):I&&S>.7?g=Math.min(g*1.2,.3):I&&S>.5?g=Math.min(g*1.2,.2):S>.4&&(g=Math.min(g*1.05,.1))},()=>!t&&!p,3)}),e(wn,(d=!1)=>{if(i(ft))return;const g=i(F);if(i(Ss,g.transitionEffect),g.transitionEffect===ci.ModelCenterCirccle){for(;s.length;)s.pop().stop=!0;const y=a*.001;let p={currentPointMode:g.pointcloudMode,stepRate:.0015,currentLightRadius:y,stop:!1};s.push(p),i(Zt,()=>{t||(p.currentLightRadius+=a*p.stepRate,i(he,p.currentLightRadius),p.currentLightRadius>a?(i(Wt,!p.currentPointMode),i(he,0),p.stop=!0,s.length===1&&s[0]===p&&s.pop(),i(Xe,d)):p.currentLightRadius/a<.4?p.stepRate=Math.min(p.stepRate*1.02,.03):p.stepRate*=1.04)},()=>!t&&!p.stop)}else i(Ke,performance.now()),i(he,.1),setTimeout(()=>{i(Wt),i(he,0),i(Xe,d)},500)}),e(Xe,(d=!1)=>{i(Ze,0),d&&i(F).viewerEvents?.fire(Ie),i(F).viewerEvents?.fire(is)}),e(Bi,()=>({[Hs]:{type:"t",value:null},[Os]:{type:"t",value:null},[Us]:{type:"t",value:null},[Ns]:{type:"t",value:null},[so]:{type:"v2",value:new h.Vector2},[no]:{type:"v2",value:new h.Vector2},[Ja]:{type:"int",value:0},[Va]:{type:"int",value:1},[Za]:{type:"bool",value:!1},[ja]:{type:"bool",value:!0},[Wa]:{type:"bool",value:!1},[eo]:{type:"int",value:0},[$a]:{type:"float",value:1},[ao]:{type:"float",value:0},[Ua]:{type:"float",value:0},[Na]:{type:"float",value:0},[Ka]:{type:"float",value:0},[to]:{type:"v4",value:new h.Vector4(0,0,0,-1)},[qa]:{type:"int",value:0},[za]:{type:"float",value:performance.now()},[Vs]:{type:"float",value:0},[Oa]:{type:"float",value:1},[Ha]:{type:"float",value:1024},[io]:{type:"float",value:2/255},[pc]:{type:"v4",value:new h.Vector4(1,1,0,.5)},[Ga]:{type:"bool",value:!0},[Ya]:{type:"bool",value:!0},[Xa]:{type:"uint",value:1}}));const u=i(Ci);u.onmessage=d=>{const g=d.data;if(g[oo]){r=g[Vc],c=g[zs];const y=g[oo];i(Ti,y,g[ro],g[vc],g[Ec],g[co]),y.length&&u.postMessage({[Cc]:y},[y.buffer])}},e(Hn,(d,g,y)=>{i(ft)||(o=g,a=y),i(Li,d)});function f(d){const g=d.xyz.slice(0);u.postMessage({[Sc]:!0,[Qc]:g,[Fc]:d.watermarkCount,[ro]:d.index,[yc]:d.version,[co]:d.renderSplatCount,[Ic]:d.visibleSplatCount,[wc]:d.modelSplatCount,[xc]:d.minX,[Dc]:d.maxX,[kc]:d.minY,[Tc]:d.maxY,[Lc]:d.minZ,[Rc]:d.maxZ},[g.buffer])}}function Gc(n){const t=(a,...o)=>n.fire(a,...o),e=(a,o,s)=>n.on(a,o,s),i=new Set(gr.split(""));e(es,async(a="",o=!0,s=!0)=>{const r=a.trim().substring(0,100);let c=await t(na,r),A=[];for(let S=0;S<c.length;S++){let Q=[],k=c[S];for(let M=0;M<k.length;M++)Q.push([(k[M]%20-10)*.02,((k[M]/20|0)-10)*.02]);A.push(Q)}let l=[],u=r.split("");for(let S=0;S<u.length;S++)l[S]=i.has(u[S])?.22:.4;let f=u.length/2|0,d=l[f]/2,g=!(u.length%2),y=g?0:-d;for(let S=f-1;S>=0;S--){y-=l[S]/2;for(let Q of A[S])Q[0]+=y;y-=l[S]/2}d=l[f]/2,y=g?0:d;for(let S=A.length-f;S<A.length;S++){y+=l[S]/2;for(let Q of A[S])Q[0]+=y;y+=l[S]/2}let p=0;for(let S of A)p+=S.length;const m=new Uint8Array(p*G);let I=0;for(let S of A)for(let Q of S)m.set(await ac(Q[0],Q[1],o,s),G*I++);return m})}const Yc=/^[og]\s*(.+)?/,qc=/^mtllib /,Wc=/^usemtl /,$c=/^usemap /,go=/\s+/,ho=new h.Vector3,Gs=new h.Vector3,fo=new h.Vector3,po=new h.Vector3,xt=new h.Vector3,li=new h.Color;function jc(){const n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(t,e){if(this.object&&this.object.fromDeclaration===!1){this.object.name=t,this.object.fromDeclaration=e!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:t||"",fromDeclaration:e!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(a,o){const s=this._finalize(!1);s&&(s.inherited||s.groupCount<=0)&&this.materials.splice(s.index,1);const r={index:this.materials.length,name:a||"",mtllib:Array.isArray(o)&&o.length>0?o[o.length-1]:"",smooth:s!==void 0?s.smooth:this.smooth,groupStart:s!==void 0?s.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(c){const A={index:typeof c=="number"?c:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return A.clone=this.clone.bind(A),A}};return this.materials.push(r),r},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(a){const o=this.currentMaterial();if(o&&o.groupEnd===-1&&(o.groupEnd=this.geometry.vertices.length/3,o.groupCount=o.groupEnd-o.groupStart,o.inherited=!1),a&&this.materials.length>1)for(let s=this.materials.length-1;s>=0;s--)this.materials[s].groupCount<=0&&this.materials.splice(s,1);return a&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),o}},i&&i.name&&typeof i.clone=="function"){const a=i.clone(0);a.inherited=!0,this.object.materials.push(a)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(t,e){const i=parseInt(t,10);return(i>=0?i-1:i+e/3)*3},parseNormalIndex:function(t,e){const i=parseInt(t,10);return(i>=0?i-1:i+e/3)*3},parseUVIndex:function(t,e){const i=parseInt(t,10);return(i>=0?i-1:i+e/2)*2},addVertex:function(t,e,i){const a=this.vertices,o=this.object.geometry.vertices;o.push(a[t+0],a[t+1],a[t+2]),o.push(a[e+0],a[e+1],a[e+2]),o.push(a[i+0],a[i+1],a[i+2])},addVertexPoint:function(t){const e=this.vertices;this.object.geometry.vertices.push(e[t+0],e[t+1],e[t+2])},addVertexLine:function(t){const e=this.vertices;this.object.geometry.vertices.push(e[t+0],e[t+1],e[t+2])},addNormal:function(t,e,i){const a=this.normals,o=this.object.geometry.normals;o.push(a[t+0],a[t+1],a[t+2]),o.push(a[e+0],a[e+1],a[e+2]),o.push(a[i+0],a[i+1],a[i+2])},addFaceNormal:function(t,e,i){const a=this.vertices,o=this.object.geometry.normals;ho.fromArray(a,t),Gs.fromArray(a,e),fo.fromArray(a,i),xt.subVectors(fo,Gs),po.subVectors(ho,Gs),xt.cross(po),xt.normalize(),o.push(xt.x,xt.y,xt.z),o.push(xt.x,xt.y,xt.z),o.push(xt.x,xt.y,xt.z)},addColor:function(t,e,i){const a=this.colors,o=this.object.geometry.colors;a[t]!==void 0&&o.push(a[t+0],a[t+1],a[t+2]),a[e]!==void 0&&o.push(a[e+0],a[e+1],a[e+2]),a[i]!==void 0&&o.push(a[i+0],a[i+1],a[i+2])},addUV:function(t,e,i){const a=this.uvs,o=this.object.geometry.uvs;o.push(a[t+0],a[t+1]),o.push(a[e+0],a[e+1]),o.push(a[i+0],a[i+1])},addDefaultUV:function(){const t=this.object.geometry.uvs;t.push(0,0),t.push(0,0),t.push(0,0)},addUVLine:function(t){const e=this.uvs;this.object.geometry.uvs.push(e[t+0],e[t+1])},addFace:function(t,e,i,a,o,s,r,c,A){const l=this.vertices.length;let u=this.parseVertexIndex(t,l),f=this.parseVertexIndex(e,l),d=this.parseVertexIndex(i,l);if(this.addVertex(u,f,d),this.addColor(u,f,d),r!==void 0&&r!==""){const g=this.normals.length;u=this.parseNormalIndex(r,g),f=this.parseNormalIndex(c,g),d=this.parseNormalIndex(A,g),this.addNormal(u,f,d)}else this.addFaceNormal(u,f,d);if(a!==void 0&&a!==""){const g=this.uvs.length;u=this.parseUVIndex(a,g),f=this.parseUVIndex(o,g),d=this.parseUVIndex(s,g),this.addUV(u,f,d),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(t){this.object.geometry.type="Points";const e=this.vertices.length;for(let i=0,a=t.length;i<a;i++){const o=this.parseVertexIndex(t[i],e);this.addVertexPoint(o),this.addColor(o)}},addLineGeometry:function(t,e){this.object.geometry.type="Line";const i=this.vertices.length,a=this.uvs.length;for(let o=0,s=t.length;o<s;o++)this.addVertexLine(this.parseVertexIndex(t[o],i));for(let o=0,s=e.length;o<s;o++)this.addUVLine(this.parseUVIndex(e[o],a))}};return n.startObject("",!1),n}class Jc extends h.Loader{constructor(t){super(t),this.materials=null}load(t,e,i,a){const o=this,s=new h.FileLoader(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,function(r){try{e(o.parse(r))}catch(c){a?a(c):console.error(c),o.manager.itemError(t)}},i,a)}setMaterials(t){return this.materials=t,this}parse(t){const e=new jc;t.indexOf(`\r
357
+ `)!==-1&&(t=t.replace(/\r\n/g,`
358
+ `)),t.indexOf(`\\
359
+ `)!==-1&&(t=t.replace(/\\\n/g,""));const i=t.split(`
360
+ `);let a=[];for(let r=0,c=i.length;r<c;r++){const A=i[r].trimStart();if(A.length===0)continue;const l=A.charAt(0);if(l!=="#")if(l==="v"){const u=A.split(go);switch(u[0]){case"v":e.vertices.push(parseFloat(u[1]),parseFloat(u[2]),parseFloat(u[3])),u.length>=7?(li.setRGB(parseFloat(u[4]),parseFloat(u[5]),parseFloat(u[6]),h.SRGBColorSpace),e.colors.push(li.r,li.g,li.b)):e.colors.push(void 0,void 0,void 0);break;case"vn":e.normals.push(parseFloat(u[1]),parseFloat(u[2]),parseFloat(u[3]));break;case"vt":e.uvs.push(parseFloat(u[1]),parseFloat(u[2]));break}}else if(l==="f"){const f=A.slice(1).trim().split(go),d=[];for(let y=0,p=f.length;y<p;y++){const m=f[y];if(m.length>0){const I=m.split("/");d.push(I)}}const g=d[0];for(let y=1,p=d.length-1;y<p;y++){const m=d[y],I=d[y+1];e.addFace(g[0],m[0],I[0],g[1],m[1],I[1],g[2],m[2],I[2])}}else if(l==="l"){const u=A.substring(1).trim().split(" ");let f=[];const d=[];if(A.indexOf("/")===-1)f=u;else for(let g=0,y=u.length;g<y;g++){const p=u[g].split("/");p[0]!==""&&f.push(p[0]),p[1]!==""&&d.push(p[1])}e.addLineGeometry(f,d)}else if(l==="p"){const f=A.slice(1).trim().split(" ");e.addPointGeometry(f)}else if((a=Yc.exec(A))!==null){const u=(" "+a[0].slice(1).trim()).slice(1);e.startObject(u)}else if(Wc.test(A))e.object.startMaterial(A.substring(7).trim(),e.materialLibraries);else if(qc.test(A))e.materialLibraries.push(A.substring(7).trim());else if($c.test(A))console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');else if(l==="s"){if(a=A.split(" "),a.length>1){const f=a[1].trim().toLowerCase();e.object.smooth=f!=="0"&&f!=="off"}else e.object.smooth=!0;const u=e.object.currentMaterial();u&&(u.smooth=e.object.smooth)}else{if(A==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+A+'"')}}e.finalize();const o=new h.Group;if(o.materialLibraries=[].concat(e.materialLibraries),!(e.objects.length===1&&e.objects[0].geometry.vertices.length===0)===!0)for(let r=0,c=e.objects.length;r<c;r++){const A=e.objects[r],l=A.geometry,u=A.materials,f=l.type==="Line",d=l.type==="Points";let g=!1;if(l.vertices.length===0)continue;const y=new h.BufferGeometry;y.setAttribute("position",new h.Float32BufferAttribute(l.vertices,3)),l.normals.length>0&&y.setAttribute("normal",new h.Float32BufferAttribute(l.normals,3)),l.colors.length>0&&(g=!0,y.setAttribute("color",new h.Float32BufferAttribute(l.colors,3))),l.hasUVIndices===!0&&y.setAttribute("uv",new h.Float32BufferAttribute(l.uvs,2));const p=[];for(let I=0,S=u.length;I<S;I++){const Q=u[I],k=Q.name+"_"+Q.smooth+"_"+g;let M=e.materials[k];if(this.materials!==null){if(M=this.materials.create(Q.name),f&&M&&!(M instanceof h.LineBasicMaterial)){const b=new h.LineBasicMaterial;h.Material.prototype.copy.call(b,M),b.color.copy(M.color),M=b}else if(d&&M&&!(M instanceof h.PointsMaterial)){const b=new h.PointsMaterial({size:10,sizeAttenuation:!1});h.Material.prototype.copy.call(b,M),b.color.copy(M.color),b.map=M.map,M=b}}M===void 0&&(f?M=new h.LineBasicMaterial:d?M=new h.PointsMaterial({size:1,sizeAttenuation:!1}):M=new h.MeshPhongMaterial,M.name=Q.name,M.flatShading=!Q.smooth,M.vertexColors=g,e.materials[k]=M),p.push(M)}let m;if(p.length>1){for(let I=0,S=u.length;I<S;I++){const Q=u[I];y.addGroup(Q.groupStart,Q.groupCount,I)}f?m=new h.LineSegments(y,p):d?m=new h.Points(y,p):m=new h.Mesh(y,p)}else f?m=new h.LineSegments(y,p[0]):d?m=new h.Points(y,p[0]):m=new h.Mesh(y,p[0]);m.name=A.name,o.add(m)}else if(e.vertices.length>0){const r=new h.PointsMaterial({size:1,sizeAttenuation:!1}),c=new h.BufferGeometry;c.setAttribute("position",new h.Float32BufferAttribute(e.vertices,3)),e.colors.length>0&&e.colors[0]!==void 0&&(c.setAttribute("color",new h.Float32BufferAttribute(e.colors,3)),r.vertexColors=!0);const A=new h.Points(c,r);o.add(A)}return o}}function Kc(n){let t=!1;const e=(r,c,A)=>n.on(r,c,A),i=(r,...c)=>n.fire(r,...c);e(Ui,()=>t=!0);const a=new Map,o=new Map;e(Fe,()=>i(It)&&a.set(Date.now(),1)),e(Pe,()=>i(It)&&i(se,a)),e(Ue,()=>i(It)&&o.set(Date.now(),1)),e(Ne,()=>i(It)&&i(se,o)),e(Jt,()=>{t||(i(Ue),i(It)&&i(st,{fov:i(ue),position:i(jt,i(Bt)),lookAt:i(jt,i(Dt)),lookUp:i(jt,i(ne))}))},!0);let s=0;e(ae,()=>{t||(i(Ii),i(It)&&(i(Fe),!(s++%5)&&i(st,{fps:i(Pe),realFps:i(Ne)})))},!0),e(se,r=>{let c=[],A=Date.now(),l=0;for(const u of r.keys())A-u<=1e3?l++:c.push(u);return c.forEach(u=>r.delete(u)),Math.min(l,30)}),window.addEventListener("beforeunload",()=>i(Ve)),e(ds,async r=>{i(st,{scene:"small (obj)"});const c=await Xt(r,n);if(c){const A=URL.createObjectURL(new Blob([c],{type:"application/octet-stream"}));new Jc().load(A,l=>i(z).add(l)),i(rt,!0),i(Ee,!0)}i(pe,0)})}function Xc(n){const t={...n};return t.bigSceneMode??(t.bigSceneMode=!1),t.pointcloudMode??(t.pointcloudMode=!t.bigSceneMode),t.lightFactor??(t.lightFactor=1),t.name??(t.name=""),t.showWatermark??(t.showWatermark=!0),t.shDegree??(t.shDegree=0),t.depthTest??(t.depthTest=!0),t.debugMode??(t.debugMode=!1),t.maxRenderCountOfMobile??(t.maxRenderCountOfMobile=t.bigSceneMode?256*1e4:384*10240),t.maxRenderCountOfPc??(t.maxRenderCountOfPc=t.bigSceneMode?320*1e4:384*1e4),t}function mo(n){const t={...n};return t.position=t.position?[...t.position]:[0,-5,15],t.lookAt=t.lookAt?[...t.lookAt]:[0,0,0],t.lookUp=t.lookUp?[...t.lookUp]:[0,-1,0],t.fov??(t.fov=45),t.near??(t.near=.001),t.far??(t.far=1e3),t.enableDamping??(t.enableDamping=!0),t.autoRotate??(t.autoRotate=!0),t.enableZoom??(t.enableZoom=!0),t.enableRotate??(t.enableRotate=!0),t.enablePan??(t.enablePan=!0),t.enableKeyboard??(t.enableKeyboard=!0),t.bigSceneMode??(t.bigSceneMode=!1),t.pointcloudMode??(t.pointcloudMode=!t.bigSceneMode),t.lightFactor??(t.lightFactor=1.1),t.debugMode??(t.debugMode=location.protocol==="http:"||/^test\./.test(location.host)),t.markMode??(t.markMode=!1),t.markVisible??(t.markVisible=!0),t.meterScale??(t.meterScale=1),t.background??(t.background="#000000"),t.minDistance??(t.minDistance=.1),t.maxDistance??(t.maxDistance=1e3),t.qualityLevel??(t.qualityLevel=be),t.sortType??(t.sortType=en.Default),t.transitionEffect??(t.transitionEffect=ci.ModelCenterCirccle),t}function Zc(n){let t;n.root?t=typeof n.root=="string"?document.querySelector(n.root)||document.querySelector("#gsviewer"):n.root:t=document.querySelector("#gsviewer"),t||(t=document.createElement("div"),t.id="gsviewer",document.body.appendChild(t));let e=null;return n.renderer?e=n.renderer:(e=new h.WebGLRenderer({antialias:!1,stencil:!0,logarithmicDepthBuffer:!0,precision:"highp"}),e.setSize(t.clientWidth,t.clientHeight),e.setPixelRatio(Math.min(devicePixelRatio,2)),n.renderer=e),e.domElement.classList.add("gsviewer-canvas"),t.appendChild(e.domElement),e}function tl(n){let t=n.camera;if(!t){const e=n.renderer.domElement,i=e.width/e.height;let a=new h.Vector3().fromArray(n.lookUp),o=new h.Vector3().fromArray(n.lookAt),s=new h.Vector3().fromArray(n.position);t=new h.PerspectiveCamera(n.fov,i,n.near,n.far),t.position.copy(s),t.up.copy(a).normalize(),t.lookAt(o),n.camera=t}return n.camera}function el(n){const{renderer:t,scene:e}=n,i={renderer:t,scene:e};return i.viewerEvents=n.viewerEvents,i.debugMode=n.debugMode,i.renderer=n.renderer,i.scene=n.scene,i.controls=n.controls,i.bigSceneMode=n.bigSceneMode,i.pointcloudMode=n.pointcloudMode,i.maxRenderCountOfMobile=n.maxRenderCountOfMobile,i.maxRenderCountOfPc=n.maxRenderCountOfPc,i.lightFactor=n.lightFactor,i.shDegree=n.shDegree,i.qualityLevel=n.qualityLevel,i.sortType=n.sortType,i.disableTransitionEffectOnLoad=!!n.disableTransitionEffectOnLoad,i.transitionEffect=n.transitionEffect||ci.ModelCenterCirccle,i}const Co='(function(){"use strict";let l=0;l++;const _=`$${l++}`,tt=`$${l++}`;l++,l++,l++;const A=`$${l++}`,L=`$${l++}`,Q=`$${l++}`,U=`$${l++}`,j=`$${l++}`,et=`$${l++}`,nt=`$${l++}`,xt=`$${l++}`;l++;const kt=`$${l++}`,Mt=`$${l++}`;l++;const at=`$${l++}`;l++;const Ct=`$${l++}`;l++;const Dt=`$${l++}`,It=`$${l++}`,yt=`$${l++}`,Wt=`$${l++}`,bt=`$${l++}`,wt=`$${l++}`,gt=`$${l++}`,Zt=`$${l++}`,Nt=`$${l++}`,vt=`$${l++}`,ot=`$${l++}`,Ft=`$${l++}`,Bt=`$${l++}`,O=`$${l++}`,rt=`$${l++}`,it=`$${l++}`,lt=navigator.userAgent.includes("Mobi"),st=1,T=5,ct=9;var F=(t=>(t[t.Default=1]="Default",t[t.ZdepthFrontNearest2010=2010]="ZdepthFrontNearest2010",t[t.ZdepthFront2011=2011]="ZdepthFront2011",t[t.ZdepthFrontNearFar2012=2012]="ZdepthFrontNearFar2012",t[t.ZdepthFullNearFar2112=2112]="ZdepthFullNearFar2112",t))(F||{});const q=self;let E={index:0,version:0},G={index:1,version:0},dt=!1,V=T,g=F.Default,y=0,H,Pt=lt?.5:.2,J,X=[],N=new Int32Array(0),S=new Float32Array(0),Z=new Int32Array(0),R=new Int32Array(0),b=new Int32Array(0),ht=[],K,ut,mt=0,ft,B=.4,P=0;function St(t,n,a){if(!dt)return;let r=E.version>G.version?E:G;if(!r.version)return;const{xyz:o,renderSplatCount:d,visibleSplatCount:p,modelSplatCount:x,watermarkCount:$,index:W,version:m}=r;if(mt===m&&Math.abs(X[2]-t[2])+Math.abs(X[6]-t[6])+Math.abs(X[10]-t[10])+Math.abs(X[14]-t[14])<Pt)return;X=t,mt=m;let s=Date.now(),k;if(!d){const e=new Uint32Array(0);q.postMessage({[_]:e,[Q]:0,[U]:p,[j]:x,[A]:W,[L]:m,[nt]:0,[et]:s},[e.buffer]);return}let I=0,f=0,i=Qt();const u=d-$,M=g===1?V>T?At:z:Y,h=g===1?t:n,c=n[0]*a[0]+n[1]*a[1]+n[2]*a[2];let{maxDepth:D,minDepth:w}=Lt(r,h,M,c);if(D-w<=1e-5){for(let e=0;e<u;++e)i[e]=e;k=u+$}else{let e=v(y).bucketCnt;b.length<e?b=new Int32Array(e):b.fill(0),N.length<y&&(N=new Int32Array(y)),g!==F.Default&&S.length<y&&(S=new Float32Array(y)),g===F.ZdepthFrontNearest2010?(Z.length<y&&(Z=new Int32Array(y)),{renderCount:k,bucketBits:f}=Rt({depthIndex:i,depths:S,distances:N,counters:b,int32Tmp1:Z,xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,dotPos:c,sortCameraDir:n,depthNearRate:B,depthNearValue:P})):g===F.ZdepthFront2011?(Z.length<y&&(Z=new Int32Array(y)),{renderCount:k,bucketBits:f}=Vt({depthIndex:i,depths:S,distances:N,counters:b,int32Tmp1:Z,xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,dotPos:c,sortCameraDir:n})):g===F.ZdepthFrontNearFar2012?(Z.length<y&&(Z=new Int32Array(y)),R.length<y&&(R=new Int32Array(y)),{renderCount:k,bucketBits:f}=Xt({depthIndex:i,depths:S,distances:N,counters:b,int32Tmp1:Z,int32Tmp2:R,xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,dotPos:c,sortCameraDir:n,depthNearRate:B,depthNearValue:P})):g===F.ZdepthFullNearFar2112?(Z.length<y&&(Z=new Int32Array(y)),R.length<y&&(R=new Int32Array(y)),{renderCount:k,bucketBits:f}=Yt({depthIndex:i,depths:S,distances:N,counters:b,int32Tmp1:Z,int32Tmp2:R,xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,dotPos:c,sortCameraDir:n,depthNearRate:B,depthNearValue:P})):{renderCount:k,bucketBits:f}=Tt({depthIndex:i,distances:N,counters:b,xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,fnCalcDepth:M,sortViewProj:t})}$&&zt({xyz:o,dataCount:u,watermarkCount:$,maxDepth:D,minDepth:w,sortViewProj:t,depthIndex:i}),I=Date.now()-s,q.postMessage({[_]:i,[Q]:k,[U]:p,[j]:x,[A]:W,[L]:m,[et]:s,[nt]:I,[Bt]:f||16,[O]:g||1},[i.buffer])}function Rt(t){const{depthIndex:n,depths:a,distances:r,counters:o,int32Tmp1:d,xyz:p,dataCount:x,watermarkCount:$,minDepth:W,dotPos:m,sortCameraDir:s}=t,k=Math.min(t.maxDepth,0),I=t.depthNearValue?k-Math.abs(t.depthNearValue):k-(k-W)*t.depthNearRate;let f=0;for(let c=0;c<x;++c)a[c]=Y(s,p[3*c],p[3*c+1],p[3*c+2],m),d[f]=c,f+=(a[c]<=0&&a[c]>=I)|0;const i=f+$,{bucketBits:u,bucketCnt:M}=v(f),h=(M-1)/(k-I);for(let c=0,D=0;c<f;++c)D=(a[d[c]]-I)*h|0,o[r[c]=D]++;for(let c=1;c<M;++c)o[c]+=o[c-1];for(let c=0;c<f;++c)n[--o[r[c]]]=d[c];return{renderCount:i,bucketBits:u}}function Vt(t){const{depthIndex:n,depths:a,distances:r,counters:o,int32Tmp1:d,xyz:p,dataCount:x,watermarkCount:$,minDepth:W,dotPos:m,sortCameraDir:s}=t,k=Math.min(t.maxDepth,0);let I=0;for(let h=0;h<x;++h)a[h]=Y(s,p[3*h],p[3*h+1],p[3*h+2],m),d[I]=h,I+=a[h]<=0|0;const f=I+$,{bucketBits:i,bucketCnt:u}=v(I),M=(u-1)/(k-W);for(let h=0,c=0;h<I;++h)c=(a[d[h]]-W)*M|0,o[r[h]=c]++;for(let h=1;h<u;++h)o[h]+=o[h-1];for(let h=0;h<I;++h)n[--o[r[h]]]=d[h];return{renderCount:f,bucketBits:i}}function Xt(t){const{depthIndex:n,depths:a,distances:r,counters:o,int32Tmp1:d,int32Tmp2:p,xyz:x,dataCount:$,watermarkCount:W,maxDepth:m,minDepth:s,dotPos:k,sortCameraDir:I}=t,f=Math.min(m,0),i=t.depthNearValue?f-Math.abs(t.depthNearValue):f-(f-s)*t.depthNearRate;let u=0,M=0;for(let e=0,C=0,$t=0;e<$;++e)a[e]=Y(I,x[3*e],x[3*e+1],x[3*e+2],k),d[u]=e,p[M]=e,C=(a[e]<=0&&a[e]>=i)|0,$t=a[e]<i|0,u+=C,M+=$t;const h=u+M+W;let{bucketBits:c,bucketCnt:D}=v(M),w=(D-1)/(i-s);for(let e=0,C=0;e<M;++e)C=(a[p[e]]-s)*w|0,o[r[e]=C]++;for(let e=1;e<D;++e)o[e]+=o[e-1];for(let e=0;e<M;++e)n[--o[r[e]]]=p[e];o.fill(0),D=v(u).bucketCnt,w=(D-1)/(f-i);for(let e=0,C=0;e<u;++e)C=(a[d[e]]-i)*w|0,o[r[e]=C]++;for(let e=1;e<D;++e)o[e]+=o[e-1];for(let e=0;e<u;++e)n[--o[r[e]]+M]=d[e];return{renderCount:h,bucketBits:c}}function Yt(t){const{depthIndex:n,depths:a,distances:r,counters:o,int32Tmp1:d,int32Tmp2:p,xyz:x,dataCount:$,watermarkCount:W,maxDepth:m,minDepth:s,dotPos:k,sortCameraDir:I}=t,f=Math.min(m,0),i=t.depthNearValue?f-Math.abs(t.depthNearValue):f-(f-s)*t.depthNearRate;let u=0,M=0;for(let e=0,C=0;e<$;++e)a[e]=Y(I,x[3*e],x[3*e+1],x[3*e+2],k),d[u]=e,p[M]=e,C=(a[e]<=0&&a[e]>=i)|0,u+=C,M+=C^1;const h=u+M+W;let{bucketBits:c,bucketCnt:D}=v(M),w=(D-1)/(i-s);for(let e=0,C=0;e<M;++e)C=(a[p[e]]-s)*w|0,o[r[e]=C]++;for(let e=1;e<D;++e)o[e]+=o[e-1];for(let e=0;e<M;++e)n[--o[r[e]]]=p[e];o.fill(0),D=v(u).bucketCnt,w=(D-1)/(f-i);for(let e=0,C=0;e<u;++e)C=(a[d[e]]-i)*w|0,o[r[e]=C]++;for(let e=1;e<D;++e)o[e]+=o[e-1];for(let e=0;e<u;++e)n[--o[r[e]]+M]=d[e];return{renderCount:h,bucketBits:c}}function Tt(t){const{depthIndex:n,distances:a,counters:r,xyz:o,dataCount:d,watermarkCount:p,maxDepth:x,minDepth:$,fnCalcDepth:W,sortViewProj:m}=t,s=d+p;let{bucketBits:k,bucketCnt:I}=v(d),f=(I-1)/(x-$);for(let i=0,u=0;i<d;++i)u=(W(m,o[3*i],o[3*i+1],o[3*i+2])-$)*f|0,r[a[i]=u]++;for(let i=1;i<I;++i)r[i]+=r[i-1];for(let i=0;i<d;++i)n[--r[a[i]]]=i;return{renderCount:s,bucketBits:k}}function zt(t){let{xyz:n,dataCount:a,watermarkCount:r,maxDepth:o,minDepth:d,sortViewProj:p,depthIndex:x}=t;const $=a+r;let{bucketCnt:W}=v(r,1);o=d=z(p,n[3*a],n[3*a+1],n[3*a+2]);for(let m=a,s=0;m<$;++m)s=z(p,n[3*m],n[3*m+1],n[3*m+2]),o=Math.max(s,o),d=Math.min(s,d);if(o-d<=1e-5)for(let m=0;m<r;++m)x[a+m]=a+m;else{let m=(W-1)/(o-d);b.length<W?b=new Int32Array(W):b.fill(0);for(let s=a,k=0;s<$;++s)k=(z(p,n[3*s],n[3*s+1],n[3*s+2])-d)*m|0,b[N[s-a]=k]++;for(let s=1;s<W;++s)b[s]+=b[s-1];for(let s=0;s<r;++s)x[a+--b[N[s]]]=a+s}}function z(t,n,a,r){return t[2]*n+t[6]*a+t[10]*r}function At(t,n,a,r){return t[2]*n+t[6]*a+t[10]*r+t[14]}function Y(t,n,a,r,o){return o-t[0]*n-t[1]*a-t[2]*r}function Lt(t,n,a,r){let o=-1/0,d=1/0;const p=[[t.minX,t.minY,t.minZ],[t.minX,t.minY,t.maxZ],[t.minX,t.maxY,t.minZ],[t.minX,t.maxY,t.maxZ],[t.maxX,t.minY,t.minZ],[t.maxX,t.minY,t.maxZ],[t.maxX,t.maxY,t.minZ],[t.maxX,t.maxY,t.maxZ]];for(const x of p){const $=a(n,x[0],x[1],x[2],r);o=Math.max(o,$),d=Math.min(d,$)}return{maxDepth:o,minDepth:d}}const pt=()=>{if(!H){H=!0;const t=J,n=K;St(t,n,ut),setTimeout(()=>!(H=!1)&&(g===1?t!==J:n!=K)&&pt())}};function v(t,n=0){if(!t)return{bucketBits:1,bucketCnt:1};let a=n?Math.min(n,V):V,r=11+(lt?Math.max(a-1,1):a);return a<3?r=Math.max(Math.min(r,Math.round(Math.log2(t/32))),8):a<4?r=Math.max(Math.min(r,Math.round(Math.log2(t/16))),8):a<5&&(r=Math.max(Math.min(r,Math.round(Math.log2(t/8))),8)),a>=5&&(r=Math.min(r,Math.round(Math.log2(t/4)))),{bucketBits:r,bucketCnt:2**r}}function Qt(){return ht.pop()||new Uint32Array(y)}function Ut(t){t.fill(0)&&ht.push(t)}q.onmessage=t=>{const n=t.data;if(n[xt]){let a=!ft||n[A]===0?E:G;a.minX=n[Dt],a.maxX=n[It],a.minY=n[yt],a.maxY=n[Wt],a.minZ=n[bt],a.maxZ=n[wt],a.xyz=new Float32Array(n[Ct].buffer),a.watermarkCount=n[Zt],a.version=n[L],a.renderSplatCount=n[Q],a.visibleSplatCount=n[U],a.modelSplatCount=n[j],a.textureReady=!0,a.textureReadyTime=Date.now()}else if(n[at]){const a=n[at];K=n[Nt],ut=n[vt],a[2]*=-1,a[6]*=-1,a[10]*=-1,a[14]*=-1,J=a,pt()}else n[Ft]?(V=Math.max(st,Math.min(n[ot]||T,ct)),g=n[O]||g,B=n[rt]||B,P=n[it]||P):n[tt]?Ut(n[tt]):n[gt]&&(ft=n[kt],y=n[Mt],V=Math.max(st,Math.min(n[ot]||T,ct)),g=n[O]||g,B=n[rt]||B,P=n[it]||P,dt=!0)}})();\n',yo=typeof self<"u"&&self.Blob&&new Blob([Co],{type:"text/javascript;charset=utf-8"});function nl(n){let t;try{if(t=yo&&(self.URL||self.webkitURL).createObjectURL(yo),!t)throw"";const e=new Worker(t,{name:n?.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(Co),{name:n?.name})}finally{t&&(self.URL||self.webkitURL).revokeObjectURL(t)}}function il(n){const t=(a,o,s)=>n.on(a,o,s),e=(a,...o)=>n.fire(a,...o),i=new nl;t(Ci,()=>i),t(Si,()=>i.postMessage({[Bc]:e(Ei),[Pc]:e(ji),[Uc]:e(Bt).toArray()})),t(Mi,()=>i.terminate()),t(ei,()=>i.postMessage({[Nc]:!0,[lo]:e(Kn),[zs]:e(Xn),[Ao]:e(Ct)?.meta?.depthNearRate,[uo]:e(Ct)?.meta?.depthNearValue})),(async()=>i.postMessage({[_c]:!0,[bc]:await e(ie),[Mc]:e(ft),[lo]:e(Kn),[zs]:e(Xn),[Ao]:e(Ct)?.meta?.depthNearRate,[uo]:e(Ct)?.meta?.depthNearValue}))()}class sl extends h.Object3D{constructor(t=0,e=0,i=0,a=0,o=0,s=0){super();const r=this,c=new h.BufferGeometry,A=new h.LineBasicMaterial({color:"#ffffff"});r.boxLines=new h.LineSegments(c,A),r.update(t,e,i,a,o,s),r.add(r.boxLines)}update(t,e,i,a,o,s,r){const c=(a-t)/8,A=(o-e)/8,l=(s-i)/8,u=[new h.Vector3(t,e,i),new h.Vector3(a,e,i),new h.Vector3(a,o,i),new h.Vector3(t,o,i),new h.Vector3(t,e,s),new h.Vector3(a,e,s),new h.Vector3(a,o,s),new h.Vector3(t,o,s)],f=[];u.forEach(d=>{f.push(d.x,d.y,d.z),f.push(d.x+(d.x<a?c:-c),d.y,d.z),f.push(d.x,d.y,d.z),f.push(d.x,d.y+(d.y<o?A:-A),d.z),f.push(d.x,d.y,d.z),f.push(d.x,d.y,d.z+(d.z<s?l:-l))}),this.boxLines.geometry.setAttribute("position",new h.Float32BufferAttribute(f,3)),r&&(this.visible=!0)}dispose(){this.boxLines=null}}class Lt extends h.Mesh{constructor(t){super(),this.isSplatMesh=!0,this.disposed=!1;const e=this,i=new ni,a=(l,u,f)=>i.on(l,u,f),o=(l,...u)=>i.fire(l,...u);let s=!1;const r=Xc(t),c=r.controls.object;a(F,()=>r),a(ee,()=>r.renderer.domElement),a(lt,()=>c),a(ue,()=>c.fov),a(Bt,(l=!1)=>l?c.position.clone():c.position),a(Dt,(l=!1)=>l?r.controls.target.clone():r.controls.target),a(Ei,()=>c.projectionMatrix.clone().multiply(c.matrixWorldInverse).multiply(e.matrix).toArray()),a(vi,()=>c.projectionMatrix.clone().multiply(c.matrixWorldInverse)),a(ji,()=>c.getWorldDirection(new h.Vector3).toArray()),a(fe,()=>r.renderer),a(z,()=>r.scene),a(ft,()=>r.bigSceneMode),a(In,()=>r.pointcloudMode),a(Ct,()=>e),a(Kn,()=>r.qualityLevel||be),a(Xn,()=>r.sortType||en.Default),a(Ms,()=>s),a(et,()=>r.viewerEvents?.fire(rt)),Ls(i),fc(i),il(i),zc(i),Gc(i),e.name=`${r.name||e.id}`,e.events=i,e.opts=r,(async()=>(e.copy(await i.fire(Di)),e.meta.transform&&e.applyMatrix4(new h.Matrix4().fromArray(e.meta.transform)),e.frustumCulled=!1,e.onBeforeRender=()=>{o(Si),o(Pi,performance.now())},e.onAfterRender=()=>{o(Vi,1e4)&&o(et)},s=!0,o(Wn)))();const A=new sl;A.visible=!1,A.renderOrder=99999,e.boundBox=A,e.add(A),a(zn,(l,u,f,d,g,y,p)=>{A.update(l,u,f,d,g,y,p)}),a(pa,(l=!0)=>A.visible=l)}options(t){const e=this;if(e.disposed)return;const i=(o,...s)=>e.events.fire(o,...s),a=e.opts;return t&&(t.pointcloudMode!==void 0&&i(Wt,t.pointcloudMode),t.lightFactor!==void 0&&i(de,t.lightFactor),t.maxRenderCountOfMobile!==void 0&&(a.maxRenderCountOfMobile=t.maxRenderCountOfMobile),t.maxRenderCountOfPc!==void 0&&(a.maxRenderCountOfPc=t.maxRenderCountOfPc),t.qualityLevel!==void 0&&(a.qualityLevel=t.qualityLevel)&&i(Wn),!a.mapMode&&t.sortType!==void 0&&(a.sortType=t.sortType)&&i(ei),i(et)),{...a}}async addModel(t,e={}){const i=this;i.disposed||(i.meta=e,await i.events.fire(Ni,t,e))}fire(t,...e){const i=this;if(!i.disposed)return i.events.fire(t,...e)}dispose(){const t=this;if(t.disposed)return;t.disposed=!0;const e=(i,...a)=>t.events.fire(i,...a);e(_t,t),e(_t,t.boundBox),e(z).remove(t),e(z).remove(t.boundBox),e(Cn),e(Hi),e(Mi),e(Oi),t.events.clear(),t.events=null,t.opts=null,t.onAfterRender=null,t.boundBox=null}}class al extends h.Object3D{constructor(t=new h.Vector3(0,0,1),e=new h.Vector3(0,0,0),i=1,a=.1,o=16776960,s=i*.2,r=s*.2){super(),this._axis=new h.Vector3,this.type="ArrowHelper";const c=new h.CylinderGeometry(a,a,i,32);c.translate(0,i/2,0);const A=new h.CylinderGeometry(0,r,s,32);A.translate(0,i,0),this.position.copy(e);const l=new h.MeshBasicMaterial({color:o,toneMapped:!1});l.side=h.DoubleSide,this.line=new h.Mesh(c,l),this.line.matrixAutoUpdate=!1,this.line.ignoreIntersect=!0,this.add(this.line);const u=new h.MeshBasicMaterial({color:o,toneMapped:!1});u.side=h.DoubleSide,this.cone=new h.Mesh(A,u),this.cone.matrixAutoUpdate=!1,this.cone.ignoreIntersect=!0,this.add(this.cone),this.setDirection(t),this.renderOrder=99999}setDirection(t){if(t.y>.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{this._axis.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(this._axis,e)}}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}function ol(n){const t=(y,p,m)=>n.on(y,p,m),e=(y,...p)=>n.fire(y,...p),i=new h.PlaneGeometry(1,1);i.rotateX(-Math.PI/2);const a=new h.MeshBasicMaterial({color:16777215});a.transparent=!0,a.opacity=.6,a.depthTest=!1,a.depthWrite=!1,a.side=h.DoubleSide;const o=new h.Mesh(i,a);o.ignoreIntersect=!0;const s=new h.Vector3(0,-1,0);s.normalize();const r=new h.Vector3(0,0,0),c=.5,A=.01,l=16777062,u=.1,f=.03,d=new al(s,r,c,A,l,u,f),g=new h.Object3D;g.add(o),g.add(d),g.renderOrder=99999,o.renderOrder=99999,g.visible=!1,e(z).add(g),t(la,()=>g),t(Ge,y=>{e(Ye,!0),g.visible=y===void 0?!g.visible:y,e(rt)}),t(Dn,()=>g.visible),t(Ye,(y=!1)=>{if(y||g.visible){const p=new h.Quaternion,m=new h.Vector3(0,-1,0);p.setFromUnitVectors(m,e(ne)),g.position.copy(e(Dt)),g.quaternion.copy(p)}})}const Io={type:"change"},Ys={type:"start"},wo={type:"end"},Ai=new h.Ray,Eo=new h.Plane,rl=Math.cos(70*h.MathUtils.DEG2RAD),ct=new h.Vector3,vt=2*Math.PI,nt={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},qs=1e-6;class vo extends h.Controls{constructor(t,e=null){super(t,e),this.state=nt.NONE,this.enabled=!0,this.target=new h.Vector3,this.cursor=new h.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:h.MOUSE.ROTATE,MIDDLE:h.MOUSE.DOLLY,RIGHT:h.MOUSE.PAN},this.touches={ONE:h.TOUCH.ROTATE,TWO:h.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new h.Vector3,this._lastQuaternion=new h.Quaternion,this._lastTargetPosition=new h.Vector3,this._quat=new h.Quaternion().setFromUnitVectors(t.up,new h.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new h.Spherical,this._sphericalDelta=new h.Spherical,this._scale=1,this._panOffset=new h.Vector3,this._rotateStart=new h.Vector2,this._rotateEnd=new h.Vector2,this._rotateDelta=new h.Vector2,this._panStart=new h.Vector2,this._panEnd=new h.Vector2,this._panDelta=new h.Vector2,this._dollyStart=new h.Vector2,this._dollyEnd=new h.Vector2,this._dollyDelta=new h.Vector2,this._dollyDirection=new h.Vector3,this._mouse=new h.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=ll.bind(this),this._onPointerDown=cl.bind(this),this._onPointerUp=Al.bind(this),this._onContextMenu=ml.bind(this),this._onMouseWheel=gl.bind(this),this._onKeyDown=hl.bind(this),this._onTouchStart=fl.bind(this),this._onTouchMove=pl.bind(this),this._onMouseDown=ul.bind(this),this._onMouseMove=dl.bind(this),this._interceptControlDown=Cl.bind(this),this._interceptControlUp=yl.bind(this),this.domElement!==null&&this.connect(),this.update()}connect(){this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(t){t.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=t}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(Io),this.update(),this.state=nt.NONE}update(t=null){const e=this.object.position;ct.copy(e).sub(this.target),ct.applyQuaternion(this._quat),this._spherical.setFromVector3(ct),this.autoRotate&&this.state===nt.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,a=this.maxAzimuthAngle;isFinite(i)&&isFinite(a)&&(i<-Math.PI?i+=vt:i>Math.PI&&(i-=vt),a<-Math.PI?a+=vt:a>Math.PI&&(a-=vt),i<=a?this._spherical.theta=Math.max(i,Math.min(a,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+a)/2?Math.max(i,this._spherical.theta):Math.min(a,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let o=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const s=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),o=s!=this._spherical.radius}if(ct.setFromSpherical(this._spherical),ct.applyQuaternion(this._quatInverse),e.copy(this.target).add(ct),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let s=null;if(this.object.isPerspectiveCamera){const r=ct.length();s=this._clampDistance(r*this._scale);const c=r-s;this.object.position.addScaledVector(this._dollyDirection,c),this.object.updateMatrixWorld(),o=!!c}else if(this.object.isOrthographicCamera){const r=new h.Vector3(this._mouse.x,this._mouse.y,0);r.unproject(this.object);const c=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),o=c!==this.object.zoom;const A=new h.Vector3(this._mouse.x,this._mouse.y,0);A.unproject(this.object),this.object.position.sub(A).add(r),this.object.updateMatrixWorld(),s=ct.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;s!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(s).add(this.object.position):(Ai.origin.copy(this.object.position),Ai.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Ai.direction))<rl?this.object.lookAt(this.target):(Eo.setFromNormalAndCoplanarPoint(this.object.up,this.target),Ai.intersectPlane(Eo,this.target))))}else if(this.object.isOrthographicCamera){const s=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),s!==this.object.zoom&&(this.object.updateProjectionMatrix(),o=!0)}return this._scale=1,this._performCursorZoom=!1,o||this._lastPosition.distanceToSquared(this.object.position)>qs||8*(1-this._lastQuaternion.dot(this.object.quaternion))>qs||this._lastTargetPosition.distanceToSquared(this.target)>qs?(this.dispatchEvent(Io),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?vt/60*this.autoRotateSpeed*t:vt/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){ct.setFromMatrixColumn(e,0),ct.multiplyScalar(-t),this._panOffset.add(ct)}_panUp(t,e){this.screenSpacePanning===!0?ct.setFromMatrixColumn(e,1):(ct.setFromMatrixColumn(e,0),ct.crossVectors(this.object.up,ct)),ct.multiplyScalar(t),this._panOffset.add(ct)}_pan(t,e){const i=this.domElement;if(this.object.isPerspectiveCamera){const a=this.object.position;ct.copy(a).sub(this.target);let o=ct.length();o*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*o/i.clientHeight,this.object.matrix),this._panUp(2*e*o/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),a=t-i.left,o=e-i.top,s=i.width,r=i.height;this._mouse.x=a/s*2-1,this._mouse.y=-(o/r)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(vt*this._rotateDelta.x/e.clientHeight),this._rotateUp(vt*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(vt*this.rotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-vt*this.rotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(vt*this.rotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-vt*this.rotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._rotateStart.set(i,a)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._panStart.set(i,a)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,a=t.pageY-e.y,o=Math.sqrt(i*i+a*a);this._dollyStart.set(0,o)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const i=this._getSecondPointerPosition(t),a=.5*(t.pageX+i.x),o=.5*(t.pageY+i.y);this._rotateEnd.set(a,o)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(vt*this._rotateDelta.x/e.clientHeight),this._rotateUp(vt*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),i=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._panEnd.set(i,a)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),i=t.pageX-e.x,a=t.pageY-e.y,o=Math.sqrt(i*i+a*a);this._dollyEnd.set(0,o),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const s=(t.pageX+e.x)*.5,r=(t.pageY+e.y)*.5;this._updateZoomParameters(s,r)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId){this._pointers.splice(e,1);return}}_isTrackingPointer(t){for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId)return!0;return!1}_trackPointer(t){let e=this._pointerPositions[t.pointerId];e===void 0&&(e=new h.Vector2,this._pointerPositions[t.pointerId]=e),e.set(t.pageX,t.pageY)}_getSecondPointerPosition(t){const e=t.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[e]}_customWheelEvent(t){const e=t.deltaMode,i={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(e){case 1:i.deltaY*=16;break;case 2:i.deltaY*=100;break}return t.ctrlKey&&!this._controlActive&&(i.deltaY*=10),i}}function cl(n){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(n.pointerId),this.domElement.addEventListener("pointermove",this._onPointerMove),this.domElement.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(n)&&(this._addPointer(n),n.pointerType==="touch"?this._onTouchStart(n):this._onMouseDown(n)))}function ll(n){this.enabled!==!1&&(n.pointerType==="touch"?this._onTouchMove(n):this._onMouseMove(n))}function Al(n){switch(this._removePointer(n),this._pointers.length){case 0:this.domElement.releasePointerCapture(n.pointerId),this.domElement.removeEventListener("pointermove",this._onPointerMove),this.domElement.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(wo),this.state=nt.NONE;break;case 1:const t=this._pointers[0],e=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:e.x,pageY:e.y});break}}function ul(n){let t;switch(n.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case h.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(n),this.state=nt.DOLLY;break;case h.MOUSE.ROTATE:if(n.ctrlKey||n.metaKey||n.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(n),this.state=nt.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(n),this.state=nt.ROTATE}break;case h.MOUSE.PAN:if(n.ctrlKey||n.metaKey||n.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(n),this.state=nt.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(n),this.state=nt.PAN}break;default:this.state=nt.NONE}this.state!==nt.NONE&&this.dispatchEvent(Ys)}function dl(n){switch(this.state){case nt.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(n);break;case nt.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(n);break;case nt.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(n);break}}function gl(n){this.enabled===!1||this.enableZoom===!1||this.state!==nt.NONE||(n.preventDefault(),this.dispatchEvent(Ys),this._handleMouseWheel(this._customWheelEvent(n)),this.dispatchEvent(wo))}function hl(n){this.enabled!==!1&&this._handleKeyDown(n)}function fl(n){switch(this._trackPointer(n),this._pointers.length){case 1:switch(this.touches.ONE){case h.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(n),this.state=nt.TOUCH_ROTATE;break;case h.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(n),this.state=nt.TOUCH_PAN;break;default:this.state=nt.NONE}break;case 2:switch(this.touches.TWO){case h.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(n),this.state=nt.TOUCH_DOLLY_PAN;break;case h.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(n),this.state=nt.TOUCH_DOLLY_ROTATE;break;default:this.state=nt.NONE}break;default:this.state=nt.NONE}this.state!==nt.NONE&&this.dispatchEvent(Ys)}function pl(n){switch(this._trackPointer(n),this.state){case nt.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(n),this.update();break;case nt.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(n),this.update();break;case nt.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(n),this.update();break;case nt.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(n),this.update();break;default:this.state=nt.NONE}}function ml(n){this.enabled!==!1&&n.preventDefault()}function Cl(n){n.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function yl(n){n.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}class Il extends vo{constructor(t){const e=t.camera;super(e,t.renderer.domElement);const i=this;i.dampingFactor=.1,i.rotateSpeed=.4,i.updateByOptions(t),setTimeout(()=>{i.object.position.fromArray(t.position)})}updateByOptions(t={}){if(!t)return;const e=this;t.enableDamping!==void 0&&(e.enableDamping=t.enableDamping),t.autoRotate!==void 0&&(e.autoRotate=t.autoRotate),t.enableZoom!==void 0&&(e.enableZoom=t.enableZoom),t.enableRotate!==void 0&&(e.enableRotate=t.enableRotate),t.enablePan!==void 0&&(e.enablePan=t.enablePan),t.minDistance!==void 0&&(e.minDistance=t.minDistance),t.maxDistance!==void 0&&(e.maxDistance=t.maxDistance),t.minPolarAngle!==void 0&&(e.minPolarAngle=t.minPolarAngle),t.maxPolarAngle!==void 0&&(e.maxPolarAngle=t.maxPolarAngle),t.fov!==void 0&&(e.object.fov=t.fov),t.near!==void 0&&(e.object.near=t.near),t.far!==void 0&&(e.object.far=t.far),t.position&&e.object.position.fromArray(t.position),t.lookAt&&e.target.fromArray(t.lookAt),t.lookUp&&e.object.up.fromArray(t.lookUp),e.updateRotateAxis(),e.update()}updateRotateAxis(){this._quat?.setFromUnitVectors?.(this.object.up,new h.Vector3(0,1,0)),this._quatInverse=this._quat?.clone?.()?.invert?.()}}class wl extends vo{constructor(t,e){super(t,e),this.screenSpacePanning=!1,this.mouseButtons={LEFT:h.MOUSE.PAN,MIDDLE:h.MOUSE.DOLLY,RIGHT:h.MOUSE.ROTATE},this.touches={ONE:h.TOUCH.PAN,TWO:h.TOUCH.DOLLY_ROTATE}}}const So=new h.Box3,ui=new h.Vector3;class Mo extends h.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry";const t=[-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],e=[-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],i=[0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5];this.setIndex(i),this.setAttribute("position",new h.Float32BufferAttribute(t,3)),this.setAttribute("uv",new h.Float32BufferAttribute(e,2))}applyMatrix4(t){const e=this.attributes.instanceStart,i=this.attributes.instanceEnd;return e!==void 0&&(e.applyMatrix4(t),i.applyMatrix4(t),e.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(t){let e;t instanceof Float32Array?e=t:Array.isArray(t)&&(e=new Float32Array(t));const i=new h.InstancedInterleavedBuffer(e,6,1);return this.setAttribute("instanceStart",new h.InterleavedBufferAttribute(i,3,0)),this.setAttribute("instanceEnd",new h.InterleavedBufferAttribute(i,3,3)),this.instanceCount=this.attributes.instanceStart.count,this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(t){let e;t instanceof Float32Array?e=t:Array.isArray(t)&&(e=new Float32Array(t));const i=new h.InstancedInterleavedBuffer(e,6,1);return this.setAttribute("instanceColorStart",new h.InterleavedBufferAttribute(i,3,0)),this.setAttribute("instanceColorEnd",new h.InterleavedBufferAttribute(i,3,3)),this}fromWireframeGeometry(t){return this.setPositions(t.attributes.position.array),this}fromEdgesGeometry(t){return this.setPositions(t.attributes.position.array),this}fromMesh(t){return this.fromWireframeGeometry(new h.WireframeGeometry(t.geometry)),this}fromLineSegments(t){const e=t.geometry;return this.setPositions(e.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new h.Box3);const t=this.attributes.instanceStart,e=this.attributes.instanceEnd;t!==void 0&&e!==void 0&&(this.boundingBox.setFromBufferAttribute(t),So.setFromBufferAttribute(e),this.boundingBox.union(So))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new h.Sphere),this.boundingBox===null&&this.computeBoundingBox();const t=this.attributes.instanceStart,e=this.attributes.instanceEnd;if(t!==void 0&&e!==void 0){const i=this.boundingSphere.center;this.boundingBox.getCenter(i);let a=0;for(let o=0,s=t.count;o<s;o++)ui.fromBufferAttribute(t,o),a=Math.max(a,i.distanceToSquared(ui)),ui.fromBufferAttribute(e,o),a=Math.max(a,i.distanceToSquared(ui));this.boundingSphere.radius=Math.sqrt(a),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(t){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(t)}}h.UniformsLib.line={worldUnits:{value:1},linewidth:{value:1},resolution:{value:new h.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}},h.ShaderLib.line={uniforms:h.UniformsUtils.merge([h.UniformsLib.common,h.UniformsLib.fog,h.UniformsLib.line]),vertexShader:`
361
+ #include <common>
362
+ #include <color_pars_vertex>
363
+ #include <fog_pars_vertex>
364
+ #include <logdepthbuf_pars_vertex>
365
+ #include <clipping_planes_pars_vertex>
366
+
367
+ uniform float linewidth;
368
+ uniform vec2 resolution;
369
+
370
+ attribute vec3 instanceStart;
371
+ attribute vec3 instanceEnd;
372
+
373
+ attribute vec3 instanceColorStart;
374
+ attribute vec3 instanceColorEnd;
375
+
376
+ #ifdef WORLD_UNITS
377
+
378
+ varying vec4 worldPos;
379
+ varying vec3 worldStart;
380
+ varying vec3 worldEnd;
381
+
382
+ #ifdef USE_DASH
383
+
384
+ varying vec2 vUv;
385
+
386
+ #endif
387
+
388
+ #else
389
+
390
+ varying vec2 vUv;
391
+
392
+ #endif
393
+
394
+ #ifdef USE_DASH
395
+
396
+ uniform float dashScale;
397
+ attribute float instanceDistanceStart;
398
+ attribute float instanceDistanceEnd;
399
+ varying float vLineDistance;
400
+
401
+ #endif
402
+
403
+ void trimSegment( const in vec4 start, inout vec4 end ) {
404
+
405
+ // trim end segment so it terminates between the camera plane and the near plane
406
+
407
+ // conservative estimate of the near plane
408
+ float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
409
+ float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
410
+ float nearEstimate = - 0.5 * b / a;
411
+
412
+ float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );
413
+
414
+ end.xyz = mix( start.xyz, end.xyz, alpha );
415
+
416
+ }
417
+
418
+ void main() {
419
+
420
+ #ifdef USE_COLOR
421
+
422
+ vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;
423
+
424
+ #endif
425
+
426
+ #ifdef USE_DASH
427
+
428
+ vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
429
+ vUv = uv;
430
+
431
+ #endif
432
+
433
+ float aspect = resolution.x / resolution.y;
434
+
435
+ // camera space
436
+ vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
437
+ vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
438
+
439
+ #ifdef WORLD_UNITS
440
+
441
+ worldStart = start.xyz;
442
+ worldEnd = end.xyz;
443
+
444
+ #else
445
+
446
+ vUv = uv;
447
+
448
+ #endif
449
+
450
+ // special case for perspective projection, and segments that terminate either in, or behind, the camera plane
451
+ // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
452
+ // but we need to perform ndc-space calculations in the shader, so we must address this issue directly
453
+ // perhaps there is a more elegant solution -- WestLangley
454
+
455
+ bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column
456
+
457
+ if ( perspective ) {
458
+
459
+ if ( start.z < 0.0 && end.z >= 0.0 ) {
460
+
461
+ trimSegment( start, end );
462
+
463
+ } else if ( end.z < 0.0 && start.z >= 0.0 ) {
464
+
465
+ trimSegment( end, start );
466
+
467
+ }
468
+
469
+ }
470
+
471
+ // clip space
472
+ vec4 clipStart = projectionMatrix * start;
473
+ vec4 clipEnd = projectionMatrix * end;
474
+
475
+ // ndc space
476
+ vec3 ndcStart = clipStart.xyz / clipStart.w;
477
+ vec3 ndcEnd = clipEnd.xyz / clipEnd.w;
478
+
479
+ // direction
480
+ vec2 dir = ndcEnd.xy - ndcStart.xy;
481
+
482
+ // account for clip-space aspect ratio
483
+ dir.x *= aspect;
484
+ dir = normalize( dir );
485
+
486
+ #ifdef WORLD_UNITS
487
+
488
+ vec3 worldDir = normalize( end.xyz - start.xyz );
489
+ vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );
490
+ vec3 worldUp = normalize( cross( worldDir, tmpFwd ) );
491
+ vec3 worldFwd = cross( worldDir, worldUp );
492
+ worldPos = position.y < 0.5 ? start: end;
493
+
494
+ // height offset
495
+ float hw = linewidth * 0.5;
496
+ worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;
497
+
498
+ // don't extend the line if we're rendering dashes because we
499
+ // won't be rendering the endcaps
500
+ #ifndef USE_DASH
501
+
502
+ // cap extension
503
+ worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;
504
+
505
+ // add width to the box
506
+ worldPos.xyz += worldFwd * hw;
507
+
508
+ // endcaps
509
+ if ( position.y > 1.0 || position.y < 0.0 ) {
510
+
511
+ worldPos.xyz -= worldFwd * 2.0 * hw;
512
+
513
+ }
514
+
515
+ #endif
516
+
517
+ // project the worldpos
518
+ vec4 clip = projectionMatrix * worldPos;
519
+
520
+ // shift the depth of the projected points so the line
521
+ // segments overlap neatly
522
+ vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;
523
+ clip.z = clipPose.z * clip.w;
524
+
525
+ #else
526
+
527
+ vec2 offset = vec2( dir.y, - dir.x );
528
+ // undo aspect ratio adjustment
529
+ dir.x /= aspect;
530
+ offset.x /= aspect;
531
+
532
+ // sign flip
533
+ if ( position.x < 0.0 ) offset *= - 1.0;
534
+
535
+ // endcaps
536
+ if ( position.y < 0.0 ) {
537
+
538
+ offset += - dir;
539
+
540
+ } else if ( position.y > 1.0 ) {
541
+
542
+ offset += dir;
543
+
544
+ }
545
+
546
+ // adjust for linewidth
547
+ offset *= linewidth;
548
+
549
+ // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
550
+ offset /= resolution.y;
551
+
552
+ // select end
553
+ vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;
554
+
555
+ // back to clip space
556
+ offset *= clip.w;
557
+
558
+ clip.xy += offset;
559
+
560
+ #endif
561
+
562
+ gl_Position = clip;
563
+
564
+ vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation
565
+
566
+ #include <logdepthbuf_vertex>
567
+ #include <clipping_planes_vertex>
568
+ #include <fog_vertex>
569
+
570
+ }
571
+ `,fragmentShader:`
572
+ uniform vec3 diffuse;
573
+ uniform float opacity;
574
+ uniform float linewidth;
575
+
576
+ #ifdef USE_DASH
577
+
578
+ uniform float dashOffset;
579
+ uniform float dashSize;
580
+ uniform float gapSize;
581
+
582
+ #endif
583
+
584
+ varying float vLineDistance;
585
+
586
+ #ifdef WORLD_UNITS
587
+
588
+ varying vec4 worldPos;
589
+ varying vec3 worldStart;
590
+ varying vec3 worldEnd;
591
+
592
+ #ifdef USE_DASH
593
+
594
+ varying vec2 vUv;
595
+
596
+ #endif
597
+
598
+ #else
599
+
600
+ varying vec2 vUv;
601
+
602
+ #endif
603
+
604
+ #include <common>
605
+ #include <color_pars_fragment>
606
+ #include <fog_pars_fragment>
607
+ #include <logdepthbuf_pars_fragment>
608
+ #include <clipping_planes_pars_fragment>
609
+
610
+ vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
611
+
612
+ float mua;
613
+ float mub;
614
+
615
+ vec3 p13 = p1 - p3;
616
+ vec3 p43 = p4 - p3;
617
+
618
+ vec3 p21 = p2 - p1;
619
+
620
+ float d1343 = dot( p13, p43 );
621
+ float d4321 = dot( p43, p21 );
622
+ float d1321 = dot( p13, p21 );
623
+ float d4343 = dot( p43, p43 );
624
+ float d2121 = dot( p21, p21 );
625
+
626
+ float denom = d2121 * d4343 - d4321 * d4321;
627
+
628
+ float numer = d1343 * d4321 - d1321 * d4343;
629
+
630
+ mua = numer / denom;
631
+ mua = clamp( mua, 0.0, 1.0 );
632
+ mub = ( d1343 + d4321 * ( mua ) ) / d4343;
633
+ mub = clamp( mub, 0.0, 1.0 );
634
+
635
+ return vec2( mua, mub );
636
+
637
+ }
638
+
639
+ void main() {
640
+
641
+ #include <clipping_planes_fragment>
642
+
643
+ #ifdef USE_DASH
644
+
645
+ if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps
646
+
647
+ if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
648
+
649
+ #endif
650
+
651
+ float alpha = opacity;
652
+
653
+ #ifdef WORLD_UNITS
654
+
655
+ // Find the closest points on the view ray and the line segment
656
+ vec3 rayEnd = normalize( worldPos.xyz ) * 1e5;
657
+ vec3 lineDir = worldEnd - worldStart;
658
+ vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );
659
+
660
+ vec3 p1 = worldStart + lineDir * params.x;
661
+ vec3 p2 = rayEnd * params.y;
662
+ vec3 delta = p1 - p2;
663
+ float len = length( delta );
664
+ float norm = len / linewidth;
665
+
666
+ #ifndef USE_DASH
667
+
668
+ #ifdef USE_ALPHA_TO_COVERAGE
669
+
670
+ float dnorm = fwidth( norm );
671
+ alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );
672
+
673
+ #else
674
+
675
+ if ( norm > 0.5 ) {
676
+
677
+ discard;
678
+
679
+ }
680
+
681
+ #endif
682
+
683
+ #endif
684
+
685
+ #else
686
+
687
+ #ifdef USE_ALPHA_TO_COVERAGE
688
+
689
+ // artifacts appear on some hardware if a derivative is taken within a conditional
690
+ float a = vUv.x;
691
+ float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
692
+ float len2 = a * a + b * b;
693
+ float dlen = fwidth( len2 );
694
+
695
+ if ( abs( vUv.y ) > 1.0 ) {
696
+
697
+ alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );
698
+
699
+ }
700
+
701
+ #else
702
+
703
+ if ( abs( vUv.y ) > 1.0 ) {
704
+
705
+ float a = vUv.x;
706
+ float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
707
+ float len2 = a * a + b * b;
708
+
709
+ if ( len2 > 1.0 ) discard;
710
+
711
+ }
712
+
713
+ #endif
714
+
715
+ #endif
716
+
717
+ vec4 diffuseColor = vec4( diffuse, alpha );
718
+
719
+ #include <logdepthbuf_fragment>
720
+ #include <color_fragment>
721
+
722
+ gl_FragColor = vec4( diffuseColor.rgb, alpha );
723
+
724
+ #include <tonemapping_fragment>
725
+ #include <colorspace_fragment>
726
+ #include <fog_fragment>
727
+ #include <premultiplied_alpha_fragment>
728
+
729
+ }
730
+ `};class De extends h.ShaderMaterial{constructor(t){super({type:"LineMaterial",uniforms:h.UniformsUtils.clone(h.ShaderLib.line.uniforms),vertexShader:h.ShaderLib.line.vertexShader,fragmentShader:h.ShaderLib.line.fragmentShader,clipping:!0}),this.isLineMaterial=!0,this.setValues(t)}get color(){return this.uniforms.diffuse.value}set color(t){this.uniforms.diffuse.value=t}get worldUnits(){return"WORLD_UNITS"in this.defines}set worldUnits(t){t===!0?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}get linewidth(){return this.uniforms.linewidth.value}set linewidth(t){this.uniforms.linewidth&&(this.uniforms.linewidth.value=t)}get dashed(){return"USE_DASH"in this.defines}set dashed(t){t===!0!==this.dashed&&(this.needsUpdate=!0),t===!0?this.defines.USE_DASH="":delete this.defines.USE_DASH}get dashScale(){return this.uniforms.dashScale.value}set dashScale(t){this.uniforms.dashScale.value=t}get dashSize(){return this.uniforms.dashSize.value}set dashSize(t){this.uniforms.dashSize.value=t}get dashOffset(){return this.uniforms.dashOffset.value}set dashOffset(t){this.uniforms.dashOffset.value=t}get gapSize(){return this.uniforms.gapSize.value}set gapSize(t){this.uniforms.gapSize.value=t}get opacity(){return this.uniforms.opacity.value}set opacity(t){this.uniforms&&(this.uniforms.opacity.value=t)}get resolution(){return this.uniforms.resolution.value}set resolution(t){this.uniforms.resolution.value.copy(t)}get alphaToCoverage(){return"USE_ALPHA_TO_COVERAGE"in this.defines}set alphaToCoverage(t){this.defines&&(t===!0!==this.alphaToCoverage&&(this.needsUpdate=!0),t===!0?this.defines.USE_ALPHA_TO_COVERAGE="":delete this.defines.USE_ALPHA_TO_COVERAGE)}}const Ws=new h.Vector4,bo=new h.Vector3,Bo=new h.Vector3,dt=new h.Vector4,gt=new h.Vector4,Nt=new h.Vector4,$s=new h.Vector3,js=new h.Matrix4,ht=new h.Line3,Qo=new h.Vector3,di=new h.Box3,gi=new h.Sphere,Vt=new h.Vector4;let Ht,ce;function xo(n,t,e){return Vt.set(0,0,-t,1).applyMatrix4(n.projectionMatrix),Vt.multiplyScalar(1/Vt.w),Vt.x=ce/e.width,Vt.y=ce/e.height,Vt.applyMatrix4(n.projectionMatrixInverse),Vt.multiplyScalar(1/Vt.w),Math.abs(Math.max(Vt.x,Vt.y))}function El(n,t){const e=n.matrixWorld,i=n.geometry,a=i.attributes.instanceStart,o=i.attributes.instanceEnd,s=Math.min(i.instanceCount,a.count);for(let r=0,c=s;r<c;r++){ht.start.fromBufferAttribute(a,r),ht.end.fromBufferAttribute(o,r),ht.applyMatrix4(e);const A=new h.Vector3,l=new h.Vector3;Ht.distanceSqToSegment(ht.start,ht.end,l,A),l.distanceTo(A)<ce*.5&&t.push({point:l,pointOnLine:A,distance:Ht.origin.distanceTo(l),object:n,face:null,faceIndex:r,uv:null,uv1:null})}}function vl(n,t,e){const i=t.projectionMatrix,o=n.material.resolution,s=n.matrixWorld,r=n.geometry,c=r.attributes.instanceStart,A=r.attributes.instanceEnd,l=Math.min(r.instanceCount,c.count),u=-t.near;Ht.at(1,Nt),Nt.w=1,Nt.applyMatrix4(t.matrixWorldInverse),Nt.applyMatrix4(i),Nt.multiplyScalar(1/Nt.w),Nt.x*=o.x/2,Nt.y*=o.y/2,Nt.z=0,$s.copy(Nt),js.multiplyMatrices(t.matrixWorldInverse,s);for(let f=0,d=l;f<d;f++){if(dt.fromBufferAttribute(c,f),gt.fromBufferAttribute(A,f),dt.w=1,gt.w=1,dt.applyMatrix4(js),gt.applyMatrix4(js),dt.z>u&&gt.z>u)continue;if(dt.z>u){const S=dt.z-gt.z,Q=(dt.z-u)/S;dt.lerp(gt,Q)}else if(gt.z>u){const S=gt.z-dt.z,Q=(gt.z-u)/S;gt.lerp(dt,Q)}dt.applyMatrix4(i),gt.applyMatrix4(i),dt.multiplyScalar(1/dt.w),gt.multiplyScalar(1/gt.w),dt.x*=o.x/2,dt.y*=o.y/2,gt.x*=o.x/2,gt.y*=o.y/2,ht.start.copy(dt),ht.start.z=0,ht.end.copy(gt),ht.end.z=0;const y=ht.closestPointToPointParameter($s,!0);ht.at(y,Qo);const p=h.MathUtils.lerp(dt.z,gt.z,y),m=p>=-1&&p<=1,I=$s.distanceTo(Qo)<ce*.5;if(m&&I){ht.start.fromBufferAttribute(c,f),ht.end.fromBufferAttribute(A,f),ht.start.applyMatrix4(s),ht.end.applyMatrix4(s);const S=new h.Vector3,Q=new h.Vector3;Ht.distanceSqToSegment(ht.start,ht.end,Q,S),e.push({point:Q,pointOnLine:S,distance:Ht.origin.distanceTo(Q),object:n,face:null,faceIndex:f,uv:null,uv1:null})}}}class Sl extends h.Mesh{constructor(t=new Mo,e=new De({color:Math.random()*16777215})){super(t,e),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){const t=this.geometry,e=t.attributes.instanceStart,i=t.attributes.instanceEnd,a=new Float32Array(2*e.count);for(let s=0,r=0,c=e.count;s<c;s++,r+=2)bo.fromBufferAttribute(e,s),Bo.fromBufferAttribute(i,s),a[r]=r===0?0:a[r-1],a[r+1]=a[r]+bo.distanceTo(Bo);const o=new h.InstancedInterleavedBuffer(a,2,1);return t.setAttribute("instanceDistanceStart",new h.InterleavedBufferAttribute(o,1,0)),t.setAttribute("instanceDistanceEnd",new h.InterleavedBufferAttribute(o,1,1)),this}raycast(t,e){const i=this.material.worldUnits,a=t.camera;a===null&&!i&&console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');const o=t.params.Line2!==void 0&&t.params.Line2.threshold||0;Ht=t.ray;const s=this.matrixWorld,r=this.geometry,c=this.material;ce=c.linewidth+o,r.boundingSphere===null&&r.computeBoundingSphere(),gi.copy(r.boundingSphere).applyMatrix4(s);let A;if(i)A=ce*.5;else{const u=Math.max(a.near,gi.distanceToPoint(Ht.origin));A=xo(a,u,c.resolution)}if(gi.radius+=A,Ht.intersectsSphere(gi)===!1)return;r.boundingBox===null&&r.computeBoundingBox(),di.copy(r.boundingBox).applyMatrix4(s);let l;if(i)l=ce*.5;else{const u=Math.max(a.near,di.distanceToPoint(Ht.origin));l=xo(a,u,c.resolution)}di.expandByScalar(l),Ht.intersectsBox(di)!==!1&&(i?El(this,e):vl(this,a,e))}onBeforeRender(t){const e=this.material.uniforms;e&&e.resolution&&(t.getViewport(Ws),this.material.uniforms.resolution.value.set(Ws.z,Ws.w))}}class cn extends Mo{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(t){const e=t.length-3,i=new Float32Array(2*e);for(let a=0;a<e;a+=3)i[2*a]=t[a],i[2*a+1]=t[a+1],i[2*a+2]=t[a+2],i[2*a+3]=t[a+3],i[2*a+4]=t[a+4],i[2*a+5]=t[a+5];return super.setPositions(i),this}setColors(t){const e=t.length-3,i=new Float32Array(2*e);for(let a=0;a<e;a+=3)i[2*a]=t[a],i[2*a+1]=t[a+1],i[2*a+2]=t[a+2],i[2*a+3]=t[a+3],i[2*a+4]=t[a+4],i[2*a+5]=t[a+5];return super.setColors(i),this}setFromPoints(t){const e=t.length-1,i=new Float32Array(6*e);for(let a=0;a<e;a++)i[6*a]=t[a].x,i[6*a+1]=t[a].y,i[6*a+2]=t[a].z||0,i[6*a+3]=t[a+1].x,i[6*a+4]=t[a+1].y,i[6*a+5]=t[a+1].z||0;return super.setPositions(i),this}fromLine(t){const e=t.geometry;return this.setPositions(e.attributes.position.array),this}}class le extends Sl{constructor(t=new cn,e=new De({color:Math.random()*16777215})){super(t,e),this.isLine2=!0,this.type="Line2"}}const Do=new h.Vector3,Ml=new h.Quaternion,ko=new h.Vector3;class bl extends h.Object3D{constructor(t=document.createElement("div")){super(),this.isCSS3DObject=!0,this.element=t,this.element.style.position="absolute",this.element.style.pointerEvents="auto",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.addEventListener("removed",function(){this.traverse(function(e){e.element instanceof e.element.ownerDocument.defaultView.Element&&e.element.parentNode!==null&&e.element.remove()})})}copy(t,e){return super.copy(t,e),this.element=t.element.cloneNode(!0),this}}class pt extends bl{constructor(t){super(t),this.isCSS3DSprite=!0,this.rotation2D=0}copy(t,e){return super.copy(t,e),this.rotation2D=t.rotation2D,this}}const Ot=new h.Matrix4,Bl=new h.Matrix4;class Ql{constructor(t={}){const e=this;let i,a,o,s;const r={camera:{style:""},objects:new WeakMap},c=t.element!==void 0?t.element:document.createElement("div");c.style.overflow="hidden",this.domElement=c;const A=document.createElement("div");A.style.transformOrigin="0 0",A.style.pointerEvents="none",c.appendChild(A);const l=document.createElement("div");l.style.transformStyle="preserve-3d",A.appendChild(l),this.getSize=function(){return{width:i,height:a}},this.render=function(p,m){const I=m.projectionMatrix.elements[5]*s;m.view&&m.view.enabled?(A.style.transform=`translate( ${-m.view.offsetX*(i/m.view.width)}px, ${-m.view.offsetY*(a/m.view.height)}px )`,A.style.transform+=`scale( ${m.view.fullWidth/m.view.width}, ${m.view.fullHeight/m.view.height} )`):A.style.transform="",p.matrixWorldAutoUpdate===!0&&p.updateMatrixWorld(),m.parent===null&&m.matrixWorldAutoUpdate===!0&&m.updateMatrixWorld();let S,Q;m.isOrthographicCamera&&(S=-(m.right+m.left)/2,Q=(m.top+m.bottom)/2);const k=m.view&&m.view.enabled?m.view.height/m.view.fullHeight:1,M=m.isOrthographicCamera?`scale( ${k} )scale(`+I+")translate("+u(S)+"px,"+u(Q)+"px)"+f(m.matrixWorldInverse):`scale( ${k} )translateZ(`+I+"px)"+f(m.matrixWorldInverse),C=(m.isPerspectiveCamera?"perspective("+I+"px) ":"")+M+"translate("+o+"px,"+s+"px)";r.camera.style!==C&&(l.style.transform=C,r.camera.style=C),y(p,p,m)},this.setSize=function(p,m){i=p,a=m,o=i/2,s=a/2,c.style.width=p+"px",c.style.height=m+"px",A.style.width=p+"px",A.style.height=m+"px",l.style.width=p+"px",l.style.height=m+"px"};function u(p){return Math.abs(p)<1e-10?0:p}function f(p){const m=p.elements;return"matrix3d("+u(m[0])+","+u(-m[1])+","+u(m[2])+","+u(m[3])+","+u(m[4])+","+u(-m[5])+","+u(m[6])+","+u(m[7])+","+u(m[8])+","+u(-m[9])+","+u(m[10])+","+u(m[11])+","+u(m[12])+","+u(-m[13])+","+u(m[14])+","+u(m[15])+")"}function d(p){const m=p.elements;return"translate(-50%,-50%)"+("matrix3d("+u(m[0])+","+u(m[1])+","+u(m[2])+","+u(m[3])+","+u(-m[4])+","+u(-m[5])+","+u(-m[6])+","+u(-m[7])+","+u(m[8])+","+u(m[9])+","+u(m[10])+","+u(m[11])+","+u(m[12])+","+u(m[13])+","+u(m[14])+","+u(m[15])+")")}function g(p){p.isCSS3DObject&&(p.element.style.display="none");for(let m=0,I=p.children.length;m<I;m++)g(p.children[m])}function y(p,m,I,S){if(p.visible===!1){g(p);return}if(p.isCSS3DObject){const Q=p.layers.test(I.layers)===!0,k=p.element;if(k.style.display=Q===!0?"":"none",Q===!0){p.onBeforeRender(e,m,I);let M;p.isCSS3DSprite?(Ot.copy(I.matrixWorldInverse),Ot.transpose(),p.rotation2D!==0&&Ot.multiply(Bl.makeRotationZ(p.rotation2D)),p.matrixWorld.decompose(Do,Ml,ko),Ot.setPosition(Do),Ot.scale(ko),Ot.elements[3]=0,Ot.elements[7]=0,Ot.elements[11]=0,Ot.elements[15]=1,M=d(Ot)):M=d(p.matrixWorld);const b=r.objects.get(p);if(b===void 0||b.style!==M){k.style.transform=M;const C={style:M};r.objects.set(p,C)}k.parentNode!==l&&l.appendChild(k),p.onAfterRender(e,m,I)}}for(let Q=0,k=p.children.length;Q<k;Q++)y(p.children[Q],m,I)}}}class Js extends le{constructor(t){super(),this.isMark=!0,this.disposed=!1,this.events=t}drawStart(t,e){if(this.disposed)return;const i=this,a=document.querySelectorAll(".mark-wrap-line.main-warp").length+1,o={type:"MarkDistanceLine",name:e||"line"+Date.now(),startPoint:t.toArray(),endPoint:t.toArray(),lineColor:"#eeee00",lineWidth:3,mainTagColor:"#c4c4c4",mainTagBackground:"#2E2E30",mainTagOpacity:.8,mainTagVisible:!0,distanceTagColor:"#000000",distanceTagBackground:"#e0ffff",distanceTagOpacity:.9,distanceTagVisible:!0,title:"标记距离"+a},s=new cn;s.setPositions([...o.startPoint,...o.endPoint]);const r=new De({color:o.lineColor,linewidth:o.lineWidth});r.resolution.set(innerWidth,innerHeight),i.copy(new le(s,r));const c=new h.CircleGeometry(.05,32),A=new h.MeshBasicMaterial({color:16777215,side:h.DoubleSide});A.transparent=!0,A.opacity=.6;const l=new h.Mesh(c,A);l.position.copy(t),l.isMark=!0;const u=new h.Mesh(c,A);u.position.copy(t),u.isMark=!0;const f=document.createElement("div");f.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
731
+ <span class="${o.name}-main-tag" style="color:${o.mainTagColor};background:${o.mainTagBackground};opacity:${o.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;user-select: none;font-size: 12px;pointer-events: auto;">${o.title}</span>
732
+ </div>`,f.classList.add("mark-wrap-line",`${o.name}`,"main-warp"),f.style.position="absolute",f.style.borderRadius="4px",f.style.cursor="pointer",f.onclick=()=>{if(i.events.fire(F).markMode)return;const p=parent?.onActiveMark;p?.(i.getMarkData(!0)),i.events.fire(At)},f.oncontextmenu=p=>p.preventDefault();const d=new pt(f);d.position.copy(t),d.element.style.pointerEvents="none",d.scale.set(.01,.01,.01),d.visible=o.mainTagVisible;const g=document.createElement("div");g.innerHTML=`<span class="${e}-distance-tag ${e}-distance-tag0" style="color:${o.distanceTagColor};background:${o.distanceTagBackground};opacity:${o.distanceTagOpacity};padding: 1px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: none;"></span>`,g.classList.add("mark-wrap-line",`${e}`,"distance-warp"),g.style.position="absolute",g.style.borderRadius="4px",g.style.pointerEvents="none";const y=new pt(g);y.position.set(t.x,t.y,t.z),y.element.style.pointerEvents="none",y.scale.set(.008,.008,.008),y.visible=!1,i.add(l,u,d,y),i.data=o,i.circleStart=l,i.circleEnd=u,i.css3dTag=y,i.css3dMainTag=d,i.events.fire(Yt,i)}drawUpdate(t,e=!0){if(this.disposed)return;const i=this;if(t?.endPoint){e&&(i.data.endPoint=[...t.endPoint]);const a=new h.Vector3().fromArray(i.data.startPoint),o=new h.Vector3().fromArray(t.endPoint);i.geometry.setPositions([...i.data.startPoint,...t.endPoint]);const s=new h.Vector3((a.x+o.x)/2,(a.y+o.y)/2,(a.z+o.z)/2);i.css3dTag.position.set(s.x,s.y,s.z);const r=o.clone().sub(a).normalize();i.circleStart.lookAt(i.circleStart.position.clone().add(r)),i.circleEnd.lookAt(i.circleEnd.position.clone().add(r));const c=a.distanceTo(o);i.css3dTag.visible=c>.5;const A=(c*i.events.fire(F).meterScale).toFixed(2)+" m";i.css3dTag.element.childNodes[0].innerText=A}t?.lineColor&&(e&&(i.data.lineColor=t.lineColor),i.material.color.set(t.lineColor)),t?.lineWidth&&(e&&(i.data.lineWidth=t.lineWidth),i.material.linewidth=t.lineWidth),t?.mainTagColor&&(e&&(i.data.mainTagColor=t.mainTagColor),document.querySelector(`.${i.data.name}-main-tag`).style.color=t.mainTagColor),t?.mainTagBackground&&(e&&(i.data.mainTagBackground=t.mainTagBackground),document.querySelector(`.${i.data.name}-main-tag`).style.background=t.mainTagBackground),t?.mainTagOpacity&&(e&&(i.data.mainTagOpacity=t.mainTagOpacity),document.querySelector(`.${i.data.name}-main-tag`).style.opacity=t.mainTagOpacity.toString()),t?.mainTagVisible!==void 0&&(e&&(i.data.mainTagVisible=t.mainTagVisible),i.css3dMainTag.visible=t.mainTagVisible),t?.distanceTagColor&&(e&&(i.data.distanceTagColor=t.distanceTagColor),document.querySelector(`.${i.data.name}-distance-tag0`).style.color=t.distanceTagColor),t?.distanceTagBackground&&(e&&(i.data.distanceTagBackground=t.distanceTagBackground),document.querySelector(`.${i.data.name}-distance-tag0`).style.background=t.distanceTagBackground),t?.distanceTagOpacity&&(e&&(i.data.distanceTagOpacity=t.distanceTagOpacity),document.querySelector(`.${i.data.name}-distance-tag0`).style.opacity=t.distanceTagOpacity.toString()),t?.distanceTagVisible!==void 0&&(e&&(i.data.distanceTagVisible=t.distanceTagVisible),i.css3dTag.visible=t.distanceTagVisible),t?.title!==void 0&&(e&&(i.data.title=t.title),this.css3dMainTag.element.querySelector(`.${i.data.name}-main-tag`).innerText=t.title),t?.note!==void 0&&e&&(i.data.note=t.note),i.events.fire(rt)}updateByMeterScale(t){const e=this,i=new h.Vector3().fromArray(e.data.startPoint),a=new h.Vector3().fromArray(e.data.endPoint),o=(i.distanceTo(a)*t).toFixed(2)+" m";e.css3dTag.element.childNodes[0].innerText=o}drawFinish(t){if(this.disposed)return;const e=this;e.data.endPoint=[...t.toArray()];const i=new h.Vector3().fromArray(e.data.startPoint),a=new h.Vector3().fromArray(e.data.endPoint),o=new h.Vector3((i.x+a.x)/2,(i.y+a.y)/2,(i.z+a.z)/2);e.geometry.setPositions([...e.data.startPoint,...e.data.endPoint]),e.css3dTag.position.set(o.x,o.y,o.z);const s=a.clone().sub(i).normalize();e.circleStart.lookAt(e.circleStart.position.clone().add(s)),e.circleEnd.lookAt(e.circleEnd.position.clone().add(s)),e.circleEnd.position.copy(a);const r=i.distanceTo(a);e.css3dTag.visible=!0;const c=(r*e.events.fire(F).meterScale).toFixed(2)+" m";e.css3dTag.element.childNodes[0].innerText=c,e.events.fire(qt);const A=parent?.onActiveMark,l=e.getMarkData(!0);l.isNew=!0,l.meterScale=e.events.fire(F).meterScale,A?.(l)}draw(t){if(this.disposed)return;const e=this,i={type:"MarkDistanceLine",name:t.name||"line"+Date.now(),startPoint:[...t.startPoint],endPoint:[...t.endPoint],lineColor:t.lineColor||"#eeee00",lineWidth:t.lineWidth||3,mainTagColor:t.mainTagColor||"#c4c4c4",mainTagBackground:t.mainTagBackground||"#2E2E30",mainTagOpacity:t.mainTagOpacity||.8,mainTagVisible:t.mainTagVisible===void 0?!0:t.mainTagVisible,distanceTagColor:t.distanceTagColor||"#000000",distanceTagBackground:t.distanceTagBackground||"#e0ffff",distanceTagOpacity:t.distanceTagOpacity||.9,distanceTagVisible:t.distanceTagVisible===void 0?!0:t.distanceTagVisible,title:t.title||"标记距离"},a=new h.Vector3().fromArray(i.startPoint),o=new h.Vector3().fromArray(i.endPoint),s=new h.Vector3((a.x+o.x)/2,(a.y+o.y)/2,(a.z+o.z)/2),r=new cn;r.setPositions([...i.startPoint,...i.endPoint]);const c=new De({color:i.lineColor,linewidth:i.lineWidth});c.resolution.set(innerWidth,innerHeight),e.copy(new le(r,c));const A=new h.CircleGeometry(.05,32),l=new h.MeshBasicMaterial({color:16777215,side:h.DoubleSide});l.transparent=!0,l.opacity=.6;const u=new h.Mesh(A,l);u.position.copy(a),u.isMark=!0;const f=new h.Mesh(A,l);f.position.copy(o),f.isMark=!0;const d=o.clone().sub(a).normalize();u.lookAt(u.position.clone().add(d)),f.lookAt(f.position.clone().add(d));const g=i.name,y=document.createElement("div");y.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
733
+ <span class="${g}-main-tag" style="color:${i.mainTagColor};background:${i.mainTagBackground};opacity:${i.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: auto;">${i.title}</span>
734
+ </div>`,y.classList.add("mark-wrap-line",`${i.name}`,"main-warp"),y.style.position="absolute",y.style.borderRadius="4px",y.style.cursor="pointer",y.onclick=()=>{if(e.events.fire(F).markMode)return;const k=parent?.onActiveMark;k?.(e.getMarkData(!0)),e.events.fire(At)},y.oncontextmenu=k=>k.preventDefault();const p=new pt(y);p.position.copy(a),p.element.style.pointerEvents="none",p.scale.set(.01,.01,.01),p.visible=i.mainTagVisible;const I=(a.distanceTo(o)*e.events.fire(F).meterScale).toFixed(2)+" m",S=document.createElement("div");S.innerHTML=`<span class="${g}-distance-tag ${g}-distance-tag0" style="color:${i.distanceTagColor};background:${i.distanceTagBackground};opacity:${i.distanceTagOpacity};padding: 1px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: none;">${I}</span>`,S.classList.add("mark-wrap-line",`${g}`,"distance-warp"),S.style.position="absolute",S.style.borderRadius="4px",S.style.pointerEvents="none";const Q=new pt(S);Q.position.copy(s),Q.element.style.pointerEvents="none",Q.scale.set(.008,.008,.008),Q.visible=i.distanceTagVisible,e.add(u,f,p,Q),e.data=i,e.circleStart=u,e.circleEnd=f,e.css3dTag=Q,e.css3dMainTag=p,e.events.fire(Yt,e)}getMarkData(t=!1){const e={...this.data};return t?(delete e.startPoint,delete e.endPoint):(e.startPoint=[...e.startPoint],e.endPoint=[...e.endPoint]),e}dispose(){if(this.disposed)return;const t=this;t.disposed=!0,t.events.fire(_t,t),t.events.fire(z).remove(t),t.events.fire(oe,t),document.querySelectorAll(`.${t.data.name}`).forEach(i=>i.parentElement?.removeChild(i)),t.events=null,t.data=null,t.circleStart=null,t.circleEnd=null,t.css3dTag=null,t.css3dMainTag=null}}class Ks extends le{constructor(t){super(),this.isMark=!0,this.disposed=!1,this.css3dTags=[],this.group=new h.Group,this.add(this.group),this.events=t}drawStart(t,e){if(this.disposed)return;const i=document.querySelectorAll(".mark-wrap-lines.main-warp").length+1,a={type:"MarkMultiLines",name:e||"lines"+Date.now(),points:[...t.toArray(),...t.toArray()],lineColor:"#eeee00",lineWidth:3,mainTagColor:"#c4c4c4",mainTagBackground:"#2E2E30",mainTagOpacity:.8,mainTagVisible:!0,distanceTagColor:"#000000",distanceTagBackground:"#e0ffff",distanceTagOpacity:.9,distanceTagVisible:!0,title:"标记线"+i,note:""};this.draw(a)}drawUpdate(t,e=!0,i,a=!1){if(this.disposed)return;const o=this;if(i)if(a){const s=o.data.points.length,r=o.css3dTags.length-1,c=new h.Vector3().fromArray(o.data.points.slice(s-6,s-3)),A=i,l=new h.Vector3((c.x+A.x)/2,(c.y+A.y)/2,(c.z+A.z)/2),f=(c.distanceTo(A)*o.events.fire(F).meterScale).toFixed(2)+" m";o.css3dTags[r].element.childNodes[0].innerText=f,o.css3dTags[r].position.set(l.x,l.y,l.z),o.css3dTags[r].visible=!0,o.data.points.pop(),o.data.points.pop(),o.data.points.pop(),o.data.points=[...o.data.points,...i.toArray(),...i.toArray()],o.css3dTags[o.css3dTags.length-1].visible=!0,this.draw(this.data)}else{const s=o.data.points.length;o.data.points[s-3]=i.x,o.data.points[s-2]=i.y,o.data.points[s-1]=i.z;const r=o.css3dTags.length-1,c=new h.Vector3().fromArray(o.data.points.slice(s-6,s-3)),A=new h.Vector3().fromArray(o.data.points.slice(s-3)),l=new h.Vector3((c.x+A.x)/2,(c.y+A.y)/2,(c.z+A.z)/2),u=c.distanceTo(A),f=(u*o.events.fire(F).meterScale).toFixed(2)+" m";o.css3dTags[r].element.childNodes[0].innerText=f,o.geometry.setPositions([...o.data.points]),o.css3dTags[r].position.set(l.x,l.y,l.z),o.css3dTags[r].visible=a?!0:u>.5}t?.lineColor&&(e&&(o.data.lineColor=t.lineColor),o.material.color.set(t.lineColor)),t?.lineWidth&&(e&&(o.data.lineWidth=t.lineWidth),o.material.linewidth=t.lineWidth),t?.mainTagColor&&(e&&(o.data.mainTagColor=t.mainTagColor),document.querySelector(`.${o.data.name}-main-tag`).style.color=t.mainTagColor),t?.mainTagBackground&&(e&&(o.data.mainTagBackground=t.mainTagBackground),document.querySelector(`.${o.data.name}-main-tag`).style.background=t.mainTagBackground),t?.mainTagOpacity&&(e&&(o.data.mainTagOpacity=t.mainTagOpacity),document.querySelector(`.${o.data.name}-main-tag`).style.opacity=t.mainTagOpacity.toString()),t?.mainTagVisible!==void 0&&(e&&(o.data.mainTagVisible=t.mainTagVisible),o.css3dMainTag.visible=t.mainTagVisible),t?.distanceTagColor&&(e&&(o.data.distanceTagColor=t.distanceTagColor),document.querySelectorAll(`.${o.data.name}-distance-tag`)?.forEach(r=>r.style.color=t.distanceTagColor)),t?.distanceTagBackground&&(e&&(o.data.distanceTagBackground=t.distanceTagBackground),document.querySelectorAll(`.${o.data.name}-distance-tag`)?.forEach(r=>r.style.background=t.distanceTagBackground)),t?.distanceTagOpacity&&(e&&(o.data.distanceTagOpacity=t.distanceTagOpacity),document.querySelectorAll(`.${o.data.name}-distance-tag`)?.forEach(r=>r.style.opacity=t.distanceTagOpacity.toString())),t?.distanceTagVisible!==void 0&&(e&&(o.data.distanceTagVisible=t.distanceTagVisible),o.css3dTags.forEach(s=>s.visible=t.distanceTagVisible)),t?.title!==void 0&&(e&&(o.data.title=t.title),this.css3dMainTag.element.querySelector(`.${o.data.name}-main-tag`).innerText=t.title),t?.note!==void 0&&e&&(o.data.note=t.note),o.events.fire(rt)}updateByMeterScale(t){const e=this,i=[];for(let s=0,r=e.data.points.length/3;s<r;s++)i.push(new h.Vector3(e.data.points[s*3],e.data.points[s*3+1],e.data.points[s*3+2]));let a,o;for(let s=1;s<i.length;s++)a=i[s-1],o=i[s],e.css3dTags[s-1].element.childNodes[0].innerText=(a.distanceTo(o)*t).toFixed(2)+" m"}drawFinish(t){if(this.disposed)return;const e=this,i=e.data.points.length,a=new h.Vector3().fromArray(e.data.points.slice(i-6,i-3)),o=new h.Vector3().fromArray(e.data.points.slice(i-3));if((!t||a.distanceTo(o)<.001)&&(e.data.points.pop(),e.data.points.pop(),e.data.points.pop(),e.draw(e.data)),e.events.fire(qt),e.data.points.length<6){e.dispose();return}else{for(;e.css3dTags.length>e.data.points.length/3-1;){const c=e.css3dTags.pop();e.group.remove(c),c.element.parentElement?.removeChild(c.element)}e.css3dTags[e.css3dTags.length-1].visible=!0}const s=parent?.onActiveMark,r=e.getMarkData(!0);r.isNew=!0,r.meterScale=e.events.fire(F).meterScale,s?.(r)}draw(t,e=!1){if(this.disposed)return;const i=this;this.css3dTags=this.css3dTags||[];const a={type:"MarkMultiLines",name:t.name||"lines"+Date.now(),points:[...t.points],lineColor:t.lineColor||"#eeee00",lineWidth:t.lineWidth||3,mainTagColor:t.mainTagColor||"#c4c4c4",mainTagBackground:t.mainTagBackground||"#2E2E30",mainTagOpacity:t.mainTagOpacity||.8,mainTagVisible:t.mainTagVisible===void 0?!0:t.mainTagVisible,distanceTagColor:t.distanceTagColor||"#000000",distanceTagBackground:t.distanceTagBackground||"#e0ffff",distanceTagOpacity:t.distanceTagOpacity||.9,distanceTagVisible:t.distanceTagVisible===void 0?!0:t.distanceTagVisible,title:t.title||"标记线"+(document.querySelectorAll(".mark-wrap-lines.main-warp").length+1),note:t.note||""},o=i.geometry,s=i.material,r=new cn;r.setPositions([...a.points]);const c=new De({color:a.lineColor,linewidth:a.lineWidth});c.resolution.set(innerWidth,innerHeight),i.copy(new le(r,c)),o?.dispose(),s?.dispose();const A=a.name,l=a.points.length/3-1;if(!i.css3dMainTag){const u=document.createElement("div");u.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
735
+ <span class="${A}-main-tag" style="color:${a.mainTagColor};background:${a.mainTagBackground};opacity:${a.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;user-select: none;font-size: 12px;pointer-events: auto;">${a.title}</span>
736
+ </div>`,u.classList.add("mark-wrap-lines",`${a.name}`,"main-warp"),u.style.position="absolute",u.style.borderRadius="4px",u.style.cursor="pointer",u.onclick=()=>{if(i.events.fire(F).markMode)return;const d=parent?.onActiveMark,g=i.getMarkData(!0);g.meterScale=i.events.fire(F).meterScale,d?.(g),i.events.fire(At)},u.oncontextmenu=d=>d.preventDefault();const f=new pt(u);f.position.set(a.points[0],a.points[1],a.points[2]),f.element.style.pointerEvents="none",f.scale.set(.01,.01,.01),f.visible=a.mainTagVisible,i.group.add(f),i.css3dMainTag=f}for(let u=i.css3dTags.length;u<l;u++){const f=new h.Vector3().fromArray(a.points.slice(u*3,u*3+3)),d=new h.Vector3().fromArray(a.points.slice(u*3+3,u*3+6)),g=new h.Vector3((f.x+d.x)/2,(f.y+d.y)/2,(f.z+d.z)/2),p=(f.distanceTo(d)*i.events.fire(F).meterScale).toFixed(2)+" m",m=document.createElement("div");m.innerHTML=`<span class="${A}-distance-tag ${A}-distance-tag${u}" style="color:${a.distanceTagColor};background:${a.distanceTagBackground};opacity:${a.distanceTagOpacity};padding: 1px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: none;">${p}</span>`,m.classList.add("mark-wrap-lines",`${A}`,"distance-warp"),m.style.position="absolute",m.style.borderRadius="4px",m.style.display="none";const I=new pt(m);I.position.copy(g),I.element.style.pointerEvents="none",I.scale.set(.008,.008,.008),I.visible=a.distanceTagVisible,i.css3dTags.push(I),i.group.add(I)}e||(i.css3dTags[i.css3dTags.length-1].visible=!1),i.data=a,i.events.fire(Yt,i)}getMarkData(t=!1){const e={...this.data};return t?delete e.points:e.points=[...e.points],e}dispose(){if(this.disposed)return;const t=this;t.disposed=!0,t.events.fire(_t,t),t.events.fire(z).remove(t),t.events.fire(oe,t),t.geometry.dispose(),t.material.dispose(),document.querySelectorAll(`.${t.data.name}`).forEach(i=>i.parentElement?.removeChild(i)),t.events=null,t.data=null,t.css3dTags=null,t.group=null}}class To extends h.Group{constructor(t,e,i){super(),this.isMark=!0,this.disposed=!1,this.events=t;const a=this;let o;if(e instanceof h.Vector3){const c=document.querySelectorAll(".mark-wrap-point").length+1;o={type:"MarkSinglePoint",name:i||"point"+Date.now(),point:e.toArray(),iconName:"#svgicon-point2",iconColor:"#eeee00",iconOpacity:.8,mainTagColor:"#c4c4c4",mainTagBackground:"#2E2E30",mainTagOpacity:.8,title:"标记点"+c,note:""}}else o={type:"MarkSinglePoint",name:e.name||"point"+Date.now(),point:[...e.point],iconName:e.iconName||"#svgicon-point2",iconColor:e.iconColor||"#eeee00",iconOpacity:e.iconOpacity||.8,mainTagColor:e.mainTagColor||"#c4c4c4",mainTagBackground:e.mainTagBackground||"#2E2E30",mainTagOpacity:e.mainTagOpacity||.8,title:e.title||"标记点",note:e.note||""};const s=document.createElement("div");s.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
737
+ <span class="${o.name}" style="color:${o.mainTagColor};background:${o.mainTagBackground};opacity:${o.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: auto;">${o.title}</span>
738
+ <svg height="20" width="20" style="color:${o.iconColor};opacity:${o.iconOpacity};"><use href="${o.iconName}" fill="currentColor" /></svg>
739
+ </div>`,s.classList.add("mark-wrap-point",`mark-wrap-${o.name}`),s.style.position="absolute",s.style.borderRadius="4px",s.style.cursor="pointer",s.onclick=()=>{if(a.events.fire(F).markMode)return;const c=parent?.onActiveMark;c?.(a.getMarkData(!0)),a.events.fire(At)},s.oncontextmenu=c=>c.preventDefault();const r=new pt(s);r.position.set(o.point[0],o.point[1],o.point[2]),r.element.style.pointerEvents="none",r.scale.set(.01,.01,.01),a.data=o,a.css3dTag=r,a.add(r),t.fire(Yt,a)}drawUpdate(t,e=!0){if(this.disposed)return;const i=this;if(t?.iconName){e&&(i.data.iconName=t.iconName);const a=this.css3dTag.element.querySelector(`.mark-wrap-${i.data.name} svg`);a.innerHTML=`<use href="${t.iconName}" fill="currentColor" />`}if(t?.iconColor){e&&(i.data.iconColor=t.iconColor);const a=this.css3dTag.element.querySelector(`.mark-wrap-${i.data.name} svg`);a.style.color=t.iconColor}if(t?.iconOpacity){e&&(i.data.iconOpacity=t.iconOpacity);const a=this.css3dTag.element.querySelector(`.mark-wrap-${i.data.name} svg`);a.style.opacity=t.iconOpacity.toString()}t?.mainTagColor&&(e&&(i.data.mainTagColor=t.mainTagColor),this.css3dTag.element.querySelector(`.${i.data.name}`).style.color=t.mainTagColor),t?.mainTagBackground&&(e&&(i.data.mainTagBackground=t.mainTagBackground),this.css3dTag.element.querySelector(`.${i.data.name}`).style.background=t.mainTagBackground),t?.mainTagOpacity&&(e&&(i.data.mainTagOpacity=t.mainTagOpacity),this.css3dTag.element.querySelector(`.${i.data.name}`).style.opacity=t.mainTagOpacity.toString()),t?.title!==void 0&&(e&&(i.data.title=t.title),this.css3dTag.element.querySelector(`.${i.data.name}`).innerText=t.title),t?.note!==void 0&&e&&(i.data.note=t.note),i.events.fire(rt)}resetMeterScale(t){t?.meterScale!==void 0&&(this.events.fire(F).meterScale=t.meterScale)}drawFinish(){if(this.disposed)return;const t=this;t.events.fire(qt);const e=parent?.onActiveMark,i=t.getMarkData(!0);i.isNew=!0,i.meterScale=t.events.fire(F).meterScale,e?.(i)}getMarkData(t=!1){const e={...this.data};return t?delete e.point:e.point=[...e.point],e}dispose(){if(this.disposed)return;const t=this;t.disposed=!0,t.events.fire(_t,t),t.events.fire(z).remove(t),t.events.fire(oe,t);const e=document.querySelector(`.mark-wrap-${t.data.name}`);e?.parentElement?.removeChild?.(e),t.events=null,t.data=null,t.css3dTag=null}}class Xs extends le{constructor(t){super(),this.isMark=!0,this.disposed=!1,this.css3dTags=[],this.group=new h.Group,this.add(this.group),this.events=t}drawStart(t,e){if(this.disposed)return;const i=document.querySelectorAll(".mark-wrap-plans.main-warp").length+1,a={type:"MarkMultiPlans",name:e||"plans"+Date.now(),points:[...t.toArray(),...t.toArray()],lineColor:"#eeee00",lineWidth:3,mainTagColor:"#c4c4c4",mainTagBackground:"#2E2E30",mainTagOpacity:.8,mainTagVisible:!0,areaTagColor:"#000000",areaTagBackground:"#e0ffff",areaTagOpacity:.8,distanceTagVisible:!0,areaTagVisible:!0,planOpacity:.5,title:"标记面"+i,note:""};this.draw(a)}drawUpdate(t,e=!0,i,a=!1){if(this.disposed)return;const o=this;if(i)if(a){const s=o.data.points.length,r=o.css3dTags.length-1,c=new h.Vector3().fromArray(o.data.points.slice(s-6,s-3)),A=i,l=new h.Vector3((c.x+A.x)/2,(c.y+A.y)/2,(c.z+A.z)/2),f=(c.distanceTo(A)*o.events.fire(F).meterScale).toFixed(2)+" m";o.css3dTags[r].element.innerText=f,o.css3dTags[r].position.set(l.x,l.y,l.z),o.css3dTags[r].visible=!0,o.data.points.pop(),o.data.points.pop(),o.data.points.pop(),o.data.points=[...o.data.points,...i.toArray(),...i.toArray()],this.draw(this.data)}else{const s=o.data.points.length;o.data.points[s-3]=i.x,o.data.points[s-2]=i.y,o.data.points[s-1]=i.z;const r=o.css3dTags.length-1,c=new h.Vector3().fromArray(o.data.points.slice(s-6,s-3)),A=new h.Vector3().fromArray(o.data.points.slice(s-3)),l=new h.Vector3((c.x+A.x)/2,(c.y+A.y)/2,(c.z+A.z)/2),u=c.distanceTo(A),f=(u*o.events.fire(F).meterScale).toFixed(2)+" m";o.css3dTags[r].element.innerText=f,o.geometry.setPositions([...o.data.points]),o.css3dTags[r].position.set(l.x,l.y,l.z),o.css3dTags[r].visible=a?!0:u>.5,o.meshPlans.geometry.setAttribute("position",new h.BufferAttribute(new Float32Array(o.data.points),3)),o.meshPlans.geometry.attributes.position.needsUpdate=!0;const d=o.events.fire(An,o.data.points);o.css3dAreaTag.position.copy(d);const g=o.events.fire(un,o.data.points);o.css3dAreaTag.element.childNodes[0].innerText=g.toFixed(2)+" m²"}if(t?.lineColor&&(e&&(o.data.lineColor=t.lineColor),o.material.color.set(t.lineColor),o.meshPlans.material.color.set(t.lineColor)),t?.lineWidth&&(e&&(o.data.lineWidth=t.lineWidth),o.material.linewidth=t.lineWidth),t?.mainTagColor&&(e&&(o.data.mainTagColor=t.mainTagColor),document.querySelector(`.${o.data.name}-main-tag`).style.color=t.mainTagColor),t?.mainTagBackground&&(e&&(o.data.mainTagBackground=t.mainTagBackground),document.querySelector(`.${o.data.name}-main-tag`).style.background=t.mainTagBackground),t?.mainTagOpacity&&(e&&(o.data.mainTagOpacity=t.mainTagOpacity),document.querySelector(`.${o.data.name}-main-tag`).style.opacity=t.mainTagOpacity.toString()),t?.mainTagVisible!==void 0&&(e&&(o.data.mainTagVisible=t.mainTagVisible),o.css3dMainTag.visible=t.mainTagVisible),t?.areaTagVisible!==void 0&&(e&&(o.data.areaTagVisible=t.areaTagVisible),o.css3dAreaTag.visible=t.areaTagVisible),t?.areaTagColor){e&&(o.data.areaTagColor=t.areaTagColor);const s=document.querySelector(`.${o.data.name}-area-tag`);s&&(s.style.color=t.areaTagColor)}if(t?.areaTagBackground){e&&(o.data.areaTagBackground=t.areaTagBackground);const s=document.querySelector(`.${o.data.name}-area-tag`);s&&(s.style.background=t.areaTagBackground)}if(t?.areaTagOpacity){e&&(o.data.areaTagOpacity=t.areaTagOpacity);const s=document.querySelector(`.${o.data.name}-area-tag`);s&&(s.style.opacity=t.areaTagOpacity.toString())}t?.distanceTagVisible!==void 0&&(e&&(o.data.distanceTagVisible=t.distanceTagVisible),o.css3dTags.forEach(s=>s.visible=t.distanceTagVisible)),t?.planOpacity&&(e&&(o.data.planOpacity=t.planOpacity),this.meshPlans.material.opacity=t.planOpacity),t?.title!==void 0&&(e&&(o.data.title=t.title),this.css3dMainTag.element.querySelector(`.${o.data.name}-main-tag`).innerText=t.title),t?.note!==void 0&&e&&(o.data.note=t.note),o.events.fire(rt)}updateByMeterScale(t){const e=this,i=[];for(let r=0,c=e.data.points.length/3;r<c;r++)i.push(new h.Vector3(e.data.points[r*3],e.data.points[r*3+1],e.data.points[r*3+2]));let a,o;for(let r=1;r<i.length;r++)a=i[r-1],o=i[r],e.css3dTags[r-1].element.innerText=(a.distanceTo(o)*t).toFixed(2)+" m";const s=e.events.fire(mi,i,t);e.css3dAreaTag.element.childNodes[0].innerText=s.toFixed(2)+" m²"}drawFinish(t){if(this.disposed)return;const e=this,i=e.data.points.length,a=new h.Vector3().fromArray(e.data.points.slice(i-6,i-3)),o=new h.Vector3().fromArray(e.data.points.slice(i-3));if((!t||a.distanceTo(o)<1e-4)&&(e.data.points.pop(),e.data.points.pop(),e.data.points.pop()),e.events.fire(qt),e.data.points.length<9){e.dispose();return}for(;e.css3dTags.length>e.data.points.length/3-1;){const c=e.css3dTags.pop();e.group.remove(c),c.element.parentElement?.removeChild(c.element)}e.data.points.push(e.data.points[0],e.data.points[1],e.data.points[2]),e.draw(e.data,!0),e.css3dTags[e.css3dTags.length-1].visible=!0;const s=parent?.onActiveMark,r=e.getMarkData(!0);r.isNew=!0,r.meterScale=e.events.fire(F).meterScale,s?.(r)}draw(t,e=!1){if(this.disposed)return;const i=this;this.css3dTags=this.css3dTags||[];const a={type:"MarkMultiPlans",name:t.name||"plans"+Date.now(),points:[...t.points],lineColor:t.lineColor||"#eeee00",lineWidth:t.lineWidth||3,mainTagColor:t.mainTagColor||"#c4c4c4",mainTagBackground:t.mainTagBackground||"#2E2E30",mainTagOpacity:t.mainTagOpacity||.8,mainTagVisible:t.mainTagVisible===void 0?!0:t.mainTagVisible,areaTagColor:t.areaTagColor||"#000000",areaTagBackground:t.areaTagBackground||"#e0ffff",areaTagOpacity:t.areaTagOpacity||.9,areaTagVisible:t.areaTagVisible===void 0?!0:t.areaTagVisible,distanceTagVisible:t.distanceTagVisible===void 0?!0:t.distanceTagVisible,planOpacity:t.planOpacity||.5,title:t.title||"标记面"+(document.querySelectorAll(".mark-wrap-plans.main-warp").length+1),note:t.note||""},o=i.geometry,s=i.material,r=new cn;r.setPositions([...a.points]);const c=new De({color:a.lineColor,linewidth:a.lineWidth});c.resolution.set(innerWidth,innerHeight),i.copy(new le(r,c)),o?.dispose(),s?.dispose();const A=a.name,l=a.points.length/3-1;if(!i.css3dMainTag){const d=document.createElement("div");d.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
740
+ <span class="${A}-main-tag" style="color:${a.mainTagColor};background:${a.mainTagBackground};opacity:${a.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;user-select: none;font-size: 12px;pointer-events: auto;">${a.title}</span>
741
+ </div>`,d.classList.add("mark-wrap-plans",`${a.name}`,"main-warp"),d.style.position="absolute",d.style.borderRadius="4px",d.style.cursor="pointer",d.onclick=()=>{if(i.events.fire(F).markMode)return;const y=parent?.onActiveMark,p=i.getMarkData(!0);p.meterScale=i.events.fire(F).meterScale,y?.(p),i.events.fire(At)},d.oncontextmenu=y=>y.preventDefault();const g=new pt(d);g.position.set(a.points[0],a.points[1],a.points[2]),g.element.style.pointerEvents="none",g.scale.set(.01,.01,.01),g.visible=a.mainTagVisible,i.group.add(g),i.css3dMainTag=g}const u=i.events.fire(un,a.points).toFixed(2)+" m²",f=i.events.fire(An,a.points);if(i.css3dAreaTag)i.css3dAreaTag.position.copy(f),i.css3dAreaTag.element.childNodes[0].innerText=u;else{const d=document.createElement("div");d.innerHTML=`<span class="${A}-area-tag" style="color:${a.areaTagColor};background:${a.areaTagBackground};opacity:${a.areaTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;user-select: none;font-size: 12px;pointer-events: none;">${u}</span>`,d.classList.add("mark-wrap-plans",`${a.name}`,"area-warp"),d.style.position="absolute",d.style.borderRadius="4px";const g=new pt(d);g.position.copy(f),g.element.style.pointerEvents="none",g.scale.set(.01,.01,.01),i.group.add(g),i.css3dAreaTag=g}i.css3dAreaTag.visible=a.points.length>6&&a.areaTagVisible;for(let d=i.css3dTags.length;d<l;d++){const g=new h.Vector3().fromArray(a.points.slice(d*3,d*3+3)),y=new h.Vector3().fromArray(a.points.slice(d*3+3,d*3+6)),p=new h.Vector3((g.x+y.x)/2,(g.y+y.y)/2,(g.z+y.z)/2),I=(g.distanceTo(y)*i.events.fire(F).meterScale).toFixed(2)+" m",S=document.createElement("div");S.innerText=I,S.style.color="white",S.classList.add("mark-wrap-plans",`${A}`,"distance-warp"),S.style.position="absolute",S.style.borderRadius="4px",S.style.display="none";const Q=new pt(S);Q.position.copy(p),Q.element.style.pointerEvents="none",Q.scale.set(.008,.008,.008),Q.visible=a.distanceTagVisible,i.css3dTags.push(Q),i.group.add(Q)}i.drawPlans(a),e||(i.css3dTags[i.css3dTags.length-1].visible=!1),i.data=a,i.events.fire(Yt,i)}drawPlans(t){const e=this;if(!e.meshPlans){const i=new h.BufferGeometry;i.setAttribute("position",new h.BufferAttribute(new Float32Array,3)),i.attributes.position.needsUpdate=!0;const a=new h.BufferAttribute(new Uint16Array([]),1);i.setIndex(a);const o=new h.MeshBasicMaterial({color:t.lineColor,transparent:!0,opacity:t.planOpacity,side:h.DoubleSide});e.meshPlans=new h.Mesh(i,o),e.meshPlans.renderOrder=1,e.meshPlans.isMark=!0,e.group.add(e.meshPlans)}if(t.points.length>6){e.meshPlans.geometry.setAttribute("position",new h.BufferAttribute(new Float32Array(t.points),3)),e.meshPlans.geometry.attributes.position.needsUpdate=!0;let i=t.points.length/3-2;const a=new h.Vector3().fromArray(t.points.slice(0,3)),o=new h.Vector3().fromArray(t.points.slice(-3));a.distanceTo(o)<1e-4&&i--;const s=new Uint16Array(i*3);for(let r=0;r<i;r++)s[r*3]=0,s[r*3+1]=r+1,s[r*3+2]=r+2;e.meshPlans.geometry.setIndex(new h.BufferAttribute(s,1))}}getMarkData(t=!1){const e={...this.data};return t?delete e.points:e.points=[...e.points],e}dispose(){if(this.disposed)return;const t=this;t.disposed=!0,t.events.fire(_t,t),t.events.fire(z).remove(t),t.events.fire(oe,t),t.geometry.dispose(),t.material.dispose(),document.querySelectorAll(`.${t.data.name}`).forEach(i=>i.parentElement?.removeChild(i)),t.events=null,t.data=null,t.css3dTags=null,t.group=null,t.meshPlans=null,t.css3dMainTag=null,t.css3dAreaTag=null}}class Lo extends h.Group{constructor(t){super(),this.isMark=!0,this.disposed=!1,this.events=t}drawStart(t,e){if(this.disposed)return;const i=this,a=document.querySelectorAll(".mark-wrap-circle.main-warp").length+1,o={type:"MarkCirclePlan",name:e||"circle"+Date.now(),startPoint:t.toArray(),radius:.05,circleColor:"#eeee00",circleOpacity:.5,mainTagColor:"#c4c4c4",mainTagBackground:"#2E2E30",mainTagOpacity:.8,mainTagVisible:!0,circleTagColor:"#000000",circleTagBackground:"#e0ffff",circleTagOpacity:.9,circleTagVisible:!0,title:"标记圆面"+a},s=new h.CircleGeometry(o.radius,32),r=new h.MeshBasicMaterial({color:o.circleColor,side:h.DoubleSide,transparent:!0});r.opacity=o.circleOpacity;const c=new h.Mesh(s,r);c.position.copy(t),c.isMark=!0,c.renderOrder=1;const A=new h.Vector3(0,1,0).normalize();c.lookAt(c.position.clone().add(A));const l=document.createElement("div");l.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
742
+ <span class="${o.name}-main-tag" style="color:${o.mainTagColor};background:${o.mainTagBackground};opacity:${o.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;user-select: none;font-size: 12px;pointer-events: auto;">${o.title}</span>
743
+ </div>`,l.classList.add("mark-wrap-circle",`${o.name}`,"main-warp"),l.style.position="absolute",l.style.borderRadius="4px",l.style.cursor="pointer",l.onclick=()=>{if(i.events.fire(F).markMode)return;const g=parent?.onActiveMark;g?.(i.getMarkData(!0)),i.events.fire(At)},l.oncontextmenu=g=>g.preventDefault();const u=new pt(l);u.position.copy(t),u.element.style.pointerEvents="none",u.scale.set(.01,.01,.01),u.visible=o.mainTagVisible;const f=document.createElement("div");f.innerHTML=`<span class="${e}-circle-tag" style="color:${o.circleTagColor};background:${o.circleTagBackground};opacity:${o.circleTagOpacity};padding: 1px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: none;"></span>`,f.classList.add("mark-wrap-circle",`${e}`,"circle-warp"),f.style.position="absolute",f.style.borderRadius="4px",f.style.pointerEvents="none";const d=new pt(f);d.position.set(t.x+Math.min(o.radius/2,.5),t.y,t.z),d.element.style.pointerEvents="none",d.scale.set(.008,.008,.008),d.visible=!1,i.add(c,u,d),i.data=o,i.circleMesh=c,i.css3dTag=d,i.css3dMainTag=u,i.events.fire(Yt,i)}drawUpdate(t,e=!0,i){if(this.disposed)return;const a=this;if(i){const o=new h.Vector3().fromArray(a.data.startPoint),s=o.distanceTo(new h.Vector3(i.x,o.y,i.z));e&&(a.data.radius=s),a.circleMesh.geometry.copy(new h.CircleGeometry(s,128)),a.css3dTag.visible=s>.3;const r=s*a.events.fire(F).meterScale,c=(Math.PI*r*r).toFixed(2)+" m²";a.css3dTag.element.childNodes[0].innerText=c,a.css3dTag.position.set(o.x+Math.min(a.data.radius/2,.5),o.y,o.z)}if(t?.radius){const o=new h.Vector3().fromArray(a.data.startPoint),s=t?.radius;e&&(a.data.radius=s),a.circleMesh.geometry.copy(new h.CircleGeometry(s,128)),a.css3dTag.visible=s>.3;const r=s*a.events.fire(F).meterScale,c=(Math.PI*r*r).toFixed(2)+" m²";a.css3dTag.element.childNodes[0].innerText=c,a.css3dTag.position.set(o.x+Math.min(s/2,.5),o.y,o.z)}t?.circleColor&&(e&&(a.data.circleColor=t.circleColor),a.circleMesh.material.color.set(t.circleColor)),t?.circleOpacity&&(e&&(a.data.circleOpacity=t.circleOpacity),a.circleMesh.material.opacity=t.circleOpacity),t?.mainTagColor&&(e&&(a.data.mainTagColor=t.mainTagColor),document.querySelector(`.${a.data.name}-main-tag`).style.color=t.mainTagColor),t?.mainTagBackground&&(e&&(a.data.mainTagBackground=t.mainTagBackground),document.querySelector(`.${a.data.name}-main-tag`).style.background=t.mainTagBackground),t?.mainTagOpacity&&(e&&(a.data.mainTagOpacity=t.mainTagOpacity),document.querySelector(`.${a.data.name}-main-tag`).style.opacity=t.mainTagOpacity.toString()),t?.mainTagVisible!==void 0&&(e&&(a.data.mainTagVisible=t.mainTagVisible),a.css3dMainTag.visible=t.mainTagVisible),t?.circleTagColor&&(e&&(a.data.circleTagColor=t.circleTagColor),document.querySelector(`.${a.data.name}-circle-tag`).style.color=t.circleTagColor),t?.circleTagBackground&&(e&&(a.data.circleTagBackground=t.circleTagBackground),document.querySelector(`.${a.data.name}-circle-tag`).style.background=t.circleTagBackground),t?.circleTagOpacity&&(e&&(a.data.circleTagOpacity=t.circleTagOpacity),document.querySelector(`.${a.data.name}-circle-tag`).style.opacity=t.circleTagOpacity.toString()),t?.circleTagVisible!==void 0&&(e&&(a.data.circleTagVisible=t.circleTagVisible),a.css3dTag.visible=t.circleTagVisible),t?.title!==void 0&&(e&&(a.data.title=t.title),this.css3dMainTag.element.querySelector(`.${a.data.name}-main-tag`).innerText=t.title),t?.note!==void 0&&e&&(a.data.note=t.note),a.events.fire(rt)}updateByMeterScale(t){const e=this,i=e.data.radius*t,a=(Math.PI*i*i).toFixed(2)+" m²";e.css3dTag.element.childNodes[0].innerText=a}drawFinish(t){if(this.disposed)return;const e=this,i=new h.Vector3().fromArray(e.data.startPoint),a=i.distanceTo(new h.Vector3(t.x,i.y,t.z));e.data.radius=a,e.circleMesh.geometry.copy(new h.CircleGeometry(a,128));const o=e.data.radius*e.events.fire(F).meterScale,s=(Math.PI*o*o).toFixed(2)+" m²";e.css3dTag.element.childNodes[0].innerText=s,e.events.fire(qt);const r=parent?.onActiveMark,c=e.getMarkData(!0);c.isNew=!0,c.meterScale=e.events.fire(F).meterScale,r?.(c)}draw(t){if(this.disposed)return;const e=this,i={type:"MarkCirclePlan",name:t.name||"circle"+Date.now(),startPoint:[...t.startPoint],radius:t.radius,circleColor:t.circleColor||"#eeee00",circleOpacity:t.circleOpacity||.5,mainTagColor:t.mainTagColor||"#c4c4c4",mainTagBackground:t.mainTagBackground||"#2E2E30",mainTagOpacity:t.mainTagOpacity||.8,mainTagVisible:t.mainTagVisible===void 0?!0:t.mainTagVisible,circleTagColor:t.circleTagColor||"#000000",circleTagBackground:t.circleTagBackground||"#e0ffff",circleTagOpacity:t.circleTagOpacity||.9,circleTagVisible:t.circleTagVisible===void 0?!0:t.circleTagVisible,title:t.title||"标记圆面"},a=new h.CircleGeometry(i.radius,128),o=new h.MeshBasicMaterial({color:i.circleColor,side:h.DoubleSide,transparent:!0});o.opacity=i.circleOpacity;const s=new h.Mesh(a,o);s.position.fromArray(i.startPoint),s.isMark=!0,s.renderOrder=1;const r=new h.Vector3(0,1,0).normalize();s.lookAt(s.position.clone().add(r));const c=i.name,A=document.createElement("div");A.innerHTML=`<div style='flex-direction: column;align-items: center;display: flex;pointer-events: none;margin-bottom: 40px;'>
744
+ <span class="${c}-main-tag" style="color:${i.mainTagColor};background:${i.mainTagBackground};opacity:${i.mainTagOpacity};padding:1px 5px 2px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: auto;">${i.title}</span>
745
+ </div>`,A.classList.add("mark-wrap-circle",`${i.name}`,"main-warp"),A.style.position="absolute",A.style.borderRadius="4px",A.style.cursor="pointer",A.onclick=()=>{if(e.events.fire(F).markMode)return;const p=parent?.onActiveMark;p?.(e.getMarkData(!0)),e.events.fire(At)},A.oncontextmenu=p=>p.preventDefault();const l=new h.Vector3().fromArray(i.startPoint),u=i.radius*e.events.fire(F).meterScale,f=(Math.PI*u*u).toFixed(2)+" m²",d=new pt(A);d.position.copy(l),d.element.style.pointerEvents="none",d.scale.set(.01,.01,.01),d.visible=i.mainTagVisible;const g=document.createElement("div");g.innerHTML=`<span class="${c}-distance-tag ${c}-circle-tag" style="color:${i.circleTagColor};background:${i.circleTagBackground};opacity:${i.circleTagOpacity};padding: 1px 5px;border-radius: 4px;margin-bottom: 5px;user-select: none;font-size: 12px;pointer-events: none;">${f}</span>`,g.classList.add("mark-wrap-circle",`${c}`,"circle-warp"),g.style.position="absolute",g.style.borderRadius="4px",g.style.pointerEvents="none";const y=new pt(g);y.position.set(l.x+Math.min(i.radius/2,.5),l.y,l.z),y.element.style.pointerEvents="none",y.scale.set(.008,.008,.008),y.visible=i.circleTagVisible,e.add(s,d,y),e.data=i,e.circleMesh=s,e.css3dTag=y,e.css3dMainTag=d,e.events.fire(Yt,e)}getMarkData(t=!1){const e={...this.data};return t?(delete e.startPoint,delete e.radius):e.startPoint=[...e.startPoint],e}dispose(){if(this.disposed)return;const t=this;t.disposed=!0,t.events.fire(_t,t),t.events.fire(z).remove(t),t.events.fire(oe,t),document.querySelectorAll(`.${t.data.name}`).forEach(i=>i.parentElement?.removeChild(i)),t.events=null,t.data=null,t.circleMesh=null,t.css3dTag=null,t.css3dMainTag=null}}let xl=class{constructor(){this.down=0,this.move=!1,this.downTime=0,this.isDbClick=!1,this.x=0,this.y=0,this.lastClickX=0,this.lastClickY=0,this.lastClickPointTime=0,this.lastMovePoint=null,this.lastMovePointTime=0}};function Ro(n){const t=(C,v,x)=>n.on(C,v,x),e=(C,...v)=>n.fire(C,...v),i=e(ee);let a=new Set,o,s=new xl,r;t(bi,()=>{e(tt).autoRotate=e(F).autoRotate=!0}),t(At,(C=!0)=>{e(tt).autoRotate=e(F).autoRotate=!1,C&&e(Je)}),t(Sn,(C=!0)=>{if(o)return;const v=e(tt),x=C?Math.PI/128:-(Math.PI/128),B=new h.Matrix4().makeRotationAxis(new h.Vector3(0,0,-1).transformDirection(v.object.matrixWorld),x);v.object.up.transformDirection(B),e(rt)}),t(qi,()=>{o||n.fire(Sn,!0)}),t(Wi,()=>{o||n.fire(Sn,!1)}),t(We,C=>{const v=e(F);C??(C=!v.pointcloudMode),v.pointcloudMode=C,e(z).traverse(B=>B instanceof Lt&&B.fire(Wt,C))}),t($e,()=>{e(z).traverse(v=>v instanceof Lt&&v.fire(wn))}),t(de,C=>{e(z).traverse(x=>x instanceof Lt&&x.fire(de,C))}),t(us,()=>{const C=e(z);let v;C.traverse(x=>x instanceof Lt&&(v=x)),v&&e(gn,v.fire(As))}),t(He,()=>{if(!a.size)return;const C=e(F);if(!C.enableKeyboard)return a.clear();if(C.markMode&&a.has("Escape")){e(we),a.clear();return}a.has("Space")?(C.bigSceneMode?e(We):e($e),a.clear()):a.has("KeyR")?(C.autoRotate?e(At):e(bi),a.clear()):a.has("KeyM")?(e(Ie,!C.markVisible),a.clear()):a.has("ArrowLeft")?(e(qi),e(Ge,!0),a.clear()):a.has("ArrowRight")?(e(Wi),e(Ge,!0),a.clear()):a.has("KeyP")?(e(Ee,!0),a.clear()):a.has("Equal")?(e(Fn),a.clear()):a.has("Minus")?(e(Un),a.clear()):a.has("KeyY")?(e(Pn,!1),e(Ln),a.clear()):a.has("KeyI")?(e(as),a.clear()):a.has("KeyF")?(e(us),a.clear()):a.has("F2")?(!C.bigSceneMode&&window.open("/editor/index.html?url="+encodeURIComponent(e(Ct).meta.url)),a.clear()):a.has("KeyW")?(Tl(e(tt),.15),a.clear()):a.has("KeyS")?(Ll(e(tt),.15),a.clear()):a.has("KeyA")?(Dl(e(tt),.15),a.clear()):a.has("KeyD")?(kl(e(tt),.15),a.clear()):a.has("KeyQ")?(Rl(e(tt)),a.clear()):a.has("KeyE")?(_l(e(tt)),a.clear()):a.has("KeyC")?(Fl(e(tt)),a.clear()):a.has("KeyZ")&&(Pl(e(tt)),a.clear())}),t(me,async(C,v)=>{if(s.move)return;const x=await e(Oe,C,v);x.length&&e(gn,x[0],!0,!1)}),t(Mt,async(C,v)=>{const x=e(z),B=[];x.traverse(L=>L instanceof Lt&&B.push(L));const R=await e(Oe,C,v);return R.length?(B.length&&B[0].fire(Re,R[0].x,R[0].y,R[0].z,!0),new h.Vector3(R[0].x,R[0].y,R[0].z)):(B.length&&B[0].fire(Re,0,0,0,!1),null)}),t(Bn,async()=>{const C=e(z),v=[];C.traverse(x=>x instanceof Lt&&v.push(x));for(let x=0;x<v.length;x++)v[x].fire(Re,0,0,0,!1)});const c=C=>{C.target.type!=="text"&&(o||C.code==="F5"||(C.preventDefault(),C.code!=="KeyR"&&(a.add(C.code),e(At)),r=Date.now()))},A=C=>{C.target.type!=="text"&&(o||(C.code==="KeyR"&&a.add(C.code),(C.code==="ArrowLeft"||C.code==="ArrowRight")&&e(wi),r=Date.now()))};t(Jt,()=>{e(Dn)&&Date.now()-r>2e3&&(e(Ge,!1),e(Ln))},!0);const l=()=>{a.clear()},u=C=>{parent&&setTimeout(()=>window.focus()),C.preventDefault(),!o&&(e(At),r=Date.now())},f=C=>{C.preventDefault(),!o&&(e(At),r=Date.now())};let d,g,y,p;t(we,()=>{d?.dispose(),g?.dispose(),y?.dispose(),p?.dispose(),d=null,g=null,y=null,p=null,s.lastMovePoint=null,e(qt)});const m=async C=>{parent&&setTimeout(()=>window.focus()),C.preventDefault(),!o&&(e(At),s.down=C.button===2?2:1,s.move=!1,s.isDbClick=Date.now()-s.downTime<300,r=Date.now(),s.downTime=Date.now())},I=async C=>{if(C.preventDefault(),o)return;s.down&&(s.move=!0,r=Date.now());const v=e(F);if(v.markMode){const x=await e(Mt,C.clientX,C.clientY);x&&!s.down&&v.markType==="distance"&&d?d.drawUpdate({endPoint:x.toArray()}):!s.down&&v.markType==="circle"&&p?x?(p.drawUpdate(null,!0,x),s.lastMovePoint=x,s.lastMovePointTime=Date.now()):(s.lastMovePoint=null,s.lastMovePointTime=0):!s.down&&v.markType==="lines"&&g?x?(g.drawUpdate(null,!0,x),s.lastMovePoint=x,s.lastMovePointTime=Date.now()):(s.lastMovePoint=null,s.lastMovePointTime=0):!s.down&&v.markType==="plans"&&y&&(x?(y.drawUpdate(null,!0,x),s.lastMovePoint=x,s.lastMovePointTime=Date.now()):(s.lastMovePoint=null,s.lastMovePointTime=0))}},S=async C=>{if(C.preventDefault(),o)return;const v=e(F);if(s.isDbClick&&(g?Math.abs(C.clientX-s.lastClickX)<2&&Math.abs(C.clientY-s.lastClickY)<2&&(g.drawFinish(s.lastClickPointTime>0),g=null,s.lastMovePoint=null):y&&Math.abs(C.clientX-s.lastClickX)<2&&Math.abs(C.clientY-s.lastClickY)<2&&(y.drawFinish(s.lastClickPointTime>0),y=null,s.lastMovePoint=null)),v.markMode&&s.down===1&&!s.move&&Date.now()-s.downTime<500){if(v.markType==="point"){if(await e(Mt,C.clientX,C.clientY)){const B=new To(n,await e(Mt,C.clientX,C.clientY));e(z).add(B),B.drawFinish()}}else if(v.markType==="distance")if(d){const x=await e(Mt,C.clientX,C.clientY);x?(d.drawFinish(x),d=null):s.isDbClick&&e(we)}else{const x=await e(Mt,C.clientX,C.clientY);x&&(d=new Js(n),d.drawStart(x),e(z).add(d))}else if(v.markType==="lines")if(g)if(s.lastMovePoint&&e(bn,C.clientX,C.clientY,s.lastMovePoint)<.03)g.drawUpdate(null,!0,s.lastMovePoint,!0),s.lastClickPointTime=Date.now();else{const x=await e(Mt,C.clientX,C.clientY);x?(g.drawUpdate(null,!0,x,!0),s.lastClickPointTime=Date.now()):s.lastClickPointTime=0}else{const x=await e(Mt,C.clientX,C.clientY);x&&(g=new Ks(n),g.drawStart(x),e(z).add(g))}else if(v.markType==="plans")if(y)if(s.lastMovePoint&&e(bn,C.clientX,C.clientY,s.lastMovePoint)<.03)y.drawUpdate(null,!0,s.lastMovePoint,!0),s.lastClickPointTime=Date.now();else{const x=await e(Mt,C.clientX,C.clientY);x?(y.drawUpdate(null,!0,x,!0),s.lastClickPointTime=Date.now()):s.lastClickPointTime=0}else{const x=await e(Mt,C.clientX,C.clientY);x&&(y=new Xs(n),y.drawStart(x),e(z).add(y))}else if(v.markType==="circle")if(p){const x=await e(Mt,C.clientX,C.clientY);x?(p.drawFinish(x),p=null):s.isDbClick&&e(we)}else{const x=await e(Mt,C.clientX,C.clientY);x&&(p=new Lo(n),p.drawStart(x),e(z).add(p))}s.lastClickX=C.clientX,s.lastClickY=C.clientY}s.down===2&&!s.move&&e(me,C.clientX,C.clientY),s.down=0,s.move=!1,r=Date.now()};function Q(C){C.preventDefault(),!o&&(e(At),s.down=C.touches.length,s.down===1&&(s.move=!1,s.x=C.touches[0].clientX,s.y=C.touches[0].clientY))}function k(C){C.touches.length===1&&(s.move=!0)}function M(C){s.down===1&&!s.move&&e(me,s.x,s.y)}window.addEventListener("keydown",c),window.addEventListener("keyup",A),window.addEventListener("blur",l),window.addEventListener("wheel",u,{passive:!1}),i.addEventListener("contextmenu",f),i.addEventListener("mousedown",m),i.addEventListener("mousemove",I),i.addEventListener("mouseup",S),i.addEventListener("touchstart",Q,{passive:!1}),i.addEventListener("touchmove",k,{passive:!1}),i.addEventListener("touchend",M,{passive:!1}),window.addEventListener("resize",b),b();function b(){const{width:C,height:v,top:x,left:B}=e($t),R=e(lt);R.aspect=C/v,R.updateProjectionMatrix();const L=e(kn);L.setSize(C,v),L.domElement.style.position="absolute",L.domElement.style.left=`${B}px`,L.domElement.style.top=`${x}px`;const _=e(fe);_.setPixelRatio(Math.min(devicePixelRatio,2)),_.setSize(C,v)}t(hn,()=>{o=!0,window.removeEventListener("keydown",c),window.removeEventListener("keyup",A),window.removeEventListener("blur",l),window.removeEventListener("wheel",u),i.removeEventListener("contextmenu",f),i.removeEventListener("mousedown",m),i.removeEventListener("mousemove",I),i.removeEventListener("mouseup",S),i.removeEventListener("touchstart",Q),i.removeEventListener("touchmove",k),i.removeEventListener("touchend",M),window.removeEventListener("resize",b)})}function hi(n,t,e=.012){const i=n.object.up.clone().normalize(),o=new h.Vector3().copy(t).projectOnPlane(i).normalize().multiplyScalar(e);n.object.position.add(o),n.target.add(o),n.update()}function Dl(n,t=.2){const e=new h.Vector3;n.object.getWorldDirection(e);const i=new h.Vector3().crossVectors(n.object.up,e).normalize();hi(n,i,t)}function kl(n,t=.2){const e=new h.Vector3;n.object.getWorldDirection(e);const i=new h.Vector3().crossVectors(n.object.up,e).normalize().negate();hi(n,i,t)}function Tl(n,t=.2){const e=new h.Vector3;n.object.getWorldDirection(e),hi(n,e,t)}function Ll(n,t=.2){const e=new h.Vector3;n.object.getWorldDirection(e).negate(),hi(n,e,t)}function _o(n,t=.006){const e=n.object.position.clone(),i=n.target.clone(),a=new h.Vector3().subVectors(i,e),o=n.object.up.clone().normalize(),s=new h.Quaternion;s.setFromAxisAngle(o,-t),a.applyQuaternion(s);const r=new h.Vector3().addVectors(e,a);n.target.copy(r),n.update()}function Rl(n){_o(n,-.01)}function _l(n){_o(n,.01)}function Fo(n,t=.006){const e=n.object.position.clone(),i=n.target.clone(),a=new h.Vector3().subVectors(i,e),o=new h.Vector3;n.object.getWorldDirection(o);const s=new h.Vector3().crossVectors(n.object.up,o).normalize(),r=new h.Quaternion;r.setFromAxisAngle(s,t),a.applyQuaternion(r);const c=new h.Vector3().addVectors(e,a);n.target.copy(c),n.update()}function Fl(n,t=.01){Fo(n,-t)}function Pl(n,t=.01){Fo(n,t)}function Po(n){const t=new h.Raycaster,e=5,i=(o,s,r)=>n.on(o,s,r),a=(o,...s)=>n.fire(o,...s);i(Oe,async(o,s)=>{const{width:r,height:c,left:A,top:l}=a($t),u=new h.Vector2;u.x=(o-A)/r*2-1,u.y=(l-s)/c*2+1;const f=(u.x+1)/2*r,d=(1-u.y)/2*c,g=a(lt);t.setFromCamera(u,g);const y=[],p=a(z),m=[],I=[];p.traverse(function(b){b instanceof Lt?I.push(b):b.isMesh&&!b.ignoreIntersect&&!b.isMark&&m.push(b)});const S=t.intersectObjects(m,!0);for(let b=0;b<S.length;b++)y.push({point:S[b].point,d:t.ray.distanceToPoint(S[b].point),p:1});const Q=a(fs),k=g.projectionMatrix.clone().multiply(g.matrixWorldInverse);for(let b=0;b<I.length;b++){const C=I[b].fire(Mn);if(C)if(C.length!==void 0){const v=C,x=v.length/3;for(let B=0;B<x;B++){const R=new h.Vector3(v[3*B+0],v[3*B+1],v[3*B+2]);Q&&R.applyMatrix4(Q);const L=new h.Vector4(R.x,R.y,R.z,1).applyMatrix4(k),_=(L.x/L.w+1)/2*r,D=(1-L.y/L.w)/2*c,T=Math.sqrt((_-f)**2+(D-d)**2);T<=e&&y.push({point:R,d:g.position.distanceTo(R),p:T})}}else for(let v of Object.keys(C)){const x=v.split(","),B=new h.Vector3(Number(x[0]),Number(x[1]),Number(x[2]));if(t.ray.distanceToPoint(B)<=1.4143){const R=C[v];for(let L=0,_=R.length/3;L<_;L++){const D=new h.Vector3(R[3*L+0],R[3*L+1],R[3*L+2]);Q&&D.applyMatrix4(Q);const T=new h.Vector4(D.x,D.y,D.z,1).applyMatrix4(k),N=(T.x/T.w+1)/2*r,H=(1-T.y/T.w)/2*c,P=Math.sqrt((N-f)**2+(H-d)**2);P<=e&&y.push({point:D,d:g.position.distanceTo(D),p:P})}}}}if(!y.length)return[];y.sort((b,C)=>b.d-C.d);const M=[];for(let b=0,C=y[0].d,v=Math.min(y.length,20);b<v;b++)y[b].d-C<.01&&M.push(y[b]);return M.sort((b,C)=>b.p-C.p),[M[0].point]}),i(bn,(o,s,r)=>{const{width:c,height:A,left:l,top:u}=a($t),f=new h.Vector2;f.x=(o-l)/c*2-1,f.y=(u-s)/A*2+1;const d=a(lt);return t.setFromCamera(f,d),t.ray.distanceToPoint(r)})}function Ul(n){const t=(l,u,f)=>n.on(l,u,f),e=(l,...u)=>n.fire(l,...u),i=e(tt);t(ue,()=>e(lt).fov),t(Bt,(l=!1)=>l?i.object.position.clone():i.object.position),t(Dt,(l=!1)=>l?i.target.clone():i.target),t(ne,(l=!1)=>l?e(lt).up.clone():e(lt).up);let a;const o=[];t(gn,(l,u=!1,f)=>{if(e($i,l),!u){i.target.copy(l);const I=new h.Vector3().subVectors(l,i.object.position);I.length()<1&&i.object.position.copy(l).sub(I.setLength(1)),I.length()>50&&i.object.position.copy(l).sub(I.setLength(50)),e(Ye),e(xn);return}for(;o.length;)o.pop().stop=!0;let d={alpha:0,time:Date.now(),stop:!1};o.push(d),a=a||{enablePan:i.enablePan,enableRotate:i.enableRotate},i.enablePan=!1,i.enableRotate=!1;const g=e(Dt,!0),y=e(Bt,!0),p=g.clone().sub(y).normalize(),m=l.clone().sub(p.multiplyScalar(l.clone().sub(y).dot(p)));e(Zt,()=>{d.alpha=(Date.now()-d.time)/600,e(tt).target.copy(g.clone().lerp(l,d.alpha)),!f&&e(tt).object.position.copy(y.clone().lerp(m,d.alpha)),e(Ye),d.alpha>=.9&&(i.enablePan=a.enablePan,i.enableRotate=a.enableRotate),d.alpha>=1&&(d.stop=!0,e(xn))},()=>!d.stop)}),t(yi,()=>{let l=e(Bt).toArray(),u=e(ne).toArray(),f=e(Dt).toArray();return{position:l,lookUp:u,lookAt:f}}),t(Ii,()=>e(tt).update()),t(wi,()=>e(tt).updateRotateAxis());const s=.01;let r=new h.Vector3,c=new h.Vector3,A=0;t(yn,()=>{const l=e(tt).object,u=l.fov,f=l.position.clone(),d=l.getWorldDirection(new h.Vector3);return Math.abs(A-u)<s&&Math.abs(f.x-r.x)<s&&Math.abs(f.y-r.y)<s&&Math.abs(f.z-r.z)<s&&Math.abs(d.x-c.x)<s&&Math.abs(d.y-c.y)<s&&Math.abs(d.z-c.z)<s?!1:(A=u,r=f,c=d,!0)})}function Nl(n){const t=(s,r,c)=>n.on(s,r,c),e=(s,...r)=>n.fire(s,...r);let i=o();const a=[];t(Qn,()=>{const{height:s}=e($t),r=e(Bt).distanceTo(i.position)*3.2/s;i.scale.set(r,r,r)}),t(ze,s=>{e(Qn),i.visible=s>.1,i.element.style.opacity=s+"",e(rt)}),t($i,s=>{for(i.position.copy(s);a.length;)a.pop().stop=!0;e(ze,1),e(rt)}),t(xn,()=>{for(;a.length;)a.pop().stop=!0;let s={opacity:1,time:Date.now(),stop:!1};a.push(s),e(Zt,()=>{s=a[0],!s&&e(ze,1),s&&(s.opacity=1-Math.min((Date.now()-s.time)/1500,1),s.opacity<.2&&(s.opacity=0,s.stop=!0),e(ze,s.opacity))},()=>!s?.stop)});function o(){const s=document.createElement("div");s.innerHTML='<svg height="16" width="16" style="fill:white;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M108.8 469.333333C128 279.466667 279.466667 128 469.333333 108.8V64c0-23.466667 19.2-42.666667 42.666667-42.666667s42.666667 19.2 42.666667 42.666667v44.8c189.866667 19.2 341.333333 170.666667 360.533333 360.533333H960c23.466667 0 42.666667 19.2 42.666667 42.666667s-19.2 42.666667-42.666667 42.666667h-44.8c-19.2 189.866667-170.666667 341.333333-360.533333 360.533333V960c0 23.466667-19.2 42.666667-42.666667 42.666667s-42.666667-19.2-42.666667-42.666667v-44.8C279.466667 896 128 744.533333 108.8 554.666667H64c-23.466667 0-42.666667-19.2-42.666667-42.666667s19.2-42.666667 42.666667-42.666667h44.8zM469.333333 194.133333C326.4 213.333333 215.466667 326.4 196.266667 469.333333H234.666667c23.466667 0 42.666667 19.2 42.666666 42.666667s-19.2 42.666667-42.666666 42.666667H196.266667c19.2 142.933333 132.266667 256 275.2 273.066666V789.333333c0-23.466667 19.2-42.666667 42.666666-42.666666s42.666667 19.2 42.666667 42.666666v38.4C697.6 810.666667 810.666667 697.6 829.866667 554.666667H789.333333c-23.466667 0-42.666667-19.2-42.666666-42.666667s19.2-42.666667 42.666666-42.666667h40.533334C810.666667 326.4 697.6 213.333333 554.666667 194.133333V234.666667c0 23.466667-19.2 42.666667-42.666667 42.666666s-42.666667-19.2-42.666667-42.666666V194.133333z"></path></svg>',s.classList.add("css3d-focus-marker"),s.style.position="absolute";const r=new pt(s);return r.element.style.pointerEvents="none",r.element.style.opacity="1",r.visible=!1,e(z).add(r),r.onBeforeRender=()=>e(Qn),r}}function Uo(n){const t=(s,r,c)=>n.on(s,r,c),e=(s,...r)=>n.fire(s,...r),i=new Map,a=document.createElement("div");a.classList.add("mark-warp"),document.body.appendChild(a);const o=new Ql;o.setSize(innerWidth,innerHeight),o.domElement.style.position="absolute",o.domElement.style.top="0px",o.domElement.style.pointerEvents="none",a.appendChild(o.domElement),t(ua,()=>a),t(kn,()=>o),t(Tn,()=>document.body.removeChild(a)),t(Jt,()=>o.render(e(z),e(lt)),!0),t(Yt,s=>{const r=s?.getMarkData?.()?.name||s?.name;r&&i.set(r,new WeakRef(s))}),t(oe,s=>{const r=s?.getMarkData?.()?.name||s?.name;i.delete(r)}),t(ye,s=>i.get(s)?.deref()),t(da,(s,r)=>{const c=e(ye,s);!c||!r||c.drawUpdate?.(r)}),t(ga,s=>{const r=e(ye,s);return r?r.getMarkData?.():{}}),t(Ie,s=>{s!==void 0&&(e(F).markVisible=s),e(z).traverse(r=>r.isMark&&(r.visible=e(F).markVisible)),e(rt)}),t(Ln,async()=>{const s=[];e(z).traverse(c=>{if(c.isMark){const A=c.getMarkData?.();A&&s.push(A)}});const r=e(Ct).meta||{};return s.length?r.marks=s:delete r.marks,r.cameraInfo=e(yi),await e(te,r)}),t(je,async()=>{const s=[];e(z).traverse(c=>{if(c.isMark){const A=c.getMarkData?.();A&&s.push(A)}});const r=e(Ct).meta||{};return s.length?r.marks=s:delete r.marks,await e(te,r)}),t(Zi,async()=>{const s=e(Ct).meta||{};delete s.marks;const r=await e(te,s),c=[];return i.forEach(A=>c.push(A)),c.forEach(A=>A.deref()?.dispose?.()),e(rt),r}),t(ts,async()=>{e(z).traverse(r=>{r.isMark&&r.getMarkData?.()});const s=e(Ct).meta||{};return s.watermark=e(Ji)||"",await e(te,s)}),t(Rn,s=>{s.meterScale&&(e(F).meterScale=s.meterScale,e(st,{scale:`1 : ${e(F).meterScale} m`})),e(tt).updateByOptions({...s,...s.cameraInfo||{}}),(s.marks||[]).forEach(c=>{if(c.type==="MarkSinglePoint"){const A=new To(n,c);A.visible=!1,e(z).add(A)}else if(c.type==="MarkDistanceLine"){const A=new Js(n);A.draw(c),A.visible=!1,e(z).add(A)}else if(c.type==="MarkMultiLines"){const A=new Ks(n);A.draw(c,!0),A.visible=!1,e(z).add(A)}else if(c.type==="MarkMultiPlans"){const A=new Xs(n);A.draw(c,!0),A.visible=!1,e(z).add(A)}else if(c.type==="MarkCirclePlan"){const A=new Lo(n);A.draw(c),A.visible=!1,e(z).add(A)}}),e(Nn,s.flyPositions||[]),e(Vn,s.flyTargets||[])}),t(qt,()=>{const s=e(F);s.markMode=!1,e(Bn),e(rt)}),t(Xi,(s,r=!0)=>{const c=s?.meterScale;if(c){if(typeof c!="number"||c<=0){console.warn("meterScale is not a number or <= 0",s);return}r&&(e(F).meterScale=s.meterScale),e(st,{scale:`1 : ${c} m`});for(const A of i.values()){const l=A.deref();l&&(l instanceof Js||l instanceof Ks||l instanceof Xs)&&l.updateByMeterScale(c)}}}),t(An,s=>{const r=new h.Vector3().fromArray(s.slice(0,3)),c=new h.Vector3().fromArray(s.slice(-6,-3)),A=new h.Vector3().fromArray(s.slice(-3)),l=r.distanceTo(A)<1e-4,u=c.distanceTo(A)<1e-4,f=new h.Vector3,d=l||u?s.length/3-1:s.length/3;for(let g=0;g<d;g++)f.add(new h.Vector3(s[g*3],s[g*3+1],s[g*3+2]));return f.divideScalar(d),f}),t(un,s=>{const r=[];for(let u=0,f=s.length/3;u<f;u++)r.push(new h.Vector3(s[u*3],s[u*3+1],s[u*3+2]));const c=r[0].distanceTo(r[r.length-1])<1e-4,A=r[r.length-2].distanceTo(r[r.length-1])<1e-4;if((c||A)&&r.pop(),r.length<3)return 0;let l=0;for(let u=0,f=r.length-2;u<f;u++)l+=e(dn,r[0],r[u+1],r[u+2],e(F).meterScale);return l}),t(mi,(s,r)=>{let c=0;for(let A=0,l=s.length-2;A<l;A++)c+=e(dn,s[0],s[A+1],s[A+2],r);return c}),t(dn,(s,r,c,A)=>{const l=s.distanceTo(r)*A,u=r.distanceTo(c)*A,f=c.distanceTo(s)*A,d=(l+u+f)/2;return Math.sqrt(d*(d-l)*(d-u)*(d-f))})}function Vl(n){const t=(f,...d)=>n.fire(f,...d),e=(f,d,g)=>n.on(f,d,g),i=[],a=[];let o=!1,s=!1;e(Je,()=>o=!1),e(ss,()=>o=!0),e(ns,()=>i),e(ha,()=>{const f=[];for(let d=0,g=i.length;d<g;d++)f.push(...i[d].toArray());return f}),e(fa,()=>{const f=[];for(let d=0,g=a.length;d<g;d++)f.push(...a[d].toArray());return f}),e(Nn,f=>{for(let d=0,g=f.length/3|0;d<g;d++)i[d]=new h.Vector3(f[d*3+0],f[d*3+1],f[d*3+2])}),e(Vn,f=>{for(let d=0,g=f.length/3|0;d<g;d++)a[d]=new h.Vector3(f[d*3+0],f[d*3+1],f[d*3+2])}),e(Fn,()=>{const f=t(tt);i.push(f.object.position.clone()),a.push(f.target.clone())}),e(Un,()=>{i.length=0,a.length=0}),e(Pn,async(f=!0)=>{const d=t(Ct).meta||t(gs);if(i.length){const g=[],y=[];for(let p=0,m=i.length;p<m;p++)g.push(...i[p].toArray()),y.push(...a[p].toArray());d.flyPositions=g,d.flyTargets=y}else delete d.flyPositions,delete d.flyTargets;f&&await t(te,d)}),e(is,()=>{s||(s=!0)&&t(Ee,!0)});let r=0;const c=120*1e3;let A=0,l,u;e(Ee,f=>{if(r=0,A=Date.now(),l=null,u=null,!i.length||!f&&!t(tt).autoRotate)return;const d=t(tt),g=[d.object.position.clone()],y=[d.target.clone()],p=t(ns)||[];for(let m=0,I=Math.min(p.length,100);m<I;m++)p[m]&&g.push(p[m]),a[m]&&y.push(a[m]);l=new h.CatmullRomCurve3(g),l.closed=!0,u=new h.CatmullRomCurve3(y),u.closed=!0,t(ss),t(At,!1)}),e(Ce,()=>{if(Date.now()-A>c&&t(Je),!o||!l||!u)return;const f=t(tt);r=(Date.now()-A)/c;const d=l.getPoint(r),g=u.getPoint(r);f.object.position.set(d.x,d.y,d.z),f.target.set(g.x,g.y,g.z)},!0)}class Hl{constructor(t={}){this.disposed=!1,this.updateTime=0,this.needUpdate=!0,console.info("Reall3dViewer",bs),this.init(mo(t)),!t.disableDropLocalFile&&this.enableDropLocalFile()}init(t){const e=this;t.position=t.position?[...t.position]:[0,-5,15],t.lookAt=t.lookAt?[...t.lookAt]:[0,0,0],t.lookUp=t.lookUp?[...t.lookUp]:[0,-1,0];const i=Zc(t),a=t.scene=t.scene||new h.Scene;a.background=new h.Color(t.background),tl(t);const o=t.controls=new Il(t),s=new ni;t.viewerEvents=s,e.events=s;const r=(f,d,g)=>s.on(f,d,g),c=(f,...d)=>s.fire(f,...d);r(fs,()=>e.metaMatrix),r(F,()=>t),r(ee,()=>i.domElement),r(fe,()=>i),r(z,()=>a),r(tt,()=>o),r(lt,()=>o.object),r(ft,()=>t.bigSceneMode),r(Aa,f=>t.pointcloudMode=f);const A=[];r(rt,()=>{for(e.needUpdate=!0;A.length;)A.pop().stop=!0;let f={count:0,stop:!1};A.push(f),c(pi,()=>{!e.disposed&&(e.needUpdate=!0),f.count++>=600&&(f.stop=!0)},()=>!e.disposed&&(c(Dn)||!f.stop),10)}),Ls(s),Kc(s),Ul(s),Uo(s),Ro(s),Po(s),Nl(s),Vl(s),e.splatMesh=new Lt(el(t)),r(Ct,()=>e.splatMesh),a.add(e.splatMesh),ol(s),r(ti,f=>{t.qualityLevel=f,e.splatMesh.options({qualityLevel:f,renderer:void 0,scene:void 0})}),r(Zn,f=>{t.sortType=f,e.splatMesh.options({sortType:f,renderer:void 0,scene:void 0})}),a.add(new h.AmbientLight("#ffffff",2)),i.setAnimationLoop(e.update.bind(e)),r(Ki,()=>{o.update(),!e.needUpdate&&c(yn)&&c(rt)}),r(ae,()=>c(He),!0),r(ae,()=>c(Ki),!0),r(Jt,()=>{try{!(e.needUpdate=!1)&&i.render(a,c(lt))}catch(f){console.warn(f.message)}},!0),r(Ce,()=>{},!0),r(Ve,()=>e.dispose()),r(as,()=>console.info(JSON.stringify(c(Ct).meta||{},null,2)));let l="";r(qe,(f="")=>{l=f,e.splatMesh.fire(_n,l,!0)}),r(Ji,()=>l),c(st,{scale:`1 : ${c(F).meterScale} m`}),e.initGsApi();let u;r(Se,(f=!0,d=1,g=2)=>{u&&clearTimeout(u),u=null;const y=16;if(g>y&&f)return c(Se,f,y,1);if(g<1&&!f)return c(Se,!f,1,y);e.splatMesh.fire(hs,d,g),u=setTimeout(()=>c(Se,f,g,f?g*2:g/2),6*1e3)})}enableDropLocalFile(){const t=this;document.addEventListener("dragover",function(e){e.preventDefault(),e.stopPropagation()}),document.addEventListener("drop",async function(e){e.preventDefault(),e.stopPropagation();let i=e.dataTransfer.files[0];if(!i)return;let a,o=!1;if(i.name.endsWith(".spx"))a="spx";else if(i.name.endsWith(".splat"))a="splat";else if(i.name.endsWith(".ply"))a="ply";else if(i.name.endsWith(".spz"))a="spz";else if(i.name.endsWith(".sog"))a="sog";else if(i.name.endsWith(".obj"))a="obj";else if(i.name.endsWith(".scene.json"))o=!0;else return console.error("unsupported format:",i.name);const s=URL.createObjectURL(i),r=t.events.fire(F);r.bigSceneMode=!1,r.pointcloudMode=!0,r.debugMode=!0,r.autoRotate=a!=="obj",r.maxRenderCountOfPc=1024*1e4,r.qualityLevel=9,r.disableTransitionEffectOnLoad=!1,t.reset(r),o?await t.addScene(s):await t.addModel({url:s,format:a}),URL.revokeObjectURL(s)})}update(){const t=this;if(t.disposed)return;const e=(i,...a)=>t.events.fire(i,...a);Date.now()-t.updateTime>30&&(e(ae),t.needUpdate&&e(Jt),e(Ce))}fire(t,e,i){const a=this;if(t===1&&a.splatMesh.fire(fn,e),t===2&&a.events.fire(Fn),t===3&&a.events.fire(Ee,!0),t===4&&a.events.fire(Un),t===5&&a.events.fire(Pn),t===6&&a.events.fire(je),t===7&&a.events.fire(Zi),t===8&&(async()=>{let o=await a.splatMesh.fire(On);e&&(o=a.splatMesh.fire(ls)+e),a.splatMesh.fire(_e,o)})(),t===9)if(!e)a.events.fire(ti,be);else{const o=a.events.fire(F).qualityLevel;a.events.fire(ti,Math.max(Ir,Math.min(o+e,wr)))}if(t===10)if(!e)a.events.fire(Zn,en.Default);else{const o=[1,2010,2011,2012,2112],s=a.events.fire(F).sortType;let r=o.indexOf(s)+e;r=Math.max(0,Math.min(r,o.length-1)),a.events.fire(Zn,o[r])}}options(t){const e=this;if(e.disposed)return{};const i=(r,...c)=>e.events.fire(r,...c);let a;if(i(z).traverse(r=>!a&&r instanceof Lt&&(a=r.options())),t){const r=i(F);t.autoRotate!==void 0&&(r.autoRotate=t.autoRotate,i(tt).autoRotate=t.autoRotate),t.pointcloudMode!==void 0&&i(We,t.pointcloudMode),t.lightFactor!==void 0&&i(de,t.lightFactor),t.maxRenderCountOfMobile&&(r.maxRenderCountOfMobile=t.maxRenderCountOfMobile),t.maxRenderCountOfPc&&(r.maxRenderCountOfPc=t.maxRenderCountOfPc),t.debugMode!==void 0&&(r.debugMode=t.debugMode),t.qualityLevel!==void 0&&(r.qualityLevel=t.qualityLevel)&&this.splatMesh.options({qualityLevel:t.qualityLevel}),t.sortType!==void 0&&(r.sortType=t.sortType)&&this.splatMesh.options({sortType:t.sortType}),t.markType!==void 0&&(r.markType=t.markType),t.markVisible!==void 0&&i(Ie,t.markVisible),t.meterScale!==void 0&&(r.meterScale=t.meterScale),t.markMode!==void 0&&(r.markMode=t.markMode,!t.markMode&&i(Bn),i(tt).autoRotate=i(F).autoRotate=!1)}return i(tt).updateByOptions(t),i(st,{scale:`1 : ${i(F).meterScale} m`}),Object.assign({...i(F)},a)}reset(t={}){const e=this;e.dispose(),e.disposed=!1,e.init(mo(t))}switchDeiplayMode(){const t=this;t.disposed||t.events.fire($e)}async addScene(t){const e=this;if(e.disposed)return;const i=(s,...r)=>e.events.fire(s,...r);let a={};try{const s=await fetch(t,{mode:"cors",credentials:"omit",cache:"reload"});if(s.status===200)a=await s.json();else return console.error("scene file fetch failed, status:",s.status)}catch(s){return console.error("scene file fetch failed",s.message)}if(!a.url)return console.error("missing model file url");if(!a.url.endsWith(".spx"))return console.error("The format is unsupported in the large scene mode",a.url);const o={...a,...a.cameraInfo||{}};a.autoCut=Math.min(Math.max(a.autoCut||0,0),50),o.bigSceneMode=a.autoCut>1,e.reset({...o}),!o.bigSceneMode&&delete a.autoCut,e.metaMatrix=a.transform?new h.Matrix4().fromArray(a.transform):null,e.splatMesh.meta=a,yt&&(a.cameraInfo?.position||a.cameraInfo?.lookAt)&&e.events.fire(tt)._dollyOut(.75),o.bigSceneMode?(i(Nn,a.flyPositions||[]),i(Vn,a.flyTargets||[])):i(Rn,a),await e.splatMesh.addModel({url:a.url},a),await i(qe,a.watermark),i(tt).updateRotateAxis()}async addModel(t,e=!1){const i=this;if(i.disposed)return;const a=(l,u,f)=>this.events.on(l,u,f),o=(l,...u)=>i.events.fire(l,...u);let s="",r={url:""};if(Object.prototype.toString.call(t)==="[object String]"?t.endsWith(".meta.json")?s=t:r.url=t:r=t,!r.url&&!s)return console.error("model url is empty");const c=o(F);c.bigSceneMode=!1;let A={};if(!r.url.startsWith("blob:")&&e)try{s=s||r.url.substring(0,r.url.lastIndexOf("."))+".meta.json";const l=await fetch(s,{mode:"cors",credentials:"omit",cache:"reload"});l.status===200?A=await l.json():console.warn("meta file fetch failed, status:",l.status)}catch(l){console.warn("meta file fetch failed",l.message,r.url)}if(A.showWatermark=A.showWatermark!==!1,A.url=A.url||r.url,delete A.autoCut,!r.format)if(r.url=r.url||A.url,r.url.endsWith(".spx"))r.format="spx";else if(r.url.endsWith(".splat"))r.format="splat";else if(r.url.endsWith(".ply"))r.format="ply";else if(r.url.endsWith(".spz"))r.format="spz";else if(r.url.endsWith(".sog")||r.url.endsWith("/meta.json")||r.url=="meta.json")r.format="sog";else if(r.url.endsWith(".obj"))r.format="obj";else{console.error("unknow format!",r.url);return}A.qualityLevel=A.qualityLevel||c.qualityLevel||be,A.sortType=A.sortType||c.sortType||en.Default,a(gs,()=>A),i.metaMatrix=A.transform?new h.Matrix4().fromArray(A.transform):null,o(Rn,A),this.options({qualityLevel:A.qualityLevel,sortType:A.sortType}),r.format==="obj"?(this.options({autoRotate:!1}),await o(ds,r.url)):(this.splatMesh.addModel(r,A),await o(qe,A.watermark)),yt&&o(tt)._dollyOut?.(.75)}initGsApi(){const t=(l,...u)=>this.events.fire(l,...u),e=()=>{setTimeout(()=>window.focus()),t(Je),t(tt).autoRotate=t(F).autoRotate=!t(F).autoRotate},i=(l=!0)=>{setTimeout(()=>window.focus()),l=!!l;const u=t(F);u.pointcloudMode!==l&&(u.bigSceneMode?t(We,l):t($e))},a=(l=!0)=>{setTimeout(()=>window.focus()),t(Ie,!!l)},o=l=>{setTimeout(()=>window.focus());const u=t(F);if(u.markMode)return!1;if(l===1)u.markType="point";else if(l===2)u.markType="lines";else if(l===3)u.markType="plans";else if(l===4)u.markType="distance";else return!1;return u.markMode=!0,t(At),!0},s=async l=>(setTimeout(()=>window.focus()),l?(t(ye,l)?.dispose(),t(rt),await t(je)):!1),r=async(l,u=!0)=>(t(Xi,l,u),t(ye,l?.name)?.drawUpdate?.(l,u),t(rt),u?(setTimeout(()=>window.focus()),await t(je)):!0),c=(l=!0)=>{setTimeout(()=>window.focus()),t(fn,!!l)},A=(l,u=!0)=>{t(qe,l),u&&t(ts,l)};window.$api={switchAutoRotate:e,changePointCloudMode:i,showMark:a,startMark:o,deleteMark:s,updateMark:r,showWaterMark:c,setWaterMark:A}}dispose(){const t=this;if(t.disposed)return;t.disposed=!0;const e=(o,...s)=>t.events.fire(o,...s),i=e(fe),a=i.domElement;e(Cn),e(Ui),e(Tn),e(hn),e(tt).dispose(),e(_t,e(z)),i.clear(),i.dispose(),a.parentElement.removeChild(a),t.splatMesh=null,t.events.clear(),t.events=null}}function Ol(n){const t=(s,r,c)=>n.on(s,r,c),e=(s,...r)=>n.fire(s,...r),i=yt?2:20,a=new Map,o=new Map;t(Fe,()=>e(It)&&a.set(Date.now(),1)),t(Pe,()=>e(It)&&e(se,a)),t(Ue,()=>e(It)&&o.set(Date.now(),1)),t(Ne,()=>e(It)&&e(se,o)),t(se,s=>{let r=[],c=Date.now(),A=0;for(const l of s.keys())c-l<=1e3?A++:r.push(l);return r.forEach(l=>s.delete(l)),Math.min(A,30)}),t(at,()=>{const s=e(z),r=e(lt),c=[];s?.traverse(function(A){A.isWarpSplatMesh&&A.splatMesh?.visible&&c.push(A)}),c.sort((A,l)=>r.position.distanceTo(A.position)-r.position.distanceTo(l.position));for(let A=0;A<c.length;A++)c[A].splatMesh.boundBox.visible=A<1;return window.splat=c[0]?.splatMesh,c[0]?.splatMesh}),t(Es,()=>{const s=e(z),r=e(lt),c=[];s?.traverse(function(A){A.isWarpSplatMesh&&c.push(A)}),c.sort((A,l)=>r.position.distanceTo(A.position)-r.position.distanceTo(l.position));for(let A=0;A<c.length;A++)c[A].active=A<i,c[A].splatMesh&&(c[A].splatMesh.renderOrder=1e3-A)}),t(vs,()=>{const s=e(z),r=[];s?.traverse(c=>r.push(c)),r.forEach(c=>{c.dispose?c.dispose():(c.geometry?.dispose?.(),c.material&&c.material instanceof Array?c.material.forEach(A=>A?.dispose?.()):c.material?.dispose?.())}),s?.clear()}),t($n,(s=.1)=>{const r=e(at);r&&r.visible&&r.rotateOnAxis(new h.Vector3(1,0,0),h.MathUtils.degToRad(s))}),t(jn,(s=.1)=>{const r=e(at);r&&r.visible&&r.rotateOnAxis(new h.Vector3(0,1,0),h.MathUtils.degToRad(s))}),t(Jn,(s=.1)=>{const r=e(at);r&&r.visible&&r.rotateOnAxis(new h.Vector3(0,0,1),h.MathUtils.degToRad(s))}),t(ma,(s=.01)=>{const r=e(at);r&&r.visible&&(r.position.x+=s)}),t(ws,(s=.01)=>{const r=e(at);r&&r.visible&&(r.position.y+=s)}),t(Ca,(s=.01)=>{const r=e(at);r&&r.visible&&(r.position.z+=s)}),t(ya,s=>{const r=e(at);r&&r.visible&&s&&r.position.copy(s),console.info(r,s)}),t(Ia,(s=.01)=>{const r=e(at);r&&r.visible&&r.scale.set(r.scale.x+s,r.scale.y+s,r.scale.z+s)}),t(wa,()=>{const s=e(at);s&&(s.visible=!s.visible)}),t(Ea,async s=>{if(!s&&(s=e(at)),!s)return;const r=s.meta||{};return r.transform=s.matrix.toArray(),await e(te,JSON.stringify(r),s.meta.url)}),t(ms,()=>{const s=e(F).root,r=new h.WebGLRenderer({antialias:!1,logarithmicDepthBuffer:!0,stencil:!0,alpha:!0,precision:"highp"});return r.setSize(s.clientWidth,s.clientHeight),r.setPixelRatio(Math.min(devicePixelRatio,2)),t(fe,()=>r),t(ee,()=>r.domElement),r}),t(Cs,()=>{const s=e(F),r=new h.Scene,c=s.background||"#dbf0ff";return r.background=new h.Color(c),r.fog=new h.FogExp2(c,0),t(z,()=>r),r}),t(ys,()=>{const r=e(lt),c=e(z),A=e(F),l=new wl(e(lt),A.root);l.screenSpacePanning=!1,l.minDistance=.1,l.maxDistance=6e4,l.maxPolarAngle=1.2,l.enableDamping=!0,l.dampingFactor=.07,l.zoomToCursor=!0;const u=new h.Vector3().fromArray(A.minPan||[-2e4,.1,-6e4]),f=new h.Vector3().fromArray(A.maxPan||[5e4,1e4,0]),d=new h.Vector3;return l.addEventListener("change",()=>{const g=Math.max(l.getPolarAngle(),.1),y=Math.max(l.getDistance(),.1);l.zoomSpeed=Math.max(Math.log(y),0)+.5,r.far=h.MathUtils.clamp(y/g*8,100,1e5),r.near=r.far/1e3,r.updateProjectionMatrix(),c.fog instanceof h.FogExp2&&(c.fog.density=g/(y+5)*1*.25),l.maxPolarAngle=Math.min(Math.pow(1e4/y,4),1.2),d.copy(l.target),l.target.clamp(u,f),d.sub(l.target),r.position.sub(d)}),t(tt,()=>l),t(ue,()=>r.fov),t(Bt,(g=!1)=>g?r.position.clone():r.position),t(Dt,(g=!1)=>g?l.target.clone():l.target),t(ne,(g=!1)=>g?r.up.clone():r.up),l}),t(Is,()=>{const s=new h.DirectionalLight(16777215,1);return s.position.set(0,2e3,1e3),s}),window.addEventListener("beforeunload",()=>e(Ve))}function zl(n){let{root:t="#map",debugMode:e}=n;t?t=typeof t=="string"?document.querySelector(t)||document.querySelector("#map"):t:t=document.querySelector("#map"),t||(t=document.createElement("div"),t.id="map",(document.querySelector("#gsviewer")||document.querySelector("body")).appendChild(t));const i={...n};return i.root=t,i}function Gl(){const n=ea.TileSource.create({dataType:"image",attribution:"ArcGIS",url:"https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}"}),t=new ea.TileMap({imgSource:n,lon0:90,minLevel:2,maxLevel:16});return t.scale.set(10,10,10),t.rotateX(-Math.PI/2),t.autoUpdate=!1,t}class Yl{constructor(){this.down=0,this.move=!1,this.downTime=0,this.isDbClick=!1,this.x=0,this.y=0,this.lastClickX=0,this.lastClickY=0,this.lastClickPointTime=0,this.lastMovePoint=null,this.lastMovePointTime=0}}function ql(n){const t=(M,b,C)=>n.on(M,b,C),e=(M,...b)=>n.fire(M,...b),i=e(ee);let a=new Set,o,s=new Yl;t(He,()=>{if(!a.size)return;if(!e(F).enableKeyboard)return a.clear();if(a.has("KeyH")){const b=e(at);b&&(b.visible=!b.visible),a.clear()}else if(a.has("Equal")){const b=e(at);if(!b||!b.visible)return a.clear();if(a.has("KeyX")){const C=h.MathUtils.degToRad(.1);b.rotateOnAxis(new h.Vector3(1,0,0),C)}else b.scale.set(b.scale.x+.01,b.scale.y+.01,b.scale.z+.01)}else if(a.has("Minus")){const b=e(at);if(!b||!b.visible)return a.clear();if(a.has("KeyX")){const C=h.MathUtils.degToRad(-.1);b.rotateOnAxis(new h.Vector3(1,0,0),C)}else b.scale.set(b.scale.x-.01,b.scale.y-.01,b.scale.z-.01)}else if(a.has("ArrowUp")){const b=e(at);b&&b.visible&&(b.position.z+=.1)}else if(a.has("ArrowDown")){const b=e(at);b&&b.visible&&(b.position.z-=.1)}else if(a.has("ArrowRight")){const b=e(at);b&&b.visible&&(b.position.x+=.1)}else if(a.has("ArrowLeft")){const b=e(at);b&&b.visible&&(b.position.x-=.1)}else if(a.has("KeyU")){const b=e(at);if(b){const C=b.meta||{};C.transform=b.matrix.toArray()}}else a.has("KeyQ")?e($n,.1):a.has("KeyW")?e(jn,.1):a.has("KeyE")?e(Jn,.1):a.has("KeyA")?e($n,-.1):a.has("KeyS")?e(jn,-.1):a.has("KeyD")?e(Jn,-.1):a.has("KeyY")?e(ws,a.has("ShiftLeft")||a.has("ShiftRight")?-.1:.1):a.has("KeyC")&&console.info("position=",e(Bt).toArray(),"lookat=",e(Dt).toArray())});const r=M=>{console.info(M.code),M.target.type!=="text"&&(o||M.code==="F5"||(M.preventDefault(),a.add(M.code)))},c=M=>{M.target.type!=="text"&&(o||a.clear())},A=()=>{a.clear()},l=M=>{parent&&setTimeout(()=>window.focus()),M.preventDefault()},u=async M=>{M.preventDefault()};let f,d,g,y;t(we,()=>{f?.dispose(),d?.dispose(),g?.dispose(),y?.dispose(),f=null,d=null,g=null,y=null,s.lastMovePoint=null,e(qt)});const p=async M=>{parent&&setTimeout(()=>window.focus()),M.preventDefault(),!o&&(s.down=M.button===2?2:1,s.move=!1,s.isDbClick=Date.now()-s.downTime<300,s.downTime=Date.now())},m=async M=>{M.preventDefault(),!o&&s.down&&(s.move=!0)},I=async M=>{M.preventDefault(),!o&&(s.down=0,s.move=!1)};function S(M){M.preventDefault(),!o&&(s.down=M.touches.length,s.down===1&&(s.move=!1,s.x=M.touches[0].clientX,s.y=M.touches[0].clientY))}function Q(M){M.touches.length===1&&(s.move=!0)}function k(M){s.down===1&&!s.move&&e(me,s.x,s.y)}window.addEventListener("keydown",r),window.addEventListener("keyup",c),window.addEventListener("blur",A),window.addEventListener("wheel",l,{passive:!1}),i.addEventListener("contextmenu",u),i.addEventListener("mousedown",p),i.addEventListener("mousemove",m),i.addEventListener("mouseup",I),i.addEventListener("touchstart",S,{passive:!1}),i.addEventListener("touchmove",Q,{passive:!1}),i.addEventListener("touchend",k,{passive:!1}),t(hn,()=>{o=!0,window.removeEventListener("keydown",r),window.removeEventListener("keyup",c),window.removeEventListener("blur",A),window.removeEventListener("wheel",l),i.removeEventListener("contextmenu",u),i.removeEventListener("mousedown",p),i.removeEventListener("mousemove",m),i.removeEventListener("mouseup",I),i.removeEventListener("touchstart",S),i.removeEventListener("touchmove",Q),i.removeEventListener("touchend",k)}),t(me,async(M,b)=>await e(Oe,M,b))}var ke=Object.freeze({Linear:Object.freeze({None:function(n){return n},In:function(n){return n},Out:function(n){return n},InOut:function(n){return n}}),Quadratic:Object.freeze({In:function(n){return n*n},Out:function(n){return n*(2-n)},InOut:function(n){return(n*=2)<1?.5*n*n:-.5*(--n*(n-2)-1)}}),Cubic:Object.freeze({In:function(n){return n*n*n},Out:function(n){return--n*n*n+1},InOut:function(n){return(n*=2)<1?.5*n*n*n:.5*((n-=2)*n*n+2)}}),Quartic:Object.freeze({In:function(n){return n*n*n*n},Out:function(n){return 1- --n*n*n*n},InOut:function(n){return(n*=2)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2)}}),Quintic:Object.freeze({In:function(n){return n*n*n*n*n},Out:function(n){return--n*n*n*n*n+1},InOut:function(n){return(n*=2)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2)}}),Sinusoidal:Object.freeze({In:function(n){return 1-Math.sin((1-n)*Math.PI/2)},Out:function(n){return Math.sin(n*Math.PI/2)},InOut:function(n){return .5*(1-Math.sin(Math.PI*(.5-n)))}}),Exponential:Object.freeze({In:function(n){return n===0?0:Math.pow(1024,n-1)},Out:function(n){return n===1?1:1-Math.pow(2,-10*n)},InOut:function(n){return n===0?0:n===1?1:(n*=2)<1?.5*Math.pow(1024,n-1):.5*(-Math.pow(2,-10*(n-1))+2)}}),Circular:Object.freeze({In:function(n){return 1-Math.sqrt(1-n*n)},Out:function(n){return Math.sqrt(1- --n*n)},InOut:function(n){return(n*=2)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1)}}),Elastic:Object.freeze({In:function(n){return n===0?0:n===1?1:-Math.pow(2,10*(n-1))*Math.sin((n-1.1)*5*Math.PI)},Out:function(n){return n===0?0:n===1?1:Math.pow(2,-10*n)*Math.sin((n-.1)*5*Math.PI)+1},InOut:function(n){return n===0?0:n===1?1:(n*=2,n<1?-.5*Math.pow(2,10*(n-1))*Math.sin((n-1.1)*5*Math.PI):.5*Math.pow(2,-10*(n-1))*Math.sin((n-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(n){var t=1.70158;return n===1?1:n*n*((t+1)*n-t)},Out:function(n){var t=1.70158;return n===0?0:--n*n*((t+1)*n+t)+1},InOut:function(n){var t=2.5949095;return(n*=2)<1?.5*(n*n*((t+1)*n-t)):.5*((n-=2)*n*((t+1)*n+t)+2)}}),Bounce:Object.freeze({In:function(n){return 1-ke.Bounce.Out(1-n)},Out:function(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},InOut:function(n){return n<.5?ke.Bounce.In(n*2)*.5:ke.Bounce.Out(n*2-1)*.5+.5}}),generatePow:function(n){return n===void 0&&(n=4),n=n<Number.EPSILON?Number.EPSILON:n,n=n>1e4?1e4:n,{In:function(t){return Math.pow(t,n)},Out:function(t){return 1-Math.pow(1-t,n)},InOut:function(t){return t<.5?Math.pow(t*2,n)/2:(1-Math.pow(2-t*2,n))/2+.5}}}}),ln=function(){return performance.now()},Wl=function(){function n(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this._tweens={},this._tweensAddedDuringUpdate={},this.add.apply(this,t)}return n.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map(function(e){return t._tweens[e]})},n.prototype.removeAll=function(){this._tweens={}},n.prototype.add=function(){for(var t,e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];for(var a=0,o=e;a<o.length;a++){var s=o[a];(t=s._group)===null||t===void 0||t.remove(s),s._group=this,this._tweens[s.getId()]=s,this._tweensAddedDuringUpdate[s.getId()]=s}},n.prototype.remove=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var i=0,a=t;i<a.length;i++){var o=a[i];o._group=void 0,delete this._tweens[o.getId()],delete this._tweensAddedDuringUpdate[o.getId()]}},n.prototype.allStopped=function(){return this.getAll().every(function(t){return!t.isPlaying()})},n.prototype.update=function(t,e){t===void 0&&(t=ln()),e===void 0&&(e=!0);var i=Object.keys(this._tweens);if(i.length!==0)for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var a=0;a<i.length;a++){var o=this._tweens[i[a]],s=!e;o&&o.update(t,s)===!1&&!e&&this.remove(o)}i=Object.keys(this._tweensAddedDuringUpdate)}},n}(),Zs={Linear:function(n,t){var e=n.length-1,i=e*t,a=Math.floor(i),o=Zs.Utils.Linear;return t<0?o(n[0],n[1],i):t>1?o(n[e],n[e-1],e-i):o(n[a],n[a+1>e?e:a+1],i-a)},Utils:{Linear:function(n,t,e){return(t-n)*e+n}}},No=function(){function n(){}return n.nextId=function(){return n._nextId++},n._nextId=0,n}(),ta=new Wl,$l=function(){function n(t,e){this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=ke.Linear.None,this._interpolationFunction=Zs.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=No.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1,this._object=t,typeof e=="object"?(this._group=e,e.add(this)):e===!0&&(this._group=ta,ta.add(this))}return n.prototype.getId=function(){return this._id},n.prototype.isPlaying=function(){return this._isPlaying},n.prototype.isPaused=function(){return this._isPaused},n.prototype.getDuration=function(){return this._duration},n.prototype.to=function(t,e){if(e===void 0&&(e=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=t,this._propertiesAreSetUp=!1,this._duration=e<0?0:e,this},n.prototype.duration=function(t){return t===void 0&&(t=1e3),this._duration=t<0?0:t,this},n.prototype.dynamic=function(t){return t===void 0&&(t=!1),this._isDynamic=t,this},n.prototype.start=function(t,e){if(t===void 0&&(t=ln()),e===void 0&&(e=!1),this._isPlaying)return this;if(this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=t,this._startTime+=this._delayTime,!this._propertiesAreSetUp||e){if(this._propertiesAreSetUp=!0,!this._isDynamic){var a={};for(var o in this._valuesEnd)a[o]=this._valuesEnd[o];this._valuesEnd=a}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,e)}return this},n.prototype.startFromCurrentValues=function(t){return this.start(t,!0)},n.prototype._setupProperties=function(t,e,i,a,o){for(var s in i){var r=t[s],c=Array.isArray(r),A=c?"array":typeof r,l=!c&&Array.isArray(i[s]);if(!(A==="undefined"||A==="function")){if(l){var u=i[s];if(u.length===0)continue;for(var f=[r],d=0,g=u.length;d<g;d+=1){var y=this._handleRelativeValue(r,u[d]);if(isNaN(y)){l=!1,console.warn("Found invalid interpolation list. Skipping.");break}f.push(y)}l&&(i[s]=f)}if((A==="object"||c)&&r&&!l){e[s]=c?[]:{};var p=r;for(var m in p)e[s][m]=p[m];a[s]=c?[]:{};var u=i[s];if(!this._isDynamic){var I={};for(var m in u)I[m]=u[m];i[s]=u=I}this._setupProperties(p,e[s],u,a[s],o)}else(typeof e[s]>"u"||o)&&(e[s]=r),c||(e[s]*=1),l?a[s]=i[s].slice().reverse():a[s]=e[s]||0}}},n.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},n.prototype.end=function(){return this._goToEnd=!0,this.update(this._startTime+this._duration),this},n.prototype.pause=function(t){return t===void 0&&(t=ln()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},n.prototype.resume=function(t){return t===void 0&&(t=ln()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this)},n.prototype.stopChainedTweens=function(){for(var t=0,e=this._chainedTweens.length;t<e;t++)this._chainedTweens[t].stop();return this},n.prototype.group=function(t){return t?(t.add(this),this):(console.warn("tween.group() without args has been removed, use group.add(tween) instead."),this)},n.prototype.remove=function(){var t;return(t=this._group)===null||t===void 0||t.remove(this),this},n.prototype.delay=function(t){return t===void 0&&(t=0),this._delayTime=t,this},n.prototype.repeat=function(t){return t===void 0&&(t=0),this._initialRepeat=t,this._repeat=t,this},n.prototype.repeatDelay=function(t){return this._repeatDelayTime=t,this},n.prototype.yoyo=function(t){return t===void 0&&(t=!1),this._yoyo=t,this},n.prototype.easing=function(t){return t===void 0&&(t=ke.Linear.None),this._easingFunction=t,this},n.prototype.interpolation=function(t){return t===void 0&&(t=Zs.Linear),this._interpolationFunction=t,this},n.prototype.chain=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return this._chainedTweens=t,this},n.prototype.onStart=function(t){return this._onStartCallback=t,this},n.prototype.onEveryStart=function(t){return this._onEveryStartCallback=t,this},n.prototype.onUpdate=function(t){return this._onUpdateCallback=t,this},n.prototype.onRepeat=function(t){return this._onRepeatCallback=t,this},n.prototype.onComplete=function(t){return this._onCompleteCallback=t,this},n.prototype.onStop=function(t){return this._onStopCallback=t,this},n.prototype.update=function(t,e){var i=this,a;if(t===void 0&&(t=ln()),e===void 0&&(e=n.autoStartOnUpdate),this._isPaused)return!0;var o;if(!this._goToEnd&&!this._isPlaying)if(e)this.start(t,!0);else return!1;if(this._goToEnd=!1,t<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var s=t-this._startTime,r=this._duration+((a=this._repeatDelayTime)!==null&&a!==void 0?a:this._delayTime),c=this._duration+this._repeat*r,A=function(){if(i._duration===0||s>c)return 1;var y=Math.trunc(s/r),p=s-y*r,m=Math.min(p/i._duration,1);return m===0&&s===i._duration?1:m},l=A(),u=this._easingFunction(l);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,u),this._onUpdateCallback&&this._onUpdateCallback(this._object,l),this._duration===0||s>=this._duration)if(this._repeat>0){var f=Math.min(Math.trunc((s-this._duration)/r)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=f);for(o in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[o]=="string"&&(this._valuesStartRepeat[o]=this._valuesStartRepeat[o]+parseFloat(this._valuesEnd[o])),this._yoyo&&this._swapEndStartRepeatValues(o),this._valuesStart[o]=this._valuesStartRepeat[o];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=r*f,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var d=0,g=this._chainedTweens.length;d<g;d++)this._chainedTweens[d].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},n.prototype._updateProperties=function(t,e,i,a){for(var o in i)if(e[o]!==void 0){var s=e[o]||0,r=i[o],c=Array.isArray(t[o]),A=Array.isArray(r),l=!c&&A;l?t[o]=this._interpolationFunction(r,a):typeof r=="object"&&r?this._updateProperties(t[o],s,r,a):(r=this._handleRelativeValue(s,r),typeof r=="number"&&(t[o]=s+(r-s)*a))}},n.prototype._handleRelativeValue=function(t,e){return typeof e!="string"?e:e.charAt(0)==="+"||e.charAt(0)==="-"?t+parseFloat(e):parseFloat(e)},n.prototype._swapEndStartRepeatValues=function(t){var e=this._valuesStartRepeat[t],i=this._valuesEnd[t];typeof i=="string"?this._valuesStartRepeat[t]=this._valuesStartRepeat[t]+parseFloat(i):this._valuesStartRepeat[t]=this._valuesEnd[t],this._valuesEnd[t]=e},n.autoStartOnUpdate=!1,n}();No.nextId;var zt=ta;zt.getAll.bind(zt),zt.removeAll.bind(zt),zt.add.bind(zt),zt.remove.bind(zt),zt.update.bind(zt);const Vo=navigator.userAgent.includes("Mobi");class jl extends h.Mesh{constructor(t,e){super(),this.isWarpSplatMesh=!0,this.lastActiveTime=Date.now(),this.active=!1,this.disposed=!1;const i=this;i.mapViewer=e,i.addScene(t),i.frustumCulled=!1}async addScene(t){const e=this,{renderer:i,scene:a,controls:o,tileMap:s}=e.mapViewer;fetch(t,{mode:"cors",credentials:"omit",cache:"reload"}).then(r=>r.ok?r.json():{}).then(r=>{const c=new h.Matrix4;if(r.transform)c.fromArray(r.transform);else if(r.WGS84){const g=s.geo2world(new h.Vector3().fromArray(r.WGS84));c.makeTranslation(g.x,g.y,g.z),r.transform=c.toArray()}e.metaMatrix=c,r.autoCut&&(r.autoCut=Math.min(Math.max(r.autoCut,1),50));const A=r.autoCut&&r.autoCut>1,l=!1,u=!1,f=r.showWatermark!==!1,d={renderer:i,scene:a,controls:o,pointcloudMode:l,bigSceneMode:A,showWatermark:f,depthTest:u};d.maxRenderCountOfMobile??(d.maxRenderCountOfMobile=d.bigSceneMode?128*10240:400*1e4),d.maxRenderCountOfPc??(d.maxRenderCountOfPc=d.bigSceneMode?320*1e4:400*1e4),d.debugMode=e.mapViewer.events.fire(F).debugMode,e.opts=d,e.meta=r,a.add(e),e.initCSS3DSprite(d),e.applyMatrix4(c)}).catch(r=>{console.error(r.message)})}async initCSS3DSprite(t){const e=this,i=t.controls,a=document.createElement("div");a.innerHTML=`<div title="${e.meta.name}" style='flex-direction: column;align-items: center;display: flex;pointer-events: auto;margin-bottom: 20px;'>
746
+ <svg height="20" width="20" style="color:#eeee00;opacity:0.9;"><use href="#svgicon-point3" fill="currentColor" /></svg>
747
+ </div>`,a.classList.add("splatmesh-point"),a.style.position="absolute",a.style.borderRadius="4px",a.style.cursor="pointer";let o=null;a.onclick=()=>{if(o)return;const c=i.target.clone(),A=i.object.position.clone(),l=e.position.clone(),u=Vo?6:2,d=c.clone().sub(A).normalize().clone(),g=l.clone().sub(d.multiplyScalar(u)),y={x:A.x,y:A.y,z:A.z,tx:c.x,ty:c.y,tz:c.z},p={x:g.x,y:g.y,z:g.z,tx:l.x,ty:l.y,tz:l.z};o=new $l(y).to(p,3500),o.easing(ke.Sinusoidal.InOut).start().onUpdate(()=>{i.object.position.set(y.x,y.y,y.z),i.target.set(y.tx,y.ty,y.tz)}).onComplete(()=>{o=null})},a.oncontextmenu=c=>c.preventDefault();const s=new pt(a);s.element.style.pointerEvents="none",s.visible=!1,s.applyMatrix4(e.metaMatrix),e.css3dTag=s,t.scene.add(s);const r=c=>e.mapViewer.controls._onMouseWheel(c);a.addEventListener("wheel",r,{passive:!1}),s.dispose=()=>a.removeEventListener("wheel",r),e.onBeforeRender=()=>{o?.update();const c=Vo?60:30,A=100,l=e.position.distanceTo(e.mapViewer.controls.object.position);if(l>c){e.css3dTag.visible=e.opts.controls.object.position.y>2;let u=.002*l;s.scale.set(u,u,u),e.css3dTag.visible=i.object.position.y<10?l<A:!0,e.splatMesh&&(e.splatMesh.visible=!1)}else{if(!e.active){e.splatMesh&&(e.splatMesh.visible=!1);let u=.002*l;s.scale.set(u,u,u),e.css3dTag.visible=!0,e.splatMesh?.boundBox&&(e.splatMesh.boundBox.visible=!1);return}if(e.lastActiveTime=Date.now(),e.css3dTag.visible=!1,e.splatMesh)e.splatMesh.visible=!0;else{const u=e.meta,f={...e.opts};u.autoCut&&(f.bigSceneMode=!0);const d=new Lt(f);e.splatMesh=d,e.opts.scene.add(d),d.meta=u;const g=u.watermark||u.name||"";u.showWatermark=u.showWatermark!==!1,d.fire(_n,g,!0,!1),d.addModel({url:u.url},u)}e.splatMesh.meta.showBoundBox&&(e.splatMesh.boundBox.visible=!0)}},e.onAfterRender=()=>{e.splatMesh&&(!e.active||Date.now()-e.lastActiveTime>1*60*1e3)&&setTimeout(()=>{e.splatMesh?.dispose(),e.splatMesh=null},5)}}dispose(){const t=this;t.disposed||(t.disposed=!0,t.opts.scene.remove(t.css3dTag),t.splatMesh?.dispose(),t.meta=null,t.splatMesh=null,t.opts=null,t.css3dTag=null,t.mapViewer=null,t.metaMatrix=null)}}class Jl extends h.EventDispatcher{constructor(t={}){console.info("Reall3dMapViewer",bs),super(),this.clock=new h.Clock,this.updateTime=0,this.disposed=!1;const e=this,i=new ni;e.events=i;const a=(r,c,A)=>i.on(r,c,A),o=(r,...c)=>i.fire(r,...c);e.tileMap=Gl();const s=zl(t);a(F,()=>s),Ls(i),Ol(i),Po(i),e.camera=new h.PerspectiveCamera(60,1,.01,100),a(lt,()=>e.camera),e.container=s.root,e.renderer=o(ms),e.scene=o(Cs),e.controls=o(ys),e.ambLight=new h.AmbientLight(16777215,1),e.scene.add(e.ambLight),e.dirLight=o(Is),e.scene.add(e.dirLight),e.scene.add(e.tileMap),e.container.appendChild(e.renderer.domElement),Uo(i),ql(i),window.addEventListener("resize",e.resize.bind(e)),e.resize(),e.renderer.setAnimationLoop(e.animate.bind(e)),yt&&e.controls._dollyOut?.(.75),a(Ve,()=>e.dispose()),a(ae,()=>{o(Ue),e.controls.update(),o(Es),o(He)},!0),a(Jt,()=>{e.tileMap.update(e.camera);try{e.renderer.render(e.scene,e.camera)}catch(r){console.warn(r.message)}},!0),a(Ce,()=>{e.dispatchEvent({type:"update",delta:e.clock.getDelta()}),e.updateTime=Date.now(),o(It)&&o(st,{fps:o(Pe),realFps:o(Ne),fov:o(ue),position:o(jt,o(Bt)),lookAt:o(jt,o(Dt)),lookUp:o(jt,o(ne))})},!0)}addScenes(t){const e=this;fetch(t,{mode:"cors",credentials:"omit",cache:"reload"}).then(i=>i.ok?i.json():{}).then(i=>{const a=new h.Vector3().fromArray(i.position||[17e3,3e4,-35e3]),o=new h.Vector3().fromArray(i.lookAt||[17e3,0,-35e3]);e.controls.object.position.copy(a),e.controls.target.copy(o),e.dirLight.target.position.copy(o);const s=new Set;for(let r of i.scenes)s.has(r)||(new jl(r,e),s.add(r))}).catch(i=>{console.error(i.message)})}resize(){const t=this;if(t.disposed)return;const{width:e,height:i,top:a,left:o}=t.container.getBoundingClientRect();t.renderer.setPixelRatio(Math.min(devicePixelRatio,2)),t.renderer.setSize(e,i),t.camera.aspect=e/i,t.camera.updateProjectionMatrix();const s=t.events.fire(kn);s.setSize(e,i),s.domElement.style.position="absolute",s.domElement.style.left=`${o}px`,s.domElement.style.top=`${a}px`}animate(){const t=this,e=(i,...a)=>t.events.fire(i,...a);e(Fe),Date.now()-t.updateTime>30&&(e(ae),e(Jt),e(Ce))}dispose(){const t=this;if(t.disposed)return;t.disposed=!0;const e=t.renderer.domElement;t.events.fire(Tn),t.events.fire(vs),t.renderer.clear(),t.renderer.dispose(),t.events.clear(),t.scene=null,t.renderer=null,t.camera=null,t.controls=null,t.ambLight=null,t.dirLight=null,t.container.removeChild(e),t.container.classList.add("hidden"),t.container=null,t.clock=null,t.events=null,t.tileMap=null,document.querySelector("#gsviewer .debug.dev-panel")?.classList?.remove("map")}}class Kl{constructor(t){this.tools=new Map,this.active=null,this.events=t,this.events.on("tool.deactivate",()=>{this.activate(null)}),this.events.function("tool.active",()=>this.active);let e="world";const i=a=>{a!==e&&(e=a,t.fire("tool.coordSpace",e))};t.function("tool.coordSpace",()=>e),t.on("tool.setCoordSpace",a=>{i(a)}),t.on("tool.toggleCoordSpace",()=>{i(e==="local"?"world":"local")})}register(t,e){this.tools.set(t,e),this.events.on(`tool.${t}`,()=>{this.activate(t)})}get(t){return(t&&this.tools.get(t))??null}activate(t){t===this.active?t&&this.activate(null):(this.active&&(this.tools.get(this.active).deactivate(),this.events.fire(`tool.${this.active}.deactivated`),this.events.fire("tool.deactivated",this.active)),this.active=t,this.active&&this.tools.get(this.active).activate(),this.events.fire(`tool.${t}.activated`),this.events.fire("tool.activated",t))}}class Xl{constructor(t,e,i){let a=40;const o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.id="brush-select-svg",o.classList.add("select-svg");const s=document.createElementNS(o.namespaceURI,"circle");s.setAttribute("r",a.toString()),s.setAttribute("fill","rgba(255, 102, 0, 0.2)"),s.setAttribute("stroke","#f60"),s.setAttribute("stroke-width","1"),s.setAttribute("stroke-dasharray","5, 5");const{canvas:r,context:c}=i,A={x:0,y:0};let l;const u=m=>{const I=m.offsetX,S=m.offsetY;s.setAttribute("cx",I.toString()),s.setAttribute("cy",S.toString()),l!==void 0&&(c.beginPath(),c.strokeStyle="#f60",c.lineCap="round",c.lineWidth=a*2,c.moveTo(A.x,A.y),c.lineTo(I,S),c.stroke(),A.x=I,A.y=S)},f=m=>{l===void 0&&(m.pointerType==="mouse"?m.button===0:m.isPrimary)&&(m.preventDefault(),m.stopPropagation(),l=m.pointerId,e.setPointerCapture(l),(r.width!==e.clientWidth||r.height!==e.clientHeight)&&(r.width=e.clientWidth,r.height=e.clientHeight),c.clearRect(0,0,r.width,r.height),r.style.display="inline",A.x=m.offsetX,A.y=m.offsetY,u(m))},d=m=>{l!==void 0&&(m.preventDefault(),m.stopPropagation()),u(m)},g=()=>{e.releasePointerCapture(l),l=void 0,r.style.display="none"},y=m=>{m.pointerId===l&&(m.preventDefault(),m.stopPropagation(),g(),t.fire("select.byMask",m.shiftKey?"add":m.ctrlKey?"remove":"set",r,c))},p=m=>{if(m.altKey||m.metaKey){const{deltaX:I,deltaY:S}=m;t.fire((Math.abs(I)>Math.abs(S)?I:S)>0?"tool.brushSelection.smaller":"tool.brushSelection.bigger"),m.preventDefault(),m.stopPropagation()}};this.activate=()=>{o.style.display="inline",e.style.display="block",e.addEventListener("pointerdown",f),e.addEventListener("pointermove",d),e.addEventListener("pointerup",y),e.addEventListener("wheel",p)},this.deactivate=()=>{l!==void 0&&g(),o.style.display="none",e.style.display="none",e.removeEventListener("pointerdown",f),e.removeEventListener("pointermove",d),e.removeEventListener("pointerup",y),e.removeEventListener("wheel",p)},t.on("tool.brushSelection.smaller",()=>{a=Math.max(1,a/1.05),s.setAttribute("r",a.toString())}),t.on("tool.brushSelection.bigger",()=>{a=Math.min(500,a*1.05),s.setAttribute("r",a.toString())}),o.appendChild(s),e.appendChild(o)}}class Zl{constructor(t,e,i){let a=[],o=null,s=0;const r=document.createElementNS("http://www.w3.org/2000/svg","svg");r.id="lasso-select-svg",r.classList.add("select-svg");const c=document.createElementNS(r.namespaceURI,"polygon");c.setAttribute("fill","none"),c.setAttribute("stroke-width","1"),c.setAttribute("stroke-dasharray","5, 5"),c.setAttribute("stroke-dashoffset","0");const{canvas:A,context:l}=i,u=(k,M)=>Math.sqrt((k.x-M.x)**2+(k.y-M.y)**2),f=()=>a.length>1&&u(o,a[0])<8,d=()=>{c.setAttribute("points",[...a,o].reduce((k,M)=>`${k}${M.x}, ${M.y} `,"")),c.setAttribute("stroke",f()?"#fa6":"#f60")};let g;const y=k=>{o={x:k.offsetX,y:k.offsetY};const M=a.length===0?0:u(o,a[a.length-1]),b=Date.now()-s,C=M>20,v=b>500&&M>2,x=b>200&&M>10,B=a.length===0;g!==void 0&&(C||v||x||B)&&(a.push(o),s=Date.now()),d()},p=k=>{(A.width!==e.clientWidth||A.height!==e.clientHeight)&&(A.width=e.clientWidth,A.height=e.clientHeight),l.clearRect(0,0,A.width,A.height),l.beginPath(),l.fillStyle="#f60",l.beginPath(),a.forEach((M,b)=>{b===0?l.moveTo(M.x,M.y):l.lineTo(M.x,M.y)}),l.closePath(),l.fill(),t.fire("select.byMask",k.shiftKey?"add":k.ctrlKey?"remove":"set",A,l)},m=k=>{g===void 0&&(k.pointerType==="mouse"?k.button===0:k.isPrimary)&&(k.preventDefault(),k.stopPropagation(),g=k.pointerId,e.setPointerCapture(g),y(k))},I=k=>{g!==void 0&&(k.preventDefault(),k.stopPropagation()),y(k)},S=()=>{e.releasePointerCapture(g),g=void 0},Q=k=>{k.pointerId===g&&(k.preventDefault(),k.stopPropagation(),S(),p(k),a=[],d())};this.activate=()=>{r.style.display="inline",e.style.display="block",e.addEventListener("pointerdown",m),e.addEventListener("pointermove",I),e.addEventListener("pointerup",Q)},this.deactivate=()=>{g!==void 0&&S(),r.style.display="none",e.style.display="none",e.removeEventListener("pointerdown",m),e.removeEventListener("pointermove",I),e.removeEventListener("pointerup",Q)},r.appendChild(c),e.appendChild(r)}}class tA{constructor(t,e,i){let a=[],o=null;const s=document.createElementNS("http://www.w3.org/2000/svg","svg");s.id="polygon-select-svg",s.classList.add("select-svg");const r=document.createElementNS(s.namespaceURI,"polyline");r.setAttribute("fill","none"),r.setAttribute("stroke-width","1"),r.setAttribute("stroke-dasharray","5, 5"),r.setAttribute("stroke-dashoffset","0");const{canvas:c,context:A}=i,l=(I,S)=>Math.sqrt((I.x-S.x)**2+(I.y-S.y)**2),u=()=>a.length>1&&l(o,a[0])<8,f=()=>{r.setAttribute("points",[...a,o].filter(I=>I).reduce((I,S)=>`${I}${S.x}, ${S.y} `,"")),r.setAttribute("stroke",u()?"#fa6":"#f60")},d=I=>{(c.width!==e.clientWidth||c.height!==e.clientHeight)&&(c.width=e.clientWidth,c.height=e.clientHeight),A.clearRect(0,0,c.width,c.height),A.beginPath(),A.fillStyle="#f60",A.beginPath(),a.forEach((S,Q)=>{Q===0?A.moveTo(S.x,S.y):A.lineTo(S.x,S.y)}),A.closePath(),A.fill(),t.fire("select.byMask",I.shiftKey?"add":I.ctrlKey?"remove":"set",c,A),a=[],f()},g=I=>{o={x:I.offsetX,y:I.offsetY},a.length>0&&f()},y=I=>{(a.length>0||(I.pointerType==="mouse"?I.button===0:I.isPrimary))&&(I.preventDefault(),I.stopPropagation())},p=I=>{(I.pointerType==="mouse"?I.button===0:I.isPrimary)&&(I.preventDefault(),I.stopPropagation(),u()?d(I):(a.length===0||l(a[a.length-1],o)>0)&&a.push(o))},m=I=>{I.preventDefault(),I.stopPropagation(),a.length>2&&d(I)};this.activate=()=>{s.style.display="inline",e.style.display="block",e.addEventListener("pointerdown",y),e.addEventListener("pointermove",g),e.addEventListener("pointerup",p),e.addEventListener("dblclick",m)},this.deactivate=()=>{s.style.display="none",e.style.display="none",e.removeEventListener("pointerdown",y),e.removeEventListener("pointermove",g),e.removeEventListener("pointerup",p),e.removeEventListener("dblclick",m),a=[],f()},s.appendChild(r),e.appendChild(s)}}class eA{constructor(t,e){const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.id="rect-select-svg",i.classList.add("select-svg");const a=document.createElementNS(i.namespaceURI,"rect");a.setAttribute("fill","none"),a.setAttribute("stroke","#f60"),a.setAttribute("stroke-width","1"),a.setAttribute("stroke-dasharray","5, 5");const o={x:0,y:0},s={x:0,y:0};let r,c=!1;const A=()=>{const g=Math.min(o.x,s.x),y=Math.min(o.y,s.y),p=Math.abs(o.x-s.x),m=Math.abs(o.y-s.y);a.setAttribute("x",g.toString()),a.setAttribute("y",y.toString()),a.setAttribute("width",p.toString()),a.setAttribute("height",m.toString())},l=g=>{r===void 0&&(g.pointerType==="mouse"?g.button===0:g.isPrimary)&&(g.preventDefault(),g.stopPropagation(),r=g.pointerId,c=!1,e.setPointerCapture(r),o.x=s.x=g.offsetX,o.y=s.y=g.offsetY,A(),i.style.display="inline")},u=g=>{g.pointerId===r&&(g.preventDefault(),g.stopPropagation(),c=!0,s.x=g.offsetX,s.y=g.offsetY,A())},f=()=>{e.releasePointerCapture(r),r=void 0,i.style.display="none"},d=g=>{if(g.pointerId===r){g.preventDefault(),g.stopPropagation();const y=e.clientWidth,p=e.clientHeight;f(),c?t.fire("select.rect",g.shiftKey?"add":g.ctrlKey?"remove":"set",{start:{x:Math.min(o.x,s.x)/y,y:Math.min(o.y,s.y)/p},end:{x:Math.max(o.x,s.x)/y,y:Math.max(o.y,s.y)/p}}):t.fire("select.point",g.shiftKey?"add":g.ctrlKey?"remove":"set",{x:g.offsetX/e.clientWidth,y:g.offsetY/e.clientHeight})}};this.activate=()=>{e.style.display="block",e.addEventListener("pointerdown",l),e.addEventListener("pointermove",u),e.addEventListener("pointerup",d)},this.deactivate=()=>{r!==void 0&&f(),e.style.display="none",e.removeEventListener("pointerdown",l),e.removeEventListener("pointermove",u),e.removeEventListener("pointerup",d)},e.appendChild(i),i.appendChild(a)}destroy(){}}w.AddFlyPosition=Fn,w.AddMarkToWeakRef=Yt,w.BrushSelection=Xl,w.CSS3DRendererDispose=Tn,w.CameraSetLookAt=gn,w.CanUpdateTexture=Go,w.CancelCurrentMark=we,w.ClearFlyPosition=Un,w.ClearMarkPoint=Bn,w.CommonUtilsDispose=Cn,w.ComputeFps=se,w.ComputePlansArea=un,w.ComputePlansCenter=An,w.ComputePoint3Area=dn,w.ControlPlaneSwitchVisible=Ge,w.ControlPlaneUpdate=Ye,w.ControlsUpdate=Ii,w.ControlsUpdateRotateAxis=wi,w.CountFpsDefault=Fe,w.CountFpsReal=Ue,w.CreateSplatGeometry=Qi,w.CreateSplatMaterial=xi,w.CreateSplatMesh=Di,w.CreateSplatUniforms=Bi,w.DecodeBase64=sa,w.DeleteMarkWeakRef=oe,w.EncodeBase64=ia,w.EventListenerDispose=hn,w.Events=ni,w.FlyDisable=Je,w.FlyEnable=ss,w.FlyOnce=is,w.FlySavePositions=Pn,w.Flying=Ee,w.FlyingContinue=sr,w.FlyingPause=ir,w.FlyingPlay=ar,w.FocusAabbCenter=us,w.FocusMarkerAutoDisappear=xn,w.FocusMarkerSetOpacity=ze,w.FocusMarkerUpdate=$i,w.FocusMarkerUpdateScale=Qn,w.GetAabbCenter=As,w.GetBgAudio=or,w.GetCSS3DRenderer=kn,w.GetCachedWaterMark=Ji,w.GetCamera=lt,w.GetCameraDirection=ji,w.GetCameraFov=ue,w.GetCameraInfo=yi,w.GetCameraLookAt=Dt,w.GetCameraLookUp=ne,w.GetCameraPosition=Bt,w.GetCanvas=ee,w.GetCanvasSize=$t,w.GetControlPlane=la,w.GetControls=tt,w.GetCurrentDisplayShDegree=ls,w.GetFlyPositionArray=ha,w.GetFlyPositions=ns,w.GetFlyTargetArray=fa,w.GetFocusMarkerMaterial=Yo,w.GetFpsDefault=Pe,w.GetFpsReal=Ne,w.GetGaussianText=es,w.GetMarkDataByName=ga,w.GetMarkFromWeakRef=ye,w.GetMarkWarpElement=ua,w.GetMaxRenderCount=ie,w.GetMeta=gs,w.GetMetaMatrix=fs,w.GetModelShDegree=On,w.GetOptions=F,w.GetRenderQualityLevel=Kn,w.GetRenderer=fe,w.GetScene=z,w.GetShTexheight=ve,w.GetSortType=Xn,w.GetSplatActivePoints=Mn,w.GetSplatGeometry=aa,w.GetSplatMaterial=ki,w.GetSplatMesh=Ct,w.GetViewProjectionMatrix=vi,w.GetViewProjectionMatrixArray=Ei,w.GetWorker=Ci,w.HttpPostMetaData=te,w.HttpQueryGaussianText=na,w.Information=st,w.IsBigSceneMode=ft,w.IsCameraChangedNeedLoadData=ra,w.IsCameraChangedNeedUpdate=yn,w.IsControlPlaneVisible=Dn,w.IsDebugMode=It,w.IsFetching=ca,w.IsPointcloudMode=In,w.IsSmallSceneRenderDataReady=Yi,w.IsSplatMeshCreated=Ms,w.KeyActionCheckAndExecute=He,w.LassoSelection=Zl,w.LoadSmallSceneMetaData=Rn,w.LoaderModelStart=zo,w.MapCreateCamera=Ko,w.MapCreateControls=ys,w.MapCreateDirLight=Is,w.MapCreateRenderer=ms,w.MapCreateScene=Cs,w.MapFlyToTarget=Xo,w.MapGetSplatMesh=at,w.MapSceneTraverseDispose=vs,w.MapSortSplatMeshRenderOrder=Es,w.MapSplatMeshMoveX=ma,w.MapSplatMeshMoveY=ws,w.MapSplatMeshMoveZ=Ca,w.MapSplatMeshRotateX=$n,w.MapSplatMeshRotateY=jn,w.MapSplatMeshRotateZ=Jn,w.MapSplatMeshSaveModelMatrix=Ea,w.MapSplatMeshScale=Ia,w.MapSplatMeshSetPosition=ya,w.MapSplatMeshShowHide=wa,w.MarkArea=Jo,w.MarkDistance=jo,w.MarkFinish=qt,w.MarkLine=Wo,w.MarkPlan=$o,w.MarkPoint=qo,w.MarkUpdateVisible=Ie,w.MetaMarkRemoveData=Zi,w.MetaMarkSaveData=je,w.MetaSaveSmallSceneCameraInfo=Ln,w.MetaSaveWatermark=ts,w.NotifyViewerNeedUpdate=et,w.OnFetchStart=En,w.OnFetchStop=pe,w.OnFetching=vn,w.OnLoadAndRenderObj=ds,w.OnQualityLevelChanged=Wn,w.OnSetFlyPositions=Nn,w.OnSetFlyTargets=Vn,w.OnSetWaterMark=qe,w.OnSmallSceneShowDone=Xe,w.OnSmallSceneTimeChange=Se,w.OnTextureReadySplatCount=Gi,w.OnViewerAfterUpdate=Ce,w.OnViewerBeforeUpdate=ae,w.OnViewerUpdate=Jt,w.PlaytBgAudio=rr,w.PolygonSelection=tA,w.PrintInfo=as,w.RaycasterRayDistanceToPoint=bn,w.RaycasterRayIntersectPoints=Oe,w.ReComputePlansArea=mi,w.Reall3dMapViewer=Jl,w.Reall3dViewer=Hl,w.RectSelection=eA,w.RotateAt=Sn,w.RotateLeft=qi,w.RotateRight=Wi,w.RunLoopByFrame=Zt,w.RunLoopByTime=pi,w.SelectMarkPoint=Mt,w.SelectPointAndLookAt=me,w.SetBgAudioVolumeDown=cr,w.SetBgAudioVolumeUp=lr,w.SetGaussianText=_n,w.SplatGeometryDispose=pn,w.SplatMaterialDispose=mn,w.SplatMesh=Lt,w.SplatMeshCycleZoom=zi,w.SplatMeshDispose=Oi,w.SplatMeshSwitchDisplayMode=wn,w.SplatSetBoundBoxVisible=pa,w.SplatSetPointcloudMode=We,w.SplatSwitchDisplayMode=$e,w.SplatTexdataManagerAddModel=Ni,w.SplatTexdataManagerDataChanged=Vi,w.SplatTexdataManagerDispose=Hi,w.SplatUpdateBigSceneMode=_i,w.SplatUpdateBoundBox=zn,w.SplatUpdateCurrentLightRadius=he,w.SplatUpdateCurrentVisibleRadius=ge,w.SplatUpdateDebugEffect=oa,w.SplatUpdateFlagValue=hs,w.SplatUpdateFocal=Te,w.SplatUpdateLightFactor=de,w.SplatUpdateMarkPoint=Re,w.SplatUpdateMaxRadius=ps,w.SplatUpdateMinAlpha=Yn,w.SplatUpdateMinMaxPixelDiameter=Gn,w.SplatUpdateParticleMode=Ze,w.SplatUpdatePerformanceAct=Ke,w.SplatUpdatePerformanceNow=Pi,w.SplatUpdatePointMode=Wt,w.SplatUpdateSh12Texture=rs,w.SplatUpdateSh3Texture=cs,w.SplatUpdateShDegree=_e,w.SplatUpdateShowWaterMark=fn,w.SplatUpdateSplatIndex=Ti,w.SplatUpdateTexture=Li,w.SplatUpdateTopY=Fi,w.SplatUpdateTransitionEffect=Ss,w.SplatUpdateUseSimilarExp=qn,w.SplatUpdateUsingIndex=Ri,w.SplatUpdateViewport=Le,w.StartAutoRotate=bi,w.StopAutoRotate=At,w.StopBgAudio=Ar,w.ToolManager=Kl,w.TraverseDisposeAndClear=_t,w.TweenFly=Zo,w.TweenFlyDisable=nr,w.TweenFlyEnable=er,w.TweenFlyOnce=tr,w.UpdateAllMarkByMeterScale=Xi,w.UpdateMarkByName=da,w.UpdateQualityLevel=ti,w.UpdateSortType=Zn,w.UploadSplatTexture=Hn,w.UploadSplatTextureDone=os,w.Vector3ToString=jt,w.ViewerCheckNeedUpdate=Ki,w.ViewerDispose=Ve,w.ViewerNeedUpdate=rt,w.ViewerSetPointcloudMode=Aa,w.ViewerUtilsDispose=Ui,w.WorkerDispose=Mi,w.WorkerSort=Si,w.WorkerUpdateParams=ei,w.setupEventListener=Ro,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});