brep-io-kernel 1.0.266 → 1.0.268

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +3 -5
  2. package/dist/about.html +2 -2
  3. package/dist/apiExamples/BREP_Booleans.html +2 -2
  4. package/dist/apiExamples/BREP_Export.html +2 -2
  5. package/dist/apiExamples/BREP_Primitives.html +2 -2
  6. package/dist/apiExamples/BREP_Transforms.html +2 -2
  7. package/dist/apiExamples/Embeded_2D_Sketcher.html +2 -2
  8. package/dist/apiExamples/Embeded_CAD.html +2 -2
  9. package/dist/apiExamples/Embeded_CAD_Integration_Test.html +2 -2
  10. package/dist/assets/{apiExample_BREP_Booleans-BYmpqcsp.js → apiExample_BREP_Booleans-BQuhH0p9.js} +1 -1
  11. package/dist/assets/{apiExample_BREP_Export-uBjod_wt.js → apiExample_BREP_Export-DxoW5Siv.js} +1 -1
  12. package/dist/assets/{apiExample_BREP_Primitives-6305hZzi.js → apiExample_BREP_Primitives-DObxD2ky.js} +1 -1
  13. package/dist/assets/{apiExample_BREP_Transforms-BzoYBAov.js → apiExample_BREP_Transforms-B2hpG-YX.js} +1 -1
  14. package/dist/assets/{apiExample_Embeded_2D_Sketcher-D1NLjBBJ.js → apiExample_Embeded_2D_Sketcher-Dg9Zu_hE.js} +1 -1
  15. package/dist/assets/{apiExample_Embeded_CAD-CyBvK6VA.js → apiExample_Embeded_CAD-BpJVoWOu.js} +1 -1
  16. package/dist/assets/{apiExample_Embeded_CAD_Integration_Test-GmK-MuGv.js → apiExample_Embeded_CAD_Integration_Test-B_Rho3aP.js} +1 -1
  17. package/dist/assets/{brep-kernel-PNIMTlaV.js → brep-kernel-Bj1tafeh.js} +7 -3
  18. package/dist/assets/{browserTests-B-7L1X5b.js → browserTests-DyAKA3LJ.js} +3 -3
  19. package/dist/assets/{index.es-BCqdB02m.js → index.es-CV0V3j9t.js} +1 -1
  20. package/dist/assets/{javascript-hVMGvX5S.js → javascript-CMfqYyeC.js} +1 -1
  21. package/dist/assets/{main-cad-3Myw0wlX.js → main-cad-B_iFo8MJ.js} +11 -7
  22. package/dist/assets/{test-D2BDjo1w.js → test-DTqZegA4.js} +3 -3
  23. package/dist/cad.html +1 -1
  24. package/dist/help/index.html +2 -2
  25. package/dist/help/search-index.json +1 -1
  26. package/dist/test.html +1 -1
  27. package/dist/viewer.html +1 -1
  28. package/dist-kernel/brep-kernel.js +30 -26
  29. package/dist-kernel/help/index.html +2 -2
  30. package/dist-kernel/help/search-index.json +1 -1
  31. package/package.json +2 -4
  32. package/src/UI/toolbarButtons/scriptRunnerButton.js +11 -3
@@ -1,6 +1,6 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/brep-kernel-PNIMTlaV.js","assets/preload-helper-ZNr0Qq7Q.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/brep-kernel-Bj1tafeh.js","assets/preload-helper-ZNr0Qq7Q.js"])))=>i.map(i=>d[i]);
2
2
  var H=Object.defineProperty;var c=(e,t)=>H(e,"name",{value:t,configurable:!0});import"./modulepreload-polyfill-BdX5DvLD.js";import{_ as B}from"./preload-helper-ZNr0Qq7Q.js";const $=document.getElementById("status"),J=document.getElementById("log"),w=document.getElementById("btn-create"),V=document.getElementById("btn-destroy"),T=document.getElementById("btn-apply-css"),F=document.getElementById("btn-apply-theme"),L=document.getElementById("btn-export-svg"),G=document.getElementById("geometry-color"),_=document.getElementById("point-color"),N=document.getElementById("constraint-color"),A=document.getElementById("background-color"),P=document.getElementById("point-size-px"),O=document.getElementById("curve-thickness-px"),v=document.getElementById("sidebar-expanded"),g=document.getElementById("grid-visible"),R=document.getElementById("grid-spacing"),D=document.getElementById("css-input"),K=document.getElementById("sketch-status"),U=document.getElementById("sketch-host"),p=document.getElementById("event-output"),y=document.getElementById("svg-preview"),C=document.getElementById("path-output");let n=null,S=0,E=0,k=0;const W=5,a=c((...e)=>{const t=e.map(s=>{if(typeof s=="string")return s;try{return JSON.stringify(s)}catch{return String(s)}}).join(" ");J.textContent+=`${t}
3
3
  `,console.log(...e)},"log"),u=c((e,t)=>{$.textContent=e,$.className=`status ${t}`},"setStatus"),o=c(e=>{K.textContent=e},"setSketchStatus"),x=c(e=>{w.disabled=e,V.disabled=!e,T.disabled=!e,F.disabled=!e,L.disabled=!e},"setSketchButtons"),h=c((e,t=null)=>{const s=new Date().toLocaleTimeString(),i=t==null?`[${s}] ${e}`:`[${s}] ${e} ${JSON.stringify(t)}`,l=p.textContent==="(No sketch events yet)"?[]:p.textContent.split(`
4
4
  `).filter(Boolean),d=[i,...l].slice(0,W);p.textContent=d.length?d.join(`
5
- `):"(No sketch events yet)"},"pushEvent"),M=c(()=>({geometryColor:G.value,pointColor:_.value,constraintColor:N.value,backgroundColor:A.value,pointSizePx:Math.max(1,Number(P.value)||10),curveThicknessPx:Math.max(.5,Number(O.value)||2)}),"currentTheme"),b=c(()=>{const e=Number(R.value);return Number.isFinite(e)&&e>0?e:1},"currentGridSpacing"),X=c(async()=>{if(n)return;const{Sketcher2DEmbed:e}=await B(async()=>{const{Sketcher2DEmbed:t}=await import("./brep-kernel-PNIMTlaV.js");return{Sketcher2DEmbed:t}},__vite__mapDeps([0,1]));n=new e({cssText:D.value,...M(),sidebarExpanded:v.checked,gridVisible:g.checked,gridSpacing:b(),onChange:c(t=>{S+=1;const s=Array.isArray(t?.geometries)?t.geometries.length:0;o(`Sketch updated (${S}). Geometries: ${s}`),h("onChange",{geometries:s})},"onChange"),onFinished:c(t=>{E+=1;const s=Array.isArray(t?.geometries)?t.geometries.length:0;o(`Sketch finished (${E}). Geometries: ${s}`),h("onFinished",{geometries:s}),j().catch(i=>{console.error(i),o(`Failed to export SVG after Finish: ${i?.message||String(i)}`)})},"onFinished"),onCancelled:c(()=>{k+=1,o(`Sketch cancelled (${k}).`),h("onCancelled")},"onCancelled")}),await n.mount(U),await n.getSketch(),x(!0),o("Sketcher iframe mounted. Draw geometry and click Export SVG Paths.")},"attachSketcher"),Y=c(async()=>{n&&(await n.destroy(),n=null,S=0,E=0,k=0,x(!1),o("Sketcher destroyed."),p.textContent="(No sketch events yet)",y.innerHTML="",C.textContent="")},"detachSketcher"),q=c(async()=>{n&&(await n.setCss(D.value),o("Custom CSS applied to iframe."))},"applySketchCss"),r=c(async()=>{n&&(await n.setTheme(M()),await n.setSidebarExpanded(v.checked),typeof n.setGrid=="function"?await n.setGrid({visible:g.checked,spacing:b()}):(typeof n.setGridVisible=="function"&&await n.setGridVisible(g.checked),typeof n.setGridSpacing=="function"&&await n.setGridSpacing(b())),o("Theme + sidebar + grid state applied to iframe."))},"applySketchTheme"),j=c(async()=>{if(!n)return;const e=await n.exportSVG({flipY:!0,precision:3,stroke:"#111111",strokeWidth:1.5,fill:"none",padding:12});await n.getSketch({preferCached:!0}),y.innerHTML=e.svg,C.textContent=e.paths.length?e.paths.map(t=>`id=${t.id} type=${t.type} d="${t.d}"`).join(`
6
- `):"(No sketch geometry to export)",o(`Exported ${e.paths.length} SVG paths.`),y.scrollIntoView({behavior:"smooth",block:"start"})},"exportSvg");w.addEventListener("click",()=>{X().catch(e=>{console.error(e),o(`Failed to create sketcher: ${e?.message||String(e)}`)})});V.addEventListener("click",()=>{Y().catch(e=>{console.error(e),o(`Failed to destroy sketcher: ${e?.message||String(e)}`)})});T.addEventListener("click",()=>{q().catch(e=>{console.error(e),o(`Failed to apply CSS: ${e?.message||String(e)}`)})});L.addEventListener("click",()=>{j().catch(e=>{console.error(e),o(`Failed to export SVG: ${e?.message||String(e)}`)})});F.addEventListener("click",()=>{r().catch(e=>{console.error(e),o(`Failed to apply theme: ${e?.message||String(e)}`)})});[G,_,N,A,P,O].forEach(e=>{e.addEventListener("input",()=>{n&&r().catch(t=>{console.error(t),o(`Failed to apply theme: ${t?.message||String(t)}`)})})});v.addEventListener("change",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply sidebar state: ${e?.message||String(e)}`)})});g.addEventListener("change",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply grid visibility: ${e?.message||String(e)}`)})});R.addEventListener("input",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply grid spacing: ${e?.message||String(e)}`)})});x(!1);C.textContent="(No SVG exported yet)";(async()=>{u("Importing bundle...","pending");const e=await B(()=>import("./brep-kernel-PNIMTlaV.js"),__vite__mapDeps([0,1]));a("Bundle exports:",Object.keys(e));const{BREP:t}=e;if(!t)throw new Error("BREP export missing from bundle");u("Running kernel checks...","pending");const s=new t.Cube({x:2,y:3,z:4,name:"Cube"}),i=s.volume();a("Cube volume:",i);const l=new t.Sphere({r:1,resolution:24,name:"Sphere"}),d=l.getTriangleCount();a("Sphere triangles:",d);const f=s.union(l),z=f.volume();a("Union volume:",z),a("Union triangles:",f.getTriangleCount());const m=24,I=Math.abs(i-m)<1e-6;if(a("Cube volume check:",I?"OK":"FAIL","(expected",m,")"),!I)throw new Error(`Cube volume mismatch: ${i} vs ${m}`);u("Success: bundle + WASM OK","ok")})().catch(e=>{console.error(e),a("ERROR:",e&&(e.stack||e.message||String(e))),u("Failed: see log","err")});
5
+ `):"(No sketch events yet)"},"pushEvent"),M=c(()=>({geometryColor:G.value,pointColor:_.value,constraintColor:N.value,backgroundColor:A.value,pointSizePx:Math.max(1,Number(P.value)||10),curveThicknessPx:Math.max(.5,Number(O.value)||2)}),"currentTheme"),b=c(()=>{const e=Number(R.value);return Number.isFinite(e)&&e>0?e:1},"currentGridSpacing"),X=c(async()=>{if(n)return;const{Sketcher2DEmbed:e}=await B(async()=>{const{Sketcher2DEmbed:t}=await import("./brep-kernel-Bj1tafeh.js");return{Sketcher2DEmbed:t}},__vite__mapDeps([0,1]));n=new e({cssText:D.value,...M(),sidebarExpanded:v.checked,gridVisible:g.checked,gridSpacing:b(),onChange:c(t=>{S+=1;const s=Array.isArray(t?.geometries)?t.geometries.length:0;o(`Sketch updated (${S}). Geometries: ${s}`),h("onChange",{geometries:s})},"onChange"),onFinished:c(t=>{E+=1;const s=Array.isArray(t?.geometries)?t.geometries.length:0;o(`Sketch finished (${E}). Geometries: ${s}`),h("onFinished",{geometries:s}),j().catch(i=>{console.error(i),o(`Failed to export SVG after Finish: ${i?.message||String(i)}`)})},"onFinished"),onCancelled:c(()=>{k+=1,o(`Sketch cancelled (${k}).`),h("onCancelled")},"onCancelled")}),await n.mount(U),await n.getSketch(),x(!0),o("Sketcher iframe mounted. Draw geometry and click Export SVG Paths.")},"attachSketcher"),Y=c(async()=>{n&&(await n.destroy(),n=null,S=0,E=0,k=0,x(!1),o("Sketcher destroyed."),p.textContent="(No sketch events yet)",y.innerHTML="",C.textContent="")},"detachSketcher"),q=c(async()=>{n&&(await n.setCss(D.value),o("Custom CSS applied to iframe."))},"applySketchCss"),r=c(async()=>{n&&(await n.setTheme(M()),await n.setSidebarExpanded(v.checked),typeof n.setGrid=="function"?await n.setGrid({visible:g.checked,spacing:b()}):(typeof n.setGridVisible=="function"&&await n.setGridVisible(g.checked),typeof n.setGridSpacing=="function"&&await n.setGridSpacing(b())),o("Theme + sidebar + grid state applied to iframe."))},"applySketchTheme"),j=c(async()=>{if(!n)return;const e=await n.exportSVG({flipY:!0,precision:3,stroke:"#111111",strokeWidth:1.5,fill:"none",padding:12});await n.getSketch({preferCached:!0}),y.innerHTML=e.svg,C.textContent=e.paths.length?e.paths.map(t=>`id=${t.id} type=${t.type} d="${t.d}"`).join(`
6
+ `):"(No sketch geometry to export)",o(`Exported ${e.paths.length} SVG paths.`),y.scrollIntoView({behavior:"smooth",block:"start"})},"exportSvg");w.addEventListener("click",()=>{X().catch(e=>{console.error(e),o(`Failed to create sketcher: ${e?.message||String(e)}`)})});V.addEventListener("click",()=>{Y().catch(e=>{console.error(e),o(`Failed to destroy sketcher: ${e?.message||String(e)}`)})});T.addEventListener("click",()=>{q().catch(e=>{console.error(e),o(`Failed to apply CSS: ${e?.message||String(e)}`)})});L.addEventListener("click",()=>{j().catch(e=>{console.error(e),o(`Failed to export SVG: ${e?.message||String(e)}`)})});F.addEventListener("click",()=>{r().catch(e=>{console.error(e),o(`Failed to apply theme: ${e?.message||String(e)}`)})});[G,_,N,A,P,O].forEach(e=>{e.addEventListener("input",()=>{n&&r().catch(t=>{console.error(t),o(`Failed to apply theme: ${t?.message||String(t)}`)})})});v.addEventListener("change",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply sidebar state: ${e?.message||String(e)}`)})});g.addEventListener("change",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply grid visibility: ${e?.message||String(e)}`)})});R.addEventListener("input",()=>{n&&r().catch(e=>{console.error(e),o(`Failed to apply grid spacing: ${e?.message||String(e)}`)})});x(!1);C.textContent="(No SVG exported yet)";(async()=>{u("Importing bundle...","pending");const e=await B(()=>import("./brep-kernel-Bj1tafeh.js"),__vite__mapDeps([0,1]));a("Bundle exports:",Object.keys(e));const{BREP:t}=e;if(!t)throw new Error("BREP export missing from bundle");u("Running kernel checks...","pending");const s=new t.Cube({x:2,y:3,z:4,name:"Cube"}),i=s.volume();a("Cube volume:",i);const l=new t.Sphere({r:1,resolution:24,name:"Sphere"}),d=l.getTriangleCount();a("Sphere triangles:",d);const f=s.union(l),z=f.volume();a("Union volume:",z),a("Union triangles:",f.getTriangleCount());const m=24,I=Math.abs(i-m)<1e-6;if(a("Cube volume check:",I?"OK":"FAIL","(expected",m,")"),!I)throw new Error(`Cube volume mismatch: ${i} vs ${m}`);u("Success: bundle + WASM OK","ok")})().catch(e=>{console.error(e),a("ERROR:",e&&(e.stack||e.message||String(e))),u("Failed: see log","err")});
package/dist/cad.html CHANGED
@@ -19,7 +19,7 @@
19
19
  <script type="module" crossorigin src="/assets/PartHistory-DJNowO8n.js"></script>
