@selvajs/visualization 1.0.0-beta.1 → 1.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +7 -7
  2. package/dist/gpu-dispose-Dkj-BKt4.js +2 -0
  3. package/dist/gpu-dispose-Dkj-BKt4.js.map +1 -0
  4. package/dist/gpu-dispose-DrN-ryj5.cjs +2 -0
  5. package/dist/gpu-dispose-DrN-ryj5.cjs.map +1 -0
  6. package/dist/index.cjs +0 -1
  7. package/dist/index.d.cts +1 -2
  8. package/dist/index.d.ts +1 -2
  9. package/dist/index.js +1 -1
  10. package/dist/parse.cjs +3 -3
  11. package/dist/parse.cjs.map +1 -1
  12. package/dist/parse.d.cts +117 -110
  13. package/dist/parse.d.ts +117 -110
  14. package/dist/parse.js +3 -3
  15. package/dist/parse.js.map +1 -1
  16. package/dist/render.cjs +5 -6
  17. package/dist/render.cjs.map +1 -1
  18. package/dist/render.d.cts +441 -312
  19. package/dist/render.d.ts +441 -312
  20. package/dist/render.js +5 -6
  21. package/dist/render.js.map +1 -1
  22. package/dist/rolldown-runtime-BocRIvOZ.cjs +1 -0
  23. package/dist/scene.cjs +1 -1
  24. package/dist/scene.cjs.map +1 -1
  25. package/dist/scene.d.cts +94 -89
  26. package/dist/scene.d.ts +94 -89
  27. package/dist/scene.js +1 -1
  28. package/dist/scene.js.map +1 -1
  29. package/dist/types-Di80Y609.d.cts +34 -0
  30. package/dist/types-Di80Y609.d.ts +34 -0
  31. package/package.json +13 -8
  32. package/dist/chunk-5XGN7UAV.js +0 -2
  33. package/dist/chunk-5XGN7UAV.js.map +0 -1
  34. package/dist/chunk-AZ4GBXXL.cjs +0 -2
  35. package/dist/chunk-AZ4GBXXL.cjs.map +0 -1
  36. package/dist/chunk-BYLIBOAU.cjs +0 -2
  37. package/dist/chunk-BYLIBOAU.cjs.map +0 -1
  38. package/dist/chunk-KRA5RVHM.js +0 -2
  39. package/dist/chunk-KRA5RVHM.js.map +0 -1
  40. package/dist/index.cjs.map +0 -1
  41. package/dist/index.js.map +0 -1
  42. package/dist/types-DCuos3gI.d.cts +0 -33
  43. package/dist/types-DCuos3gI.d.ts +0 -33
