@selvajs/compute 2.1.0-beta.5 → 2.1.0-beta.6

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.
@@ -50,6 +50,6 @@ import{a as De,c as ee,d as te,e as v,o as ce}from"./chunk-XFYFC2DH.js";import*a
50
50
  if (alpha < 0.001) discard;
51
51
  gl_FragColor = vec4(color, alpha);
52
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 d=new I.ShaderMaterial({vertexShader:je,fragmentShader:ke,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}}}),u=new I.Mesh(c,d);u.name="grid",u.userData.id="grid",u.renderOrder=-1;let m=new I.Vector3;return{object:u,update:E=>{i==="y"?(u.position.set(E.x,0,E.z),m.set(E.x,0,E.z)):i==="z"?(u.position.set(E.x,E.y,0),m.set(E.x,E.y,0)):(u.position.set(0,E.y,E.z),m.set(0,E.y,E.z)),d.uniforms.uCenter.value.copy(m)},setVisible:E=>{u.visible=E},dispose:()=>{c.dispose(),d.dispose()}}}import*as F from"three";import{ViewHelper as _e}from"three/addons/helpers/ViewHelper.js";function pe(e){let{camera:r,domElement:t,controller:n}=e,o=new _e(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)},d=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 g of b){let R=g.object.userData?.type;if(typeof R=="string"&&R in c)return R}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=d(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 Ge}from"three/addons/lines/LineSegmentsGeometry.js";import{LineSegments2 as fe}from"three/addons/lines/LineSegments2.js";import{LineMaterial as Ne}from"three/addons/lines/LineMaterial.js";var X="edge-overlay",Ue=2236962,We=1.5,$e=30;function he(e,r={}){let t=new $.Color(r.color??Ue),n=r.width??We,o=r.thresholdAngle??$e,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=Ye(i.geometry,t,n,o);i.add(s),a.push(s)}),a}function Ye(e,r,t,n){let o=new $.EdgesGeometry(e,n),a=new Ge;a.setPositions(Array.from(o.attributes.position.array)),o.dispose();let i=new Ne({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 Xe(e){return e.userData?.kind===X}function Pn(e){let r=[];e.traverse(t=>{t instanceof fe&&Xe(t)&&r.push(t)});for(let t of r)t.geometry.dispose(),t.material.dispose(),t.removeFromParent();return r.length}import{EffectComposer as qe}from"three/addons/postprocessing/EffectComposer.js";import{RenderPass as Ze}from"three/addons/postprocessing/RenderPass.js";import{GTAOPass as Je}from"three/addons/postprocessing/GTAOPass.js";import{OutputPass as Ke}from"three/addons/postprocessing/OutputPass.js";function ge(e,r,t,n,o,a){let i=new qe(e),s=new Ze(r,t);i.addPass(s);let l=new Je(r,t,n,o);l.blendIntensity=a.aoIntensity??1,l.updateGtaoMaterial({screenSpaceRadius:!0}),i.addPass(l);let c=new Ke;return i.addPass(c),e.toneMapping=a.toneMapping,e.toneMappingExposure=a.toneMappingExposure,i.setSize(n,o),{render:d=>i.render(d),setSize:(d,u,m)=>{i.setPixelRatio(m),i.setSize(d,u),l.setSize(d,u)},setCamera:d=>{s.camera=d,l.camera=d},dispose:()=>i.dispose()}}import*as be from"three";import{CSS2DRenderer as Qe,CSS2DObject as et}from"three/addons/renderers/CSS2DRenderer.js";function ye(e,r){let t=new Qe,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",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,d)=>{let u=document.createElement("div");u.textContent=l,d?u.className=d:Object.assign(u.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"}),u.style.pointerEvents="none";let m=new et(u);return m.position.copy(c),a.add(m),i.add(m),{object:m,setPosition:E=>m.position.copy(E),setText:E=>{u.textContent=E},remove:()=>{m.removeFromParent(),u.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 tt}from"three/addons/lines/Line2.js";import{LineGeometry as nt}from"three/addons/lines/LineGeometry.js";import{LineMaterial as rt}from"three/addons/lines/LineMaterial.js";var ot=12,at=16763904,Re=.015,q=e=>`${e.toPrecision(3)} m`,it=(e,r)=>`${q(e)}
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 d=new I.ShaderMaterial({vertexShader:je,fragmentShader:ke,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}}}),u=new I.Mesh(c,d);u.name="grid",u.userData.id="grid",u.renderOrder=-1;let m=new I.Vector3;return{object:u,update:E=>{i==="y"?(u.position.set(E.x,0,E.z),m.set(E.x,0,E.z)):i==="z"?(u.position.set(E.x,E.y,0),m.set(E.x,E.y,0)):(u.position.set(0,E.y,E.z),m.set(0,E.y,E.z)),d.uniforms.uCenter.value.copy(m)},setVisible:E=>{u.visible=E},dispose:()=>{c.dispose(),d.dispose()}}}import*as F from"three";import{ViewHelper as _e}from"three/addons/helpers/ViewHelper.js";function pe(e){let{camera:r,domElement:t,controller:n}=e,o=new _e(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)},d=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 g of b){let R=g.object.userData?.type;if(typeof R=="string"&&R in c)return R}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=d(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 Ge}from"three/addons/lines/LineSegmentsGeometry.js";import{LineSegments2 as fe}from"three/addons/lines/LineSegments2.js";import{LineMaterial as Ne}from"three/addons/lines/LineMaterial.js";var X="edge-overlay",Ue=2236962,We=1.5,$e=30;function he(e,r={}){let t=new $.Color(r.color??Ue),n=r.width??We,o=r.thresholdAngle??$e,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=Ye(i.geometry,t,n,o);i.add(s),a.push(s)}),a}function Ye(e,r,t,n){let o=new $.EdgesGeometry(e,n),a=new Ge;a.setPositions(Array.from(o.attributes.position.array)),o.dispose();let i=new Ne({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 Xe(e){return e.userData?.kind===X}function Pn(e){let r=[];e.traverse(t=>{t instanceof fe&&Xe(t)&&r.push(t)});for(let t of r)t.geometry.dispose(),t.material.dispose(),t.removeFromParent();return r.length}import{EffectComposer as qe}from"three/addons/postprocessing/EffectComposer.js";import{RenderPass as Ze}from"three/addons/postprocessing/RenderPass.js";import{GTAOPass as Je}from"three/addons/postprocessing/GTAOPass.js";import{OutputPass as Ke}from"three/addons/postprocessing/OutputPass.js";function ge(e,r,t,n,o,a){let i=new qe(e),s=new Ze(r,t);i.addPass(s);let l=new Je(r,t,n,o);l.blendIntensity=a.aoIntensity??1,l.updateGtaoMaterial({screenSpaceRadius:!0}),i.addPass(l);let c=new Ke;return i.addPass(c),e.toneMapping=a.toneMapping,e.toneMappingExposure=a.toneMappingExposure,i.setSize(n,o),{render:d=>i.render(d),setSize:(d,u,m)=>{i.setPixelRatio(m),i.setSize(d,u),l.setSize(d,u)},setCamera:d=>{s.camera=d,l.camera=d},dispose:()=>i.dispose()}}import*as be from"three";import{CSS2DRenderer as Qe,CSS2DObject as et}from"three/addons/renderers/CSS2DRenderer.js";function ye(e,r){let t=new Qe,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,d)=>{let u=document.createElement("div");u.textContent=l,d?u.className=d:Object.assign(u.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"}),u.style.pointerEvents="none";let m=new et(u);return m.position.copy(c),a.add(m),i.add(m),{object:m,setPosition:E=>m.position.copy(E),setText:E=>{u.textContent=E},remove:()=>{m.removeFromParent(),u.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 tt}from"three/addons/lines/Line2.js";import{LineGeometry as nt}from"three/addons/lines/LineGeometry.js";import{LineMaterial as rt}from"three/addons/lines/LineMaterial.js";var ot=12,at=16763904,Re=.015,q=e=>`${e.toPrecision(3)} m`,it=(e,r)=>`${q(e)}
54
54
  \u0394x ${q(r.x)} \u0394y ${q(r.y)} \u0394z ${q(r.z)}`;function st(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 lt(e,r,t,n){let o=e.point.clone(),a=e.object,i=st(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),d=o,u=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<u&&(u=x,d=f)}return d}function Te(e){let{canvas:r,scene:t,getActiveCamera:n,labelLayer:o,options:a={}}=e,i=a.snapPixels??ot,s=new A.Color(a.color??at),l=a.format??it,c=new A.Raycaster,d=new A.Vector2,u=!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}),g=null,R=h=>{if(!h){g&&(g.visible=!1);return}if(!g){let T=new A.BufferGeometry;T.setAttribute("position",new A.Float32BufferAttribute([0,0,0],3)),g=new A.Points(T,b),g.renderOrder=1e3,g.userData.id="measure",g.raycast=()=>{},t.add(g)}g.position.copy(h),g.visible=!0},H=h=>{let T=new A.BufferGeometry;T.setAttribute("position",new A.Float32BufferAttribute([h.x,h.y,h.z],3));let M=new A.Points(T,S);return M.renderOrder=999,M.userData.id="measure",M.raycast=()=>{},t.add(M),M},P=()=>{m.length=0,E.forEach(h=>{h.geometry.dispose(),h.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[h,T]=m,M=new nt;M.setPositions([h.x,h.y,h.z,T.x,T.y,T.z]);let k=new rt({color:s});k.linewidth=2,k.depthTest=!1,f=new tt(M,k),f.renderOrder=998,f.userData.id="measure",f.raycast=()=>{},t.add(f);let U=h.clone().add(T).multiplyScalar(.5),W=new A.Vector3(Math.abs(T.x-h.x),Math.abs(T.y-h.y),Math.abs(T.z-h.z));x=o.addLabel(l(h.distanceTo(T),W),U,a.labelClassName)},w=h=>{let T=r.getBoundingClientRect();d.x=(h.clientX-T.left)/T.width*2-1,d.y=-((h.clientY-T.top)/T.height)*2+1;let M=n();c.setFromCamera(d,M);let k=M.position.length();c.params.Line={threshold:k*Re},c.params.Points={threshold:k*Re};let U=c.intersectObjects(t.children,!0).filter(W=>W.object.userData.id!=="measure"&&W.object.userData.id!=="grid");return U.length===0?null:lt(U[0],M,{width:T.width,height:T.height},i)};return{setEnabled:h=>{u=h,h||(P(),R(null))},isEnabled:()=>u,handleClick:h=>{if(!u)return!1;m.length===2&&P();let T=w(h);return T===null||(m.push(T),E.push(H(T)),m.length===2&&y()),!0},handleMove:h=>{u&&R(w(h))},clear:P,dispose:()=>{P(),g&&(g.geometry.dispose(),g.removeFromParent(),g=null),S.dispose(),b.dispose()}}}import*as p from"three";import{OrbitControls as ct}from"three/addons/controls/OrbitControls.js";import{HDRLoader as dt}from"three/addons/loaders/HDRLoader.js";var Z=new p.Vector3(0,0,1);function ut(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 tr=function(e,r){let t=mt(r||{}),n=t.environment?.sceneUp||Z,o=ht(t),a=wt(t,e);a.up.copy(n);let i=Ht(e,t),s=Mt(a,e,t),l=me({scene:o,perspective:a,controls:s,onActiveCameraChange:()=>{},up:n}),c=()=>l.getActiveCamera();yt(o,t);let d=Rt(o,t),u=()=>{d&&ft(d,ne(o))};t.floor?.enabled&&Tt(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?vt(e,o,c,a,s,t):{dispose:()=>{},fitToView:()=>{},clearSelection:()=>{}},g=5,R=0,H=0,P=D=>{R=D.clientX,H=D.clientY},y=D=>Math.hypot(D.clientX-R,D.clientY-H)>g,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})},h=e.parentElement,T=()=>h?{width:h.clientWidth,height:h.clientHeight}:{width:window.innerWidth,height:window.innerHeight},M=null,k=()=>{let{width:D,height:G}=T(),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},U=D=>{D&&!M?M=k():!D&&M&&(M.dispose(),M=null)};t.render.ambientOcclusion&&(M=k());let{animate:W,dispose:K}=bt(i,o,a,c,l,s,T,t.events.onFrame,m,E,()=>M,x);return W(),o.up.set(n.x,n.y,n.z),u(),{scene:o,camera:a,controls:s,renderer:i,cameraController:l,grid:m,gizmo:E,measureTool:S,applyEdges:O,setAmbientOcclusion:U,updateShadowBounds:u,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(),M?.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 mt(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??ut(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 Et=new Set(["grid","floor","label-layer","measure"]);function pt(e){let r=e;for(;r;){if(typeof r.userData.id=="string"&&Et.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&&!pt(t)&&n.geometry&&r.expandByObject(t)}),r}function ft(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 ht(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 gt(e,r,t,n,o=200){let a=e.position.clone(),i=r.target.clone(),s=performance.now(),l=d=>1-Math.pow(1-d,3),c=()=>{let d=performance.now()-s,u=l(Math.min(d/o,1));e.position.lerpVectors(a,t,u),r.target.lerpVectors(i,n,u),r.update(),u<1&&requestAnimationFrame(c)};requestAnimationFrame(c)}function bt(e,r,t,n,o,a,i,s,l,c,d,u){let m=null,E=performance.now(),f=()=>{let{width:b,height:g}=i();if(b===0||g===0)return;let R=Math.min(window.devicePixelRatio,2),H=Math.round(b*R),P=Math.round(g*R);(e.domElement.width!==H||e.domElement.height!==P)&&(e.setPixelRatio(R),e.setSize(b,g,!1),t.aspect=b/g,t.updateProjectionMatrix(),o.updateAspect(b,g),d?.()?.setSize(b,g,R),u?.setSize(b,g))},x=function(){m=requestAnimationFrame(x);let b=performance.now(),g=(b-E)/1e3;E=b,f(),(a.enableDamping||a.autoRotate)&&a.update(),l&&l.update(n().position),c&&c.update(g),s?.(g);let R=n(),H=d?.();H?(H.setCamera(R),H.render(g)):e.render(r,R),u&&u.render(r,R),c&&c.render(e)};return{animate:x,dispose:()=>{m!==null&&(cancelAnimationFrame(m),m=null)}}}function yt(e,r){r.environment.enableEnvironmentLighting?new dt().load(r.environment.hdrPath||"/baseHDR.hdr",function(t){if(!t?.image){v().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){v().warn("HDR texture could not be loaded, falling back to basic lighting:",t),r.events.onReady?.()}):r.events.onReady?.()}function Rt(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 Tt(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 wt(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 Ht(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 vt(e,r,t,n,o,a){let i=new Set,s=new Map,l=new p.Raycaster,c=new p.Vector2,d=new p.Vector2,u=y=>{let w=y;for(;w;){if(!w.visible)return!1;w=w.parent}return!0},m=()=>{let y=ne(r);if(y.isEmpty()){v().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),h=n.fov*(Math.PI/180),T=O/(2*Math.tan(h/2));T*=1.5;let M=n.position.clone().sub(o.target);M.lengthSq()<1e-12&&M.set(.8,1,1.2),M.normalize(),n.position.copy(w.clone().add(M.multiplyScalar(T))),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(h=>h.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=>{d.set(y.clientX,y.clientY)},g=y=>{let w=new p.Vector2(y.clientX,y.clientY);if(d.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(h=>u(h.object));if(O.length>0){let h=O[0].object;i.has(h)||(f(),i.add(h),x(h),a.events?.onObjectSelected?.(h),h instanceof p.Mesh&&Object.keys(h.userData).length>0&&a.events?.onMeshMetadataClicked?.(h.userData))}else f(),a.events?.onBackgroundClicked?.({x:c.x,y:c.y})},R=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=>u(D.object));if(C.length===0)return;let O=C[0].object;if(a.events?.onMeshDoubleClicked?.(O),!a.events?.enableDoubleClickZoom)return;let h=new p.Box3().setFromObject(O);if(h.isEmpty())return;let T=h.getCenter(new p.Vector3),M=h.getSize(new p.Vector3),k=Math.max(M.x,M.y,M.z),U=n.fov*(Math.PI/180),W=k/(2*Math.tan(U/2))*1.5,K=n.position.clone().sub(o.target).normalize(),se=T.clone().add(K.multiplyScalar(W));gt(n,o,se,T)},H=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",g),e.addEventListener("dblclick",R)),a.events?.enableKeyboardControls&&(e.setAttribute("tabindex","0"),e.addEventListener("keydown",H)),{dispose:()=>{e.removeEventListener("mousedown",b),e.removeEventListener("click",g),e.removeEventListener("dblclick",R),e.removeEventListener("keydown",H),f()},fitToView:m,clearSelection:f}}function Mt(e,r,t){let n=new ct(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 Ot={};De(Ot,{CONCRETE_MATERIAL:()=>St,EMISSIVE_MATERIAL:()=>Ct,GLASS_MATERIAL:()=>Dt,METAL_MATERIAL:()=>xt,PLASTIC_MATERIAL:()=>At,RUBBER_MATERIAL:()=>Lt,WOOD_MATERIAL:()=>Pt});import*as L from"three";var Ct=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}),xt=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}),St=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}),At=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}),Dt=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}),Lt=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}),Pt=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 It}from"three/addons/lines/Line2.js";import{LineGeometry as Vt}from"three/addons/lines/LineGeometry.js";import{LineMaterial as Bt}from"three/addons/lines/LineMaterial.js";function J(e,r,t,n=!0){return{x:e,y:r,z:t}}var zt="#ffffff",re=12,Ft=4e-4,jt=12,kt=.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=Gt(a,t,n);i&&o.push(i);break}case"point":{o.push(Nt(a,n));break}default:{let i=a;v().warn(`Skipping unknown display item kind: ${String(i.kind)}`);break}}return o}var _t=2;function Gt(e,r,t){if(!r)return v().warn("No rhino3dm instance provided; skipping curve display item."),null;let n=Ut(e.json,r);if(!n)return null;let o=Wt(n,t);if(o.length<2)return null;let a=[];for(let u of o)a.push(u.x,u.y,u.z);let i=new Vt;i.setPositions(a);let s=He(e.color,e.opacity),l=new Bt({color:s.color}),c=l;c.linewidth=e.width??_t,c.transparent=s.transparent,c.opacity=s.opacity;let d=new It(i,l);return d.computeLineDistances(),d.name=e.name,d.userData={id:e.id,layer:e.layer,kind:"curve",metadata:e.metadata},d}function Nt(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 Ut(e,r){try{let t=JSON.parse(e),n=r.CommonObject.decode(t);return n&&typeof n.pointAt=="function"?n:(v().warn("Decoded display-item JSON is not a curve; skipping."),null)}catch(t){return v().warn("Failed to decode curve display item JSON:",t),null}}function Wt(e,r){let t=$t(e,r);return t||Yt(e,r)}function $t(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 Yt(e,r){let t=e.domain,n=t[0],a=t[1]-n,i=c=>{let d=e.pointAt(c),{x:u,y:m,z:E}=J(d[0],d[1],d[2],r);return new j.Vector3(u,m,E)},s=Xt(e),l=[i(n)];for(let c=0;c<re;c++){let d=n+a*c/re,u=n+a*(c+1)/re;oe(d,i(d),u,i(u),i,s,jt,l),l.push(i(u))}return l}function oe(e,r,t,n,o,a,i,s){if(i<=0)return;let l=(e+t)/2,c=o(l),d=Zt(c,r,n),u=qt(r,c,n);d<=a&&u<=kt||(oe(e,r,l,c,o,a,i-1,s),s.push(c),oe(l,c,t,n,o,a,i-1,s))}function Xt(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*Ft,1e-6)}function qt(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 Zt(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??zt),transparent:t<1,opacity:t}}var ve=1096174675,Me=1,ae=1,Ce=12,xe=56;function ie(e){let r=Jt(e),t=new DataView(r.buffer,r.byteOffset,r.byteLength);if(r.byteLength<Ce)throw N("Blob too small to contain SLVA header.",{expectedBytes:Ce,availableBytes:r.byteLength});let n=0,o=t.getUint32(n,!0);if(n+=4,o!==ve)throw N(`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!==Me)throw N(`Unsupported SLVA version: ${a}`,{expectedVersion:Me,actualVersion:a});let i=t.getUint32(n,!0);if(n+=4,n+i>r.byteLength)throw N("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(Kt(s))}catch(h){throw N(`Failed to parse metadata JSON: ${h instanceof Error?h.message:String(h)}`,{metadataLen:i})}if(n+xe>r.byteLength)throw N("Insufficient data to read geometry header.",{expectedBytes:xe,availableBytes:r.byteLength-n,offset:n});let c=t.getUint32(n,!0);n+=4;let d=t.getFloat64(n,!0);n+=8;let u=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,g=S*3,H=g*(b?4:2);if(n+H>r.byteLength)throw N("Insufficient data to read vertices.",{expectedBytes:H,availableBytes:r.byteLength-n,offset:n,useFloat32:b,vertexCount:S});let P=r.byteOffset+n,y=b?en(r.buffer,P,g):Qt(r.buffer,P,g);if(n+=H,n+4>r.byteLength)throw N("Insufficient data to read index count.",{expectedBytes:4,availableBytes:r.byteLength-n,offset:n});let w=t.getUint32(n,!0);n+=4;let C=w*4;if(n+C>r.byteLength)throw N("Insufficient data to read indices.",{expectedBytes:C,availableBytes:r.byteLength-n,offset:n,indexCount:w});let O=tn(r.buffer,r.byteOffset+n,w);return{metadata:l,flags:c,vertices:y,indices:O,origin:[d,u,m],scale:[E,f,x]}}function Jt(e){return typeof e=="string"?ce(e):e instanceof Uint8Array?e:new Uint8Array(e)}function Kt(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 Qt(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 en(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 tn(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 N(e,r){return new te(e,ee.VALIDATION_ERROR,{context:r})}import*as B from"three";async function Se(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 nn(a,r,{parseTime:i,perfStart:n})}catch(o){return v().error("Error parsing mesh batch:",o),[]}}async function nn(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(),d=ie(e.compressedData),u=performance.now()-c,m=i?cn(e.compressedData):0;return Ae(d,{mergeByMaterial:n,applyTransforms:o,scaleFactor:a,debug:i,parseTime:s,decodeTime:u,perfStart:l,blobBytes:m,fallback:{materials:e.materials,groups:e.groups,sourceComponentId:e.sourceComponentId}})}catch(c){return v().error("Error parsing mesh batch object:",c),[]}}async function hr(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,d=e.byteLength;return Ae(l,{mergeByMaterial:t,applyTransforms:n,scaleFactor:o,debug:a,parseTime:0,decodeTime:c,perfStart:i,blobBytes:d})}catch(s){return v().error("Error parsing mesh batch blob:",s),[]}}function Ae(e,r){let{mergeByMaterial:t,applyTransforms:n,scaleFactor:o,debug:a,parseTime:i,decodeTime:s,perfStart:l,blobBytes:c,fallback:d}=r,u=e.metadata.materials??d?.materials??[],m=e.metadata.groups??d?.groups??[],E=e.metadata.sourceComponentId??d?.sourceComponentId,f=(e.flags&ae)!==0,x=f?on(e.vertices,n):rn(e.vertices,e.origin,e.scale,n);if(a){let H=e.vertices.byteLength+e.indices.byteLength;v().debug("Mesh Batch Stats:"),v().debug(` Materials: ${u.length} | Groups: ${m.length}`),v().debug(` Vertices: ${e.vertices.length/3} | Indices: ${e.indices.length}`),v().debug(` Format: ${f?"float32":"int16 quantized"}`),v().debug(` Blob: ${(c/1024/1024).toFixed(2)} MB | Geometry on wire: ${(H/1024/1024).toFixed(2)} MB`)}let S=performance.now(),b=u.map(an),g=[];for(let H of m)if(t&&H.meshes.length>1){let P=sn(H,x,e.indices,b);P.userData.sourceComponentId=E??null,g.push(P)}else{let P=ln(H,x,e.indices,b);for(let y of P)y.userData.sourceComponentId=E??null;g.push(...P)}if(o!==1)for(let H of g)H.scale.set(o,o,o);let R=performance.now()-S;if(a){let H=performance.now()-l;v().debug("Performance:"),i>0&&v().debug(` Parse JSON: ${i.toFixed(2)}ms`),v().debug(` Decode binary: ${s.toFixed(2)}ms`),v().debug(` Create Meshes: ${R.toFixed(2)}ms`),v().debug(` Total: ${H.toFixed(2)}ms`)}return Promise.resolve(g)}function rn(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],d=t[2];for(let u=0;u<e.length;u+=3)o[u]=a+(e[u]+32767)*l,o[u+1]=i+(e[u+1]+32767)*c,o[u+2]=s+(e[u+2]+32767)*d;return o}function on(e,r){return e}function an(e){let r=de(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 sn(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),g=l-f.vertexStart;if(g===0)s.set(b,c);else for(let R=0;R<b.length;R++)s[c+R]=b[R]+g;l+=f.vertexCount,c+=f.indexCount}let d=new B.BufferGeometry;d.setAttribute("position",new B.BufferAttribute(i,3)),d.setIndex(new B.BufferAttribute(s,1)),d.computeVertexNormals();let u=new B.Mesh(d,n[e.materialId]),m=e.meshes[0],E=e.meshes.map(f=>f.name).filter(f=>f&&f.length>0);return u.name=E.length>0?E[0]:`merged_material_${e.materialId}`,u.castShadow=!0,u.receiveShadow=!0,u.userData={name:u.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}))},u}function ln(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),d=new Uint32Array(c.length),u=a.vertexStart;for(let f=0;f<c.length;f++)d[f]=c[f]-u;let m=new B.BufferGeometry;m.setAttribute("position",new B.BufferAttribute(l,3)),m.setIndex(new B.BufferAttribute(d,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 cn(e){return Math.floor(e.length*3/4)}var dn={Millimeters:1/1e3,Centimeters:1/100,Meters:1,Inches:1/39.37,Feet:1/3.28084},un="Display";async function wr(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?mn(e.modelunits):1;return await En(e,n,c,l,i,s),a&&gn(n),n}catch(c){throw bn(c,n),c}finally{s&&Rn(t)}}function mn(e){return dn[e]??1}async function En(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 pn(c,r,t,n,o,a)}}}async function pn(e,r,t,n,o,a){for(let i of e){if(!i.type.includes(un))continue;let s={mergeByMaterial:!0,applyTransforms:!0,debug:!1,...n},l=await Se(i.data,s),c=we(fn(i.data),{rhino:o,applyTransforms:s.applyTransforms}),d=[...l,...c];if(t!==1)for(let u of d)u.scale.set(t,t,t);r.push(...d),a&&v().debug(`Extracted ${l.length} meshes and ${c.length} items from batch`)}}function fn(e){return(typeof e=="string"?hn(e):e)?.items}function hn(e){try{return JSON.parse(e)}catch{return}}function gn(e){if(e.length===0)return;let t=Y(e).min.y;ue(e,t)}function bn(e,r){v().error("An unexpected error occurred:",e),yn(r)}function yn(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 Rn(e){let r=performance.now()-e;v().info("Time to process meshes:",`${r.toFixed(2)}ms`)}export{wn as a,de as b,ue as c,Y as d,me as e,Ee as f,pe as g,X as h,he as i,Xe as j,Pn as k,ge as l,ye as m,lt as n,Te as o,tr as p,Ot as q,we as r,ve as s,Me as t,ae as u,ie as v,Se as w,nn as x,hr as y,dn as z,wr as A};
55
- //# sourceMappingURL=chunk-EY5RGC4H.js.map
55
+ //# sourceMappingURL=chunk-CUKWZHDJ.js.map