20
20
  <script type="module" crossorigin src="/assets/droppedWorkspaceFiles-8o-ZYOrf.js"></script>
21
21
  <script type="module" crossorigin src="/assets/AnnotationRegistry-PNrk9ZTv.js"></script>
22
- <script type="module" crossorigin src="/assets/main-cad-3Myw0wlX.js"></script>
22
+ <script type="module" crossorigin src="/assets/main-cad-B_iFo8MJ.js"></script>
23
23
  <link rel="stylesheet" crossorigin href="/assets/main-cad-C3E_anfF.css">
24
24
  </head>
25
25
 
@@ -188,7 +188,7 @@ a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
188
188
  <section class="card doc-card doc-page-card">
189
189
 
190
190
  <div class="prose">
191
- <h1><a href="https://BREP.io">BREP.io</a></h1><h1><a href="https://github.com/mmiscool/BREP">Source <a href="https://github.com/mmiscool/BREP" target="_blank" rel="noopener noreferrer">https://github.com/mmiscool/BREP</a></a></h1><ul><li><a href="https://www.npmjs.com/package/brep-io-kernel">NPM package: <code>brep-io-kernel</code> <a href="https://www.npmjs.com/package/brep-io-kernel" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/brep-io-kernel</a></a></li><li><a href="https://BREP.io/apiExamples/index.html">Live API examples <a href="https://BREP.io/apiExamples/index.html" target="_blank" rel="noopener noreferrer">https://BREP.io/apiExamples/index.html</a></a></li><li><a href="https://discord.gg/R5KNAKrQ">Developer Discord <a href="https://discord.gg/R5KNAKrQ" target="_blank" rel="noopener noreferrer">https://discord.gg/R5KNAKrQ</a></a></li></ul><p>BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as <code>Solid</code>, <code>Face</code>, <code>Edge</code>, and <code>Vertex</code>, paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans (<a href="https://github.com/elalish/manifold">manifold-3d</a>), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs.</p><p>This project is in active development and APIs may continue to evolve.</p><h2>Workbenches</h2><ul><li><a href="workbenches__modeling.html">Modeling Workbench</a></li><li><a href="workbenches__import.html">Import Workbench</a></li><li><a href="workbenches__surfacing.html">Surfacing Workbench</a></li><li><a href="workbenches__sheet-metal.html">Sheet Metal Workbench</a></li><li><a href="workbenches__assemblies.html">Assemblies Workbench</a></li><li><a href="workbenches__wire-harness.html">Wire Harness Workbench</a></li><li><a href="workbenches__pmi.html">PMI Workbench</a></li><li><a href="workbenches__all.html">All Workbench</a></li></ul><h2>Screenshots</h2><p><img src="HOME.png" alt="Home" width="280" loading="lazy" /> <a href="modes__modeling.html"><img src="MODELING.png" alt="Modeling Mode" width="280" loading="lazy" /></a> <a href="modes__sketch.html"><img src="SKETCH.png" alt="Sketch Mode" width="280" loading="lazy" /></a> <a href="modes__pmi.html"><img src="PMI.png" alt="PMI Mode" width="280" loading="lazy" /></a> <a href="modes__sheets.html"><img src="SHEETS.png" alt="2D Sheets Mode" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-2D_dialog.png" alt="Image to Face 2D" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-3D_dialog.png" alt="Image to Face 3D" width="280" loading="lazy" /></a></p><h2>Documentation Index</h2><p>General:</p><ul><li><a href="developer-index.html">Developer Docs Index</a></li><li><a href="highlights.html">Highlights</a></li><li><a href="whats-new.html">What&#39;s New</a></li></ul><p>Mode guides:</p><ul><li><a href="modes__modeling.html">Modeling Mode</a></li><li><a href="modes__sketch.html">Sketch Mode</a></li><li><a href="modes__pmi.html">PMI Mode</a></li><li><a href="modes__sheets.html">2D Sheets Mode</a></li></ul><h2>Modeling Feature Docs</h2><p>Feature index:</p><ul><li><a href="features__index.html">All Feature Docs</a></li></ul><p>Primitives and setup:</p><ul><li><a href="features__primitive-cube.html">Primitive Cube</a></li><li><a href="features__primitive-cylinder.html">Primitive Cylinder</a></li><li><a href="features__primitive-cone.html">Primitive Cone</a></li><li><a href="features__primitive-sphere.html">Primitive Sphere</a></li><li><a href="features__primitive-torus.html">Primitive Torus</a></li><li><a href="features__primitive-pyramid.html">Primitive Pyramid</a></li><li><a href="features__plane.html">Plane</a></li><li><a href="features__datum.html">Datum</a></li><li><a href="features__datium.html">Datium</a></li><li><a href="features__sketch.html">Sketch</a></li><li><a href="features__spline.html">Spline</a></li><li><a href="features__helix.html">Helix</a></li></ul><p>Solid operations:</p><ul><li><a href="features__extrude.html">Extrude</a></li><li><a href="features__sweep.html">Sweep</a></li><li><a href="features__tube.html">Tube</a></li><li><a href="features__loft.html">Loft</a></li><li><a href="features__revolve.html">Revolve</a></li><li><a href="features__mirror.html">Mirror</a></li><li><a href="features__boolean.html">Boolean</a></li><li><a href="features__fillet.html">Fillet</a></li><li><a href="features__chamfer.html">Chamfer</a></li><li><a href="features__hole.html">Hole</a></li><li><a href="features__push-face.html">Push Face</a></li><li><a href="features__thicken.html">Thicken</a></li><li><a href="features__offset-shell.html">Offset Shell</a></li><li><a href="features__remesh.html">Remesh</a></li><li><a href="features__transform.html">Transform</a></li></ul><p>Pattern, import, and generation:</p><ul><li><a href="features__pattern.html">Pattern (Legacy Combined)</a></li><li><a href="features__pattern-linear.html">Pattern Linear</a></li><li><a href="features__pattern-radial.html">Pattern Radial</a></li><li><a href="features__import-3d-model.html">Import 3D Model</a></li><li><a href="features__image-heightmap-solid.html">Image Heightmap Solid</a></li><li><a href="features__image-to-face.html">Image to Face</a></li><li><a href="features__text-to-face.html">Text to Face</a></li></ul><p>Assembly and sheet metal:</p><ul><li><a href="features__assembly-component.html">Assembly Component</a></li><li><a href="features__sheet-metal-tab.html">Sheet Metal Tab</a></li><li><a href="features__sheet-metal-contour-flange.html">Sheet Metal Contour Flange</a></li><li><a href="features__sheet-metal-flange.html">Sheet Metal Flange</a></li></ul><p>Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout.</p><h2>Assembly Constraints</h2><ul><li><a href="assembly-constraints__solver.html">Assembly Constraint Solver</a></li><li><a href="assembly-constraints__coincident-constraint.html">Coincident</a></li><li><a href="assembly-constraints__distance-constraint.html">Distance</a></li><li><a href="assembly-constraints__angle-constraint.html">Angle</a></li><li><a href="assembly-constraints__parallel-constraint.html">Parallel</a></li><li><a href="assembly-constraints__touch-align-constraint.html">Touch Align</a></li><li><a href="assembly-constraints__fixed-constraint.html">Fixed</a></li></ul><h2>PMI Annotation Docs</h2><ul><li><a href="pmi-annotations__index.html">PMI Annotations Index</a></li><li><a href="pmi-annotations__linear-dimension.html">Linear Dimension</a></li><li><a href="pmi-annotations__radial-dimension.html">Radial Dimension</a></li><li><a href="pmi-annotations__angle-dimension.html">Angle Dimension</a></li><li><a href="pmi-annotations__leader.html">Leader</a></li><li><a href="pmi-annotations__note.html">Note</a></li><li><a href="pmi-annotations__hole-callout.html">Hole Callout</a></li><li><a href="pmi-annotations__explode-body.html">Explode Body</a></li></ul><h2>Quick Start</h2><p>Prerequisites:</p><ul><li>Node.js 18+</li><li><code>pnpm</code></li><li><code>git submodule update --init --recursive</code></li><li>Emscripten SDK (<code>emcmake</code>/<code>emcc</code> on <code>PATH</code>, or run <code>pnpm install:emscripten</code>)</li></ul><p>Install and run locally:</p><div class="doc-codeblock" data-code-language="bash">
191
+ <h1><a href="https://BREP.io">BREP.io</a></h1><h1><a href="https://github.com/mmiscool/BREP">Source <a href="https://github.com/mmiscool/BREP" target="_blank" rel="noopener noreferrer">https://github.com/mmiscool/BREP</a></a></h1><ul><li><a href="https://www.npmjs.com/package/brep-io-kernel">NPM package: <code>brep-io-kernel</code> <a href="https://www.npmjs.com/package/brep-io-kernel" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/brep-io-kernel</a></a></li><li><a href="https://BREP.io/apiExamples/index.html">Live API examples <a href="https://BREP.io/apiExamples/index.html" target="_blank" rel="noopener noreferrer">https://BREP.io/apiExamples/index.html</a></a></li><li><a href="https://discord.gg/R5KNAKrQ">Developer Discord <a href="https://discord.gg/R5KNAKrQ" target="_blank" rel="noopener noreferrer">https://discord.gg/R5KNAKrQ</a></a></li></ul><p>BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as <code>Solid</code>, <code>Face</code>, <code>Edge</code>, and <code>Vertex</code>, paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans (<a href="https://github.com/elalish/manifold">manifold-3d</a>), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs.</p><p>This project is in active development and APIs may continue to evolve.</p><h2>Workbenches</h2><ul><li><a href="workbenches__modeling.html">Modeling Workbench</a></li><li><a href="workbenches__import.html">Import Workbench</a></li><li><a href="workbenches__surfacing.html">Surfacing Workbench</a></li><li><a href="workbenches__sheet-metal.html">Sheet Metal Workbench</a></li><li><a href="workbenches__assemblies.html">Assemblies Workbench</a></li><li><a href="workbenches__wire-harness.html">Wire Harness Workbench</a></li><li><a href="workbenches__pmi.html">PMI Workbench</a></li><li><a href="workbenches__all.html">All Workbench</a></li></ul><h2>Screenshots</h2><p><img src="HOME.png" alt="Home" width="280" loading="lazy" /> <a href="modes__modeling.html"><img src="MODELING.png" alt="Modeling Mode" width="280" loading="lazy" /></a> <a href="modes__sketch.html"><img src="SKETCH.png" alt="Sketch Mode" width="280" loading="lazy" /></a> <a href="modes__pmi.html"><img src="PMI.png" alt="PMI Mode" width="280" loading="lazy" /></a> <a href="modes__sheets.html"><img src="SHEETS.png" alt="2D Sheets Mode" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-2D_dialog.png" alt="Image to Face 2D" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-3D_dialog.png" alt="Image to Face 3D" width="280" loading="lazy" /></a></p><h2>Documentation Index</h2><p>General:</p><ul><li><a href="developer-index.html">Developer Docs Index</a></li><li><a href="highlights.html">Highlights</a></li><li><a href="whats-new.html">What&#39;s New</a></li></ul><p>Mode guides:</p><ul><li><a href="modes__modeling.html">Modeling Mode</a></li><li><a href="modes__sketch.html">Sketch Mode</a></li><li><a href="modes__pmi.html">PMI Mode</a></li><li><a href="modes__sheets.html">2D Sheets Mode</a></li></ul><h2>Modeling Feature Docs</h2><p>Feature index:</p><ul><li><a href="features__index.html">All Feature Docs</a></li></ul><p>Primitives and setup:</p><ul><li><a href="features__primitive-cube.html">Primitive Cube</a></li><li><a href="features__primitive-cylinder.html">Primitive Cylinder</a></li><li><a href="features__primitive-cone.html">Primitive Cone</a></li><li><a href="features__primitive-sphere.html">Primitive Sphere</a></li><li><a href="features__primitive-torus.html">Primitive Torus</a></li><li><a href="features__primitive-pyramid.html">Primitive Pyramid</a></li><li><a href="features__plane.html">Plane</a></li><li><a href="features__datum.html">Datum</a></li><li><a href="features__datium.html">Datium</a></li><li><a href="features__sketch.html">Sketch</a></li><li><a href="features__spline.html">Spline</a></li><li><a href="features__helix.html">Helix</a></li></ul><p>Solid operations:</p><ul><li><a href="features__extrude.html">Extrude</a></li><li><a href="features__sweep.html">Sweep</a></li><li><a href="features__tube.html">Tube</a></li><li><a href="features__loft.html">Loft</a></li><li><a href="features__revolve.html">Revolve</a></li><li><a href="features__mirror.html">Mirror</a></li><li><a href="features__boolean.html">Boolean</a></li><li><a href="features__fillet.html">Fillet</a></li><li><a href="features__chamfer.html">Chamfer</a></li><li><a href="features__hole.html">Hole</a></li><li><a href="features__push-face.html">Push Face</a></li><li><a href="features__thicken.html">Thicken</a></li><li><a href="features__offset-shell.html">Offset Shell</a></li><li><a href="features__remesh.html">Remesh</a></li><li><a href="features__transform.html">Transform</a></li></ul><p>Pattern, import, and generation:</p><ul><li><a href="features__pattern.html">Pattern (Legacy Combined)</a></li><li><a href="features__pattern-linear.html">Pattern Linear</a></li><li><a href="features__pattern-radial.html">Pattern Radial</a></li><li><a href="features__import-3d-model.html">Import 3D Model</a></li><li><a href="features__image-heightmap-solid.html">Image Heightmap Solid</a></li><li><a href="features__image-to-face.html">Image to Face</a></li><li><a href="features__text-to-face.html">Text to Face</a></li></ul><p>Assembly and sheet metal:</p><ul><li><a href="features__assembly-component.html">Assembly Component</a></li><li><a href="features__sheet-metal-tab.html">Sheet Metal Tab</a></li><li><a href="features__sheet-metal-contour-flange.html">Sheet Metal Contour Flange</a></li><li><a href="features__sheet-metal-flange.html">Sheet Metal Flange</a></li></ul><p>Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout.</p><h2>Assembly Constraints</h2><ul><li><a href="assembly-constraints__solver.html">Assembly Constraint Solver</a></li><li><a href="assembly-constraints__coincident-constraint.html">Coincident</a></li><li><a href="assembly-constraints__distance-constraint.html">Distance</a></li><li><a href="assembly-constraints__angle-constraint.html">Angle</a></li><li><a href="assembly-constraints__parallel-constraint.html">Parallel</a></li><li><a href="assembly-constraints__touch-align-constraint.html">Touch Align</a></li><li><a href="assembly-constraints__fixed-constraint.html">Fixed</a></li></ul><h2>PMI Annotation Docs</h2><ul><li><a href="pmi-annotations__index.html">PMI Annotations Index</a></li><li><a href="pmi-annotations__linear-dimension.html">Linear Dimension</a></li><li><a href="pmi-annotations__radial-dimension.html">Radial Dimension</a></li><li><a href="pmi-annotations__angle-dimension.html">Angle Dimension</a></li><li><a href="pmi-annotations__leader.html">Leader</a></li><li><a href="pmi-annotations__note.html">Note</a></li><li><a href="pmi-annotations__hole-callout.html">Hole Callout</a></li><li><a href="pmi-annotations__explode-body.html">Explode Body</a></li></ul><h2>Quick Start</h2><p>Prerequisites:</p><ul><li>Node.js 18+</li><li><code>pnpm</code></li><li><code>git submodule update --init --recursive</code></li></ul><p>Install and run locally:</p><div class="doc-codeblock" data-code-language="bash">
192
192
  <div class="doc-codeblock-header">
193
193
  <span class="doc-codeblock-lang">bash</span>
194
194
  <button type="button" class="doc-codeblock-copy" data-copy-code aria-label="Copy code" title="Copy code">
@@ -203,7 +203,7 @@ a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
203
203
  <div class="doc-codeblock-body"><pre><code class="language-bash">git submodule update --init --recursive
204
204
  pnpm install
205
205
  pnpm dev</code></pre></div>