package/dist/render.cjs CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkAZ4GBXXLcjs = require('./chunk-AZ4GBXXL.cjs');var _chunkBYLIBOAUcjs = require('./chunk-BYLIBOAU.cjs');var _three = require('three'); var Ft = _interopRequireWildcard(_three); var re = _interopRequireWildcard(_three); var fe = _interopRequireWildcard(_three); var Z = _interopRequireWildcard(_three); var nt = _interopRequireWildcard(_three); var $e = _interopRequireWildcard(_three); var xe = _interopRequireWildcard(_three); var ne = _interopRequireWildcard(_three); var z = _interopRequireWildcard(_three); var lt = _interopRequireWildcard(_three); var D = _interopRequireWildcard(_three); var ge = _interopRequireWildcard(_three); var B = _interopRequireWildcard(_three); var ke = _interopRequireWildcard(_three); var gt = _interopRequireWildcard(_three); var ce = _interopRequireWildcard(_three); var Tt = _interopRequireWildcard(_three); var Me = _interopRequireWildcard(_three); var yt = _interopRequireWildcard(_three); var Ct = _interopRequireWildcard(_three); var P = _interopRequireWildcard(_three); var j = _interopRequireWildcard(_three); var L = _interopRequireWildcard(_three); var J = _interopRequireWildcard(_three); var ue = _interopRequireWildcard(_three);function Ee(e){let n=e.clone().normalize(),t=new Z.Vector3(0,0,1),r=new Z.Vector3(0,1,0),i=Math.abs(n.dot(t))>.9?r:t,o=new Z.Vector3().crossVectors(i,n).normalize(),a=new Z.Vector3().crossVectors(n,o).normalize();return{up:n,forward:a,right:o}}function be(e,n){let{forward:t,right:r,up:i}=Ee(e);return t.clone().multiplyScalar(-1).add(r.clone().multiplyScalar(-1)).add(i).normalize().multiplyScalar(n)}function je(e,n,t){let{forward:r,right:i,up:o}=Ee(e);return i.clone().multiplyScalar(n).add(r.clone().multiplyScalar(n)).add(o.clone().multiplyScalar(t))}function Ne(e){let n=e.clone().normalize(),t=new Z.Vector3(0,1,0);if(n.dot(t)>.9999)return new Z.Euler;if(n.dot(t)<-.9999)return new Z.Euler(Math.PI,0,0);let r=new Z.Quaternion().setFromUnitVectors(t,n);return new Z.Euler().setFromQuaternion(r)}function ve(e){let n=Math.abs(e.x),t=Math.abs(e.y),r=Math.abs(e.z);return n>=t&&n>=r?"x":t>=r?"y":"z"}var $={HUGE_THRESHOLD:1e4,LARGE_THRESHOLD:1e3,SCALE_RATIO_THRESHOLD:100,NEAR_PLANE_FACTOR:{TINY:1e-4,SMALL:.001,NORMAL:.01},FAR_PLANE_FACTOR:{HUGE:100,LARGE:50,NORMAL:20},INITIAL_DISTANCE_MULTIPLIER:4};function Ut(e,n,t,r,i){if(Xt(e),n.length===0)return;n.forEach(f=>{e.add(f)});let o=_chunkAZ4GBXXLcjs.m.call(void 0, n),a=o.getCenter(new fe.Vector3),l=o.getSize(new fe.Vector3),s=Math.max(l.x,l.y,l.z);if(s/Math.min(l.x||1,l.y||1,l.z||1)>$.SCALE_RATIO_THRESHOLD||s>$.HUGE_THRESHOLD?(t.near=s*$.NEAR_PLANE_FACTOR.TINY,t.far=s*$.FAR_PLANE_FACTOR.HUGE):s>$.LARGE_THRESHOLD?(t.near=s*$.NEAR_PLANE_FACTOR.SMALL,t.far=s*$.FAR_PLANE_FACTOR.LARGE):(t.near=Math.max(.01,s*$.NEAR_PLANE_FACTOR.NORMAL),t.far=Math.max(2e3,s*$.FAR_PLANE_FACTOR.NORMAL)),t.updateProjectionMatrix(),!i){let f=s*$.INITIAL_DISTANCE_MULTIPLIER;t.position.copy(a).add(be(t.up,f)),r.target.copy(a),r.update()}}var Bt=new Set(["grid","floor","label-layer","measure"]);function Wt(e){let n=e;for(;n;){if(typeof n.userData.id=="string"&&Bt.has(n.userData.id))return!0;n=n.parent}return!1}function Q(e){e.updateMatrixWorld(!0);let n=new fe.Box3;return e.traverse(t=>{let r=t;t.visible&&!Wt(t)&&r.geometry&&n.expandByObject(t)}),n}var qt=new Set(["floor","grid","label-layer"]);function Xt(e){[...e.children].forEach(t=>{qt.has(t.userData.id)||t.userData.source!=="user"&&(_chunkAZ4GBXXLcjs.p.call(void 0, t),t.removeFromParent())})}function Kt(e){let{up:n,forward:t,right:r}=Ee(e),i=t.clone().negate(),o=r.clone();return{top:n.clone(),bottom:n.clone().negate(),front:i.clone(),back:i.clone().negate(),right:o.clone(),left:o.clone().negate(),iso:i.clone().multiplyScalar(1.2).add(o.clone()).add(n.clone()).normalize()}}function Ge(e){let{scene:n,perspective:t,controls:r,onActiveCameraChange:i}=e,o=(_nullishCoalesce(e.up, () => (t.up))).clone().normalize(),a=Kt(o),l=new re.OrthographicCamera(-1,1,1,-1,t.near,t.far);l.up.copy(o);let s="perspective",u=t.aspect,f=()=>s==="perspective"?t:l,E=null,g=()=>{_optionalChain([E, 'optionalAccess', _2 => _2.cancel, 'call', _3 => _3()]),E=null},m=()=>{let R=(s==="orthographic"?l:t).position.distanceTo(r.target)*Math.tan(t.fov*Math.PI/360),T=R*u;l.left=-T,l.right=T,l.top=R,l.bottom=-R,l.near=t.near,l.far=t.far,l.updateProjectionMatrix()},p=d=>{if(d!==s){if(g(),d==="orthographic")l.position.copy(t.position),l.up.copy(t.up),l.lookAt(r.target),l.zoom=1,m();else{let R=(l.top-l.bottom)/(2*l.zoom)/Math.tan(t.fov*Math.PI/360),T=l.position.clone().sub(r.target);T.lengthSq()<1e-12&&T.copy(o),T.normalize(),t.position.copy(r.target).add(T.multiplyScalar(R))}s=d,r.object=f(),r.update(),i(f())}},h=(d,c,R,T)=>{let v=t.fov*(Math.PI/180),C=c/(2*Math.tan(v/2))*1.5,_=Yt(R,o),F=d.clone().add(_.clone().multiplyScalar(C)),q=f();s==="orthographic"&&(l.zoom=1),g(),T?E=$t(q,r,F,d,()=>{s==="orthographic"&&m()}):(q.position.copy(F),r.target.copy(d),s==="orthographic"&&m(),r.update())},H=(d,c=!0)=>{let R=Q(n),T=R.isEmpty()?r.target.clone():R.getCenter(new re.Vector3),v=R.isEmpty()?new re.Vector3(1,1,1):R.getSize(new re.Vector3),C=Math.max(v.x,v.y,v.z)||1;h(T,C,d,c)};return{getActiveCamera:f,getProjection:()=>s,setProjection:p,toggleProjection:()=>(p(s==="perspective"?"orthographic":"perspective"),s),setView:(d,c=!0)=>{H(a[d],c)},setViewDirection:H,frameBounds:(d,c=!0)=>{if(d.isEmpty())return;let R=d.getCenter(new re.Vector3),T=d.getSize(new re.Vector3),v=Math.max(T.x,T.y,T.z)||1,C=f().position.clone().sub(r.target);C.lengthSq()<1e-12&&C.copy(a.iso),h(R,v,C.normalize(),c)},setRotateEnabled:d=>{r.enableRotate=d},isRotateEnabled:()=>r.enableRotate,updateAspect:(d,c)=>{u=c===0?u:d/c,s==="orthographic"&&m()},dispose:g}}function Yt(e,n){let{up:t,forward:r}=Ee(n),i=e.clone().normalize();if(Math.abs(i.dot(t))<.9999)return e;let o=r.clone().negate(),a=.5*Math.PI/180;return i.multiplyScalar(Math.cos(a)).add(o.multiplyScalar(Math.sin(a))).normalize()}var Zt=e=>1-Math.pow(1-e,3);function $t(e,n,t,r,i,o=250){let a=e.position.clone(),l=n.target.clone(),s=performance.now(),u=null,f=()=>{u=null;let E=Zt(Math.min((performance.now()-s)/o,1));e.position.lerpVectors(a,t,E),n.target.lerpVectors(l,r,E),i(),n.update(),E<1&&(u=requestAnimationFrame(f))};return u=requestAnimationFrame(f),{cancel:()=>{u!==null&&(cancelAnimationFrame(u),u=null)}}}var _LineSegments2js = require('three/addons/lines/LineSegments2.js');var _LineSegmentsGeometryjs = require('three/addons/lines/LineSegmentsGeometry.js');var Jt=.15,er=4096;function tr(e){let n=Math.floor(e.length/6);if(n===0)return 1/0;let t=Math.max(1,Math.ceil(n/er)),r=[];for(let i=0;i<n;i+=t){let o=i*6,a=Math.hypot(e[o+3]-e[o],e[o+4]-e[o+1],e[o+5]-e[o+2]);a>0&&r.push(a)}return r.length===0?1/0:(r.sort((i,o)=>i-o),r[Math.min(r.length-1,Math.floor(r.length*Jt))])}function Ue(e){let n=new _LineSegmentsGeometryjs.LineSegmentsGeometry;return n.setPositions(e),{geometry:n,segmentCount:e.length/6,edgeSpacing:tr(e)}}function ye(e,n,t){let o=Math.cos(Math.PI/180*t),a=e.length/3;if(a>=67108864)throw new Error(`extractEdgeSegments: ${a} vertices exceeds 2^26 limit`);let l=new Float64Array(a),s=new Float64Array(a),u=new Float64Array(a);for(let c=0;c<a;c++)l[c]=Math.round(e[3*c]*1e4),s[c]=Math.round(e[3*c+1]*1e4),u[c]=Math.round(e[3*c+2]*1e4);let f=16;for(;f<a*2;)f<<=1;let E=f-1,g=new Int32Array(f).fill(-1),m=new Int32Array(a);for(let c=0;c<a;c++){let R=(Math.imul(l[c]|0,73856093)^Math.imul(s[c]|0,19349663)^Math.imul(u[c]|0,83492791))&E;for(;;){let T=g[R];if(T===-1){g[R]=c,m[c]=c;break}if(l[T]===l[c]&&s[T]===s[c]&&u[T]===u[c]){m[c]=T;break}R=R+1&E}}let p=new Float32Array(4096),h=0,H=(c,R)=>{if(h+6>p.length){let T=new Float32Array(p.length*2);T.set(p),p=T}p[h++]=e[3*c],p[h++]=e[3*c+1],p[h++]=e[3*c+2],p[h++]=e[3*R],p[h++]=e[3*R+1],p[h++]=e[3*R+2]},x=new Map,S=[],A=[],V=[],d=(n?n.length:a)/3;for(let c=0;c<d;c++){let R=n?n[3*c]:3*c,T=n?n[3*c+1]:3*c+1,v=n?n[3*c+2]:3*c+2,C=m[R],_=m[T],F=m[v];if(C===_||_===F||F===C)continue;let q=e[3*v]-e[3*T],M=e[3*v+1]-e[3*T+1],O=e[3*v+2]-e[3*T+2],y=e[3*R]-e[3*T],b=e[3*R+1]-e[3*T+1],I=e[3*R+2]-e[3*T+2],k=M*I-O*b,N=O*y-q*I,G=q*b-M*y,Re=k*k+N*N+G*G;if(Re>0){let X=1/Math.sqrt(Re);k*=X,N*=X,G*=X}else k=0,N=0,G=0;for(let X=0;X<3;X++){let ee,U,K,oe;X===0?(ee=R,U=T,K=C,oe=_):X===1?(ee=T,U=v,K=_,oe=F):(ee=v,U=R,K=F,oe=C);let Te=oe*67108864+K,te=x.get(Te);if(te!==void 0&&te!==-1)k*V[3*te]+N*V[3*te+1]+G*V[3*te+2]<=o&&H(ee,U),x.set(Te,-1);else{let me=K*67108864+oe;if(!x.has(me)){let De=S.length;x.set(me,De),S.push(ee),A.push(U),V.push(k,N,G)}}}}for(let c of x.values())c!==-1&&H(S[c],A[c]);return p.slice(0,h)}function Be(){return[`const extract = ${ye.toString()};`,"self.onmessage = (event) => {"," const { id, positions, index, thresholdAngle } = event.data;"," try {"," const segments = extract(positions, index, thresholdAngle);"," self.postMessage({ id, segments }, [segments.buffer]);"," } catch (error) {"," self.postMessage({ id, error: String((error && error.message) || error) });"," }","};"].join(`
2
- `)}var se="edge-overlay",He="triangle-cap",We=2236962,rr=1.5,nr=44,or=.75,ir=4e6,ar=2e6,qe=25e3,Xe=4,Le=1,Ke=0,Ye=-1;function Ze(e){return{forcedColor:e.color!=null?new xe.Color(e.color):null,darken:xe.MathUtils.clamp(_nullishCoalesce(e.darken, () => (or)),0,1),width:_nullishCoalesce(e.width, () => (rr)),thresholdAngle:_nullishCoalesce(e.thresholdAngle, () => (nr)),distanceFade:_nullishCoalesce(e.distanceFade, () => (!0)),maxTriangles:_nullishCoalesce(e.maxTriangles, () => (ir)),maxSegments:_nullishCoalesce(e.maxSegments, () => (ar))}}function Ce(e){let n=e.getAttribute("position");return n?(e.index?e.index.count:n.count)/3:0}function Qe(e){let n=e.getAttribute("position");if(!n||n.isInterleavedBufferAttribute||n.itemSize!==3||!(n.array instanceof Float32Array)||n.count>=67108864)return null;let t=e.index;return t&&!(t.array instanceof Uint32Array)&&!(t.array instanceof Uint16Array)?null:{positions:n.array,index:t?t.array:null}}function lr(e,n){let r=2166136261,i=s=>{r^=s,r=Math.imul(r,16777619)},o=new Uint32Array(e.positions.buffer,e.positions.byteOffset,e.positions.length),a=Math.min(4096,o.length);for(let s=0;s<a;s++)i(o[s]);for(let s=Math.max(a,o.length-4096);s<o.length;s++)i(o[s]);let l=0;if(e.index){l=e.index.length;let s=Math.min(4096,l);for(let u=0;u<s;u++)i(e.index[u]);for(let u=Math.max(s,l-4096);u<l;u++)i(e.index[u])}return`${n}:${e.positions.length}:${l}:${r>>>0}`}function cr(e,n){let t=new $e.EdgesGeometry(e,n),r=t.attributes.position?t.attributes.position.array:new Float32Array(0);return t.dispose(),r}function Fe(e,n){let t=Qe(e);return t?ye(t.positions,t.index,n):cr(e,n)}var le,he=new Map,dr=1;function ur(){if(le!==void 0)return le;if(typeof Worker>"u"||typeof Blob>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return le=null,null;try{let e=URL.createObjectURL(new Blob([Be()],{type:"text/javascript"})),n=new Worker(e);n.onmessage=t=>{let{id:r,segments:i,error:o}=t.data,a=he.get(r);a&&(he.delete(r),i?a.resolve(i):a.reject(new Error(_nullishCoalesce(o, () => ("edge extraction failed in worker")))))},n.onerror=()=>{for(let t of he.values())t.reject(new Error("edge extraction worker crashed"));he.clear(),n.terminate(),le=null},le=n}catch (e2){le=null}return le}function mr(e,n,t){return new Promise((r,i)=>{let o=dr++;he.set(o,{resolve:r,reject:i});let a=n.positions.slice(),l=n.index?n.index.slice():null,s=[a.buffer];l&&s.push(l.buffer),e.postMessage({id:o,positions:a,index:l,thresholdAngle:t},s)})}var Oe=new Map;function Je(e,n){let t=Qe(e);if(!t||Ce(e)<qe)return Promise.resolve(Fe(e,n));let r=lr(t,n),i=Oe.get(r);if(i)return i;let o=ur();if(!o)return Promise.resolve(Fe(e,n));let a=mr(o,t,n).catch(()=>ye(t.positions,t.index,n)).finally(()=>{Oe.delete(r)});return Oe.set(r,a),a}var _LineMaterialjs = require('three/addons/lines/LineMaterial.js');function Er(e,n){let r=_optionalChain([(Array.isArray(e.material)?e.material[0]:e.material), 'optionalAccess', _4 => _4.color]);return r?r.clone().multiplyScalar(1-n):new ne.Color(We)}var we=class{constructor(n){_chunkBYLIBOAUcjs.a.call(void 0, this,"options",n);_chunkBYLIBOAUcjs.a.call(void 0, this,"byKey",new Map)}for(n,t){let r=_nullishCoalesce(this.options.forcedColor, () => (Er(n,this.options.darken))),i=r.getHex()*2+(t?1:0),o=this.byKey.get(i);return o||(o=fr(r,this.options.width,t),this.byKey.set(i,o)),o}disposeUnused(n){let t=new Set(n.map(r=>r.material));for(let r of this.byKey.values())t.has(r)||r.dispose()}};function fr(e,n,t){let r=new (0, _LineMaterialjs.LineMaterial)({color:e});return r.linewidth=n,r.polygonOffset=!0,r.polygonOffsetFactor=Ke,r.polygonOffsetUnits=Ye,t&&(r.transparent=!0),r}function rt(e,n,t){let r=new (0, _LineSegments2js.LineSegments2)(e.geometry,n);return r.userData.kind=se,r.raycast=()=>{},t&&Rr(r,e.edgeSpacing),r}var et=new ne.Vector3,hr=new ne.Vector3;function gr(e,n,t){e.geometry.boundingSphere||e.geometry.computeBoundingSphere();let r=e.geometry.boundingSphere;if(!r)return 1/0;if(n.isPerspectiveCamera){let i=n;et.copy(r.center).applyMatrix4(e.matrixWorld);let o=hr.setFromMatrixPosition(n.matrixWorld).distanceTo(et),a=r.radius*e.matrixWorld.getMaxScaleOnAxis();if(o<=a)return 1/0;let l=Math.tan(ne.MathUtils.degToRad(i.fov)*.5),s=2*o*l;return s>0?t/s:1/0}if(n.isOrthographicCamera){let i=n,o=(i.top-i.bottom)/i.zoom;return o>0?t/o:1/0}return 1/0}function Rr(e,n){e.onBeforeRender=(t,r,i)=>{_LineSegments2js.LineSegments2.prototype.onBeforeRender.call(e,t);let o=e.material,a=gr(e,i,o.resolution.y),l=n*a;o.opacity=ne.MathUtils.clamp((l-Le)/(Xe-Le),0,1)}}function br(e){return _optionalChain([e, 'access', _5 => _5.userData, 'optionalAccess', _6 => _6.kind])===se}function vr(e,n){let t=[];return e.traverse(r=>{if(r instanceof nt.Mesh&&!(r.userData.id==="floor"||r.userData.id==="grid")&&r.userData.kind!==se&&!r.children.some(i=>_optionalChain([i, 'access', _7 => _7.userData, 'optionalAccess', _8 => _8.kind])===se)&&r.geometry){if(Ce(r.geometry)>n){r.userData.edgesSkipped=He,console.debug(`[edges] skipping mesh over triangle cap (${Ce(r.geometry)} > ${n})`);return}delete r.userData.edgesSkipped,t.push(r)}}),t}function yr(e,n,t,r){let i=r.distanceFade&&n.segmentCount<=r.maxSegments,o=rt(n,t.for(e,i),i);return e.add(o),o}var ot=new WeakMap;function Ie(e){return _nullishCoalesce(ot.get(e), () => (0))}function xr(e,n){for(let t=e;t;t=t.parent)if(t===n)return!0;return!1}async function it(e,n={}){let t=Ze(n),r=new we(t),i=Ie(e),o=[],a=vr(e,t.maxTriangles).map(async l=>{let s=await Je(l.geometry,t.thresholdAngle);Ie(e)===i&&xr(l,e)&&(l.children.some(u=>_optionalChain([u, 'access', _9 => _9.userData, 'optionalAccess', _10 => _10.kind])===se)||o.push(yr(l,Ue(s),r,t)))});return await Promise.all(a),r.disposeUnused(o),o}function at(e){ot.set(e,Ie(e)+1);let n=[];e.traverse(r=>{r instanceof _LineSegments2js.LineSegments2&&br(r)&&n.push(r)});let t=new Set;for(let r of n)r.geometry.dispose(),t.add(r.material),r.removeFromParent();return t.forEach(r=>r.dispose()),n.length}function Hr(e){if(!(e>0)||!Number.isFinite(e))return 1;let n=Math.floor(Math.log10(e)),t=Math.pow(10,n),r=e/t;return(r>=5?5:r>=2?2:1)*t}var Cr=`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./gpu-dispose-DrN-ryj5.cjs");let n=require("three");n=e.t(n,1);let r=require("three/addons/lines/Line2.js"),i=require("three/addons/lines/LineGeometry.js"),a=require("three/addons/lines/LineMaterial.js"),o=require("three/addons/lines/LineSegments2.js"),s=require("three/addons/lines/LineSegmentsGeometry.js"),c=require("three/addons/renderers/CSS2DRenderer.js"),l=require("three/addons/helpers/ViewHelper.js"),u=require("three/addons/postprocessing/EffectComposer.js"),d=require("three/addons/postprocessing/RenderPass.js"),f=require("three/addons/postprocessing/GTAOPass.js"),p=require("three/addons/postprocessing/SMAAPass.js"),m=require("three/addons/postprocessing/OutputPass.js"),h=require("three/addons/postprocessing/Pass.js"),g=require("three/addons/controls/OrbitControls.js"),_=require("three/addons/loaders/HDRLoader.js");const v=[`technical`,`studio`,`showcase`],y={studio:{toneMapping:n.ACESFilmicToneMapping,toneMappingExposure:1,envMapIntensity:1,environmentIntensity:1,hemisphereIntensity:.75,ambientIntensity:.4,cullBackfaces:!1,ambientOcclusion:!1},technical:{toneMapping:n.NeutralToneMapping,toneMappingExposure:1,envMapIntensity:.9,environmentIntensity:1,hemisphereIntensity:.35,ambientIntensity:.25,cullBackfaces:!1,ambientOcclusion:!1},showcase:{toneMapping:n.ACESFilmicToneMapping,toneMappingExposure:1.15,envMapIntensity:1.4,environmentIntensity:1.25,hemisphereIntensity:.35,ambientIntensity:.15,cullBackfaces:!1,ambientOcclusion:!1}};function b(e){let t=y[e];return{envMapIntensity:t.envMapIntensity,cullBackfaces:t.cullBackfaces}}const x=`user`,S=`app:`;function C(e){return`${S}${e}`}function w(e){return typeof e!=`string`||!e.startsWith(S)?null:e.slice(4)||null}function T(e){let t=e.userData?.source;return t===`user`||w(t)!==null}function E(e,t){return t===void 0?T(e):e.userData?.source===C(t)}function D(e){let t=e.clone().normalize(),r=new n.Vector3(0,0,1),i=new n.Vector3(0,1,0),a=Math.abs(t.dot(r))>.9?i:r,o=new n.Vector3().crossVectors(a,t).normalize();return{up:t,forward:new n.Vector3().crossVectors(t,o).normalize(),right:o}}function O(e,t){let{forward:n,right:r,up:i}=D(e);return n.clone().multiplyScalar(-1).add(r.clone().multiplyScalar(-1)).add(i).normalize().multiplyScalar(t)}function k(e,t,n){let{forward:r,right:i,up:a}=D(e);return i.clone().multiplyScalar(t).add(r.clone().multiplyScalar(t)).add(a.clone().multiplyScalar(n))}function A(e){let t=e.clone().normalize(),r=new n.Vector3(0,1,0);if(t.dot(r)>.9999)return new n.Euler;if(t.dot(r)<-.9999)return new n.Euler(Math.PI,0,0);let i=new n.Quaternion().setFromUnitVectors(r,t);return new n.Euler().setFromQuaternion(i)}function j(e){let t=Math.abs(e.x),n=Math.abs(e.y),r=Math.abs(e.z);return t>=n&&t>=r?`x`:n>=r?`y`:`z`}const M={HUGE_THRESHOLD:1e4,LARGE_THRESHOLD:1e3,SCALE_RATIO_THRESHOLD:100,NEAR_PLANE_FACTOR:{TINY:1e-4,SMALL:.001,NORMAL:.01},FAR_PLANE_FACTOR:{HUGE:100,LARGE:50,NORMAL:20},INITIAL_DISTANCE_MULTIPLIER:4};function N(e,r,i,a,o){if(L(e),r.length===0)return;r.forEach(t=>{e.add(t)});let s=t.a(r),c=s.getCenter(new n.Vector3),l=s.getSize(new n.Vector3),u=Math.max(l.x,l.y,l.z);if(u/Math.min(l.x||1,l.y||1,l.z||1)>M.SCALE_RATIO_THRESHOLD||u>M.HUGE_THRESHOLD?(i.near=u*M.NEAR_PLANE_FACTOR.TINY,i.far=u*M.FAR_PLANE_FACTOR.HUGE):u>M.LARGE_THRESHOLD?(i.near=u*M.NEAR_PLANE_FACTOR.SMALL,i.far=u*M.FAR_PLANE_FACTOR.LARGE):(i.near=Math.max(.01,u*M.NEAR_PLANE_FACTOR.NORMAL),i.far=Math.max(2e3,u*M.FAR_PLANE_FACTOR.NORMAL)),i.updateProjectionMatrix(),!o){let e=u*M.INITIAL_DISTANCE_MULTIPLIER;i.position.copy(c).add(O(i.up,e)),a.target.copy(c),a.update()}}const P=new Set([`grid`,`floor`,`label-layer`,`measure`]);function F(e){let t=e;for(;t;){if(typeof t.userData.id==`string`&&P.has(t.userData.id))return!0;t=t.parent}return!1}function I(e){e.updateMatrixWorld(!0);let t=new n.Box3;return e.traverse(e=>{let n=e;e.visible&&!F(e)&&n.geometry&&t.expandByObject(e)}),t}const ee=new Set([`floor`,`grid`,`label-layer`]);function L(e){[...e.children].forEach(e=>{ee.has(e.userData.id)||T(e)||(t.t(e),e.removeFromParent())})}function R(e){let{up:t,forward:n,right:r}=D(e),i=n.clone().negate(),a=r.clone();return{top:t.clone(),bottom:t.clone().negate(),front:i.clone(),back:i.clone().negate(),right:a.clone(),left:a.clone().negate(),iso:i.clone().multiplyScalar(1.2).add(a.clone()).add(t.clone()).normalize()}}function te(e){let{scene:t,perspective:r,controls:i,onActiveCameraChange:a}=e,o=(e.up??r.up).clone().normalize(),s=R(o),c=new n.OrthographicCamera(-1,1,1,-1,r.near,r.far);c.up.copy(o);let l=`perspective`,u=r.aspect,d=()=>l===`perspective`?r:c,f=null,p=()=>{f?.cancel(),f=null},m=()=>{let e=(l===`orthographic`?c:r).position.distanceTo(i.target)*Math.tan(r.fov*Math.PI/360),t=e*u;c.left=-t,c.right=t,c.top=e,c.bottom=-e,c.near=r.near,c.far=r.far,c.updateProjectionMatrix()},h=e=>{if(e!==l){if(p(),e===`orthographic`)c.position.copy(r.position),c.up.copy(r.up),c.lookAt(i.target),c.zoom=1,m();else{let e=(c.top-c.bottom)/(2*c.zoom)/Math.tan(r.fov*Math.PI/360),t=c.position.clone().sub(i.target);t.lengthSq()<1e-12&&t.copy(o),t.normalize(),r.position.copy(i.target).add(t.multiplyScalar(e))}l=e,i.object=d(),i.update(),a(d())}},g=(e,t,n,a)=>{let s=r.fov*(Math.PI/180),u=t/(2*Math.tan(s/2))*1.5,h=z(n,o),g=e.clone().add(h.clone().multiplyScalar(u)),_=d();l===`orthographic`&&(c.zoom=1),p(),a?f=re(_,i,g,e,()=>{l===`orthographic`&&m()}):(_.position.copy(g),i.target.copy(e),l===`orthographic`&&m(),i.update())},_=(e,r=!0)=>{let a=I(t),o=a.isEmpty()?i.target.clone():a.getCenter(new n.Vector3),s=a.isEmpty()?new n.Vector3(1,1,1):a.getSize(new n.Vector3),c=Math.max(s.x,s.y,s.z)||1;g(o,c,e,r)};return{getActiveCamera:d,getProjection:()=>l,setProjection:h,toggleProjection:()=>(h(l===`perspective`?`orthographic`:`perspective`),l),setView:(e,t=!0)=>{_(s[e],t)},setViewDirection:_,frameBounds:(e,t=!0)=>{if(e.isEmpty())return;let r=e.getCenter(new n.Vector3),a=e.getSize(new n.Vector3),o=Math.max(a.x,a.y,a.z)||1,c=d().position.clone().sub(i.target);c.lengthSq()<1e-12&&c.copy(s.iso),g(r,o,c.normalize(),t)},setRotateEnabled:e=>{i.enableRotate=e},isRotateEnabled:()=>i.enableRotate,updateAspect:(e,t)=>{u=t===0?u:e/t,l===`orthographic`&&m()},dispose:p}}function z(e,t){let{up:n,forward:r}=D(t),i=e.clone().normalize();if(Math.abs(i.dot(n))<.9999)return e;let a=r.clone().negate(),o=.5*Math.PI/180;return i.multiplyScalar(Math.cos(o)).add(a.multiplyScalar(Math.sin(o))).normalize()}const ne=e=>1-(1-e)**3;function re(e,t,n,r,i,a=250){let o=e.position.clone(),s=t.target.clone(),c=performance.now(),l=null,u=()=>{l=null;let d=ne(Math.min((performance.now()-c)/a,1));e.position.lerpVectors(o,n,d),t.target.lerpVectors(s,r,d),i(),t.update(),d<1&&(l=requestAnimationFrame(u))};return l=requestAnimationFrame(u),{cancel:()=>{l!==null&&(cancelAnimationFrame(l),l=null)}}}function ie(e){let t=Math.floor(e.length/6);if(t===0)return 1/0;let n=Math.max(1,Math.ceil(t/4096)),r=[];for(let i=0;i<t;i+=n){let t=i*6,n=Math.hypot(e[t+3]-e[t],e[t+4]-e[t+1],e[t+5]-e[t+2]);n>0&&r.push(n)}return r.length===0?1/0:(r.sort((e,t)=>e-t),r[Math.min(r.length-1,Math.floor(r.length*.15))])}function B(e){let t=new s.LineSegmentsGeometry;return t.setPositions(e),{geometry:t,segmentCount:e.length/6,edgeSpacing:ie(e)}}function V(e,t,n){let r=1e4,i=67108864,a=Math.cos(Math.PI/180*n),o=e.length/3;if(o>=i)throw Error(`extractEdgeSegments: ${o} vertices exceeds 2^26 limit`);let s=new Float64Array(o),c=new Float64Array(o),l=new Float64Array(o);for(let t=0;t<o;t++)s[t]=Math.round(e[3*t]*r),c[t]=Math.round(e[3*t+1]*r),l[t]=Math.round(e[3*t+2]*r);let u=16;for(;u<o*2;)u<<=1;let d=u-1,f=new Int32Array(u).fill(-1),p=new Int32Array(o);for(let e=0;e<o;e++){let t=(Math.imul(s[e]|0,73856093)^Math.imul(c[e]|0,19349663)^Math.imul(l[e]|0,83492791))&d;for(;;){let n=f[t];if(n===-1){f[t]=e,p[e]=e;break}if(s[n]===s[e]&&c[n]===c[e]&&l[n]===l[e]){p[e]=n;break}t=t+1&d}}let m=new Float32Array(4096),h=0,g=(t,n)=>{if(h+6>m.length){let e=new Float32Array(m.length*2);e.set(m),m=e}m[h++]=e[3*t],m[h++]=e[3*t+1],m[h++]=e[3*t+2],m[h++]=e[3*n],m[h++]=e[3*n+1],m[h++]=e[3*n+2]},_=new Map,v=[],y=[],b=[],x=(t?t.length:o)/3;for(let n=0;n<x;n++){let r=t?t[3*n]:3*n,o=t?t[3*n+1]:3*n+1,s=t?t[3*n+2]:3*n+2,c=p[r],l=p[o],u=p[s];if(c===l||l===u||u===c)continue;let d=e[3*s]-e[3*o],f=e[3*s+1]-e[3*o+1],m=e[3*s+2]-e[3*o+2],h=e[3*r]-e[3*o],x=e[3*r+1]-e[3*o+1],S=e[3*r+2]-e[3*o+2],C=f*S-m*x,w=m*h-d*S,T=d*x-f*h,E=C*C+w*w+T*T;if(E>0){let e=1/Math.sqrt(E);C*=e,w*=e,T*=e}else C=0,w=0,T=0;for(let e=0;e<3;e++){let t,n,d,f;e===0?(t=r,n=o,d=c,f=l):e===1?(t=o,n=s,d=l,f=u):(t=s,n=r,d=u,f=c);let p=f*i+d,m=_.get(p);if(m!==void 0&&m!==-1)C*b[3*m]+w*b[3*m+1]+T*b[3*m+2]<=a&&g(t,n),_.set(p,-1);else{let e=d*i+f;if(!_.has(e)){let r=v.length;_.set(e,r),v.push(t),y.push(n),b.push(C,w,T)}}}}for(let e of _.values())e!==-1&&g(v[e],y[e]);return m.slice(0,h)}function H(){return[`const extract = ${V.toString()};`,`self.onmessage = (event) => {`,` const { id, positions, index, thresholdAngle } = event.data;`,` try {`,` const segments = extract(positions, index, thresholdAngle);`,` self.postMessage({ id, segments }, [segments.buffer]);`,` } catch (error) {`,` self.postMessage({ id, error: String((error && error.message) || error) });`,` }`,`};`].join(`
2
+ `)}const U=`edge-overlay`;function W(e){return{forcedColor:e.color==null?null:new n.Color(e.color),darken:n.MathUtils.clamp(e.darken??.75,0,1),width:e.width??1.5,thresholdAngle:e.thresholdAngle??44,distanceFade:e.distanceFade??!0,maxTriangles:e.maxTriangles??4e6,maxSegments:e.maxSegments??2e6}}function G(e){let t=e.getAttribute(`position`);return t?(e.index?e.index.count:t.count)/3:0}function K(e){let t=e.getAttribute(`position`);if(!t||t.isInterleavedBufferAttribute||t.itemSize!==3||!(t.array instanceof Float32Array)||t.count>=67108864)return null;let n=e.index;return n&&!(n.array instanceof Uint32Array)&&!(n.array instanceof Uint16Array)?null:{positions:t.array,index:n?n.array:null}}function ae(e,t){let n=4096,r=2166136261,i=e=>{r^=e,r=Math.imul(r,16777619)},a=new Uint32Array(e.positions.buffer,e.positions.byteOffset,e.positions.length),o=Math.min(n,a.length);for(let e=0;e<o;e++)i(a[e]);for(let e=Math.max(o,a.length-n);e<a.length;e++)i(a[e]);let s=0;if(e.index){s=e.index.length;let t=Math.min(n,s);for(let n=0;n<t;n++)i(e.index[n]);for(let r=Math.max(t,s-n);r<s;r++)i(e.index[r])}return`${t}:${e.positions.length}:${s}:${r>>>0}`}function oe(e,t){let r=new n.EdgesGeometry(e,t),i=r.attributes.position?r.attributes.position.array:new Float32Array;return r.dispose(),i}function q(e,t){let n=K(e);return n?V(n.positions,n.index,t):oe(e,t)}let J;const Y=new Map;let se=1;function ce(){if(J!==void 0)return J;if(typeof Worker>`u`||typeof Blob>`u`||typeof URL>`u`||typeof URL.createObjectURL!=`function`)return J=null,null;try{let e=URL.createObjectURL(new Blob([H()],{type:`text/javascript`})),t=new Worker(e);t.onmessage=e=>{let{id:t,segments:n,error:r}=e.data,i=Y.get(t);i&&(Y.delete(t),n?i.resolve(n):i.reject(Error(r??`edge extraction failed in worker`)))},t.onerror=()=>{for(let e of Y.values())e.reject(Error(`edge extraction worker crashed`));Y.clear(),t.terminate(),J=null},J=t}catch{J=null}return J}function le(e,t,n){return new Promise((r,i)=>{let a=se++;Y.set(a,{resolve:r,reject:i});let o=t.positions.slice(),s=t.index?t.index.slice():null,c=[o.buffer];s&&c.push(s.buffer),e.postMessage({id:a,positions:o,index:s,thresholdAngle:n},c)})}const X=new Map;function ue(e,t){let n=K(e);if(!n||G(e)<25e3)return Promise.resolve(q(e,t));let r=ae(n,t),i=X.get(r);if(i)return i;let a=ce();if(!a)return Promise.resolve(q(e,t));let o=le(a,n,t).catch(()=>V(n.positions,n.index,t)).finally(()=>{X.delete(r)});return X.set(r,o),o}function de(e,t){let r=(Array.isArray(e.material)?e.material[0]:e.material)?.color;return r?r.clone().multiplyScalar(1-t):new n.Color(2236962)}var fe=class{options;byKey=new Map;constructor(e){this.options=e}for(e,t){let n=this.options.forcedColor??de(e,this.options.darken),r=n.getHex()*2+ +!!t,i=this.byKey.get(r);return i||(i=pe(n,this.options.width,t),this.byKey.set(r,i)),i}disposeUnused(e){let t=new Set(e.map(e=>e.material));for(let e of this.byKey.values())t.has(e)||e.dispose()}};function pe(e,t,n){let r=new a.LineMaterial({color:e});return r.linewidth=t,r.polygonOffset=!0,r.polygonOffsetFactor=0,r.polygonOffsetUnits=-1,n&&(r.transparent=!0),r}function me(e,t,n){let r=new o.LineSegments2(e.geometry,t);return r.userData.kind=U,r.raycast=()=>{},n&&ve(r,e.edgeSpacing),r}const he=new n.Vector3,ge=new n.Vector3;function _e(e,t,r){e.geometry.boundingSphere||e.geometry.computeBoundingSphere();let i=e.geometry.boundingSphere;if(!i)return 1/0;if(t.isPerspectiveCamera){let a=t;he.copy(i.center).applyMatrix4(e.matrixWorld);let o=ge.setFromMatrixPosition(t.matrixWorld).distanceTo(he);if(o<=i.radius*e.matrixWorld.getMaxScaleOnAxis())return 1/0;let s=Math.tan(n.MathUtils.degToRad(a.fov)*.5),c=2*o*s;return c>0?r/c:1/0}if(t.isOrthographicCamera){let e=t,n=(e.top-e.bottom)/e.zoom;return n>0?r/n:1/0}return 1/0}function ve(e,t){e.onBeforeRender=(r,i,a)=>{o.LineSegments2.prototype.onBeforeRender.call(e,r);let s=e.material,c=t*_e(e,a,s.resolution.y);s.opacity=n.MathUtils.clamp((c-1)/3,0,1)}}function ye(e){return e.userData?.kind===U}function be(e,t){let r=[];return e.traverse(e=>{if(e instanceof n.Mesh&&e.userData.id!==`floor`&&e.userData.id!==`grid`&&e.userData.kind!==`edge-overlay`&&!e.children.some(e=>e.userData?.kind===`edge-overlay`)&&e.geometry){if(G(e.geometry)>t){e.userData.edgesSkipped=`triangle-cap`,console.debug(`[edges] skipping mesh over triangle cap (${G(e.geometry)} > ${t})`);return}delete e.userData.edgesSkipped,r.push(e)}}),r}function xe(e,t,n,r){let i=r.distanceFade&&t.segmentCount<=r.maxSegments,a=me(t,n.for(e,i),i);return e.add(a),a}const Se=new WeakMap;function Z(e){return Se.get(e)??0}function Ce(e,t){for(let n=e;n;n=n.parent)if(n===t)return!0;return!1}async function we(e,t={}){let n=W(t),r=new fe(n),i=Z(e),a=[],o=be(e,n.maxTriangles).map(async t=>{let o=await ue(t.geometry,n.thresholdAngle);Z(e)===i&&Ce(t,e)&&(t.children.some(e=>e.userData?.kind===`edge-overlay`)||a.push(xe(t,B(o),r,n)))});return await Promise.all(o),r.disposeUnused(a),a}function Te(e){Se.set(e,Z(e)+1);let t=[];e.traverse(e=>{e instanceof o.LineSegments2&&ye(e)&&t.push(e)});let n=new Set;for(let e of t)e.geometry.dispose(),n.add(e.material),e.removeFromParent();return n.forEach(e=>e.dispose()),t.length}function Ee(e){if(!(e>0)||!Number.isFinite(e))return 1;let t=10**Math.floor(Math.log10(e)),n=e/t;return(n>=5?5:n>=2?2:1)*t}function De(e={}){let{cellSize:t=1,majorEvery:r=10,cellColor:i=8947848,majorColor:a=4473924,fadeDistance:o=100,plane:s=`y`}=e,c=s===`y`?new n.Vector2(0,2):s===`z`?new n.Vector2(0,1):new n.Vector2(1,2),l=2.5,u=new n.PlaneGeometry(1,1);s===`y`?u.rotateX(-Math.PI/2):s===`x`&&u.rotateY(Math.PI/2);let d=new n.ShaderMaterial({vertexShader:`
3
3
  varying vec3 vWorldPos;
4
4
  void main() {
5
5
  vec4 world = modelMatrix * vec4(position, 1.0);
6
6
  vWorldPos = world.xyz;
7
7
  gl_Position = projectionMatrix * viewMatrix * world;
8
8
  }
9
- `,wr=`
9
+ `,fragmentShader:`
10
10
  precision highp float;
11
11
  varying vec3 vWorldPos;
12
12
 
@@ -50,8 +50,7 @@
50
50
  if (alpha < 0.001) discard;
51
51
  gl_FragColor = vec4(color, alpha);
52
52
  }
