brepjs-verify 0.8.0 → 0.24.1

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.
@@ -4164,4 +4164,4 @@ No matching component was found for:
4164
4164
 
4165
4165
  gl_FragColor = vec4(lineColor, alpha);
4166
4166
  }
4167
- `;function Ry({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:Iy,fragmentShader:Ly,uniforms:{cellSize:{value:e},lineColor:{value:new G(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function zy(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function By({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(zy,{}),(0,$.jsx)(Fy,{}),(0,$.jsx)(hy,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(Ry,{...r})]})}var Vy={iso:new U(.6,.5,.6),front:new U(0,.3,1),top:new U(0,1,-.01),right:new U(1,.3,0)};function Hy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=gy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Vi(new U,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Vy[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function Uy(){let e=k_(e=>e.camera);return(0,$.jsx)(my,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function Wy(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function Gy({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,children:s}){return(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(Wy,{}),a===`orthographic`&&(0,$.jsx)(Uy,{}),(0,$.jsx)(By,{autoRotate:r,gridVisible:i}),(0,$.jsx)(Hy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),s]})}var Ky=[`iso`,`front`,`top`,`right`],qy={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},Jy={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function Yy({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,className:m}){return(0,$.jsxs)(`div`,{className:m,style:m?void 0:Qy,children:[(f||p)&&(0,$.jsxs)(Xy,{children:[f&&(0,$.jsx)(Zy,{label:`Fit`,onClick:f}),p&&(0,$.jsx)(Zy,{label:`Snap`,onClick:p})]}),e&&t&&(0,$.jsx)(Xy,{children:Object.keys(qy).map(n=>(0,$.jsx)(Zy,{label:qy[n],active:e===n,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(Xy,{children:[r&&(0,$.jsx)(Zy,{label:`Edges`,active:n,onClick:r}),a&&(0,$.jsx)(Zy,{label:`Grid`,active:i,onClick:a}),s&&(0,$.jsx)(Zy,{label:`Spin`,active:o,onClick:s}),l&&(0,$.jsx)(Zy,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,onClick:l})]}),d&&(0,$.jsx)(Xy,{children:Ky.map(e=>(0,$.jsx)(Zy,{label:Jy[e],active:u===e,onClick:()=>{d(e)}},e))})]})}function Xy({children:e}){return(0,$.jsx)(`div`,{style:$y,children:e})}function Zy({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...eb,...t?tb:null},children:e})}var Qy={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},$y={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},eb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},tb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`};function nb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(rb,{label:`Size`,value:`${ib(e[0])} × ${ib(e[1])} × ${ib(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(rb,{label:`Volume`,value:`${ib(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(rb,{label:`Area`,value:`${ib(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(rb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(rb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:ab,children:c})}function rb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:ob,children:[(0,$.jsx)(`span`,{style:sb,children:e}),(0,$.jsx)(`span`,{style:{...cb,...n?{color:n}:null},children:t})]})}function ib(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var ab={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},sb={color:`#7b8591`},cb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},lb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function ub(e){return lb[e]??`Surface`}function db(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function fb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:mb,children:[(0,$.jsxs)(`div`,{style:hb,children:[(0,$.jsxs)(`span`,{style:gb,children:[ub(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:_b,children:`✕`})]}),(0,$.jsx)(pb,{label:`Area`,value:`${db(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(pb,{label:`Normal`,value:`${db(i)}, ${db(a)}, ${db(o)}`})]})}function pb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:vb,children:[(0,$.jsx)(`span`,{style:yb,children:e}),(0,$.jsx)(`span`,{style:bb,children:t})]})}var mb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},hb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},gb={color:`#6ee7d7`,fontSize:12,fontWeight:600},_b={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb=[`x`,`y`,`z`];function Sb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:wb,children:[(0,$.jsx)(Cb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[xb.map(e=>(0,$.jsx)(Cb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Db,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Cb,{label:`Flip`,active:c,onClick:l})]})]})}function Cb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Tb,...t?Eb:null},children:e})}var wb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Tb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Eb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Db={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Ob(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function kb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Ab({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Ob(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-CMzbzBfs.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:kb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var jb=[`iso`,`front`,`top`,`right`],Mb=new Set;function Nb(e){return jb.includes(e)}function Pb(e){return Mb.add(e),()=>Mb.delete(e)}function Fb(){globalThis.__ready=!0}function Ib(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{if(Nb(e))for(let t of Mb)t(e)}}var Lb=new URLSearchParams(window.location.search),Rb=Lb.get(`ui`)!==`0`,zb=Lb.get(`dims`)===`1`;function Bb(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function Vb(){let e=Ab({inspect:Rb}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1);(0,v.useEffect)(()=>Pb(n),[]);let O=(0,v.useCallback)(()=>{m(e=>e+1)},[]),k=(0,v.useCallback)(e=>{g(e)},[]),A=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),j=(0,v.useMemo)(()=>e.status===`ready`?_y(e.data):null,[e]),M=S===`x`?0:S===`y`?1:2,ee=j?j.min[M]:0,te=j?j.max[M]:1,N=(0,v.useCallback)(e=>{if(!j)return 0;let t=e===`x`?0:e===`y`?1:2;return(j.min[t]+j.max[t])/2},[j]),P=(0,v.useCallback)(()=>{x(e=>(e||T(N(S)),!e))},[N,S]),F=(0,v.useCallback)(e=>{C(e),T(N(e))},[N]),ne=(0,v.useMemo)(()=>b&&j?[yy(S,w,E)]:void 0,[b,j,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(Gy,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Fb,children:[(0,$.jsx)(xy,{data:e.data,viewMode:r,...ne?{clippingPlanes:ne}:{},...Rb?{onFacePick:k,onFaceHover:A}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Cy,{edges:e.data.edges,...ne?{clippingPlanes:ne}:{}}),Rb&&(0,$.jsx)(jy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_})]}),Rb&&(0,$.jsx)(fb,{face:h,onClear:()=>{g(null)}}),Rb&&(0,$.jsx)(Sb,{enabled:b,onToggle:P,axis:S,onAxisChange:F,position:w,min:ee,max:te,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Rb&&(0,$.jsx)(nb,{dims:vy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Rb&&zb&&(0,$.jsx)(nb,{dims:vy(e.data)}),Rb&&(0,$.jsx)(Yy,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:O,onScreenshot:Bb})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Ib();var Hb=document.getElementById(`root`);Hb&&(0,y.createRoot)(Hb).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(Vb,{})}));
4167
+ `;function Ry({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:Iy,fragmentShader:Ly,uniforms:{cellSize:{value:e},lineColor:{value:new G(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function zy(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function By({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(zy,{}),(0,$.jsx)(Fy,{}),(0,$.jsx)(hy,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(Ry,{...r})]})}var Vy={iso:new U(.6,.5,.6),front:new U(0,.3,1),top:new U(0,1,-.01),right:new U(1,.3,0)};function Hy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=gy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Vi(new U,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Vy[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function Uy(){let e=k_(e=>e.camera);return(0,$.jsx)(my,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function Wy(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function Gy({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,children:s}){return(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(Wy,{}),a===`orthographic`&&(0,$.jsx)(Uy,{}),(0,$.jsx)(By,{autoRotate:r,gridVisible:i}),(0,$.jsx)(Hy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),s]})}var Ky=[`iso`,`front`,`top`,`right`],qy={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},Jy={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function Yy({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,className:m}){return(0,$.jsxs)(`div`,{className:m,style:m?void 0:Qy,children:[(f||p)&&(0,$.jsxs)(Xy,{children:[f&&(0,$.jsx)(Zy,{label:`Fit`,onClick:f}),p&&(0,$.jsx)(Zy,{label:`Snap`,onClick:p})]}),e&&t&&(0,$.jsx)(Xy,{children:Object.keys(qy).map(n=>(0,$.jsx)(Zy,{label:qy[n],active:e===n,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(Xy,{children:[r&&(0,$.jsx)(Zy,{label:`Edges`,active:n,onClick:r}),a&&(0,$.jsx)(Zy,{label:`Grid`,active:i,onClick:a}),s&&(0,$.jsx)(Zy,{label:`Spin`,active:o,onClick:s}),l&&(0,$.jsx)(Zy,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,onClick:l})]}),d&&(0,$.jsx)(Xy,{children:Ky.map(e=>(0,$.jsx)(Zy,{label:Jy[e],active:u===e,onClick:()=>{d(e)}},e))})]})}function Xy({children:e}){return(0,$.jsx)(`div`,{style:$y,children:e})}function Zy({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...eb,...t?tb:null},children:e})}var Qy={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},$y={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},eb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},tb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`};function nb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(rb,{label:`Size`,value:`${ib(e[0])} × ${ib(e[1])} × ${ib(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(rb,{label:`Volume`,value:`${ib(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(rb,{label:`Area`,value:`${ib(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(rb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(rb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:ab,children:c})}function rb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:ob,children:[(0,$.jsx)(`span`,{style:sb,children:e}),(0,$.jsx)(`span`,{style:{...cb,...n?{color:n}:null},children:t})]})}function ib(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var ab={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},sb={color:`#7b8591`},cb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},lb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function ub(e){return lb[e]??`Surface`}function db(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function fb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:mb,children:[(0,$.jsxs)(`div`,{style:hb,children:[(0,$.jsxs)(`span`,{style:gb,children:[ub(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:_b,children:`✕`})]}),(0,$.jsx)(pb,{label:`Area`,value:`${db(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(pb,{label:`Normal`,value:`${db(i)}, ${db(a)}, ${db(o)}`})]})}function pb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:vb,children:[(0,$.jsx)(`span`,{style:yb,children:e}),(0,$.jsx)(`span`,{style:bb,children:t})]})}var mb={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},hb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},gb={color:`#6ee7d7`,fontSize:12,fontWeight:600},_b={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb=[`x`,`y`,`z`];function Sb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:wb,children:[(0,$.jsx)(Cb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[xb.map(e=>(0,$.jsx)(Cb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Db,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Cb,{label:`Flip`,active:c,onClick:l})]})]})}function Cb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Tb,...t?Eb:null},children:e})}var wb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Tb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Eb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Db={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Ob(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function kb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Ab({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Ob(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-BEdKKhct.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:kb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var jb=[`iso`,`front`,`top`,`right`],Mb=new Set;function Nb(e){return jb.includes(e)}function Pb(e){return Mb.add(e),()=>Mb.delete(e)}function Fb(){globalThis.__ready=!0}function Ib(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{if(Nb(e))for(let t of Mb)t(e)}}var Lb=new URLSearchParams(window.location.search),Rb=Lb.get(`ui`)!==`0`,zb=Lb.get(`dims`)===`1`;function Bb(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function Vb(){let e=Ab({inspect:Rb}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1);(0,v.useEffect)(()=>Pb(n),[]);let O=(0,v.useCallback)(()=>{m(e=>e+1)},[]),k=(0,v.useCallback)(e=>{g(e)},[]),A=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),j=(0,v.useMemo)(()=>e.status===`ready`?_y(e.data):null,[e]),M=S===`x`?0:S===`y`?1:2,ee=j?j.min[M]:0,te=j?j.max[M]:1,N=(0,v.useCallback)(e=>{if(!j)return 0;let t=e===`x`?0:e===`y`?1:2;return(j.min[t]+j.max[t])/2},[j]),P=(0,v.useCallback)(()=>{x(e=>(e||T(N(S)),!e))},[N,S]),F=(0,v.useCallback)(e=>{C(e),T(N(e))},[N]),ne=(0,v.useMemo)(()=>b&&j?[yy(S,w,E)]:void 0,[b,j,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(Gy,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Fb,children:[(0,$.jsx)(xy,{data:e.data,viewMode:r,...ne?{clippingPlanes:ne}:{},...Rb?{onFacePick:k,onFaceHover:A}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Cy,{edges:e.data.edges,...ne?{clippingPlanes:ne}:{}}),Rb&&(0,$.jsx)(jy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_})]}),Rb&&(0,$.jsx)(fb,{face:h,onClear:()=>{g(null)}}),Rb&&(0,$.jsx)(Sb,{enabled:b,onToggle:P,axis:S,onAxisChange:F,position:w,min:ee,max:te,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Rb&&(0,$.jsx)(nb,{dims:vy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Rb&&zb&&(0,$.jsx)(nb,{dims:vy(e.data)}),Rb&&(0,$.jsx)(Yy,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:O,onScreenshot:Bb})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Ib();var Hb=document.getElementById(`root`);Hb&&(0,y.createRoot)(Hb).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(Vb,{})}));
@@ -1 +1 @@
1
- function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-verify] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-verify] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-NH9yA5tB.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
1
+ function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-verify] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-verify] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-dcJyzEyf.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
@@ -14,7 +14,7 @@
14
14
  background: #1a1d21;
15
15
  }
16
16
  </style>
17
- <script type="module" crossorigin src="./assets/index-CnQ8btWD.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-CMFwgb8F.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>
Binary file