206
- </div><p>Then open the Vite URL shown in your terminal.</p><ul><li>Main app shell: <code>/index.html</code></li><li>Direct CAD workspace: <code>/cad.html</code></li></ul><h2>Build, Test, and Utility Commands</h2><table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>pnpm dev</code></td><td>Prepares fonts, builds the kernel bundle, then runs the Vite dev server.</td></tr><tr><td><code>pnpm build</code></td><td>Production build of the app into <code>dist/</code> (includes kernel build step).</td></tr><tr><td><code>pnpm build:manifoldPlus</code></td><td>Builds the local manifold wasm/js bundle from the <code>vendor/manifold3d</code> submodule plus local custom bindings.</td></tr><tr><td><code>pnpm install:emscripten</code></td><td>Installs/activates EMSDK if <code>emcmake</code>/<code>emcc</code> are missing. Uses <code>$EMSDK</code> or <code>$HOME/emsdk</code>; override the version with <code>$EMSDK_VERSION</code>.</td></tr><tr><td><code>pnpm build:kernel</code></td><td>Builds the ESM kernel bundle into <code>dist-kernel/</code> and syncs assets.</td></tr><tr><td><code>pnpm use:manifold:npm</code></td><td>Switches runtime/builds to the published <code>manifold-3d</code> npm package.</td></tr><tr><td><code>pnpm use:manifold:local</code></td><td>Switches runtime/builds to the locally compiled manifold bundle.</td></tr><tr><td><code>pnpm which:manifold</code></td><td>Prints the currently selected manifold source.</td></tr><tr><td><code>pnpm test</code></td><td>Runs the Node test suite (<code>src/tests/tests.js</code>), writing artifacts to <code>tests/results/</code>.</td></tr><tr><td><code>pnpm test -- test_primitiveCube</code></td><td>Runs one registered test by exact test function name.</td></tr><tr><td><code>pnpm liveTesting</code></td><td>Watches <code>src/</code> and <code>tests/</code> and reruns tests on change.</td></tr><tr><td><code>pnpm capture</code></td><td>Captures docs/dialog screenshots.</td></tr><tr><td><code>pnpm generateLicenses</code></td><td>Regenerates dependency and bundled-font license summaries.</td></tr></tbody></table><p>Build outputs:</p><ul><li><code>dist/</code>: static web app (ready for CDN/web hosting)</li><li><code>dist-kernel/</code>: published kernel bundle artifacts</li></ul><h2>CI and Pages Deployments</h2><p>The kernel build compiles a custom wasm bundle from the <code>vendor/manifold3d</code> git submodule. CI environments must:</p><ul><li>fetch submodules</li><li>install Emscripten/EMSDK before running <code>pnpm build</code> (<code>pnpm install:emscripten</code> can bootstrap it)</li></ul><p>This repo includes GitHub Actions workflows for:</p><ul><li>npm publishing with submodules + EMSDK</li><li>Cloudflare Pages deployment via Wrangler Direct Upload</li></ul><p>For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare&#39;s Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow:</p><ul><li>secret <code>CLOUDFLARE_ACCOUNT_ID</code></li><li>secret <code>CLOUDFLARE_API_TOKEN</code></li><li>variable <code>CLOUDFLARE_PAGES_PROJECT_NAME</code></li></ul><h2>Use as an NPM Package</h2><p>Package name: <code>brep-io-kernel</code> (ESM-only).</p><p>Install:</p><div class="doc-codeblock" data-code-language="bash">
206
+ </div><p>Then open the Vite URL shown in your terminal.</p><ul><li>Main app shell: <code>/index.html</code></li><li>Direct CAD workspace: <code>/cad.html</code></li></ul><h2>Build, Test, and Utility Commands</h2><table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>pnpm dev</code></td><td>Prepares fonts, builds the kernel bundle, then runs the Vite dev server.</td></tr><tr><td><code>pnpm build</code></td><td>Production build of the app into <code>dist/</code> (includes kernel build step).</td></tr><tr><td><code>pnpm build:manifoldPlus</code></td><td>Builds the local manifold wasm/js bundle from the <code>vendor/manifold3d</code> submodule plus local custom bindings, using project-local EMSDK from <code>vendor/emsdk</code>.</td></tr><tr><td><code>pnpm build:kernel</code></td><td>Builds the ESM kernel bundle into <code>dist-kernel/</code> and syncs assets.</td></tr><tr><td><code>pnpm use:manifold:npm</code></td><td>Switches runtime/builds to the published <code>manifold-3d</code> npm package.</td></tr><tr><td><code>pnpm use:manifold:local</code></td><td>Switches runtime/builds to the locally compiled manifold bundle.</td></tr><tr><td><code>pnpm which:manifold</code></td><td>Prints the currently selected manifold source.</td></tr><tr><td><code>pnpm test</code></td><td>Runs the Node test suite (<code>src/tests/tests.js</code>), writing artifacts to <code>tests/results/</code>.</td></tr><tr><td><code>pnpm test -- test_primitiveCube</code></td><td>Runs one registered test by exact test function name.</td></tr><tr><td><code>pnpm liveTesting</code></td><td>Watches <code>src/</code> and <code>tests/</code> and reruns tests on change.</td></tr><tr><td><code>pnpm capture</code></td><td>Captures docs/dialog screenshots.</td></tr><tr><td><code>pnpm generateLicenses</code></td><td>Regenerates dependency and bundled-font license summaries.</td></tr></tbody></table><p>Build outputs:</p><ul><li><code>dist/</code>: static web app (ready for CDN/web hosting)</li><li><code>dist-kernel/</code>: published kernel bundle artifacts</li></ul><h2>CI and Pages Deployments</h2><p>The kernel build compiles a custom wasm bundle from the <code>vendor/manifold3d</code> git submodule. CI environments must:</p><ul><li>fetch submodules, including <code>vendor/emsdk</code></li><li>allow <code>pnpm build</code> to download the pinned project-local Emscripten SDK payload through <code>vendor/emsdk</code></li></ul><p>This repo includes GitHub Actions workflows for:</p><ul><li>npm publishing with submodules + EMSDK</li><li>Cloudflare Pages deployment via Wrangler Direct Upload</li></ul><p>For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare&#39;s Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow:</p><ul><li>secret <code>CLOUDFLARE_ACCOUNT_ID</code></li><li>secret <code>CLOUDFLARE_API_TOKEN</code></li><li>variable <code>CLOUDFLARE_PAGES_PROJECT_NAME</code></li></ul><h2>Use as an NPM Package</h2><p>Package name: <code>brep-io-kernel</code> (ESM-only).</p><p>Install:</p><div class="doc-codeblock" data-code-language="bash">
207
207
  <div class="doc-codeblock-header">
208
208
  <span class="doc-codeblock-lang">bash</span>
209
209
  <button type="button" class="doc-codeblock-copy" data-copy-code aria-label="Copy code" title="Copy code">
@@ -951,7 +951,7 @@
951
951
  "title": "BREP.io",
952
952
  "href": "index.html",
953
953
  "summary": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a bro...",