53
- `;function st(e={}){let{cellSize:n=1,majorEvery:t=10,cellColor:r=8947848,majorColor:i=4473924,fadeDistance:o=100,plane:a="y"}=e,l=a==="y"?new z.Vector2(0,2):a==="z"?new z.Vector2(0,1):new z.Vector2(1,2),s=2.5,u=new z.PlaneGeometry(1,1);a==="y"?u.rotateX(-Math.PI/2):a==="x"&&u.rotateY(Math.PI/2);let f=new z.ShaderMaterial({vertexShader:Cr,fragmentShader:wr,transparent:!0,depthWrite:!1,side:z.DoubleSide,uniforms:{uAxes:{value:l},uCell:{value:n},uMajor:{value:t},uCellColor:{value:new z.Color(r)},uMajorColor:{value:new z.Color(i)},uCenter:{value:new z.Vector3},uFade:{value:o}}}),E=new z.Mesh(u,f);E.name="grid",E.userData.id="grid",E.renderOrder=-1;let g=o,m=o*s,p=new z.Vector3;return{object:E,update:h=>{a==="y"?(E.position.set(h.x,0,h.z),p.set(h.x,0,h.z)):a==="z"?(E.position.set(h.x,h.y,0),p.set(h.x,h.y,0)):(E.position.set(0,h.y,h.z),p.set(0,h.y,h.z)),f.uniforms.uCenter.value.copy(p),E.scale.setScalar(m)},fitToContent:h=>{if(h.isEmpty())return;let H=h.getSize(new z.Vector3),x=(V,d)=>d===0?V.x:d===1?V.y:V.z,S=Math.max(x(H,l.x),x(H,l.y));if(!(S>0)||!Number.isFinite(S))return;let A=20;f.uniforms.uCell.value=Hr(S/A),g=S*2,f.uniforms.uFade.value=g,m=g*s},setVisible:h=>{E.visible=h},dispose:()=>{E.removeFromParent(),u.dispose(),f.dispose()}}}var _CSS2DRendererjs = require('three/addons/renderers/CSS2DRenderer.js');function ct(e,n){let t=new _CSS2DRendererjs.CSS2DRenderer,r=t.domElement;r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.overflow="hidden",r.style.pointerEvents="none",r.style.zIndex="30",getComputedStyle(e).position==="static"&&(e.style.position="relative"),e.appendChild(r);let i={width:e.clientWidth||1,height:e.clientHeight||1};t.setSize(i.width,i.height);let o=new lt.Group;o.name="label-layer",o.userData.id="label-layer",n.add(o);let a=new Set;return{addLabel:(s,u,f)=>{let E=document.createElement("div");E.textContent=s,f?E.className=f:Object.assign(E.style,{padding:"2px 6px",borderRadius:"4px",background:"rgba(20, 20, 20, 0.78)",color:"#fff",font:"12px/1.3 system-ui, sans-serif",whiteSpace:"pre",textAlign:"center",userSelect:"none"}),E.style.pointerEvents="none";let g=new (0, _CSS2DRendererjs.CSS2DObject)(E);return g.position.copy(u),o.add(g),a.add(g),{object:g,setPosition:m=>g.position.copy(m),setText:m=>{E.textContent=m},remove:()=>{g.removeFromParent(),E.remove(),a.delete(g)}}},render:(s,u)=>t.render(s,u),setSize:(s,u)=>t.setSize(s,u),dispose:()=>{a.forEach(s=>{s.removeFromParent(),s.element.remove()}),a.clear(),o.removeFromParent(),r.remove()}}}var _Line2js = require('three/addons/lines/Line2.js');var _LineGeometryjs = require('three/addons/lines/LineGeometry.js');var Lr=12,Or=16763904,dt=.015,ut={Millimeters:{metersPerUnit:1/1e3,suffix:"mm"},Centimeters:{metersPerUnit:1/100,suffix:"cm"},Meters:{metersPerUnit:1,suffix:"m"},Inches:{metersPerUnit:1/39.37,suffix:"in"},Feet:{metersPerUnit:1/3.28084,suffix:"ft"}};function Fr(e){let n=e&&ut[e]||ut.Meters;return t=>`${(t/n.metersPerUnit).toPrecision(3)} ${n.suffix}`}function Ir(e,n){if(e.isOrthographicCamera){let r=e;return Math.abs(r.top-r.bottom)/(r.zoom||1)*dt}return((n?e.position.distanceTo(n):e.position.length())||1)*dt}function kr(e){let n=e.object;if(n instanceof D.Mesh)return e.face?[e.face.a,e.face.b,e.face.c]:null;if(n instanceof D.Points)return e.index!=null?[e.index]:null;if(n instanceof D.Line){if(e.index==null)return null;let t=n.geometry.index;return t?e.index+1>=t.count?null:[t.getX(e.index),t.getX(e.index+1)]:[e.index,e.index+1]}return null}function zr(e,n,t,r){let i=e.point.clone(),o=e.object,a=kr(e);if(!a||!o.geometry)return i;let l=o.geometry.attributes.position;if(!l)return i;let s=g=>{let m=g.clone().project(n);return new D.Vector2((m.x+1)/2*t.width,(1-m.y)/2*t.height)},u=s(i),f=i,E=r;for(let g of a){if(g>=l.count)continue;let p=new D.Vector3().fromBufferAttribute(l,g).applyMatrix4(o.matrixWorld),h=s(p).distanceTo(u);h<E&&(E=h,f=p)}return f}function mt(e){let{canvas:n,scene:t,getActiveCamera:r,getViewTarget:i,labelLayer:o,options:a={}}=e,l=_nullishCoalesce(a.snapPixels, () => (Lr)),s=new D.Color(_nullishCoalesce(a.color, () => (Or))),u=Fr(a.displayUnit),f=(y,b)=>`${u(y)}
54
- \u0394x ${u(b.x)} \u0394y ${u(b.y)} \u0394z ${u(b.z)}`,E=_nullishCoalesce(a.format, () => (f)),g=new D.Raycaster,m=new D.Vector2,p=!1,h=[],H=[],x=null,S=null,A=new D.PointsMaterial({color:s,size:8,sizeAttenuation:!1,depthTest:!1}),V=new D.PointsMaterial({color:s,size:11,sizeAttenuation:!1,depthTest:!1,transparent:!0,opacity:.5}),d=null,c=y=>{if(!y){d&&(d.visible=!1);return}if(!d){let b=new D.BufferGeometry;b.setAttribute("position",new D.Float32BufferAttribute([0,0,0],3)),d=new D.Points(b,V),d.renderOrder=1e3,d.userData.id="measure",d.raycast=()=>{},t.add(d)}d.position.copy(y),d.visible=!0},R=y=>{let b=new D.BufferGeometry;b.setAttribute("position",new D.Float32BufferAttribute([y.x,y.y,y.z],3));let I=new D.Points(b,A);return I.renderOrder=999,I.userData.id="measure",I.raycast=()=>{},t.add(I),I},T=()=>{h.length=0,H.forEach(y=>{y.geometry.dispose(),y.removeFromParent()}),H.length=0,x&&(x.geometry.dispose(),x.material.dispose(),x.removeFromParent(),x=null),_optionalChain([S, 'optionalAccess', _11 => _11.remove, 'call', _12 => _12()]),S=null},v=()=>{if(h.length!==2)return;let[y,b]=h,I=new _LineGeometryjs.LineGeometry;I.setPositions([y.x,y.y,y.z,b.x,b.y,b.z]);let k=new (0, _LineMaterialjs.LineMaterial)({color:s});k.linewidth=2,k.depthTest=!1,x=new (0, _Line2js.Line2)(I,k),x.renderOrder=998,x.userData.id="measure",x.raycast=()=>{},t.add(x);let N=y.clone().add(b).multiplyScalar(.5),G=new D.Vector3(Math.abs(b.x-y.x),Math.abs(b.y-y.y),Math.abs(b.z-y.z));S=o.addLabel(E(y.distanceTo(b),G),N,a.labelClassName)},C=y=>{let b=n.getBoundingClientRect();m.x=(y.clientX-b.left)/b.width*2-1,m.y=-((y.clientY-b.top)/b.height)*2+1;let I=r();g.setFromCamera(m,I);let k=Ir(I,_optionalChain([i, 'optionalCall', _13 => _13()]));g.params.Line.threshold=k,g.params.Points.threshold=k;let N=g.intersectObjects(t.children,!0).filter(G=>G.object.userData.id!=="measure"&&G.object.userData.id!=="grid");return N.length===0?null:zr(N[0],I,{width:b.width,height:b.height},l)},_=null,F=0,q=()=>{F&&(cancelAnimationFrame(F),F=0),_=null};return{setEnabled:y=>{p=y,y||(q(),T(),c(null))},isEnabled:()=>p,handleClick:y=>{if(!p)return!1;h.length===2&&T();let b=C(y);return b===null||(h.push(b),H.push(R(b)),h.length===2&&v()),!0},handleMove:y=>{p&&(_=y,!F&&(F=requestAnimationFrame(()=>{F=0;let b=_;_=null,!(!p||!b)&&c(C(b))})))},clear:T,dispose:()=>{q(),T(),d&&(d.geometry.dispose(),d.removeFromParent(),d=null),A.dispose(),V.dispose()}}}var Vr=.5,_r=.01,jr=.05,Nr=[];function pt({camera:e,scene:n,groundNormals:t=()=>Nr}){let r=e.near,i=e.near,o=new ge.Vector3,a=new ge.Vector3;return{update:()=>{e.near!==i&&(r=e.near);let s=Q(n),u=r;if(!s.isEmpty()){let f=s.getSize(a).length()*.5,E=e.position.distanceTo(s.getCenter(o))-f;for(let g of t())E=Math.min(E,Math.abs(e.position.dot(g)));u=ge.MathUtils.clamp(E*Vr,r,e.far*_r)}Math.abs(u-i)>i*jr&&(e.near=u,e.updateProjectionMatrix(),i=u)}}}var _ViewHelperjs = require('three/addons/helpers/ViewHelper.js');function Et(e){let{camera:n,domElement:t,controller:r}=e,i=new (0, _ViewHelperjs.ViewHelper)(n,t);i.setLabels("X","Y","Z");let o=!0,a=128,l=new B.Raycaster,s=new B.OrthographicCamera(-2,2,2,-2,0,4);s.position.set(0,0,2),s.updateMatrixWorld();let u={posX:new B.Vector3(1,0,0),negX:new B.Vector3(-1,0,0),posY:new B.Vector3(0,1,0),negY:new B.Vector3(0,-1,0),posZ:new B.Vector3(0,0,1),negZ:new B.Vector3(0,0,-1)},f=g=>{let m=t.getBoundingClientRect(),p=m.left+t.offsetWidth-a-i.location.right,h=m.top+t.offsetHeight-a-i.location.bottom,H=new B.Vector2((g.clientX-p)/a*2-1,-((g.clientY-h)/a)*2+1);if(Math.abs(H.x)>1||Math.abs(H.y)>1)return null;i.quaternion.copy(n.quaternion).invert(),i.updateMatrixWorld(),l.setFromCamera(H,s);let x=l.intersectObjects(i.children,!1);for(let S of x){let A=_optionalChain([S, 'access', _14 => _14.object, 'access', _15 => _15.userData, 'optionalAccess', _16 => _16.type]);if(typeof A=="string"&&A in u)return A}return null};return{render:g=>{if(!o)return;let m=g.autoClear;g.autoClear=!1,i.render(g),g.autoClear=m},handleClick:g=>{if(!o)return!1;let m=f(g);return m?(r.getProjection()==="orthographic"&&r.setProjection("perspective"),r.setViewDirection(u[m],!1),!0):!1},setVisible:g=>{o=g},isVisible:()=>o,dispose:()=>i.dispose()}}function ft(e,n,t,r,i,o,a,l,s,u,f,E,g,m,p=!0){let h=null,H=performance.now(),x=!0,S=0,A=500,V=new ke.Matrix4,d=new ke.Matrix4,c=null,R=()=>{x=!0},T=M=>{M.updateMatrixWorld();let O=c!==M||!V.equals(M.matrixWorld)||!d.equals(M.projectionMatrix);return O&&(c=M,V.copy(M.matrixWorld),d.copy(M.projectionMatrix)),O},v=e.domElement,C=["pointerdown","pointerup","wheel"];if(p)for(let M of C)v.addEventListener(M,R,{passive:!0});let _=()=>{let{width:M,height:O}=a();if(M===0||O===0)return;let y=Math.floor(M*l),b=Math.floor(O*l);(e.domElement.width!==y||e.domElement.height!==b)&&(e.setPixelRatio(l),e.setSize(M,O,!1),t.aspect=M/O,t.updateProjectionMatrix(),i.updateAspect(M,O),_optionalChain([E, 'optionalCall', _17 => _17(), 'optionalAccess', _18 => _18.setSize, 'call', _19 => _19(M,O,l)]),_optionalChain([g, 'optionalAccess', _20 => _20.setSize, 'call', _21 => _21(M,O)]),R())},F=function(){h=requestAnimationFrame(F);let M=performance.now(),O=(M-H)/1e3;H=M,_(),(o.enableDamping||o.autoRotate)&&o.update(),u&&u.update(r().position),m&&m.update(),_optionalChain([s, 'optionalCall', _22 => _22(O)]);let y=r();if(p){if(!(x||T(y)||M-S>=A))return;x=!1,S=M}let b=_optionalChain([E, 'optionalCall', _23 => _23()]);b?(b.setCamera(y),b.render(O)):e.render(n,y),g&&g.render(n,y),f&&f.render(e)};return{animate:F,dispose:()=>{if(h!==null&&(cancelAnimationFrame(h),h=null),p)for(let M of C)v.removeEventListener(M,R)},invalidate:R}}var W=new ce.Vector3(0,0,1);function ht(e){let n=e.sceneScale||"m",r={mm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:10,lightHeight:20,minDistance:.1,shadowSize:100,scaleFactor:1e3},cm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:25,lightHeight:50,minDistance:.1,shadowSize:100,scaleFactor:100},m:{cameraDistance:10,near:.01,far:2e3,floorSize:50,lightDistance:25,lightHeight:50,minDistance:.001,shadowSize:100,scaleFactor:1},inches:{cameraDistance:15,near:.1,far:2e3,floorSize:80,lightDistance:20,lightHeight:40,minDistance:.1,shadowSize:80,scaleFactor:39.37},feet:{cameraDistance:8,near:.1,far:2e3,floorSize:40,lightDistance:15,lightHeight:30,minDistance:.1,shadowSize:60,scaleFactor:3.28084}}[n],i=_nullishCoalesce(e.look, () => (_chunkAZ4GBXXLcjs.h)),o=_chunkAZ4GBXXLcjs.i[i];return{sceneScale:n,look:i,camera:{position:_optionalChain([e, 'access', _24 => _24.camera, 'optionalAccess', _25 => _25.position])||be(_nullishCoalesce(_optionalChain([e, 'access', _26 => _26.environment, 'optionalAccess', _27 => _27.sceneUp]), () => (W)),r.cameraDistance*Math.sqrt(3)),fov:_optionalChain([e, 'access', _28 => _28.camera, 'optionalAccess', _29 => _29.fov])||20,near:_optionalChain([e, 'access', _30 => _30.camera, 'optionalAccess', _31 => _31.near])||r.near,far:_optionalChain([e, 'access', _32 => _32.camera, 'optionalAccess', _33 => _33.far])||r.far,target:_optionalChain([e, 'access', _34 => _34.camera, 'optionalAccess', _35 => _35.target])||new ce.Vector3(0,0,0),dynamicNear:_nullishCoalesce(_optionalChain([e, 'access', _36 => _36.camera, 'optionalAccess', _37 => _37.dynamicNear]), () => (!0))},lighting:{enableSunlight:_nullishCoalesce(_optionalChain([e, 'access', _38 => _38.lighting, 'optionalAccess', _39 => _39.enableSunlight]), () => (!0)),sunlightIntensity:_nullishCoalesce(_optionalChain([e, 'access', _40 => _40.lighting, 'optionalAccess', _41 => _41.sunlightIntensity]), () => (1)),sunlightPosition:_optionalChain([e, 'access', _42 => _42.lighting, 'optionalAccess', _43 => _43.sunlightPosition])||je(_nullishCoalesce(_optionalChain([e, 'access', _44 => _44.environment, 'optionalAccess', _45 => _45.sceneUp]), () => (W)),r.lightDistance,r.lightHeight),ambientLightColor:_optionalChain([e, 'access', _46 => _46.lighting, 'optionalAccess', _47 => _47.ambientLightColor])||new ce.Color(4210752),ambientLightIntensity:_nullishCoalesce(_optionalChain([e, 'access', _48 => _48.lighting, 'optionalAccess', _49 => _49.ambientLightIntensity]), () => (o.ambientIntensity)),sunlightColor:_optionalChain([e, 'access', _50 => _50.lighting, 'optionalAccess', _51 => _51.sunlightColor])||16777215,enableHemisphereLight:_nullishCoalesce(_optionalChain([e, 'access', _52 => _52.lighting, 'optionalAccess', _53 => _53.enableHemisphereLight]), () => (o.hemisphereIntensity>0)),hemisphereSkyColor:_nullishCoalesce(_optionalChain([e, 'access', _54 => _54.lighting, 'optionalAccess', _55 => _55.hemisphereSkyColor]), () => (14673663)),hemisphereGroundColor:_nullishCoalesce(_optionalChain([e, 'access', _56 => _56.lighting, 'optionalAccess', _57 => _57.hemisphereGroundColor]), () => (7036754)),hemisphereIntensity:_nullishCoalesce(_optionalChain([e, 'access', _58 => _58.lighting, 'optionalAccess', _59 => _59.hemisphereIntensity]), () => (o.hemisphereIntensity))},environment:{hdrPath:_optionalChain([e, 'access', _60 => _60.environment, 'optionalAccess', _61 => _61.hdrPath])||"/baseHDR.hdr",backgroundColor:_optionalChain([e, 'access', _62 => _62.environment, 'optionalAccess', _63 => _63.backgroundColor])||new ce.Color(15790320),enableEnvironmentLighting:_nullishCoalesce(_optionalChain([e, 'access', _64 => _64.environment, 'optionalAccess', _65 => _65.enableEnvironmentLighting]), () => (!0)),sceneUp:_optionalChain([e, 'access', _66 => _66.environment, 'optionalAccess', _67 => _67.sceneUp])||W,showEnvironment:_nullishCoalesce(_optionalChain([e, 'access', _68 => _68.environment, 'optionalAccess', _69 => _69.showEnvironment]), () => (!1)),environmentIntensity:_nullishCoalesce(_optionalChain([e, 'access', _70 => _70.environment, 'optionalAccess', _71 => _71.environmentIntensity]), () => (o.environmentIntensity))},floor:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _72 => _72.floor, 'optionalAccess', _73 => _73.enabled]), () => (!1)),size:_optionalChain([e, 'access', _74 => _74.floor, 'optionalAccess', _75 => _75.size])||r.floorSize,color:_optionalChain([e, 'access', _76 => _76.floor, 'optionalAccess', _77 => _77.color])||new ce.Color(8421504),roughness:_nullishCoalesce(_optionalChain([e, 'access', _78 => _78.floor, 'optionalAccess', _79 => _79.roughness]), () => (.7)),metalness:_nullishCoalesce(_optionalChain([e, 'access', _80 => _80.floor, 'optionalAccess', _81 => _81.metalness]), () => (0)),receiveShadow:_nullishCoalesce(_optionalChain([e, 'access', _82 => _82.floor, 'optionalAccess', _83 => _83.receiveShadow]), () => (!0))},render:{enableShadows:_nullishCoalesce(_optionalChain([e, 'access', _84 => _84.render, 'optionalAccess', _85 => _85.enableShadows]), () => (!0)),shadowMapSize:_optionalChain([e, 'access', _86 => _86.render, 'optionalAccess', _87 => _87.shadowMapSize])||2048,antialias:_nullishCoalesce(_optionalChain([e, 'access', _88 => _88.render, 'optionalAccess', _89 => _89.antialias]), () => (!0)),pixelRatio:_optionalChain([e, 'access', _90 => _90.render, 'optionalAccess', _91 => _91.pixelRatio])||Math.min(window.devicePixelRatio,2),toneMapping:_nullishCoalesce(_optionalChain([e, 'access', _92 => _92.render, 'optionalAccess', _93 => _93.toneMapping]), () => (o.toneMapping)),toneMappingExposure:_nullishCoalesce(_optionalChain([e, 'access', _94 => _94.render, 'optionalAccess', _95 => _95.toneMappingExposure]), () => (o.toneMappingExposure)),preserveDrawingBuffer:_nullishCoalesce(_optionalChain([e, 'access', _96 => _96.render, 'optionalAccess', _97 => _97.preserveDrawingBuffer]), () => (!1)),ambientOcclusion:_nullishCoalesce(_optionalChain([e, 'access', _98 => _98.render, 'optionalAccess', _99 => _99.ambientOcclusion]), () => (o.ambientOcclusion)),aoIntensity:_nullishCoalesce(_optionalChain([e, 'access', _100 => _100.render, 'optionalAccess', _101 => _101.aoIntensity]), () => (1)),aoPixelRatio:_nullishCoalesce(_optionalChain([e, 'access', _102 => _102.render, 'optionalAccess', _103 => _103.aoPixelRatio]), () => (1)),onDemand:_nullishCoalesce(_optionalChain([e, 'access', _104 => _104.render, 'optionalAccess', _105 => _105.onDemand]), () => (!0))},controls:{enableDamping:_nullishCoalesce(_optionalChain([e, 'access', _106 => _106.controls, 'optionalAccess', _107 => _107.enableDamping]), () => (!1)),dampingFactor:_optionalChain([e, 'access', _108 => _108.controls, 'optionalAccess', _109 => _109.dampingFactor])||.05,autoRotate:_nullishCoalesce(_optionalChain([e, 'access', _110 => _110.controls, 'optionalAccess', _111 => _111.autoRotate]), () => (!1)),autoRotateSpeed:_optionalChain([e, 'access', _112 => _112.controls, 'optionalAccess', _113 => _113.autoRotateSpeed])||.5,enableZoom:_nullishCoalesce(_optionalChain([e, 'access', _114 => _114.controls, 'optionalAccess', _115 => _115.enableZoom]), () => (!0)),enablePan:_nullishCoalesce(_optionalChain([e, 'access', _116 => _116.controls, 'optionalAccess', _117 => _117.enablePan]), () => (!0)),minDistance:_optionalChain([e, 'access', _118 => _118.controls, 'optionalAccess', _119 => _119.minDistance])||r.minDistance,maxDistance:_optionalChain([e, 'access', _120 => _120.controls, 'optionalAccess', _121 => _121.maxDistance])||1/0},grid:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _122 => _122.grid, 'optionalAccess', _123 => _123.enabled]), () => (!1)),cellSize:_nullishCoalesce(_optionalChain([e, 'access', _124 => _124.grid, 'optionalAccess', _125 => _125.cellSize]), () => (1)),majorEvery:_nullishCoalesce(_optionalChain([e, 'access', _126 => _126.grid, 'optionalAccess', _127 => _127.majorEvery]), () => (10)),cellColor:_nullishCoalesce(_optionalChain([e, 'access', _128 => _128.grid, 'optionalAccess', _129 => _129.cellColor]), () => (8947848)),majorColor:_nullishCoalesce(_optionalChain([e, 'access', _130 => _130.grid, 'optionalAccess', _131 => _131.majorColor]), () => (4473924)),fadeDistance:_nullishCoalesce(_optionalChain([e, 'access', _132 => _132.grid, 'optionalAccess', _133 => _133.fadeDistance]), () => (100)),plane:_nullishCoalesce(_optionalChain([e, 'access', _134 => _134.grid, 'optionalAccess', _135 => _135.plane]), () => (ve(_nullishCoalesce(_optionalChain([e, 'access', _136 => _136.environment, 'optionalAccess', _137 => _137.sceneUp]), () => (W)))))},gizmo:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _138 => _138.gizmo, 'optionalAccess', _139 => _139.enabled]), () => (!1))},edges:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _140 => _140.edges, 'optionalAccess', _141 => _141.enabled]), () => (!1)),color:_optionalChain([e, 'access', _142 => _142.edges, 'optionalAccess', _143 => _143.color]),darken:_optionalChain([e, 'access', _144 => _144.edges, 'optionalAccess', _145 => _145.darken]),width:_nullishCoalesce(_optionalChain([e, 'access', _146 => _146.edges, 'optionalAccess', _147 => _147.width]), () => (1.5)),thresholdAngle:_nullishCoalesce(_optionalChain([e, 'access', _148 => _148.edges, 'optionalAccess', _149 => _149.thresholdAngle]), () => (44)),distanceFade:_nullishCoalesce(_optionalChain([e, 'access', _150 => _150.edges, 'optionalAccess', _151 => _151.distanceFade]), () => (!0)),maxTriangles:_optionalChain([e, 'access', _152 => _152.edges, 'optionalAccess', _153 => _153.maxTriangles]),maxSegments:_optionalChain([e, 'access', _154 => _154.edges, 'optionalAccess', _155 => _155.maxSegments]),screenSpaceFallback:_optionalChain([e, 'access', _156 => _156.edges, 'optionalAccess', _157 => _157.screenSpaceFallback])},measure:{enabled:_nullishCoalesce(_optionalChain([e, 'access', _158 => _158.measure, 'optionalAccess', _159 => _159.enabled]), () => (!1)),snapPixels:_optionalChain([e, 'access', _160 => _160.measure, 'optionalAccess', _161 => _161.snapPixels]),color:_optionalChain([e, 'access', _162 => _162.measure, 'optionalAccess', _163 => _163.color]),labelClassName:_optionalChain([e, 'access', _164 => _164.measure, 'optionalAccess', _165 => _165.labelClassName]),displayUnit:_optionalChain([e, 'access', _166 => _166.measure, 'optionalAccess', _167 => _167.displayUnit]),format:_optionalChain([e, 'access', _168 => _168.measure, 'optionalAccess', _169 => _169.format])},events:{onBackgroundClicked:_optionalChain([e, 'access', _170 => _170.events, 'optionalAccess', _171 => _171.onBackgroundClicked]),onObjectSelected:_optionalChain([e, 'access', _172 => _172.events, 'optionalAccess', _173 => _173.onObjectSelected]),onMeshMetadataClicked:_optionalChain([e, 'access', _174 => _174.events, 'optionalAccess', _175 => _175.onMeshMetadataClicked]),onMeshDoubleClicked:_optionalChain([e, 'access', _176 => _176.events, 'optionalAccess', _177 => _177.onMeshDoubleClicked]),selectionColor:_optionalChain([e, 'access', _178 => _178.events, 'optionalAccess', _179 => _179.selectionColor])||"#ff0000",enableEventHandlers:_nullishCoalesce(_optionalChain([e, 'access', _180 => _180.events, 'optionalAccess', _181 => _181.enableEventHandlers]), () => (!0)),enableKeyboardControls:_nullishCoalesce(_optionalChain([e, 'access', _182 => _182.events, 'optionalAccess', _183 => _183.enableKeyboardControls]), () => (!0)),enableClickToFocus:_nullishCoalesce(_optionalChain([e, 'access', _184 => _184.events, 'optionalAccess', _185 => _185.enableClickToFocus]), () => (!0)),enableDoubleClickZoom:_nullishCoalesce(_optionalChain([e, 'access', _186 => _186.events, 'optionalAccess', _187 => _187.enableDoubleClickZoom]), () => (!0)),onReady:_optionalChain([e, 'access', _188 => _188.events, 'optionalAccess', _189 => _189.onReady]),onFrame:_optionalChain([e, 'access', _190 => _190.events, 'optionalAccess', _191 => _191.onFrame])},onMaxAnisotropy:e.onMaxAnisotropy}}function Rt(e){let{scene:n,renderer:t,lights:r,config:i,pipeline:o,requestRender:a}=e,l=i.look,s=m=>{m.ambientIntensity!==void 0&&(r.ambient.intensity=m.ambientIntensity),m.hemisphereIntensity!==void 0&&!r.hemisphere&&m.hemisphereIntensity>0&&(r.hemisphere=new gt.HemisphereLight(_nullishCoalesce(m.hemisphereSkyColor, () => (i.lighting.hemisphereSkyColor)),_nullishCoalesce(m.hemisphereGroundColor, () => (i.lighting.hemisphereGroundColor)),m.hemisphereIntensity),r.hemisphere.position.copy(_nullishCoalesce(i.environment.sceneUp, () => (W))),n.add(r.hemisphere)),r.hemisphere&&(m.hemisphereIntensity!==void 0&&(r.hemisphere.intensity=m.hemisphereIntensity),m.hemisphereSkyColor!==void 0&&r.hemisphere.color.set(m.hemisphereSkyColor),m.hemisphereGroundColor!==void 0&&r.hemisphere.groundColor.set(m.hemisphereGroundColor)),a()},u=m=>{i.environment.environmentIntensity=m,n.environmentIntensity=m,a()};return{setFillLights:s,setEnvironmentIntensity:u,setToneMappingExposure:m=>{i.render.toneMappingExposure=m,t.toneMappingExposure=m,o.get()&&o.rebuild()},setAoIntensity:m=>{i.render.aoIntensity=m,o.get()&&o.rebuild()},setLook:m=>{let p=_chunkAZ4GBXXLcjs.i[m];l=m,t.toneMapping=p.toneMapping,t.toneMappingExposure=p.toneMappingExposure,i.render.toneMapping=p.toneMapping,i.render.toneMappingExposure=p.toneMappingExposure,s({hemisphereIntensity:p.hemisphereIntensity,ambientIntensity:p.ambientIntensity}),u(p.environmentIntensity);let h=o.get()!==null;o.setAmbientOcclusion(p.ambientOcclusion),h&&o.rebuild(),n.traverse(H=>{if(H.userData.source!=="compute")return;let x=H,S=Array.isArray(x.material)?x.material:x.material?[x.material]:[];for(let A of S)"envMapIntensity"in A&&(A.envMapIntensity=p.envMapIntensity)}),a()},getMaterialAppearance:()=>_chunkAZ4GBXXLcjs.j.call(void 0, l)}}function bt(e,n){let t=n.parentElement,r=t?t.clientWidth:window.innerWidth,i=t?t.clientHeight:window.innerHeight,o=new Tt.PerspectiveCamera(e.camera.fov,r/i,e.camera.near,e.camera.far),a=e.camera.position;return a&&o.position.set(a.x,a.y,a.z),o}function vt(e){let n=new Me.Scene,t=typeof e.environment.backgroundColor=="string"?new Me.Color(e.environment.backgroundColor):e.environment.backgroundColor;return n.background=t||null,n}function xt(e,n){_chunkAZ4GBXXLcjs.p.call(void 0, e,n),_optionalChain([e, 'access', _192 => _192.environment, 'optionalAccess', _193 => _193.dispose, 'call', _194 => _194()]),e.background instanceof yt.Texture&&e.background.dispose()}var _EffectComposerjs = require('three/addons/postprocessing/EffectComposer.js');var _RenderPassjs = require('three/addons/postprocessing/RenderPass.js');var _GTAOPassjs = require('three/addons/postprocessing/GTAOPass.js');var _SMAAPassjs = require('three/addons/postprocessing/SMAAPass.js');var _OutputPassjs = require('three/addons/postprocessing/OutputPass.js');var _Passjs = require('three/addons/postprocessing/Pass.js');var ze={uniforms:{tDiffuse:{value:null},tNormal:{value:null},tDepth:{value:null},uResolution:{value:new P.Vector2(1,1)},uColor:{value:new P.Color(2236962)},uOpacity:{value:1},uNormalThreshold:{value:.4},uDepthThreshold:{value:.02},uThickness:{value:1},uNear:{value:.1},uFar:{value:1e3},uPerspective:{value:1}},vertexShader:`
53
+ `,transparent:!0,depthWrite:!1,side:n.DoubleSide,uniforms:{uAxes:{value:c},uCell:{value:t},uMajor:{value:r},uCellColor:{value:new n.Color(i)},uMajorColor:{value:new n.Color(a)},uCenter:{value:new n.Vector3},uFade:{value:o}}}),f=new n.Mesh(u,d);f.name=`grid`,f.userData.id=`grid`,f.renderOrder=-1;let p=o,m=o*l,h=new n.Vector3;return{object:f,update:e=>{s===`y`?(f.position.set(e.x,0,e.z),h.set(e.x,0,e.z)):s===`z`?(f.position.set(e.x,e.y,0),h.set(e.x,e.y,0)):(f.position.set(0,e.y,e.z),h.set(0,e.y,e.z)),d.uniforms.uCenter.value.copy(h),f.scale.setScalar(m)},fitToContent:e=>{if(e.isEmpty())return;let t=e.getSize(new n.Vector3),r=(e,t)=>t===0?e.x:t===1?e.y:e.z,i=Math.max(r(t,c.x),r(t,c.y));!(i>0)||!Number.isFinite(i)||(d.uniforms.uCell.value=Ee(i/20),p=i*2,d.uniforms.uFade.value=p,m=p*l)},setVisible:e=>{f.visible=e},dispose:()=>{f.removeFromParent(),u.dispose(),d.dispose()}}}function Oe(e,t){let r=new c.CSS2DRenderer,i=r.domElement;i.style.position=`absolute`,i.style.top=`0`,i.style.left=`0`,i.style.overflow=`hidden`,i.style.pointerEvents=`none`,i.style.zIndex=`30`,getComputedStyle(e).position===`static`&&(e.style.position=`relative`),e.appendChild(i);let a={width:e.clientWidth||1,height:e.clientHeight||1};r.setSize(a.width,a.height);let o=new n.Group;o.name=`label-layer`,o.userData.id=`label-layer`,t.add(o);let s=new Set;return{addLabel:(e,t,n)=>{let r=document.createElement(`div`);r.textContent=e,n?r.className=n:Object.assign(r.style,{padding:`2px 6px`,borderRadius:`4px`,background:`rgba(20, 20, 20, 0.78)`,color:`#fff`,font:`12px/1.3 system-ui, sans-serif`,whiteSpace:`pre`,textAlign:`center`,userSelect:`none`}),r.style.pointerEvents=`none`;let i=new c.CSS2DObject(r);return i.position.copy(t),o.add(i),s.add(i),{object:i,setPosition:e=>i.position.copy(e),setText:e=>{r.textContent=e},remove:()=>{i.removeFromParent(),r.remove(),s.delete(i)}}},render:(e,t)=>r.render(e,t),setSize:(e,t)=>r.setSize(e,t),dispose:()=>{s.forEach(e=>{e.removeFromParent(),e.element.remove()}),s.clear(),o.removeFromParent(),i.remove()}}}const ke=.015,Ae={Millimeters:{metersPerUnit:1/1e3,suffix:`mm`},Centimeters:{metersPerUnit:1/100,suffix:`cm`},Meters:{metersPerUnit:1,suffix:`m`},Inches:{metersPerUnit:1/39.37,suffix:`in`},Feet:{metersPerUnit:1/3.28084,suffix:`ft`}};function je(e){let t=e&&Ae[e]||Ae.Meters;return e=>`${(e/t.metersPerUnit).toPrecision(3)} ${t.suffix}`}function Me(e,t){if(e.isOrthographicCamera){let t=e;return Math.abs(t.top-t.bottom)/(t.zoom||1)*ke}return((t?e.position.distanceTo(t):e.position.length())||1)*ke}function Ne(e){let t=e.object;if(t instanceof n.Mesh)return e.face?[e.face.a,e.face.b,e.face.c]:null;if(t instanceof n.Points)return e.index==null?null:[e.index];if(t instanceof n.Line){if(e.index==null)return null;let n=t.geometry.index;return n?e.index+1>=n.count?null:[n.getX(e.index),n.getX(e.index+1)]:[e.index,e.index+1]}return null}function Pe(e,t,r,i){let a=e.point.clone(),o=e.object,s=Ne(e);if(!s||!o.geometry)return a;let c=o.geometry.attributes.position;if(!c)return a;let l=e=>{let i=e.clone().project(t);return new n.Vector2((i.x+1)/2*r.width,(1-i.y)/2*r.height)},u=l(a),d=a,f=i;for(let e of s){if(e>=c.count)continue;let t=new n.Vector3().fromBufferAttribute(c,e).applyMatrix4(o.matrixWorld),r=l(t).distanceTo(u);r<f&&(f=r,d=t)}return d}function Fe(e){let{canvas:t,scene:o,getActiveCamera:s,getViewTarget:c,labelLayer:l,options:u={}}=e,d=u.snapPixels??12,f=new n.Color(u.color??16763904),p=je(u.displayUnit),m=u.format??((e,t)=>`${p(e)}\nΔx ${p(t.x)} Δy ${p(t.y)} Δz ${p(t.z)}`),h=new n.Raycaster,g=new n.Vector2,_=!1,v=[],y=[],b=null,x=null,S=new n.PointsMaterial({color:f,size:8,sizeAttenuation:!1,depthTest:!1}),C=new n.PointsMaterial({color:f,size:11,sizeAttenuation:!1,depthTest:!1,transparent:!0,opacity:.5}),w=null,T=e=>{if(!e){w&&(w.visible=!1);return}if(!w){let e=new n.BufferGeometry;e.setAttribute(`position`,new n.Float32BufferAttribute([0,0,0],3)),w=new n.Points(e,C),w.renderOrder=1e3,w.userData.id=`measure`,w.raycast=()=>{},o.add(w)}w.position.copy(e),w.visible=!0},E=e=>{let t=new n.BufferGeometry;t.setAttribute(`position`,new n.Float32BufferAttribute([e.x,e.y,e.z],3));let r=new n.Points(t,S);return r.renderOrder=999,r.userData.id=`measure`,r.raycast=()=>{},o.add(r),r},D=()=>{v.length=0,y.forEach(e=>{e.geometry.dispose(),e.removeFromParent()}),y.length=0,b&&=(b.geometry.dispose(),b.material.dispose(),b.removeFromParent(),null),x?.remove(),x=null},O=()=>{if(v.length!==2)return;let[e,t]=v,s=new i.LineGeometry;s.setPositions([e.x,e.y,e.z,t.x,t.y,t.z]);let c=new a.LineMaterial({color:f});c.linewidth=2,c.depthTest=!1,b=new r.Line2(s,c),b.renderOrder=998,b.userData.id=`measure`,b.raycast=()=>{},o.add(b);let d=e.clone().add(t).multiplyScalar(.5),p=new n.Vector3(Math.abs(t.x-e.x),Math.abs(t.y-e.y),Math.abs(t.z-e.z));x=l.addLabel(m(e.distanceTo(t),p),d,u.labelClassName)},k=e=>{let n=t.getBoundingClientRect();g.x=(e.clientX-n.left)/n.width*2-1,g.y=-((e.clientY-n.top)/n.height)*2+1;let r=s();h.setFromCamera(g,r);let i=Me(r,c?.());h.params.Line.threshold=i,h.params.Points.threshold=i;let a=h.intersectObjects(o.children,!0).filter(e=>e.object.userData.id!==`measure`&&e.object.userData.id!==`grid`);return a.length===0?null:Pe(a[0],r,{width:n.width,height:n.height},d)},A=null,j=0,M=()=>{j&&=(cancelAnimationFrame(j),0),A=null};return{setEnabled:e=>{_=e,e||(M(),D(),T(null))},isEnabled:()=>_,handleClick:e=>{if(!_)return!1;v.length===2&&D();let t=k(e);return t===null||(v.push(t),y.push(E(t)),v.length===2&&O(),!0)},handleMove:e=>{_&&(A=e,!j&&(j=requestAnimationFrame(()=>{j=0;let e=A;A=null,!(!_||!e)&&T(k(e))})))},clear:D,dispose:()=>{M(),D(),w&&=(w.geometry.dispose(),w.removeFromParent(),null),S.dispose(),C.dispose()}}}const Ie=[];function Le({camera:e,scene:t,groundNormals:r=()=>Ie}){let i=e.near,a=e.near,o=new n.Vector3,s=new n.Vector3;return{update:()=>{e.near!==a&&(i=e.near);let c=I(t),l=i;if(!c.isEmpty()){let t=c.getSize(s).length()*.5,a=e.position.distanceTo(c.getCenter(o))-t;for(let t of r())a=Math.min(a,Math.abs(e.position.dot(t)));l=n.MathUtils.clamp(a*.5,i,e.far*.01)}Math.abs(l-a)>a*.05&&(e.near=l,e.updateProjectionMatrix(),a=l)}}}function Re(){let e=[],t=null,n=()=>e.sort((e,t)=>t.priority-e.priority),r=t=>e.findIndex(e=>e.id===t),i=n=>{let i=r(n);i!==-1&&(e.splice(i,1),t===n&&(t=null))};return{register:({id:t,tool:r,priority:a=0})=>(i(t),e.push({id:t,tool:r,priority:a}),n(),()=>i(t)),unregister:i,get:t=>e[r(t)]?.tool??null,setActive:n=>{t=n;for(let t of e)t.tool.setEnabled?.(t.id===n)},getActive:()=>t,handleClick:t=>{for(let n of[...e])if(n.tool.handleClick(t))return!0;return!1},handleMove:t=>{for(let n of[...e])n.tool.handleMove?.(t)}}}function ze(e,t){let n=t.getBoundingClientRect();return{x:(e.clientX-n.left)/n.width*2-1,y:-((e.clientY-n.top)/n.height)*2+1}}function Be(e){let{camera:t,domElement:r,controller:i}=e,a=new l.ViewHelper(t,r);a.setLabels(`X`,`Y`,`Z`);let o=!0,s=new n.Raycaster,c=new n.OrthographicCamera(-2,2,2,-2,0,4);c.position.set(0,0,2),c.updateMatrixWorld();let u={posX:new n.Vector3(1,0,0),negX:new n.Vector3(-1,0,0),posY:new n.Vector3(0,1,0),negY:new n.Vector3(0,-1,0),posZ:new n.Vector3(0,0,1),negZ:new n.Vector3(0,0,-1)},d=e=>{let i=r.getBoundingClientRect(),o=i.left+r.offsetWidth-128-a.location.right,l=i.top+r.offsetHeight-128-a.location.bottom,d=new n.Vector2((e.clientX-o)/128*2-1,-((e.clientY-l)/128)*2+1);if(Math.abs(d.x)>1||Math.abs(d.y)>1)return null;a.quaternion.copy(t.quaternion).invert(),a.updateMatrixWorld(),s.setFromCamera(d,c);let f=s.intersectObjects(a.children,!1);for(let e of f){let t=e.object.userData?.type;if(typeof t==`string`&&t in u)return t}return null};return{render:e=>{if(!o)return;let t=e.autoClear;e.autoClear=!1,a.render(e),e.autoClear=t},handleClick:e=>{if(!o)return!1;let t=d(e);return t?(i.getProjection()===`orthographic`&&i.setProjection(`perspective`),i.setViewDirection(u[t],!1),!0):!1},setVisible:e=>{o=e},isVisible:()=>o,dispose:()=>a.dispose()}}function Ve(e,t,r,i,a,o,s,c,l,u,d,f,p,m,h=!0){let g=null,_=performance.now(),v=!0,y=0,b=new n.Matrix4,x=new n.Matrix4,S=null,C=()=>{v=!0},w=e=>{e.updateMatrixWorld();let t=S!==e||!b.equals(e.matrixWorld)||!x.equals(e.projectionMatrix);return t&&(S=e,b.copy(e.matrixWorld),x.copy(e.projectionMatrix)),t},T=e.domElement,E=[`pointerdown`,`pointerup`,`wheel`];if(h)for(let e of E)T.addEventListener(e,C,{passive:!0});let D=()=>{let{width:t,height:n}=s();if(t===0||n===0)return;let i=Math.floor(t*c),o=Math.floor(n*c);(e.domElement.width!==i||e.domElement.height!==o)&&(e.setPixelRatio(c),e.setSize(t,n,!1),r.aspect=t/n,r.updateProjectionMatrix(),a.updateAspect(t,n),f?.()?.setSize(t,n,c),p?.setSize(t,n),C())},O=function(){g=requestAnimationFrame(O);let n=performance.now(),r=(n-_)/1e3;_=n,D(),(o.enableDamping||o.autoRotate)&&o.update(),u&&u.update(i().position),m&&m.update(),l?.(r);let a=i();if(h){if(!(v||w(a)||n-y>=500))return;v=!1,y=n}let s=f?.();s?(s.setCamera(a),s.render(r)):e.render(t,a),p&&p.render(t,a),d&&d.render(e)};return{animate:O,dispose:()=>{if(g!==null&&(cancelAnimationFrame(g),g=null),h)for(let e of E)T.removeEventListener(e,C)},invalidate:C}}const Q=new n.Vector3(0,0,1);function He(e){let t=e.sceneScale||`m`,r={mm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:10,lightHeight:20,minDistance:.1,shadowSize:100,scaleFactor:1e3},cm:{cameraDistance:20,near:.1,far:2e3,floorSize:100,lightDistance:25,lightHeight:50,minDistance:.1,shadowSize:100,scaleFactor:100},m:{cameraDistance:10,near:.01,far:2e3,floorSize:50,lightDistance:25,lightHeight:50,minDistance:.001,shadowSize:100,scaleFactor:1},inches:{cameraDistance:15,near:.1,far:2e3,floorSize:80,lightDistance:20,lightHeight:40,minDistance:.1,shadowSize:80,scaleFactor:39.37},feet:{cameraDistance:8,near:.1,far:2e3,floorSize:40,lightDistance:15,lightHeight:30,minDistance:.1,shadowSize:60,scaleFactor:3.28084}}[t],i=e.look??`technical`,a=y[i];return{sceneScale:t,look:i,camera:{position:e.camera?.position||O(e.environment?.sceneUp??Q,r.cameraDistance*Math.sqrt(3)),fov:e.camera?.fov||20,near:e.camera?.near||r.near,far:e.camera?.far||r.far,target:e.camera?.target||new n.Vector3(0,0,0),dynamicNear:e.camera?.dynamicNear??!0},lighting:{enableSunlight:e.lighting?.enableSunlight??!0,sunlightIntensity:e.lighting?.sunlightIntensity??1,sunlightPosition:e.lighting?.sunlightPosition||k(e.environment?.sceneUp??Q,r.lightDistance,r.lightHeight),ambientLightColor:e.lighting?.ambientLightColor||new n.Color(4210752),ambientLightIntensity:e.lighting?.ambientLightIntensity??a.ambientIntensity,sunlightColor:e.lighting?.sunlightColor||16777215,enableHemisphereLight:e.lighting?.enableHemisphereLight??a.hemisphereIntensity>0,hemisphereSkyColor:e.lighting?.hemisphereSkyColor??14673663,hemisphereGroundColor:e.lighting?.hemisphereGroundColor??7036754,hemisphereIntensity:e.lighting?.hemisphereIntensity??a.hemisphereIntensity},environment:{hdrPath:e.environment?.hdrPath||`/baseHDR.hdr`,backgroundColor:e.environment?.backgroundColor||new n.Color(15790320),enableEnvironmentLighting:e.environment?.enableEnvironmentLighting??!0,sceneUp:e.environment?.sceneUp||Q,showEnvironment:e.environment?.showEnvironment??!1,environmentIntensity:e.environment?.environmentIntensity??a.environmentIntensity},floor:{enabled:e.floor?.enabled??!1,size:e.floor?.size||r.floorSize,color:e.floor?.color||new n.Color(8421504),roughness:e.floor?.roughness??.7,metalness:e.floor?.metalness??0,receiveShadow:e.floor?.receiveShadow??!0},render:{enableShadows:e.render?.enableShadows??!0,shadowMapSize:e.render?.shadowMapSize||2048,antialias:e.render?.antialias??!0,pixelRatio:e.render?.pixelRatio||Math.min(window.devicePixelRatio,2),toneMapping:e.render?.toneMapping??a.toneMapping,toneMappingExposure:e.render?.toneMappingExposure??a.toneMappingExposure,preserveDrawingBuffer:e.render?.preserveDrawingBuffer??!1,ambientOcclusion:e.render?.ambientOcclusion??a.ambientOcclusion,aoIntensity:e.render?.aoIntensity??1,aoPixelRatio:e.render?.aoPixelRatio??1,onDemand:e.render?.onDemand??!0},controls:{enableDamping:e.controls?.enableDamping??!1,dampingFactor:e.controls?.dampingFactor||.05,autoRotate:e.controls?.autoRotate??!1,autoRotateSpeed:e.controls?.autoRotateSpeed||.5,enableZoom:e.controls?.enableZoom??!0,enablePan:e.controls?.enablePan??!0,minDistance:e.controls?.minDistance||r.minDistance,maxDistance:e.controls?.maxDistance||1/0},grid:{enabled:e.grid?.enabled??!1,cellSize:e.grid?.cellSize??1,majorEvery:e.grid?.majorEvery??10,cellColor:e.grid?.cellColor??8947848,majorColor:e.grid?.majorColor??4473924,fadeDistance:e.grid?.fadeDistance??100,plane:e.grid?.plane??j(e.environment?.sceneUp??Q)},gizmo:{enabled:e.gizmo?.enabled??!1},edges:{enabled:e.edges?.enabled??!1,color:e.edges?.color,darken:e.edges?.darken,width:e.edges?.width??1.5,thresholdAngle:e.edges?.thresholdAngle??44,distanceFade:e.edges?.distanceFade??!0,maxTriangles:e.edges?.maxTriangles,maxSegments:e.edges?.maxSegments,screenSpaceFallback:e.edges?.screenSpaceFallback},measure:{enabled:e.measure?.enabled??!1,snapPixels:e.measure?.snapPixels,color:e.measure?.color,labelClassName:e.measure?.labelClassName,displayUnit:e.measure?.displayUnit,format:e.measure?.format},events:{onBackgroundClicked:e.events?.onBackgroundClicked,onObjectSelected:e.events?.onObjectSelected,onMeshMetadataClicked:e.events?.onMeshMetadataClicked,onMeshDoubleClicked:e.events?.onMeshDoubleClicked,selectionColor:e.events?.selectionColor||`#ff0000`,enableEventHandlers:e.events?.enableEventHandlers??!0,enableKeyboardControls:e.events?.enableKeyboardControls??!0,enableClickToFocus:e.events?.enableClickToFocus??!0,enableDoubleClickZoom:e.events?.enableDoubleClickZoom??!0,onReady:e.events?.onReady,onFrame:e.events?.onFrame},onMaxAnisotropy:e.onMaxAnisotropy}}function Ue(e){let{scene:t,renderer:r,lights:i,config:a,pipeline:o,requestRender:s}=e,c=a.look,l=e=>{e.ambientIntensity!==void 0&&(i.ambient.intensity=e.ambientIntensity),e.hemisphereIntensity!==void 0&&!i.hemisphere&&e.hemisphereIntensity>0&&(i.hemisphere=new n.HemisphereLight(e.hemisphereSkyColor??a.lighting.hemisphereSkyColor,e.hemisphereGroundColor??a.lighting.hemisphereGroundColor,e.hemisphereIntensity),i.hemisphere.position.copy(a.environment.sceneUp??Q),t.add(i.hemisphere)),i.hemisphere&&(e.hemisphereIntensity!==void 0&&(i.hemisphere.intensity=e.hemisphereIntensity),e.hemisphereSkyColor!==void 0&&i.hemisphere.color.set(e.hemisphereSkyColor),e.hemisphereGroundColor!==void 0&&i.hemisphere.groundColor.set(e.hemisphereGroundColor)),s()},u=e=>{a.environment.environmentIntensity=e,t.environmentIntensity=e,s()};return{setFillLights:l,setEnvironmentIntensity:u,setToneMappingExposure:e=>{a.render.toneMappingExposure=e,r.toneMappingExposure=e,o.get()&&o.rebuild()},setAoIntensity:e=>{a.render.aoIntensity=e,o.get()&&o.rebuild()},setLook:e=>{let n=y[e];c=e,r.toneMapping=n.toneMapping,r.toneMappingExposure=n.toneMappingExposure,a.render.toneMapping=n.toneMapping,a.render.toneMappingExposure=n.toneMappingExposure,l({hemisphereIntensity:n.hemisphereIntensity,ambientIntensity:n.ambientIntensity}),u(n.environmentIntensity);let i=o.get()!==null;o.setAmbientOcclusion(n.ambientOcclusion),i&&o.rebuild(),t.traverse(e=>{if(e.userData.source!==`compute`)return;let t=e,r=Array.isArray(t.material)?t.material:t.material?[t.material]:[];for(let e of r)`envMapIntensity`in e&&(e.envMapIntensity=n.envMapIntensity)}),s()},getMaterialAppearance:()=>b(c)}}function We(e,t){let r=t.parentElement,i=r?r.clientWidth:window.innerWidth,a=r?r.clientHeight:window.innerHeight,o=new n.PerspectiveCamera(e.camera.fov,i/a,e.camera.near,e.camera.far),s=e.camera.position;return s&&o.position.set(s.x,s.y,s.z),o}function Ge(e){let t=new n.Scene;return t.background=(typeof e.environment.backgroundColor==`string`?new n.Color(e.environment.backgroundColor):e.environment.backgroundColor)||null,t}function Ke(e,r){t.t(e,r),e.environment?.dispose(),e.background instanceof n.Texture&&e.background.dispose()}const $={uniforms:{tDiffuse:{value:null},tNormal:{value:null},tDepth:{value:null},uResolution:{value:new n.Vector2(1,1)},uColor:{value:new n.Color(2236962)},uOpacity:{value:1},uNormalThreshold:{value:.4},uDepthThreshold:{value:.02},uThickness:{value:1},uNear:{value:.1},uFar:{value:1e3},uPerspective:{value:1}},vertexShader:`
55
54
  varying vec2 vUv;
