s3m-three 0.2.0 → 0.3.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.
@@ -0,0 +1,437 @@
1
+ var S3M=(function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},l=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),u=(e,t)=>{let n={};for(var i in e)r(n,i,{get:e[i],enumerable:!0});return t||r(n,Symbol.toStringTag,{value:`Module`}),n},d=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=a(t),l=0,u=c.length,d;l<u;l++)d=c[l],!s.call(e,d)&&d!==n&&r(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(o=i(t,d))||o.enumerable});return e};t=((e,t,i)=>(i=e==null?{}:n(o(e)),d(r(i,`default`,{value:e,enumerable:!0}),e)))(t,1);function f(e){"@babel/helpers - typeof";return f=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},f(e)}function p(e,t){if(f(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(f(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function m(e){var t=p(e,`string`);return f(t)==`symbol`?t:t+``}function h(e,t,n){return(t=m(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var g=class{constructor(e,t=0,n){h(this,`buffer`,void 0),h(this,`base`,void 0),h(this,`view`,void 0),h(this,`offset`,void 0),h(this,`_decoder`,new TextDecoder(`utf-8`)),this.buffer=e,this.base=t,this.view=new DataView(e,t,n===void 0?e.byteLength-t:n),this.offset=0}get remaining(){return this.view.byteLength-this.offset}u8(){let e=this.view.getUint8(this.offset);return this.offset+=1,e}u16(){let e=this.view.getUint16(this.offset,!0);return this.offset+=2,e}u32(){let e=this.view.getUint32(this.offset,!0);return this.offset+=4,e}i32(){let e=this.view.getInt32(this.offset,!0);return this.offset+=4,e}f32(){let e=this.view.getFloat32(this.offset,!0);return this.offset+=4,e}f64(){let e=this.view.getFloat64(this.offset,!0);return this.offset+=8,e}bytes(e){let t=new Uint8Array(this.buffer,this.base+this.offset,e);return this.offset+=e,t}bytesCopy(e){let t=new Uint8Array(this.buffer,this.base+this.offset,e);return this.offset+=e,t.slice()}string(){let e=this.u32(),t=new Uint8Array(this.buffer,this.base+this.offset,e);return this.offset+=e,this._decoder.decode(t)}skip(e){this.offset+=e}align4(e=0){let t=(this.offset-e)%4;t!==0&&this.skip(4-t)}vec3f64(){return{x:this.f64(),y:this.f64(),z:this.f64()}}boundingBox(){return{center:this.vec3f64(),xExtent:this.vec3f64(),yExtent:this.vec3f64(),zExtent:this.vec3f64()}}},_=u({default:()=>v}),v,y=c((()=>{v=(function(){"use strict";var e=`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`,t=`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`,n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),r=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!=`object`)return{supported:!1};var i=e;WebAssembly.validate(n)&&(i=t);var a,o=WebAssembly.instantiate(s(i),{}).then(function(e){a=e.instance,a.exports.__wasm_call_ctors()});function s(e){for(var t=new Uint8Array(e.length),n=0;n<e.length;++n){var i=e.charCodeAt(n);t[n]=i>96?i-71:i>64?i-65:i>47?i+4:i>46?63:62}for(var a=0,n=0;n<e.length;++n)t[a++]=t[n]<60?r[t[n]]:(t[n]-60)*64+t[++n];return t.buffer.slice(0,a)}function c(e,t,n,r,i,o){var s=a.exports.sbrk,c=n+3&-4,l=s(c*r),u=s(i.length),d=new Uint8Array(a.exports.memory.buffer);d.set(i,u);var f=e(l,n,r,u,i.length);if(f==0&&o&&o(l,c,r),t.set(d.subarray(l,l+n*r)),s(l-s(0)),f!=0)throw Error(`Malformed buffer data: `+f)}var l={0:``,1:`meshopt_decodeFilterOct`,2:`meshopt_decodeFilterQuat`,3:`meshopt_decodeFilterExp`,NONE:``,OCTAHEDRAL:`meshopt_decodeFilterOct`,QUATERNION:`meshopt_decodeFilterQuat`,EXPONENTIAL:`meshopt_decodeFilterExp`},u={0:`meshopt_decodeVertexBuffer`,1:`meshopt_decodeIndexBuffer`,2:`meshopt_decodeIndexSequence`,ATTRIBUTES:`meshopt_decodeVertexBuffer`,TRIANGLES:`meshopt_decodeIndexBuffer`,INDICES:`meshopt_decodeIndexSequence`};return{ready:o,supported:!0,decodeVertexBuffer:function(e,t,n,r,i){c(a.exports.meshopt_decodeVertexBuffer,e,t,n,r,a.exports[l[i]])},decodeIndexBuffer:function(e,t,n,r){c(a.exports.meshopt_decodeIndexBuffer,e,t,n,r)},decodeIndexSequence:function(e,t,n,r){c(a.exports.meshopt_decodeIndexSequence,e,t,n,r)},decodeGltfBuffer:function(e,t,n,r,i,o){c(a.exports[u[i]],e,t,n,r,a.exports[l[o]])}}})()})),b={POSITION:1,POSITION_W:2,NORMAL:4,TANGENT:8,TEXCOORD0:16,TEXCOORD1:32,COLOR:64,COLOR1:128,CUSTOM0:512,CUSTOM1:1024,GS_SCALE:131073,GS_ROTATION:131074},x=13,S=null;function C(){return S||(S=Promise.resolve().then(()=>(y(),_)).then(async e=>{let t=e.default;if(!t?.supported)throw Error(`[s3m] 当前环境不支持 WebAssembly,无法解码 MeshOpt 几何`);return await t.ready,t})),S}function w(e){return e<0?-1:1}function T(e,t,n,r){let i=e,a=t,o=1-Math.abs(i)-Math.abs(a);if(o<0){let e=(1-Math.abs(a))*w(i);a=(1-Math.abs(i))*w(a),i=e}let s=Math.hypot(i,a,o)||1;n[r]=i/s,n[r+1]=a/s,n[r+2]=o/s}function E(e,t,n){return{semantic:e,data:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),components:n,stride:n*4,offsetInBytes:0,dtype:`f32`}}function ee(e,t,n){return{semantic:e,data:t,components:n,stride:n,offsetInBytes:0,dtype:`u8`}}function te(e,t,n){switch(e){case b.NORMAL:case b.TEXCOORD0:case b.TEXCOORD1:return 4;case b.COLOR:case b.COLOR1:return 4;case b.CUSTOM0:case b.CUSTOM1:return 4*Math.max(1,n);case b.GS_SCALE:case b.GS_ROTATION:return t&64?4:4*Math.max(1,n);default:return 8}}function ne(e,t,n,r){let i=t*n;if(!Number.isSafeInteger(i)||i>67108864)throw Error(`[s3m] MeshOpt 流尺寸异常:${t} 顶点 × ${n}B = ${i}B`);let a=new Uint8Array(i);return e.decodeVertexBuffer(a,t,n,r,r.length),a}var re={[b.POSITION]:`position`,[b.POSITION_W]:`positionW`,[b.NORMAL]:`normal`,[b.TANGENT]:`tangent`,[b.TEXCOORD0]:`uv`,[b.TEXCOORD1]:`uv2`,[b.COLOR]:`color`,[b.COLOR1]:`color2`,[b.CUSTOM0]:`custom0`,[b.CUSTOM1]:`custom1`,[b.GS_SCALE]:`gsScale`,[b.GS_ROTATION]:`gsRotation`};async function ie(e,t){let n=await C(),r=e.u32();t.compressOptions=r;let i=e.u32(),a={vertexCount:0,compressOptions:r,minVertices:[0,0,0],vertScale:1,texCoordScale:[[0,0],[0,0]],texCoordOffset:[[0,0],[0,0]],streams:[]};for(let o=0;o<i;o++){let i=e.u32(),s=e.f32(),c=e.f64(),l=e.f64(),u=e.f64(),d=[],f=[];for(let t=0;t<4;t++){let n=e.f64(),r=e.f64();t%2==0?d.push([n,r]):f.push([n,r])}let p=e.i32(),m=o===0;m&&(a.vertexCount=i,a.vertScale=s,a.minVertices=[c,l,u],a.texCoordScale=d,a.texCoordOffset=f,t.verticesCount=i);for(let o=0;o<p;o++){let o=e.i32(),p=0;(o===b.CUSTOM0||o===b.CUSTOM1||o===b.GS_SCALE||o===b.GS_ROTATION)&&(p=e.i32());let h=e.i32(),g=e.bytes(h);if(e.align4(),!m)continue;if(o===b.TANGENT){a.streams.push({semantic:`tangent`,bytes:h,stride:0});continue}let _=te(o,r,p),v;try{v=ne(n,i,_,g)}catch{if(o===b.TEXCOORD0||o===b.TEXCOORD1)v=ne(n,i,8,g);else throw Error(`[s3m] MeshOpt 属性解码失败(semantic=0x${o.toString(16)})`)}let y=re[o]??`semantic_0x${o.toString(16)}`;if(a.streams.push({semantic:y,bytes:h,stride:i>0?v.byteLength/i:0}),o===b.POSITION){let e=new Uint16Array(v.buffer,v.byteOffset,i*4),n=new Float32Array(i*3);for(let t=0;t<i;t++)n[t*3]=c+e[t*4]*s,n[t*3+1]=l+e[t*4+1]*s,n[t*3+2]=u+e[t*4+2]*s;t.vertexAttributes.push(E(`position`,n,3))}else if(o===b.NORMAL){let e=new Int16Array(v.buffer,v.byteOffset,i*2),n=new Float32Array(i*3);for(let t=0;t<i;t++)T(e[t*2]/32767,e[t*2+1]/32767,n,t*3);t.vertexAttributes.push(E(`normal`,n,3))}else if(o===b.COLOR)t.vertexAttributes.push(ee(`color`,v,4));else if(o===b.COLOR1)t.vertexAttributes.push(ee(`color2`,v,4));else if(o===b.TEXCOORD0||o===b.TEXCOORD1){let e=o===b.TEXCOORD0?0:1,n=d[e]??[0,0],r=f[e]??[0,0],a=new Float32Array(i*2);if(v.byteLength===i*8){let e=new Float32Array(v.buffer,v.byteOffset,i*2);a.set(e)}else{let e=new Uint16Array(v.buffer,v.byteOffset,i*2);for(let t=0;t<i;t++)a[t*2]=r[0]+e[t*2]*n[0],a[t*2+1]=r[1]+e[t*2+1]*n[1]}t.vertexAttributes.push(E(e===0?`uv`:`uv2`,a,2))}}let h=e.string();if(e.align4(),m&&h)try{t.customVertexAttribute=JSON.parse(h)}catch{t.customVertexAttribute=h}}for(let e=0;e<t.vertexAttributes.length;e++)t.attrLocation[`a${t.vertexAttributes[e].semantic}`]=e;return a}async function ae(e){let t=await C(),n=e.i32(),r=[];for(let i=0;i<n;i++){let n=e.i32();if(n<1)continue;let i=e.u8(),a=e.u8(),o=e.u8();e.skip(1);let s=e.i32(),c;if(o===x)c=e.bytes(s*4),e.align4();else{let r=e.bytes(s);e.align4(),c=new Uint8Array(n*4),t.decodeIndexBuffer(c,n,4,r)}let l=e.i32(),u=[];for(let t=0;t<l;t++)u.push(e.string());e.align4();let d=n>0?c.byteLength/n:0,f=d===2?0:d===4?3:i===1||i===3?i:0;r.push({indexCount:n,indexType:f,useIndex:a,primitiveType:o,indices:c,passNames:u})}return r}var oe={V1:1,V2:2,V3:3},D={UNKNOWN:0,STANDARD:1,COMPRESSED:2,DRACO:3},se={STANDARD:0,DRACO:1,MESHOPT:2},ce={VERTEX:1,NORMAL:2,VERTEX_COLOR:4,SECOND_COLOR:8,TEXCOORD:16,TEXCOORD_IS_W:32},le={0:4,1:4,2:8,3:2};async function ue(e){if(typeof DecompressionStream>`u`)throw Error(`[s3m] 当前环境无 DecompressionStream,请通过 options.inflate 注入解压实现`);let t=new Blob([e]).stream().pipeThrough(new DecompressionStream(`deflate`));return new Uint8Array(await new Response(t).arrayBuffer())}function O(e,t,n,r,i,a=0,o,s=`f32`){e.attrLocation[t]=e.vertexAttributes.length,e.vertexAttributes.push({semantic:t,data:n,components:r,stride:i||r*4,offsetInBytes:a,divisor:o,dtype:s})}function de(){return{vertexAttributes:[],attrLocation:{},instanceCount:0,instanceMode:0,instanceIndex:-1,verticesCount:0}}function fe(e){let t=Array(16);for(let n=0;n<16;n++)t[n]=e.f64();let n=e.u32(),r=[];for(let t=0;t<n;t++)r.push(e.string());return{matrix:t,skeletonNames:r}}function pe(e,t){let n={rangeValue:e.f32(),rangeMode:e.u16(),boundingSphere:{center:e.vec3f64(),radius:e.f64()},childTile:``,geodes:[]};t>=3&&(n.obb={center:e.vec3f64(),xExtent:e.vec3f64(),yExtent:e.vec3f64(),zExtent:e.vec3f64()});let r=e.string(),i=r.indexOf(`Geometry`);i!==-1&&(r=r.substring(0,i)),n.childTile=r;let a=e.u32();for(let t=0;t<a;t++)n.geodes.push(fe(e));return t>=3&&e.string(),n}function me(e,t){e.u32();let n=e.u32(),r=[];for(let i=0;i<n;i++)r.push(pe(e,t));return e.align4(),{pageLods:r}}function he(e,t){let n=e.u32();if(t.verticesCount=n,n===0)return;let r=e.u16();e.u16(),O(t,`position`,e.bytes(n*r*4),r,r*4)}function ge(e,t){let n=e.u32();if(n<=0)return;let r=e.u16(),i=e.u16();O(t,`normal`,e.bytes(n*r*4),r,i||r*4)}function _e(e,t){let n=e.u32(),r;n>0?(e.u16(),e.skip(2),r=e.bytes(n*4)):r=new Uint8Array((t.verticesCount||0)*4).fill(255),O(t,`color`,r,4,4,0,void 0,`u8`)}function ve(e,t){let n=e.u32();n<=0||(e.u16(),e.skip(2),O(t,`secondColor`,e.bytes(n*4),4,4,0,void 0,`u8`))}function ye(e,t){let n=e.u16();e.skip(2);for(let r=0;r<n;r++){let n=e.u32(),i=e.u16(),a=e.u16();O(t,r===0?`uv`:`uv${r+1}`,e.bytes(n*i*4),i,a||i*4)}}function be(e,t,n){let r=e.u16();e.skip(2);for(let i=0;i<r;i++){let r=e.u32(),i=e.u16();if(i===16){e.offset-=2;let a=n===3?2:4,o=i*4+a,s=r*o,c=e.bytes(s),l=new Uint8Array(r*i*4);for(let e=0;e<r;e++)l.set(c.subarray(e*o+a,e*o+o),e*i*4);t.instanceCount=r,t.instanceMode=i,t.instanceBuffer=l,t.instanceIndex=1,O(t,`instanceMatrix0`,l,4,64,0,1),O(t,`instanceMatrix1`,l,4,64,16,1),O(t,`instanceMatrix2`,l,4,64,32,1),O(t,`instanceColor`,l,4,64,48,1)}else{e.u16();let n=r*i*4;i===17||i===29?(t.instanceCount=r,t.instanceMode=i,t.instanceBuffer=e.bytesCopy(n),t.instanceIndex=1):e.skip(n)}}}function xe(e,t){let n=e.u32();for(let r=0;r<n;r++){let n=e.u32(),i=e.u16(),a=le[e.u16()]??4;O(t,`custom${r}`,e.bytes(n*i*a),i,i*a)}}function Se(e){let t=e.u32();if(t<=0)return;let n=e.u16();e.u16(),e.skip(t*n*4)}function Ce(e,t,n){if(n>=3&&e.u32(),he(e,t),ge(e,t),_e(e,t),n<3&&ve(e,t),ye(e,t),be(e,t,n),n>=3){xe(e,t);let n=e.string();t.customVertexAttribute=n?JSON.parse(n):void 0,e.align4(),Se(e)}}function we(e,t,n){let r=e.u32();if(t.compressOptions=r,r&ce.VERTEX)throw Error(`[s3m] 顶点量化压缩(v2 旧式)暂未实现`);if(he(e,t),r&ce.NORMAL)throw Error(`[s3m] 法线压缩(v2 旧式)暂未实现`);if(ge(e,t),_e(e,t),ve(e,t),r&ce.TEXCOORD)throw Error(`[s3m] 纹理坐标压缩(v2 旧式)暂未实现`);ye(e,t),r&ce.TEXCOORD_IS_W&&(t.textureCoordIsW=!0),be(e,t,n)}function Te(e,t){let n=e.u32(),r=[];for(let i=0;i<n;i++){t>=3&&e.u32();let n=e.u32(),i=e.u8(),a=e.u8(),o=e.u8();e.skip(1);let s=null;if(n>0){let t=i===1||i===3,r=t?4:2;s=e.bytes(n*r),!t&&n%2!=0&&e.skip(2)}let c=[],l=e.u32();for(let t=0;t<l;t++)c.push(e.string());e.align4(),r.push({indexCount:n,indexType:i,useIndex:a,primitiveType:o,indices:s,passNames:c})}return r}function Ee(e){let t=e.offset;De(e.boundingBox())||(e.offset=t+4,e.boundingBox())}function De(e){let t=[e.center,e.xExtent,e.yExtent,e.zExtent];for(let e of t)if(!Number.isFinite(e.x)||!Number.isFinite(e.y)||!Number.isFinite(e.z)||Math.abs(e.x)>1e7||Math.abs(e.y)>1e7||Math.abs(e.z)>1e7)return!1;let n=e=>Math.hypot(e.x,e.y,e.z);return n(e.xExtent)>1e-6&&n(e.yExtent)>1e-6&&n(e.zExtent)>1e-6}async function Oe(e,t,n){e.u32();let r=e.u32(),i={};for(let a=0;a<r;a++){t>=3&&e.u32();let r=e.string();e.align4();let a=e.u32();t>=3&&(a=a===se.STANDARD?D.STANDARD:a===se.DRACO?D.DRACO:a===se.MESHOPT?D.COMPRESSED:D.UNKNOWN);let o=de(),s=[];if(a===D.STANDARD)Ce(e,o,t),s=Te(e,t);else if(a===D.COMPRESSED)t>=3?(await ie(e,o),s=await ae(e)):(we(e,o,t),s=Te(e,t));else if(a===D.DRACO)throw Error(`[s3m] 骨架 "${r}" 使用 Draco 几何压缩,需接入 draco3d 解码器`);else throw Error(`[s3m] 未知骨架标记 ${a}(${r})`);t>=3&&Ee(e),n?.(` skel`,r,e.offset),i[r]={name:r,vertexPackage:o,indexPackages:s}}if(t<3){let t=e.u32();e.skip(t)}return i}function ke(e){let t=e.u32(),n=e.offset,r=n+t,i=e.u32(),a={};for(let t=0;t<i;t++){let t=e.string();e.align4(n);let r=e.u32(),i=e.u32(),o=e.u32(),s=e.u32(),c=e.u32();a[t]={code:t,level:r,width:i,height:o,compressType:s,pixelFormat:e.u32(),data:e.bytesCopy(c)}}return e.offset=r,a}function Ae(e){let t=e.u32(),n=new TextDecoder(`utf-8`).decode(e.bytes(t));return n?JSON.parse(n):[]}function je(e,t,n,r){let i=t;if((i&1)!=1||(r>=3&&(i=e.u32()),(i&1)!=1))return null;e.u32();let a=e.u32(),o={};for(let t=0;t<a;t++){let t=e.string(),i=n[t],a=e.u32(),s={};if(!i)continue;let c=i.vertexPackage;if(c.instanceIndex===-1){let t=new Float32Array(c.verticesCount||0);for(let n=0;n<a;n++){let r=e.u32(),i=e.u32(),a={batchId:n,segments:[]};s[r]=a;for(let r=0;r<i;r++){let r=e.u32(),i=e.u32();a.segments.push({vertexOffset:r,vertexCount:i}),t.fill(n,r,r+i)}}O(c,`batchId`,new Uint8Array(t.buffer),1,4,0,void 0,`f32`)}else{let t=c.instanceCount,n=new Float32Array(t).fill(-1);for(let i=0;i<a;i++){let a=e.u32(),o=e.u32(),c={instanceIds:[],instanceBatchId:i};s[a]=c;for(let a=0;a<o;a++){let a=e.u32();r>=3&&e.u32(),a>=0&&a<t&&(c.instanceIds.push(a),n[a]=i)}}c.instanceBatchIds=n}i.pickInfo=s,o[t]=s}return o}async function Me(e,t={}){let n=t.inflate??ue,r=t.trace,i=new g(e),a=Number(i.f32().toFixed(2)),o=0;a>=3&&(o=i.u32()),a>=2&&i.u32();let s=i.u32(),c=new Uint8Array(e,i.base+i.offset,s),l;l=a>=3&&o===0?c:await n(c);let u=new g(l.buffer,l.byteOffset??0,l.byteLength),d=u.u32();r?.(`fileOptions`,d,u.offset);let f=me(u,a);r?.(`groupNode`,f.pageLods.length,u.offset);let p=await Oe(u,a,r);r?.(`skeletons`,Object.keys(p).length,u.offset);let m=ke(u);r?.(`textures`,Object.keys(m).length,u.offset);let h=Ae(u);r?.(`materials`,u.offset);let _=je(u,d,p,a);r?.(`pickInfo`,u.offset);let v;if(a>=3){let e=u.string();v=e?JSON.parse(e):void 0}return{version:a,compressedType:o,options:d,groupNode:f,geoPackage:p,textures:m,materials:h,pickInfo:_,extensions:v,bytesRead:u.offset,bytesTotal:u.view.byteLength}}function k(e){return e?e.batchId==null?e.instanceBatchId==null?-1:e.instanceBatchId:e.batchId:-1}function Ne(e){let t=new Map;if(!e)return t;for(let[n,r]of Object.entries(e)){if(!r?.instanceIds?.length)continue;let e=Number(n);if(!Number.isFinite(e))continue;let i=k(r);for(let n of r.instanceIds)t.set(n,{smid:e,batchId:i})}return t}function A(e,t){let n=e?.pickInfo;if(!n||t<0)return{smid:null,segments:[]};for(let[e,r]of Object.entries(n))if(k(r)===t)return{smid:Number(e),segments:r.segments??[]};return{smid:null,segments:[]}}function j(e,t){let n=e?.getAttribute(`position`);if(!n||!t.length)return null;let r=1/0,i=1/0,a=1/0,o=-1/0,s=-1/0,c=-1/0,l=0;for(let e of t){let t=Math.min(e.vertexOffset+e.vertexCount,n.count);for(let u=e.vertexOffset;u<t;u++){let e=n.getX(u),t=n.getY(u),d=n.getZ(u);e<r&&(r=e),e>o&&(o=e),t<i&&(i=t),t>s&&(s=t),d<a&&(a=d),d>c&&(c=d),l++}}if(!l)return null;let u=0,d=e.index;if(d){let e=new Uint8Array(n.count);for(let r of t){let t=Math.min(r.vertexOffset+r.vertexCount,n.count);e.fill(1,r.vertexOffset,t)}let r=d.array;for(let t=0;t<r.length;t+=3)e[r[t]]&&e[r[t+1]]&&e[r[t+2]]&&u++}return{minX:r,minY:i,minZ:a,maxX:o,maxY:s,maxZ:c,count:l,triangles:u}}function Pe(e){let{smid:t,box:n,triangles:r,floorHeight:i=Fe}=e;if(!n)return{smid:t,triangles:r};let a=n.maxZ-n.minZ;return{smid:t,height:M(a,1),baseElevation:M(n.minZ,1),size:[M(n.maxX-n.minX,1),M(n.maxY-n.minY,1)],bboxArea:M((n.maxX-n.minX)*(n.maxY-n.minY),1),floors:Math.max(1,Math.round(a/i)),triangles:n.triangles??r,vertices:n.count,bbox:[[M(n.minX,1),M(n.minY,1),M(n.minZ,1)],[M(n.maxX,1),M(n.maxY,1),M(n.maxZ,1)]]}}function M(e,t){let n=10**t;return Math.round(e*n)/n}var Fe,Ie=c((()=>{Fe=3.2}));Ie();var Le=`SmID`,Re=200,ze=new Set([`smgeometry`,`smindexkey`,`smgeoposition`]);function Be(e){return e.replace(/x'[0-9A-Fa-f]*'/g,`null`).replace(/(\d)[dDlLfF](?=\s*[,}\]])/g,`$1`)}var Ve=class{constructor(e){if(h(this,`dataServiceUrl`,void 0),h(this,`datasourceName`,void 0),h(this,`datasetName`,void 0),h(this,`idField`,void 0),h(this,`_fields`,void 0),h(this,`_chunkSize`,void 0),h(this,`_formatOption`,void 0),h(this,`_fetch`,void 0),h(this,`_cache`,new Map),h(this,`_schema`,null),h(this,`_resolvedFields`,null),h(this,`_format`,null),h(this,`_stats`,{requests:0,bytes:0,ms:0}),!e?.dataServiceUrl)throw Error(`[s3m] AttributeQuery 缺少 dataServiceUrl`);let[t,n]=(e.datasetName?.includes(`:`)?e.datasetName:`DataSource:${e.datasetName??``}`).split(`:`);if(!n)throw Error(`[s3m] datasetName 格式应为 "数据源:数据集",收到 "${e.datasetName}"`);this.dataServiceUrl=e.dataServiceUrl.replace(/\/+$/,``),this.datasourceName=t,this.datasetName=n,this.idField=e.idField??Le,this._fields=e.fields?.length?e.fields:null,this._chunkSize=Math.max(1,e.chunkSize??Re),this._formatOption=e.format??`auto`,this._fetch=e.fetchImpl??globalThis.fetch.bind(globalThis)}get datasetPath(){return`${this.dataServiceUrl}/datasources/name/${encodeURIComponent(this.datasourceName)}/datasets/name/${encodeURIComponent(this.datasetName)}`}get stats(){return{...this._stats}}async loadSchema(){if(this._schema)return this._schema;let e=await this._fetch(`${this.datasetPath}/fields.json`);if(this._stats.requests++,!e.ok)throw Error(`[s3m] 读取字段表失败 ${e.status}:${this.datasetPath}/fields.json`);let t=await e.json();return this._schema=(t.fieldNames??[]).map(e=>({name:e})),this._schema}hasCached(e){return this._cache.has(e)}clearCache(){this._cache.clear(),this._stats={requests:0,bytes:0,ms:0}}async queryBySmids(e){let t=[...new Set(e.filter(e=>Number.isFinite(e)))],n=new Map;for(let e of t){let t=this._cache.get(e);t&&n.set(e,t)}let r=t.filter(e=>!this._cache.has(e));if(!r.length)return n;let i=await this._resolveFields();for(let e=0;e<r.length;e+=this._chunkSize){let t=r.slice(e,e+this._chunkSize),a=await this._queryChunk(t,i);for(let[e,t]of a)this._cache.set(e,t),n.set(e,t)}return n}async _resolveFields(){if(this._resolvedFields)return this._resolvedFields;if(this._fields)return this._resolvedFields=this._fields,this._resolvedFields;let e=(await this.loadSchema()).map(e=>e.name).filter(e=>!ze.has(e.toLowerCase()));return this._resolvedFields=e.length?e:[this.idField],this._resolvedFields}async _resolveFormat(){if(this._format)return this._format;if(this._formatOption!==`auto`)return this._format=this._formatOption;try{let e=await this._fetch(`${this.datasetPath}/features.json?fromIndex=0&toIndex=1`);this._stats.requests++;let t=await e.json(),n=String(t.geometryType??``).toUpperCase().includes(`MODEL`);this._format=n?`fastjson`:`json`}catch{this._format=`fastjson`}return this._format}async _queryChunk(e,t){let n={getFeatureMode:`SQL`,datasetNames:[`${this.datasourceName}:${this.datasetName}`],queryOption:`ATTRIBUTE`,queryParameter:{attributeFilter:`${this.idField} IN (${e.join(`,`)})`,fields:t}},r=await this._resolveFormat(),i=await this._post(n,r),a;try{a=this._parse(i)}catch(e){if(r!==`fastjson`)throw e;a=this._parse(await this._post(n,`json`))}if(a.error)throw Error(`[s3m] 属性查询失败:${a.error.errorMsg??`未知错误`}`);let o=new Map;for(let e of a.features??[]){let t=e.fieldNames??[],n=e.fieldValues??[],r={};for(let e=0;e<t.length;e++)r[t[e]]=n[e];let i=r[this.idField]??e.ID,a=Number(i);Number.isFinite(a)&&o.set(a,r)}return o}async _post(e,t){let n=performance.now(),r=await this._fetch(`${this.dataServiceUrl}/featureResults.${t}?returnContent=true`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),i=await r.text();if(this._stats.requests++,this._stats.bytes+=i.length,this._stats.ms+=Math.round(performance.now()-n),!r.ok)throw Error(`[s3m] 属性查询失败 ${r.status}:${i.slice(0,200)}`);return i}_parse(e){return JSON.parse(e.includes(`x'`)||/\d[dDlL](?=\s*[,}\]])/.test(e)?Be(e):e)}},He=6378137;function Ue(e,t,n=0){let r=Math.sin(t*Math.PI/180),i=(180+e)/360,a=.5-.25*Math.log((1+r)/(1-r))/Math.PI,o=1/(2*Math.PI*He)/Math.cos(t*Math.PI/180);return{x:i,y:a,z:n*o,meterInMercator:o,altitude:n}}function We(e,t){return[e*360-180,Math.atan(Math.sinh(Math.PI*(1-2*t)))*180/Math.PI]}function Ge(e,t,n,r=0){return e?e.worldFromLngLat(t,n,r):Ue(t,n,r)}function Ke(e,t,n){return e?e.lngLatFromWorld(t,n):We(t,n)}function qe(e,t,n,r){let i=e|t<<8,a=i>>11&31,o=i>>5&63,s=i&31;return n[r+0]=a<<3|a>>2,n[r+1]=o<<2|o>>4,n[r+2]=s<<3|s>>2,n[r+3]=255,i}function Je(e,t,n,r){let i=new Uint8Array(16),a=qe(t[n+0],t[n+1],i,0),o=qe(t[n+2],t[n+3],i,4);for(let e=0;e<3;e++){let t=i[e],n=i[4+e];r&&a<=o?(i[8+e]=(t+n)/2,i[12+e]=0):(i[8+e]=(2*t+n)/3,i[12+e]=(t+2*n)/3)}i[11]=255,i[15]=r&&a<=o?0:255;let s=new Uint8Array(16);for(let e=0;e<4;++e){let r=t[n+4+e];s[4*e+0]=r&3,s[4*e+1]=r>>2&3,s[4*e+2]=r>>4&3,s[4*e+3]=r>>6&3}for(let t=0;t<16;++t){let n=4*s[t];for(let r=0;r<4;++r)e[4*t+r]=i[n+r]}}function Ye(e,t,n){for(let r=0;r<8;++r){let i=t[n+r],a=i&15,o=i&240;e[8*r+3]=a|a<<4,e[8*r+7]=o|o>>4}}function Xe(e,t,n){let r=t[n+0],i=t[n+1],a=new Uint8Array(8);if(a[0]=r,a[1]=i,r<=i){for(let e=1;e<5;++e)a[1+e]=((5-e)*r+e*i)/5;a[6]=0,a[7]=255}else for(let e=1;e<7;++e)a[1+e]=((7-e)*r+e*i)/7;let o=new Uint8Array(16),s=n+2,c=0;for(let e=0;e<2;++e){let e=0;for(let n=0;n<3;++n){let r=t[s++];e|=r<<8*n}for(let t=0;t<8;++t){let n=e>>3*t&7;o[c++]=n}}for(let t=0;t<16;++t)e[4*t+3]=a[o[t]]}function Ze(e,t,n,r){let i=0;r&6&&(i=8),Je(e,t,n+i,(r&tt)!==0),(r&nt)===0?(r&rt)!==0&&Xe(e,t,n):Ye(e,t,n)}function Qe(e){let t=e.byteOffset&-2,n=e.byteLength+(e.byteOffset&1)>>1;return new Uint16Array(e.buffer,t,n)}function $e(e,t,n,r){let i=new Uint16Array(4),a=e,o=0,s=0,c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=t/4,g=n/4;for(let e=0;e<g;e++)for(let n=0;n<h;n++)c=4*((g-e)*h+n),i[0]=r[c],i[1]=r[c+1],l=i[0]&31,u=i[0]&2016,d=i[0]&63488,f=i[1]&31,p=i[1]&2016,m=i[1]&63488,i[2]=5*l+3*f>>3|5*u+3*p>>3&2016|5*d+3*m>>3&63488,i[3]=5*f+3*l>>3|5*p+3*u>>3&2016|5*m+3*d>>3&63488,o=r[c+2],s=e*4*t+n*4,a[s]=i[o&3],a[s+1]=i[o>>2&3],a[s+2]=i[o>>4&3],a[s+3]=i[o>>6&3],s+=t,a[s]=i[o>>8&3],a[s+1]=i[o>>10&3],a[s+2]=i[o>>12&3],a[s+3]=i[o>>14&3],o=r[c+3],s+=t,a[s]=i[o&3],a[s+1]=i[o>>2&3],a[s+2]=i[o>>4&3],a[s+3]=i[o>>6&3],s+=t,a[s]=i[o>>8&3],a[s+1]=i[o>>10&3],a[s+2]=i[o>>12&3],a[s+3]=i[o>>14&3];return a}function et(e,t,n,r,i){let a=(i&tt)===0?16:8,o=0;for(let s=0;s<n;s+=4)for(let c=0;c<t;c+=4){let l=new Uint8Array(64);Ze(l,r,o,i);let u=0;for(let r=0;r<4;++r)for(let i=0;i<4;++i){let a=c+i,o=s+r;if(a<t&&o<n){let r=4*(t*(n-o)+a);for(let t=0;t<4;++t)e[r++]=l[u++]}else u+=4}o+=a}}var tt,nt,rt,it,at,ot=c((()=>{tt=1,nt=2,rt=4,it=32,at={decode(e,t,n,r,i){if(e==null||r==null||n===0||t===0)return;let a=i>11||i===5?rt:33;a&tt&&a&it?$e(Qe(e),t,n,Qe(r)):et(e,t,n,r,a)}}})),st=l(((e,t)=>{t.exports={}})),ct=u({default:()=>P});function lt(){let e=ut;if(typeof atob==`function`){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}return Uint8Array.from(Buffer.from(e,`base64`))}var ut,N,dt,P,F,I,L,ft,R,pt,mt,ht,z,gt,_t,vt,yt,bt,B,xt,V,St,Ct,wt,Tt,Et,Dt,Ot,H,kt,At,jt,Mt,Nt,Pt,Ft,U,It,W,Lt,G,K,q,Rt,zt,Bt,Vt,Ht=c((()=>{if(ut=`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aigCACICDQALIAcgADYCECAAIAQ2AhgLIAAgADYCDCAAIAA2AggPCyAEKAIIIgEgADYCDCAEIAA2AgggAEEANgIYIAAgBDYCDCAAIAE2AggLCzABAX8CQCAARQ0AIABBfGooAgAiAEEDcSIBQQFGDQAgAEF4cUEEQQggARtrDwtBAAtZAQF/IAAgAC0ASiIBQX9qIAFyOgBKIAAoAgAiAUEIcQRAIAAgAUEgcjYCAEF/DwsgAEIANwIEIAAgACgCLCIBNgIcIAAgATYCFCAAIAEgACgCMGo2AhBBAAujAgACQAJAIAFBFEsNACABQXdqIgFBCUsNAAJAAkACQAJAAkACQAJAAkAgAUEBaw4JAQIJAwQFBgkHAAsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgACACQQARDwALDwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC0oBA38gACgCACwAAEFQakEKSQRAA0AgACgCACIBLAAAIQMgACABQQFqNgIAIAMgAkEKbGpBUGohAiABLAABQVBqQQpJDQALCyACCxEAIABFBEBBAA8LIAAgARAsC7QKARx/IwBB8ARrIgUkACAAQeABaiEOIAAoAqQBIQ8CQCAAKALkASIMIANBAWpBfnEiFkEBdCIGTw0AAkAgACgC6AEgBk8NACAOIAYgDEEBaiAGRkEIEAYNACAAQQE6AOwBDAELIAAgBjYC5AELIAAoAgwtABEEQCAEQQFqQX5xIRcgAEHwAGohGiAAQUBrIRggAEEoaiEbIABBEGohECACQQJ2IAZrQQJ0IRxBACEGQQAhDANAIBcEQCABIBRBAnRqKAIAIQtBACERA0AgFgRAIBFBAXEhHSARIARJIRVBACESA0AgACgC5AEgEkEBdCIITQRAIAVBtgg2AlAgBUHOBDYCVCAFQasNNgJYIAVB8ABqIAVB0ABqEAMgBUHwAGoQBAsgDigCACAIQQN0aiEHAkACQAJ/IB0EQCAHLwEADAELIAcgECAbEAUiAkECdiIJQQNxIAJBBHZBDHFyOwEAIAlBDHEgAkEDcXILIgJBA3EiCUEDSw0AAkACQAJAIAlBAWsOAwEDAgALIBAgGBAFIAZqIgZBACAPIAYgD0kbayEGCyAHIAY7AQIMAgsgByAMOwECIAwhBgwBCyAHLwECIQYLIAAoAqQBIAZNBEAgBUG2CDYCQCAFQc4ENgJEIAVBqw02AkggBUHwAGogBUFAaxADIAVB8ABqEAQLIAUgACgCoAEgBkECdGooAgAiCTYCaCAQIBoQBSEeIAJBAnZBP3EiCgRAIBAgGBAFIAZqIgJBACAPIAIgD0kbayEGCyAAKALkASIHIAhBAXIiAk0EQCAFQbYINgIwIAVBzgQ2AjQgBUGrDTYCOCAFQfAAaiAFQTBqEAMgBUHwAGoQBCAAKALkASEHCyAOKAIAIgggAkEDdCINai8BAiEMIBIgA0kgFXEhFSAHIAJNBH8gBUG2CDYCICAFQc4ENgIkIAVBqw02AiggBUHwAGogBUEgahADIAVB8ABqEAQgDigCAAUgCAsgDWogBjsBAiAAKAKkASAGTQRAIAVBtgg2AhAgBUHOBDYCFCAFQasNNgIYIAVB8ABqIAVBEGoQAyAFQfAAahAECyAFIAAoAqABIAZBAnRqKAIAIgg2AmQgFQRAIApBAXYhEyAIQf8BcSICQQRqIAlB/wFxIgdPIAdBA2ogAk9xIgIhB0EBIQoCQCACRQ0AA0BBAEEAIAIgBUHkAGogCmotAAAiAkEEaiAFQegAaiAKai0AACIHSRsgB0EDaiACSRsiAkEARyEHIAJFDQEgCkEBaiIKQQNJDQALCyAJQRh2IR8gCUEQdiEKIAlBCHYhDSAIQRh2ISAgE0EBcyETIAlBA3QhGQJ/IAdFBEAgBSANQQN0QfABcSAIQQl2Qf8AcXI6AG0gBSAZQfABcSAIQf4BcUEBdnI6AGwgCEERdkH/AHEhByAKQQN0QfABcQwBCyAFIAhBCHYgDWtBB3EgDUEDdHI6AG0gBSAIIAlrQQdxIBlyOgBsIApBA3QhByAIQRB2IAprQQdxCyEIIAUgByAIcjoAbiAFIBMgH0EFdCACQQF0ciAgQQJ0cnI6AG8gCyAFKAJsNgIAIAAoArQBIB5BAXQgE3IiAk0EQCAFQbYINgIAIAVBzgQ2AgQgBUGrDTYCCCAFQfAAaiAFEAMgBUHwAGoQBAsgCyAAKAKwASACQQJ0aigCADYCBAsgC0EIaiELIBJBAWoiEiAWRw0ACwsgCyAcaiELIBFBAWoiESAXRw0ACwsgFEEBaiIUIAAoAgwtABFJDQALCyAFQfAEaiQAQQELiQUBAn8jAEHQBGsiASQAIABBADYCACAAKALgASICBEACQCACQQdxBEAgAUG2CDYCQCABQckPNgJEIAFBwgs2AkggAUHQAGogAUFAaxADIAFB0ABqEAQMAQsgAkEAQQBBAUHgFigCAEHQEygCABEAABoLIABCADcC4AEgAEEANgLoAQsgAEEAOgDsASAAKALQASICBEACQCACQQdxBEAgAUG2CDYCMCABQckPNgI0IAFBwgs2AjggAUHQAGogAUEwahADIAFB0ABqEAQMAQsgAkEAQQBBAUHgFigCAEHQEygCABEAABoLIABCADcC0AEgAEEANgLYAQsgAEEAOgDcASAAKALAASICBEACQCACQQdxBEAgAUG2CDYCICABQckPNgIkIAFBwgs2AiggAUHQAGogAUEgahADIAFB0ABqEAQMAQsgAkEAQQBBAUHgFigCAEHQEygCABEAABoLIABCADcCwAEgAEEANgLIAQsgAEEAOgDMASAAKAKwASICBEACQCACQQdxBEAgAUG2CDYCECABQckPNgIUIAFBwgs2AhggAUHQAGogAUEQahADIAFB0ABqEAQMAQsgAkEAQQBBAUHgFigCAEHQEygCABEAABoLIABCADcCsAEgAEEANgK4AQsgAEEAOgC8ASAAKAKgASICBEACQCACQQdxBEAgAUG2CDYCACABQckPNgIEIAFBwgs2AgggAUHQAGogARADIAFB0ABqEAQMAQsgAkEAQQBBAUHgFigCAEHQEygCABEAABoLIABCADcCoAEgAEEANgKoAQsgAEEAOgCsASAAQYgBahAHIABB8ABqEAcgAEHYAGoQByAAQUBrEAcgAEEoahAHIAFB0ARqJAALrQIBBX8jAEGgBGsiASQAIAAoAggiBEF/akGAwABPBEAgAUG2CDYCECABQaQTNgIUIAFB2ws2AhggAUEgaiABQRBqEAMgAUEgahAECyAAIAQ2AgAgACgCFCIDRQRAQQAhA0G0ARAQIgIEQCAC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hHhxDQIgAEEEaiEAIAFBfGoiAUEDSw0ACyACIQEgAyEACyABRQ0BCwNAIAAtAABFDQIgAEEBaiEAIAFBf2oiAQ0ACwtBAA8LIAALxgIBBn8jAEEgayIDJAAgAyAAKAIcIgU2AhAgACgCFCEEIAMgAjYCHCADIAE2AhggAyAEIAVrIgE2AhQgASACaiEGQQIhBSADQRBqIQEDQAJAAn8gBgJ/An9BACAAKAI8IAEgBSADQQxqEAIiBEUNABpB+B4gBDYCAEF/CwRAIANBfzYCDEF/DAELIAMoAgwLIgRGBEAgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIARBf0oNASAAQQA2AhwgAEIANwMQIAAgACgCAEEgcjYCAEEAIAVBAkYNABogAiABKAIEawshACADQSBqJAAgAA8LIAFBCGogASAEIAEoAgQiB0siCBsiASAEIAdBACAIG2siByABKAIAajYCACABIAEoAgQgB2s2AgQgBiAEayEGIAUgCGshBQwAAAsAC34BA38jAEEQayIBJAAgAUEKOgAPAkAgACgCECICRQRAIAAQFw0BIAAoAhAhAgsCQCAAKAIUIgMgAk8NACAALABLQQpGDQAgACADQQFqNgIUIANBCjoAAAwBCyAAIAFBD2pBASAAKAIkEQEAQQFHDQAgAS0ADxoLIAFBEGokAAuFAQECfyMAQaABayICJAAgAkEIakHAEkGQARAOIAIgADYCNCACIAA2AhwgAkF+IABrIgNB/////wdB/////wcgA0sbIgM2AjggAiAAIANqIgA2AiQgAiAANgIYIAJBCGogARArIAMEQCACKAIcIgAgACACKAIYRmtBADoAAAsgAkGgAWokAAsyAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQDiAAIAAoAhQgAWo2AhQgAguDAQIDfwF+AkAgAEKAgICAEFQEQCAAIQUMAQsDQCABQX9qIgEgACAAQgqAIgVCCn59p0EwcjoAACAAQv////+fAVYhAiAFIQAgAg0ACwsgBaciAgRAA0AgAUF/aiIBIAIgAkEKbiIDQQpsa0EwcjoAACACQQlLIQQgAyECIAQNAAsLIAELNAAgAFBFBEADQCABQX9qIgEgAKdBD3FBsBJqLQAAIAJyOgAAIABCBIgiAEIAUg0ACwsg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`,dt=function(e){return typeof document>`u`?e:(N||(N=document.createElement(`a`)),N.href=e,N.href=N.href,N.href)},typeof WebAssembly<`u`){for(I in P=P===void 0?{}:P,F={},P)P.hasOwnProperty(I)&&(F[I]=P[I]);for(I in L=[],ft=!1,R=!1,pt=!1,mt=!1,ht=!1,ft=typeof window==`object`,R=typeof importScripts==`function`,mt=typeof process==`object`&&typeof process.versions==`object`&&typeof process.versions.node==`string`,pt=mt&&!ft&&!R,ht=!ft&&!pt&&!R,z=``,pt?(z=typeof __dirname<`u`?__dirname+`/`:``,gt=function(e,t){return vt||(vt=st()),yt||(yt=st()),e=yt.normalize(e),vt.readFileSync(e,t?null:`utf8`)},_t=function(t){var n=gt(t,!0);return n.buffer||(n=new Uint8Array(n)),e(n.buffer),n},process.argv.length>1&&process.argv[1].replace(/\\/g,`/`),L=process.argv.slice(2),typeof module<`u`&&(module.exports=P),process.on(`uncaughtException`,function(e){if(!(e instanceof w))throw e}),process.on(`unhandledRejection`,m),P.inspect=function(){return`[Emscripten Module object]`}):ht?(typeof read<`u`&&(gt=function(e){return read(e)}),_t=function(t){var n;return typeof readbuffer==`function`?new Uint8Array(readbuffer(t)):(n=read(t,`binary`),e(typeof n==`object`),n)},typeof scriptArgs<`u`?L=scriptArgs:typeof arguments<`u`&&(L=arguments),typeof print<`u`&&(typeof console>`u`&&(console={}),console.log=print,console.warn=console.error=typeof printErr<`u`?printErr:print)):(ft||R)&&(R?z=self.location.href:document.currentScript&&(z=document.currentScript.src),z=z.indexOf(`blob:`)===0?``:z.substr(0,z.lastIndexOf(`/`)+1),gt=function(e){var t=new XMLHttpRequest;return t.open(`GET`,e,!1),t.send(null),t.responseText},R&&(_t=function(e){var t=new XMLHttpRequest;return t.open(`GET`,e,!1),t.responseType=`arraybuffer`,t.send(null),new Uint8Array(t.response)})),bt=P.print||console.log.bind(console),B=P.printErr||console.warn.bind(console),F)F.hasOwnProperty(I)&&(P[I]=F[I]);F=null,P.arguments&&(L=P.arguments),P.thisProgram&&P.thisProgram,P.quit&&P.quit,xt=lt(),P.noExitRuntime&&P.noExitRuntime,typeof WebAssembly!=`object`&&B(`no native wasm support detected`),St=new WebAssembly.Table({initial:6,maximum:6,element:`anyfunc`}),Ct=!1;function e(e,t){e||m(`Assertion failed: `+t)}wt=typeof TextDecoder<`u`?new TextDecoder(`utf8`):void 0;function t(e,t,n){for(var r=t+n,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.subarray&&wt)return wt.decode(e.subarray(t,i));for(var a=``;t<i;){var o=e[t++];if(!(o&128))a+=String.fromCharCode(o);else{var s=e[t++]&63;if((o&224)==192)a+=String.fromCharCode((o&31)<<6|s);else{var c=e[t++]&63;if(o=(o&240)==224?(o&15)<<12|s<<6|c:(o&7)<<18|s<<12|c<<6|e[t++]&63,o<65536)a+=String.fromCharCode(o);else{var l=o-65536;a+=String.fromCharCode(55296|l>>10,56320|l&1023)}}}}return a}function n(e,n){return e?t(Ot,e,n):``}typeof TextDecoder<`u`&&new TextDecoder(`utf-16le`),Tt=65536;function r(e,t){return e%t>0&&(e+=t-e%t),e}function i(e){Et=e,P.HEAP8=Dt=new Int8Array(e),P.HEAP16=new Int16Array(e),P.HEAP32=H=new Int32Array(e),P.HEAPU8=Ot=new Uint8Array(e),P.HEAPU16=new Uint16Array(e),P.HEAPU32=new Uint32Array(e),P.HEAPF32=new Float32Array(e),P.HEAPF64=new Float64Array(e)}kt=5247584,At=4544,jt=P.TOTAL_MEMORY||16777216,V=P.wasmMemory?P.wasmMemory:new WebAssembly.Memory({initial:jt/Tt}),V&&(Et=V.buffer),jt=Et.byteLength,i(Et),H[At>>2]=kt;function a(e){for(;e.length>0;){var t=e.shift();if(typeof t==`function`)t();else{var n=t.func;typeof n==`number`?t.arg===void 0?P.dynCall_v(n):P.dynCall_vi(n,t.arg):n(t.arg===void 0?null:t.arg)}}}Mt=[],Nt=[],Pt=[],Ft=[];function o(){if(P.preRun)for(typeof P.preRun==`function`&&(P.preRun=[P.preRun]);P.preRun.length;)u(P.preRun.shift());a(Mt)}function s(){a(Nt)}function c(){a(Pt)}function l(){if(P.postRun)for(typeof P.postRun==`function`&&(P.postRun=[P.postRun]);P.postRun.length;)d(P.postRun.shift());a(Ft)}function u(e){Mt.unshift(e)}function d(e){Ft.unshift(e)}U=0,It=null,W=null;function f(e){U++,P.monitorRunDependencies&&P.monitorRunDependencies(U)}function p(e){if(U--,P.monitorRunDependencies&&P.monitorRunDependencies(U),U==0&&(It!==null&&(clearInterval(It),It=null),W)){var t=W;W=null,t()}}P.preloadedImages={},P.preloadedAudios={};function m(e){throw P.onAbort&&P.onAbort(e),e+=``,bt(e),B(e),Ct=!0,e=`abort(`+e+`). Build with -s ASSERTIONS=1 for more info.`,new WebAssembly.RuntimeError(e)}Lt=`data:application/octet-stream;base64,`;function h(e){return String.prototype.startsWith?e.startsWith(Lt):e.indexOf(Lt)===0}G=`crunch.wasm`,h(G)||(G=dt(`./S3M_module/S3MTiles/ThirdParty/crunch.wasm`));function g(){try{if(xt)return new Uint8Array(xt);if(_t)return _t(G);throw`both async and sync fetching of the wasm failed`}catch(e){m(e)}}function _(){return!xt&&(ft||R)&&typeof fetch==`function`?fetch(G,{credentials:`same-origin`}).then(function(e){if(!e.ok)throw`failed to load wasm binary file at '`+G+`'`;return e.arrayBuffer()}).catch(function(){return g()}):new Promise(function(e,t){e(g())})}function v(){var e={env:Rt,wasi_unstable:Rt};function t(e,t){P.asm=e.exports,p(`wasm-instantiate`)}f(`wasm-instantiate`);function n(e){t(e.instance)}function r(t){return _().then(function(t){return WebAssembly.instantiate(t,e)}).then(t,function(e){B(`failed to asynchronously prepare wasm: `+e),m(e)})}function i(){if(!xt&&typeof WebAssembly.instantiateStreaming==`function`&&!h(G)&&typeof fetch==`function`)fetch(G,{credentials:`same-origin`}).then(function(t){return WebAssembly.instantiateStreaming(t,e).then(n,function(e){B(`wasm streaming compile failed: `+e),B(`falling back to ArrayBuffer instantiation`),r(n)})});else return r(n)}if(P.instantiateWasm)try{return P.instantiateWasm(e,t)}catch(e){return B(`Module.instantiateWasm callback failed with error: `+e),!1}return i(),{}}Nt.push({func:function(){Bt()}});function y(){return Dt.length}function b(e,t,n){Ot.set(Ot.subarray(t,t+n),e)}function x(e){try{return V.grow(e-Et.byteLength+65535>>16),i(V.buffer),1}catch{}}function S(e){var t=y(),n=65536,i=2147483648-n;if(e>i)return!1;for(var a=Math.max(t,16777216);a<e;)a=a<=536870912?r(2*a,n):Math.min(r((3*a+2147483648)/4,n),i);return!!x(a)}K={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(e,t){for(var n=0,r=e.length-1;r>=0;r--){var i=e[r];i===`.`?e.splice(r,1):i===`..`?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n;n--)e.unshift(`..`);return e},normalize:function(e){var t=e.charAt(0)===`/`,n=e.substr(-1)===`/`;return e=K.normalizeArray(e.split(`/`).filter(function(e){return!!e}),!t).join(`/`),!e&&!t&&(e=`.`),e&&n&&(e+=`/`),(t?`/`:``)+e},dirname:function(e){var t=K.splitPath(e),n=t[0],r=t[1];return!n&&!r?`.`:(r&&(r=r.substr(0,r.length-1)),n+r)},basename:function(e){if(e===`/`)return`/`;var t=e.lastIndexOf(`/`);return t===-1?e:e.substr(t+1)},extname:function(e){return K.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return K.normalize(e.join(`/`))},join2:function(e,t){return K.normalize(e+`/`+t)}},q={buffers:[null,[],[]],printChar:function(e,n){var r=q.buffers[e];n===0||n===10?((e===1?bt:B)(t(r,0)),r.length=0):r.push(n)},varargs:0,get:function(e){return q.varargs+=4,H[q.varargs-4>>2]},getStr:function(){return n(q.get())},get64:function(){var e=q.get();return q.get(),e},getZero:function(){q.get()}};function C(e,t,n,r){try{for(var i=0,a=0;a<n;a++){for(var o=H[t+a*8>>2],s=H[t+(a*8+4)>>2],c=0;c<s;c++)q.printChar(e,Ot[o+c]);i+=s}return H[r>>2]=i,0}catch(e){return typeof FS<`u`&&e instanceof FS.ErrnoError||m(e),e.errno}}Rt={a:b,b:S,c:C,memory:V,table:St},zt=v(),P.asm=zt,Bt=P.___wasm_call_ctors=function(){return P.asm.d.apply(null,arguments)},P._malloc=function(){return P.asm.e.apply(null,arguments)},P._free=function(){return P.asm.f.apply(null,arguments)},P._crn_get_width=function(){return P.asm.g.apply(null,arguments)},P._crn_get_height=function(){return P.asm.h.apply(null,arguments)},P._crn_get_levels=function(){return P.asm.i.apply(null,arguments)},P._crn_get_dxt_format=function(){return P.asm.j.apply(null,arguments)},P._crn_get_bytes_per_block=function(){return P.asm.k.apply(null,arguments)},P._crn_get_uncompressed_size=function(){return P.asm.l.apply(null,arguments)},P._crn_decompress=function(){return P.asm.m.apply(null,arguments)},P.asm=zt;function w(e){this.name=`ExitStatus`,this.message=`Program terminated with exit(`+e+`)`,this.status=e}W=function e(){Vt||T(),Vt||(W=e)};function T(e){if(e=e||L,U>0||(o(),U>0))return;function t(){Vt||(Vt=!0,!Ct&&(s(),c(),P.onRuntimeInitialized&&P.onRuntimeInitialized(),l()))}P.setStatus?(P.setStatus(`Running...`),setTimeout(function(){setTimeout(function(){P.setStatus(``)},1),t()},1)):t()}if(P.run=T,P.preInit)for(typeof P.preInit==`function`&&(P.preInit=[P.preInit]);P.preInit.length>0;)P.preInit.pop()();T()}}));function Ut(e){return!!e.asm&&Object.keys(e.asm).length>0}async function Wt(){return qt||(qt=(async()=>{let e=(await Promise.resolve().then(()=>(Ht(),ct))).default;return Ut(e)||await new Promise(t=>{e.onRuntimeInitialized=()=>t();let n=()=>{Ut(e)?t():setTimeout(n,8)};n()}),e})()),qt}function Gt(e){return e.length>=2&&e[0]===Jt[0]&&e[1]===Jt[1]}async function Kt(e){let t=e.byteLength;if(!t)throw Error(`[s3m] CRN 数据为空`);if(!Gt(e))throw Error(`[s3m] 数据没有 CRN 头(Hx),不是 crunch 负载`);let n=await Wt(),r=n._malloc(t);if(!r)throw Error(`[s3m] crunch 分配源数据失败`);try{n.HEAPU8.set(e,r);let i=n._crn_get_dxt_format(r,t),a=i===0?1:i===1?3:i===2?5:0;if(!a)throw Error(`[s3m] 不是可识别的 CRN 数据(dxtFormat=${i})`);let o=n._crn_get_width(r,t),s=n._crn_get_height(r,t),c=n._crn_get_levels(r,t);if(!(o>0)||!(s>0))throw Error(`[s3m] CRN 尺寸异常:${o}×${s}`);let l=a===1?8:16,u=Math.max(1,o>>2)*Math.max(1,s>>2)*l,d=n._malloc(u);if(!d)throw Error(`[s3m] crunch 分配输出缓冲失败`);try{return n._crn_decompress(r,t,d,u,0,1),{width:o,height:s,levels:c,dxtFormat:a,data:new Uint8Array(n.HEAPU8.subarray(d,d+u))}}finally{n._free(d)}}finally{n._free(r)}}var qt,Jt,Yt=c((()=>{qt=null,Jt=[72,120]}));function Xt(e){switch(e){case 17:return`dxt1`;case 18:case 19:return`dxt3`;case 20:return`dxt4`;case 21:return`dxt5`;case 25:return`webp`;case 12:case 13:case 10:case 11:case 14:case 28:return`raw`;default:return null}}function Zt(e){switch(e){case J.DXT1_RGB:case J.DXT1_RGBA:return`dxt1`;case J.DXT3:return`dxt3`;case J.DXT5:return`dxt5`;case J.WEBP:return`webp`;case J.CRN:case J.CRN_DXT5:return`crn`;case J.KTX2:return`ktx2`;default:return null}}function Qt(e,t){return en.has(e)?`crn`:Zt(e)||(Xt(t)??`unknown`)}function $t(e){return e===`dxt1`?17:21}var J,en,tn=c((()=>{J={NONE:0,DXT1_RGB:33776,DXT1_RGBA:33777,DXT3:33778,DXT5:33779,WEBP:38e3,CRN:38001,KTX2:38002,CRN_DXT5:5e4},en=new Set([26,27])}));function nn(e){cn=Math.max(1,e|0)}function rn(e,n=!0){return e.wrapS=t.RepeatWrapping,e.wrapT=t.RepeatWrapping,e.magFilter=t.LinearFilter,e.minFilter=t.LinearMipmapLinearFilter,e.generateMipmaps=!0,e.anisotropy=cn,n&&(e.colorSpace=t.SRGBColorSpace),e.flipY=!1,e.needsUpdate=!0,e}function an(e){let{width:n,height:r,pixelFormat:i,data:a}=e,o=new Uint8Array(n*r*4);return at.decode(o,n,r,a,i),new t.DataTexture(o,n,r,t.RGBAFormat,t.UnsignedByteType)}function on(e){let{width:n,height:r,pixelFormat:i,data:a}=e,o=new Uint8Array(n*r*4),s=i===Y.RGBA||i===Y.BGRA||i===Y.ARGB||i===Y.ABGR,c=i===Y.BGR||i===Y.BGRA,l=i===Y.ARGB||i===Y.ABGR,u=s?4:3;for(let e=0,t=0,i=0;e<n*r;e++,t+=u,i+=4){let e=l?t+1:t;o[i]=c?a[e+2]:a[e],o[i+1]=a[e+1],o[i+2]=c?a[e]:a[e+2],o[i+3]=s?a[l?t:t+3]:255}return new t.DataTexture(o,n,r,t.RGBAFormat,t.UnsignedByteType)}async function sn(e){if(!e||!e.width||!e.height)return{texture:null,decoded:`empty`};let n=Qt(e.compressType??0,e.pixelFormat);if(n===`crn`)try{let t=await Kt(e.data);return{texture:rn(an({width:t.width,height:t.height,pixelFormat:t.dxtFormat===1?17:21,data:t.data})),decoded:`crn->dxt${t.dxtFormat}`}}catch(e){return console.warn(`[s3m] CRN 转码失败:`,e),{texture:null,decoded:`crn(failed)`}}if(n===`dxt1`||n===`dxt3`||n===`dxt4`||n===`dxt5`)return{texture:rn(an({...e,pixelFormat:$t(n)})),decoded:n};if(n===`webp`){let n=new Blob([e.data],{type:`image/webp`}),r=await createImageBitmap(n),i=new t.Texture(r);return i.needsUpdate=!0,{texture:rn(i),decoded:`webp`}}return n===`raw`?{texture:rn(on(e)),decoded:`raw`}:{texture:null,decoded:`unsupported(${e.compressType}/${e.pixelFormat})`}}var Y,cn,ln=c((()=>{ot(),Yt(),tn(),Y={RGB:10,BGR:11,ARGB:12,ABGR:13,BGRA:14,RGBA:28,WEBP:25,DXT1:17,DXT3:19,DXT4:20,DXT5:21,CRN_DXT5:26,STANDARD_CRN:27},cn=1}));function un(){return{uMode:{value:X.TEXTURE},uColorA:{value:new t.Color(`#dfe6ee`)},uColorB:{value:new t.Color(`#1d4ed8`)},uColorC:{value:new t.Color(`#fbbf24`)},uTime:{value:0},uHeightMin:{value:0},uHeightMax:{value:120},uFloorHeight:{value:3.2},uDim:{value:0},uDimFactor:{value:.42},uSelColor:{value:new t.Color(`#22d3ee`)},uSelMix:{value:0},uSelMode:{value:1},uSelOpacity:{value:.65},uSelEmissive:{value:.35},uSelElevation:{value:0},uFilterMinZ:{value:-99999},uFilterMaxZ:{value:99999},uFilterHeightActive:{value:0},uRoofThreshold:{value:.65},uTexMix:{value:0}}}function dn(e){let n=e.uniforms,r=new t.MeshStandardMaterial({color:e.color??new t.Color(16777215),map:e.map??null,roughness:e.roughness??.95,metalness:0,side:e.side??t.DoubleSide,transparent:!!e.transparent,opacity:e.opacity??1,depthWrite:!e.transparent,flatShading:e.flatShading!==!1,vertexColors:!1}),i={value:-1},a={value:0},o={value:Q},s={value:1},c={value:0};return r.onBeforeCompile=e=>{Object.assign(e.uniforms,n,{uSelBatch:i,uSelWhole:a,uBatchTex:o,uBatchTexWidth:s,uBatchTexActive:c}),e.vertexShader=e.vertexShader.replace(`#include <common>`,`#include <common>\n${_n}`).replace(`#include <begin_vertex>`,`#include <begin_vertex>\n${vn}`).replace(`#include <worldpos_vertex>`,yn),e.fragmentShader=e.fragmentShader.replace(`#include <common>`,`#include <common>\n${bn}`).replace(`#include <color_fragment>`,`#include <color_fragment>\n${xn}`).replace(`#include <emissivemap_fragment>`,`#include <emissivemap_fragment>\n${Sn}`)},r.customProgramCacheKey=()=>`s3m-styled`,r.userData.uSelBatch=i,r.userData.uSelWhole=a,r.userData.uBatchTex=o,r.userData.uBatchTexWidth=s,r.userData.uBatchTexActive=c,r.userData.isStyled=!0,r}function fn(e,n=.9){let r=new t.ShaderMaterial({uniforms:{uSelBatch:{value:-1},uSelWhole:{value:0},uWidth:{value:n},uElevation:{value:0},uBatchTex:{value:Q},uBatchTexWidth:{value:1},uBatchTexActive:{value:0},uColor:{value:e.uSelColor.value.clone()}},vertexShader:Cn,fragmentShader:wn,side:t.BackSide,depthWrite:!1,transparent:!1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1});return r.userData.isOutline=!0,r}var X,pn,Z,mn,hn,gn,Q,_n,vn,yn,bn,xn,Sn,Cn,wn,Tn=c((()=>{X={WHITE:0,TEXTURE:1,SOLID:2,HEIGHT:3,FLOORS:4,BATCH:5,DYNAMIC:6,TOP_SIDE:7,CUSTOM:8},pn={[X.WHITE]:`白膜`,[X.TEXTURE]:`原色`,[X.SOLID]:`单色`,[X.HEIGHT]:`按高度`,[X.FLOORS]:`按楼层`,[X.BATCH]:`按单体`,[X.DYNAMIC]:`动态扫描`,[X.TOP_SIDE]:`顶/侧分色`,[X.CUSTOM]:`自定义`},Z={REPLACE:`replace`,OVERLAY:`overlay`,MULTIPLY:`multiply`,GLOW_ONLY:`glowOnly`},mn={[Z.OVERLAY]:`叠加原图 (Overlay)`,[Z.REPLACE]:`纯色覆盖 (Replace)`,[Z.MULTIPLY]:`叠乘模式 (Multiply)`,[Z.GLOW_ONLY]:`仅描边发光 (Glow)`},hn={mode:X.TEXTURE,colorA:`#dfe6ee`,colorB:`#1d4ed8`,colorC:`#fbbf24`,selectColor:`#22d3ee`,selectMode:Z.OVERLAY,selectOpacity:.65,selectEmissive:.35,selectElevation:0,floorHeight:Fe,speed:1,opacity:1,shading:`flat`,dimOthers:!0,dimFactor:.42,outline:!0,outlineStyle:`edges`,outlineColor:`#22d3ee`,outlineWidth:.9,outlineWidthPx:3,edges:!1,edgeWidth:1.2,edgeColor:`#334155`,edgeOpacity:.45,roofThreshold:.65,texMix:0,depthWrite:!0},gn=new Float32Array([-1,-1,-1,0,0,0,0,0]),Q=new t.DataTexture(gn,1,2,t.RGBAFormat,t.FloatType),Q.minFilter=t.NearestFilter,Q.magFilter=t.NearestFilter,Q.needsUpdate=!0,_n=`
2
+ attribute float aBatchId;
3
+ attribute vec3 aColor;
4
+ // 实例化几何没有逐顶点 batchId:顶点是 base mesh 的,单体粒度落在实例上
5
+ #ifdef USE_INSTANCING
6
+ attribute float aInstanceBatchId;
7
+ #endif
8
+ uniform float uSelBatch;
9
+ uniform float uSelWhole;
10
+ uniform float uSelElevation;
11
+ uniform sampler2D uBatchTex;
12
+ uniform float uBatchTexWidth;
13
+ uniform int uBatchTexActive;
14
+ varying float vBatchId;
15
+ varying vec3 vVertColor;
16
+ varying float vWorldZ;
17
+ varying vec3 vWorldNormal;
18
+ varying vec3 vWorldPos;
19
+
20
+ /** 当前图元所属单体的控制位:实例化取实例属性,其余取逐顶点属性 */
21
+ float s3mBatchRaw() {
22
+ #ifdef USE_INSTANCING
23
+ return aInstanceBatchId;
24
+ #else
25
+ return aBatchId;
26
+ #endif
27
+ }
28
+ `,vn=`
29
+ float s3mBatch = s3mBatchRaw();
30
+ vec3 s3mCustomOffset = vec3( 0.0 );
31
+ if ( uBatchTexActive > 0 && s3mBatch >= 0.0 ) {
32
+ vec4 bState = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.25 ) );
33
+ if ( bState.a < -0.5 ) {
34
+ transformed = vec3( 0.0 );
35
+ } else {
36
+ vec4 bOffset = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.75 ) );
37
+ s3mCustomOffset = bOffset.xyz;
38
+ if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
39
+ s3mCustomOffset.z = bState.a;
40
+ }
41
+ }
42
+ }
43
+
44
+ float s3mSelElev = max( step( 0.0, uSelBatch ) * step( abs( s3mBatch - uSelBatch ), 0.5 ), uSelWhole );
45
+ // 实例化时这是局部坐标,实例矩阵只含平移 + 绕 z 旋转(白模摆位),所以偏移仍沿局部轴生效
46
+ transformed += s3mCustomOffset;
47
+ transformed.z += s3mSelElev * uSelElevation;
48
+ `,yn=`
49
+ vec4 s3mWorld = vec4( transformed, 1.0 );
50
+ #ifdef USE_INSTANCING
51
+ s3mWorld = instanceMatrix * s3mWorld;
52
+ #endif
53
+ s3mWorld = modelMatrix * s3mWorld;
54
+ vWorldZ = s3mWorld.z;
55
+ vWorldPos = s3mWorld.xyz;
56
+ vBatchId = s3mBatchRaw();
57
+ vVertColor = aColor;
58
+
59
+ #ifdef USE_INSTANCING
60
+ mat3 s3mNormMat = mat3( modelMatrix ) * mat3( instanceMatrix );
61
+ #else
62
+ mat3 s3mNormMat = mat3( modelMatrix );
63
+ #endif
64
+ vWorldNormal = normalize( s3mNormMat * normal );
65
+ `,bn=`
66
+ uniform int uMode;
67
+ uniform vec3 uColorA;
68
+ uniform vec3 uColorB;
69
+ uniform vec3 uColorC;
70
+ uniform vec3 uSelColor;
71
+ uniform int uSelMode;
72
+ uniform float uSelOpacity;
73
+ uniform float uSelEmissive;
74
+ uniform float uDimFactor;
75
+ uniform sampler2D uBatchTex;
76
+ uniform float uBatchTexWidth;
77
+ uniform int uBatchTexActive;
78
+ uniform float uFilterMinZ;
79
+ uniform float uFilterMaxZ;
80
+ uniform int uFilterHeightActive;
81
+ uniform float uTime;
82
+ uniform float uHeightMin;
83
+ uniform float uHeightMax;
84
+ uniform float uFloorHeight;
85
+ uniform float uDim;
86
+ uniform float uSelMix;
87
+ uniform float uSelBatch;
88
+ uniform float uSelWhole;
89
+ uniform float uRoofThreshold;
90
+ uniform float uTexMix;
91
+ varying float vBatchId;
92
+ varying vec3 vVertColor;
93
+ varying float vWorldZ;
94
+ varying vec3 vWorldNormal;
95
+ varying vec3 vWorldPos;
96
+
97
+ float s3mHash( float p ) {
98
+ p = fract( p * 0.1031 );
99
+ p *= p + 33.33;
100
+ p *= p + p;
101
+ return fract( p );
102
+ }
103
+
104
+ /**
105
+ * 取整后的 batchId。
106
+ *
107
+ * vBatchId 是 varying:GPU 按像素做透视校正插值,即便一个三角形三个顶点的
108
+ * aBatchId 完全相等,三次乘加各自的舍入误差也不会正好抵消,结果会带
109
+ * 1e-7 量级的相对误差,而且逐像素不同(不同 GPU / 驱动还不一样)。
110
+ *
111
+ * 这个误差本身无害,但后面的哈希是混沌放大器:p → fract(p*0.1031) →
112
+ * p*(p+33.33) → p*2p,每一级都把误差放大几十倍,三级下来 1e-7 就能放大到 O(1)。
113
+ * 实测 batchId≈4.2 万时,1e-7 的抖动会让哈希输出在 0.20~0.78 之间乱跳,
114
+ * 直接表现为整屏彩色噪点。所以凡是要「按 id 取值」的地方都必须先取整。
115
+ */
116
+ float s3mBatchId() {
117
+ return floor( vBatchId + 0.5 );
118
+ }
119
+
120
+ vec3 s3mHsv( float h, float s, float v ) {
121
+ vec3 k = vec3( 1.0, 2.0 / 3.0, 1.0 / 3.0 );
122
+ vec3 p = abs( fract( vec3( h ) + k.xyz ) * 6.0 - vec3( 3.0 ) );
123
+ return v * mix( vec3( 1.0 ), clamp( p - vec3( 1.0 ), 0.0, 1.0 ), s );
124
+ }
125
+ `,xn=`
126
+ float s3mH = clamp( ( vWorldZ - uHeightMin ) / max( uHeightMax - uHeightMin, 0.001 ), 0.0, 1.0 );
127
+ vec3 s3mBase = diffuseColor.rgb; // 已含 diffuse × map
128
+ // 所有按单体取值(配色 / 状态纹理 / 选中判定)都走取整后的 id,避免插值噪声
129
+ float s3mBid = s3mBatchId();
130
+
131
+ // 法线:优先使用顶点插值法线;若退化或为平面着色,使用屏幕导数精确计算真实几何法线
132
+ vec3 s3mNorm = length( vWorldNormal ) > 0.1 ? normalize( vWorldNormal ) : normalize( cross( dFdx( vWorldPos ), dFdy( vWorldPos ) ) );
133
+
134
+ if ( uMode == 0 ) {
135
+ // 白膜:丢掉贴图,只留光照
136
+ diffuseColor.rgb = uColorA;
137
+ } else if ( uMode == 1 ) {
138
+ // 原色:贴图 × 顶点色
139
+ diffuseColor.rgb = s3mBase * vVertColor;
140
+ } else if ( uMode == 2 ) {
141
+ diffuseColor.rgb = uColorA;
142
+ } else if ( uMode == 3 ) {
143
+ // 按高度连续渐变
144
+ diffuseColor.rgb = mix( uColorA, uColorB, s3mH );
145
+ } else if ( uMode == 4 ) {
146
+ // 按楼层:先算楼层数再归一化,形成分层色带
147
+ float floors = floor( ( vWorldZ - uHeightMin ) / max( uFloorHeight, 0.5 ) );
148
+ float total = max( floor( ( uHeightMax - uHeightMin ) / max( uFloorHeight, 0.5 ) ), 1.0 );
149
+ diffuseColor.rgb = mix( uColorA, uColorB, floors / total );
150
+ } else if ( uMode == 5 ) {
151
+ // 按单体:同一个 batchId 同色,相邻单体色相拉开(必须用取整后的 id,见 s3mBatchId)
152
+ diffuseColor.rgb = s3mHsv( s3mHash( s3mBid * 7.31 + 1.0 ), 0.52, 0.95 );
153
+ } else if ( uMode == 6 ) {
154
+ // 动态扫描:底色按高度渐变,一条亮带自下而上循环
155
+ float scan = fract( uTime * 0.18 );
156
+ float glow = smoothstep( 0.10, 0.0, abs( s3mH - scan ) );
157
+ diffuseColor.rgb = mix( uColorA, uColorB, s3mH ) + uColorC * glow * 1.2;
158
+ } else if ( uMode == 7 ) {
159
+ // 顶面/侧面分色:uColorA 为顶面(屋顶),uColorB 为侧面(立面)
160
+ // 局部 ENU 坐标系以 Z 为朝天方向,abs(s3mNorm.z) 接近 1 为顶面/底面,接近 0 为立面
161
+ float th = uRoofThreshold > 0.0 ? uRoofThreshold : 0.65;
162
+ float isRoof = smoothstep( th - 0.08, th + 0.08, abs( s3mNorm.z ) );
163
+ diffuseColor.rgb = mix( uColorB, uColorA, isRoof );
164
+ } else {
165
+ // 自定义复合模式:顶面使用 uColorA,侧面叠加高度渐变(uColorB 到 uColorC)
166
+ float th = uRoofThreshold > 0.0 ? uRoofThreshold : 0.65;
167
+ float isRoof = smoothstep( th - 0.08, th + 0.08, abs( s3mNorm.z ) );
168
+ vec3 sideGrad = mix( uColorB, uColorC, s3mH );
169
+ diffuseColor.rgb = mix( sideGrad, uColorA, isRoof );
170
+ }
171
+
172
+ // 叠加在原色贴图上:保留窗框、玻璃幕墙、材质纹理与顶点色
173
+ if ( uMode != 1 && uTexMix > 0.001 ) {
174
+ vec3 origTex = s3mBase * vVertColor;
175
+ vec3 overlay = origTex * diffuseColor.rgb * 1.35;
176
+ diffuseColor.rgb = mix( diffuseColor.rgb, overlay, uTexMix );
177
+ }
178
+
179
+ // 1. 高度范围过滤
180
+ if ( uFilterHeightActive > 0 ) {
181
+ if ( vWorldZ < uFilterMinZ || vWorldZ > uFilterMaxZ ) discard;
182
+ }
183
+
184
+ // 2. 单体状态过滤(隐藏)与单体独立改色
185
+ bool hasCustomColor = false;
186
+ if ( uBatchTexActive > 0 && s3mBid >= 0.0 ) {
187
+ // 用取整后的 id 采样:否则逐像素的插值误差会让纹素在边界上来回跳,同样出彩色噪点
188
+ vec4 bState = texture2D( uBatchTex, vec2( ( s3mBid + 0.5 ) / uBatchTexWidth, 0.25 ) );
189
+ if ( bState.a < -0.5 ) {
190
+ discard; // 属于被过滤隐藏的单体
191
+ }
192
+ if ( bState.r >= 0.0 ) {
193
+ // 单体独立自定义颜色
194
+ diffuseColor.rgb = bState.rgb;
195
+ hasCustomColor = true;
196
+ }
197
+ }
198
+
199
+ // 3. 选中单体高亮 + 其余压暗
200
+ float s3mSel = max( step( 0.0, uSelBatch ) * step( abs( s3mBid - uSelBatch ), 0.5 ), uSelWhole );
201
+ if ( s3mSel > 0.5 && uSelMix > 0.001 ) {
202
+ if ( hasCustomColor ) {
203
+ // 若当前建筑已有用户固定的独立颜色,选中时保留该颜色,仅做轻微高亮叠色提示
204
+ if ( uSelMode == 0 || uSelMode == 1 ) {
205
+ diffuseColor.rgb = mix( diffuseColor.rgb, uSelColor, uSelOpacity * 0.35 );
206
+ }
207
+ } else {
208
+ if ( uSelMode == 0 ) {
209
+ // 纯色覆盖(经典纯高亮色)
210
+ diffuseColor.rgb = uSelColor;
211
+ } else if ( uSelMode == 1 ) {
212
+ // 叠加原图(半透明混色,保留纹理贴图)
213
+ diffuseColor.rgb = mix( diffuseColor.rgb, uSelColor, uSelOpacity );
214
+ } else if ( uSelMode == 2 ) {
215
+ // 叠乘模式(明暗对比强)
216
+ diffuseColor.rgb = mix( diffuseColor.rgb, diffuseColor.rgb * uSelColor * 1.5, uSelOpacity );
217
+ }
218
+ }
219
+ // uSelMode == 3 为 glowOnly,保持 diffuseColor.rgb 不变
220
+ } else {
221
+ diffuseColor.rgb *= mix( 1.0, uDimFactor, uDim );
222
+ }
223
+ `,Sn=`
224
+ float s3mSelE = max( step( 0.0, uSelBatch ) * step( abs( s3mBatchId() - uSelBatch ), 0.5 ), uSelWhole );
225
+ // glowOnly 模式下表面不自发光,只保留描边边框;其他模式下适度发光
226
+ if ( uSelMode != 3 ) {
227
+ totalEmissiveRadiance += uSelColor * s3mSelE * uSelMix * ( uSelEmissive * 0.4 );
228
+ }
229
+ `,Cn=`
230
+ attribute float aBatchId;
231
+ uniform float uSelBatch;
232
+ uniform float uSelWhole;
233
+ uniform float uWidth;
234
+ uniform float uElevation;
235
+ uniform sampler2D uBatchTex;
236
+ uniform float uBatchTexWidth;
237
+ uniform int uBatchTexActive;
238
+ varying float vSel;
239
+ void main() {
240
+ vSel = max( step( 0.0, uSelBatch ) * step( abs( aBatchId - uSelBatch ), 0.5 ), uSelWhole );
241
+ vec3 s3mCustomOffset = vec3( 0.0 );
242
+ if ( uBatchTexActive > 0 && aBatchId >= 0.0 ) {
243
+ vec4 bState = texture2D( uBatchTex, vec2( ( aBatchId + 0.5 ) / uBatchTexWidth, 0.25 ) );
244
+ if ( bState.a < -0.5 ) {
245
+ vSel = 0.0; // 过滤隐藏的单体不显示描边
246
+ } else {
247
+ vec4 bOffset = texture2D( uBatchTex, vec2( ( aBatchId + 0.5 ) / uBatchTexWidth, 0.75 ) );
248
+ s3mCustomOffset = bOffset.xyz;
249
+ if ( s3mCustomOffset.z == 0.0 && bState.a > 0.0 ) {
250
+ s3mCustomOffset.z = bState.a;
251
+ }
252
+ }
253
+ }
254
+ vec3 p = position + normal * uWidth * vSel;
255
+ p += s3mCustomOffset;
256
+ p.z += vSel * uElevation;
257
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( p, 1.0 );
258
+ }
259
+ `,wn=`
260
+ uniform vec3 uColor;
261
+ varying float vSel;
262
+ void main() {
263
+ if ( vSel < 0.5 ) discard;
264
+ gl_FragColor = vec4( uColor, 1.0 );
265
+ }
266
+ `})),En=u({LINE_PRIMITIVE:()=>13,buildTileObjects:()=>Bn});function Dn(e){return e===13||e===2||e===3}function On(e){return e===`u8`?1:e===`u16`?2:4}function kn(e,t){switch(e){case`u8`:return new Uint8Array(t);case`u16`:return new Uint16Array(t);case`u32`:return new Uint32Array(t);default:return new Float32Array(t)}}function An(e,t){switch(e){case`u8`:return new Uint8Array(t);case`u16`:return new Uint16Array(t);case`u32`:return new Uint32Array(t);default:return new Float32Array(t)}}function jn(e){let{data:n,stride:r,offsetInBytes:i,dtype:a=`f32`}=e,o=e.components??e.comp??3,s=On(a),c=o*s,l=r??c,u=i??0,d=a===`u8`;if(l===c&&u===0){let e=kn(a,n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength));return new t.BufferAttribute(e,o,d)}let f=Math.floor(n.byteLength/l),p=An(a,f*o),m=new DataView(n.buffer,n.byteOffset,n.byteLength);for(let e=0;e<f;e++){let t=e*l+u;for(let n=0;n<o;n++){let r=t+n*s;p[e*o+n]=a===`u8`?m.getUint8(r):a===`u16`?m.getUint16(r,!0):a===`u32`?m.getUint32(r,!0):m.getFloat32(r,!0)}}return new t.BufferAttribute(p,o,d)}function Mn(e){let{indices:n,indexType:r,indexCount:i}=e;if(!n||i===0)return null;let a=Math.floor(n.byteLength/i),o=a===4||a!==2&&(r===1||r===3),s=i*(o?4:2);if(s>n.byteLength)return null;let c=n.buffer.slice(n.byteOffset,n.byteOffset+s),l=o?new Uint32Array(c):new Uint16Array(c);return new t.BufferAttribute(l,1)}function Nn(e,n){let r=new Float32Array(n*3);if(!e)return r.fill(1),new t.BufferAttribute(r,3);let i=e.data,a=e.components??4,o=e.dtype===`u8`?1/255:1;for(let e=0;e<n;e++){let t=e*a;r[e*3]=(i[t]??255)*o,r[e*3+1]=(i[t+1]??255)*o,r[e*3+2]=(i[t+2]??255)*o}return new t.BufferAttribute(r,3)}function Pn(e){if(!e)return[];if(Array.isArray(e))return e;let t=e,n=t.materials??t.material;return Array.isArray(n)?n:[]}function Fn(e){return e?.material??e}function In(e){return e?.name??e?.id}function Ln(e){return(e?.textureStates??e?.textureunitstates??[]).map(e=>e?.textureunitstate??e).filter(e=>!!e)}function Rn(e){return e.length===16&&e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0&&e[4]===0&&e[5]===1&&e[6]===0&&e[7]===0&&e[8]===0&&e[9]===0&&e[10]===1&&e[11]===0&&e[12]===0&&e[13]===0&&e[14]===0&&e[15]===1}function zn(e){let n=String(e?.cullMode??``).toUpperCase();return n===`CULL_BACK`||n===`BACKWARD`?t.FrontSide:n===`CULL_FRONT`?t.BackSide:t.DoubleSide}async function Bn(e,n={}){let r=n.uniforms??un(),i=n.textureCache??new Map,a=new t.Group,o=[],s={meshes:0,vertices:0,triangles:0,textures:0,instanced:0,edgeLines:0,skipped:[]},c=new t.LineBasicMaterial({color:new t.Color(n.edgeColor??`#1f2937`),transparent:!0,opacity:.75,depthWrite:!1});a.userData.hasNativeEdges=!1;for(let[t,n]of Object.entries(e.textures??{})){if(i.has(t))continue;let{texture:e,decoded:r}=await sn(n);e?(i.set(t,e),s.textures++):s.skipped.push(`texture ${t} → ${r}`)}let l=Pn(e.materials),u=e=>{let n=Fn(l.find(t=>In(Fn(t))===e)),a=Ln(n)[0],o=a?i.get(In(a)??a.id??``)??null:null,s=a?.texmodmatrix??a?.matrix;if(o&&Array.isArray(s)&&s.length===16&&!Rn(s)&&(o=o.clone(),o.matrixAutoUpdate=!1,o.matrix.set(s[0],s[4],s[12],s[1],s[5],s[13],0,0,1)),o&&a?.addressmode){let e=a.addressmode.u,n=a.addressmode.v;(e!==void 0||n!==void 0)&&(o.matrixAutoUpdate&&(o=o.clone()),e!==void 0&&(o.wrapS=e===0?t.RepeatWrapping:t.ClampToEdgeWrapping),n!==void 0&&(o.wrapT=n===0?t.RepeatWrapping:t.ClampToEdgeWrapping))}let c=n?.diffuse??{r:1,g:1,b:1,a:1},u=n?.alphaMode===`AM_BLEND`||(c.a??1)<.999||n?.transparentsorting===!0,d=typeof n?.shininess==`number`&&n.shininess>0?Math.max(.15,1-n.shininess/128):.95;return dn({uniforms:r,map:o,color:new t.Color(c.r??1,c.g??1,c.b??1),side:zn(n),transparent:u,opacity:c.a??1,roughness:d})},d=new Map,f=new Map;for(let[n,r]of Object.entries(e.geoPackage??{})){let e=r.vertexPackage,i=e.vertexAttributes.find(e=>e.semantic===`position`);if(!i){s.skipped.push(`${n} 无 position`);continue}let a=e.verticesCount||0,o={position:jn(i)},c=null,l=null;for(let t of e.vertexAttributes)t.divisor===void 0&&t.semantic!==`position`&&(t.semantic===`color`?c=t:t.semantic===`batchId`?l=t:t.semantic===`normal`?o.normal=jn(t):t.semantic===`uv`?o.uv=jn(t):t.semantic===`uv2`&&(o.uv1=jn(t)));o.aColor=Nn(c,a),o.aBatchId=l?jn(l):new t.BufferAttribute(new Float32Array(a).fill(-1),1);let u=e.instanceIndex!==-1&&(e.instanceMode===16||e.instanceMode===17);f.set(n,{indexPackages:r.indexPackages??[],instanced:u}),s.vertices+=a,(r.indexPackages??[]).forEach((e,r)=>{let i=new t.BufferGeometry;for(let[e,t]of Object.entries(o))i.setAttribute(e,t);let s=Mn(e);s?i.setIndex(s):i.setDrawRange(0,a),!Dn(e.primitiveType)&&!i.getAttribute(`normal`)&&i.computeVertexNormals(),i.computeBoundingBox(),i.computeBoundingSphere(),d.set(`${n}|${r}`,{geometry:i,pack:e})})}let p=new t.Matrix4,m=new Map,h=(e,n,r)=>{let i=0,a=0,o=!1,s=!1,c=!1,l=!1,u=!1;for(let t of e){let e=t.cached.geometry,n=e.attributes.position?.count??0;i+=n,a+=e.index?e.index.count:n,e.attributes.normal&&(o=!0),e.attributes.uv&&(s=!0),e.attributes.uv1&&(c=!0),e.attributes.aColor&&(l=!0),e.attributes.aBatchId&&(u=!0)}let d=new Float32Array(i*3),f=o?new Float32Array(i*3):null,m=s?new Float32Array(i*2):null,h=c?new Float32Array(i*2):null,g=l?new Float32Array(i*3):null,_=u?new Float32Array(i):null,v=new(i>65535?Uint32Array:Uint16Array)(a),y=0,b=0,x=new t.Vector3,S=new t.Matrix3,C=new Map;for(let t of e){let e=t.cached.geometry,n=e.attributes.position.count,r=t.matrix,i=r&&!r.equals(p);if(i&&o&&S.getNormalMatrix(r),t.geo.pickInfo)for(let e of Object.values(t.geo.pickInfo))typeof e.batchId==`number`&&e.batchId>=0&&C.set(e.batchId,t.geo);let a=e.attributes.position.array;for(let e=0;e<n;e++){let t=e*3,n=(y+e)*3;i?(x.set(a[t],a[t+1],a[t+2]).applyMatrix4(r),d[n]=x.x,d[n+1]=x.y,d[n+2]=x.z):(d[n]=a[t],d[n+1]=a[t+1],d[n+2]=a[t+2])}if(f){let t=e.attributes.normal;if(t){let e=t.array;for(let t=0;t<n;t++){let n=t*3,r=(y+t)*3;i?(x.set(e[n],e[n+1],e[n+2]).applyMatrix3(S).normalize(),f[r]=x.x,f[r+1]=x.y,f[r+2]=x.z):(f[r]=e[n],f[r+1]=e[n+1],f[r+2]=e[n+2])}}}if(m){let t=e.attributes.uv;if(t){let e=t.array;for(let t=0;t<n;t++)m[(y+t)*2]=e[t*2],m[(y+t)*2+1]=e[t*2+1]}}if(h){let t=e.attributes.uv1;if(t){let e=t.array;for(let t=0;t<n;t++)h[(y+t)*2]=e[t*2],h[(y+t)*2+1]=e[t*2+1]}}if(g){let t=e.attributes.aColor;if(t){let e=t.array;for(let t=0;t<n;t++)g[(y+t)*3]=e[t*3],g[(y+t)*3+1]=e[t*3+1],g[(y+t)*3+2]=e[t*3+2]}else for(let e=0;e<n;e++)g[(y+e)*3]=1,g[(y+e)*3+1]=1,g[(y+e)*3+2]=1}if(_){let t=e.attributes.aBatchId;if(t){let e=t.array;for(let t=0;t<n;t++)_[y+t]=e[t]}else for(let e=0;e<n;e++)_[y+e]=-1}if(e.index){let t=e.index.array,n=e.index.count;for(let e=0;e<n;e++)v[b+e]=t[e]+y;b+=n}else{for(let e=0;e<n;e++)v[b+e]=e+y;b+=n}y+=n}let w=new t.BufferGeometry;w.setAttribute(`position`,new t.BufferAttribute(d,3)),f&&w.setAttribute(`normal`,new t.BufferAttribute(f,3)),m&&w.setAttribute(`uv`,new t.BufferAttribute(m,2)),h&&w.setAttribute(`uv1`,new t.BufferAttribute(h,2)),g&&w.setAttribute(`aColor`,new t.BufferAttribute(g,3)),_&&w.setAttribute(`aBatchId`,new t.BufferAttribute(_,1)),w.setIndex(new t.BufferAttribute(v,1)),w.computeBoundingBox(),w.computeBoundingSphere();let T=new t.Mesh(w,n);return T.userData.skeletonName=e[0].name,T.userData.geoRef=e[0].geo,T.userData.tileRef=r,T.userData.primitiveType=4,T.userData.isBatched=!0,T.userData.batchedCount=e.length,C.size>0&&(T.userData.geoByBatchId=C),T},g=(r,i,l,d)=>{let{geometry:m,pack:h}=r,g=u(h.passNames?.[0]),_,v=f.get(i),y=l.vertexPackage;if(Dn(h.primitiveType)){let e=new t.LineSegments(m,c);return e.visible=n.edges===!0,e.renderOrder=2,e.raycast=()=>{},e.userData.isEdgeLines=!0,e.userData.skeletonName=i,d&&!d.equals(p)&&d.decompose(e.position,e.quaternion,e.scale),a.add(e),o.push(e),a.userData.hasNativeEdges=!0,s.edgeLines++,e}if(v?.instanced&&y.instanceBuffer&&y.instanceCount>0){if(!m.getAttribute(`aInstanceBatchId`)){let e=y.instanceBatchIds,n=e&&e.length===y.instanceCount?e.slice():new Float32Array(y.instanceCount).fill(-1);m.setAttribute(`aInstanceBatchId`,new t.InstancedBufferAttribute(n,1));let r=new Float32Array(y.instanceCount);for(let e=0;e<r.length;e++)r[e]=e;m.setAttribute(`aInstanceIndex`,new t.InstancedBufferAttribute(r,1))}let e=new t.InstancedMesh(m,g,y.instanceCount);e.instanceMatrix.setUsage(t.StaticDrawUsage);let n=new t.Matrix4,r=new t.Color,i=y.instanceMode,a=new Float32Array(y.instanceBuffer.buffer,y.instanceBuffer.byteOffset,y.instanceCount*i);for(let t=0;t<y.instanceCount;t++){let o=t*i;if(n.set(a[o+0],a[o+1],a[o+2],a[o+3],a[o+4],a[o+5],a[o+6],a[o+7],a[o+8],a[o+9],a[o+10],a[o+11],0,0,0,1),e.setMatrixAt(t,n),i>=16){let n=a[o+12],i=a[o+13],s=a[o+14];Number.isFinite(n)&&Number.isFinite(i)&&Number.isFinite(s)&&(r.setRGB(n,i,s),e.setColorAt(t,r))}}e.instanceMatrix.needsUpdate=!0,e.instanceColor&&(e.instanceColor.needsUpdate=!0),e.frustumCulled=!1,s.instanced++,_=e}else _=new t.Mesh(m,g);return d&&!d.equals(p)&&d.decompose(_.position,_.quaternion,_.scale),_.userData.skeletonName=i,_.userData.geoRef=l,_.userData.tileRef=e,_.userData.primitiveType=h.primitiveType,a.add(_),o.push(_),s.meshes++,h.primitiveType===4&&(s.triangles+=(h.indexCount||0)/3),_},_=0;for(let r of e.groupNode?.pageLods??[])for(let i of r.geodes??[]){let r=i.matrix,a=r&&r.length===16?new t.Matrix4().fromArray(r):null;for(let t of i.skeletonNames??[]){let r=f.get(t);if(!r)continue;let i=e.geoPackage[t];if(!i)continue;let o=i.vertexPackage;for(let e=0;e<r.indexPackages.length;e++){let s=d.get(`${t}|${e}`);if(s){if(Dn(s.pack.primitiveType)||r.instanced&&o.instanceBuffer&&o.instanceCount>0)g(s,t,i,a),_++;else if(n.batching!==!1&&s.pack.primitiveType===4){let e=s.pack.passNames?.[0]??`__default__`,n=m.get(e);n||(n=[],m.set(e,n)),n.push({cached:s,name:t,geo:i,matrix:a}),_++}else g(s,t,i,a),_++}}}}if(_===0)for(let[t,r]of f){let i=e.geoPackage[t];if(!i)continue;let a=i.vertexPackage;for(let e=0;e<r.indexPackages.length;e++){let o=d.get(`${t}|${e}`);if(o){if(Dn(o.pack.primitiveType)||r.instanced&&a.instanceBuffer&&a.instanceCount>0)g(o,t,i,null);else if(n.batching!==!1&&o.pack.primitiveType===4){let e=o.pack.passNames?.[0]??`__default__`,n=m.get(e);n||(n=[],m.set(e,n)),n.push({cached:o,name:t,geo:i,matrix:null})}else g(o,t,i,null)}}}if(m.size>0)for(let[t,n]of m)if(s.originalMeshes=(s.originalMeshes??0)+n.length,n.length===1)g(n[0].cached,n[0].name,n[0].geo,n[0].matrix);else{let r=h(n,u(t===`__default__`?void 0:t),e);a.add(r),o.push(r),s.meshes++;for(let e of n)s.triangles+=(e.cached.pack.indexCount||0)/3}return a.children.length||s.skipped.push(`tile 无可用几何`),{group:a,stats:s,objects:o}}var Vn=c((()=>{ln(),Tn()}));function Hn(e){return e.slice(0,e.lastIndexOf(`/`)+1)}function Un(e){if(!e)return e;try{let t=typeof document<`u`?document.baseURI:void 0;return t?new URL(e,t).href:new URL(e).href}catch{return e}}function Wn(e,t){if(!t)return null;try{return new URL(t,e).href}catch{return`${Hn(e)}${t}`}}function Gn(e){let t=e.trim();if(t.startsWith(`<`)){let e=e=>{let n=RegExp(`<(?:[a-zA-Z0-9_-]+:)?${e}[^>]*>([^<]+)<\\/`,`i`).exec(t);return n?n[1].trim():null},n=parseFloat(e(`X`)??`0`),r=parseFloat(e(`Y`)??`0`),i=parseFloat(e(`Z`)??`0`),a=parseFloat(e(`Left`)??`0`),o=parseFloat(e(`Right`)??`0`),s=parseFloat(e(`Top`)??`0`),c=parseFloat(e(`Bottom`)??`0`),l=t.matchAll(/<(?:[a-zA-Z0-9_-]+:)?FileName[^>]*>([^<]+)<\//gi),u=[];for(let e of l)u.push({url:e[1].trim()});return{position:{x:n,y:r,z:i,units:`Degree`},geoBounds:{left:a,right:o,top:s,bottom:c},rootTiles:u,tiles:u}}return JSON.parse(t)}var Kn=class{get heightRange(){let e=this.config?.heightRange;return e&&typeof e.min==`number`&&typeof e.max==`number`?{min:e.min,max:e.max}:null}constructor(e){h(this,`configUrl`,void 0),h(this,`config`,null),h(this,`anchor`,{lon:0,lat:0,height:0}),h(this,`rootUrls`,[]),h(this,`nodes`,new Map),h(this,`failed`,new Set),h(this,`textureCache`,new Map),h(this,`pending`,new Set),h(this,`stats`,{tiles:0,loading:0,failed:0,meshes:0,vertices:0,triangles:0,datasets:1}),h(this,`maxConcurrent`,void 0),h(this,`maxTiles`,void 0),h(this,`lodRangeScale`,void 0),h(this,`_onTile`,void 0),h(this,`_onTileRemoved`,void 0),h(this,`_onError`,void 0),h(this,`_onProgress`,void 0),h(this,`_maxRetries`,void 0),h(this,`_retryCount`,new Map),h(this,`_retryAt`,new Map),h(this,`_parentOf`,new Map),h(this,`_frame`,0),h(this,`_buildTile`,void 0),h(this,`_uniforms`,void 0),h(this,`_queue`,[]),h(this,`_active`,0),this.configUrl=e.configUrl,this.lodRangeScale=e.lodRangeScale??1,this._onTile=e.onTile??(()=>{}),this._onTileRemoved=e.onTileRemoved??(()=>{}),this._onError=e.onError??(e=>console.warn(e)),this._onProgress=e.onProgress??(()=>{}),this._maxRetries=Math.max(0,e.maxRetries??2),this._buildTile=e.buildTile??null,this._uniforms=e.uniforms??null,this.maxConcurrent=e.maxConcurrent??4,this.maxTiles=e.maxTiles??64}async init(){this.configUrl=Un(this.configUrl);let e=await fetch(this.configUrl);if(!e.ok)throw Error(`配置读取失败 ${e.status} ${this.configUrl}`);let t=Gn(await e.text());this.config=t,this.anchor=this._resolveAnchor(t);let n=t.rootTiles??t.tiles??[];if(!n.length)throw Error(`配置中缺少 root tile`);this.rootUrls.length=0;for(let e of n){let t=Wn(this.configUrl,e.url);t&&this.rootUrls.push(t)}await this._load(this.rootUrls[0]);for(let e of this.rootUrls.slice(1))this._enqueue(e);return this}_enqueue(e,t){if(!e||(t&&this._parentOf.set(e,t),this.nodes.has(e)||this.pending.has(e)||this.failed.has(e))||this._queue.includes(e))return;let n=this._retryAt.get(e);if(!(n!==void 0&&performance.now()<n)){for(;this.nodes.size+this.pending.size>=this.maxTiles;)if(!this._evictOne())return;this._queue.push(e),this._pump()}}_evictOne(){let e=this._pickVictim(!1)??this._pickVictim(!0);if(!e)return!1;let t=e.parentUrl??this._parentOf.get(e.url),n=!(e.childUrls??(e.childUrl?[e.childUrl]:[])).some(t=>t!==e.url&&this.nodes.has(t));return this.nodes.delete(e.url),e.group.parent?.remove(e.group),this._onTileRemoved(e),this._parentOf.delete(e.url),n&&t&&!this.nodes.has(t)&&!this.pending.has(t)&&this._enqueue(t),!0}_pickVictim(e){let t=null;for(let n of this.nodes.values()){let r=n.childUrls??(n.childUrl?[n.childUrl]:[]);if((r.length>0&&r.some(e=>e!==n.url&&this.nodes.has(e)))!==e)continue;if(!t){t=n;continue}let i=n.lastSeen??-1,a=t.lastSeen??-1;(i<a||i===a&&(n.distance??0)>(t.distance??0))&&(t=n)}return t}retryFailed(){let e=this.failed.size;return this.failed.clear(),this._retryCount.clear(),this._retryAt.clear(),e}_pump(){for(;this._active<this.maxConcurrent&&this._queue.length;){let e=this._queue.shift();this._active++,this._load(e).finally(()=>{this._active--,this._pump()})}}_resolveAnchor(e){let t=e.position,n=t?.point3D??t,r=e.geoBounds,i=r?(r.left+r.right)/2:void 0,a=r?(r.bottom+r.top)/2:void 0,o=n?.z??0;if(!n)return{lon:i??0,lat:a??0,height:0};if((e.position?.units??`Degree`)!==`Degree`)return{lon:n.x,lat:n.y,height:o};let s=i===void 0?0:Math.abs(n.x-i),c=a===void 0?0:Math.abs(n.y-a);return s>.5||c>.5?(console.warn(`[s3m] position 与 geoBounds 不一致,改用 geoBounds 中心作为锚点`,{position:n,geoBounds:r}),{lon:i,lat:a,height:o}):{lon:n.x,lat:n.y,height:o}}_pickLod(e){let t=e.groupNode?.pageLods??[];return t.length?t.find(e=>e.childTile&&e.rangeValue>0)??t[0]:null}async _builder(){if(!this._buildTile){let e=await Promise.resolve().then(()=>(Vn(),En));this._buildTile=e.buildTileObjects}return this._buildTile}async _load(e){if(!(this.nodes.has(e)||this.pending.has(e)||this.failed.has(e))){this.pending.add(e),this.stats.loading++;try{let t=await fetch(e);if(!t.ok)throw Error(`HTTP ${t.status} 加载瓦片失败: ${e}`);if((t.headers.get(`content-type`)||``).includes(`text/html`))throw Error(`瓦片请求返回了 HTML 页面(通常为 404/500 服务端拦截): ${e}`);let n=await Me(await t.arrayBuffer()),{group:r,stats:i}=await(await this._builder())(n,{textureCache:this.textureCache,uniforms:this._uniforms}),a=this._pickLod(n),o=[];for(let t of n.groupNode?.pageLods??[]){let n=Wn(Hn(e),t.childTile);n&&n!==e&&!o.includes(n)&&o.push(n)}let s={url:e,tile:n,group:r,sphere:a?.boundingSphere??null,rangeValue:a?.rangeValue??0,rangeMode:a?.rangeMode??1,childUrl:o[0]??Wn(Hn(e),a?.childTile),childUrls:o,parentUrl:this._parentOf.get(e),state:`ready`};this.nodes.set(e,s),this.stats.tiles++,this.stats.meshes+=i.meshes??0,this.stats.vertices+=i.vertices??0,this.stats.triangles+=i.triangles??0,this._onTile(s)}catch(t){let n=(this._retryCount.get(e)??0)+1;this._retryCount.set(e,n),n<=this._maxRetries?this._retryAt.set(e,performance.now()+800*n):(this.stats.failed++,this.failed.add(e),this._retryAt.delete(e)),this._onError(t)}finally{this.pending.delete(e),this.stats.loading--,this._onProgress(this.stats)}}}update(e,t,n){this._frame++;let r=!1;for(let i of this.nodes.values()){if(!i.sphere){i.needRefine=!1;continue}let a=i.sphere.center,o=a.x-e[0],s=a.y-e[1],c=a.z-e[2],l=Math.sqrt(o*o+s*s+c*c)||1e-6;i.distance=l;let u;u=i.rangeMode===0?l:i.sphere.radius/l/Math.tan(t/2)*n*.5;let d=this.lodRangeScale>0?this.lodRangeScale:1,f=i.rangeValue*d;(i.rangeMode===0?l<f*2:u>f*.5)&&(i.lastSeen=this._frame);let p=i.childUrls??(i.childUrl?[i.childUrl]:[]),m=p.length>0&&(i.rangeMode===0?u<f:u>f);if(i.needRefine=m,m)for(let e of p)this.failed.has(e)||this.nodes.has(e)||this.pending.has(e)||(this._enqueue(e,i.url),r=!0)}let i=new Set,a=this.rootUrls.length>0?this.rootUrls:[...this.nodes.keys()].filter(e=>{let t=this.nodes.get(e)?.parentUrl;return!t||!this.nodes.has(t)});for(let e of a)this._updateNodeVisibility(e,!0,i)&&(r=!0);for(let[e,t]of this.nodes)i.has(e)||t.group.visible&&(t.group.visible=!1,r=!0);return r}_updateNodeVisibility(e,t,n){let r=this.nodes.get(e);if(!r)return!1;n.add(e);let i=!1,a=r.childUrls??(r.childUrl?[r.childUrl]:[]);if(!t){r.group.visible&&(r.group.visible=!1,i=!0);for(let e of a)this._updateNodeVisibility(e,!1,n)&&(i=!0);return i}let o=a.length>0&&a.every(e=>this.nodes.has(e)),s=a.some(e=>this.failed.has(e));if(r.needRefine&&o&&!s){r.group.visible&&(r.group.visible=!1,i=!0);for(let e of a)this._updateNodeVisibility(e,!0,n)&&(i=!0)}else{r.group.visible||(r.group.visible=!0,i=!0);for(let e of a)this._updateNodeVisibility(e,!1,n)&&(i=!0)}return i}dispose(){for(let e of this.nodes.values())e.group.traverse(e=>{let t=e;t.geometry?.dispose?.(),Array.isArray(t.material)?t.material.forEach(e=>e.dispose?.()):t.material?.dispose?.()});for(let e of this.textureCache.values())e.dispose?.();this.textureCache.clear(),this.nodes.clear()}},qn=`
267
+ attribute float aBatchId;
268
+ #ifdef USE_INSTANCING
269
+ // 实例化:单体粒度在实例上,顶点属性里没有可用的 batchId
270
+ attribute float aInstanceBatchId;
271
+ attribute float aInstanceIndex;
272
+ #endif
273
+ uniform float uObjectId;
274
+ uniform sampler2D uBatchTex;
275
+ uniform float uBatchTexWidth;
276
+ uniform int uBatchTexActive;
277
+ uniform float uSelBatch;
278
+ uniform float uSelWhole;
279
+ uniform float uSelElevation;
280
+ varying float vBatch;
281
+
282
+ void main() {
283
+ float s3mBatch;
284
+ #ifdef USE_INSTANCING
285
+ s3mBatch = aInstanceBatchId;
286
+ // 编码「实例序号」而不是控制位:CPU 侧要靠它拿到实例矩阵(描边 / 中心点)
287
+ vBatch = aInstanceIndex;
288
+ #else
289
+ s3mBatch = aBatchId;
290
+ vBatch = aBatchId;
291
+ #endif
292
+
293
+ // 单体状态(平移 / 隐藏)必须和主着色器用同一份数据、同一套算法:
294
+ // 平移只发生在顶点着色器里,拾取这一趟如果还按原始坐标画,移位的楼就点不中。
295
+ vec3 p = position;
296
+ if ( uBatchTexActive > 0 && s3mBatch >= 0.0 ) {
297
+ vec4 state = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.25 ) );
298
+ if ( state.a < -0.5 ) {
299
+ p = vec3( 0.0 );
300
+ } else {
301
+ vec4 offset = texture2D( uBatchTex, vec2( ( s3mBatch + 0.5 ) / uBatchTexWidth, 0.75 ) );
302
+ p += offset.xyz;
303
+ if ( offset.z == 0.0 && state.a > 0.0 ) {
304
+ p.z += state.a;
305
+ }
306
+ }
307
+ }
308
+
309
+ // 选中单体自身的拔高(selectElevation)
310
+ float sel = max( step( 0.0, uSelBatch ) * step( abs( s3mBatch - uSelBatch ), 0.5 ), uSelWhole );
311
+ p.z += sel * uSelElevation;
312
+
313
+ #ifdef USE_INSTANCING
314
+ gl_Position = projectionMatrix * modelViewMatrix * instanceMatrix * vec4( p, 1.0 );
315
+ #else
316
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( p, 1.0 );
317
+ #endif
318
+ }
319
+ `,Jn=`
320
+ uniform float uObjectId;
321
+ varying float vBatch;
322
+ void main() {
323
+ float o = uObjectId + 1.0;
324
+ float b = vBatch + 1.0;
325
+ gl_FragColor = vec4(
326
+ mod( o, 256.0 ) / 255.0,
327
+ floor( o / 256.0 ) / 255.0,
328
+ mod( b, 256.0 ) / 255.0,
329
+ floor( b / 256.0 ) / 255.0
330
+ );
331
+ }
332
+ `,Yn=(()=>{let e=new t.DataTexture(new Float32Array([-1,-1,-1,0,0,0,0,0]),1,2,t.RGBAFormat,t.FloatType);return e.minFilter=t.NearestFilter,e.magFilter=t.NearestFilter,e.needsUpdate=!0,e})();function Xn(e){return new t.ShaderMaterial({uniforms:{uObjectId:{value:e},uBatchTex:{value:Yn},uBatchTexWidth:{value:1},uBatchTexActive:{value:0},uSelBatch:{value:-1},uSelWhole:{value:0},uSelElevation:{value:0}},vertexShader:qn,fragmentShader:Jn,side:t.DoubleSide,depthTest:!0,depthWrite:!0,toneMapped:!1})}var Zn=class{constructor(e,t={}){h(this,`renderer`,void 0),h(this,`size`,void 0),h(this,`target`,null),h(this,`buf`,new Uint8Array(4)),this.renderer=e,this.size=Math.max(1,Math.floor(t.size??1))}_ensureTarget(e){return this.target&&this.target.width===e&&this.target.height===e||(this.target?.dispose(),this.target=new t.WebGLRenderTarget(e,e,{minFilter:t.NearestFilter,magFilter:t.NearestFilter,format:t.RGBAFormat,type:t.UnsignedByteType,depthBuffer:!0,stencilBuffer:!1}),this.target.texture.colorSpace=t.LinearSRGBColorSpace),this.target}pick(e,n,r,i){let a=this.renderer,o=a.domElement,s=o.width,c=o.height;if(!s||!c)return null;let l=Math.floor(r/o.clientWidth*s),u=Math.floor(i/o.clientHeight*c);if(l<0||u<0||l>=s||u>=c)return null;let d=this._ensureTarget(this.size),f=c-1-u,p=Math.floor(this.size/2),m=Math.floor(this.size/2);d.viewport.set(p-l,m-f,s,c);let h=a.getRenderTarget(),g=a.getViewport(new t.Vector4),_=a.toneMapping,v=a.outputColorSpace,y=a.autoClear,b=a.getClearColor(new t.Color),x=a.getClearAlpha(),S=[],C=new Set;e.traverseVisible(e=>{let t=e;if(!t.isMesh)return;let n=t.userData;if(n.pickId===void 0)return;n.pickMaterial||(n.pickMaterial=Xn(n.pickId)),t.isInstancedMesh&&C.add(n.pickId);let r=t.material,i=n.pickMaterial,a=Array.isArray(r)?r[0]:r,o=a?.userData?.uBatchTex;o?(i.uniforms.uBatchTex.value=o.value,i.uniforms.uBatchTexWidth.value=a?.userData?.uBatchTexWidth?.value??1,i.uniforms.uBatchTexActive.value=a?.userData?.uBatchTexActive?.value??0):(i.uniforms.uBatchTex.value=Yn,i.uniforms.uBatchTexWidth.value=1,i.uniforms.uBatchTexActive.value=0),i.uniforms.uSelBatch.value=a?.userData?.uSelBatch?.value??-1,i.uniforms.uSelWhole.value=a?.userData?.uSelWhole?.value??0,i.uniforms.uSelElevation.value=a?.uniforms?.uSelElevation?.value??0,S.push([t,r]),t.material=i});let w=[];e.traverseVisible(e=>{let t=e;t.isMesh&&t.userData.pickId===void 0&&(w.push(t),t.visible=!1)});let T=null;try{a.resetState(),a.setRenderTarget(d),a.toneMapping=t.NoToneMapping,a.outputColorSpace=t.LinearSRGBColorSpace,a.autoClear=!0,a.setClearColor(0,0),a.clear(),a.render(e,n),a.readRenderTargetPixels(d,p,m,1,1,this.buf);let r=this.buf[0],i=this.buf[1],o=this.buf[2],s=this.buf[3],c=r+i*256-1,l=o+s*256-1;c>=0&&(T=C.has(c)?{objectId:c,batchId:-1,instanceIndex:Math.max(0,l)}:{objectId:c,batchId:l})}finally{for(let[e,t]of S)e.material=t;for(let e of w)e.visible=!0;a.setRenderTarget(h),a.setViewport(g),a.toneMapping=_,a.outputColorSpace=v,a.autoClear=y,a.setClearColor(b,x),a.resetState()}return T}dispose(){this.target?.dispose(),this.target=null}};function Qn(){return{uResolution:{value:new t.Vector2(1,1)},uDpr:{value:1}}}var $n=`
333
+ attribute vec3 aOther;
334
+ attribute float aSide;
335
+
336
+ uniform vec2 uResolution;
337
+ uniform float uDpr;
338
+ uniform float uWidth;
339
+ uniform float uElevation;
340
+ uniform vec3 uTranslation;
341
+
342
+ void main() {
343
+ // 选中单体平移/拔高:与着色器里 transformed += uTranslation 保持同一口径(物体空间)
344
+ vec3 offset = uTranslation + vec3( 0.0, 0.0, uElevation );
345
+ vec4 clipA = projectionMatrix * modelViewMatrix * vec4( position + offset, 1.0 );
346
+ vec4 clipB = projectionMatrix * modelViewMatrix * vec4( aOther + offset, 1.0 );
347
+
348
+ if ( clipA.w <= 0.0 || clipB.w <= 0.0 ) {
349
+ // 端点跑到相机后面,整段丢弃(裁到近平面的线段会有轻微截断,可接受)
350
+ gl_Position = vec4( 2.0, 2.0, 2.0, 1.0 );
351
+ return;
352
+ }
353
+
354
+ vec2 sA = clipA.xy / clipA.w;
355
+ vec2 sB = clipB.xy / clipB.w;
356
+
357
+ // 屏幕空间方向(设备像素),再取法线
358
+ vec2 dirPx = ( sB - sA ) * uResolution;
359
+ float len = length( dirPx );
360
+ dirPx = len > 1e-6 ? dirPx / len : vec2( 1.0, 0.0 );
361
+ vec2 nrm = vec2( -dirPx.y, dirPx.x );
362
+
363
+ // 半线宽:一侧撑开,一端外延(-dirPx 对两端都是「往外」的,见文件头)
364
+ float halfPx = 0.5 * uWidth * uDpr;
365
+ vec2 offsetPx = ( nrm * aSide - dirPx ) * halfPx;
366
+ vec2 ndc = clipA.xy / clipA.w + offsetPx * 2.0 / uResolution;
367
+
368
+ gl_Position = vec4( ndc * clipA.w, clipA.z, clipA.w );
369
+ }
370
+ `,er=`
371
+ uniform vec3 uColor;
372
+ uniform float uOpacity;
373
+
374
+ void main() {
375
+ if ( uOpacity <= 0.003 ) discard;
376
+ gl_FragColor = vec4( uColor, uOpacity );
377
+ }
378
+ `;function tr(e,n={}){let r=new t.ShaderMaterial({uniforms:{uResolution:e.uResolution,uDpr:e.uDpr,uColor:{value:new t.Color(n.color??`#ffffff`)},uOpacity:{value:n.opacity??1},uWidth:{value:n.width??1.5},uElevation:{value:n.elevation??0},uTranslation:{value:new t.Vector3(0,0,0)}},vertexShader:$n,fragmentShader:er,transparent:!0,depthWrite:!1,side:t.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2});return r.userData.isThickLine=!0,r}function nr(e){let n=Math.floor(e.length/6),r=n*4,i=new Float32Array(r*3),a=new Float32Array(r*3),o=new Float32Array(r),s=r>65535?new Uint32Array(n*6):new Uint16Array(n*6);for(let t=0;t<n;t++){let n=t*6,r=e[n],i=e[n+1],a=e[n+2],o=e[n+3],l=e[n+4],u=e[n+5],d=t*4;c(d,r,i,a,o,l,u,-1),c(d+1,r,i,a,o,l,u,1),c(d+2,o,l,u,r,i,a,1),c(d+3,o,l,u,r,i,a,-1);let f=t*6;s[f]=d,s[f+1]=d+1,s[f+2]=d+2,s[f+3]=d,s[f+4]=d+2,s[f+5]=d+3}function c(e,t,n,r,s,c,l,u){let d=e*3;i[d]=t,i[d+1]=n,i[d+2]=r,a[d]=s,a[d+1]=c,a[d+2]=l,o[e]=u}let l=new t.BufferGeometry;return l.setAttribute(`position`,new t.BufferAttribute(i,3)),l.setAttribute(`aOther`,new t.BufferAttribute(a,3)),l.setAttribute(`aSide`,new t.BufferAttribute(o,1)),l.setIndex(new t.BufferAttribute(s,1)),l.computeBoundingSphere(),l}var rr=6e4,ir=100;function ar(e,t,n=40){let r=e.getAttribute(`position`);if(!r)return null;let i=r.count;if(i<3)return null;let a=new Float32Array(i),o=new Float32Array(i),s=new Float32Array(i);for(let e=0;e<i;e++)a[e]=r.getX(e),o[e]=r.getY(e),s[e]=r.getZ(e);let c=null,l=null;if(!e.index){let e=new Map;c=new Uint32Array(i),l=new Uint32Array(i);let t=0;for(let n=0;n<i;n++){let r=`${Math.round(a[n]*ir)},${Math.round(o[n]*ir)},${Math.round(s[n]*ir)}`,i=e.get(r);i===void 0&&(i=t++,e.set(r,i),l[i]=n),c[n]=i}}let u=e=>c?c[e]:e,d=e=>l?l[e]:e,f=e.index,p=f?f.array:null,m=Math.floor(f?f.count/3:i/3);if(m<1)return null;let h=null;if(t&&t.length>0){h=new Uint8Array(i);for(let e of t){let t=Math.max(0,e.vertexOffset|0),n=Math.min(i,t+(e.vertexCount|0));n>t&&h.fill(1,t,n)}if(!h.includes(1))return null}let g=new Float32Array(m*3),_=new Map,v=i+1,y=[],b=Math.cos(n*Math.PI/180),x=-1,S=0,C=0,w=0,T=(e,t)=>{if(y.length>=rr*6)return!1;let n=d(e),r=d(t);return y.push(a[n],o[n],s[n],a[r],o[r],s[r]),!0},E=(e,t)=>{if(e===t)return;let n=e<t?e:t,r=e<t?t:e,i=n*v+r,a=_.get(i);a===void 0?_.set(i,x):a<0||(S*g[a*3]+C*g[a*3+1]+w*g[a*3+2]<b?(T(n,r),_.set(i,-1)):_.set(i,-2))};for(x=0;x<m;x++){let e=p?p[x*3]:x*3,t=p?p[x*3+1]:x*3+1,n=p?p[x*3+2]:x*3+2;if(h&&!(h[e]&&h[t]&&h[n]))continue;let r=a[t]-a[e],i=o[t]-o[e],c=s[t]-s[e],l=a[n]-a[e],d=o[n]-o[e],f=s[n]-s[e];S=i*f-c*d,C=c*l-r*f,w=r*d-i*l;let m=Math.hypot(S,C,w);m<1e-12||(S/=m,C/=m,w/=m,g[x*3]=S,g[x*3+1]=C,g[x*3+2]=w,E(u(e),u(t)),E(u(t),u(n)),E(u(n),u(e)))}for(let[e,t]of _){if(t<0)continue;let n=Math.floor(e/v);if(!T(n,e-n*v))break}return y.length>0?new Float32Array(y):null}var or=class{constructor(){h(this,`datasets`,new Map),h(this,`sceneAnchor`,null)}computeAlignOffset(e,t){if(!t||t===`origin`||!e)return 0;let n=e.heightRange;if(!n)return 0;switch(t){case`top`:return-n.max;case`bottom`:return-n.min;case`center`:return-(n.min+n.max)/2;default:return 0}}async addDataset(e,n,r,i,a,o,s,c,l){let u=this.datasets.get(e.id);if(u)return u;let d=new t.Group;d.name=`s3m-dataset:${e.id}`,d.visible=e.visible!==!1,n.add(d);let f={id:e.id,name:e.name??e.id,options:e,root:d,tileset:null,anchor:null,baseAlignOffset:0,userOffset:e.heightOffset??0,heightOffset:e.heightOffset??0,offset:[0,0,0],visible:e.visible!==!1,error:null};this.datasets.set(e.id,f);let p=new Kn({configUrl:e.configUrl,maxTiles:e.maxTiles??s,maxConcurrent:c,lodRangeScale:e.lodRangeScale??a,buildTile:o??null,uniforms:i,onTile:e=>{l.onTile(e,f)},onTileRemoved:e=>{l.onTileRemoved(e,f)},onProgress:()=>{l.onStats(),l.triggerRepaint()},onError:e=>{f.error=e,l.onError(e),l.onStats()}});f.tileset=p;try{await p.init()}catch(e){return f.error=e,l.onError(e),f}return f.anchor=p.anchor,f.baseAlignOffset=this.computeAlignOffset(p,e.align),f.userOffset=e.heightOffset??0,f.heightOffset=f.baseAlignOffset+f.userOffset,this.layoutDataset(f,r),l.onReady(f),l.triggerRepaint(),f}removeDataset(e,t,n,r){let i=this.datasets.get(e);return i?(r(i),i.tileset?.dispose(),t.remove(i.root),this.datasets.delete(e),this.datasets.size>0?this.recomputeAnchors(n):this.sceneAnchor=null,!0):!1}clearDatasets(e,t){for(let n of this.datasets.values())t(n),n.tileset?.dispose(),e.remove(n.root);this.datasets.clear(),this.sceneAnchor=null}layoutDataset(e,t){if(!e.anchor)return;this.sceneAnchor||(this.sceneAnchor=Ge(t,e.anchor.lon,e.anchor.lat,e.anchor.height??0));let n=this.sceneAnchor.meterInMercator,r=Ge(t,e.anchor.lon,e.anchor.lat,e.anchor.height??0);e.offset=[(r.x-this.sceneAnchor.x)/n,-(r.y-this.sceneAnchor.y)/n,(r.z-this.sceneAnchor.z)/n+(e.heightOffset??0)],e.root.position.set(e.offset[0],e.offset[1],e.offset[2]),e.root.updateMatrixWorld(!0)}recomputeAnchors(e){if(this.datasets.size!==0){this.sceneAnchor=null;for(let t of this.datasets.values())this.layoutDataset(t,e)}}getDatasetHeight(e){let t=e??this.datasets.keys().next().value;return t?this.datasets.get(t)?.userOffset??0:0}setDatasetHeight(e,t,n){let r=this.datasets.get(e);r&&(r.userOffset=t,r.heightOffset=r.baseAlignOffset+t,this.layoutDataset(r,n))}setDatasetAlign(e,t,n){let r=this.datasets.get(e);if(!r)return;let i=r.heightOffset-r.baseAlignOffset;r.baseAlignOffset=this.computeAlignOffset(r.tileset,t),r.userOffset=i,r.heightOffset=r.baseAlignOffset+i,r.options.align=t,this.layoutDataset(r,n)}setDatasetVisible(e,t){let n=this.datasets.get(e);n&&(n.visible=t,n.root.visible=t)}getBounds(){let e=1/0,t=1/0,n=-1/0,r=-1/0,i=!1;for(let a of this.datasets.values()){if(!a.visible||!a.tileset?.config)continue;let o=a.tileset.config.geoBounds;o&&Number.isFinite(o.left)&&(e=Math.min(e,o.left),t=Math.min(t,o.bottom),n=Math.max(n,o.right),r=Math.max(r,o.top),i=!0)}return i?[[e,t],[n,r]]:null}};Ie();function sr(e){let t=Array.isArray(e.material)?e.material[0]:e.material;return t?.userData?.isStyled?t:null}function cr(e,t){if(e.length<2)return e[0].clone();let n=Math.min(1,Math.max(0,t))*(e.length-1),r=Math.min(e.length-2,Math.floor(n));return e[r].clone().lerp(e[r+1],n-r)}function lr(e,t,n){if(n.keep&&!n.keep(e,t))return!1;if(n.values?.length){let t=e==null?``:String(e);if(!n.values.some(e=>String(e)===t))return!1}if(n.min!=null||n.max!=null){let t=Number(e);if(!Number.isFinite(t)||n.min!=null&&t<n.min||n.max!=null&&t>n.max)return!1}return!n.keep&&!n.values?.length&&n.min==null&&n.max==null?e!=null&&String(e)!==``:!0}function ur(e){if(!Number.isFinite(e))return`—`;let t=Math.abs(e);return t>=100?e.toFixed(0):t>=10?e.toFixed(1):e.toFixed(2)}var dr=class{constructor(e,t,n,r,i){h(this,`_getLayerFloorHeight`,void 0),h(this,`_triggerRepaint`,void 0),h(this,`_onStyleChanged`,void 0),h(this,`_getAllMeshes`,void 0),h(this,`_applyOverrideHook`,void 0),h(this,`featureStyles`,new Map),h(this,`thematicColors`,new Map),h(this,`thematicElevation`,new Map),h(this,`thematicField`,null),h(this,`elevationField`,null),h(this,`filter`,null),h(this,`fieldFilter`,null),h(this,`_meshBatchTextures`,new WeakMap),h(this,`_markedMeshes`,new Set),h(this,`_dirtyAll`,!1),h(this,`_flushScheduled`,!1),h(this,`_batchConflictWarned`,!1),this._getLayerFloorHeight=e,this._triggerRepaint=t,this._onStyleChanged=n,this._getAllMeshes=r,this._applyOverrideHook=i}setFeatureStyle(e,t,n){this.featureStyles.set(e,t),this.markOverridesDirty(n),this._onStyleChanged(),this._triggerRepaint()}setFeaturesStyle(e,t,n){for(let n of e)this.featureStyles.set(n,t);this.markOverridesDirty(n),this._onStyleChanged(),this._triggerRepaint()}getFeatureStyle(e){return this.featureStyles.get(e)??null}getFeatureEffectiveOffset(e){if(e==null)return{};let t=this.featureStyles.get(e),n=t?.elevation??this.thematicElevation.get(e);return{translation:t?.translation,elevation:n}}getFeatureStyles(){return new Map(this.featureStyles)}removeFeatureStyle(e,t){this.featureStyles.delete(e)&&(this.markOverridesDirty(t),this._onStyleChanged(),this._triggerRepaint())}clearFeatureStyles(){this.featureStyles.size>0&&(this.featureStyles.clear(),this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint())}setThematicColors(e,t=`custom`){this.thematicColors=e&&e.size>0?new Map(e):new Map,this.thematicField=this.thematicColors.size>0?t:null,this.markOverridesDirty(),this._triggerRepaint()}clearThematicColors(){this.thematicColors.size!==0&&(this.thematicColors=new Map,this.thematicField=null,this.markOverridesDirty(),this._triggerRepaint())}setThematicElevation(e,t=`custom`){this.thematicElevation=e&&e.size>0?new Map([...e].filter(([,e])=>Number.isFinite(e)&&e>0)):new Map,this.elevationField=this.thematicElevation.size>0?t:null,this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint()}clearThematicElevation(){this.thematicElevation.size!==0&&(this.thematicElevation=new Map,this.elevationField=null,this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint())}setFilter(e,t){this.filter=e,e&&(e.minHeight!=null||e.maxHeight!=null)?(t.uFilterMinZ&&(t.uFilterMinZ.value=e.minHeight??-99999),t.uFilterMaxZ&&(t.uFilterMaxZ.value=e.maxHeight??99999),t.uFilterHeightActive&&(t.uFilterHeightActive.value=1)):t.uFilterHeightActive&&(t.uFilterHeightActive.value=0),this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint()}clearFilter(e){this.setFilter(null,e)}async colorByField(e,n,r){if(!n)throw Error(`[s3m] 未配置业务属性数据源,先调用 setAttributeSource() 或构造时传 attributes`);let i=e.smids?.length?[...new Set(e.smids)]:r;if(!i.length)return this.clearThematicColors(),{field:e.field,type:`discrete`,matched:0,missing:0,legend:[]};let a=await n.queryBySmids(i),o=[],s=[];for(let t of i){let n=a.get(t),r=n?n[e.field]:void 0;if(r==null||r===``)continue;let i=Number(r);Number.isFinite(i)?o.push({smid:t,val:i}):s.push({smid:t,val:String(r)})}let c=o.length>=s.length&&o.length>0,l=new Map,u=[],d=e.defaultColor??`#64748b`,f=e.nullColor??`#334155`;if(c){let n=o.map(e=>e.val),r=Math.min(...n),i=Math.max(...n)-r||1,a=(e.ramp??[`#3b82f6`,`#10b981`,`#f59e0b`,`#ef4444`]).map(e=>new t.Color(e)),s=Math.max(2,e.stops??5);for(let e=0;e<s;e++){let t=e/s,n=(e+1)/s,o=cr(a,(t+n)/2),c=r+t*i,l=r+n*i;u.push({color:`#${o.getHexString()}`,label:`${ur(c)} ~ ${ur(l)}`,count:0,min:c,max:l})}for(let{smid:e,val:t}of o){let n=Math.min(1,Math.max(0,(t-r)/i)),a=Math.min(s-1,Math.floor(n*s)),o=u[a].color;l.set(e,o),u[a].count++}}else{let t=new Map;for(let{val:e}of s)t.set(e,(t.get(e)??0)+1);let n=[...t.entries()].sort((e,t)=>t[1]-e[1]),r=Array.isArray(e.colors)?e.colors:[`#3b82f6`,`#10b981`,`#f59e0b`,`#ef4444`,`#8b5cf6`,`#ec4899`,`#06b6d4`,`#84cc16`],i=!Array.isArray(e.colors)&&e.colors?e.colors:null;for(let e=0;e<n.length;e++){let[t,a]=n[e],o=i?.[t]??r[e%r.length];u.push({color:o,label:t,count:a})}let a=new Map(u.map(e=>[e.label,e.color]));for(let{smid:e,val:t}of s)l.set(e,a.get(t)??d)}let p=0;for(let e of i)l.has(e)||(l.set(e,f),p++);return p>0&&u.push({color:f,label:`无数据 / 缺失`,count:p}),this.setThematicColors(l,e.field),{field:e.field,type:c?`continuous`:`discrete`,matched:i.length-p,missing:p,legend:u}}async filterByField(e,t,n){if(!t)throw Error(`[s3m] 未配置业务属性数据源,先调用 setAttributeSource() 或构造时传 attributes`);let r=e.smids?.length?[...new Set(e.smids)]:n,i=e.mode??`keep`,a=e.onMissing??`drop`,o={field:e.field,mode:i,matched:0,hidden:[]};if(!r.length)return this.fieldFilter=null,this.markOverridesDirty(),o;let s=await t.queryBySmids(r),c=new Set;for(let t of r){let n=s.get(t);n?lr(n[e.field]??null,n,e)&&c.add(t):a===`keep`&&c.add(t)}o.matched=c.size;let l=i===`keep`;return this.fieldFilter=c.size||l?{field:e.field,mode:l?`keep`:`drop`,matched:c}:null,o.hidden=r.filter(e=>l?!c.has(e):c.has(e)),this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint(),o}clearFieldFilter(){this.fieldFilter&&(this.fieldFilter=null,this.markOverridesDirty(),this._triggerRepaint())}async elevateByField(e,t,n){if(!t)throw Error(`[s3m] 未配置业务属性数据源,先调用 setAttributeSource() 或构造时传 attributes`);let r=e.smids?.length?[...new Set(e.smids)]:n,i={field:e.field,matched:0,missing:r.length,min:0,max:0,appliedMax:0};if(!r.length)return this.thematicElevation=new Map,this.elevationField=null,this.markOverridesDirty(),i;let a=await t.queryBySmids(r),o=new Map;for(let t of r){let n=Number(a.get(t)?.[e.field]);Number.isFinite(n)&&o.set(t,n)}if(o.size===0)return this.thematicElevation=new Map,this.elevationField=null,this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint(),i;let s=[...o.values()],c=Math.min(...s),l=Math.max(...s),u=e.scale??1,d=e.offset??0,f=new Map,p=0;for(let[t,n]of o){let r=e.map?e.map(n,{min:c,max:l}):n*u+d;Number.isFinite(r)&&(e.max!=null&&r>e.max&&(r=e.max),!(r<=0)&&(f.set(t,r),r>p&&(p=r)))}return this.thematicElevation=f,this.elevationField=e.field,this.markOverridesDirty(),this._onStyleChanged(),this._triggerRepaint(),{field:e.field,matched:f.size,missing:r.length-o.size,min:c,max:l,appliedMax:p}}auditBatches(e){let t=[],n=new Set,r=0;for(let i of e){let e=i.mesh.userData.geoRef?.pickInfo;if(!e)continue;let a=new Map;for(let[t,n]of Object.entries(e)){let e=k(n);if(e<0)continue;let r=Number(t),i=a.get(e);i?i.push(r):a.set(e,[r])}r+=a.size;for(let[e,r]of a)if(!(r.length<2)){for(let e of r)n.add(e);t.push({datasetId:i.datasetId,batchId:e,smids:r})}}return{smids:0,batches:r,conflicts:t,conflictingSmids:n.size}}applyOverridesToMesh(e){let n=sr(e);if(!n)return;let r=e.userData,i=r.geoRef?.pickInfo,a=this.featureStyles.size>0||this.thematicColors.size>0||this.thematicElevation.size>0,o=this.filter,s=this.fieldFilter!=null||o!=null&&((o.include?.length??0)>0||(o.exclude?.length??0)>0||o.predicate!=null);if(!a&&!s||!i||Object.keys(i).length===0){n.userData.uBatchTexActive&&(n.userData.uBatchTexActive.value=0);return}let c=0;for(let e of Object.values(i)){let t=k(e);t>c&&(c=t)}let l=Math.max(c+1,1),u=this._meshBatchTextures.get(e);if(!u||u.width<l){let r=new Float32Array(l*2*4),i=new t.DataTexture(r,l,2,t.RGBAFormat,t.FloatType);i.minFilter=t.NearestFilter,i.magFilter=t.NearestFilter,u={texture:i,data:r,width:l},this._meshBatchTextures.set(e,u),n.userData.uBatchTex.value=i,n.userData.uBatchTexWidth.value=l}let{data:d,texture:f}=u,p=u.width;for(let e=0;e<p;e++){d[e*4+0]=-1,d[e*4+1]=-1,d[e*4+2]=-1,d[e*4+3]=0;let t=(p+e)*4;d[t+0]=0,d[t+1]=0,d[t+2]=0,d[t+3]=0}let m=!1,h=new Set,g=new Map,_=new Map,v=new Map,y=new Map;for(let[t,n]of Object.entries(i)){let i=Number(t),a=k(n);if(a<0||a>=u.width)continue;y.set(a,(y.get(a)??0)+1);let s=!1;if(o&&(o.include&&o.include.length>0&&!o.include.includes(i)&&(s=!0),o.exclude&&o.exclude.length>0&&o.exclude.includes(i)&&(s=!0),o.predicate)){let{segments:t}=A(r.geoRef,a),n=Pe({smid:i,box:j(e.geometry,t),triangles:0,floorHeight:this._getLayerFloorHeight()});o.predicate({...n,smid:i})||(s=!0)}if(s){h.add(a);continue}if(this.fieldFilter){let e=this.fieldFilter.matched.has(i);if(this.fieldFilter.mode===`keep`?!e:e){h.add(a);continue}}let c=this.featureStyles.get(i);if(c?.hidden){h.add(a);continue}let l=c?.color??this.thematicColors.get(i);l&&!g.has(a)&&g.set(a,l);let d=c?.elevation??this.thematicElevation.get(i);d!=null&&!_.has(a)&&_.set(a,d),c?.translation&&!v.has(a)&&v.set(a,c.translation)}for(let e of h)d[e*4+3]=-1,m=!0;let b=new t.Color;for(let[e,t]of g)h.has(e)||(b.set(t),d[e*4+0]=b.r,d[e*4+1]=b.g,d[e*4+2]=b.b,m=!0);for(let[e,t]of _){if(h.has(e))continue;d[e*4+3]=t;let n=(p+e)*4;d[n+2]=t,m=!0}for(let[e,t]of v){if(h.has(e))continue;let n=(p+e)*4;d[n+0]=t[0],d[n+1]=t[1],d[n+2]=t[2]+(_.get(e)??0),m=!0}let x=0;for(let[e,t]of y)t<2||(h.has(e)||g.has(e)||_.has(e))&&x++;x>0&&!this._batchConflictWarned&&(this._batchConflictWarned=!0,console.warn(`[s3m] 有 ${x} 个单体状态写不进独立的 batch(多个 SMID 共用同一个 batchId,\n S3M 的单体化粒度只到 batch,无法单独隐藏/改色其中一部分)。
379
+ 当前规则:任一 SMID 需要隐藏则整批隐藏,颜色 / 抬高取首个。
380
+ 用 layer.auditBatches() 可以列出具体是哪些 SMID 共用了 batchId。`)),f.needsUpdate=!0,n.userData.uBatchTexActive&&(n.userData.uBatchTexActive.value=+!!m)}markOverridesDirty(e,t){if(e)for(let t of e)this._markedMeshes.add(t);else if(t)for(let e of t)this._markedMeshes.add(e);else this._dirtyAll=!0,this._markedMeshes.clear();this._flushScheduled||(this._flushScheduled=!0,queueMicrotask(()=>this.flushOverrides()))}disposeMesh(e){this._markedMeshes.delete(e);let t=this._meshBatchTextures.get(e);t&&(t.texture.dispose(),this._meshBatchTextures.delete(e))}flushOverrides(){if(!this._flushScheduled&&!this._dirtyAll&&this._markedMeshes.size===0)return;this._flushScheduled=!1;let e=this._applyOverrideHook??(e=>this.applyOverridesToMesh(e));if(this._dirtyAll){this._dirtyAll=!1,this._markedMeshes.clear();let t=this._getAllMeshes?this._getAllMeshes():[];for(let n of t)e(n);this._triggerRepaint()}else{for(let t of this._markedMeshes)e(t);this._markedMeshes.clear(),this._triggerRepaint()}}},fr=class{constructor(e={}){h(this,`mode`,void 0),h(this,`opacity`,void 0),h(this,`color`,void 0),h(this,`gridColor`,void 0),h(this,`gridSize`,void 0),h(this,`excavationBounds`,null),h(this,`size`,void 0),h(this,`groundHeight`,0),h(this,`group`,void 0),h(this,`_mesh`,null),h(this,`_material`,null),this.mode=e.mode??`none`,this.opacity=e.opacity??.62,this.color=new t.Color(e.color??`#0f172a`),this.gridColor=new t.Color(e.gridColor??`#38bdf8`),this.gridSize=e.gridSize??10,this.excavationBounds=e.excavationBounds??null,this.size=e.size??6e3,this.group=new t.Group,this.group.name=`s3m-ground-surface`,this._initMesh()}_initMesh(){let e=new t.PlaneGeometry(this.size,this.size,1,1),n=new t.ShaderMaterial({transparent:!0,depthTest:!0,depthWrite:!1,side:t.DoubleSide,uniforms:{uColor:{value:this.color},uGridColor:{value:this.gridColor},uOpacity:{value:this.opacity},uGridSize:{value:this.gridSize},uMode:{value:this.mode===`excavate`?2:+(this.mode===`translucent`)},uHasExcavation:{value:0},uExcavationMin:{value:new t.Vector2(-9999,-9999)},uExcavationMax:{value:new t.Vector2(9999,9999)}},vertexShader:`
381
+ varying vec2 vEnuPos;
382
+ void main() {
383
+ vec4 worldPos = modelMatrix * vec4(position, 1.0);
384
+ vEnuPos = worldPos.xy;
385
+ gl_Position = projectionMatrix * viewMatrix * worldPos;
386
+ }
387
+ `,fragmentShader:`
388
+ uniform vec3 uColor;
389
+ uniform vec3 uGridColor;
390
+ uniform float uOpacity;
391
+ uniform float uGridSize;
392
+ uniform int uMode; // 0: none, 1: translucent, 2: excavate
393
+ uniform int uHasExcavation;
394
+ uniform vec2 uExcavationMin;
395
+ uniform vec2 uExcavationMax;
396
+
397
+ varying vec2 vEnuPos;
398
+
399
+ void main() {
400
+ if (uMode == 0) discard;
401
+
402
+ bool insidePit = false;
403
+ if (uHasExcavation == 1) {
404
+ insidePit = vEnuPos.x >= uExcavationMin.x && vEnuPos.x <= uExcavationMax.x &&
405
+ vEnuPos.y >= uExcavationMin.y && vEnuPos.y <= uExcavationMax.y;
406
+ }
407
+
408
+ // 基坑开挖模式:坑内完全挖空,无遮挡露出地下构造
409
+ if (uMode == 2 && insidePit) {
410
+ discard;
411
+ }
412
+
413
+ // 程序化抗锯齿网格
414
+ vec2 coord = vEnuPos / uGridSize;
415
+ vec2 grid = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);
416
+ float line = 1.0 - min(min(grid.x, grid.y), 1.0);
417
+
418
+ // 大网格线(每 5 格一条粗线)
419
+ vec2 coord5 = coord / 5.0;
420
+ vec2 grid5 = abs(fract(coord5 - 0.5) - 0.5) / fwidth(coord5);
421
+ float line5 = 1.0 - min(min(grid5.x, grid5.y), 1.0);
422
+
423
+ float gridFactor = clamp(line * 0.4 + line5 * 0.7, 0.0, 1.0);
424
+
425
+ vec3 finalColor = mix(uColor, uGridColor, gridFactor);
426
+ float finalAlpha = uOpacity;
427
+
428
+ // 透视模式下如果落在基坑内,地表网格淡化为镂空导引网
429
+ if (uMode == 1 && insidePit) {
430
+ finalAlpha = mix(0.12, 0.35, gridFactor);
431
+ } else {
432
+ finalAlpha = mix(uOpacity * 0.82, min(1.0, uOpacity + 0.3), gridFactor);
433
+ }
434
+
435
+ gl_FragColor = vec4(finalColor, finalAlpha);
436
+ }
437
+ `}),r=new t.Mesh(e,n);r.position.set(0,0,0),r.renderOrder=200,this.group.add(r),this._mesh=r,this._material=n,this.group.visible=this.mode!==`none`,this._syncUniforms()}update(e){e&&this.mode!==`none`&&this.group.position.set(e.position.x,e.position.y,this.groundHeight)}setGroundHeight(e){this.groundHeight=e,this.group.position.z=e}setMode(e){this.mode=e,this.group.visible=e!==`none`,this._material&&(this._material.uniforms.uMode.value=e===`excavate`?2:+(e===`translucent`),this._material.depthWrite=e===`excavate`)}setOpacity(e){this.opacity=Math.max(0,Math.min(1,e)),this._material&&(this._material.uniforms.uOpacity.value=this.opacity)}setColors(e,t){this.color.set(e),t&&this.gridColor.set(t),this._material&&(this._material.uniforms.uColor.value=this.color,this._material.uniforms.uGridColor.value=this.gridColor)}setExcavationBounds(e){this.excavationBounds=e,this._syncUniforms()}autoFitExcavation(e){let t=1/0,n=1/0,r=-1/0,i=-1/0,a=!1;for(let o of e){let e=o.tileset?.config,s=e?.rootTiles??e?.tiles;if(Array.isArray(s))for(let e of s){let s=e.boundingBox;if(!s)continue;let c=s.center??{x:0,y:0},l=s.xExtent?.x?Math.abs(s.xExtent.x):50,u=s.yExtent?.y?Math.abs(s.yExtent.y):50,d=c.x+o.offset[0]-l,f=c.x+o.offset[0]+l,p=c.y+o.offset[1]-u,m=c.y+o.offset[1]+u;d<t&&(t=d),f>r&&(r=f),p<n&&(n=p),m>i&&(i=m),a=!0}}a&&Number.isFinite(t)&&this.setExcavationBounds([t-5,n-5,r+5,i+5])}_syncUniforms(){if(!this._material)return;let e=this._material.uniforms;this.excavationBounds?(e.uHasExcavation.value=1,e.uExcavationMin.value.set(this.excavationBounds[0],this.excavationBounds[1]),e.uExcavationMax.value.set(this.excavationBounds[2],this.excavationBounds[3])):e.uHasExcavation.value=0}dispose(){this._mesh&&(this._mesh.geometry.dispose(),this._material?.dispose()),this.group.clear()}};ln(),Tn(),Ie();var pr=65534;function $(e){let t=Array.isArray(e.material)?e.material[0]:e.material;return t?.userData?.isStyled?t:null}var mr=class{get datasets(){return this._datasetManager.datasets}get sceneAnchor(){return this._datasetManager.sceneAnchor}set sceneAnchor(e){this._datasetManager.sceneAnchor=e}_requestRepaint(){this._onRequestRepaint()}constructor(e={}){h(this,`options`,void 0),h(this,`pickable`,void 0),h(this,`onStats`,void 0),h(this,`onReady`,void 0),h(this,`onPick`,void 0),h(this,`onError`,void 0),h(this,`geo`,null),h(this,`canvas`,null),h(this,`renderer`,null),h(this,`scene`,null),h(this,`camera`,null),h(this,`picker`,null),h(this,`uniforms`,void 0),h(this,`style`,void 0),h(this,`outlineMaterial`,void 0),h(this,`lineShared`,void 0),h(this,`edgeMaterial`,void 0),h(this,`selectionEdgeMaterial`,void 0),h(this,`groundManager`,void 0),h(this,`_datasetManager`,new or),h(this,`_featureStyleManager`,void 0),h(this,`_pickables`,new Map),h(this,`_pickSeq`,0),h(this,`_freePickIds`,[]),h(this,`_smidMeshes`,new Map),h(this,`_meshHeight`,new Map),h(this,`_heightMin`,1/0),h(this,`_heightMax`,-1/0),h(this,`_boxScratch`,new t.Box3),h(this,`_selection`,null),h(this,`_selectedMeshes`,[]),h(this,`_outlineMesh`,null),h(this,`_outlineMeshes`,[]),h(this,`_selectionEdges`,null),h(this,`_selectionEdgeMeshes`,[]),h(this,`_edgesEnabled`,!1),h(this,`attributeQuery`,null),h(this,`_enuMatrix`,new t.Matrix4),h(this,`_needsRepaint`,!0),h(this,`_frame`,0),h(this,`_fps`,{value:0,last:0}),h(this,`_keyLight`,null),h(this,`_fillLight`,null),h(this,`_datasetQueue`,void 0),h(this,`_onRequestRepaint`,()=>{}),h(this,`_getBearing`,void 0),h(this,`_lodRangeScale`,1),this.options=e,this.pickable=e.pickable!==!1,this._lodRangeScale=e.lodRangeScale??1,this._onRequestRepaint=e.onRequestRepaint??(()=>{}),this._getBearing=e.getBearing,this.onStats=e.onStats??(()=>{}),this.onReady=e.onReady??(()=>{}),this.onPick=e.onPick??(()=>{}),this.onError=e.onError??(e=>console.warn(`[s3m]`,e)),this.groundManager=new fr(e.ground),this._featureStyleManager=new dr(()=>this.style.floorHeight,()=>this._requestRepaint(),()=>{this._selection&&this._syncSelectionStyle()},()=>this.getAllMeshes(),e=>this._applyOverridesToMesh(e)),this.uniforms=un(),this.style={...hn,...e.style??{}},this.outlineMaterial=fn(this.uniforms),this.lineShared=Qn(),this.edgeMaterial=tr(this.lineShared,{color:this.style.edgeColor,opacity:this.style.edgeOpacity??.45,width:this.style.edgeWidth??1.2}),this.selectionEdgeMaterial=tr(this.lineShared,{color:this.style.outlineColor??this.style.selectColor,opacity:1,width:this.style.outlineWidthPx??3}),this._fps.last=performance.now(),this._datasetQueue=this._normalizeDatasets(e),e.attributes&&(this.attributeQuery=new Ve(e.attributes))}mount(e,n){this.canvas=e,this.renderer=new t.WebGLRenderer({canvas:e,context:n,antialias:!0}),this.renderer.autoClear=!1,this.renderer.setPixelRatio(1),this.renderer.toneMapping=t.ACESFilmicToneMapping,this.renderer.toneMappingExposure=1,nn(this.renderer.capabilities.getMaxAnisotropy()),this.scene=new t.Scene,this.scene.add(this.groundManager.group),this._addLights(),this.camera=new t.Camera,this.camera.matrixAutoUpdate=!1,this.picker=new Zn(this.renderer),this._applyStyleUniforms();for(let e of this._datasetQueue)this.addDataset(e).catch(e=>this.onError(e));this._recomputeAnchors()}unmount(){for(let e of[...this.datasets.keys()])this.removeDataset(e);this.groundManager.dispose(),this.picker?.dispose(),this.picker=null,this.outlineMaterial.dispose(),this.edgeMaterial.dispose(),this.selectionEdgeMaterial.dispose(),this.scene?.clear(),this._selectedMeshes=[],this._outlineMeshes=[],this._selectionEdgeMeshes=[],this._outlineMesh=null,this._selectionEdges=null,this._smidMeshes.clear(),this._meshHeight.clear(),this._heightMin=1/0,this._heightMax=-1/0,this.renderer?.dispose(),this.renderer=null,this.canvas=null}_addLights(){this.scene&&(this.scene.add(new t.AmbientLight(16777215,.4)),this.scene.add(new t.HemisphereLight(16777215,11976907,.8)),this._keyLight=new t.DirectionalLight(16777215,1),this._fillLight=new t.DirectionalLight(16777215,.35),this.scene.add(this._keyLight,this._fillLight))}_updateLights(){let e=(this._getBearing?.()??0)*Math.PI/180,t=(t,n,r)=>{if(!t)return;let i=e+n*Math.PI/180,a=r*Math.PI/180,o=Math.cos(a);t.position.set(Math.sin(i)*o,Math.cos(i)*o,Math.sin(a)).multiplyScalar(1e3)};t(this._keyLight,150,50),t(this._fillLight,215,30)}_normalizeDatasets(e){return Array.isArray(e.datasets)?e.datasets.filter(e=>!!e?.configUrl):e.configUrl?[{id:`default`,name:`默认数据集`,configUrl:e.configUrl}]:[]}async addDataset(e){if(!this.scene)throw Error(`[s3m] 图层尚未 addLayer,不能添加数据集`);return await this._datasetManager.addDataset(e,this.scene,this.geo,this.uniforms,this._lodRangeScale,this.options.buildTile,this.options.maxTiles??64,this.options.maxConcurrent??4,{onTile:(e,t)=>{this._registerTile(e,t),this.onStats(this.stats),this._needsRepaint=!0,this._requestRepaint()},onTileRemoved:(e,t)=>{this._unregisterTile(e,t),this.onStats(this.stats),this._needsRepaint=!0,this._requestRepaint()},onStats:()=>{this.onStats(this.stats),this._requestRepaint()},onError:e=>{this.onError(e),this.onStats(this.stats)},onReady:e=>{this.onReady(e),this._refreshAllHeights(),this.groundManager.excavationBounds||this.groundManager.autoFitExcavation(this.datasets.values())},triggerRepaint:()=>{this._requestRepaint()}})}_lngLatFromWorld(e,t){return Ke(this.geo,e,t)}recomputeAnchors(){this._datasetManager.recomputeAnchors(this.geo),this._refreshAllHeights(),this._requestRepaint()}_recomputeAnchors(){this.recomputeAnchors()}getDatasetHeight(e){return this._datasetManager.getDatasetHeight(e)}setDatasetHeight(e,t){let n,r;typeof e==`number`?(n=this.datasets.keys().next().value??``,r=e):(n=e,r=t??0),this._datasetManager.setDatasetHeight(n,r,this.geo),this._syncGroundHeight(),this._refreshAllHeights(),this._requestRepaint()}_syncGroundHeight(){let e=this.datasets.keys().next().value;if(!e)return;let t=this._datasetManager.getDatasetHeight(e);this.groundManager.setGroundHeight(t)}setDatasetAlign(e,t){let n,r;t===void 0&&(e===`origin`||e===`bottom`||e===`top`||e===`center`)?(n=this.datasets.keys().next().value??``,r=e):(n=e,r=t??`origin`),this._datasetManager.setDatasetAlign(n,r,this.geo),this._refreshAllHeights(),this._requestRepaint()}_computeAlignOffset(e,t){return this._datasetManager.computeAlignOffset(e,t)}computeAlignOffset(e,t){return this._datasetManager.computeAlignOffset(e,t)}setFeatureStyle(e,t){this._featureStyleManager.setFeatureStyle(e,t,this._meshesOf([e]))}setFeaturesStyle(e,t){this._featureStyleManager.setFeaturesStyle(e,t,this._meshesOf(e))}getFeatureStyle(e){return this._featureStyleManager.getFeatureStyle(e)}getFeatureStyles(){return this._featureStyleManager.getFeatureStyles()}removeFeatureStyle(e){this._featureStyleManager.removeFeatureStyle(e,this._meshesOf([e]))}clearFeatureStyles(){this._featureStyleManager.clearFeatureStyles()}setAttributeSource(e){this.attributeQuery=e?new Ve(e):null}getLoadedSmids(){return[...this._smidMeshes.keys()]}auditBatches(){let e=this._featureStyleManager.auditBatches(this._pickables.values());return e.smids=this._smidMeshes.size,e}getThematicField(){return this._featureStyleManager.thematicField}setThematicColors(e,t=`custom`){this._featureStyleManager.setThematicColors(e,t)}clearThematic(){this._featureStyleManager.clearThematicColors()}getFilterField(){return this._featureStyleManager.fieldFilter?.field??null}filterByField(e){return this._featureStyleManager.filterByField(e,this.attributeQuery,this.getLoadedSmids())}clearFieldFilter(){this._featureStyleManager.clearFieldFilter()}getElevationField(){return this._featureStyleManager.elevationField}elevateByField(e){return this._featureStyleManager.elevateByField(e,this.attributeQuery,this.getLoadedSmids())}setThematicElevation(e,t=`custom`){this._featureStyleManager.setThematicElevation(e,t)}clearThematicElevation(){this._featureStyleManager.clearThematicElevation()}colorByField(e){return this._featureStyleManager.colorByField(e,this.attributeQuery,this.getLoadedSmids())}setFilter(e){this._featureStyleManager.setFilter(e,this.uniforms)}getFilter(){return this._featureStyleManager.filter}clearFilter(){this._featureStyleManager.clearFilter(this.uniforms)}setGroundMode(e){this.groundManager.setMode(e),this._requestRepaint()}setGroundOpacity(e){this.groundManager.setOpacity(e),this._requestRepaint()}setExcavationBounds(e){this.groundManager.setExcavationBounds(e),this._requestRepaint()}_isFeatureHidden(e,t){if(e==null)return!1;let n=this._featureStyleManager.fieldFilter;if(n){let t=n.matched.has(e);if(n.mode===`keep`?!t:t)return!0}let r=this._featureStyleManager.filter;return!!(r&&(r.include&&r.include.length>0&&!r.include.includes(e)||r.exclude&&r.exclude.length>0&&r.exclude.includes(e))||this._featureStyleManager.featureStyles.get(e)?.hidden)}getAllMeshes(){let e=[];for(let t of this._pickables.values())e.push(t.mesh);return e}_meshesOf(e){let t=new Set;for(let n of e){let e=this._smidMeshes.get(n);if(e)for(let n of e)t.add(n)}return t}_markOverridesDirty(e=`all`){e===`all`?this._featureStyleManager.markOverridesDirty(void 0,this.getAllMeshes()):this._featureStyleManager.markOverridesDirty(e)}flushOverrides(){this._featureStyleManager.flushOverrides()}_applyOverridesToMesh(e){this._featureStyleManager.applyOverridesToMesh(e)}removeDataset(e){if(this.datasets.get(e)){this._selection?.datasetId===e&&this.select(null),this._datasetManager.removeDataset(e,this.scene,this.geo,e=>{e.root.traverse(e=>{let t=e,n=t.userData;n.pickId!=null&&(this._pickables.delete(n.pickId),this._releasePickId(n.pickId),n.pickId=void 0),this._unindexMeshSmids(t),this._removeMeshHeight(t),t.geometry?.dispose?.();let r=$(t);r&&r.dispose(),this._featureStyleManager.disposeMesh(t)})});for(let[t,n]of this._pickables)n.datasetId===e&&this._pickables.delete(t);this.onStats(this.stats),this._requestRepaint()}}clearDatasets(){for(let e of[...this.datasets.keys()])this.removeDataset(e)}setDatasetVisible(e,t){this._datasetManager.setDatasetVisible(e,t),!t&&this._selection?.datasetId===e&&this.select(null),this._requestRepaint()}_registerTile(e,t){t.root.add(e.group),e.group.updateMatrixWorld(!0);let n=e.group.userData.hasNativeEdges===!0;for(let r of e.group.children){if(r.isLineSegments&&r.userData.isEdgeLines){r.visible=this._edgesEnabled,this._styleEdgeLine(r);continue}let i=r;if(!i.isMesh)continue;let a=i.userData;a.pickId=this._allocPickId(),a.datasetId=t.id,a.nativeEdges=n,this._pickables.set(a.pickId,{datasetId:t.id,mesh:i,tile:e.tile,skeletonName:a.skeletonName??``}),this._indexMeshSmids(i),this._addMeshHeight(i),this._edgesEnabled&&!n&&this._ensureEdges(i);let o=$(i);if(o){let e=Math.min(1,Math.max(.05,this.style.opacity??1));o.opacity=e,o.transparent=e<.999,o.depthWrite=e>=.999,o.flatShading=this.style.shading!==`smooth`,o.needsUpdate=!0,this._featureStyleManager.applyOverridesToMesh(i)}}}_unregisterTile(e,t){for(let t of[...e.group.children]){let e=t;if(!e.isMesh)continue;let n=e.userData;(this._selection?.mesh===e||this._selectedMeshes.includes(e))&&this.select(null),n.pickId!=null&&(this._pickables.delete(n.pickId),this._releasePickId(n.pickId),n.pickId=void 0),this._unindexMeshSmids(e),this._removeMeshHeight(e),this._featureStyleManager.disposeMesh(e),$(e)?.dispose?.(),e.geometry?.dispose?.()}t.root.remove(e.group)}_allocPickId(){let e=this._freePickIds.pop();if(e!==void 0)return e;if(this._pickSeq>pr){for(let e=0;e<=pr;e++)if(!this._pickables.has(e))return e;throw Error(`[s3m] 可拾取网格超过 65535 个,2 字节 ID 编码不够用`)}return this._pickSeq++}_releasePickId(e){this._freePickIds.push(e)}setOpacity(e){this.setStyle({opacity:e})}setStyle(e={}){this.style={...this.style,...e},this._applyStyleUniforms(),(`opacity`in e||`depthWrite`in e)&&this._applyOpacity(),`shading`in e&&this._applyShading(),`edges`in e?this.setEdges(!!this.style.edges):(`edgeColor`in e||`edgeWidth`in e||`opacity`in e||`edgeOpacity`in e)&&this._refreshEdgeLines(),this._selection&&(`outline`in e||`outlineStyle`in e?this.select(this._selection,{silent:!0}):this._syncSelectionStyle()),this._requestRepaint()}getStyle(){return{...this.style,modeLabel:pn[this.style.mode]}}_applyStyleUniforms(){let e=this.uniforms,t=this.style;e.uMode.value=t.mode,e.uColorA.value.set(t.colorA),e.uColorB.value.set(t.colorB),e.uColorC.value.set(t.colorC),e.uSelColor.value.set(t.selectColor),e.uFloorHeight.value=t.floorHeight;let n=t.selectMode??Z.OVERLAY;e.uSelMode&&(e.uSelMode.value=n===Z.REPLACE?0:n===Z.MULTIPLY?2:n===Z.GLOW_ONLY?3:1),e.uSelOpacity&&t.selectOpacity!=null&&(e.uSelOpacity.value=t.selectOpacity),e.uSelEmissive&&t.selectEmissive!=null&&(e.uSelEmissive.value=t.selectEmissive),e.uSelElevation&&t.selectElevation!=null&&(e.uSelElevation.value=t.selectElevation),e.uDimFactor&&t.dimFactor!=null&&(e.uDimFactor.value=t.dimFactor),e.uRoofThreshold&&t.roofThreshold!=null&&(e.uRoofThreshold.value=t.roofThreshold),e.uTexMix&&t.texMix!=null&&(e.uTexMix.value=t.texMix),this.outlineMaterial&&(this.outlineMaterial.uniforms.uElevation&&t.selectElevation!=null&&(this.outlineMaterial.uniforms.uElevation.value=t.selectElevation),t.outlineWidth!=null&&(this.outlineMaterial.uniforms.uWidth.value=t.outlineWidth),t.outlineColor==null?this.outlineMaterial.uniforms.uColor.value.set(t.selectColor):this.outlineMaterial.uniforms.uColor.value.set(t.outlineColor))}_applyOpacity(){let e=Math.min(1,Math.max(.05,this.style.opacity??1)),t=e<.999,n=this.style.depthWrite!==!1;for(let r of this._pickables.values()){let i=$(r.mesh);i&&(i.opacity=e,i.transparent=t,i.depthWrite=!t||n)}this._requestRepaint()}_applyShading(){let e=this.style.shading!==`smooth`;for(let t of this._pickables.values()){let n=$(t.mesh);n&&n.flatShading!==e&&(n.flatShading=e,n.needsUpdate=!0)}this._requestRepaint()}_addMeshHeight(e){let t=e.geometry?.boundingBox;if(!t)return;this._boxScratch.copy(t).applyMatrix4(e.matrixWorld);let n=this._boxScratch.min.z,r=this._boxScratch.max.z;Number.isFinite(n)&&Number.isFinite(r)&&(this._meshHeight.set(e,{min:n,max:r}),n<this._heightMin&&(this._heightMin=n),r>this._heightMax&&(this._heightMax=r),this._pushHeightRange())}_removeMeshHeight(e){let t=this._meshHeight.get(e);t&&(this._meshHeight.delete(e),t.min===this._heightMin||t.max===this._heightMax?this._recomputeHeightRange():this._pushHeightRange())}_refreshAllHeights(){if(this._meshHeight.size===0)return;let e=[...this._meshHeight.keys()];this._meshHeight.clear(),this._heightMin=1/0,this._heightMax=-1/0;for(let t of e)this._addMeshHeight(t);this._pushHeightRange()}_recomputeHeightRange(){let e=1/0,t=-1/0;for(let n of this._meshHeight.values())n.min<e&&(e=n.min),n.max>t&&(t=n.max);this._heightMin=e,this._heightMax=t,this._pushHeightRange()}_pushHeightRange(){let e=this._heightMin,t=this._heightMax;(!Number.isFinite(e)||!Number.isFinite(t)||t<=e)&&(e=0,t=100),this.uniforms.uHeightMin.value=e,this.uniforms.uHeightMax.value=t}_indexMeshSmids(e){let t=e.userData.geoRef?.pickInfo;if(t)for(let n of Object.keys(t)){let t=Number(n);if(!Number.isFinite(t)||t<0)continue;let r=this._smidMeshes.get(t);r||this._smidMeshes.set(t,r=new Set),r.add(e)}}_unindexMeshSmids(e){let t=e.userData.geoRef?.pickInfo;if(t)for(let n of Object.keys(t)){let t=Number(n),r=this._smidMeshes.get(t);r&&(r.delete(e),r.size===0&&this._smidMeshes.delete(t))}}setEdges(e){this._edgesEnabled=e,this.style.edges=e;for(let t of this.datasets.values())t.root.traverse(t=>{t.userData.isEdgeLines&&(t.visible=e,this._styleEdgeLine(t))});if(this._syncEdgeStyle(),!e){for(let e of this._pickables.values())this._removeEdges(e.mesh);this._requestRepaint();return}let t=[...this._pickables.values()].map(e=>e.mesh).filter(e=>{let t=e.userData;return!t.edges&&!t.nativeEdges}),n=0,r=()=>{let e=performance.now();for(;n<t.length&&performance.now()-e<8;)this._ensureEdges(t[n++]);n<t.length?setTimeout(r,0):this._requestRepaint()};r()}_syncEdgeStyle(){let e=this.style,t=this.edgeMaterial.uniforms;t.uColor.value.set(e.edgeColor),t.uWidth.value=Math.max(.1,e.edgeWidth??1.2),t.uOpacity.value=Math.min(1,Math.max(0,e.edgeOpacity??.45))*Math.min(1,Math.max(.05,e.opacity??1))}_styleEdgeLine(e){let t=e.material;t&&t.color&&(t.color.set(this.style.edgeColor),t.opacity=(this.style.edgeOpacity??.45)*Math.min(1,Math.max(.05,this.style.opacity??1)),t.transparent=!0,t.polygonOffset=!0,t.polygonOffsetFactor=-1,t.polygonOffsetUnits=-1,t.needsUpdate=!0)}_refreshEdgeLines(){this._syncEdgeStyle();for(let e of this.datasets.values())e.root.traverse(e=>{e.userData.isEdgeLines&&this._styleEdgeLine(e)})}_ensureEdges(e){let n=e.userData;if(n.edges||n.nativeEdges||!e.geometry||(e.geometry.index?.count??0)>12e4)return;let r=new t.EdgesGeometry(e.geometry,40),i=r.getAttribute(`position`),a=i?i.array:null;if(r.dispose(),!a||a.length<6)return;let o=new t.Mesh(nr(a),this.edgeMaterial);o.renderOrder=2,o.frustumCulled=!1,o.raycast=()=>{},o.userData.isThickEdge=!0,n.edges=o,e.add(o)}_removeEdges(e){let t=e.userData,n=t.edges;n&&(e.remove(n),n.geometry?.dispose(),t.edges=null)}getRayAt(e,n){if(!this.camera||!this.canvas)return null;let r=this.canvas,i=r.clientWidth||r.width,a=r.clientHeight||r.height;if(!i||!a)return null;let o=e/i*2-1,s=-(n/a)*2+1,c=new t.Vector3(o,s,-1).unproject(this.camera),l=new t.Vector3(o,s,1).unproject(this.camera).clone().sub(c).normalize();return new t.Ray(c,l)}_intersectMeshAtRay(e,n,r){let i=new t.Raycaster;i.ray.copy(n);let a=i.intersectObject(e,!1);if(!a.length)return null;if(r!=null){let e=a.find(e=>e.instanceId===r);return e?e.point:a[0].point}return a[0].point}_buildPickResult(e,n,r,i){let a=n.mesh.userData,o=null,s=e.batchId,c=e.instanceIndex,l=a.geoRef,u=[];if(c!=null){let e=this._instanceFeature(n.mesh,l,c);if(!e)return null;o=e.smid,s=e.batchId}else{l=a.geoByBatchId?.get(e.batchId)??a.geoRef;let t=A(l,e.batchId);o=t.smid,u=t.segments}if(this._isFeatureHidden(o,s))return null;let d=null,f=0;if(c!=null)d=this._instanceBox(n.mesh,c),f=n.mesh.geometry.index?Math.round(n.mesh.geometry.index.count/3):0;else if(o!=null&&this._smidMeshes.has(o)){let e=this._smidMeshes.get(o),t=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,s=-1/0,c=0;for(let l of e){let e=l.userData,u=e.geoRef?.pickInfo,d=u?.[o]??u?.[String(o)],p=d?k(d):-1,m=d?.segments??(p>=0?A(e.geoRef,p).segments:[]),h=j(l.geometry,m);h&&(h.minX<t&&(t=h.minX),h.minY<n&&(n=h.minY),h.minZ<r&&(r=h.minZ),h.maxX>i&&(i=h.maxX),h.maxY>a&&(a=h.maxY),h.maxZ>s&&(s=h.maxZ),c+=h.count,f+=h.triangles)}c>0&&(d={minX:t,minY:n,minZ:r,maxX:i,maxY:a,maxZ:s,count:c,triangles:f})}if(!d&&(d=j(n.mesh.geometry,u),!d&&n.mesh.geometry)){n.mesh.geometry.boundingBox||n.mesh.geometry.computeBoundingBox();let e=n.mesh.geometry.boundingBox;e&&(d={minX:e.min.x,maxX:e.max.x,minY:e.min.y,maxY:e.max.y,minZ:e.min.z,maxZ:e.max.z,count:0,triangles:0})}let p=n.mesh.geometry,m=f>0?f:p.index?Math.round(p.index.count/3):0,h=Pe({smid:o,box:d,triangles:m,floorHeight:this.style.floorHeight}),g=null;if(d&&this.sceneAnchor){let e=new t.Vector3((d.minX+d.maxX)/2,(d.minY+d.maxY)/2,(d.minZ+d.maxZ)/2);e.applyMatrix4(n.mesh.matrixWorld);let r=this.sceneAnchor.meterInMercator;g=this._lngLatFromWorld(e.x*r+this.sceneAnchor.x,-e.y*r+this.sceneAnchor.y)}let _=r??null;!_&&i&&(_=this._intersectMeshAtRay(n.mesh,i,c));let v=null,y=null,b=null;if(_&&this.sceneAnchor){let e=o==null?{}:this._featureStyleManager.getFeatureEffectiveOffset(o),n=e.translation,r=e.elevation,i=_.clone();n?i.add(new t.Vector3(n[0],n[1],n[2])):r&&(i.z+=r),v=[i.x,i.y,i.z];let a=this.sceneAnchor.meterInMercator;y=this._lngLatFromWorld(i.x*a+this.sceneAnchor.x,-i.y*a+this.sceneAnchor.y),b=i.z+(this.sceneAnchor.altitude??0)}else g&&d&&this.sceneAnchor&&(y=g,b=(d.minZ+d.maxZ)/2+(this.sceneAnchor.altitude??0));return{datasetId:n.datasetId,datasetName:this.datasets.get(n.datasetId)?.name??n.datasetId,objectId:e.objectId,batchId:s,instanceIndex:c,skeletonName:n.skeletonName,centerLngLat:g,point:v,lngLat:y,altitude:b,...h,mesh:n.mesh}}pick(e,t){if(!this.picker||!this.scene||!this.camera||!this.sceneAnchor)return null;let n=this.picker.pick(this.scene,this.camera,e,t);if(!n)return null;let r=this._pickables.get(n.objectId);if(!r)return null;let i=this.getRayAt(e,t);return this._buildPickResult(n,r,void 0,i??void 0)}pickPosition(e,n){if(!this.camera||!this.sceneAnchor)return null;let r=this.pick(e,n);if(r?.point&&r?.lngLat&&r.altitude!=null)return{lngLat:r.lngLat,altitude:r.altitude,point:r.point};let i=this.getRayAt(e,n);if(!i)return null;let a=new t.Plane(new t.Vector3(0,0,1),0),o=new t.Vector3,s=i.intersectPlane(a,o);if(s){let e=this.sceneAnchor.meterInMercator;return{lngLat:this._lngLatFromWorld(s.x*e+this.sceneAnchor.x,-s.y*e+this.sceneAnchor.y),altitude:s.z+(this.sceneAnchor.altitude??0),point:[s.x,s.y,s.z]}}return null}drillPick(e,n,r=10){if(!this.sceneAnchor||!this.camera)return[];let i=this.getRayAt(e,n);if(!i)return[];let a=new t.Raycaster;a.ray.copy(i);let o=[...this._pickables.values()].map(e=>e.mesh).filter(e=>{let t=e;for(;t;){if(!t.visible)return!1;t=t.parent}return!0}),s=a.intersectObjects(o,!1);if(!s.length)return[];let c=[],l=new Set,u=new Set;for(let e of s){if(c.length>=r)break;let t=e.object,n=t.userData;if(n.pickId==null)continue;let i=this._pickables.get(n.pickId);if(!i)continue;let a=null,o=-1,s=e.instanceId;if(s!=null){let e=this._instanceFeature(t,n.geoRef,s);if(!e)continue;a=e.smid,o=e.batchId}else if(e.faceIndex!=null){let r=t.geometry.attributes.aBatchId;if(r){let i=t.geometry.index?t.geometry.index.getX(e.faceIndex*3):e.faceIndex*3;o=Math.round(r.getX(i)),a=A(n.geoByBatchId?.get(o)??n.geoRef,o).smid}}if(a!=null){if(l.has(a))continue;l.add(a)}else{let e=`${n.pickId}:${o}:${s??-1}`;if(u.has(e))continue;u.add(e)}if(this._isFeatureHidden(a,o))continue;let d={objectId:n.pickId,batchId:o,instanceIndex:s},f=this._buildPickResult(d,i,e.point);f&&c.push(f)}return c}getFeatureBounds(e){if(!this.sceneAnchor)return null;let n=1/0,r=-1/0,i=1/0,a=-1/0,o=!1;for(let s of this._pickables.values()){let c=s.mesh,l=c.userData,u=l.geoRef,d=u?.pickInfo;if(!d)continue;let f=null;if(c.isInstancedMesh){let t=l.instanceLookup;t||(t=Ne(d),l.instanceLookup=t);for(let[n,r]of t)if(r.smid===e){f=this._instanceBox(c,n);break}}else{let t=d,n=t[e]??t[String(e)];if(n){let e=A(u,k(n));if(f=j(c.geometry,e.segments),!f&&c.geometry){c.geometry.boundingBox||c.geometry.computeBoundingBox();let e=c.geometry.boundingBox;e&&(f={minX:e.min.x,maxX:e.max.x,minY:e.min.y,maxY:e.max.y,minZ:e.min.z,maxZ:e.max.z,count:0,triangles:0})}}}if(f){o=!0;let s=[new t.Vector3(f.minX,f.minY,f.minZ),new t.Vector3(f.maxX,f.minY,f.minZ),new t.Vector3(f.minX,f.maxY,f.minZ),new t.Vector3(f.maxX,f.maxY,f.minZ),new t.Vector3(f.minX,f.minY,f.maxZ),new t.Vector3(f.maxX,f.minY,f.maxZ),new t.Vector3(f.minX,f.maxY,f.maxZ),new t.Vector3(f.maxX,f.maxY,f.maxZ)],l=e==null?{}:this._featureStyleManager.getFeatureEffectiveOffset(e),u=l.translation,d=l.elevation;for(let e of s){u?e.add(new t.Vector3(u[0],u[1],u[2])):d&&(e.z+=d),e.applyMatrix4(c.matrixWorld);let o=this.sceneAnchor.meterInMercator,[s,l]=this._lngLatFromWorld(e.x*o+this.sceneAnchor.x,-e.y*o+this.sceneAnchor.y);s<n&&(n=s),s>r&&(r=s),l<i&&(i=l),l>a&&(a=l)}}}return o?[[n,i],[r,a]]:null}_instanceFeature(e,t,n){let r=e.userData;return r.instanceLookup||(r.instanceLookup=Ne(t?.pickInfo)),r.instanceLookup.get(n)??null}_instanceBox(e,n){let r=e;if(!r.isInstancedMesh)return null;let i=e.geometry;i.boundingBox||i.computeBoundingBox();let a=i.boundingBox;if(!a)return null;let o=new t.Matrix4;r.getMatrixAt(n,o);let s=a.clone().applyMatrix4(o);return{minX:s.min.x,minY:s.min.y,minZ:s.min.z,maxX:s.max.x,maxY:s.max.y,maxZ:s.max.z,count:i.getAttribute(`position`)?.count??0,triangles:i.index?Math.round(i.index.count/3):0}}select(e,{silent:t=!1}={}){if(this._selection){for(let e of this._selectedMeshes){let t=$(e);t&&(t.userData.uSelBatch.value=-1,t.userData.uSelWhole.value=0)}this._selectedMeshes=[],this._clearSelectionDecoration(),this._selection=null}if(!e){this.uniforms.uSelMix.value=0,this.uniforms.uDim.value=0,this.outlineMaterial.uniforms.uSelBatch.value=-1,this.outlineMaterial.uniforms.uSelWhole.value=0,this.outlineMaterial.uniforms.uElevation.value=0,this._requestRepaint(),t||this.onPick(null);return}this._selection=e;let n=new Set;if(e.smid!=null){let t=this._smidMeshes.get(e.smid);if(t)for(let e of t)n.add(e)}n.add(e.mesh);for(let t of n){let n=$(t);if(!n)continue;let r=e.batchId;if(e.instanceIndex!=null&&t===e.mesh)r=e.batchId;else if(e.smid!=null){let n=t.userData.geoRef?.pickInfo,i=n?.[e.smid]??n?.[String(e.smid)],a=i?k(i):-1;r=a>=0?a:t===e.mesh?e.batchId:-1}n.userData.uSelBatch.value=r,n.userData.uSelWhole.value=+(r<0),this._selectedMeshes.push(t)}this.uniforms.uSelMix.value=1,this.uniforms.uDim.value=+!!this.style.dimOthers,this.style.outline&&((this.style.outlineStyle??`edges`)===`edges`?this._addSelectionEdges(e,n):this._addSelectionHull(e,n)),this._requestRepaint()}_addSelectionEdges(e,n){this._syncSelectionStyle();for(let r of n){let n=r.userData,i=n.geoRef,a=[];if(r===e.mesh&&e.instanceIndex!=null)a=[{vertexOffset:0,vertexCount:r.geometry.getAttribute(`position`)?.count??0}];else if(e.smid!=null){let t=i?.pickInfo,n=t?.[e.smid]??t?.[String(e.smid)],r=n?k(n):-1;a=n?.segments??(r>=0?A(i,r).segments:[])}else r===e.mesh&&(a=A(n.geoByBatchId?.get(e.batchId)??i,e.batchId).segments);let o=ar(r.geometry,a);if(o&&o.length>0){let n=new t.Mesh(nr(o),this.selectionEdgeMaterial);n.renderOrder=4,n.frustumCulled=!1,n.raycast=()=>{},n.userData.isSelectionEdge=!0,r===e.mesh&&e.instanceIndex!=null&&this._applyInstanceTransform(n,e),r.add(n),this._selectionEdgeMeshes.push(n)}}this._selectionEdgeMeshes.length===0?this._addSelectionHull(e,n):this._selectionEdges=this._selectionEdgeMeshes[0]??null}_applyInstanceTransform(e,n){let r=n.mesh;if(n.instanceIndex==null||!r.isInstancedMesh)return;let i=new t.Matrix4;r.getMatrixAt(n.instanceIndex,i),i.decompose(e.position,e.quaternion,e.scale)}_addSelectionHull(e,n){let r=e.instanceIndex!=null;this.outlineMaterial.uniforms.uSelBatch.value=r?-1:e.batchId,this.outlineMaterial.uniforms.uSelWhole.value=r||e.batchId<0?1:0,this.outlineMaterial.uniforms.uElevation.value=r?this._selectionElevation(e):this.style.selectElevation??0;for(let r of n){let n=$(r);n?.userData?.uBatchTex&&(this.outlineMaterial.uniforms.uBatchTex.value=n.userData.uBatchTex.value,this.outlineMaterial.uniforms.uBatchTexWidth.value=n.userData.uBatchTexWidth.value,this.outlineMaterial.uniforms.uBatchTexActive.value=n.userData.uBatchTexActive.value);let i=new t.Mesh(r.geometry,this.outlineMaterial);i.renderOrder=3,i.frustumCulled=!1,i.raycast=()=>{},r===e.mesh&&e.instanceIndex!=null&&this._applyInstanceTransform(i,e),r.add(i),this._outlineMeshes.push(i)}this._outlineMesh=this._outlineMeshes[0]??null}_syncSelectionStyle(){let e=this.style,t=this.selectionEdgeMaterial.uniforms;t.uColor.value.set(e.outlineColor??e.selectColor),t.uWidth.value=Math.max(.1,e.outlineWidthPx??3),t.uOpacity.value=Math.min(1,Math.max(.05,e.opacity??1)),t.uElevation.value=this._selection?this._selectionElevation(this._selection):0;for(let e of this._outlineMeshes){let t=e.parent,n=t?$(t)?.userData:null;n?.uBatchTex&&(this.outlineMaterial.uniforms.uBatchTex.value=n.uBatchTex.value,this.outlineMaterial.uniforms.uBatchTexWidth.value=n.uBatchTexWidth.value,this.outlineMaterial.uniforms.uBatchTexActive.value=n.uBatchTexActive.value)}}_selectionElevation(e){let t=this.style.selectElevation??0;if(e.smid!=null){let n=this._featureStyleManager.getFeatureEffectiveOffset(e.smid);n.elevation&&(t+=n.elevation)}return t}_clearSelectionDecoration(){for(let e of this._outlineMeshes)e.parent?.remove(e);this._outlineMeshes=[],this._outlineMesh=null;for(let e of this._selectionEdgeMeshes)e.parent?.remove(e),e.geometry.dispose();this._selectionEdgeMeshes=[],this._selectionEdges=null}_updateLineResolution(e){let t=e.width||1,n=e.height||1,r=e.clientWidth||t;this.lineShared.uResolution.value.set(t,n),this.lineShared.uDpr.value=Math.max(1,t/r)}get lodRangeScale(){return this._lodRangeScale}setLodRangeScale(e,t){if(!(e<=0)){if(t){let n=this.datasets.get(t);n?.tileset&&(n.tileset.lodRangeScale=e)}else{this._lodRangeScale=e;for(let t of this.datasets.values())t.tileset&&(t.tileset.lodRangeScale=e)}this._requestRepaint()}}renderFrame(e){if(!this.renderer||!this.scene||!this.camera||!this.sceneAnchor||!this.canvas)return!1;this.flushOverrides();let n=this.canvas,r=this.sceneAnchor.meterInMercator;this._enuMatrix.set(r,0,0,this.sceneAnchor.x,0,-r,0,this.sceneAnchor.y,0,0,r,this.sceneAnchor.z,0,0,0,1);let i=new t.Matrix4().fromArray(e.mvp);i.multiply(this._enuMatrix),this.camera.projectionMatrix.copy(i),this.camera.projectionMatrixInverse.copy(i).invert();let a=e.cameraEnu;this.camera.position.set(a[0],a[1],a[2]),this.camera.matrixWorld.setPosition(a[0],a[1],a[2]),this.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert(),this.groundManager.update(this.camera);let o=!1;for(let t of this.datasets.values()){if(!t.visible||!t.tileset)continue;let n=[a[0]-t.offset[0],a[1]-t.offset[1],a[2]-t.offset[2]];t.tileset.update(n,e.fovRad,e.canvasHeight)&&(o=!0)}this.style.mode===X.DYNAMIC&&(this.uniforms.uTime.value+=.016*(this.style.speed??1)),this._updateLights(),this._updateLineResolution(n),this.renderer.setViewport(0,0,n.width,n.height),this.renderer.resetState(),this.renderer.render(this.scene,this.camera),this._frame++;let s=performance.now();return s-this._fps.last>500&&(this._fps.value=Math.round(this._frame*1e3/(s-this._fps.last)),this._frame=0,this._fps.last=s),this.style.mode===X.DYNAMIC||this.stats.loading>0||o}get fps(){return this._fps.value}get stats(){let e={tiles:0,loading:0,failed:0,meshes:0,vertices:0,triangles:0,datasets:this.datasets.size};for(let t of this.datasets.values()){let n=t.tileset?.stats;n&&(e.tiles+=n.tiles,e.loading+=n.loading,e.failed+=n.failed,e.meshes+=n.meshes,e.vertices+=n.vertices,e.triangles+=n.triangles)}return e}getBounds(){let e=1/0,t=1/0,n=-1/0,r=-1/0;for(let i of this.datasets.values()){let a=i.tileset?.config?.geoBounds;a&&(e=Math.min(e,a.left),n=Math.max(n,a.right),t=Math.min(t,a.bottom),r=Math.max(r,a.top))}return isFinite(e)?[[e,t],[n,r]]:null}dispose(){this.unmount()}};Vn();var hr=1e-4;function gr(e,t){let n=e.elements;for(let e=0;e<16;e++){let r=Math.max(1,Math.abs(n[e]),Math.abs(t[e]));if(Math.abs(n[e]-t[e])>hr*r)return!1}return!0}function _r(e){let t=e.elements,n=1;for(let e=0;e<16;e++){let r=Math.abs(t[e]);r>n&&(n=r)}let r=1e-6*n;return Math.abs(t[3])<r&&Math.abs(t[7])<r&&Math.abs(t[11])<r&&Math.abs(t[15]-1)<r}function vr(e,t){return t>0&&Math.abs(e.elements[5]*Math.tan(t/2)-1)<.001}function yr(e){if(!e||typeof e!=`object`)return null;let t=e;return t.defaultProjectionData?.projectionMatrix??t.projectionMatrix??null}function br(e){let t={nearZ:null,farZ:null};if(!e||typeof e!=`object`)return t;let n=e,r=n.defaultProjectionData,i=e=>{let t=n[e];if(typeof t==`number`&&Number.isFinite(t))return t;let i=r?.[e];return typeof i==`number`&&Number.isFinite(i)?i:null};return{nearZ:i(`nearZ`),farZ:i(`farZ`)}}function xr(e,t){if(e&&typeof e==`object`){let t=e.fov;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return t}return typeof t==`number`&&Number.isFinite(t)&&t>0?t:null}function Sr(e,n){let r=e.projectionMatrix;if(!r||r.length<16)return null;let i=new t.Matrix4().fromArray(Array.from(r)),a=new t.Matrix4().fromArray(Array.from(e.mvp));if(i.determinant()===0||!vr(i,n.fov))return null;let o=i.clone().invert().multiply(a);if(!gr(i.clone().multiply(o),Array.from(e.mvp))||!_r(o)||!vr(i,n.fov))return null;let{distance:s,fov:c,aspect:l}=n;if(!(s>0)||!(c>0)||!(l>0))return null;let u=s*Math.tan(c/2),d=u*l,f=e.nearZ!=null&&e.nearZ>0?e.nearZ:1,p=e.farZ!=null&&e.farZ>f?e.farZ:s*4+1e3;p>f||(p=f+1e3);let m=new t.OrthographicCamera(-d,d,u,-u,f,p);return m.updateProjectionMatrix(),{matrix:m.projectionMatrix.clone().multiply(o),view:o}}var Cr=u({AttributeQuery:()=>Ve,BinaryReader:()=>g,DEFAULT_FLOOR_HEIGHT:()=>Fe,DEFAULT_STYLE:()=>hn,DatasetManager:()=>or,EARTH_RADIUS:()=>He,FeatureStyleManager:()=>dr,GroundManager:()=>fr,Picker:()=>Zn,PixelFormat:()=>Y,S3MTileset:()=>Kn,S3MViewer:()=>mr,S3M_VERSION:()=>oe,SELECT_MODE:()=>Z,SELECT_MODE_LABELS:()=>mn,STYLE:()=>X,STYLE_LABELS:()=>pn,TextureCompress:()=>J,VertexTag:()=>D,VertexTagV3:()=>se,buildAttributes:()=>Pe,buildFeatureEdgeSegments:()=>ar,buildOrthoMVP:()=>Sr,buildThickLineGeometry:()=>nr,buildTileObjects:()=>Bn,createLineSharedUniforms:()=>Qn,createOutlineMaterial:()=>fn,createSharedUniforms:()=>un,createStyledMaterial:()=>dn,createTexture:()=>sn,createThickLineMaterial:()=>tr,default:()=>mr,dxtPixelFormatOf:()=>$t,extractFovRadians:()=>xr,extractNearFar:()=>br,extractProjectionMatrix:()=>yr,lngLatFromMercator:()=>We,lngLatFromWorld:()=>Ke,measureSegments:()=>j,mercatorFromLngLat:()=>Ue,parseS3MB:()=>Me,resolveFeature:()=>A,resolveTextureKind:()=>Qt,setMaxAnisotropy:()=>nn,worldFromLngLat:()=>Ge});Ie(),Tn(),ln(),tn(),Ie(),tn(),ln(),Tn(),Vn();var wr=globalThis;return wr.THREE||(wr.THREE=t),wr.S3M=Cr,e.AttributeQuery=Ve,e.BinaryReader=g,e.DEFAULT_FLOOR_HEIGHT=Fe,e.DEFAULT_STYLE=hn,e.DatasetManager=or,e.EARTH_RADIUS=He,e.FeatureStyleManager=dr,e.GroundManager=fr,e.Picker=Zn,e.PixelFormat=Y,e.S3MTileset=Kn,e.S3MViewer=mr,e.default=mr,e.S3M_VERSION=oe,e.SELECT_MODE=Z,e.SELECT_MODE_LABELS=mn,e.STYLE=X,e.STYLE_LABELS=pn,e.TextureCompress=J,e.VertexTag=D,e.VertexTagV3=se,e.buildAttributes=Pe,e.buildFeatureEdgeSegments=ar,e.buildOrthoMVP=Sr,e.buildThickLineGeometry=nr,e.buildTileObjects=Bn,e.createLineSharedUniforms=Qn,e.createOutlineMaterial=fn,e.createSharedUniforms=un,e.createStyledMaterial=dn,e.createTexture=sn,e.createThickLineMaterial=tr,e.dxtPixelFormatOf=$t,e.extractFovRadians=xr,e.extractNearFar=br,e.extractProjectionMatrix=yr,e.lngLatFromMercator=We,e.lngLatFromWorld=Ke,e.measureSegments=j,e.mercatorFromLngLat=Ue,e.parseS3MB=Me,e.resolveFeature=A,e.resolveTextureKind=Qt,e.setMaxAnisotropy=nn,e.worldFromLngLat=Ge,e})({},THREE);