954
- "content": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as Solid , Face , Edge , and Vertex , paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans ( manifold-3d ), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs. This project is in active development and APIs may continue to evolve. Workbenches Modeling Workbench Import Workbench Surfacing Workbench Sheet Metal Workbench Assemblies Workbench Wire Harness Workbench PMI Workbench All Workbench Screenshots Documentation Index General: Developer Docs Index Highlights What's New Mode guides: Modeling Mode Sketch Mode PMI Mode 2D Sheets Mode Modeling Feature Docs Feature index: All Feature Docs Primitives and setup: Primitive Cube Primitive Cylinder Primitive Cone Primitive Sphere Primitive Torus Primitive Pyramid Plane Datum Datium Sketch Spline Helix Solid operations: Extrude Sweep Tube Loft Revolve Mirror Boolean Fillet Chamfer Hole Push Face Thicken Offset Shell Remesh Transform Pattern, import, and generation: Pattern (Legacy Combined) Pattern Linear Pattern Radial Import 3D Model Image Heightmap Solid Image to Face Text to Face Assembly and sheet metal: Assembly Component Sheet Metal Tab Sheet Metal Contour Flange Sheet Metal Flange Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout. Assembly Constraints Assembly Constraint Solver Coincident Distance Angle Parallel Touch Align Fixed PMI Annotation Docs PMI Annotations Index Linear Dimension Radial Dimension Angle Dimension Leader Note Hole Callout Explode Body Quick Start Prerequisites: Node.js 18+ pnpm git submodule update --init --recursive Emscripten SDK ( emcmake / emcc on PATH , or run pnpm install:emscripten ) Install and run locally: bash git submodule update --init --recursive pnpm install pnpm dev Then open the Vite URL shown in your terminal. Main app shell: /index.html Direct CAD workspace: /cad.html Build, Test, and Utility Commands Command Purpose pnpm dev Prepares fonts, builds the kernel bundle, then runs the Vite dev server. pnpm build Production build of the app into dist/ (includes kernel build step). pnpm build:manifoldPlus Builds the local manifold wasm/js bundle from the vendor/manifold3d submodule plus local custom bindings. pnpm install:emscripten Installs/activates EMSDK if emcmake / emcc are missing. Uses $EMSDK or $HOME/emsdk ; override the version with $EMSDK_VERSION . pnpm build:kernel Builds the ESM kernel bundle into dist-kernel/ and syncs assets. pnpm use:manifold:npm Switches runtime/builds to the published manifold-3d npm package. pnpm use:manifold:local Switches runtime/builds to the locally compiled manifold bundle. pnpm which:manifold Prints the currently selected manifold source. pnpm test Runs the Node test suite ( src/tests/tests.js ), writing artifacts to tests/results/ . pnpm test -- test_primitiveCube Runs one registered test by exact test function name. pnpm liveTesting Watches src/ and tests/ and reruns tests on change. pnpm capture Captures docs/dialog screenshots. pnpm generateLicenses Regenerates dependency and bundled-font license summaries. Build outputs: dist/ : static web app (ready for CDN/web hosting) dist-kernel/ : published kernel bundle artifacts CI and Pages Deployments The kernel build compiles a custom wasm bundle from the vendor/manifold3d git submodule. CI environments must: fetch submodules install Emscripten/EMSDK before running pnpm build ( pnpm install:emscripten can bootstrap it) This repo includes GitHub Actions workflows for: npm publishing with submodules + EMSDK Cloudflare Pages deployment via Wrangler Direct Upload For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare's Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow: secret CLOUDFLARE_ACCOUNT_ID secret CLOUDFLARE_API_TOKEN variable CLOUDFLARE_PAGES_PROJECT_NAME Use as an NPM Package Package name: brep-io-kernel (ESM-only). Install: bash pnpm add brep-io-kernel Main imports: javascript import { BREP, PartHistory, AssemblyConstraintHistory, AssemblyConstraintRegistry, CadEmbed, Sketcher2DEmbed } from \"brep-io-kernel\" ; Subpath imports: javascript import { BREP } from \"brep-io-kernel/BREP\" ; import { PartHistory } from \"brep-io-kernel/PartHistory\" ; import { CadEmbed } from \"brep-io-kernel/CAD\" ; import { Sketcher2DEmbed } from \"brep-io-kernel/Sketcher2D\" ; import { ConstraintSolver, ConstraintEngine, constraints } from \"brep-io-kernel/SketchSolver2D\" ; Node examples: brep-io-kernel-examples/README.md CLI helper: bash npx brep-io-kernel npx brep-io-kernel --host 127.0.0.1 --port 4173 npx brep-io-kernel --help License helper APIs: javascript import { getPackageLicenseInfoString, getAllLicensesInfoString } from \"brep-io-kernel\" ; console.log(getPackageLicenseInfoString()); // package license info console.log(getAllLicensesInfoString()); // package + production dependencies CommonJS note: javascript const { BREP } = await import ( \"brep-io-kernel\" ); Repository Layout src/BREP : core solid/kernel implementation src/features : feature implementations and dialogs src/assemblyConstraints : assembly solver and constraints src/UI : CAD/sketcher UI and embedding bridges docs/ : markdown docs and screenshots apiExamples/ : standalone browser API demos tests/ and src/tests/ : test assets and test runner Contributing See CONTRIBUTING.md . License See LICENSE.md . This project uses a dual-licensing strategy managed by Autodrop3d LLC. Documentation Edge.collapseToPoint() Edge.constructor() Edge.getMetadata() Edge Method Index Edge.length() Edge.points() Edge.setMetadata() Face.constructor() Face.getAverageNormal() Face.getMetadata() Face.getNeighbors() Face Method Index Face.points() Face.renameFace() Face.setMetadata() Face.surfaceArea() Face.thicken() BREP Class API Reference Solid._ensureFaceIndex() Solid._expandTriIDsFromMesh() Solid._getOrCreateID() Solid._getPointIndex() Solid._isCoherentlyOrientedManifold() Solid._key() Solid._manifoldize() Solid._weldVerticesByEpsilon() Solid.addAuxEdge() Solid.addCenterline() Solid.addTriangle() Solid.bakeTransform() Solid.bakeTRS() Solid.chamfer() Solid.cleanupTinyFaceIslands() Solid.clone() Solid.collapseTinyTriangles() Solid.constructor() Solid.faces Solid.fillet() Solid.fixTriangleWindingsByAdjacency() Solid.free() Solid.getBoundaryEdgePolylines() Solid.getEdgeMetadata() Solid.getFace() Solid.getFaceMetadata() Solid.getFaceNames() Solid.getFaceNormal() Solid.getFaces() Solid.getMesh() Solid.getTriangleCount() Solid Method Index Solid.intersect() Solid.mergeTinyFaces() Solid.minGapToPoint(point, searchLength) Solid.mirrorAcrossPlane() Solid.pushFace() Solid.remesh() Solid.removeDegenerateTriangles() Solid.removeInternalTriangles() Solid.removeInternalTrianglesByRaycast() Solid.removeInternalTrianglesByWinding() Solid.removeOppositeSingleEdgeFaces() Solid.removeSmallIslands() Solid.removeTinyBoundaryTriangles() Solid.renameFace() Solid.setEdgeMetadata() Solid.setEpsilon() Solid.setFaceMetadata() Solid.simplify() Solid.splitSelfIntersectingTriangles() Solid.subtract() Solid.surfaceArea() Solid.toSTEP() Solid.toSTL() Solid.union() Solid.visualize() Solid.volume() API Examples Angle Constraint Coincident Constraint Distance Constraint Fixed Constraint Parallel Constraint Assembly Constraint Solver Touch Align Constraint BREP.js Export Map and Usage BREP Kernel Reference BREP Model and Classes Bug Reporting and Repro Test Cases Embeddable CAD App CONTRIBUTING C++ Solid Porting Cylindrical Face Radius Embedding Application Architecture Docs Embedding and Integration Docs Kernel and Geometry Docs Application Subsystems Docs Developer Docs Documentation Screenshots Expressions and Configurator Radius Metadata for Extruded Sketches Feature Dimension Gizmos (Developer) Assembly Component Boolean Chamfer Collapse Edge Datium Datum Edge Smooth Extrude Fillet Helix Hole Image Editor (Shared) Image Heightmap Solid Image to Face Import 3D Model Features Loft Mirror NURBS Face Solid Offset Face Offset Shell Overlap Cleanup Pattern Linear Pattern Radial Pattern (Legacy) Plane Polygon Solid Primitive Cone Primitive Cube Primitive Cylinder Primitive Pyramid Primitive Sphere Primitive Torus Push Face Remesh Revolve Sheet Metal Contour Flange Sheet Metal Cutout Sheet Metal Flange Sheet Metal Hem Sheet Metal Tab Sketch Smooth With Subdivision Spline Sweep Text to Face Thicken Transform Tube File Formats: Import and Export Fillet Process Font Licenses Getting Started GitHub Repo Storage Highlights History Systems How It Works Input Params Schema Recent Inspector Improvements Inspector LICENSE Modeling Mode PMI Mode 2D Sheets Mode Sketch Mode PartHistory Reference Plugins and Examples Angle Dimension Explode Body Hole Callout PMI Annotations Leader Linear Dimension Note Radial Dimension Simplified Radial Dimension Interface 2D Sketch Solver (Standalone) Embeddable 2D Sketcher Solid Developer Guide Testing Topological Face and Edge Naming Specification UI Overview (Browser) What's New Workbench Implementation Plan All Workbench Assemblies Workbench Import Workbench Modeling Workbench PMI Workbench Sheet Metal Workbench Surfacing Workbench Wire Harness Workbench This project's license Copyright 2025 Autodrop3d LLC https://autodrop3d.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1. Any modifications made to the Software must be submitted to Autodrop3d LLC with an irrevocable assignment of the copyright via git pull request. This is intended to allow Autodrop3d LLC to sell commercial licenses of the Software for use in proprietary products under a dual-licensing strategy. Failure to contribute back modifications without a commercial license purchased from Autodrop3d LLC voids all permissions granted by this license. 2. If Autodrop3d LLC is sold, merged, transferred, or otherwise succeeded by any entity or individual, all rights and obligations described in this license shall transfer automatically to that successor entity or individual. 3. If Autodrop3d LLC ceases operations or dissolves, and no successor entity or individual continues to publicly host the Software in a manner that allows the public to obtain the source code and submit contributions for a period of at least eighteen (18) consecutive months, then Clauses 1 and 2 of this license shall be automatically and irrevocably canceled. The above copyright notice and these permission notices shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Licenses Report of libraries used in this package 33 packages • 7 license types (MIT AND Zlib) 2 packages pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage (MIT OR GPL-3.0-or-later) 1 package jszip 1 version Create, read and edit .zip files with JavaScript http://stuartk.com/jszip Author: Stuart Knightley <stuart@stuartk.com> Repo / Homepage Apache-2.0 2 packages @dimforge/rapier3d 1 version 3-dimensional physics engine in Rust - official JS bindings. Repo / Homepage manifold-3d 1 version Geometry library for topological robustness Repo / Homepage BSD-3-Clause 1 package vhacd-js 1 version Voxelized hierarchical approximate convex mesh decomposition Author: Paul Connelly Repo / Homepage ISC 1 package inherits 1 version Browser-friendly inheritance fully compatible with standard node.js inherits() Repo / Homepage MIT 25 packages @babel/runtime 1 version babel's modular runtime helpers Author: The Babel Team (https://babel.dev/team) Repo / Homepage @tarikjabiri/dxf 1 version A JavaScript interface to Dxf written in TypeScript. Author: Tarik EL JABIRI Repo / Homepage @types/pako 1 version TypeScript definitions for pako Repo / Homepage base64-arraybuffer 1 version Encode/decode base64 data into ArrayBuffers Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage core-js 1 version Standard library Author: Denis Pushkarev <zloirock@zloirock.ru> Repo / Homepage core-util-is 1 version The `util.is*` functions introduced in Node v0.12. Author: Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/) Repo / Homepage css-line-break 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage fast-png 1 version PNG image decoder and encoder written entirely in JavaScript Author: Michaël Zasso Repo / Homepage html2canvas 1 version Screenshots with JavaScript Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage immediate 1 version A cross browser microtask library Repo / Homepage iobuffer 1 version Read and write binary data on ArrayBuffers Author: Michaël Zasso Repo / Homepage isarray 1 version Array#isArray for older browsers Author: Julian Gruber <mail@juliangruber.com> Repo / Homepage jspdf 1 version PDF Document creation from JavaScript Repo / Homepage lie 1 version A basic but performant promise implementation Repo / Homepage marked 1 version A markdown parser built for speed Author: Christopher Jeffrey Repo / Homepage monaco-editor 1 version A browser based code editor Author: Microsoft Corporation Repo / Homepage process-nextick-args 1 version process.nextTick but always with args Repo / Homepage readable-stream 1 version Streams3, a user-land copy of the stream library from Node.js Repo / Homepage safe-buffer 1 version Safer Node.js Buffer API Author: Feross Aboukhadijeh <feross@feross.org> Repo / Homepage setimmediate 1 version A shim for the setImmediate efficient script yielding API Author: YuzuJS Repo / Homepage string_decoder 1 version The string_decoder module from Node core Repo / Homepage text-segmentation 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage three 1 version JavaScript 3D library Author: mrdoob Repo / Homepage util-deprecate 1 version The Node.js `util.deprecate()` function with browser support Author: Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/) Repo / Homepage utrie 1 version Unicode Trie Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage SGI-B-2.0 1 package tess2 1 version GLU tesselator ported to Javascript, performs polygon boolean operations and triangulation Author: Matt DesLauriers <dave.des@gmail.com> Repo / Homepage Font Licenses Bundled fonts are licensed separately from npm packages. Font license details Generated from installed node_modules graph (dependencies + optionalDependencies) + vendored third-party components ."
954
+ "content": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as Solid , Face , Edge , and Vertex , paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans ( manifold-3d ), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs. This project is in active development and APIs may continue to evolve. Workbenches Modeling Workbench Import Workbench Surfacing Workbench Sheet Metal Workbench Assemblies Workbench Wire Harness Workbench PMI Workbench All Workbench Screenshots Documentation Index General: Developer Docs Index Highlights What's New Mode guides: Modeling Mode Sketch Mode PMI Mode 2D Sheets Mode Modeling Feature Docs Feature index: All Feature Docs Primitives and setup: Primitive Cube Primitive Cylinder Primitive Cone Primitive Sphere Primitive Torus Primitive Pyramid Plane Datum Datium Sketch Spline Helix Solid operations: Extrude Sweep Tube Loft Revolve Mirror Boolean Fillet Chamfer Hole Push Face Thicken Offset Shell Remesh Transform Pattern, import, and generation: Pattern (Legacy Combined) Pattern Linear Pattern Radial Import 3D Model Image Heightmap Solid Image to Face Text to Face Assembly and sheet metal: Assembly Component Sheet Metal Tab Sheet Metal Contour Flange Sheet Metal Flange Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout. Assembly Constraints Assembly Constraint Solver Coincident Distance Angle Parallel Touch Align Fixed PMI Annotation Docs PMI Annotations Index Linear Dimension Radial Dimension Angle Dimension Leader Note Hole Callout Explode Body Quick Start Prerequisites: Node.js 18+ pnpm git submodule update --init --recursive Install and run locally: bash git submodule update --init --recursive pnpm install pnpm dev Then open the Vite URL shown in your terminal. Main app shell: /index.html Direct CAD workspace: /cad.html Build, Test, and Utility Commands Command Purpose pnpm dev Prepares fonts, builds the kernel bundle, then runs the Vite dev server. pnpm build Production build of the app into dist/ (includes kernel build step). pnpm build:manifoldPlus Builds the local manifold wasm/js bundle from the vendor/manifold3d submodule plus local custom bindings, using project-local EMSDK from vendor/emsdk . pnpm build:kernel Builds the ESM kernel bundle into dist-kernel/ and syncs assets. pnpm use:manifold:npm Switches runtime/builds to the published manifold-3d npm package. pnpm use:manifold:local Switches runtime/builds to the locally compiled manifold bundle. pnpm which:manifold Prints the currently selected manifold source. pnpm test Runs the Node test suite ( src/tests/tests.js ), writing artifacts to tests/results/ . pnpm test -- test_primitiveCube Runs one registered test by exact test function name. pnpm liveTesting Watches src/ and tests/ and reruns tests on change. pnpm capture Captures docs/dialog screenshots. pnpm generateLicenses Regenerates dependency and bundled-font license summaries. Build outputs: dist/ : static web app (ready for CDN/web hosting) dist-kernel/ : published kernel bundle artifacts CI and Pages Deployments The kernel build compiles a custom wasm bundle from the vendor/manifold3d git submodule. CI environments must: fetch submodules, including vendor/emsdk allow pnpm build to download the pinned project-local Emscripten SDK payload through vendor/emsdk This repo includes GitHub Actions workflows for: npm publishing with submodules + EMSDK Cloudflare Pages deployment via Wrangler Direct Upload For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare's Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow: secret CLOUDFLARE_ACCOUNT_ID secret CLOUDFLARE_API_TOKEN variable CLOUDFLARE_PAGES_PROJECT_NAME Use as an NPM Package Package name: brep-io-kernel (ESM-only). Install: bash pnpm add brep-io-kernel Main imports: javascript import { BREP, PartHistory, AssemblyConstraintHistory, AssemblyConstraintRegistry, CadEmbed, Sketcher2DEmbed } from \"brep-io-kernel\" ; Subpath imports: javascript import { BREP } from \"brep-io-kernel/BREP\" ; import { PartHistory } from \"brep-io-kernel/PartHistory\" ; import { CadEmbed } from \"brep-io-kernel/CAD\" ; import { Sketcher2DEmbed } from \"brep-io-kernel/Sketcher2D\" ; import { ConstraintSolver, ConstraintEngine, constraints } from \"brep-io-kernel/SketchSolver2D\" ; Node examples: brep-io-kernel-examples/README.md CLI helper: bash npx brep-io-kernel npx brep-io-kernel --host 127.0.0.1 --port 4173 npx brep-io-kernel --help License helper APIs: javascript import { getPackageLicenseInfoString, getAllLicensesInfoString } from \"brep-io-kernel\" ; console.log(getPackageLicenseInfoString()); // package license info console.log(getAllLicensesInfoString()); // package + production dependencies CommonJS note: javascript const { BREP } = await import ( \"brep-io-kernel\" ); Repository Layout src/BREP : core solid/kernel implementation src/features : feature implementations and dialogs src/assemblyConstraints : assembly solver and constraints src/UI : CAD/sketcher UI and embedding bridges docs/ : markdown docs and screenshots apiExamples/ : standalone browser API demos tests/ and src/tests/ : test assets and test runner Contributing See CONTRIBUTING.md . License See LICENSE.md . This project uses a dual-licensing strategy managed by Autodrop3d LLC. Documentation Edge.collapseToPoint() Edge.constructor() Edge.getMetadata() Edge Method Index Edge.length() Edge.points() Edge.setMetadata() Face.constructor() Face.getAverageNormal() Face.getMetadata() Face.getNeighbors() Face Method Index Face.points() Face.renameFace() Face.setMetadata() Face.surfaceArea() Face.thicken() BREP Class API Reference Solid._ensureFaceIndex() Solid._expandTriIDsFromMesh() Solid._getOrCreateID() Solid._getPointIndex() Solid._isCoherentlyOrientedManifold() Solid._key() Solid._manifoldize() Solid._weldVerticesByEpsilon() Solid.addAuxEdge() Solid.addCenterline() Solid.addTriangle() Solid.bakeTransform() Solid.bakeTRS() Solid.chamfer() Solid.cleanupTinyFaceIslands() Solid.clone() Solid.collapseTinyTriangles() Solid.constructor() Solid.faces Solid.fillet() Solid.fixTriangleWindingsByAdjacency() Solid.free() Solid.getBoundaryEdgePolylines() Solid.getEdgeMetadata() Solid.getFace() Solid.getFaceMetadata() Solid.getFaceNames() Solid.getFaceNormal() Solid.getFaces() Solid.getMesh() Solid.getTriangleCount() Solid Method Index Solid.intersect() Solid.mergeTinyFaces() Solid.minGapToPoint(point, searchLength) Solid.mirrorAcrossPlane() Solid.pushFace() Solid.remesh() Solid.removeDegenerateTriangles() Solid.removeInternalTriangles() Solid.removeInternalTrianglesByRaycast() Solid.removeInternalTrianglesByWinding() Solid.removeOppositeSingleEdgeFaces() Solid.removeSmallIslands() Solid.removeTinyBoundaryTriangles() Solid.renameFace() Solid.setEdgeMetadata() Solid.setEpsilon() Solid.setFaceMetadata() Solid.simplify() Solid.splitSelfIntersectingTriangles() Solid.subtract() Solid.surfaceArea() Solid.toSTEP() Solid.toSTL() Solid.union() Solid.visualize() Solid.volume() API Examples Angle Constraint Coincident Constraint Distance Constraint Fixed Constraint Parallel Constraint Assembly Constraint Solver Touch Align Constraint BREP.js Export Map and Usage BREP Kernel Reference BREP Model and Classes Bug Reporting and Repro Test Cases Embeddable CAD App CONTRIBUTING C++ Solid Porting Cylindrical Face Radius Embedding Application Architecture Docs Embedding and Integration Docs Kernel and Geometry Docs Application Subsystems Docs Developer Docs Documentation Screenshots Expressions and Configurator Radius Metadata for Extruded Sketches Feature Dimension Gizmos (Developer) Assembly Component Boolean Chamfer Collapse Edge Datium Datum Edge Smooth Extrude Fillet Helix Hole Image Editor (Shared) Image Heightmap Solid Image to Face Import 3D Model Features Loft Mirror NURBS Face Solid Offset Face Offset Shell Overlap Cleanup Pattern Linear Pattern Radial Pattern (Legacy) Plane Polygon Solid Primitive Cone Primitive Cube Primitive Cylinder Primitive Pyramid Primitive Sphere Primitive Torus Push Face Remesh Revolve Sheet Metal Contour Flange Sheet Metal Cutout Sheet Metal Flange Sheet Metal Hem Sheet Metal Tab Sketch Smooth With Subdivision Spline Sweep Text to Face Thicken Transform Tube File Formats: Import and Export Fillet Process Font Licenses Getting Started GitHub Repo Storage Highlights History Systems How It Works Input Params Schema Recent Inspector Improvements Inspector LICENSE Modeling Mode PMI Mode 2D Sheets Mode Sketch Mode PartHistory Reference Plugins and Examples Angle Dimension Explode Body Hole Callout PMI Annotations Leader Linear Dimension Note Radial Dimension Simplified Radial Dimension Interface 2D Sketch Solver (Standalone) Embeddable 2D Sketcher Solid Developer Guide Testing Topological Face and Edge Naming Specification UI Overview (Browser) What's New Workbench Implementation Plan All Workbench Assemblies Workbench Import Workbench Modeling Workbench PMI Workbench Sheet Metal Workbench Surfacing Workbench Wire Harness Workbench This project's license Copyright 2025 Autodrop3d LLC https://autodrop3d.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1. Any modifications made to the Software must be submitted to Autodrop3d LLC with an irrevocable assignment of the copyright via git pull request. This is intended to allow Autodrop3d LLC to sell commercial licenses of the Software for use in proprietary products under a dual-licensing strategy. Failure to contribute back modifications without a commercial license purchased from Autodrop3d LLC voids all permissions granted by this license. 2. If Autodrop3d LLC is sold, merged, transferred, or otherwise succeeded by any entity or individual, all rights and obligations described in this license shall transfer automatically to that successor entity or individual. 3. If Autodrop3d LLC ceases operations or dissolves, and no successor entity or individual continues to publicly host the Software in a manner that allows the public to obtain the source code and submit contributions for a period of at least eighteen (18) consecutive months, then Clauses 1 and 2 of this license shall be automatically and irrevocably canceled. The above copyright notice and these permission notices shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Licenses Report of libraries used in this package 33 packages • 7 license types (MIT AND Zlib) 2 packages pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage (MIT OR GPL-3.0-or-later) 1 package jszip 1 version Create, read and edit .zip files with JavaScript http://stuartk.com/jszip Author: Stuart Knightley <stuart@stuartk.com> Repo / Homepage Apache-2.0 2 packages @dimforge/rapier3d 1 version 3-dimensional physics engine in Rust - official JS bindings. Repo / Homepage manifold-3d 1 version Geometry library for topological robustness Repo / Homepage BSD-3-Clause 1 package vhacd-js 1 version Voxelized hierarchical approximate convex mesh decomposition Author: Paul Connelly Repo / Homepage ISC 1 package inherits 1 version Browser-friendly inheritance fully compatible with standard node.js inherits() Repo / Homepage MIT 25 packages @babel/runtime 1 version babel's modular runtime helpers Author: The Babel Team (https://babel.dev/team) Repo / Homepage @tarikjabiri/dxf 1 version A JavaScript interface to Dxf written in TypeScript. Author: Tarik EL JABIRI Repo / Homepage @types/pako 1 version TypeScript definitions for pako Repo / Homepage base64-arraybuffer 1 version Encode/decode base64 data into ArrayBuffers Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage core-js 1 version Standard library Author: Denis Pushkarev <zloirock@zloirock.ru> Repo / Homepage core-util-is 1 version The `util.is*` functions introduced in Node v0.12. Author: Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/) Repo / Homepage css-line-break 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage fast-png 1 version PNG image decoder and encoder written entirely in JavaScript Author: Michaël Zasso Repo / Homepage html2canvas 1 version Screenshots with JavaScript Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage immediate 1 version A cross browser microtask library Repo / Homepage iobuffer 1 version Read and write binary data on ArrayBuffers Author: Michaël Zasso Repo / Homepage isarray 1 version Array#isArray for older browsers Author: Julian Gruber <mail@juliangruber.com> Repo / Homepage jspdf 1 version PDF Document creation from JavaScript Repo / Homepage lie 1 version A basic but performant promise implementation Repo / Homepage marked 1 version A markdown parser built for speed Author: Christopher Jeffrey Repo / Homepage monaco-editor 1 version A browser based code editor Author: Microsoft Corporation Repo / Homepage process-nextick-args 1 version process.nextTick but always with args Repo / Homepage readable-stream 1 version Streams3, a user-land copy of the stream library from Node.js Repo / Homepage safe-buffer 1 version Safer Node.js Buffer API Author: Feross Aboukhadijeh <feross@feross.org> Repo / Homepage setimmediate 1 version A shim for the setImmediate efficient script yielding API Author: YuzuJS Repo / Homepage string_decoder 1 version The string_decoder module from Node core Repo / Homepage text-segmentation 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage three 1 version JavaScript 3D library Author: mrdoob Repo / Homepage util-deprecate 1 version The Node.js `util.deprecate()` function with browser support Author: Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/) Repo / Homepage utrie 1 version Unicode Trie Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage SGI-B-2.0 1 package tess2 1 version GLU tesselator ported to Javascript, performs polygon boolean operations and triangulation Author: Matt DesLauriers <dave.des@gmail.com> Repo / Homepage Font Licenses Bundled fonts are licensed separately from npm packages. Font license details Generated from installed node_modules graph (dependencies + optionalDependencies) + vendored third-party components ."
955
955
  },