56
55
  void main() {
57
56
  vUv = uv;
@@ -105,5 +104,5 @@
105
104
  float edge = max(depthEdge, normalEdge) * uOpacity;
106
105
  gl_FragColor = vec4(mix(color.rgb, uColor, edge), color.a);
107
106
  }
108
- `},Se=class extends _Passjs.Pass{constructor(t,r,i,o,a={}){super();_chunkBYLIBOAUcjs.a.call(void 0, this,"camera");_chunkBYLIBOAUcjs.a.call(void 0, this,"scene");_chunkBYLIBOAUcjs.a.call(void 0, this,"normalMaterial");_chunkBYLIBOAUcjs.a.call(void 0, this,"edgeMaterial");_chunkBYLIBOAUcjs.a.call(void 0, this,"fsQuad");_chunkBYLIBOAUcjs.a.call(void 0, this,"normalTarget",null);_chunkBYLIBOAUcjs.a.call(void 0, this,"width");_chunkBYLIBOAUcjs.a.call(void 0, this,"height");this.scene=t,this.camera=r,this.width=Math.max(1,i),this.height=Math.max(1,o),this.normalMaterial=new P.MeshNormalMaterial,this.normalMaterial.blending=P.NoBlending,this.edgeMaterial=new P.ShaderMaterial({uniforms:P.UniformsUtils.clone(ze.uniforms),vertexShader:ze.vertexShader,fragmentShader:ze.fragmentShader});let l=this.edgeMaterial.uniforms;l.uColor.value=new P.Color(_nullishCoalesce(a.color, () => (2236962))),l.uOpacity.value=_nullishCoalesce(a.opacity, () => (1)),l.uNormalThreshold.value=_nullishCoalesce(a.normalThreshold, () => (.4)),l.uDepthThreshold.value=_nullishCoalesce(a.depthThreshold, () => (.02)),l.uThickness.value=_nullishCoalesce(a.thickness, () => (1)),this.fsQuad=new (0, _Passjs.FullScreenQuad)(this.edgeMaterial),this.needsSwap=!0}acquireNormalTarget(){if(!this.normalTarget){let t=new P.DepthTexture(this.width,this.height);this.normalTarget=new P.WebGLRenderTarget(this.width,this.height,{minFilter:P.NearestFilter,magFilter:P.NearestFilter,depthTexture:t})}return this.normalTarget}setSize(t,r){this.width=Math.max(1,t),this.height=Math.max(1,r),_optionalChain([this, 'access', _195 => _195.normalTarget, 'optionalAccess', _196 => _196.setSize, 'call', _197 => _197(this.width,this.height)])}render(t,r,i){let o=this.acquireNormalTarget(),a=t.getRenderTarget(),l=t.autoClear,s=t.getClearColor(new P.Color),u=t.getClearAlpha(),f=this.scene.overrideMaterial;t.setRenderTarget(o),t.setClearColor(7829503,1),t.autoClear=!0,this.scene.overrideMaterial=this.normalMaterial,t.render(this.scene,this.camera),this.scene.overrideMaterial=f,t.setClearColor(s,u),t.autoClear=l;let E=this.edgeMaterial.uniforms;E.tDiffuse.value=i.texture,E.tNormal.value=o.texture,E.tDepth.value=o.depthTexture,E.uResolution.value.set(this.width,this.height);let g=this.camera;E.uPerspective.value=g.isPerspectiveCamera?1:0,E.uNear.value=_nullishCoalesce(this.camera.near, () => (.1)),E.uFar.value=_nullishCoalesce(this.camera.far, () => (1e3)),t.setRenderTarget(this.renderToScreen?null:r),this.fsQuad.render(t),t.setRenderTarget(a)}dispose(){_optionalChain([this, 'access', _198 => _198.normalTarget, 'optionalAccess', _199 => _199.dispose, 'call', _200 => _200()]),this.normalMaterial.dispose(),this.edgeMaterial.dispose(),this.fsQuad.dispose()}};function Ht(e,n,t,r,i,o){let a=new (0, _EffectComposerjs.EffectComposer)(e),l=new (0, _RenderPassjs.RenderPass)(n,t);a.addPass(l);let s=null;(_nullishCoalesce(o.ambientOcclusion, () => (!0)))&&(s=new (0, _GTAOPassjs.GTAOPass)(n,t,r,i),s.blendIntensity=_nullishCoalesce(o.aoIntensity, () => (1)),s.updateGtaoMaterial({screenSpaceRadius:!0}),a.addPass(s));let u=typeof o.edgeDetection=="object"?o.edgeDetection:{},f=new Se(n,t,r,i,u);f.enabled=!!o.edgeDetection,a.addPass(f);let E=new _SMAAPassjs.SMAAPass;a.addPass(E);let g=new _OutputPassjs.OutputPass;a.addPass(g),e.toneMapping=o.toneMapping,e.toneMappingExposure=o.toneMappingExposure;let m=_nullishCoalesce(o.aoPixelRatio, () => (1));return a.setSize(r,i),{render:p=>a.render(p),setSize:(p,h,H)=>{a.setPixelRatio(Math.min(H,m)),a.setSize(p,h)},setCamera:p=>{if(l.camera=p,f.camera=p,!s)return;s.camera=p;let h=p.isPerspectiveCamera?1:0;s.gtaoMaterial.defines.PERSPECTIVE_CAMERA!==h&&(s.gtaoMaterial.defines.PERSPECTIVE_CAMERA=h,s.gtaoMaterial.needsUpdate=!0)},setEdgeDetection:p=>{f.enabled=p},edgeDetectionEnabled:()=>f.enabled,dispose:()=>{a.dispose(),_optionalChain([s, 'optionalAccess', _201 => _201.dispose, 'call', _202 => _202()]),f.dispose(),E.dispose(),g.dispose()}}}function wt(e){let{renderer:n,scene:t,getActiveCamera:r,getCanvasSize:i,pixelRatio:o,config:a,requestRender:l}=e,s=null,u=!!a.render.ambientOcclusion,f=!1,E=!1,g=p=>{let{width:h,height:H}=i(),x=Ht(n,t,r(),Math.max(1,h),Math.max(1,H),{toneMapping:_nullishCoalesce(a.render.toneMapping, () => (Ct.NeutralToneMapping)),toneMappingExposure:_nullishCoalesce(a.render.toneMappingExposure, () => (1)),ambientOcclusion:p,aoIntensity:a.render.aoIntensity,aoPixelRatio:a.render.aoPixelRatio,edgeDetection:!1});return x.setSize(Math.max(1,h),Math.max(1,H),o),x},m=()=>{if(!(u||f)){_optionalChain([s, 'optionalAccess', _203 => _203.dispose, 'call', _204 => _204()]),s=null,l();return}(!s||E!==u)&&(_optionalChain([s, 'optionalAccess', _205 => _205.dispose, 'call', _206 => _206()]),s=g(u),E=u),s.setEdgeDetection(f),l()};return{get:()=>s,sync:m,rebuild:()=>{_optionalChain([s, 'optionalAccess', _207 => _207.dispose, 'call', _208 => _208()]),s=null,m()},setAmbientOcclusion:p=>{u=p,m()},setEdgeFallback:p=>{p!==f&&(f=p,m())},isEdgeFallbackActive:()=>f,dispose:()=>{_optionalChain([s, 'optionalAccess', _209 => _209.dispose, 'call', _210 => _210()]),s=null}}}var _OrbitControlsjs = require('three/addons/controls/OrbitControls.js');function Mt(e,n,t){let r=new (0, _OrbitControlsjs.OrbitControls)(e,n),i=t.camera.target;return i&&r.target.set(i.x,i.y,i.z),r.enableDamping=t.controls.enableDamping||!1,r.dampingFactor=t.controls.dampingFactor||.05,r.autoRotate=t.controls.autoRotate||!1,r.autoRotateSpeed=t.controls.autoRotateSpeed||.5,r.enableZoom=_nullishCoalesce(t.controls.enableZoom, () => (!0)),r.enablePan=_nullishCoalesce(t.controls.enablePan, () => (!0)),r.minDistance=t.controls.minDistance||.001,r.maxDistance=t.controls.maxDistance||1/0,r.screenSpacePanning=!1,r.maxPolarAngle=Math.PI,r.update(),r}var _HDRLoaderjs = require('three/addons/loaders/HDRLoader.js');function St(e,n,t,r){t.environment.enableEnvironmentLighting?new (0, _HDRLoaderjs.HDRLoader)().load(t.environment.hdrPath||"/baseHDR.hdr",function(i){if(r()){i.dispose();return}if(!_optionalChain([i, 'optionalAccess', _211 => _211.image])){_chunkAZ4GBXXLcjs.c.call(void 0, ).warn("HDR loaded without image data; skipping environment map."),_optionalChain([i, 'optionalAccess', _212 => _212.dispose, 'call', _213 => _213()]),_optionalChain([t, 'access', _214 => _214.events, 'access', _215 => _215.onReady, 'optionalCall', _216 => _216()]);return}i.mapping=j.EquirectangularReflectionMapping;let o=new j.PMREMGenerator(n);o.compileEquirectangularShader();let a=o.fromEquirectangular(i).texture;o.dispose(),e.environment=a,e.environmentIntensity=_nullishCoalesce(t.environment.environmentIntensity, () => (1));let l=Ne(_nullishCoalesce(t.environment.sceneUp, () => (W)));e.environmentRotation.copy(l),t.environment.showEnvironment?(e.background=i,e.backgroundRotation.copy(l)):i.dispose(),_optionalChain([t, 'access', _217 => _217.events, 'access', _218 => _218.onReady, 'optionalCall', _219 => _219()])},void 0,function(i){r()||(_chunkAZ4GBXXLcjs.c.call(void 0, ).warn("HDR texture could not be loaded, falling back to basic lighting:",i),_optionalChain([t, 'access', _220 => _220.events, 'access', _221 => _221.onReady, 'optionalCall', _222 => _222()]))}):_optionalChain([t, 'access', _223 => _223.events, 'access', _224 => _224.onReady, 'optionalCall', _225 => _225()])}function Dt(e,n){let t=n.floor.size,r=new j.PlaneGeometry(t,t),i=typeof n.floor.color=="string"?new j.Color(n.floor.color):n.floor.color,o=new j.MeshStandardMaterial({color:i,roughness:n.floor.roughness,metalness:n.floor.metalness,side:j.DoubleSide}),a=new j.Mesh(r,o);a.userData.id="floor",a.name="floor";let l=(_optionalChain([n, 'access', _226 => _226.environment, 'optionalAccess', _227 => _227.sceneUp])||W).clone().normalize();a.quaternion.setFromUnitVectors(new j.Vector3(0,0,1),l),a.position.set(0,0,0),n.floor.receiveShadow&&n.render.enableShadows&&(a.receiveShadow=!0),e.add(a)}function At(e,n,t,r){let i=new Set,o=new Map,a=new L.Raycaster,l=new L.Vector2,s=new L.Vector2,u=()=>t.getActiveCamera(),f=d=>{let c=d;for(;c;){if(!c.visible)return!1;c=c.parent}return!0},E=()=>{let d=Q(n);if(d.isEmpty()){_chunkAZ4GBXXLcjs.c.call(void 0, ).warn("No objects to fit to view");return}t.frameBounds(d,!1)},g=typeof r.events.selectionColor=="string"?new L.Color(r.events.selectionColor):r.events.selectionColor instanceof L.Color?r.events.selectionColor:new L.Color("#ff0000"),m=()=>{i.forEach(d=>{let c=d;if(o.has(d)){let R=o.get(d),T=c.material;T instanceof L.Material?T.dispose():Array.isArray(T)&&T.forEach(C=>C.dispose()),c.material=R,o.delete(d);let v=d;for(;v.parent;)v=v.parent;v!==n&&(R instanceof L.Material?R.dispose():R.forEach(C=>C.dispose()))}}),i.clear()},p=d=>{let c=d;if(!(c.material instanceof L.Material))return!1;o.set(d,c.material);let R=c.material.clone();return d instanceof L.Mesh&&"emissive"in R?R.emissive=g.clone():"color"in R&&(R.color=g.clone()),c.material=R,!0},h=()=>{let d=Q(n),c=d.isEmpty()?1:d.getSize(new L.Vector3).length();a.params.Points.threshold=c*.01},H=d=>{s.set(d.clientX,d.clientY)},x=d=>{let c=new L.Vector2(d.clientX,d.clientY);if(s.distanceTo(c)>5)return;let R=e.getBoundingClientRect();l.x=(d.clientX-R.left)/R.width*2-1,l.y=-((d.clientY-R.top)/R.height)*2+1,h(),a.setFromCamera(l,u());let T=a.intersectObjects(n.children,!0).filter(v=>f(v.object));if(T.length>0){let v=T[0].object;i.has(v)||(m(),i.add(v),p(v),_optionalChain([r, 'access', _228 => _228.events, 'optionalAccess', _229 => _229.onObjectSelected, 'optionalCall', _230 => _230(v)]),v instanceof L.Mesh&&Object.keys(v.userData).length>0&&_optionalChain([r, 'access', _231 => _231.events, 'optionalAccess', _232 => _232.onMeshMetadataClicked, 'optionalCall', _233 => _233(v.userData)]))}else m(),_optionalChain([r, 'access', _234 => _234.events, 'optionalAccess', _235 => _235.onBackgroundClicked, 'optionalCall', _236 => _236({x:l.x,y:l.y})])},S=d=>{let c=e.getBoundingClientRect();l.x=(d.clientX-c.left)/c.width*2-1,l.y=-((d.clientY-c.top)/c.height)*2+1,h(),a.setFromCamera(l,u());let R=a.intersectObjects(n.children,!0).filter(C=>f(C.object));if(R.length===0)return;let T=R[0].object;if(_optionalChain([r, 'access', _237 => _237.events, 'optionalAccess', _238 => _238.onMeshDoubleClicked, 'optionalCall', _239 => _239(T)]),!_optionalChain([r, 'access', _240 => _240.events, 'optionalAccess', _241 => _241.enableDoubleClickZoom]))return;let v=new L.Box3().setFromObject(T);v.isEmpty()||t.frameBounds(v,!0)},A=d=>{if(_optionalChain([r, 'access', _242 => _242.events, 'optionalAccess', _243 => _243.enableKeyboardControls]))switch(d.key.toLowerCase()){case"f":d.preventDefault(),E();break;case"escape":d.preventDefault(),m();break;case" ":d.preventDefault(),E();break}};return _optionalChain([r, 'access', _244 => _244.events, 'optionalAccess', _245 => _245.enableClickToFocus])&&(e.addEventListener("mousedown",H),e.addEventListener("click",x),e.addEventListener("dblclick",S)),_optionalChain([r, 'access', _246 => _246.events, 'optionalAccess', _247 => _247.enableKeyboardControls])&&(e.setAttribute("tabindex","0"),e.addEventListener("keydown",A)),{dispose:()=>{e.removeEventListener("mousedown",H),e.removeEventListener("click",x),e.removeEventListener("dblclick",S),e.removeEventListener("keydown",A),m()},fitToView:E,clearSelection:m}}function Pt(e,n){let t=new J.AmbientLight(n.lighting.ambientLightColor,n.lighting.ambientLightIntensity);e.add(t);let r=null;if(n.lighting.enableHemisphereLight){r=new J.HemisphereLight(n.lighting.hemisphereSkyColor,n.lighting.hemisphereGroundColor,n.lighting.hemisphereIntensity);let a=_nullishCoalesce(n.environment.sceneUp, () => (W));r.position.copy(a),e.add(r)}if(!n.lighting.enableSunlight)return{ambient:t,hemisphere:r,sun:null};let i=new J.DirectionalLight(_nullishCoalesce(n.lighting.sunlightColor, () => (16777215)),n.lighting.sunlightIntensity),o=n.lighting.sunlightPosition;return o&&i.position.set(o.x,o.y,o.z),n.render.enableShadows?(i.castShadow=!0,i.shadow.mapSize.width=n.render.shadowMapSize||2048,i.shadow.mapSize.height=n.render.shadowMapSize||2048,i.shadow.bias=-1e-4,i.shadow.normalBias=.02,i.shadow.radius=4,e.add(i),e.add(i.target),{ambient:t,hemisphere:r,sun:i}):(e.add(i),{ambient:t,hemisphere:r,sun:null})}function Lt(e,n){if(n.isEmpty())return;let t=n.getCenter(new J.Vector3),r=n.getSize(new J.Vector3).length()*.5*1.2,i=e.shadow.camera;i.left=-r,i.right=r,i.top=r,i.bottom=-r,e.target.position.copy(t),e.target.updateMatrixWorld();let o=e.position.distanceTo(t);i.near=Math.max(r*.01,o-r),i.far=o+r,i.updateProjectionMatrix()}function Ot(e,n,t){let r=new ue.WebGLRenderer({antialias:n.render.antialias,canvas:e,alpha:!0,powerPreference:"high-performance",preserveDrawingBuffer:n.render.preserveDrawingBuffer,logarithmicDepthBuffer:!1}),i=e.parentElement,o=i?i.clientWidth:window.innerWidth,a=i?i.clientHeight:window.innerHeight;return i&&(e.style.width="100%",e.style.height="100%",e.style.display="block"),r.setSize(o,a,!1),r.setPixelRatio(t),n.render.enableShadows&&(r.shadowMap.enabled=!0,r.shadowMap.type=ue.VSMShadowMap),r.toneMapping=n.render.toneMapping,r.toneMappingExposure=_nullishCoalesce(n.render.toneMappingExposure, () => (1)),r.outputColorSpace=ue.SRGBColorSpace,r.sortObjects=!0,r}var Qr=function(e,n){let t=ht(n||{}),r=_optionalChain([t, 'access', _248 => _248.environment, 'optionalAccess', _249 => _249.sceneUp])||W,i=_nullishCoalesce(t.render.pixelRatio, () => (Math.min(window.devicePixelRatio,2))),o=vt(t),a=bt(t,e);a.up.copy(r);let l=Ot(e,t,i);_chunkAZ4GBXXLcjs.n.call(void 0, l.capabilities.getMaxAnisotropy()),_optionalChain([n, 'optionalAccess', _250 => _250.onMaxAnisotropy, 'optionalCall', _251 => _251(l.capabilities.getMaxAnisotropy())]);let s=Mt(a,e,t),u=Ge({scene:o,perspective:a,controls:s,onActiveCameraChange:()=>{},up:r}),f=()=>u.getActiveCamera(),E=!1;St(o,l,t,()=>E);let g=Pt(o,t),m=g.sun,p=()=>{m&&Lt(m,Q(o))};_optionalChain([t, 'access', _252 => _252.floor, 'optionalAccess', _253 => _253.enabled])&&Dt(o,t);let h=_optionalChain([t, 'access', _254 => _254.floor, 'optionalAccess', _255 => _255.enabled])?_nullishCoalesce(o.children.find(w=>w.userData.id==="floor"), () => (null)):null,H=t.grid.enabled?st({cellSize:t.grid.cellSize,majorEvery:t.grid.majorEvery,cellColor:t.grid.cellColor,majorColor:t.grid.majorColor,fadeDistance:t.grid.fadeDistance,plane:t.grid.plane}):null;H&&o.add(H.object);let x=()=>{H&&H.fitToContent(Q(o))},S=t.gizmo.enabled?Et({camera:a,domElement:e,controller:u}):null,A=_nullishCoalesce(t.grid.plane, () => (ve(r))),V=new Ft.Vector3(A==="x"?1:0,A==="y"?1:0,A==="z"?1:0),d=r.clone().normalize(),c=()=>{let w=[];return _optionalChain([H, 'optionalAccess', _256 => _256.object, 'access', _257 => _257.visible])&&w.push(V),t.floor.enabled&&_optionalChain([h, 'optionalAccess', _258 => _258.visible])&&w.push(d),w},R=t.camera.dynamicNear?pt({camera:a,scene:o,groundNormals:c}):null,T=_nullishCoalesce(e.parentElement, () => (e)),v=t.measure.enabled?ct(T,o):null,C=t.measure.enabled&&v?mt({canvas:e,scene:o,getActiveCamera:f,labelLayer:v,options:{snapPixels:t.measure.snapPixels,color:t.measure.color,labelClassName:t.measure.labelClassName,displayUnit:t.measure.displayUnit,format:t.measure.format}}):null,_=t.events.enableEventHandlers!==!1?At(e,o,u,t):{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}},F=5,q=0,M=0,O=w=>{q=w.clientX,M=w.clientY},y=w=>Math.hypot(w.clientX-q,w.clientY-M)>F,b=w=>{if(!y(w)){if(_optionalChain([C, 'optionalAccess', _259 => _259.handleClick, 'call', _260 => _260(w)])){w.stopImmediatePropagation();return}_optionalChain([S, 'optionalAccess', _261 => _261.handleClick, 'call', _262 => _262(w)])&&w.stopImmediatePropagation()}};(S||C)&&(e.addEventListener("mousedown",O,{capture:!0}),e.addEventListener("click",b,{capture:!0}));let I=w=>_optionalChain([C, 'optionalAccess', _263 => _263.handleMove, 'call', _264 => _264(w)]);C&&e.addEventListener("mousemove",I,{passive:!0});let k=()=>{},N=w=>{it(w,{color:t.edges.color,darken:t.edges.darken,width:t.edges.width,thresholdAngle:t.edges.thresholdAngle,distanceFade:t.edges.distanceFade,maxTriangles:t.edges.maxTriangles,maxSegments:t.edges.maxSegments}).then(()=>{G(w),k()})},G=w=>{if(t.edges.screenSpaceFallback===!1)return;let ie=!1;w.traverse(zt=>{_optionalChain([zt, 'access', _265 => _265.userData, 'optionalAccess', _266 => _266.edgesSkipped])===He&&(ie=!0)}),U.setEdgeFallback(ie)},Re=w=>{at(w),U.setEdgeFallback(!1),k()},X=e.parentElement,ee=()=>X?{width:X.clientWidth,height:X.clientHeight}:{width:window.innerWidth,height:window.innerHeight},U=wt({renderer:l,scene:o,getActiveCamera:f,getCanvasSize:ee,pixelRatio:i,config:t,requestRender:()=>k()});U.sync();let K=Rt({scene:o,renderer:l,lights:g,config:t,pipeline:U,requestRender:()=>k()}),{animate:oe,dispose:Te,invalidate:te}=ft(l,o,a,f,u,s,ee,i,t.events.onFrame,H,S,()=>U.get(),v,R,_nullishCoalesce(t.render.onDemand, () => (!0)));k=te,oe(),o.up.set(r.x,r.y,r.z),p(),x();let me=w=>{w.userData.source="user",o.add(w)},De=w=>{w.removeFromParent(),_chunkAZ4GBXXLcjs.p.call(void 0, w)},It=()=>{o.children.filter(ie=>ie.userData.source==="user").forEach(ie=>{ie.removeFromParent(),_chunkAZ4GBXXLcjs.p.call(void 0, ie)})},kt=()=>{E||(E=!0,Te(),_.dispose(),(S||C)&&(e.removeEventListener("mousedown",O,{capture:!0}),e.removeEventListener("click",b,{capture:!0})),C&&e.removeEventListener("mousemove",I),_optionalChain([C, 'optionalAccess', _267 => _267.dispose, 'call', _268 => _268()]),_optionalChain([v, 'optionalAccess', _269 => _269.dispose, 'call', _270 => _270()]),_optionalChain([S, 'optionalAccess', _271 => _271.dispose, 'call', _272 => _272()]),_optionalChain([H, 'optionalAccess', _273 => _273.dispose, 'call', _274 => _274()]),U.dispose(),u.dispose(),s.dispose(),l.dispose(),l.forceContextLoss(),xt(o))};return{scene:o,camera:a,controls:s,renderer:l,cameraController:u,grid:H,gizmo:S,measureTool:C,applyEdges:N,clearEdges:Re,invalidate:te,setAmbientOcclusion:U.setAmbientOcclusion,setLook:K.setLook,setFillLights:K.setFillLights,setEnvironmentIntensity:K.setEnvironmentIntensity,setToneMappingExposure:K.setToneMappingExposure,setAoIntensity:K.setAoIntensity,getMaterialAppearance:K.getMaterialAppearance,updateShadowBounds:p,updateGridScale:x,dispose:kt,fitToView:_.fitToView,clearSelection:_.clearSelection,addUserGeometry:me,removeUserGeometry:De,clearUserGeometry:It}};exports.DEFAULT_LOOK = _chunkAZ4GBXXLcjs.h; exports.ErrorCodes = _chunkAZ4GBXXLcjs.a; exports.LOOKS = _chunkAZ4GBXXLcjs.g; exports.LOOK_PRESETS = _chunkAZ4GBXXLcjs.i; exports.VisualizationError = _chunkAZ4GBXXLcjs.b; exports.enableDebugLogging = _chunkAZ4GBXXLcjs.e; exports.getLogger = _chunkAZ4GBXXLcjs.c; exports.initThree = Qr; exports.materialAppearanceForLook = _chunkAZ4GBXXLcjs.j; exports.setLogger = _chunkAZ4GBXXLcjs.d; exports.updateScene = Ut;
107
+ `};var qe=class extends h.Pass{camera;scene;normalMaterial;edgeMaterial;fsQuad;normalTarget=null;width;height;constructor(e,t,r,i,a={}){super(),this.scene=e,this.camera=t,this.width=Math.max(1,r),this.height=Math.max(1,i),this.normalMaterial=new n.MeshNormalMaterial,this.normalMaterial.blending=n.NoBlending,this.edgeMaterial=new n.ShaderMaterial({uniforms:n.UniformsUtils.clone($.uniforms),vertexShader:$.vertexShader,fragmentShader:$.fragmentShader});let o=this.edgeMaterial.uniforms;o.uColor.value=new n.Color(a.color??2236962),o.uOpacity.value=a.opacity??1,o.uNormalThreshold.value=a.normalThreshold??.4,o.uDepthThreshold.value=a.depthThreshold??.02,o.uThickness.value=a.thickness??1,this.fsQuad=new h.FullScreenQuad(this.edgeMaterial),this.needsSwap=!0}acquireNormalTarget(){if(!this.normalTarget){let e=new n.DepthTexture(this.width,this.height);this.normalTarget=new n.WebGLRenderTarget(this.width,this.height,{minFilter:n.NearestFilter,magFilter:n.NearestFilter,depthTexture:e})}return this.normalTarget}setSize(e,t){this.width=Math.max(1,e),this.height=Math.max(1,t),this.normalTarget?.setSize(this.width,this.height)}render(e,t,r){let i=this.acquireNormalTarget(),a=e.getRenderTarget(),o=e.autoClear,s=e.getClearColor(new n.Color),c=e.getClearAlpha(),l=this.scene.overrideMaterial;e.setRenderTarget(i),e.setClearColor(7829503,1),e.autoClear=!0,this.scene.overrideMaterial=this.normalMaterial,e.render(this.scene,this.camera),this.scene.overrideMaterial=l,e.setClearColor(s,c),e.autoClear=o;let u=this.edgeMaterial.uniforms;u.tDiffuse.value=r.texture,u.tNormal.value=i.texture,u.tDepth.value=i.depthTexture,u.uResolution.value.set(this.width,this.height);let d=this.camera;u.uPerspective.value=+!!d.isPerspectiveCamera,u.uNear.value=this.camera.near??.1,u.uFar.value=this.camera.far??1e3,e.setRenderTarget(this.renderToScreen?null:t),this.fsQuad.render(e),e.setRenderTarget(a)}dispose(){this.normalTarget?.dispose(),this.normalMaterial.dispose(),this.edgeMaterial.dispose(),this.fsQuad.dispose()}};function Je(e,t,n,r,i,a){let o=new u.EffectComposer(e),s=new d.RenderPass(t,n);o.addPass(s);let c=null;(a.ambientOcclusion??!0)&&(c=new f.GTAOPass(t,n,r,i),c.blendIntensity=a.aoIntensity??1,c.updateGtaoMaterial({screenSpaceRadius:!0}),o.addPass(c));let l=new qe(t,n,r,i,typeof a.edgeDetection==`object`?a.edgeDetection:{});l.enabled=!!a.edgeDetection,o.addPass(l);let h=new p.SMAAPass;o.addPass(h);let g=new m.OutputPass;o.addPass(g),e.toneMapping=a.toneMapping,e.toneMappingExposure=a.toneMappingExposure;let _=a.aoPixelRatio??1;return o.setSize(r,i),{render:e=>o.render(e),setSize:(e,t,n)=>{o.setPixelRatio(Math.min(n,_)),o.setSize(e,t)},setCamera:e=>{if(s.camera=e,l.camera=e,!c)return;c.camera=e;let t=+!!e.isPerspectiveCamera;c.gtaoMaterial.defines.PERSPECTIVE_CAMERA!==t&&(c.gtaoMaterial.defines.PERSPECTIVE_CAMERA=t,c.gtaoMaterial.needsUpdate=!0)},setEdgeDetection:e=>{l.enabled=e},edgeDetectionEnabled:()=>l.enabled,dispose:()=>{o.dispose(),c?.dispose(),l.dispose(),h.dispose(),g.dispose()}}}function Ye(e){let{renderer:t,scene:r,getActiveCamera:i,getCanvasSize:a,pixelRatio:o,config:s,requestRender:c}=e,l=null,u=!!s.render.ambientOcclusion,d=!1,f=!1,p=e=>{let{width:c,height:l}=a(),u=Je(t,r,i(),Math.max(1,c),Math.max(1,l),{toneMapping:s.render.toneMapping??n.NeutralToneMapping,toneMappingExposure:s.render.toneMappingExposure??1,ambientOcclusion:e,aoIntensity:s.render.aoIntensity,aoPixelRatio:s.render.aoPixelRatio,edgeDetection:!1});return u.setSize(Math.max(1,c),Math.max(1,l),o),u},m=()=>{if(!(u||d)){l?.dispose(),l=null,c();return}(!l||f!==u)&&(l?.dispose(),l=p(u),f=u),l.setEdgeDetection(d),c()};return{get:()=>l,sync:m,rebuild:()=>{l?.dispose(),l=null,m()},setAmbientOcclusion:e=>{u=e,m()},setEdgeFallback:e=>{e!==d&&(d=e,m())},isEdgeFallbackActive:()=>d,dispose:()=>{l?.dispose(),l=null}}}function Xe(e,t,n){let r=new g.OrbitControls(e,t),i=n.camera.target;return i&&r.target.set(i.x,i.y,i.z),r.enableDamping=n.controls.enableDamping||!1,r.dampingFactor=n.controls.dampingFactor||.05,r.autoRotate=n.controls.autoRotate||!1,r.autoRotateSpeed=n.controls.autoRotateSpeed||.5,r.enableZoom=n.controls.enableZoom??!0,r.enablePan=n.controls.enablePan??!0,r.minDistance=n.controls.minDistance||.001,r.maxDistance=n.controls.maxDistance||1/0,r.screenSpacePanning=!1,r.maxPolarAngle=Math.PI,r.update(),r}function Ze(e,r,i,a){i.environment.enableEnvironmentLighting?new _.HDRLoader().load(i.environment.hdrPath||`/baseHDR.hdr`,function(o){if(a()){o.dispose();return}if(!o?.image){t.c().warn(`HDR loaded without image data; skipping environment map.`),o?.dispose(),i.events.onReady?.();return}o.mapping=n.EquirectangularReflectionMapping;let s=new n.PMREMGenerator(r);s.compileEquirectangularShader();let c=s.fromEquirectangular(o).texture;s.dispose(),e.environment=c,e.environmentIntensity=i.environment.environmentIntensity??1;let l=A(i.environment.sceneUp??Q);e.environmentRotation.copy(l),i.environment.showEnvironment?(e.background=o,e.backgroundRotation.copy(l)):o.dispose(),i.events.onReady?.()},void 0,function(e){a()||(t.c().warn(`HDR texture could not be loaded, falling back to basic lighting:`,e),i.events.onReady?.())}):i.events.onReady?.()}function Qe(e,t){let r=t.floor.size,i=new n.PlaneGeometry(r,r),a=typeof t.floor.color==`string`?new n.Color(t.floor.color):t.floor.color,o=new n.MeshStandardMaterial({color:a,roughness:t.floor.roughness,metalness:t.floor.metalness,side:n.DoubleSide}),s=new n.Mesh(i,o);s.userData.id=`floor`,s.name=`floor`;let c=(t.environment?.sceneUp||Q).clone().normalize();s.quaternion.setFromUnitVectors(new n.Vector3(0,0,1),c),s.position.set(0,0,0),t.floor.receiveShadow&&t.render.enableShadows&&(s.receiveShadow=!0),e.add(s)}function $e(e,r,i,a){let o=new Set,s=new Map,c=new n.Raycaster,l=new n.Vector2,u=new n.Vector2,d=()=>i.getActiveCamera(),f=e=>{let t=e;for(;t;){if(!t.visible)return!1;t=t.parent}return!0},p=()=>{let e=I(r);if(e.isEmpty()){t.c().warn(`No objects to fit to view`);return}i.frameBounds(e,!1)},m=typeof a.events.selectionColor==`string`?new n.Color(a.events.selectionColor):a.events.selectionColor instanceof n.Color?a.events.selectionColor:new n.Color(`#ff0000`),h=()=>{o.forEach(e=>{let t=e;if(s.has(e)){let i=s.get(e),a=t.material;a instanceof n.Material?a.dispose():Array.isArray(a)&&a.forEach(e=>e.dispose()),t.material=i,s.delete(e);let o=e;for(;o.parent;)o=o.parent;o!==r&&(i instanceof n.Material?i.dispose():i.forEach(e=>e.dispose()))}}),o.clear()},g=e=>{let t=e;if(!(t.material instanceof n.Material))return!1;s.set(e,t.material);let r=t.material.clone();return e instanceof n.Mesh&&`emissive`in r?r.emissive=m.clone():`color`in r&&(r.color=m.clone()),t.material=r,!0},_=()=>{let e=I(r),t=e.isEmpty()?1:e.getSize(new n.Vector3).length();c.params.Points.threshold=t*.01},v=e=>{u.set(e.clientX,e.clientY)},y=t=>{let i=new n.Vector2(t.clientX,t.clientY);if(u.distanceTo(i)>5)return;let s=e.getBoundingClientRect();l.x=(t.clientX-s.left)/s.width*2-1,l.y=-((t.clientY-s.top)/s.height)*2+1,_(),c.setFromCamera(l,d());let p=c.intersectObjects(r.children,!0).filter(e=>f(e.object));if(p.length>0){let e=p[0].object;o.has(e)||(h(),o.add(e),g(e),a.events?.onObjectSelected?.(e),e instanceof n.Mesh&&Object.keys(e.userData).length>0&&a.events?.onMeshMetadataClicked?.(e.userData))}else h(),a.events?.onBackgroundClicked?.({x:l.x,y:l.y})},b=t=>{let o=e.getBoundingClientRect();l.x=(t.clientX-o.left)/o.width*2-1,l.y=-((t.clientY-o.top)/o.height)*2+1,_(),c.setFromCamera(l,d());let s=c.intersectObjects(r.children,!0).filter(e=>f(e.object));if(s.length===0)return;let u=s[0].object;if(a.events?.onMeshDoubleClicked?.(u),!a.events?.enableDoubleClickZoom)return;let p=new n.Box3().setFromObject(u);p.isEmpty()||i.frameBounds(p,!0)},x=e=>{if(a.events?.enableKeyboardControls)switch(e.key.toLowerCase()){case`f`:e.preventDefault(),p();break;case`escape`:e.preventDefault(),h();break;case` `:e.preventDefault(),p()}};return a.events?.enableClickToFocus&&(e.addEventListener(`mousedown`,v),e.addEventListener(`click`,y),e.addEventListener(`dblclick`,b)),a.events?.enableKeyboardControls&&(e.setAttribute(`tabindex`,`0`),e.addEventListener(`keydown`,x)),{dispose:()=>{e.removeEventListener(`mousedown`,v),e.removeEventListener(`click`,y),e.removeEventListener(`dblclick`,b),e.removeEventListener(`keydown`,x),h()},fitToView:p,clearSelection:h}}function et(e,t){let r=new n.AmbientLight(t.lighting.ambientLightColor,t.lighting.ambientLightIntensity);e.add(r);let i=null;if(t.lighting.enableHemisphereLight){i=new n.HemisphereLight(t.lighting.hemisphereSkyColor,t.lighting.hemisphereGroundColor,t.lighting.hemisphereIntensity);let r=t.environment.sceneUp??Q;i.position.copy(r),e.add(i)}if(!t.lighting.enableSunlight)return{ambient:r,hemisphere:i,sun:null};let a=new n.DirectionalLight(t.lighting.sunlightColor??16777215,t.lighting.sunlightIntensity),o=t.lighting.sunlightPosition;return o&&a.position.set(o.x,o.y,o.z),t.render.enableShadows?(a.castShadow=!0,a.shadow.mapSize.width=t.render.shadowMapSize||2048,a.shadow.mapSize.height=t.render.shadowMapSize||2048,a.shadow.bias=-1e-4,a.shadow.normalBias=.02,a.shadow.radius=4,e.add(a),e.add(a.target),{ambient:r,hemisphere:i,sun:a}):(e.add(a),{ambient:r,hemisphere:i,sun:null})}function tt(e,t){if(t.isEmpty())return;let r=t.getCenter(new n.Vector3),i=t.getSize(new n.Vector3).length()*.5*1.2,a=e.shadow.camera;a.left=-i,a.right=i,a.top=i,a.bottom=-i,e.target.position.copy(r),e.target.updateMatrixWorld();let o=e.position.distanceTo(r);a.near=Math.max(i*.01,o-i),a.far=o+i,a.updateProjectionMatrix()}function nt(e,t,r){let i=new n.WebGLRenderer({antialias:t.render.antialias,canvas:e,alpha:!0,powerPreference:`high-performance`,preserveDrawingBuffer:t.render.preserveDrawingBuffer,logarithmicDepthBuffer:!1}),a=e.parentElement,o=a?a.clientWidth:window.innerWidth,s=a?a.clientHeight:window.innerHeight;return a&&(e.style.width=`100%`,e.style.height=`100%`,e.style.display=`block`),i.setSize(o,s,!1),i.setPixelRatio(r),t.render.enableShadows&&(i.shadowMap.enabled=!0,i.shadowMap.type=n.VSMShadowMap),i.toneMapping=t.render.toneMapping,i.toneMappingExposure=t.render.toneMappingExposure??1,i.outputColorSpace=n.SRGBColorSpace,i.sortObjects=!0,i}const rt=function(e,r){let i=He(r||{}),a=i.environment?.sceneUp||Q,o=i.render.pixelRatio??Math.min(window.devicePixelRatio,2),s=Ge(i),c=We(i,e);c.up.copy(a);let l=nt(e,i,o);t.r(l.capabilities.getMaxAnisotropy()),r?.onMaxAnisotropy?.(l.capabilities.getMaxAnisotropy());let u=Xe(c,e,i),d=te({scene:s,perspective:c,controls:u,onActiveCameraChange:()=>{},up:a}),f=()=>d.getActiveCamera(),p=!1;Ze(s,l,i,()=>p);let m=et(s,i),h=m.sun,g=()=>{h&&tt(h,I(s))};i.floor?.enabled&&Qe(s,i);let _=i.floor?.enabled?s.children.find(e=>e.userData.id===`floor`)??null:null,v=i.grid.enabled?De({cellSize:i.grid.cellSize,majorEvery:i.grid.majorEvery,cellColor:i.grid.cellColor,majorColor:i.grid.majorColor,fadeDistance:i.grid.fadeDistance,plane:i.grid.plane}):null;v&&s.add(v.object);let y=()=>{v&&v.fitToContent(I(s))},b=i.gizmo.enabled?Be({camera:c,domElement:e,controller:d}):null,S=i.grid.plane??j(a),w=new n.Vector3(+(S===`x`),+(S===`y`),+(S===`z`)),T=a.clone().normalize(),D=i.camera.dynamicNear?Le({camera:c,scene:s,groundNormals:()=>{let e=[];return v?.object.visible&&e.push(w),i.floor.enabled&&_?.visible&&e.push(T),e}}):null,O=Oe(e.parentElement??e,s),k=i.measure.enabled?Fe({canvas:e,scene:s,getActiveCamera:f,labelLayer:O,options:{snapPixels:i.measure.snapPixels,color:i.measure.color,labelClassName:i.measure.labelClassName,displayUnit:i.measure.displayUnit,format:i.measure.format}}):null,A=i.events.enableEventHandlers===!1?{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}}:$e(e,s,d,i),M=Re();k&&M.register({id:`measure`,tool:k,priority:0}),b&&M.register({id:`gizmo`,tool:b,priority:-100});let N=0,P=0,F=e=>{N=e.clientX,P=e.clientY},ee=e=>Math.hypot(e.clientX-N,e.clientY-P)>5,L=e=>{ee(e)||M.handleClick(e)&&e.stopImmediatePropagation()};e.addEventListener(`mousedown`,F,{capture:!0}),e.addEventListener(`click`,L,{capture:!0});let R=e=>M.handleMove(e);e.addEventListener(`mousemove`,R,{passive:!0});let z=()=>{},ne=e=>{we(e,{color:i.edges.color,darken:i.edges.darken,width:i.edges.width,thresholdAngle:i.edges.thresholdAngle,distanceFade:i.edges.distanceFade,maxTriangles:i.edges.maxTriangles,maxSegments:i.edges.maxSegments}).then(()=>{re(e),z()})},re=e=>{if(i.edges.screenSpaceFallback===!1)return;let t=!1;e.traverse(e=>{e.userData?.edgesSkipped===`triangle-cap`&&(t=!0)}),H.setEdgeFallback(t)},ie=e=>{Te(e),H.setEdgeFallback(!1),z()},B=e.parentElement,V=()=>B?{width:B.clientWidth,height:B.clientHeight}:{width:window.innerWidth,height:window.innerHeight},H=Ye({renderer:l,scene:s,getActiveCamera:f,getCanvasSize:V,pixelRatio:o,config:i,requestRender:()=>z()});H.sync();let U=Ue({scene:s,renderer:l,lights:m,config:i,pipeline:H,requestRender:()=>z()}),{animate:W,dispose:G,invalidate:K}=Ve(l,s,c,f,d,u,V,o,i.events.onFrame,v,b,()=>H.get(),O,D,i.render.onDemand??!0);return z=K,W(),s.up.set(a.x,a.y,a.z),g(),y(),{scene:s,camera:c,controls:u,renderer:l,cameraController:d,grid:v,gizmo:b,measureTool:k,labelLayer:O,tools:M,applyEdges:ne,clearEdges:ie,invalidate:K,setAmbientOcclusion:H.setAmbientOcclusion,setLook:U.setLook,setFillLights:U.setFillLights,setEnvironmentIntensity:U.setEnvironmentIntensity,setToneMappingExposure:U.setToneMappingExposure,setAoIntensity:U.setAoIntensity,getMaterialAppearance:U.getMaterialAppearance,updateShadowBounds:g,updateGridScale:y,dispose:()=>{p||(p=!0,G(),A.dispose(),e.removeEventListener(`mousedown`,F,{capture:!0}),e.removeEventListener(`click`,L,{capture:!0}),e.removeEventListener(`mousemove`,R),k?.dispose(),O?.dispose(),b?.dispose(),v?.dispose(),H.dispose(),d.dispose(),u.dispose(),l.dispose(),l.forceContextLoss(),Ke(s))},fitToView:A.fitToView,clearSelection:A.clearSelection,addUserGeometry:(e,t)=>{e.userData.source=t===void 0?x:C(t),s.add(e),z()},removeUserGeometry:e=>{e.removeFromParent(),t.t(e),z()},clearUserGeometry:e=>{s.children.filter(t=>E(t,e)).forEach(e=>{e.removeFromParent(),t.t(e)}),z()}}};exports.DEFAULT_LOOK=`technical`,exports.ErrorCodes=t.u,exports.LOOKS=v,exports.LOOK_PRESETS=y,exports.SOURCE_COMPUTE=`compute`,exports.SOURCE_USER=x,exports.VisualizationError=t.d,exports.appIdFromSource=w,exports.appSource=C,exports.enableDebugLogging=t.s,exports.getLogger=t.c,exports.initThree=rt,exports.isHostOwned=T,exports.isOwnedBy=E,exports.materialAppearanceForLook=b,exports.pickThreshold=Me,exports.pointerToNdc=ze,exports.setLogger=t.l,exports.snapToVertex=Pe,exports.updateScene=N;
109
108
  //# sourceMappingURL=render.cjs.map