@selvajs/compute 2.6.0 → 3.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/chunk-2KAHGLXE.js +4 -0
  2. package/dist/chunk-2KAHGLXE.js.map +1 -0
  3. package/dist/chunk-2QHLW6ZL.cjs +4 -0
  4. package/dist/{chunk-XA4OMT6Z.cjs.map → chunk-2QHLW6ZL.cjs.map} +1 -1
  5. package/dist/chunk-BF7OQEQG.cjs +2 -0
  6. package/dist/{chunk-XOEJMVK4.cjs.map → chunk-BF7OQEQG.cjs.map} +1 -1
  7. package/dist/chunk-HKU2XHQQ.js +55 -0
  8. package/dist/chunk-HKU2XHQQ.js.map +1 -0
  9. package/dist/chunk-SA67IFJH.cjs +55 -0
  10. package/dist/chunk-SA67IFJH.cjs.map +1 -0
  11. package/dist/chunk-WHB32TTR.js +2 -0
  12. package/dist/chunk-WHB32TTR.js.map +1 -0
  13. package/dist/core.cjs +1 -1
  14. package/dist/core.cjs.map +1 -1
  15. package/dist/core.d.cts +2 -25
  16. package/dist/core.d.ts +2 -25
  17. package/dist/core.js +1 -1
  18. package/dist/grasshopper.cjs +1 -1
  19. package/dist/grasshopper.cjs.map +1 -1
  20. package/dist/grasshopper.d.cts +21 -143
  21. package/dist/grasshopper.d.ts +21 -143
  22. package/dist/grasshopper.js +1 -1
  23. package/dist/{handle-files-UcwvknQ3.d.ts → handle-files-Bu2qmaPj.d.cts} +11 -1
  24. package/dist/{handle-files-UcwvknQ3.d.cts → handle-files-Bu2qmaPj.d.ts} +11 -1
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +3 -3
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.js +1 -1
  30. package/dist/visualization-N3OJSZOY.js +2 -0
  31. package/dist/visualization-UOIWXLDL.cjs +2 -0
  32. package/dist/{visualization-ZFXCE5NW.cjs.map → visualization-UOIWXLDL.cjs.map} +1 -1
  33. package/dist/visualization.cjs +1 -1
  34. package/dist/visualization.d.cts +25 -10
  35. package/dist/visualization.d.ts +25 -10
  36. package/dist/visualization.js +1 -1
  37. package/package.json +1 -3
  38. package/dist/chunk-GY2WLD42.js +0 -4
  39. package/dist/chunk-GY2WLD42.js.map +0 -1
  40. package/dist/chunk-UH3HH7PS.js +0 -55
  41. package/dist/chunk-UH3HH7PS.js.map +0 -1
  42. package/dist/chunk-XA4OMT6Z.cjs +0 -4
  43. package/dist/chunk-XOEJMVK4.cjs +0 -2
  44. package/dist/chunk-XXA7NEQF.cjs +0 -55
  45. package/dist/chunk-XXA7NEQF.cjs.map +0 -1
  46. package/dist/chunk-Y7V63BG7.js +0 -2
  47. package/dist/chunk-Y7V63BG7.js.map +0 -1
  48. package/dist/visualization-RICQHNLJ.js +0 -2
  49. package/dist/visualization-ZFXCE5NW.cjs +0 -2
  50. /package/dist/{visualization-RICQHNLJ.js.map → visualization-N3OJSZOY.js.map} +0 -0