956
956
  {
957
957
  "title": "Input Params Schema",
package/dist/test.html CHANGED
@@ -167,7 +167,7 @@
167
167
  font-size: 13px;
168
168
  }
169
169
  </style>
170
- <script type="module" crossorigin src="/assets/test-D2BDjo1w.js"></script>
170
+ <script type="module" crossorigin src="/assets/test-DTqZegA4.js"></script>
171
171
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-BdX5DvLD.js">
172
172
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-ZNr0Qq7Q.js">
173
173
  </head>
package/dist/viewer.html CHANGED
@@ -19,7 +19,7 @@
19
19
  <script type="module" crossorigin src="/assets/PartHistory-DJNowO8n.js"></script>
20
20
  <script type="module" crossorigin src="/assets/droppedWorkspaceFiles-8o-ZYOrf.js"></script>
21
21
  <script type="module" crossorigin src="/assets/AnnotationRegistry-PNrk9ZTv.js"></script>
22
- <script type="module" crossorigin src="/assets/main-cad-3Myw0wlX.js"></script>
22
+ <script type="module" crossorigin src="/assets/main-cad-B_iFo8MJ.js"></script>
23
23
  <link rel="stylesheet" crossorigin href="/assets/main-cad-C3E_anfF.css">
24
24
  </head>
25
25
 
@@ -310512,11 +310512,15 @@ let utA = gw;
310512
310512
  utA._monacoPromise = null;
310513
310513
  utA._runtimeCompletionRegistered = !1;
310514
310514
  customElements.get("env-monaco-editor") || customElements.define("env-monaco-editor", utA);
310515
- const tLA = /* @__PURE__ */ Symbol("ScriptRunnerPanel"), hIA = 300, EKi = `// Access the app environment via the global "env" object.
310515
+ const tLA = /* @__PURE__ */ Symbol("ScriptRunnerPanel"), hIA = 300, EKi = `
310516
+ // Access the app environment via the global "env" object.
310516
310517
  console.log('env keys', Object.keys(env || {}));
310517
310518
 
310518
310519
  // Example: log the active part history entry
