brepjs-cad 0.177.0 → 0.178.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.
- package/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/{evaluate-TZ0h4RP0.js → evaluate-C6FBiEVI.js} +1 -1
- package/dist/{evaluate-DDwQkzN-.cjs → evaluate-sRn-Xvw4.cjs} +1 -1
- package/dist/export3dm/export3dm.cjs +1 -1
- package/dist/export3dm/export3dm.js +1 -1
- package/dist/preview/preview.cjs +1 -1
- package/dist/preview/preview.js +1 -1
- package/package.json +1 -1
- package/viewer/dist/assets/{index-Cq6KRusM.js → index-DpWxoifW.js} +2 -2
- package/viewer/dist/index.html +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.178.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.177.0...brepjs-cad-v0.178.0) (2026-08-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **brepjs-cad:** ship the Z-up preview camera in the bundled viewer ([#2265](https://github.com/andymai/brepjs/issues/2265)) ([9993376](https://github.com/andymai/brepjs/commit/9993376b323ff47ee67583a57d88f82f0d343fc2)), closes [#2264](https://github.com/andymai/brepjs/issues/2264)
|
|
9
|
+
|
|
3
10
|
## [0.177.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.176.0...brepjs-cad-v0.177.0) (2026-08-26)
|
|
4
11
|
|
|
5
12
|
|
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ npx -y -p brepjs-cad brep part.brep.ts --serve # p
|
|
|
53
53
|
npx -y -p brepjs-cad brep part.brep.ts --serve --no-open # preview server; just print the URL (no browser)
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
`--snapshot`/`--serve` use the bundled viewer (shipped under `viewer/dist`, including the OCCT WASM). The `--serve` link is interactive: a toolbar offers view presets + fit, solid/wireframe/x-ray modes, edge/grid toggles, a turntable, click-to-inspect face picking, a section/clipping plane, a measurements panel, and an in-browser PNG screenshot. `--snapshot` loads the same page with `ui=0` to suppress the toolbar, and burns the bounding-box size into each PNG (`dims=1`) so the agent can read scale from the image.
|
|
56
|
+
`--snapshot`/`--serve` use the bundled viewer (shipped under `viewer/dist`, including the OCCT WASM). It renders in brepjs's native Z-up coordinates: Z is up, the XY plane is horizontal, and models are never rotated to fit the renderer's convention. The `--serve` link is interactive: a toolbar offers view presets + fit, solid/wireframe/x-ray modes, edge/grid toggles, a turntable, click-to-inspect face picking, a section/clipping plane, a measurements panel, and an in-browser PNG screenshot. `--snapshot` loads the same page with `ui=0` to suppress the toolbar, and burns the bounding-box size into each PNG (`dims=1`) so the agent can read scale from the image.
|
|
57
57
|
|
|
58
58
|
`--serve` prints the viewer URL and, in an interactive terminal, opens it in your default browser. Auto-open is skipped when it would be unwanted: when the server is reused (a tab is already open), under CI, when output is piped (non-TTY, e.g. agent runs), or on Linux with no display server. Pass `--no-open` to always suppress it.
|
|
59
59
|
|
|
@@ -11479,7 +11479,7 @@ var require_jsx_runtime = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
|
11479
11479
|
}));
|
|
11480
11480
|
require_react();
|
|
11481
11481
|
require_jsx_runtime();
|
|
11482
|
-
new Vector3(.6,
|
|
11482
|
+
new Vector3(.6, -.6, .5), new Vector3(0, -1, .3), new Vector3(0, .01, 1), new Vector3(1, 0, .3);
|
|
11483
11483
|
var groupStyle = {
|
|
11484
11484
|
display: "flex",
|
|
11485
11485
|
flexDirection: "column",
|
|
@@ -11478,7 +11478,7 @@ var require_jsx_runtime = /* @__PURE__ */ require_rolldown_runtime.__commonJSMin
|
|
|
11478
11478
|
}));
|
|
11479
11479
|
require_react();
|
|
11480
11480
|
require_jsx_runtime();
|
|
11481
|
-
new Vector3(.6,
|
|
11481
|
+
new Vector3(.6, -.6, .5), new Vector3(0, -1, .3), new Vector3(0, .01, 1), new Vector3(1, 0, .3);
|
|
11482
11482
|
var groupStyle = {
|
|
11483
11483
|
display: "flex",
|
|
11484
11484
|
flexDirection: "column",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../rolldown-runtime-y5ARvAq5.cjs");
|
|
3
|
-
const require_evaluate = require("../evaluate-
|
|
3
|
+
const require_evaluate = require("../evaluate-sRn-Xvw4.cjs");
|
|
4
4
|
let node_fs = require("node:fs");
|
|
5
5
|
let node_path = require("node:path");
|
|
6
6
|
let rhino3dm = require("rhino3dm");
|
package/dist/preview/preview.cjs
CHANGED
|
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_usingCtx = require("../usingCtx-LY0tPCbQ.cjs");
|
|
3
3
|
const require_openBrowser = require("../openBrowser-Bip99cQv.cjs");
|
|
4
4
|
const require_snapshot_static = require("../snapshot/static.cjs");
|
|
5
|
-
const require_evaluate = require("../evaluate-
|
|
5
|
+
const require_evaluate = require("../evaluate-sRn-Xvw4.cjs");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
let node_path = require("node:path");
|
|
8
8
|
let node_http = require("node:http");
|
package/dist/preview/preview.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as evaluatePreview, r as encodePreviewPayload } from "../evaluate-
|
|
1
|
+
import { n as evaluatePreview, r as encodePreviewPayload } from "../evaluate-C6FBiEVI.js";
|
|
2
2
|
import { v as loadBrep } from "../usingCtx-BDYtpr4t.js";
|
|
3
3
|
import { a as isWatchRelevant, i as debounce, n as shouldAutoOpen, o as watchRootFor, r as createSerialRunner, s as watchTree, t as openBrowser } from "../openBrowser-Dg9oDOte.js";
|
|
4
4
|
import { VIEWER_DIST, safeJoin, sendFile } from "../snapshot/static.js";
|
package/package.json
CHANGED
|
@@ -4178,7 +4178,7 @@ No matching component was found for:
|
|
|
4178
4178
|
varying vec2 vWorldPos;
|
|
4179
4179
|
void main() {
|
|
4180
4180
|
vec4 worldPos = modelMatrix * vec4(position, 1.0);
|
|
4181
|
-
vWorldPos = worldPos.
|
|
4181
|
+
vWorldPos = worldPos.xy;
|
|
4182
4182
|
gl_Position = projectionMatrix * viewMatrix * worldPos;
|
|
4183
4183
|
}
|
|
4184
4184
|
`,qy=`
|
|
@@ -4205,4 +4205,4 @@ No matching component was found for:
|
|
|
4205
4205
|
|
|
4206
4206
|
gl_FragColor = vec4(lineColor, alpha);
|
|
4207
4207
|
}
|
|
4208
|
-
`;function Jy({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:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){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 Xy({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)(Yy,{}),(0,$.jsx)(Gy,{}),(0,$.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(Jy,{...r})]})}var Zy={iso:new K(.6,.5,.6),front:new K(0,.3,1),top:new K(0,1,-.01),right:new K(1,.3,0)};function Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=x_(e=>e.camera),o=x_(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=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new K,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[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 $y(){let e=x_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,$.jsx)(yy,{makeDefault:!0,position:t.current,zoom:20,near:.1,far:2e3})}function eb(){let e=x_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(Ay,{onError:s,fallback:c,children:(0,$.jsxs)(Hv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(eb,{}),a===`orthographic`&&(0,$.jsx)($y,{}),(0,$.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,$.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({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,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(ob,{touch:m,children:[f&&(0,$.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,$.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(ob,{touch:m,children:[r&&(0,$.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(ob,{touch:m,children:nb.map(e=>(0,$.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={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`},lb={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)`},ub={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`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({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)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:vb,children:[(0,$.jsx)(`span`,{style:yb,children:e}),(0,$.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={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`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={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 Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({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:Eb,children:[(0,$.jsxs)(`div`,{style:Db,children:[(0,$.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,$.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Ab,children:[(0,$.jsx)(`span`,{style:jb,children:e}),(0,$.jsx)(`span`,{style:Mb,children:t})]})}var Eb={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`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({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:Ib,children:[(0,$.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Nb.map(e=>(0,$.jsx)(Fb,{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:{...zb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={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`},Lb={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`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e,t){let n=t*3,r=0,i=e.length-1;for(;r<=i;){let t=r+i>>>1,a=e[t];if(!a)break;if(n<a.start)i=t-1;else if(n>=a.start+a.count)r=t+1;else return a}return null}var Vb=e=>e+3&-4;function Hb(e){let t=new DataView(e);if(e.byteLength<8||t.getUint32(0,!0)!==1112560214)throw Error(`not a preview payload (bad magic)`);let n=t.getUint32(4,!0),r=JSON.parse(new TextDecoder().decode(new Uint8Array(e,8,n)));if(r.version!==1)throw Error(`unsupported preview payload version ${r.version}`);let i=8+Vb(n),a=(t,n)=>{let r=new t(e,i,n);return i+=n*4,r};return{data:{position:a(Float32Array,r.buffers.position),normal:a(Float32Array,r.buffers.normal),index:a(Uint32Array,r.buffers.index),edges:a(Float32Array,r.buffers.edges),...r.faceGroups?{faceGroups:[...r.faceGroups]}:{}},elements:r.elements,failed:r.failed,tree:r.tree,measurements:r.measurements}}function Ub(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Wb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Gb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{if(new URLSearchParams(window.location.search).has(`preview`)){n({status:`loading`});let e=!1,t=async()=>{try{let t=await fetch(`/__preview/model`);if(!t.ok)throw Error(`fetch preview model: ${t.status}`);let r=Hb(await t.arrayBuffer());if(e)return;n({status:`ready`,data:r.data,measurements:{valid:r.failed.length===0},preview:{elements:r.elements,failed:r.failed,tree:r.tree}})}catch(t){e||n({status:`error`,error:t instanceof Error?t.message:String(t)})}};t();let r=new EventSource(`/__preview/events`);return r.onmessage=()=>void t(),()=>{e=!0,r.close()}}let t=Ub(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-C7TmNmhp.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:Wb(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 Kb=[`iso`,`front`,`top`,`right`],qb=new Set;function Jb(e){return Kb.includes(e)}function Yb(e){return qb.add(e),()=>qb.delete(e)}function Xb(e){for(let t of qb)t(e)}function Zb(){globalThis.__ready=!0}function Qb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Jb(e)&&Xb({view:e})},e.__setScene=e=>{e&&Jb(e.view)&&Xb(e)}}function $b({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(iy,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var ex=new URLSearchParams(window.location.search),tx=ex.get(`ui`)!==`0`,nx=ex.get(`dims`)===`1`;function rx(){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 ix({preview:e,selected:t}){return(0,$.jsxs)(`div`,{style:{position:`absolute`,top:12,left:12,maxWidth:340,maxHeight:`60vh`,overflowY:`auto`,background:`rgba(16, 20, 24, 0.85)`,color:`#cfd6dc`,font:`12px monospace`,padding:`8px 10px`,borderRadius:6,pointerEvents:`auto`},children:[(0,$.jsxs)(`div`,{children:[`elements: `,e.elements.length,e.failed.length>0&&(0,$.jsxs)(`span`,{style:{color:`#e88`},children:[` · `,e.failed.length,` failed`]})]}),t&&(0,$.jsxs)(`div`,{style:{color:`#ffd479`},children:[`selected: `,t]}),e.failed.map(e=>(0,$.jsxs)(`div`,{style:{color:`#e88`},children:[`✗ `,e]},e))]})}function ax(){let e=Gb({inspect:tx}),[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),[O,k]=(0,v.useState)([]),[A,ee]=(0,v.useState)(null),j=e.status===`ready`?e.preview:void 0,M=(0,v.useCallback)(e=>{j&&ee(Bb(j.elements,e)?.keyPath??null)},[j]),te=(0,v.useCallback)(()=>{m(e=>e+1)},[]),N=(0,v.useCallback)(e=>{g(e)},[]),P=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),F=(0,v.useMemo)(()=>e.status===`ready`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Yb(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&F){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(F.min[t]+e.section.frac*(F.max[t]-F.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[F]);let ne=S===`x`?0:S===`y`?1:2,re=F?F.min[ne]:0,ie=F?F.max[ne]:1,I=(0,v.useCallback)(e=>{if(!F)return 0;let t=e===`x`?0:e===`y`?1:2;return(F.min[t]+F.max[t])/2},[F]),ae=(0,v.useCallback)(()=>{x(e=>(e||T(I(S)),!e))},[I,S]),L=(0,v.useCallback)(e=>{C(e),T(I(e))},[I]),R=(0,v.useMemo)(()=>b&&F?[wy(S,w,E)]:void 0,[b,F,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)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Zb,children:[(0,$.jsx)(ky,{data:e.data,viewMode:r,...R?{clippingPlanes:R}:{},...tx?{onFacePick:N,onFaceHover:P}:{},...j?{onTrianglePick:M}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Ny,{edges:e.data.edges,...R?{clippingPlanes:R}:{}}),tx&&(0,$.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)($b,{marks:O})]}),tx&&(0,$.jsx)(wb,{face:h,onClear:()=>{g(null)}}),tx&&(0,$.jsx)(Pb,{enabled:b,onToggle:ae,axis:S,onAxisChange:L,position:w,min:re,max:ie,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),tx&&(0,$.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!tx&&nx&&(0,$.jsx)(mb,{dims:Cy(e.data)}),j&&(0,$.jsx)(ix,{preview:j,selected:A}),tx&&(0,$.jsx)(ab,{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:te,onScreenshot:rx})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Qb();var ox=document.getElementById(`root`);ox&&(0,y.createRoot)(ox).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(ax,{})}));
|
|
4208
|
+
`;function Jy({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:[0,0,0],position:[0,0,-.01],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65],position:[0,0,1]}),(0,$.jsx)(`directionalLight`,{position:[-50,-80,60],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-30,-40],intensity:.15,color:`#e0e8ff`})]})}function Xy({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)(Yy,{}),(0,$.jsx)(Gy,{}),(0,$.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(Jy,{...r})]})}var Zy={iso:new K(.6,-.6,.5),front:new K(0,-1,.3),top:new K(0,.01,1),right:new K(1,0,.3)};function Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=x_(e=>e.camera),o=x_(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=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new K,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[t].clone().normalize();a.up.set(0,0,1),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 $y(){let e=x_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,$.jsx)(yy,{makeDefault:!0,position:t.current,up:[0,0,1],zoom:20,near:.1,far:2e3})}function eb(){let e=x_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(Ay,{onError:s,fallback:c,children:(0,$.jsxs)(Hv,{camera:{position:[1,-1,1],up:[0,0,1]},frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(eb,{}),a===`orthographic`&&(0,$.jsx)($y,{}),(0,$.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,$.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({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,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(ob,{touch:m,children:[f&&(0,$.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,$.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(ob,{touch:m,children:[r&&(0,$.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(ob,{touch:m,children:nb.map(e=>(0,$.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={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`},lb={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)`},ub={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`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({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)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:vb,children:[(0,$.jsx)(`span`,{style:yb,children:e}),(0,$.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={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`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={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 Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({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:Eb,children:[(0,$.jsxs)(`div`,{style:Db,children:[(0,$.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,$.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Ab,children:[(0,$.jsx)(`span`,{style:jb,children:e}),(0,$.jsx)(`span`,{style:Mb,children:t})]})}var Eb={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`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({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:Ib,children:[(0,$.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Nb.map(e=>(0,$.jsx)(Fb,{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:{...zb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={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`},Lb={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`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e,t){let n=t*3,r=0,i=e.length-1;for(;r<=i;){let t=r+i>>>1,a=e[t];if(!a)break;if(n<a.start)i=t-1;else if(n>=a.start+a.count)r=t+1;else return a}return null}var Vb=e=>e+3&-4;function Hb(e){let t=new DataView(e);if(e.byteLength<8||t.getUint32(0,!0)!==1112560214)throw Error(`not a preview payload (bad magic)`);let n=t.getUint32(4,!0),r=JSON.parse(new TextDecoder().decode(new Uint8Array(e,8,n)));if(r.version!==1)throw Error(`unsupported preview payload version ${r.version}`);let i=8+Vb(n),a=(t,n)=>{let r=new t(e,i,n);return i+=n*4,r};return{data:{position:a(Float32Array,r.buffers.position),normal:a(Float32Array,r.buffers.normal),index:a(Uint32Array,r.buffers.index),edges:a(Float32Array,r.buffers.edges),...r.faceGroups?{faceGroups:[...r.faceGroups]}:{}},elements:r.elements,failed:r.failed,tree:r.tree,measurements:r.measurements}}function Ub(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Wb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Gb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{if(new URLSearchParams(window.location.search).has(`preview`)){n({status:`loading`});let e=!1,t=async()=>{try{let t=await fetch(`/__preview/model`);if(!t.ok)throw Error(`fetch preview model: ${t.status}`);let r=Hb(await t.arrayBuffer());if(e)return;n({status:`ready`,data:r.data,measurements:{valid:r.failed.length===0},preview:{elements:r.elements,failed:r.failed,tree:r.tree}})}catch(t){e||n({status:`error`,error:t instanceof Error?t.message:String(t)})}};t();let r=new EventSource(`/__preview/events`);return r.onmessage=()=>void t(),()=>{e=!0,r.close()}}let t=Ub(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-C7TmNmhp.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:Wb(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 Kb=[`iso`,`front`,`top`,`right`],qb=new Set;function Jb(e){return Kb.includes(e)}function Yb(e){return qb.add(e),()=>qb.delete(e)}function Xb(e){for(let t of qb)t(e)}function Zb(){globalThis.__ready=!0}function Qb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Jb(e)&&Xb({view:e})},e.__setScene=e=>{e&&Jb(e.view)&&Xb(e)}}function $b({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(iy,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var ex=new URLSearchParams(window.location.search),tx=ex.get(`ui`)!==`0`,nx=ex.get(`dims`)===`1`;function rx(){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 ix({preview:e,selected:t}){return(0,$.jsxs)(`div`,{style:{position:`absolute`,top:12,left:12,maxWidth:340,maxHeight:`60vh`,overflowY:`auto`,background:`rgba(16, 20, 24, 0.85)`,color:`#cfd6dc`,font:`12px monospace`,padding:`8px 10px`,borderRadius:6,pointerEvents:`auto`},children:[(0,$.jsxs)(`div`,{children:[`elements: `,e.elements.length,e.failed.length>0&&(0,$.jsxs)(`span`,{style:{color:`#e88`},children:[` · `,e.failed.length,` failed`]})]}),t&&(0,$.jsxs)(`div`,{style:{color:`#ffd479`},children:[`selected: `,t]}),e.failed.map(e=>(0,$.jsxs)(`div`,{style:{color:`#e88`},children:[`✗ `,e]},e))]})}function ax(){let e=Gb({inspect:tx}),[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),[O,k]=(0,v.useState)([]),[A,ee]=(0,v.useState)(null),j=e.status===`ready`?e.preview:void 0,M=(0,v.useCallback)(e=>{j&&ee(Bb(j.elements,e)?.keyPath??null)},[j]),te=(0,v.useCallback)(()=>{m(e=>e+1)},[]),N=(0,v.useCallback)(e=>{g(e)},[]),P=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),F=(0,v.useMemo)(()=>e.status===`ready`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Yb(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&F){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(F.min[t]+e.section.frac*(F.max[t]-F.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[F]);let ne=S===`x`?0:S===`y`?1:2,re=F?F.min[ne]:0,ie=F?F.max[ne]:1,I=(0,v.useCallback)(e=>{if(!F)return 0;let t=e===`x`?0:e===`y`?1:2;return(F.min[t]+F.max[t])/2},[F]),ae=(0,v.useCallback)(()=>{x(e=>(e||T(I(S)),!e))},[I,S]),L=(0,v.useCallback)(e=>{C(e),T(I(e))},[I]),R=(0,v.useMemo)(()=>b&&F?[wy(S,w,E)]:void 0,[b,F,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)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Zb,children:[(0,$.jsx)(ky,{data:e.data,viewMode:r,...R?{clippingPlanes:R}:{},...tx?{onFacePick:N,onFaceHover:P}:{},...j?{onTrianglePick:M}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Ny,{edges:e.data.edges,...R?{clippingPlanes:R}:{}}),tx&&(0,$.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)($b,{marks:O})]}),tx&&(0,$.jsx)(wb,{face:h,onClear:()=>{g(null)}}),tx&&(0,$.jsx)(Pb,{enabled:b,onToggle:ae,axis:S,onAxisChange:L,position:w,min:re,max:ie,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),tx&&(0,$.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!tx&&nx&&(0,$.jsx)(mb,{dims:Cy(e.data)}),j&&(0,$.jsx)(ix,{preview:j,selected:A}),tx&&(0,$.jsx)(ab,{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:te,onScreenshot:rx})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Qb();var ox=document.getElementById(`root`);ox&&(0,y.createRoot)(ox).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(ax,{})}));
|
package/viewer/dist/index.html
CHANGED