@@ -1,55 +0,0 @@
1
- import{a as Le,c as ee,d as te,e as M,o as ce}from"./chunk-GY2WLD42.js";import*as V from"three";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 An(e,r,t,n,o){if(Oe(e),r.length===0)return;r.forEach(u=>{e.add(u)});let a=Y(r),i=a.getCenter(new V.Vector3),s=a.getSize(new V.Vector3),l=Math.max(s.x,s.y,s.z);if(l/Math.min(s.x||1,s.y||1,s.z||1)>_.SCALE_RATIO_THRESHOLD||l>_.HUGE_THRESHOLD?(t.near=l*_.NEAR_PLANE_FACTOR.TINY,t.far=l*_.FAR_PLANE_FACTOR.HUGE):l>_.LARGE_THRESHOLD?(t.near=l*_.NEAR_PLANE_FACTOR.SMALL,t.far=l*_.FAR_PLANE_FACTOR.LARGE):(t.near=Math.max(.01,l*_.NEAR_PLANE_FACTOR.NORMAL),t.far=Math.max(2e3,l*_.FAR_PLANE_FACTOR.NORMAL)),t.updateProjectionMatrix(),o)n.minDistance=t.near*2,n.maxDistance=t.far*.9;else{let u=l*_.INITIAL_DISTANCE_MULTIPLIER;t.position.set(i.x+u*.8,i.y+u,i.z+u*1.2),n.target.copy(i),n.minDistance=t.near*2,n.maxDistance=t.far*.9,n.update()}}function ue(e){if(!e||typeof e!="string")return M().warn(`Invalid color input: ${e}, using white`),new V.Color(16777215);let r=e.trim();if(/^#?[0-9A-Fa-f]{6}$/.test(r))try{let t=r.startsWith("#")?r:`#${r}`;return new V.Color(t)}catch{return M().warn(`Invalid hex color: ${e}, using white`),new V.Color(16777215)}if(r.includes(",")){let t=r.split(",").map(n=>parseInt(n.trim(),10));if(t.length===3&&t.every(n=>!isNaN(n)&&n>=0&&n<=255))return new V.Color(t[0]/255,t[1]/255,t[2]/255)}try{return new V.Color(r.toLowerCase())}catch{return M().warn(`Invalid color string: ${e}, using white`),new V.Color(16777215)}}function de(e,r,t="z"){e.forEach(n=>{n.position[t]-=r})}function Y(e){let r=new V.Box3;return e.length===0||e.forEach(t=>{t.updateMatrixWorld(!0);let n=new V.Box3().setFromObject(t);r.union(n)}),r}var Pe=new Set(["floor","grid","label-layer"]);function Oe(e){[...e.children].forEach(t=>{Pe.has(t.userData.id)||(t.traverse(n=>{let o=n;if(!o.geometry&&!o.material)return;o.geometry?.dispose();let a=o.material;if(!a)return;(Array.isArray(a)?a:[a]).forEach(s=>{for(let l of Object.values(s))l instanceof V.Texture&&l.dispose();s.dispose()})}),t.removeFromParent())})}import*as z from"three";function Ie(e){let r=e.clone().normalize(),t=new z.Vector3(0,0,1),n=new z.Vector3(0,1,0),o=Math.abs(r.dot(t))>.9?n:t,a=new z.Vector3().crossVectors(r,o).normalize(),i=new z.Vector3().crossVectors(a,r).normalize();return{top:r.clone(),bottom:r.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(r.clone()).normalize()}}function me(e){let{scene:r,perspective:t,controls:n,onActiveCameraChange:o}=e,a=(e.up??t.up).clone().normalize(),i=Ie(a),s=new z.OrthographicCamera(-1,1,1,-1,t.near,t.far);s.up.copy(a);let l="perspective",c=t.aspect,u=()=>l==="perspective"?t:s,d=()=>{let h=t.position.distanceTo(n.target)*Math.tan(t.fov*Math.PI/360),T=h*c;s.left=-T,s.right=T,s.top=h,s.bottom=-h,s.near=t.near,s.far=t.far,s.updateProjectionMatrix()},m=b=>{b!==l&&(b==="orthographic"?(s.position.copy(t.position),s.up.copy(t.up),s.lookAt(n.target),d()):t.position.copy(s.position),l=b,n.object=u(),n.update(),o(u()))},E=(b,h=!0)=>{let T=ze(r),v=T.isEmpty()?n.target.clone():T.getCenter(new z.Vector3),P=T.isEmpty()?new z.Vector3(1,1,1):T.getSize(new z.Vector3),y=Math.max(P.x,P.y,P.z)||1,w=t.fov*(Math.PI/180),C=y/(2*Math.tan(w/2))*1.5,O=Fe(b,a),g=v.clone().add(O.clone().multiplyScalar(C)),R=u();h?ke(R,n,g,v,()=>{l==="orthographic"&&d()}):(R.position.copy(g),n.target.copy(v),l==="orthographic"&&d(),n.update())};return{getActiveCamera:u,getProjection:()=>l,setProjection:m,toggleProjection:()=>(m(l==="perspective"?"orthographic":"perspective"),l),setView:(b,h=!0)=>{E(i[b],h)},setViewDirection:E,setRotateEnabled:b=>{n.enableRotate=b},isRotateEnabled:()=>n.enableRotate,updateAspect:(b,h)=>{c=h===0?c:b/h,l==="orthographic"&&d()}}}var Ve=new Set(["grid","floor","label-layer","measure"]);function Be(e){let r=e;for(;r;){if(typeof r.userData.id=="string"&&Ve.has(r.userData.id))return!0;r=r.parent}return!1}function ze(e){let r=[];return e.traverse(t=>{let n=t;t.visible&&!Be(t)&&n.geometry&&r.push(t)}),Y(r)}function Fe(e,r){let t=r.clone().normalize(),n=e.clone().normalize();if(Math.abs(n.dot(t))<.9999)return e;let o=Math.abs(t.dot(new z.Vector3(0,0,1)))>.9?new z.Vector3(0,1,0):new z.Vector3(0,0,1),a=new z.Vector3().crossVectors(t,o).normalize(),i=.5*Math.PI/180;return n.multiplyScalar(Math.cos(i)).add(a.multiplyScalar(Math.sin(i))).normalize()}var je=e=>1-Math.pow(1-e,3);function ke(e,r,t,n,o,a=250){let i=e.position.clone(),s=r.target.clone(),l=performance.now(),c=()=>{let u=je(Math.min((performance.now()-l)/a,1));e.position.lerpVectors(i,t,u),r.target.lerpVectors(s,n,u),o(),r.update(),u<1&&requestAnimationFrame(c)};requestAnimationFrame(c)}import*as I from"three";var _e=`
2
- varying vec3 vWorldPos;
3
- void main() {
4
- vec4 world = modelMatrix * vec4(position, 1.0);
5
- vWorldPos = world.xyz;
6
- gl_Position = projectionMatrix * viewMatrix * world;
7
- }
8
- `,Ue=`
9
- precision highp float;
10
- varying vec3 vWorldPos;
11
-
12
- uniform vec2 uAxes; // indices (0=x,1=y,2=z) of the two in-plane world axes
13
- uniform float uCell;
14
- uniform float uMajor;
15
- uniform vec3 uCellColor;
16
- uniform vec3 uMajorColor;
17
- uniform vec3 uCenter; // fade center (camera position), projected onto plane
18
- uniform float uFade;
19
-
20
- // Antialiased grid line intensity for a given spacing, using screen-space derivatives so lines
21
- // stay ~1px regardless of zoom (the standard "pristine grid" technique).
22
- float gridLine(vec2 coord, float spacing) {
23
- vec2 c = coord / spacing;
24
- vec2 d = fwidth(c);
25
- vec2 g = abs(fract(c - 0.5) - 0.5) / max(d, 1e-6);
26
- float line = min(g.x, g.y);
27
- return 1.0 - clamp(line, 0.0, 1.0);
28
- }
29
-
30
- // Index a vec3 by a float axis id (0/1/2) without dynamic indexing (WebGL1-safe).
31
- float axis(vec3 v, float i) {
32
- return i < 0.5 ? v.x : (i < 1.5 ? v.y : v.z);
33
- }
34
-
35
- void main() {
36
- // Pick the two in-plane world coordinates.
37
- vec2 coord = vec2(axis(vWorldPos, uAxes.x), axis(vWorldPos, uAxes.y));
38
-
39
- float minor = gridLine(coord, uCell);
40
- float major = gridLine(coord, uCell * uMajor);
41
-
42
- vec3 color = mix(uCellColor, uMajorColor, major);
43
- float alpha = max(minor, major);
44
-
45
- // Radial fade from the camera-projected center.
46
- float dist = distance(vWorldPos, uCenter);
47
- float fade = 1.0 - clamp(dist / uFade, 0.0, 1.0);
48
- alpha *= fade * fade;
49
-
50
- if (alpha < 0.001) discard;
51
- gl_FragColor = vec4(color, alpha);
52
- }
53
- `;function Ee(e={}){let{cellSize:r=1,majorEvery:t=10,cellColor:n=8947848,majorColor:o=4473924,fadeDistance:a=100,plane:i="y"}=e,s=i==="y"?new I.Vector2(0,2):i==="z"?new I.Vector2(0,1):new I.Vector2(1,2),l=a*2.5,c=new I.PlaneGeometry(l,l);i==="y"?c.rotateX(-Math.PI/2):i==="x"&&c.rotateY(Math.PI/2);let u=new I.ShaderMaterial({vertexShader:_e,fragmentShader:Ue,transparent:!0,depthWrite:!1,side:I.DoubleSide,uniforms:{uAxes:{value:s},uCell:{value:r},uMajor:{value:t},uCellColor:{value:new I.Color(n)},uMajorColor:{value:new I.Color(o)},uCenter:{value:new I.Vector3},uFade:{value:a}}}),d=new I.Mesh(c,u);d.name="grid",d.userData.id="grid",d.renderOrder=-1;let m=new I.Vector3;return{object:d,update:E=>{i==="y"?(d.position.set(E.x,0,E.z),m.set(E.x,0,E.z)):i==="z"?(d.position.set(E.x,E.y,0),m.set(E.x,E.y,0)):(d.position.set(0,E.y,E.z),m.set(0,E.y,E.z)),u.uniforms.uCenter.value.copy(m)},setVisible:E=>{d.visible=E},dispose:()=>{c.dispose(),u.dispose()}}}import*as F from"three";import{ViewHelper as Ge}from"three/addons/helpers/ViewHelper.js";function pe(e){let{camera:r,domElement:t,controller:n}=e,o=new Ge(r,t);o.setLabels("X","Y","Z");let a=!0,i=128,s=new F.Raycaster,l=new F.OrthographicCamera(-2,2,2,-2,0,4);l.position.set(0,0,2);let c={posX:new F.Vector3(1,0,0),negX:new F.Vector3(-1,0,0),posY:new F.Vector3(0,1,0),negY:new F.Vector3(0,-1,0),posZ:new F.Vector3(0,0,1),negZ:new F.Vector3(0,0,-1)},u=m=>{let E=t.getBoundingClientRect(),f=E.left+t.offsetWidth-i-o.location.right,x=E.top+t.offsetHeight-i-o.location.bottom,S=new F.Vector2((m.clientX-f)/i*2-1,-((m.clientY-x)/i)*2+1);if(Math.abs(S.x)>1||Math.abs(S.y)>1)return null;o.quaternion.copy(r.quaternion).invert(),o.updateMatrixWorld(),s.setFromCamera(S,l);let b=s.intersectObjects(o.children,!1);for(let h of b){let T=h.object.userData?.type;if(typeof T=="string"&&T in c)return T}return null};return{render:m=>{if(!a)return;let E=m.autoClear;m.autoClear=!1,o.render(m),m.autoClear=E},update:m=>{o.animating&&o.update(m)},handleClick:m=>{if(!a)return!1;let E=u(m);return E?(n.getProjection()==="orthographic"&&n.setProjection("perspective"),n.setViewDirection(c[E],!1),!0):!1},get isAnimating(){return o.animating},setVisible:m=>{a=m},isVisible:()=>a,dispose:()=>o.dispose()}}import*as $ from"three";import{LineSegmentsGeometry as Ne}from"three/addons/lines/LineSegmentsGeometry.js";import{LineSegments2 as fe}from"three/addons/lines/LineSegments2.js";import{LineMaterial as We}from"three/addons/lines/LineMaterial.js";var X="edge-overlay",$e=2236962,Ye=1.5,Xe=30;function he(e,r={}){let t=new $.Color(r.color??$e),n=r.width??Ye,o=r.thresholdAngle??Xe,a=[];return e.traverse(i=>{if(!(i instanceof $.Mesh)||i.userData.id==="floor"||i.userData.id==="grid"||i.userData.kind===X||i.children.some(l=>l.userData?.kind===X)||!i.geometry)return;let s=qe(i.geometry,t,n,o);i.add(s),a.push(s)}),a}function qe(e,r,t,n){let o=new $.EdgesGeometry(e,n),a=new Ne;a.setPositions(Array.from(o.attributes.position.array)),o.dispose();let i=new We({color:r});i.linewidth=t,i.polygonOffset=!0,i.polygonOffsetFactor=-1,i.polygonOffsetUnits=-1;let s=new fe(a,i);return s.userData.kind=X,s.raycast=()=>{},s}function Ze(e){return e.userData?.kind===X}function jn(e){let r=[];e.traverse(t=>{t instanceof fe&&Ze(t)&&r.push(t)});for(let t of r)t.geometry.dispose(),t.material.dispose(),t.removeFromParent();return r.length}import{EffectComposer as Je}from"three/addons/postprocessing/EffectComposer.js";import{RenderPass as Ke}from"three/addons/postprocessing/RenderPass.js";import{GTAOPass as Qe}from"three/addons/postprocessing/GTAOPass.js";import{OutputPass as et}from"three/addons/postprocessing/OutputPass.js";function ge(e,r,t,n,o,a){let i=new Je(e),s=new Ke(r,t);i.addPass(s);let l=new Qe(r,t,n,o);l.blendIntensity=a.aoIntensity??1,l.updateGtaoMaterial({screenSpaceRadius:!0}),i.addPass(l);let c=new et;return i.addPass(c),e.toneMapping=a.toneMapping,e.toneMappingExposure=a.toneMappingExposure,i.setSize(n,o),{render:u=>i.render(u),setSize:(u,d,m)=>{i.setPixelRatio(m),i.setSize(u,d),l.setSize(u,d)},setCamera:u=>{s.camera=u,l.camera=u},dispose:()=>i.dispose()}}import*as be from"three";import{CSS2DRenderer as tt,CSS2DObject as nt}from"three/addons/renderers/CSS2DRenderer.js";function ye(e,r){let t=new tt,n=t.domElement;n.style.position="absolute",n.style.top="0",n.style.left="0",n.style.width="100%",n.style.height="100%",n.style.overflow="hidden",n.style.pointerEvents="none",n.style.zIndex="30",getComputedStyle(e).position==="static"&&(e.style.position="relative"),e.appendChild(n);let o={width:e.clientWidth||1,height:e.clientHeight||1};t.setSize(o.width,o.height);let a=new be.Group;a.name="label-layer",a.userData.id="label-layer",r.add(a);let i=new Set;return{addLabel:(l,c,u)=>{let d=document.createElement("div");d.textContent=l,u?d.className=u:Object.assign(d.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"}),d.style.pointerEvents="none";let m=new nt(d);return m.position.copy(c),a.add(m),i.add(m),{object:m,setPosition:E=>m.position.copy(E),setText:E=>{d.textContent=E},remove:()=>{m.removeFromParent(),d.remove(),i.delete(m)}}},render:(l,c)=>t.render(l,c),setSize:(l,c)=>t.setSize(l,c),dispose:()=>{i.forEach(l=>{l.removeFromParent(),l.element.remove()}),i.clear(),a.removeFromParent(),n.remove()}}}import*as A from"three";import{Line2 as rt}from"three/addons/lines/Line2.js";import{LineGeometry as ot}from"three/addons/lines/LineGeometry.js";import{LineMaterial as at}from"three/addons/lines/LineMaterial.js";var it=12,st=16763904,Re=.015,q=e=>`${e.toPrecision(3)} m`,lt=(e,r)=>`${q(e)}
54
- \u0394x ${q(r.x)} \u0394y ${q(r.y)} \u0394z ${q(r.z)}`;function ct(e){let r=e.object;return r instanceof A.Mesh?e.face?[e.face.a,e.face.b,e.face.c]:null:r instanceof A.Points?e.index!=null?[e.index]:null:r instanceof A.Line&&e.index!=null?[e.index,e.index+1]:null}function ut(e,r,t,n){let o=e.point.clone(),a=e.object,i=ct(e);if(!i||!a.geometry)return o;let s=a.geometry.attributes.position;if(!s)return o;let l=m=>{let E=m.clone().project(r);return new A.Vector2((E.x+1)/2*t.width,(1-E.y)/2*t.height)},c=l(o),u=o,d=n;for(let m of i){if(m>=s.count)continue;let f=new A.Vector3().fromBufferAttribute(s,m).applyMatrix4(a.matrixWorld),x=l(f).distanceTo(c);x<d&&(d=x,u=f)}return u}function Te(e){let{canvas:r,scene:t,getActiveCamera:n,labelLayer:o,options:a={}}=e,i=a.snapPixels??it,s=new A.Color(a.color??st),l=a.format??lt,c=new A.Raycaster,u=new A.Vector2,d=!1,m=[],E=[],f=null,x=null,S=new A.PointsMaterial({color:s,size:8,sizeAttenuation:!1,depthTest:!1}),b=new A.PointsMaterial({color:s,size:11,sizeAttenuation:!1,depthTest:!1,transparent:!0,opacity:.5}),h=null,T=g=>{if(!g){h&&(h.visible=!1);return}if(!h){let R=new A.BufferGeometry;R.setAttribute("position",new A.Float32BufferAttribute([0,0,0],3)),h=new A.Points(R,b),h.renderOrder=1e3,h.userData.id="measure",h.raycast=()=>{},t.add(h)}h.position.copy(g),h.visible=!0},v=g=>{let R=new A.BufferGeometry;R.setAttribute("position",new A.Float32BufferAttribute([g.x,g.y,g.z],3));let H=new A.Points(R,S);return H.renderOrder=999,H.userData.id="measure",H.raycast=()=>{},t.add(H),H},P=()=>{m.length=0,E.forEach(g=>{g.geometry.dispose(),g.removeFromParent()}),E.length=0,f&&(f.geometry.dispose(),f.material.dispose(),f.removeFromParent(),f=null),x?.remove(),x=null},y=()=>{if(m.length!==2)return;let[g,R]=m,H=new ot;H.setPositions([g.x,g.y,g.z,R.x,R.y,R.z]);let k=new at({color:s});k.linewidth=2,k.depthTest=!1,f=new rt(H,k),f.renderOrder=998,f.userData.id="measure",f.raycast=()=>{},t.add(f);let N=g.clone().add(R).multiplyScalar(.5),W=new A.Vector3(Math.abs(R.x-g.x),Math.abs(R.y-g.y),Math.abs(R.z-g.z));x=o.addLabel(l(g.distanceTo(R),W),N,a.labelClassName)},w=g=>{let R=r.getBoundingClientRect();u.x=(g.clientX-R.left)/R.width*2-1,u.y=-((g.clientY-R.top)/R.height)*2+1;let H=n();c.setFromCamera(u,H);let k=H.position.length();c.params.Line={threshold:k*Re},c.params.Points={threshold:k*Re};let N=c.intersectObjects(t.children,!0).filter(W=>W.object.userData.id!=="measure"&&W.object.userData.id!=="grid");return N.length===0?null:ut(N[0],H,{width:R.width,height:R.height},i)};return{setEnabled:g=>{d=g,g||(P(),T(null))},isEnabled:()=>d,handleClick:g=>{if(!d)return!1;m.length===2&&P();let R=w(g);return R===null||(m.push(R),E.push(v(R)),m.length===2&&y()),!0},handleMove:g=>{d&&T(w(g))},clear:P,dispose:()=>{P(),h&&(h.geometry.dispose(),h.removeFromParent(),h=null),S.dispose(),b.dispose()}}}import*as p from"three";import{OrbitControls as dt}from"three/addons/controls/OrbitControls.js";import{HDRLoader as mt}from"three/addons/loaders/HDRLoader.js";var Z=new p.Vector3(0,0,1);function Et(e){let r=Math.abs(e.x),t=Math.abs(e.y),n=Math.abs(e.z);return n>=r&&n>=t?"z":t>=r&&t>=n?"y":"x"}var lr=function(e,r){let t=pt(r||{}),n=t.environment?.sceneUp||Z,o=bt(t),a=vt(t,e);a.up.copy(n);let i=Mt(e,t),s=xt(a,e,t),l=me({scene:o,perspective:a,controls:s,onActiveCameraChange:()=>{},up:n}),c=()=>l.getActiveCamera();Tt(o,t);let u=wt(o,t),d=()=>{u&&gt(u,ne(o))};t.floor?.enabled&&Ht(o,t);let m=t.grid.enabled?Ee({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;m&&o.add(m.object);let E=t.gizmo.enabled?pe({camera:a,domElement:e,controller:l}):null,f=e.parentElement??e,x=t.measure.enabled?ye(f,o):null,S=t.measure.enabled&&x?Te({canvas:e,scene:o,getActiveCamera:c,labelLayer:x,options:{snapPixels:t.measure.snapPixels,color:t.measure.color,labelClassName:t.measure.labelClassName,format:t.measure.format}}):null,b=t.events.enableEventHandlers!==!1?Ct(e,o,c,a,s,t):{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}},h=5,T=0,v=0,P=D=>{T=D.clientX,v=D.clientY},y=D=>Math.hypot(D.clientX-T,D.clientY-v)>h,w=D=>{if(!y(D)){if(S?.handleClick(D)){D.stopImmediatePropagation();return}E?.handleClick(D)&&D.stopImmediatePropagation()}};(E||S)&&(e.addEventListener("mousedown",P,{capture:!0}),e.addEventListener("click",w,{capture:!0}));let C=D=>S?.handleMove(D);S&&e.addEventListener("mousemove",C,{passive:!0});let O=D=>{he(D,{color:t.edges.color,width:t.edges.width,thresholdAngle:t.edges.thresholdAngle})},g=e.parentElement,R=()=>g?{width:g.clientWidth,height:g.clientHeight}:{width:window.innerWidth,height:window.innerHeight},H=null,k=()=>{let{width:D,height:G}=R(),Q=Math.min(window.devicePixelRatio,2),le=ge(i,o,c(),Math.max(1,D),Math.max(1,G),{toneMapping:t.render.toneMapping??p.NeutralToneMapping,toneMappingExposure:t.render.toneMappingExposure??1,aoIntensity:t.render.aoIntensity});return le.setSize(Math.max(1,D),Math.max(1,G),Q),le},N=D=>{D&&!H?H=k():!D&&H&&(H.dispose(),H=null)};t.render.ambientOcclusion&&(H=k());let{animate:W,dispose:K}=Rt(i,o,a,c,l,s,R,t.events.onFrame,m,E,()=>H,x);return W(),o.up.set(n.x,n.y,n.z),d(),{scene:o,camera:a,controls:s,renderer:i,cameraController:l,grid:m,gizmo:E,measureTool:S,applyEdges:O,setAmbientOcclusion:N,updateShadowBounds:d,dispose:()=>{K(),b.dispose(),(E||S)&&(e.removeEventListener("mousedown",P,{capture:!0}),e.removeEventListener("click",w,{capture:!0})),S&&e.removeEventListener("mousemove",C),S?.dispose(),x?.dispose(),E?.dispose(),m?.dispose(),H?.dispose(),s.dispose(),i.dispose(),o.traverse(D=>{let G=D;!G.geometry&&!G.material||(G.geometry?.dispose(),Array.isArray(G.material)?G.material.forEach(Q=>Q.dispose()):G.material?.dispose())})},fitToView:b.fitToView,clearSelection:b.clearSelection}};function pt(e){let r=e.sceneScale||"m",n={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}}[r];return{sceneScale:r,camera:{position:e.camera?.position||new p.Vector3(-n.cameraDistance,-n.cameraDistance,n.cameraDistance),fov:e.camera?.fov||20,near:e.camera?.near||n.near,far:e.camera?.far||n.far,target:e.camera?.target||new p.Vector3(0,0,0)},lighting:{enableSunlight:e.lighting?.enableSunlight??!0,sunlightIntensity:e.lighting?.sunlightIntensity||1,sunlightPosition:e.lighting?.sunlightPosition||new p.Vector3(n.lightDistance,n.lightDistance,n.lightHeight),ambientLightColor:e.lighting?.ambientLightColor||new p.Color(4210752),ambientLightIntensity:e.lighting?.ambientLightIntensity||1,sunlightColor:e.lighting?.sunlightColor||16777215},environment:{hdrPath:e.environment?.hdrPath||"/baseHDR.hdr",backgroundColor:e.environment?.backgroundColor||new p.Color(15790320),enableEnvironmentLighting:e.environment?.enableEnvironmentLighting??!0,sceneUp:e.environment?.sceneUp||Z,showEnvironment:e.environment?.showEnvironment??!1},floor:{enabled:e.floor?.enabled??!1,size:e.floor?.size||n.floorSize,color:e.floor?.color||new p.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||p.NeutralToneMapping,toneMappingExposure:e.render?.toneMappingExposure||1,preserveDrawingBuffer:e.render?.preserveDrawingBuffer??!1,ambientOcclusion:e.render?.ambientOcclusion??!1,aoIntensity:e.render?.aoIntensity??1},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||n.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??Et(e.environment?.sceneUp??Z)},gizmo:{enabled:e.gizmo?.enabled??!1},edges:{enabled:e.edges?.enabled??!1,color:e.edges?.color??2236962,width:e.edges?.width??1.5,thresholdAngle:e.edges?.thresholdAngle??30},measure:{enabled:e.measure?.enabled??!1,snapPixels:e.measure?.snapPixels,color:e.measure?.color,labelClassName:e.measure?.labelClassName,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}}}var ft=new Set(["grid","floor","label-layer","measure"]);function ht(e){let r=e;for(;r;){if(typeof r.userData.id=="string"&&ft.has(r.userData.id))return!0;r=r.parent}return!1}function ne(e){let r=new p.Box3;return e.traverse(t=>{let n=t;t.visible&&!ht(t)&&n.geometry&&r.expandByObject(t)}),r}function gt(e,r){if(r.isEmpty())return;let t=r.getCenter(new p.Vector3),n=r.getSize(new p.Vector3).length()*.5*1.2,o=e.shadow.camera;o.left=-n,o.right=n,o.top=n,o.bottom=-n,e.target.position.copy(t),e.target.updateMatrixWorld();let a=e.position.distanceTo(t);o.near=Math.max(n*.01,a-n),o.far=a+n,o.updateProjectionMatrix()}function bt(e){let r=new p.Scene,t=typeof e.environment.backgroundColor=="string"?new p.Color(e.environment.backgroundColor):e.environment.backgroundColor;return r.background=t||null,r}function yt(e,r,t,n,o=200){let a=e.position.clone(),i=r.target.clone(),s=performance.now(),l=u=>1-Math.pow(1-u,3),c=()=>{let u=performance.now()-s,d=l(Math.min(u/o,1));e.position.lerpVectors(a,t,d),r.target.lerpVectors(i,n,d),r.update(),d<1&&requestAnimationFrame(c)};requestAnimationFrame(c)}function Rt(e,r,t,n,o,a,i,s,l,c,u,d){let m=null,E=performance.now(),f=()=>{let{width:b,height:h}=i();if(b===0||h===0)return;let T=Math.min(window.devicePixelRatio,2),v=Math.round(b*T),P=Math.round(h*T);(e.domElement.width!==v||e.domElement.height!==P)&&(e.setPixelRatio(T),e.setSize(b,h,!1),t.aspect=b/h,t.updateProjectionMatrix(),o.updateAspect(b,h),u?.()?.setSize(b,h,T),d?.setSize(b,h))},x=function(){m=requestAnimationFrame(x);let b=performance.now(),h=(b-E)/1e3;E=b,f(),(a.enableDamping||a.autoRotate)&&a.update(),l&&l.update(n().position),c&&c.update(h),s?.(h);let T=n(),v=u?.();v?(v.setCamera(T),v.render(h)):e.render(r,T),d&&d.render(r,T),c&&c.render(e)};return{animate:x,dispose:()=>{m!==null&&(cancelAnimationFrame(m),m=null)}}}function Tt(e,r){r.environment.enableEnvironmentLighting?new mt().load(r.environment.hdrPath||"/baseHDR.hdr",function(t){if(!t?.image){M().warn("HDR loaded without image data; skipping environment map."),r.events.onReady?.();return}t.mapping=p.EquirectangularReflectionMapping,e.environment=t,r.environment.showEnvironment&&(e.background=t),r.events.onReady?.()},void 0,function(t){M().warn("HDR texture could not be loaded, falling back to basic lighting:",t),r.events.onReady?.()}):r.events.onReady?.()}function wt(e,r){let t=new p.AmbientLight(r.lighting.ambientLightColor,r.lighting.ambientLightIntensity);if(e.add(t),!r.lighting.enableSunlight)return null;let n=new p.DirectionalLight(r.lighting.sunlightColor??16777215,r.lighting.sunlightIntensity),o=r.lighting.sunlightPosition;return o&&n.position.set(o.x,o.y,o.z),r.render.enableShadows?(n.castShadow=!0,n.shadow.mapSize.width=r.render.shadowMapSize||2048,n.shadow.mapSize.height=r.render.shadowMapSize||2048,n.shadow.bias=-1e-4,n.shadow.normalBias=.02,n.shadow.radius=4,e.add(n),e.add(n.target),n):(e.add(n),null)}function Ht(e,r){let t=r.floor.size,n=new p.PlaneGeometry(t,t),o=typeof r.floor.color=="string"?new p.Color(r.floor.color):r.floor.color,a=new p.MeshStandardMaterial({color:o,roughness:r.floor.roughness,metalness:r.floor.metalness,side:p.DoubleSide}),i=new p.Mesh(n,a);i.userData.id="floor",i.name="floor";let s=(r.environment?.sceneUp||Z).clone().normalize();i.quaternion.setFromUnitVectors(new p.Vector3(0,0,1),s),i.position.set(0,0,0),r.floor.receiveShadow&&r.render.enableShadows&&(i.receiveShadow=!0),e.add(i)}function vt(e,r){let t=r.parentElement,n=t?t.clientWidth:window.innerWidth,o=t?t.clientHeight:window.innerHeight,a=new p.PerspectiveCamera(e.camera.fov,n/o,e.camera.near,e.camera.far),i=e.camera.position;return i&&a.position.set(i.x,i.y,i.z),a}function Mt(e,r){let t=new p.WebGLRenderer({antialias:r.render.antialias,canvas:e,alpha:!0,powerPreference:"high-performance",preserveDrawingBuffer:r.render.preserveDrawingBuffer,logarithmicDepthBuffer:!0}),n=e.parentElement,o=n?n.clientWidth:window.innerWidth,a=n?n.clientHeight:window.innerHeight;return n&&(e.style.width="100%",e.style.height="100%",e.style.display="block"),t.setSize(o,a,!1),t.setPixelRatio(r.render.pixelRatio||Math.min(window.devicePixelRatio,2)),r.render.enableShadows&&(t.shadowMap.enabled=!0,t.shadowMap.type=p.VSMShadowMap),t.toneMapping=r.render.toneMapping,t.toneMappingExposure=r.render.toneMappingExposure||1,t.outputColorSpace=p.SRGBColorSpace,t.sortObjects=!0,t}function Ct(e,r,t,n,o,a){let i=new Set,s=new Map,l=new p.Raycaster,c=new p.Vector2,u=new p.Vector2,d=y=>{let w=y;for(;w;){if(!w.visible)return!1;w=w.parent}return!0},m=()=>{let y=ne(r);if(y.isEmpty()){M().warn("No objects to fit to view");return}let w=y.getCenter(new p.Vector3),C=y.getSize(new p.Vector3),O=Math.max(C.x,C.y,C.z),g=n.fov*(Math.PI/180),R=O/(2*Math.tan(g/2));R*=1.5;let H=n.position.clone().sub(o.target);H.lengthSq()<1e-12&&H.set(.8,1,1.2),H.normalize(),n.position.copy(w.clone().add(H.multiplyScalar(R))),o.target.copy(w),o.update()},E=typeof a.events.selectionColor=="string"?new p.Color(a.events.selectionColor):a.events.selectionColor instanceof p.Color?a.events.selectionColor:new p.Color("#ff0000"),f=()=>{i.forEach(y=>{let w=y;if(s.has(y)){let C=s.get(y),O=w.material;O instanceof p.Material?O.dispose():Array.isArray(O)&&O.forEach(g=>g.dispose()),w.material=C,s.delete(y)}}),i.clear()},x=y=>{let w=y;if(!(w.material instanceof p.Material))return!1;s.set(y,w.material);let C=w.material.clone();return y instanceof p.Mesh&&"emissive"in C?C.emissive=E.clone():"color"in C&&(C.color=E.clone()),w.material=C,!0},S=()=>{let y=ne(r),w=y.isEmpty()?1:y.getSize(new p.Vector3).length();l.params.Points.threshold=w*.01},b=y=>{u.set(y.clientX,y.clientY)},h=y=>{let w=new p.Vector2(y.clientX,y.clientY);if(u.distanceTo(w)>5)return;let C=e.getBoundingClientRect();c.x=(y.clientX-C.left)/C.width*2-1,c.y=-((y.clientY-C.top)/C.height)*2+1,S(),l.setFromCamera(c,t());let O=l.intersectObjects(r.children,!0).filter(g=>d(g.object));if(O.length>0){let g=O[0].object;i.has(g)||(f(),i.add(g),x(g),a.events?.onObjectSelected?.(g),g instanceof p.Mesh&&Object.keys(g.userData).length>0&&a.events?.onMeshMetadataClicked?.(g.userData))}else f(),a.events?.onBackgroundClicked?.({x:c.x,y:c.y})},T=y=>{let w=e.getBoundingClientRect();c.x=(y.clientX-w.left)/w.width*2-1,c.y=-((y.clientY-w.top)/w.height)*2+1,S(),l.setFromCamera(c,t());let C=l.intersectObjects(r.children,!0).filter(D=>d(D.object));if(C.length===0)return;let O=C[0].object;if(a.events?.onMeshDoubleClicked?.(O),!a.events?.enableDoubleClickZoom)return;let g=new p.Box3().setFromObject(O);if(g.isEmpty())return;let R=g.getCenter(new p.Vector3),H=g.getSize(new p.Vector3),k=Math.max(H.x,H.y,H.z),N=n.fov*(Math.PI/180),W=k/(2*Math.tan(N/2))*1.5,K=n.position.clone().sub(o.target).normalize(),se=R.clone().add(K.multiplyScalar(W));yt(n,o,se,R)},v=y=>{if(a.events?.enableKeyboardControls)switch(y.key.toLowerCase()){case"f":y.preventDefault(),m();break;case"escape":y.preventDefault(),f();break;case" ":y.preventDefault(),m();break}};return a.events?.enableClickToFocus&&(e.addEventListener("mousedown",b),e.addEventListener("click",h),e.addEventListener("dblclick",T)),a.events?.enableKeyboardControls&&(e.setAttribute("tabindex","0"),e.addEventListener("keydown",v)),{dispose:()=>{e.removeEventListener("mousedown",b),e.removeEventListener("click",h),e.removeEventListener("dblclick",T),e.removeEventListener("keydown",v),f()},fitToView:m,clearSelection:f}}function xt(e,r,t){let n=new dt(e,r),o=t.camera.target;return o&&n.target.set(o.x,o.y,o.z),n.enableDamping=t.controls.enableDamping||!1,n.dampingFactor=t.controls.dampingFactor||.05,n.autoRotate=t.controls.autoRotate||!1,n.autoRotateSpeed=t.controls.autoRotateSpeed||.5,n.enableZoom=t.controls.enableZoom??!0,n.enablePan=t.controls.enablePan??!0,n.minDistance=t.controls.minDistance||.001,n.maxDistance=t.controls.maxDistance||1/0,n.screenSpacePanning=!1,n.maxPolarAngle=Math.PI,n.update(),n}var Vt={};Le(Vt,{CONCRETE_MATERIAL:()=>Dt,EMISSIVE_MATERIAL:()=>St,GLASS_MATERIAL:()=>Pt,METAL_MATERIAL:()=>At,PLASTIC_MATERIAL:()=>Lt,RUBBER_MATERIAL:()=>Ot,WOOD_MATERIAL:()=>It});import*as L from"three";var St=new L.MeshPhysicalMaterial({color:0,emissive:new L.Color(16777215),emissiveIntensity:5,metalness:0,roughness:.2,clearcoat:.3,clearcoatRoughness:.2,depthWrite:!0,depthTest:!0,transparent:!1,alphaTest:0,polygonOffset:!0,side:L.FrontSide,dithering:!0}),At=new L.MeshPhysicalMaterial({color:new L.Color(0),metalness:.9,roughness:.3,envMapIntensity:1.2,clearcoat:.3,clearcoatRoughness:.2,reflectivity:1,ior:2.5,thickness:1,depthWrite:!0,transparent:!1,alphaTest:0,depthTest:!0,polygonOffset:!0,side:L.FrontSide,dithering:!0}),Dt=new L.MeshPhysicalMaterial({color:new L.Color(13421772),metalness:0,roughness:.92,envMapIntensity:.15,clearcoat:.05,clearcoatRoughness:.9,reflectivity:.15,transmission:0,ior:1.45,thickness:0,depthWrite:!0,transparent:!1,alphaTest:.5,depthTest:!0,polygonOffset:!0,side:L.FrontSide,dithering:!0}),Lt=new L.MeshPhysicalMaterial({color:new L.Color(16777215),metalness:0,roughness:.3,envMapIntensity:.5,clearcoat:.5,clearcoatRoughness:.1,reflectivity:.5,ior:1.4,transmission:0,transparent:!1,depthWrite:!0,side:L.FrontSide,dithering:!0,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),Pt=new L.MeshPhysicalMaterial({color:new L.Color(16777215),metalness:0,roughness:0,transmission:.95,transparent:!0,opacity:.3,envMapIntensity:1,clearcoat:1,clearcoatRoughness:0,ior:1.52,reflectivity:.9,thickness:1,side:L.DoubleSide,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),Ot=new L.MeshPhysicalMaterial({color:new L.Color(1710618),metalness:0,roughness:.9,envMapIntensity:.2,clearcoat:.1,clearcoatRoughness:.8,reflectivity:.2,ior:1.3,transmission:0,depthWrite:!0,side:L.FrontSide,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),It=new L.MeshPhysicalMaterial({color:new L.Color(8934707),metalness:0,roughness:.7,envMapIntensity:.3,clearcoat:.3,clearcoatRoughness:.4,reflectivity:.3,ior:1.3,transmission:0,depthWrite:!0,side:L.FrontSide,dithering:!0,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1});import*as j from"three";import{Line2 as Bt}from"three/addons/lines/Line2.js";import{LineGeometry as zt}from"three/addons/lines/LineGeometry.js";import{LineMaterial as Ft}from"three/addons/lines/LineMaterial.js";function J(e,r,t,n=!0){return{x:e,y:r,z:t}}var jt="#ffffff",re=12,kt=4e-4,_t=12,Ut=.05;function we(e,r={}){if(!e||e.length===0)return[];let{rhino:t,applyTransforms:n=!0}=r,o=[];for(let a of e)switch(a.kind){case"curve":{let i=Nt(a,t,n);i&&o.push(i);break}case"point":{o.push(Wt(a,n));break}default:{let i=a;M().warn(`Skipping unknown display item kind: ${String(i.kind)}`);break}}return o}var Gt=2;function Nt(e,r,t){if(!r)return M().warn("No rhino3dm instance provided; skipping curve display item."),null;let n=$t(e.json,r);if(!n)return null;let o=Yt(n,t);if(o.length<2)return null;let a=[];for(let d of o)a.push(d.x,d.y,d.z);let i=new zt;i.setPositions(a);let s=He(e.color,e.opacity),l=new Ft({color:s.color}),c=l;c.linewidth=e.width??Gt,c.transparent=s.transparent,c.opacity=s.opacity;let u=new Bt(i,l);return u.computeLineDistances(),u.name=e.name,u.userData={id:e.id,layer:e.layer,kind:"curve",metadata:e.metadata},u}function Wt(e,r){let{x:t,y:n,z:o}=J(e.position.X,e.position.Y,e.position.Z,r),a=new j.BufferGeometry;a.setAttribute("position",new j.Float32BufferAttribute([t,n,o],3));let i=new j.PointsMaterial({...He(e.color,e.opacity),size:6,sizeAttenuation:!1}),s=new j.Points(a,i);return s.name=e.name,s.userData={id:e.id,layer:e.layer,kind:"point",metadata:e.metadata},s}function $t(e,r){try{let t=JSON.parse(e),n=r.CommonObject.decode(t);return n&&typeof n.pointAt=="function"?n:(M().warn("Decoded display-item JSON is not a curve; skipping."),null)}catch(t){return M().warn("Failed to decode curve display item JSON:",t),null}}function Yt(e,r){let t=Xt(e,r);return t||qt(e,r)}function Xt(e,r){if(!e.isPolyline())return null;let t=e.tryGetPolyline(),n=Array.isArray(t)?t[1]:t;if(!n||typeof n.count!="number"||n.count<2)return null;let o=[];for(let a=0;a<n.count;a++){let i=n.get(a),{x:s,y:l,z:c}=J(i[0],i[1],i[2],r);o.push(new j.Vector3(s,l,c))}return o}function qt(e,r){let t=e.domain,n=t[0],a=t[1]-n,i=c=>{let u=e.pointAt(c),{x:d,y:m,z:E}=J(u[0],u[1],u[2],r);return new j.Vector3(d,m,E)},s=Zt(e),l=[i(n)];for(let c=0;c<re;c++){let u=n+a*c/re,d=n+a*(c+1)/re;oe(u,i(u),d,i(d),i,s,_t,l),l.push(i(d))}return l}function oe(e,r,t,n,o,a,i,s){if(i<=0)return;let l=(e+t)/2,c=o(l),u=Kt(c,r,n),d=Jt(r,c,n);u<=a&&d<=Ut||(oe(e,r,l,c,o,a,i-1,s),s.push(c),oe(l,c,t,n,o,a,i-1,s))}function Zt(e){let r=e.getBoundingBox(),t=r.min,n=r.max,o=Math.hypot(n[0]-t[0],n[1]-t[1],n[2]-t[2]);return Math.max(o*kt,1e-6)}function Jt(e,r,t){let n=r.clone().sub(e),o=t.clone().sub(r),a=n.length(),i=o.length();if(a===0||i===0)return 0;let s=Math.max(-1,Math.min(1,n.dot(o)/(a*i)));return Math.acos(s)}function Kt(e,r,t){let n=t.clone().sub(r),o=n.lengthSq();if(o===0)return e.distanceTo(r);let a=Math.max(0,Math.min(1,e.clone().sub(r).dot(n)/o)),i=r.clone().addScaledVector(n,a);return e.distanceTo(i)}function He(e,r){let t=r??1;return{color:new j.Color(e??jt),transparent:t<1,opacity:t}}import{inflateSync as Qt}from"fflate";var ve=1096174675,en=1515605075,Me=2,Ce=1,ae=1,tn=2,xe=12,Se=56;function ie(e){let r=rn(nn(e)),t=new DataView(r.buffer,r.byteOffset,r.byteLength);if(r.byteLength<xe)throw U("Blob too small to contain SLVA header.",{expectedBytes:xe,availableBytes:r.byteLength});let n=0,o=t.getUint32(n,!0);if(n+=4,o!==ve)throw U(`Invalid SLVA magic: 0x${o.toString(16)}`,{expectedMagic:`0x${ve.toString(16)}`,actualMagic:`0x${o.toString(16)}`});let a=t.getUint32(n,!0);if(n+=4,a<Ce||a>Me)throw U(`Unsupported SLVA version: ${a}`,{minSupportedVersion:Ce,maxSupportedVersion:Me,actualVersion:a});let i=t.getUint32(n,!0);if(n+=4,n+i>r.byteLength)throw U("Insufficient data to read metadata JSON.",{expectedBytes:i,availableBytes:r.byteLength-n,offset:n});let s=r.subarray(n,n+i);n+=i;let l;try{l=JSON.parse(on(s))}catch(H){throw U(`Failed to parse metadata JSON: ${H instanceof Error?H.message:String(H)}`,{metadataLen:i})}if(n+Se>r.byteLength)throw U("Insufficient data to read geometry header.",{expectedBytes:Se,availableBytes:r.byteLength-n,offset:n});let c=t.getUint32(n,!0);n+=4;let u=t.getFloat64(n,!0);n+=8;let d=t.getFloat64(n,!0);n+=8;let m=t.getFloat64(n,!0);n+=8;let E=t.getFloat64(n,!0);n+=8;let f=t.getFloat64(n,!0);n+=8;let x=t.getFloat64(n,!0);n+=8;let S=t.getUint32(n,!0);n+=4;let b=(c&ae)!==0,h=S*3,v=h*(b?4:2);if(n+v>r.byteLength)throw U("Insufficient data to read vertices.",{expectedBytes:v,availableBytes:r.byteLength-n,offset:n,useFloat32:b,vertexCount:S});let P=r.byteOffset+n,y=b?sn(r.buffer,P,h):an(r.buffer,P,h);if(n+=v,n+4>r.byteLength)throw U("Insufficient data to read index count.",{expectedBytes:4,availableBytes:r.byteLength-n,offset:n});let w=t.getUint32(n,!0);n+=4;let C=(c&tn)!==0,g=w*(C?2:4);if(n+g>r.byteLength)throw U("Insufficient data to read indices.",{expectedBytes:g,availableBytes:r.byteLength-n,offset:n,indexCount:w,useUint16Indices:C});let R=C?ln(r.buffer,r.byteOffset+n,w):cn(r.buffer,r.byteOffset+n,w);return{metadata:l,flags:c,vertices:y,indices:R,origin:[u,d,m],scale:[E,f,x]}}function nn(e){return typeof e=="string"?ce(e):e instanceof Uint8Array?e:new Uint8Array(e)}function rn(e){if(e.byteLength<8)return e;let r=new DataView(e.buffer,e.byteOffset,e.byteLength);if(r.getUint32(0,!0)!==en)return e;let t=r.getUint32(4,!0),n=e.subarray(8);try{return Qt(n,{out:new Uint8Array(t)})}catch(o){throw U(`Failed to inflate SLVZ blob: ${o instanceof Error?o.message:String(o)}`,{uncompressedLen:t,deflatedBytes:n.byteLength})}}function on(e){if(typeof TextDecoder<"u")return new TextDecoder("utf-8").decode(e);if(typeof globalThis.Buffer<"u")return globalThis.Buffer.from(e).toString("utf-8");throw new te("No UTF-8 decoder available in this environment.",ee.INVALID_STATE)}function an(e,r,t){if(t===0)return new Int16Array(0);if(r%2===0)return new Int16Array(e,r,t);let n=new Uint8Array(t*2);return n.set(new Uint8Array(e,r,t*2)),new Int16Array(n.buffer)}function sn(e,r,t){if(t===0)return new Float32Array(0);if(r%4===0)return new Float32Array(e,r,t);let n=new Uint8Array(t*4);return n.set(new Uint8Array(e,r,t*4)),new Float32Array(n.buffer)}function ln(e,r,t){if(t===0)return new Uint16Array(0);if(r%2===0)return new Uint16Array(e,r,t);let n=new Uint8Array(t*2);return n.set(new Uint8Array(e,r,t*2)),new Uint16Array(n.buffer)}function cn(e,r,t){if(t===0)return new Uint32Array(0);if(r%4===0)return new Uint32Array(e,r,t);let n=new Uint8Array(t*4);return n.set(new Uint8Array(e,r,t*4)),new Uint32Array(n.buffer)}function U(e,r){return new te(e,ee.VALIDATION_ERROR,{context:r})}import*as B from"three";async function Ae(e,r){let{debug:t=!1}=r??{},n=t?performance.now():0;try{let o=performance.now(),a=JSON.parse(e),i=performance.now()-o;return await un(a,r,{parseTime:i,perfStart:n})}catch(o){return M().error("Error parsing mesh batch:",o),[]}}async function un(e,r,t){let{mergeByMaterial:n=!0,applyTransforms:o=!0,scaleFactor:a=1,debug:i=!1}=r??{},{parseTime:s=0,perfStart:l=i?performance.now():0}=t??{};try{let c=performance.now(),u=ie(e.compressedData),d=performance.now()-c,m=i?hn(e.compressedData):0;return De(u,{mergeByMaterial:n,applyTransforms:o,scaleFactor:a,debug:i,parseTime:s,decodeTime:d,perfStart:l,blobBytes:m,fallback:{materials:e.materials,groups:e.groups,sourceComponentId:e.sourceComponentId}})}catch(c){return M().error("Error parsing mesh batch object:",c),[]}}async function vr(e,r){let{mergeByMaterial:t=!0,applyTransforms:n=!0,scaleFactor:o=1,debug:a=!1}=r??{},i=a?performance.now():0;try{let s=performance.now(),l=ie(e),c=performance.now()-s,u=e.byteLength;return De(l,{mergeByMaterial:t,applyTransforms:n,scaleFactor:o,debug:a,parseTime:0,decodeTime:c,perfStart:i,blobBytes:u})}catch(s){return M().error("Error parsing mesh batch blob:",s),[]}}function De(e,r){let{mergeByMaterial:t,applyTransforms:n,scaleFactor:o,debug:a,parseTime:i,decodeTime:s,perfStart:l,blobBytes:c,fallback:u}=r,d=e.metadata.materials??u?.materials??[],m=e.metadata.groups??u?.groups??[],E=u?.sourceComponentId??e.metadata.sourceComponentId,f=(e.flags&ae)!==0,x=f?mn(e.vertices,n):dn(e.vertices,e.origin,e.scale,n);if(a){let v=e.vertices.byteLength+e.indices.byteLength;M().debug("Mesh Batch Stats:"),M().debug(` Materials: ${d.length} | Groups: ${m.length}`),M().debug(` Vertices: ${e.vertices.length/3} | Indices: ${e.indices.length}`),M().debug(` Format: ${f?"float32":"int16 quantized"}`),M().debug(` Blob: ${(c/1024/1024).toFixed(2)} MB | Geometry on wire: ${(v/1024/1024).toFixed(2)} MB`)}let S=performance.now(),b=d.map(En),h=[];for(let v of m)if(t&&v.meshes.length>1){let P=pn(v,x,e.indices,b);P.userData.sourceComponentId=E??null,h.push(P)}else{let P=fn(v,x,e.indices,b);for(let y of P)y.userData.sourceComponentId=E??null;h.push(...P)}if(o!==1)for(let v of h)v.scale.set(o,o,o);let T=performance.now()-S;if(a){let v=performance.now()-l;M().debug("Performance:"),i>0&&M().debug(` Parse JSON: ${i.toFixed(2)}ms`),M().debug(` Decode binary: ${s.toFixed(2)}ms`),M().debug(` Create Meshes: ${T.toFixed(2)}ms`),M().debug(` Total: ${v.toFixed(2)}ms`)}return Promise.resolve(h)}function dn(e,r,t,n){let o=new Float32Array(e.length),a=r[0],i=r[1],s=r[2],l=t[0],c=t[1],u=t[2];for(let d=0;d<e.length;d+=3)o[d]=a+(e[d]+32767)*l,o[d+1]=i+(e[d+1]+32767)*c,o[d+2]=s+(e[d+2]+32767)*u;return o}function mn(e,r){return e}function En(e){let r=ue(e.color);return new B.MeshPhysicalMaterial({color:r,metalness:e.metalness,roughness:e.roughness,opacity:e.opacity,transparent:e.transparent,side:B.DoubleSide,polygonOffset:!0,polygonOffsetFactor:.5,polygonOffsetUnits:.5,depthWrite:!0,depthTest:!0})}function pn(e,r,t,n){let o=0,a=0;for(let f of e.meshes)o+=f.vertexCount,a+=f.indexCount;let i=new Float32Array(o*3),s=new Uint32Array(a),l=0,c=0;for(let f of e.meshes){let x=f.vertexStart*3,S=f.vertexCount*3;i.set(r.subarray(x,x+S),l*3);let b=t.subarray(f.indexStart,f.indexStart+f.indexCount),h=l-f.vertexStart;if(h===0)s.set(b,c);else for(let T=0;T<b.length;T++)s[c+T]=b[T]+h;l+=f.vertexCount,c+=f.indexCount}let u=new B.BufferGeometry;u.setAttribute("position",new B.BufferAttribute(i,3)),u.setIndex(new B.BufferAttribute(s,1)),u.computeVertexNormals();let d=new B.Mesh(u,n[e.materialId]),m=e.meshes[0],E=e.meshes.map(f=>f.name).filter(f=>f&&f.length>0);return d.name=E.length>0?E[0]:`merged_material_${e.materialId}`,d.castShadow=!0,d.receiveShadow=!0,d.userData={name:d.name,layer:m?.layer??"",originalIndex:m?.originalIndex??0,metadata:m?.metadata??{},mergedFrom:e.meshes.slice(1).map(f=>({name:f.name,layer:f.layer,originalIndex:f.originalIndex}))},d}function fn(e,r,t,n){let o=[];for(let a of e.meshes){let i=a.vertexStart*3,s=a.vertexCount*3,l=r.slice(i,i+s),c=t.subarray(a.indexStart,a.indexStart+a.indexCount),u=new Uint32Array(c.length),d=a.vertexStart;for(let f=0;f<c.length;f++)u[f]=c[f]-d;let m=new B.BufferGeometry;m.setAttribute("position",new B.BufferAttribute(l,3)),m.setIndex(new B.BufferAttribute(u,1)),m.computeVertexNormals();let E=new B.Mesh(m,n[e.materialId]);E.name=a.name,E.userData={name:a.name,layer:a.layer??"",originalIndex:a.originalIndex,metadata:a.metadata??{}},E.castShadow=!0,E.receiveShadow=!0,o.push(E)}return o}function hn(e){return Math.floor(e.length*3/4)}var gn={Millimeters:1/1e3,Centimeters:1/100,Meters:1,Inches:1/39.37,Feet:1/3.28084},bn="Display";async function Dr(e,r){let t=performance.now(),n=[],{allowScaling:o=!0,allowAutoPosition:a=!0,rhino:i,debug:s=!1,parsing:l={}}=r??{};try{let c=o?yn(e.modelunits):1;return await Rn(e,n,c,l,i,s),a&&vn(n),n}catch(c){throw Mn(c,n),c}finally{s&&xn(t)}}function yn(e){return gn[e]??1}async function Rn(e,r,t,n,o,a){for(let i of e.values){let s=i.InnerTree;for(let l in s){let c=s[l];c&&await Tn(c,r,t,n,o,a)}}}async function Tn(e,r,t,n,o,a){for(let i of e){if(!i.type.includes(bn))continue;let s={mergeByMaterial:!0,applyTransforms:!0,debug:!1,...n},l=await Ae(i.data,s),c=we(wn(i.data),{rhino:o,applyTransforms:s.applyTransforms}),u=[...l,...c];if(t!==1)for(let d of u)d.scale.set(t,t,t);r.push(...u),a&&M().debug(`Extracted ${l.length} meshes and ${c.length} items from batch`)}}function wn(e){return(typeof e=="string"?Hn(e):e)?.items}function Hn(e){try{return JSON.parse(e)}catch{return}}function vn(e){if(e.length===0)return;let r=Y(e);de(e,r.min.z,"z")}function Mn(e,r){M().error("An unexpected error occurred:",e),Cn(r)}function Cn(e){for(let r of e){let t=r;t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(n=>n.dispose()):t.material.dispose())}}function xn(e){let r=performance.now()-e;M().info("Time to process meshes:",`${r.toFixed(2)}ms`)}export{An as a,ue as b,de as c,Y as d,me as e,Ee as f,pe as g,X as h,he as i,Ze as j,jn as k,ge as l,ye as m,ut as n,Te as o,lr as p,Vt as q,we as r,ve as s,Me as t,ae as u,ie as v,Ae as w,un as x,vr as y,gn as z,Dr as A};
55
- //# sourceMappingURL=chunk-UH3HH7PS.js.map