310519
- console.log('active history', viewer?.partHistory?.getActiveStep?.());
310520
+ console.log('active history', viewer?.partHistory);
310521
+
310522
+
310523
+
310520
310524
  `, Nve = class Nve {
310521
310525
  constructor(A) {
310522
310526
  this.viewer = A, this.window = null, this.root = null, this.editorEl = null, this.editorWrap = null, this.outputEl = null, this.consoleWrap = null, this.splitterEl = null, this.contentRoot = null, this.introEl = null, this.statusEl = null, this._initializedValue = !1, this._consoleHeight = 180, this._lastContentRect = null, this._isRunning = !1;
@@ -310542,46 +310546,46 @@ console.log('active history', viewer?.partHistory?.getActiveStep?.());
310542
310546
  }
310543
310547
  _ensureWindow() {
310544
310548
  if (this.root) return;
310545
- const A = new zw({
310549
+ const A = Number(window?.innerHeight) || 520, e = Math.max(320, Math.round(A * 0.95)), t = new zw({
310546
310550
  title: "Script Runner",
310547
310551
  width: 760,
310548
- height: 520,
310552
+ height: e,
310549
310553
  right: 16,
310550
310554
  top: 56,
310551
310555
  shaded: !1,
310552
310556
  onClose: /* @__PURE__ */ B(() => this.close(), "onClose")
310553
- }), e = document.createElement("button");
310554
- e.className = "fw-btn", e.textContent = "Run", e.addEventListener("click", () => this._runCode());
310555
- const t = document.createElement("button");
310556
- t.className = "fw-btn", t.textContent = "Refresh env autocomplete", t.addEventListener("click", () => {
310557
+ }), i = document.createElement("button");
310558
+ i.className = "fw-btn", i.textContent = "Run", i.addEventListener("click", () => this._runCode());
310559
+ const s = document.createElement("button");
310560
+ s.className = "fw-btn", s.textContent = "Refresh env autocomplete", s.addEventListener("click", () => {
310557
310561
  try {
310558
310562
  this.editorEl?.refreshEnvAutocomplete?.(), this._setStatus("env autocomplete refreshed from window.env");
310559
310563
  } catch {
310560
310564
  this._setStatus("Unable to refresh env autocomplete");
310561
310565
  }
310562
- }), A.addHeaderAction(e), A.addHeaderAction(t);
310563
- const i = document.createElement("div");
310564
- i.style.display = "flex", i.style.flexDirection = "column", i.style.gap = "8px", i.style.width = "100%", i.style.height = "100%", i.style.boxSizing = "border-box", i.style.minHeight = "0", this.contentRoot = i;
310565
- const s = document.createElement("div");
310566
- s.textContent = "Run ad-hoc JavaScript with Monaco highlighting and live window.env autocomplete.", s.style.color = "#aeb6c5", s.style.font = '12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', s.style.opacity = "0.9", this.introEl = s;
310566
+ }), alert("hello world"), t.addHeaderAction(i), t.addHeaderAction(s);
310567
310567
  const o = document.createElement("div");
310568
- o.style.display = "flex", o.style.flexDirection = "column", o.style.flex = "1 1 60%", o.style.minHeight = "200px", o.style.minWidth = "0", o.style.position = "relative";
310569
- const n = document.createElement("env-monaco-editor");
310570
- n.style.position = "absolute", n.style.inset = "0", n.setAttribute("language", "javascript"), this._initializedValue || (n.value = EKi, this._initializedValue = !0);
310568
+ o.style.display = "flex", o.style.flexDirection = "column", o.style.gap = "8px", o.style.width = "100%", o.style.height = "100%", o.style.boxSizing = "border-box", o.style.minHeight = "0", this.contentRoot = o;
310569
+ const n = document.createElement("div");
310570
+ n.textContent = "Run ad-hoc JavaScript with Monaco highlighting and live window.env autocomplete.", n.style.color = "#aeb6c5", n.style.font = '12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', n.style.opacity = "0.9", this.introEl = n;
310571
310571
  const I = document.createElement("div");
310572
- I.style.flex = "0 0 10px", I.style.height = "10px", I.style.cursor = "row-resize", I.style.background = "linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.03))", I.style.border = "1px solid #1f2530", I.style.borderRadius = "8px", I.style.margin = "6px 0", I.style.position = "relative", I.style.zIndex = "2", I.addEventListener("pointerdown", (c) => this._onSplitterPointerDown(c));
310573
- const r = document.createElement("div");
310574
- r.style.display = "flex", r.style.flexDirection = "column", r.style.flex = "0 0 180px", r.style.minHeight = "120px", r.style.maxHeight = "70vh", r.style.gap = "6px", r.style.position = "relative";
310572
+ I.style.display = "flex", I.style.flexDirection = "column", I.style.flex = "1 1 60%", I.style.minHeight = "200px", I.style.minWidth = "0", I.style.position = "relative";
310573
+ const r = document.createElement("env-monaco-editor");
310574
+ r.style.position = "absolute", r.style.inset = "0", r.setAttribute("language", "javascript"), this._initializedValue || (r.value = EKi, this._initializedValue = !0);
310575
310575
  const C = document.createElement("div");
310576
- C.style.flex = "1 1 auto", C.style.background = "#0e1117", C.style.border = "1px solid #1f2530", C.style.borderRadius = "8px", C.style.padding = "8px", C.style.overflowY = "auto", C.style.overflowX = "hidden", C.style.font = '12px/1.4 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', C.style.color = "#d1d5db";
310576
+ C.style.flex = "0 0 10px", C.style.height = "10px", C.style.cursor = "row-resize", C.style.background = "linear-gradient(180deg, rgba(255,255,255,0.08), rgba(255,255,255,0.03))", C.style.border = "1px solid #1f2530", C.style.borderRadius = "8px", C.style.margin = "6px 0", C.style.position = "relative", C.style.zIndex = "2", C.addEventListener("pointerdown", (h) => this._onSplitterPointerDown(h));
310577
310577
  const a = document.createElement("div");
310578
- a.style.display = "flex", a.style.alignItems = "center", a.style.gap = "8px";
310578
+ a.style.display = "flex", a.style.flexDirection = "column", a.style.flex = "0 0 180px", a.style.minHeight = "120px", a.style.maxHeight = "70vh", a.style.gap = "6px", a.style.position = "relative";
310579
310579
  const Q = document.createElement("div");
310580
- Q.style.flex = "1", Q.style.color = "#9ca3af", Q.style.font = '12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', Q.textContent = "Idle";
310581
- const E = document.createElement("button");
310582
- E.className = "fw-btn", E.textContent = "Clear output", E.addEventListener("click", () => {
310583
- C.innerHTML = "";
310584
- }), a.appendChild(Q), a.appendChild(E), i.appendChild(s), o.appendChild(n), i.appendChild(o), i.appendChild(I), r.appendChild(a), r.appendChild(C), i.appendChild(r), A.content.appendChild(i), this.window = A, this.root = A.root, this.editorEl = n, this.editorWrap = o, this.outputEl = C, this.consoleWrap = r, this.splitterEl = I, this.statusEl = Q;
310580
+ Q.style.flex = "1 1 auto", Q.style.background = "#0e1117", Q.style.border = "1px solid #1f2530", Q.style.borderRadius = "8px", Q.style.padding = "8px", Q.style.overflowY = "auto", Q.style.overflowX = "hidden", Q.style.font = '12px/1.4 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', Q.style.color = "#d1d5db";
310581
+ const E = document.createElement("div");
310582
+ E.style.display = "flex", E.style.alignItems = "center", E.style.gap = "8px";
310583
+ const c = document.createElement("div");
310584
+ c.style.flex = "1", c.style.color = "#9ca3af", c.style.font = '12px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace', c.textContent = "Idle";
310585
+ const l = document.createElement("button");
310586
+ l.className = "fw-btn", l.textContent = "Clear output", l.addEventListener("click", () => {
310587
+ Q.innerHTML = "";
310588
+ }), E.appendChild(c), E.appendChild(l), o.appendChild(n), I.appendChild(r), o.appendChild(I), o.appendChild(C), a.appendChild(E), a.appendChild(Q), o.appendChild(a), t.content.appendChild(o), this.window = t, this.root = t.root, this.editorEl = r, this.editorWrap = I, this.outputEl = Q, this.consoleWrap = a, this.splitterEl = C, this.statusEl = c;
310585
310589
  try {
310586
310590
  this.root.style.display = "none";
310587
310591
  } catch {
@@ -188,7 +188,7 @@ a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
188
188
  <section class="card doc-card doc-page-card">
189
189
 
190
190
  <div class="prose">
191
- <h1><a href="https://BREP.io">BREP.io</a></h1><h1><a href="https://github.com/mmiscool/BREP">Source <a href="https://github.com/mmiscool/BREP" target="_blank" rel="noopener noreferrer">https://github.com/mmiscool/BREP</a></a></h1><ul><li><a href="https://www.npmjs.com/package/brep-io-kernel">NPM package: <code>brep-io-kernel</code> <a href="https://www.npmjs.com/package/brep-io-kernel" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/brep-io-kernel</a></a></li><li><a href="https://BREP.io/apiExamples/index.html">Live API examples <a href="https://BREP.io/apiExamples/index.html" target="_blank" rel="noopener noreferrer">https://BREP.io/apiExamples/index.html</a></a></li><li><a href="https://discord.gg/R5KNAKrQ">Developer Discord <a href="https://discord.gg/R5KNAKrQ" target="_blank" rel="noopener noreferrer">https://discord.gg/R5KNAKrQ</a></a></li></ul><p>BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as <code>Solid</code>, <code>Face</code>, <code>Edge</code>, and <code>Vertex</code>, paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans (<a href="https://github.com/elalish/manifold">manifold-3d</a>), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs.</p><p>This project is in active development and APIs may continue to evolve.</p><h2>Workbenches</h2><ul><li><a href="workbenches__modeling.html">Modeling Workbench</a></li><li><a href="workbenches__import.html">Import Workbench</a></li><li><a href="workbenches__surfacing.html">Surfacing Workbench</a></li><li><a href="workbenches__sheet-metal.html">Sheet Metal Workbench</a></li><li><a href="workbenches__assemblies.html">Assemblies Workbench</a></li><li><a href="workbenches__wire-harness.html">Wire Harness Workbench</a></li><li><a href="workbenches__pmi.html">PMI Workbench</a></li><li><a href="workbenches__all.html">All Workbench</a></li></ul><h2>Screenshots</h2><p><img src="HOME.png" alt="Home" width="280" loading="lazy" /> <a href="modes__modeling.html"><img src="MODELING.png" alt="Modeling Mode" width="280" loading="lazy" /></a> <a href="modes__sketch.html"><img src="SKETCH.png" alt="Sketch Mode" width="280" loading="lazy" /></a> <a href="modes__pmi.html"><img src="PMI.png" alt="PMI Mode" width="280" loading="lazy" /></a> <a href="modes__sheets.html"><img src="SHEETS.png" alt="2D Sheets Mode" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-2D_dialog.png" alt="Image to Face 2D" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-3D_dialog.png" alt="Image to Face 3D" width="280" loading="lazy" /></a></p><h2>Documentation Index</h2><p>General:</p><ul><li><a href="developer-index.html">Developer Docs Index</a></li><li><a href="highlights.html">Highlights</a></li><li><a href="whats-new.html">What&#39;s New</a></li></ul><p>Mode guides:</p><ul><li><a href="modes__modeling.html">Modeling Mode</a></li><li><a href="modes__sketch.html">Sketch Mode</a></li><li><a href="modes__pmi.html">PMI Mode</a></li><li><a href="modes__sheets.html">2D Sheets Mode</a></li></ul><h2>Modeling Feature Docs</h2><p>Feature index:</p><ul><li><a href="features__index.html">All Feature Docs</a></li></ul><p>Primitives and setup:</p><ul><li><a href="features__primitive-cube.html">Primitive Cube</a></li><li><a href="features__primitive-cylinder.html">Primitive Cylinder</a></li><li><a href="features__primitive-cone.html">Primitive Cone</a></li><li><a href="features__primitive-sphere.html">Primitive Sphere</a></li><li><a href="features__primitive-torus.html">Primitive Torus</a></li><li><a href="features__primitive-pyramid.html">Primitive Pyramid</a></li><li><a href="features__plane.html">Plane</a></li><li><a href="features__datum.html">Datum</a></li><li><a href="features__datium.html">Datium</a></li><li><a href="features__sketch.html">Sketch</a></li><li><a href="features__spline.html">Spline</a></li><li><a href="features__helix.html">Helix</a></li></ul><p>Solid operations:</p><ul><li><a href="features__extrude.html">Extrude</a></li><li><a href="features__sweep.html">Sweep</a></li><li><a href="features__tube.html">Tube</a></li><li><a href="features__loft.html">Loft</a></li><li><a href="features__revolve.html">Revolve</a></li><li><a href="features__mirror.html">Mirror</a></li><li><a href="features__boolean.html">Boolean</a></li><li><a href="features__fillet.html">Fillet</a></li><li><a href="features__chamfer.html">Chamfer</a></li><li><a href="features__hole.html">Hole</a></li><li><a href="features__push-face.html">Push Face</a></li><li><a href="features__thicken.html">Thicken</a></li><li><a href="features__offset-shell.html">Offset Shell</a></li><li><a href="features__remesh.html">Remesh</a></li><li><a href="features__transform.html">Transform</a></li></ul><p>Pattern, import, and generation:</p><ul><li><a href="features__pattern.html">Pattern (Legacy Combined)</a></li><li><a href="features__pattern-linear.html">Pattern Linear</a></li><li><a href="features__pattern-radial.html">Pattern Radial</a></li><li><a href="features__import-3d-model.html">Import 3D Model</a></li><li><a href="features__image-heightmap-solid.html">Image Heightmap Solid</a></li><li><a href="features__image-to-face.html">Image to Face</a></li><li><a href="features__text-to-face.html">Text to Face</a></li></ul><p>Assembly and sheet metal:</p><ul><li><a href="features__assembly-component.html">Assembly Component</a></li><li><a href="features__sheet-metal-tab.html">Sheet Metal Tab</a></li><li><a href="features__sheet-metal-contour-flange.html">Sheet Metal Contour Flange</a></li><li><a href="features__sheet-metal-flange.html">Sheet Metal Flange</a></li></ul><p>Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout.</p><h2>Assembly Constraints</h2><ul><li><a href="assembly-constraints__solver.html">Assembly Constraint Solver</a></li><li><a href="assembly-constraints__coincident-constraint.html">Coincident</a></li><li><a href="assembly-constraints__distance-constraint.html">Distance</a></li><li><a href="assembly-constraints__angle-constraint.html">Angle</a></li><li><a href="assembly-constraints__parallel-constraint.html">Parallel</a></li><li><a href="assembly-constraints__touch-align-constraint.html">Touch Align</a></li><li><a href="assembly-constraints__fixed-constraint.html">Fixed</a></li></ul><h2>PMI Annotation Docs</h2><ul><li><a href="pmi-annotations__index.html">PMI Annotations Index</a></li><li><a href="pmi-annotations__linear-dimension.html">Linear Dimension</a></li><li><a href="pmi-annotations__radial-dimension.html">Radial Dimension</a></li><li><a href="pmi-annotations__angle-dimension.html">Angle Dimension</a></li><li><a href="pmi-annotations__leader.html">Leader</a></li><li><a href="pmi-annotations__note.html">Note</a></li><li><a href="pmi-annotations__hole-callout.html">Hole Callout</a></li><li><a href="pmi-annotations__explode-body.html">Explode Body</a></li></ul><h2>Quick Start</h2><p>Prerequisites:</p><ul><li>Node.js 18+</li><li><code>pnpm</code></li><li><code>git submodule update --init --recursive</code></li><li>Emscripten SDK (<code>emcmake</code>/<code>emcc</code> on <code>PATH</code>, or run <code>pnpm install:emscripten</code>)</li></ul><p>Install and run locally:</p><div class="doc-codeblock" data-code-language="bash">
191
+ <h1><a href="https://BREP.io">BREP.io</a></h1><h1><a href="https://github.com/mmiscool/BREP">Source <a href="https://github.com/mmiscool/BREP" target="_blank" rel="noopener noreferrer">https://github.com/mmiscool/BREP</a></a></h1><ul><li><a href="https://www.npmjs.com/package/brep-io-kernel">NPM package: <code>brep-io-kernel</code> <a href="https://www.npmjs.com/package/brep-io-kernel" target="_blank" rel="noopener noreferrer">https://www.npmjs.com/package/brep-io-kernel</a></a></li><li><a href="https://BREP.io/apiExamples/index.html">Live API examples <a href="https://BREP.io/apiExamples/index.html" target="_blank" rel="noopener noreferrer">https://BREP.io/apiExamples/index.html</a></a></li><li><a href="https://discord.gg/R5KNAKrQ">Developer Discord <a href="https://discord.gg/R5KNAKrQ" target="_blank" rel="noopener noreferrer">https://discord.gg/R5KNAKrQ</a></a></li></ul><p>BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as <code>Solid</code>, <code>Face</code>, <code>Edge</code>, and <code>Vertex</code>, paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans (<a href="https://github.com/elalish/manifold">manifold-3d</a>), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs.</p><p>This project is in active development and APIs may continue to evolve.</p><h2>Workbenches</h2><ul><li><a href="workbenches__modeling.html">Modeling Workbench</a></li><li><a href="workbenches__import.html">Import Workbench</a></li><li><a href="workbenches__surfacing.html">Surfacing Workbench</a></li><li><a href="workbenches__sheet-metal.html">Sheet Metal Workbench</a></li><li><a href="workbenches__assemblies.html">Assemblies Workbench</a></li><li><a href="workbenches__wire-harness.html">Wire Harness Workbench</a></li><li><a href="workbenches__pmi.html">PMI Workbench</a></li><li><a href="workbenches__all.html">All Workbench</a></li></ul><h2>Screenshots</h2><p><img src="HOME.png" alt="Home" width="280" loading="lazy" /> <a href="modes__modeling.html"><img src="MODELING.png" alt="Modeling Mode" width="280" loading="lazy" /></a> <a href="modes__sketch.html"><img src="SKETCH.png" alt="Sketch Mode" width="280" loading="lazy" /></a> <a href="modes__pmi.html"><img src="PMI.png" alt="PMI Mode" width="280" loading="lazy" /></a> <a href="modes__sheets.html"><img src="SHEETS.png" alt="2D Sheets Mode" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-2D_dialog.png" alt="Image to Face 2D" width="280" loading="lazy" /></a> <a href="features__image-to-face.html"><img src="features__image-to-face-3D_dialog.png" alt="Image to Face 3D" width="280" loading="lazy" /></a></p><h2>Documentation Index</h2><p>General:</p><ul><li><a href="developer-index.html">Developer Docs Index</a></li><li><a href="highlights.html">Highlights</a></li><li><a href="whats-new.html">What&#39;s New</a></li></ul><p>Mode guides:</p><ul><li><a href="modes__modeling.html">Modeling Mode</a></li><li><a href="modes__sketch.html">Sketch Mode</a></li><li><a href="modes__pmi.html">PMI Mode</a></li><li><a href="modes__sheets.html">2D Sheets Mode</a></li></ul><h2>Modeling Feature Docs</h2><p>Feature index:</p><ul><li><a href="features__index.html">All Feature Docs</a></li></ul><p>Primitives and setup:</p><ul><li><a href="features__primitive-cube.html">Primitive Cube</a></li><li><a href="features__primitive-cylinder.html">Primitive Cylinder</a></li><li><a href="features__primitive-cone.html">Primitive Cone</a></li><li><a href="features__primitive-sphere.html">Primitive Sphere</a></li><li><a href="features__primitive-torus.html">Primitive Torus</a></li><li><a href="features__primitive-pyramid.html">Primitive Pyramid</a></li><li><a href="features__plane.html">Plane</a></li><li><a href="features__datum.html">Datum</a></li><li><a href="features__datium.html">Datium</a></li><li><a href="features__sketch.html">Sketch</a></li><li><a href="features__spline.html">Spline</a></li><li><a href="features__helix.html">Helix</a></li></ul><p>Solid operations:</p><ul><li><a href="features__extrude.html">Extrude</a></li><li><a href="features__sweep.html">Sweep</a></li><li><a href="features__tube.html">Tube</a></li><li><a href="features__loft.html">Loft</a></li><li><a href="features__revolve.html">Revolve</a></li><li><a href="features__mirror.html">Mirror</a></li><li><a href="features__boolean.html">Boolean</a></li><li><a href="features__fillet.html">Fillet</a></li><li><a href="features__chamfer.html">Chamfer</a></li><li><a href="features__hole.html">Hole</a></li><li><a href="features__push-face.html">Push Face</a></li><li><a href="features__thicken.html">Thicken</a></li><li><a href="features__offset-shell.html">Offset Shell</a></li><li><a href="features__remesh.html">Remesh</a></li><li><a href="features__transform.html">Transform</a></li></ul><p>Pattern, import, and generation:</p><ul><li><a href="features__pattern.html">Pattern (Legacy Combined)</a></li><li><a href="features__pattern-linear.html">Pattern Linear</a></li><li><a href="features__pattern-radial.html">Pattern Radial</a></li><li><a href="features__import-3d-model.html">Import 3D Model</a></li><li><a href="features__image-heightmap-solid.html">Image Heightmap Solid</a></li><li><a href="features__image-to-face.html">Image to Face</a></li><li><a href="features__text-to-face.html">Text to Face</a></li></ul><p>Assembly and sheet metal:</p><ul><li><a href="features__assembly-component.html">Assembly Component</a></li><li><a href="features__sheet-metal-tab.html">Sheet Metal Tab</a></li><li><a href="features__sheet-metal-contour-flange.html">Sheet Metal Contour Flange</a></li><li><a href="features__sheet-metal-flange.html">Sheet Metal Flange</a></li></ul><p>Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout.</p><h2>Assembly Constraints</h2><ul><li><a href="assembly-constraints__solver.html">Assembly Constraint Solver</a></li><li><a href="assembly-constraints__coincident-constraint.html">Coincident</a></li><li><a href="assembly-constraints__distance-constraint.html">Distance</a></li><li><a href="assembly-constraints__angle-constraint.html">Angle</a></li><li><a href="assembly-constraints__parallel-constraint.html">Parallel</a></li><li><a href="assembly-constraints__touch-align-constraint.html">Touch Align</a></li><li><a href="assembly-constraints__fixed-constraint.html">Fixed</a></li></ul><h2>PMI Annotation Docs</h2><ul><li><a href="pmi-annotations__index.html">PMI Annotations Index</a></li><li><a href="pmi-annotations__linear-dimension.html">Linear Dimension</a></li><li><a href="pmi-annotations__radial-dimension.html">Radial Dimension</a></li><li><a href="pmi-annotations__angle-dimension.html">Angle Dimension</a></li><li><a href="pmi-annotations__leader.html">Leader</a></li><li><a href="pmi-annotations__note.html">Note</a></li><li><a href="pmi-annotations__hole-callout.html">Hole Callout</a></li><li><a href="pmi-annotations__explode-body.html">Explode Body</a></li></ul><h2>Quick Start</h2><p>Prerequisites:</p><ul><li>Node.js 18+</li><li><code>pnpm</code></li><li><code>git submodule update --init --recursive</code></li></ul><p>Install and run locally:</p><div class="doc-codeblock" data-code-language="bash">
192
192
  <div class="doc-codeblock-header">
193
193
  <span class="doc-codeblock-lang">bash</span>
194
194
  <button type="button" class="doc-codeblock-copy" data-copy-code aria-label="Copy code" title="Copy code">
@@ -203,7 +203,7 @@ a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
203
203
  <div class="doc-codeblock-body"><pre><code class="language-bash">git submodule update --init --recursive
204
204
  pnpm install
205
205
  pnpm dev</code></pre></div>
206
- </div><p>Then open the Vite URL shown in your terminal.</p><ul><li>Main app shell: <code>/index.html</code></li><li>Direct CAD workspace: <code>/cad.html</code></li></ul><h2>Build, Test, and Utility Commands</h2><table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>pnpm dev</code></td><td>Prepares fonts, builds the kernel bundle, then runs the Vite dev server.</td></tr><tr><td><code>pnpm build</code></td><td>Production build of the app into <code>dist/</code> (includes kernel build step).</td></tr><tr><td><code>pnpm build:manifoldPlus</code></td><td>Builds the local manifold wasm/js bundle from the <code>vendor/manifold3d</code> submodule plus local custom bindings.</td></tr><tr><td><code>pnpm install:emscripten</code></td><td>Installs/activates EMSDK if <code>emcmake</code>/<code>emcc</code> are missing. Uses <code>$EMSDK</code> or <code>$HOME/emsdk</code>; override the version with <code>$EMSDK_VERSION</code>.</td></tr><tr><td><code>pnpm build:kernel</code></td><td>Builds the ESM kernel bundle into <code>dist-kernel/</code> and syncs assets.</td></tr><tr><td><code>pnpm use:manifold:npm</code></td><td>Switches runtime/builds to the published <code>manifold-3d</code> npm package.</td></tr><tr><td><code>pnpm use:manifold:local</code></td><td>Switches runtime/builds to the locally compiled manifold bundle.</td></tr><tr><td><code>pnpm which:manifold</code></td><td>Prints the currently selected manifold source.</td></tr><tr><td><code>pnpm test</code></td><td>Runs the Node test suite (<code>src/tests/tests.js</code>), writing artifacts to <code>tests/results/</code>.</td></tr><tr><td><code>pnpm test -- test_primitiveCube</code></td><td>Runs one registered test by exact test function name.</td></tr><tr><td><code>pnpm liveTesting</code></td><td>Watches <code>src/</code> and <code>tests/</code> and reruns tests on change.</td></tr><tr><td><code>pnpm capture</code></td><td>Captures docs/dialog screenshots.</td></tr><tr><td><code>pnpm generateLicenses</code></td><td>Regenerates dependency and bundled-font license summaries.</td></tr></tbody></table><p>Build outputs:</p><ul><li><code>dist/</code>: static web app (ready for CDN/web hosting)</li><li><code>dist-kernel/</code>: published kernel bundle artifacts</li></ul><h2>CI and Pages Deployments</h2><p>The kernel build compiles a custom wasm bundle from the <code>vendor/manifold3d</code> git submodule. CI environments must:</p><ul><li>fetch submodules</li><li>install Emscripten/EMSDK before running <code>pnpm build</code> (<code>pnpm install:emscripten</code> can bootstrap it)</li></ul><p>This repo includes GitHub Actions workflows for:</p><ul><li>npm publishing with submodules + EMSDK</li><li>Cloudflare Pages deployment via Wrangler Direct Upload</li></ul><p>For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare&#39;s Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow:</p><ul><li>secret <code>CLOUDFLARE_ACCOUNT_ID</code></li><li>secret <code>CLOUDFLARE_API_TOKEN</code></li><li>variable <code>CLOUDFLARE_PAGES_PROJECT_NAME</code></li></ul><h2>Use as an NPM Package</h2><p>Package name: <code>brep-io-kernel</code> (ESM-only).</p><p>Install:</p><div class="doc-codeblock" data-code-language="bash">
206
+ </div><p>Then open the Vite URL shown in your terminal.</p><ul><li>Main app shell: <code>/index.html</code></li><li>Direct CAD workspace: <code>/cad.html</code></li></ul><h2>Build, Test, and Utility Commands</h2><table><thead><tr><th>Command</th><th>Purpose</th></tr></thead><tbody><tr><td><code>pnpm dev</code></td><td>Prepares fonts, builds the kernel bundle, then runs the Vite dev server.</td></tr><tr><td><code>pnpm build</code></td><td>Production build of the app into <code>dist/</code> (includes kernel build step).</td></tr><tr><td><code>pnpm build:manifoldPlus</code></td><td>Builds the local manifold wasm/js bundle from the <code>vendor/manifold3d</code> submodule plus local custom bindings, using project-local EMSDK from <code>vendor/emsdk</code>.</td></tr><tr><td><code>pnpm build:kernel</code></td><td>Builds the ESM kernel bundle into <code>dist-kernel/</code> and syncs assets.</td></tr><tr><td><code>pnpm use:manifold:npm</code></td><td>Switches runtime/builds to the published <code>manifold-3d</code> npm package.</td></tr><tr><td><code>pnpm use:manifold:local</code></td><td>Switches runtime/builds to the locally compiled manifold bundle.</td></tr><tr><td><code>pnpm which:manifold</code></td><td>Prints the currently selected manifold source.</td></tr><tr><td><code>pnpm test</code></td><td>Runs the Node test suite (<code>src/tests/tests.js</code>), writing artifacts to <code>tests/results/</code>.</td></tr><tr><td><code>pnpm test -- test_primitiveCube</code></td><td>Runs one registered test by exact test function name.</td></tr><tr><td><code>pnpm liveTesting</code></td><td>Watches <code>src/</code> and <code>tests/</code> and reruns tests on change.</td></tr><tr><td><code>pnpm capture</code></td><td>Captures docs/dialog screenshots.</td></tr><tr><td><code>pnpm generateLicenses</code></td><td>Regenerates dependency and bundled-font license summaries.</td></tr></tbody></table><p>Build outputs:</p><ul><li><code>dist/</code>: static web app (ready for CDN/web hosting)</li><li><code>dist-kernel/</code>: published kernel bundle artifacts</li></ul><h2>CI and Pages Deployments</h2><p>The kernel build compiles a custom wasm bundle from the <code>vendor/manifold3d</code> git submodule. CI environments must:</p><ul><li>fetch submodules, including <code>vendor/emsdk</code></li><li>allow <code>pnpm build</code> to download the pinned project-local Emscripten SDK payload through <code>vendor/emsdk</code></li></ul><p>This repo includes GitHub Actions workflows for:</p><ul><li>npm publishing with submodules + EMSDK</li><li>Cloudflare Pages deployment via Wrangler Direct Upload</li></ul><p>For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare&#39;s Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow:</p><ul><li>secret <code>CLOUDFLARE_ACCOUNT_ID</code></li><li>secret <code>CLOUDFLARE_API_TOKEN</code></li><li>variable <code>CLOUDFLARE_PAGES_PROJECT_NAME</code></li></ul><h2>Use as an NPM Package</h2><p>Package name: <code>brep-io-kernel</code> (ESM-only).</p><p>Install:</p><div class="doc-codeblock" data-code-language="bash">
207
207
  <div class="doc-codeblock-header">
208
208
  <span class="doc-codeblock-lang">bash</span>
209
209
  <button type="button" class="doc-codeblock-copy" data-copy-code aria-label="Copy code" title="Copy code">
@@ -951,7 +951,7 @@
951
951
  "title": "BREP.io",
952
952
  "href": "index.html",
953
953
  "summary": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a bro...",
954
- "content": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as Solid , Face , Edge , and Vertex , paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans ( manifold-3d ), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs. This project is in active development and APIs may continue to evolve. Workbenches Modeling Workbench Import Workbench Surfacing Workbench Sheet Metal Workbench Assemblies Workbench Wire Harness Workbench PMI Workbench All Workbench Screenshots Documentation Index General: Developer Docs Index Highlights What's New Mode guides: Modeling Mode Sketch Mode PMI Mode 2D Sheets Mode Modeling Feature Docs Feature index: All Feature Docs Primitives and setup: Primitive Cube Primitive Cylinder Primitive Cone Primitive Sphere Primitive Torus Primitive Pyramid Plane Datum Datium Sketch Spline Helix Solid operations: Extrude Sweep Tube Loft Revolve Mirror Boolean Fillet Chamfer Hole Push Face Thicken Offset Shell Remesh Transform Pattern, import, and generation: Pattern (Legacy Combined) Pattern Linear Pattern Radial Import 3D Model Image Heightmap Solid Image to Face Text to Face Assembly and sheet metal: Assembly Component Sheet Metal Tab Sheet Metal Contour Flange Sheet Metal Flange Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout. Assembly Constraints Assembly Constraint Solver Coincident Distance Angle Parallel Touch Align Fixed PMI Annotation Docs PMI Annotations Index Linear Dimension Radial Dimension Angle Dimension Leader Note Hole Callout Explode Body Quick Start Prerequisites: Node.js 18+ pnpm git submodule update --init --recursive Emscripten SDK ( emcmake / emcc on PATH , or run pnpm install:emscripten ) Install and run locally: bash git submodule update --init --recursive pnpm install pnpm dev Then open the Vite URL shown in your terminal. Main app shell: /index.html Direct CAD workspace: /cad.html Build, Test, and Utility Commands Command Purpose pnpm dev Prepares fonts, builds the kernel bundle, then runs the Vite dev server. pnpm build Production build of the app into dist/ (includes kernel build step). pnpm build:manifoldPlus Builds the local manifold wasm/js bundle from the vendor/manifold3d submodule plus local custom bindings. pnpm install:emscripten Installs/activates EMSDK if emcmake / emcc are missing. Uses $EMSDK or $HOME/emsdk ; override the version with $EMSDK_VERSION . pnpm build:kernel Builds the ESM kernel bundle into dist-kernel/ and syncs assets. pnpm use:manifold:npm Switches runtime/builds to the published manifold-3d npm package. pnpm use:manifold:local Switches runtime/builds to the locally compiled manifold bundle. pnpm which:manifold Prints the currently selected manifold source. pnpm test Runs the Node test suite ( src/tests/tests.js ), writing artifacts to tests/results/ . pnpm test -- test_primitiveCube Runs one registered test by exact test function name. pnpm liveTesting Watches src/ and tests/ and reruns tests on change. pnpm capture Captures docs/dialog screenshots. pnpm generateLicenses Regenerates dependency and bundled-font license summaries. Build outputs: dist/ : static web app (ready for CDN/web hosting) dist-kernel/ : published kernel bundle artifacts CI and Pages Deployments The kernel build compiles a custom wasm bundle from the vendor/manifold3d git submodule. CI environments must: fetch submodules install Emscripten/EMSDK before running pnpm build ( pnpm install:emscripten can bootstrap it) This repo includes GitHub Actions workflows for: npm publishing with submodules + EMSDK Cloudflare Pages deployment via Wrangler Direct Upload For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare's Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow: secret CLOUDFLARE_ACCOUNT_ID secret CLOUDFLARE_API_TOKEN variable CLOUDFLARE_PAGES_PROJECT_NAME Use as an NPM Package Package name: brep-io-kernel (ESM-only). Install: bash pnpm add brep-io-kernel Main imports: javascript import { BREP, PartHistory, AssemblyConstraintHistory, AssemblyConstraintRegistry, CadEmbed, Sketcher2DEmbed } from \"brep-io-kernel\" ; Subpath imports: javascript import { BREP } from \"brep-io-kernel/BREP\" ; import { PartHistory } from \"brep-io-kernel/PartHistory\" ; import { CadEmbed } from \"brep-io-kernel/CAD\" ; import { Sketcher2DEmbed } from \"brep-io-kernel/Sketcher2D\" ; import { ConstraintSolver, ConstraintEngine, constraints } from \"brep-io-kernel/SketchSolver2D\" ; Node examples: brep-io-kernel-examples/README.md CLI helper: bash npx brep-io-kernel npx brep-io-kernel --host 127.0.0.1 --port 4173 npx brep-io-kernel --help License helper APIs: javascript import { getPackageLicenseInfoString, getAllLicensesInfoString } from \"brep-io-kernel\" ; console.log(getPackageLicenseInfoString()); // package license info console.log(getAllLicensesInfoString()); // package + production dependencies CommonJS note: javascript const { BREP } = await import ( \"brep-io-kernel\" ); Repository Layout src/BREP : core solid/kernel implementation src/features : feature implementations and dialogs src/assemblyConstraints : assembly solver and constraints src/UI : CAD/sketcher UI and embedding bridges docs/ : markdown docs and screenshots apiExamples/ : standalone browser API demos tests/ and src/tests/ : test assets and test runner Contributing See CONTRIBUTING.md . License See LICENSE.md . This project uses a dual-licensing strategy managed by Autodrop3d LLC. Documentation Edge.collapseToPoint() Edge.constructor() Edge.getMetadata() Edge Method Index Edge.length() Edge.points() Edge.setMetadata() Face.constructor() Face.getAverageNormal() Face.getMetadata() Face.getNeighbors() Face Method Index Face.points() Face.renameFace() Face.setMetadata() Face.surfaceArea() Face.thicken() BREP Class API Reference Solid._ensureFaceIndex() Solid._expandTriIDsFromMesh() Solid._getOrCreateID() Solid._getPointIndex() Solid._isCoherentlyOrientedManifold() Solid._key() Solid._manifoldize() Solid._weldVerticesByEpsilon() Solid.addAuxEdge() Solid.addCenterline() Solid.addTriangle() Solid.bakeTransform() Solid.bakeTRS() Solid.chamfer() Solid.cleanupTinyFaceIslands() Solid.clone() Solid.collapseTinyTriangles() Solid.constructor() Solid.faces Solid.fillet() Solid.fixTriangleWindingsByAdjacency() Solid.free() Solid.getBoundaryEdgePolylines() Solid.getEdgeMetadata() Solid.getFace() Solid.getFaceMetadata() Solid.getFaceNames() Solid.getFaceNormal() Solid.getFaces() Solid.getMesh() Solid.getTriangleCount() Solid Method Index Solid.intersect() Solid.mergeTinyFaces() Solid.minGapToPoint(point, searchLength) Solid.mirrorAcrossPlane() Solid.pushFace() Solid.remesh() Solid.removeDegenerateTriangles() Solid.removeInternalTriangles() Solid.removeInternalTrianglesByRaycast() Solid.removeInternalTrianglesByWinding() Solid.removeOppositeSingleEdgeFaces() Solid.removeSmallIslands() Solid.removeTinyBoundaryTriangles() Solid.renameFace() Solid.setEdgeMetadata() Solid.setEpsilon() Solid.setFaceMetadata() Solid.simplify() Solid.splitSelfIntersectingTriangles() Solid.subtract() Solid.surfaceArea() Solid.toSTEP() Solid.toSTL() Solid.union() Solid.visualize() Solid.volume() API Examples Angle Constraint Coincident Constraint Distance Constraint Fixed Constraint Parallel Constraint Assembly Constraint Solver Touch Align Constraint BREP.js Export Map and Usage BREP Kernel Reference BREP Model and Classes Bug Reporting and Repro Test Cases Embeddable CAD App CONTRIBUTING C++ Solid Porting Cylindrical Face Radius Embedding Application Architecture Docs Embedding and Integration Docs Kernel and Geometry Docs Application Subsystems Docs Developer Docs Documentation Screenshots Expressions and Configurator Radius Metadata for Extruded Sketches Feature Dimension Gizmos (Developer) Assembly Component Boolean Chamfer Collapse Edge Datium Datum Edge Smooth Extrude Fillet Helix Hole Image Editor (Shared) Image Heightmap Solid Image to Face Import 3D Model Features Loft Mirror NURBS Face Solid Offset Face Offset Shell Overlap Cleanup Pattern Linear Pattern Radial Pattern (Legacy) Plane Polygon Solid Primitive Cone Primitive Cube Primitive Cylinder Primitive Pyramid Primitive Sphere Primitive Torus Push Face Remesh Revolve Sheet Metal Contour Flange Sheet Metal Cutout Sheet Metal Flange Sheet Metal Hem Sheet Metal Tab Sketch Smooth With Subdivision Spline Sweep Text to Face Thicken Transform Tube File Formats: Import and Export Fillet Process Font Licenses Getting Started GitHub Repo Storage Highlights History Systems How It Works Input Params Schema Recent Inspector Improvements Inspector LICENSE Modeling Mode PMI Mode 2D Sheets Mode Sketch Mode PartHistory Reference Plugins and Examples Angle Dimension Explode Body Hole Callout PMI Annotations Leader Linear Dimension Note Radial Dimension Simplified Radial Dimension Interface 2D Sketch Solver (Standalone) Embeddable 2D Sketcher Solid Developer Guide Testing Topological Face and Edge Naming Specification UI Overview (Browser) What's New Workbench Implementation Plan All Workbench Assemblies Workbench Import Workbench Modeling Workbench PMI Workbench Sheet Metal Workbench Surfacing Workbench Wire Harness Workbench This project's license Copyright 2025 Autodrop3d LLC https://autodrop3d.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1. Any modifications made to the Software must be submitted to Autodrop3d LLC with an irrevocable assignment of the copyright via git pull request. This is intended to allow Autodrop3d LLC to sell commercial licenses of the Software for use in proprietary products under a dual-licensing strategy. Failure to contribute back modifications without a commercial license purchased from Autodrop3d LLC voids all permissions granted by this license. 2. If Autodrop3d LLC is sold, merged, transferred, or otherwise succeeded by any entity or individual, all rights and obligations described in this license shall transfer automatically to that successor entity or individual. 3. If Autodrop3d LLC ceases operations or dissolves, and no successor entity or individual continues to publicly host the Software in a manner that allows the public to obtain the source code and submit contributions for a period of at least eighteen (18) consecutive months, then Clauses 1 and 2 of this license shall be automatically and irrevocably canceled. The above copyright notice and these permission notices shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Licenses Report of libraries used in this package 33 packages • 7 license types (MIT AND Zlib) 2 packages pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage (MIT OR GPL-3.0-or-later) 1 package jszip 1 version Create, read and edit .zip files with JavaScript http://stuartk.com/jszip Author: Stuart Knightley <stuart@stuartk.com> Repo / Homepage Apache-2.0 2 packages @dimforge/rapier3d 1 version 3-dimensional physics engine in Rust - official JS bindings. Repo / Homepage manifold-3d 1 version Geometry library for topological robustness Repo / Homepage BSD-3-Clause 1 package vhacd-js 1 version Voxelized hierarchical approximate convex mesh decomposition Author: Paul Connelly Repo / Homepage ISC 1 package inherits 1 version Browser-friendly inheritance fully compatible with standard node.js inherits() Repo / Homepage MIT 25 packages @babel/runtime 1 version babel's modular runtime helpers Author: The Babel Team (https://babel.dev/team) Repo / Homepage @tarikjabiri/dxf 1 version A JavaScript interface to Dxf written in TypeScript. Author: Tarik EL JABIRI Repo / Homepage @types/pako 1 version TypeScript definitions for pako Repo / Homepage base64-arraybuffer 1 version Encode/decode base64 data into ArrayBuffers Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage core-js 1 version Standard library Author: Denis Pushkarev <zloirock@zloirock.ru> Repo / Homepage core-util-is 1 version The `util.is*` functions introduced in Node v0.12. Author: Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/) Repo / Homepage css-line-break 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage fast-png 1 version PNG image decoder and encoder written entirely in JavaScript Author: Michaël Zasso Repo / Homepage html2canvas 1 version Screenshots with JavaScript Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage immediate 1 version A cross browser microtask library Repo / Homepage iobuffer 1 version Read and write binary data on ArrayBuffers Author: Michaël Zasso Repo / Homepage isarray 1 version Array#isArray for older browsers Author: Julian Gruber <mail@juliangruber.com> Repo / Homepage jspdf 1 version PDF Document creation from JavaScript Repo / Homepage lie 1 version A basic but performant promise implementation Repo / Homepage marked 1 version A markdown parser built for speed Author: Christopher Jeffrey Repo / Homepage monaco-editor 1 version A browser based code editor Author: Microsoft Corporation Repo / Homepage process-nextick-args 1 version process.nextTick but always with args Repo / Homepage readable-stream 1 version Streams3, a user-land copy of the stream library from Node.js Repo / Homepage safe-buffer 1 version Safer Node.js Buffer API Author: Feross Aboukhadijeh <feross@feross.org> Repo / Homepage setimmediate 1 version A shim for the setImmediate efficient script yielding API Author: YuzuJS Repo / Homepage string_decoder 1 version The string_decoder module from Node core Repo / Homepage text-segmentation 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage three 1 version JavaScript 3D library Author: mrdoob Repo / Homepage util-deprecate 1 version The Node.js `util.deprecate()` function with browser support Author: Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/) Repo / Homepage utrie 1 version Unicode Trie Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage SGI-B-2.0 1 package tess2 1 version GLU tesselator ported to Javascript, performs polygon boolean operations and triangulation Author: Matt DesLauriers <dave.des@gmail.com> Repo / Homepage Font Licenses Bundled fonts are licensed separately from npm packages. Font license details Generated from installed node_modules graph (dependencies + optionalDependencies) + vendored third-party components ."
954
+ "content": "BREP.io Source https://github.com/mmiscool/BREP NPM package: brep-io-kernel https://www.npmjs.com/package/brep-io-kernel Live API examples https://BREP.io/apiExamples/index.html Developer Discord https://discord.gg/R5KNAKrQ BREP.io is a browser-based CAD application and JavaScript kernel for feature-based solid modeling. At its core is a BREP-style modeler with explicit geometry/topology objects such as Solid , Face , Edge , and Vertex , paired with an editable feature-history pipeline. It also includes sketch workflows powered by a standalone 2D constraint solver, plus robust manifold booleans ( manifold-3d ), mesh repair/import tooling, assembly constraints, PMI annotations, and embeddable CAD/sketcher APIs. This project is in active development and APIs may continue to evolve. Workbenches Modeling Workbench Import Workbench Surfacing Workbench Sheet Metal Workbench Assemblies Workbench Wire Harness Workbench PMI Workbench All Workbench Screenshots Documentation Index General: Developer Docs Index Highlights What's New Mode guides: Modeling Mode Sketch Mode PMI Mode 2D Sheets Mode Modeling Feature Docs Feature index: All Feature Docs Primitives and setup: Primitive Cube Primitive Cylinder Primitive Cone Primitive Sphere Primitive Torus Primitive Pyramid Plane Datum Datium Sketch Spline Helix Solid operations: Extrude Sweep Tube Loft Revolve Mirror Boolean Fillet Chamfer Hole Push Face Thicken Offset Shell Remesh Transform Pattern, import, and generation: Pattern (Legacy Combined) Pattern Linear Pattern Radial Import 3D Model Image Heightmap Solid Image to Face Text to Face Assembly and sheet metal: Assembly Component Sheet Metal Tab Sheet Metal Contour Flange Sheet Metal Flange Additional implemented features in the codebase include collapse edge, edge smooth, offset face, overlap cleanup, sheet metal hem, and sheet metal cutout. Assembly Constraints Assembly Constraint Solver Coincident Distance Angle Parallel Touch Align Fixed PMI Annotation Docs PMI Annotations Index Linear Dimension Radial Dimension Angle Dimension Leader Note Hole Callout Explode Body Quick Start Prerequisites: Node.js 18+ pnpm git submodule update --init --recursive Install and run locally: bash git submodule update --init --recursive pnpm install pnpm dev Then open the Vite URL shown in your terminal. Main app shell: /index.html Direct CAD workspace: /cad.html Build, Test, and Utility Commands Command Purpose pnpm dev Prepares fonts, builds the kernel bundle, then runs the Vite dev server. pnpm build Production build of the app into dist/ (includes kernel build step). pnpm build:manifoldPlus Builds the local manifold wasm/js bundle from the vendor/manifold3d submodule plus local custom bindings, using project-local EMSDK from vendor/emsdk . pnpm build:kernel Builds the ESM kernel bundle into dist-kernel/ and syncs assets. pnpm use:manifold:npm Switches runtime/builds to the published manifold-3d npm package. pnpm use:manifold:local Switches runtime/builds to the locally compiled manifold bundle. pnpm which:manifold Prints the currently selected manifold source. pnpm test Runs the Node test suite ( src/tests/tests.js ), writing artifacts to tests/results/ . pnpm test -- test_primitiveCube Runs one registered test by exact test function name. pnpm liveTesting Watches src/ and tests/ and reruns tests on change. pnpm capture Captures docs/dialog screenshots. pnpm generateLicenses Regenerates dependency and bundled-font license summaries. Build outputs: dist/ : static web app (ready for CDN/web hosting) dist-kernel/ : published kernel bundle artifacts CI and Pages Deployments The kernel build compiles a custom wasm bundle from the vendor/manifold3d git submodule. CI environments must: fetch submodules, including vendor/emsdk allow pnpm build to download the pinned project-local Emscripten SDK payload through vendor/emsdk This repo includes GitHub Actions workflows for: npm publishing with submodules + EMSDK Cloudflare Pages deployment via Wrangler Direct Upload For Cloudflare Pages, use the GitHub Actions deploy workflow instead of relying on Cloudflare's Git build container to compile the wasm bundle. Configure these repository settings before enabling the workflow: secret CLOUDFLARE_ACCOUNT_ID secret CLOUDFLARE_API_TOKEN variable CLOUDFLARE_PAGES_PROJECT_NAME Use as an NPM Package Package name: brep-io-kernel (ESM-only). Install: bash pnpm add brep-io-kernel Main imports: javascript import { BREP, PartHistory, AssemblyConstraintHistory, AssemblyConstraintRegistry, CadEmbed, Sketcher2DEmbed } from \"brep-io-kernel\" ; Subpath imports: javascript import { BREP } from \"brep-io-kernel/BREP\" ; import { PartHistory } from \"brep-io-kernel/PartHistory\" ; import { CadEmbed } from \"brep-io-kernel/CAD\" ; import { Sketcher2DEmbed } from \"brep-io-kernel/Sketcher2D\" ; import { ConstraintSolver, ConstraintEngine, constraints } from \"brep-io-kernel/SketchSolver2D\" ; Node examples: brep-io-kernel-examples/README.md CLI helper: bash npx brep-io-kernel npx brep-io-kernel --host 127.0.0.1 --port 4173 npx brep-io-kernel --help License helper APIs: javascript import { getPackageLicenseInfoString, getAllLicensesInfoString } from \"brep-io-kernel\" ; console.log(getPackageLicenseInfoString()); // package license info console.log(getAllLicensesInfoString()); // package + production dependencies CommonJS note: javascript const { BREP } = await import ( \"brep-io-kernel\" ); Repository Layout src/BREP : core solid/kernel implementation src/features : feature implementations and dialogs src/assemblyConstraints : assembly solver and constraints src/UI : CAD/sketcher UI and embedding bridges docs/ : markdown docs and screenshots apiExamples/ : standalone browser API demos tests/ and src/tests/ : test assets and test runner Contributing See CONTRIBUTING.md . License See LICENSE.md . This project uses a dual-licensing strategy managed by Autodrop3d LLC. Documentation Edge.collapseToPoint() Edge.constructor() Edge.getMetadata() Edge Method Index Edge.length() Edge.points() Edge.setMetadata() Face.constructor() Face.getAverageNormal() Face.getMetadata() Face.getNeighbors() Face Method Index Face.points() Face.renameFace() Face.setMetadata() Face.surfaceArea() Face.thicken() BREP Class API Reference Solid._ensureFaceIndex() Solid._expandTriIDsFromMesh() Solid._getOrCreateID() Solid._getPointIndex() Solid._isCoherentlyOrientedManifold() Solid._key() Solid._manifoldize() Solid._weldVerticesByEpsilon() Solid.addAuxEdge() Solid.addCenterline() Solid.addTriangle() Solid.bakeTransform() Solid.bakeTRS() Solid.chamfer() Solid.cleanupTinyFaceIslands() Solid.clone() Solid.collapseTinyTriangles() Solid.constructor() Solid.faces Solid.fillet() Solid.fixTriangleWindingsByAdjacency() Solid.free() Solid.getBoundaryEdgePolylines() Solid.getEdgeMetadata() Solid.getFace() Solid.getFaceMetadata() Solid.getFaceNames() Solid.getFaceNormal() Solid.getFaces() Solid.getMesh() Solid.getTriangleCount() Solid Method Index Solid.intersect() Solid.mergeTinyFaces() Solid.minGapToPoint(point, searchLength) Solid.mirrorAcrossPlane() Solid.pushFace() Solid.remesh() Solid.removeDegenerateTriangles() Solid.removeInternalTriangles() Solid.removeInternalTrianglesByRaycast() Solid.removeInternalTrianglesByWinding() Solid.removeOppositeSingleEdgeFaces() Solid.removeSmallIslands() Solid.removeTinyBoundaryTriangles() Solid.renameFace() Solid.setEdgeMetadata() Solid.setEpsilon() Solid.setFaceMetadata() Solid.simplify() Solid.splitSelfIntersectingTriangles() Solid.subtract() Solid.surfaceArea() Solid.toSTEP() Solid.toSTL() Solid.union() Solid.visualize() Solid.volume() API Examples Angle Constraint Coincident Constraint Distance Constraint Fixed Constraint Parallel Constraint Assembly Constraint Solver Touch Align Constraint BREP.js Export Map and Usage BREP Kernel Reference BREP Model and Classes Bug Reporting and Repro Test Cases Embeddable CAD App CONTRIBUTING C++ Solid Porting Cylindrical Face Radius Embedding Application Architecture Docs Embedding and Integration Docs Kernel and Geometry Docs Application Subsystems Docs Developer Docs Documentation Screenshots Expressions and Configurator Radius Metadata for Extruded Sketches Feature Dimension Gizmos (Developer) Assembly Component Boolean Chamfer Collapse Edge Datium Datum Edge Smooth Extrude Fillet Helix Hole Image Editor (Shared) Image Heightmap Solid Image to Face Import 3D Model Features Loft Mirror NURBS Face Solid Offset Face Offset Shell Overlap Cleanup Pattern Linear Pattern Radial Pattern (Legacy) Plane Polygon Solid Primitive Cone Primitive Cube Primitive Cylinder Primitive Pyramid Primitive Sphere Primitive Torus Push Face Remesh Revolve Sheet Metal Contour Flange Sheet Metal Cutout Sheet Metal Flange Sheet Metal Hem Sheet Metal Tab Sketch Smooth With Subdivision Spline Sweep Text to Face Thicken Transform Tube File Formats: Import and Export Fillet Process Font Licenses Getting Started GitHub Repo Storage Highlights History Systems How It Works Input Params Schema Recent Inspector Improvements Inspector LICENSE Modeling Mode PMI Mode 2D Sheets Mode Sketch Mode PartHistory Reference Plugins and Examples Angle Dimension Explode Body Hole Callout PMI Annotations Leader Linear Dimension Note Radial Dimension Simplified Radial Dimension Interface 2D Sketch Solver (Standalone) Embeddable 2D Sketcher Solid Developer Guide Testing Topological Face and Edge Naming Specification UI Overview (Browser) What's New Workbench Implementation Plan All Workbench Assemblies Workbench Import Workbench Modeling Workbench PMI Workbench Sheet Metal Workbench Surfacing Workbench Wire Harness Workbench This project's license Copyright 2025 Autodrop3d LLC https://autodrop3d.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 1. Any modifications made to the Software must be submitted to Autodrop3d LLC with an irrevocable assignment of the copyright via git pull request. This is intended to allow Autodrop3d LLC to sell commercial licenses of the Software for use in proprietary products under a dual-licensing strategy. Failure to contribute back modifications without a commercial license purchased from Autodrop3d LLC voids all permissions granted by this license. 2. If Autodrop3d LLC is sold, merged, transferred, or otherwise succeeded by any entity or individual, all rights and obligations described in this license shall transfer automatically to that successor entity or individual. 3. If Autodrop3d LLC ceases operations or dissolves, and no successor entity or individual continues to publicly host the Software in a manner that allows the public to obtain the source code and submit contributions for a period of at least eighteen (18) consecutive months, then Clauses 1 and 2 of this license shall be automatically and irrevocably canceled. The above copyright notice and these permission notices shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Licenses Report of libraries used in this package 33 packages • 7 license types (MIT AND Zlib) 2 packages pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage pako 1 version zlib port to javascript - fast, modularized, with browser support Repo / Homepage (MIT OR GPL-3.0-or-later) 1 package jszip 1 version Create, read and edit .zip files with JavaScript http://stuartk.com/jszip Author: Stuart Knightley <stuart@stuartk.com> Repo / Homepage Apache-2.0 2 packages @dimforge/rapier3d 1 version 3-dimensional physics engine in Rust - official JS bindings. Repo / Homepage manifold-3d 1 version Geometry library for topological robustness Repo / Homepage BSD-3-Clause 1 package vhacd-js 1 version Voxelized hierarchical approximate convex mesh decomposition Author: Paul Connelly Repo / Homepage ISC 1 package inherits 1 version Browser-friendly inheritance fully compatible with standard node.js inherits() Repo / Homepage MIT 25 packages @babel/runtime 1 version babel's modular runtime helpers Author: The Babel Team (https://babel.dev/team) Repo / Homepage @tarikjabiri/dxf 1 version A JavaScript interface to Dxf written in TypeScript. Author: Tarik EL JABIRI Repo / Homepage @types/pako 1 version TypeScript definitions for pako Repo / Homepage base64-arraybuffer 1 version Encode/decode base64 data into ArrayBuffers Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage core-js 1 version Standard library Author: Denis Pushkarev <zloirock@zloirock.ru> Repo / Homepage core-util-is 1 version The `util.is*` functions introduced in Node v0.12. Author: Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me/) Repo / Homepage css-line-break 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage fast-png 1 version PNG image decoder and encoder written entirely in JavaScript Author: Michaël Zasso Repo / Homepage html2canvas 1 version Screenshots with JavaScript Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage immediate 1 version A cross browser microtask library Repo / Homepage iobuffer 1 version Read and write binary data on ArrayBuffers Author: Michaël Zasso Repo / Homepage isarray 1 version Array#isArray for older browsers Author: Julian Gruber <mail@juliangruber.com> Repo / Homepage jspdf 1 version PDF Document creation from JavaScript Repo / Homepage lie 1 version A basic but performant promise implementation Repo / Homepage marked 1 version A markdown parser built for speed Author: Christopher Jeffrey Repo / Homepage monaco-editor 1 version A browser based code editor Author: Microsoft Corporation Repo / Homepage process-nextick-args 1 version process.nextTick but always with args Repo / Homepage readable-stream 1 version Streams3, a user-land copy of the stream library from Node.js Repo / Homepage safe-buffer 1 version Safer Node.js Buffer API Author: Feross Aboukhadijeh <feross@feross.org> Repo / Homepage setimmediate 1 version A shim for the setImmediate efficient script yielding API Author: YuzuJS Repo / Homepage string_decoder 1 version The string_decoder module from Node core Repo / Homepage text-segmentation 1 version Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage three 1 version JavaScript 3D library Author: mrdoob Repo / Homepage util-deprecate 1 version The Node.js `util.deprecate()` function with browser support Author: Nathan Rajlich <nathan@tootallnate.net> (http://n8.io/) Repo / Homepage utrie 1 version Unicode Trie Author: Niklas von Hertzen <niklasvh@gmail.com> Repo / Homepage SGI-B-2.0 1 package tess2 1 version GLU tesselator ported to Javascript, performs polygon boolean operations and triangulation Author: Matt DesLauriers <dave.des@gmail.com> Repo / Homepage Font Licenses Bundled fonts are licensed separately from npm packages. Font license details Generated from installed node_modules graph (dependencies + optionalDependencies) + vendored third-party components ."
955
955
  },
956
956
  {
957
957
  "title": "Input Params Schema",
package/package.json CHANGED
@@ -1,18 +1,17 @@
1
1
  {
2
2
  "name": "brep-io-kernel",
3
- "version": "1.0.266",
3
+ "version": "1.0.268",
4
4
  "scripts": {
5
5
  "start": "pnpm dev",
6
6
  "dev": "node ./scripts/prepareFontAssets.js && pnpm prepareFonts && pnpm build:kernel && vite --host 0.0.0.0",
7
7
  "build": "pnpm prepareFonts && pnpm build:kernel && vite build",
8
8
  "build:cloudflare": "node ./scripts/buildCloudflare.js",
9
9
  "build:manifoldPlus": "node ./scripts/buildManifoldPlus.js",
10
- "install:emscripten": "node ./scripts/installEmscripten.js",
11
10
  "buildThreadGeometry": "node ./scripts/prepareManifoldRuntime.js && node ./scripts/bootstrapThreadGeometryCatalog.js && node ./scripts/buildThreadGeometry.js",
12
11
  "build:kernel": "node ./scripts/prepareManifoldRuntime.js && pnpm generateLicenses && vite build --config vite.config.kernel.js && node ./scripts/syncKernelAssets.js",
13
12
  "lint": "eslint .",
14
13
  "lint:fix": "eslint . --fix",
15
- "liveTesting": "nodemon --watch src --ignore \"src/generated/**\" --ext js --exec \"pnpm test\"",
14
+ "liveTesting": "node --watch --watch-preserve-output ./scripts/liveTesting.js",
16
15
  "test": "node ./scripts/prepareManifoldRuntime.js && node ./src/tests/tests.js",
17
16
  "generateLicenses": "node ./generateLicenses.js && node ./scripts/generateLicenseBundle.js",
18
17
  "prepareFonts": "node ./scripts/prepareFontAssets.js",
@@ -75,7 +74,6 @@
75
74
  "vite-plugin-wasm": "^3.5.0",
76
75
  "eslint": "^9.39.3",
77
76
  "globals": "^16.5.0",
78
- "nodemon": "^3.1.14",
79
77
  "playwright": "^1.58.2",
80
78
  "vite": "^7.3.1"
81
79
  }