brepjs 18.107.0 → 18.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/2d.cjs +6 -6
  2. package/dist/2d.js +6 -6
  3. package/dist/{blueprint-D5ArjKiA.cjs → blueprint-BwkD2qeC.cjs} +5 -5
  4. package/dist/{blueprint-CF12Nceg.js → blueprint-Dw0QqImu.js} +5 -5
  5. package/dist/{blueprintFns-CcCfkbyd.cjs → blueprintFns-B-aybpEo.cjs} +2 -2
  6. package/dist/{blueprintFns-BuPAK4OB.js → blueprintFns-BowWsZgJ.js} +2 -2
  7. package/dist/{blueprintSketcher-CEQ8s7TD.js → blueprintSketcher-7rtwqUHZ.js} +3 -3
  8. package/dist/{blueprintSketcher-DCttG3KS.cjs → blueprintSketcher-RK-cH6ps.cjs} +3 -3
  9. package/dist/{boolean2D-BCqDjg0y.cjs → boolean2D-CZUEOoAh.cjs} +4 -4
  10. package/dist/{boolean2D-8rB2sUzj.js → boolean2D-y0SSZfe2.js} +4 -4
  11. package/dist/brepjs.cjs +111 -27
  12. package/dist/brepjs.js +111 -27
  13. package/dist/{cameraFns-Bu6jgTKc.js → cameraFns-bk9e0F-T.js} +2 -2
  14. package/dist/{cameraFns-S7YbAxfg.cjs → cameraFns-uo1sZbBT.cjs} +2 -2
  15. package/dist/core.cjs +1 -1
  16. package/dist/core.js +1 -1
  17. package/dist/{cornerFinder-Ci2NbbAW.cjs → cornerFinder-B4q88TRb.cjs} +1 -1
  18. package/dist/{cornerFinder-COqoeY--.js → cornerFinder-DUGeBIvD.js} +1 -1
  19. package/dist/csg/evaluate.d.ts +25 -0
  20. package/dist/{curveFns-CG05Jygr.js → curveFns-CcSn4-Rf.js} +1 -1
  21. package/dist/{curveFns-Dx7_wMut.cjs → curveFns-DgUJpH4z.cjs} +1 -1
  22. package/dist/{drawFns-DYkjT_hx.cjs → drawFns-DNxs7PAT.cjs} +12 -12
  23. package/dist/{drawFns-CsXPFyDe.js → drawFns-SQIBls6p.js} +12 -12
  24. package/dist/{faceFns-mo4ThIHz.js → faceFns-B86WGqDg.js} +2 -2
  25. package/dist/{faceFns-DKg2St8b.cjs → faceFns-BV0GnTlt.cjs} +2 -2
  26. package/dist/{healingFns-OL0bBSSY.cjs → healingFns-C4UE1ZyM.cjs} +5 -5
  27. package/dist/{healingFns-C5AomW4j.js → healingFns-CPm_VFck.js} +5 -5
  28. package/dist/{helpers-8zxf2gkc.cjs → helpers-BSLPCflF.cjs} +6 -6
  29. package/dist/{helpers-DT44wBAD.js → helpers-DhJwFrkC.js} +6 -6
  30. package/dist/{importFns-B6hw9Nhx.cjs → importFns-CgMQIi0z.cjs} +2 -2
  31. package/dist/{importFns-CEczwPdN.js → importFns-nR9lEx22.js} +2 -2
  32. package/dist/io.cjs +2 -2
  33. package/dist/io.js +2 -2
  34. package/dist/kernel/brepkit/transformOps.d.ts +1 -0
  35. package/dist/kernel/interfaces/transformOps.d.ts +10 -0
  36. package/dist/kernel/occt/transformOps.d.ts +8 -0
  37. package/dist/kernel/occtWasm/occtWasmAdapter.cjs +1 -1
  38. package/dist/kernel/occtWasm/occtWasmAdapter.d.ts +1 -0
  39. package/dist/kernel/occtWasm/occtWasmAdapter.js +1 -1
  40. package/dist/kernel/occtWasm/occtWasmTypes.d.ts +7 -0
  41. package/dist/kernel/occtWasm/transformOps.d.ts +7 -0
  42. package/dist/{loftFns-DyNuD9XL.js → loftFns-CmShFQlv.js} +1 -1
  43. package/dist/{loftFns-DaRDYpfB.cjs → loftFns-fpTmrIdd.cjs} +1 -1
  44. package/dist/{measureFns-Q2dnokUU.cjs → measureFns-DblG0Yaz.cjs} +3 -3
  45. package/dist/{measureFns-Dkh_DmrE.js → measureFns-a5Vx25or.js} +3 -3
  46. package/dist/measurement.cjs +1 -1
  47. package/dist/measurement.js +1 -1
  48. package/dist/{meshFns-BgF4Xesg.cjs → meshFns-1hQSn1p2.cjs} +9 -3
  49. package/dist/{meshFns-BvP9Tm5Q.js → meshFns-DbmidUzH.js} +4 -4
  50. package/dist/{occtWasmAdapter-DDZELjlB.cjs → occtWasmAdapter-B2TEQOjs.cjs} +38 -10
  51. package/dist/{occtWasmAdapter-BDEPveZs.js → occtWasmAdapter-CKwtxwNH.js} +38 -10
  52. package/dist/operations.cjs +2 -2
  53. package/dist/operations.js +2 -2
  54. package/dist/{primitiveFns-62SO4ti5.js → primitiveFns-CBrOyk5S.js} +4 -4
  55. package/dist/{primitiveFns-BAWtMd9H.cjs → primitiveFns-DLIWtQWA.cjs} +4 -4
  56. package/dist/projection.cjs +1 -1
  57. package/dist/projection.js +1 -1
  58. package/dist/query.cjs +2 -2
  59. package/dist/query.js +2 -2
  60. package/dist/{shapeFns-DyBbhU30.js → shapeFns-DrZOVwHX.js} +44 -4
  61. package/dist/{shapeFns-L4a8kH_A.cjs → shapeFns-ybo0INGL.cjs} +55 -3
  62. package/dist/shapeRef.cjs +1 -1
  63. package/dist/shapeRef.js +1 -1
  64. package/dist/{shapeRefFns-Dij41NuC.cjs → shapeRefFns--2FPCL7P.cjs} +4 -4
  65. package/dist/{shapeRefFns-Cn4WNb3q.js → shapeRefFns-C1DefNzr.js} +4 -4
  66. package/dist/{shapeTypes-Bwgm5N6R.cjs → shapeTypes-BTTwjHy5.cjs} +18 -1
  67. package/dist/{shapeTypes-C4lPfrc2.js → shapeTypes-Dpu6mD3m.js} +18 -1
  68. package/dist/sketching.cjs +3 -3
  69. package/dist/sketching.js +3 -3
  70. package/dist/{solidBuilders-Biwv2cW3.js → solidBuilders-C32wXQWG.js} +5 -5
  71. package/dist/{solidBuilders-CgRmJEdn.cjs → solidBuilders-DiUv_mD0.cjs} +5 -5
  72. package/dist/{surfaceBuilders-FLnYYA70.cjs → surfaceBuilders-UyyfZy8w.cjs} +2 -2
  73. package/dist/{surfaceBuilders-Bww4jhBo.js → surfaceBuilders-rkE-jE90.js} +2 -2
  74. package/dist/text.cjs +2 -2
  75. package/dist/text.js +2 -2
  76. package/dist/{textBlueprints-CEzTC9vX.js → textBlueprints-BnkWAqwS.js} +7 -7
  77. package/dist/{textBlueprints-08NcMO9T.cjs → textBlueprints-D5lsZswr.cjs} +7 -7
  78. package/dist/{textMetrics-CBbDQ5QW.js → textMetrics-COGYk0LE.js} +1 -1
  79. package/dist/{textMetrics-W-H6jUDj.cjs → textMetrics-IC_IoI7l.cjs} +1 -1
  80. package/dist/{threadFns-DGYdomjN.cjs → threadFns-C8bErjVC.cjs} +6 -6
  81. package/dist/{threadFns-8rKpQXiR.js → threadFns-bCOhVQLb.js} +6 -6
  82. package/dist/topology/metadata/metadataPropagation.d.ts +21 -0
  83. package/dist/topology.cjs +8 -8
  84. package/dist/topology.js +8 -8
  85. package/dist/{topologyQueryFns-Do8E4EXj.js → topologyQueryFns-BeKaWpNm.js} +1 -1
  86. package/dist/{topologyQueryFns-ygBBXxnP.cjs → topologyQueryFns-CoXVHuN7.cjs} +1 -1
  87. package/package.json +1 -1
package/dist/2d.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_shapeTypes = require("./shapeTypes-Bwgm5N6R.cjs");
2
+ const require_shapeTypes = require("./shapeTypes-BTTwjHy5.cjs");
3
3
  const require_errors = require("./errors-CXJtc4I7.cjs");
4
- const require_topologyQueryFns = require("./topologyQueryFns-ygBBXxnP.cjs");
5
- const require_blueprintSketcher = require("./blueprintSketcher-DCttG3KS.cjs");
6
- const require_blueprint = require("./blueprint-D5ArjKiA.cjs");
7
- const require_boolean2D = require("./boolean2D-BCqDjg0y.cjs");
8
- const require_blueprintFns = require("./blueprintFns-CcCfkbyd.cjs");
4
+ const require_topologyQueryFns = require("./topologyQueryFns-CoXVHuN7.cjs");
5
+ const require_blueprintSketcher = require("./blueprintSketcher-RK-cH6ps.cjs");
6
+ const require_blueprint = require("./blueprint-BwkD2qeC.cjs");
7
+ const require_boolean2D = require("./boolean2D-CZUEOoAh.cjs");
8
+ const require_blueprintFns = require("./blueprintFns-B-aybpEo.cjs");
9
9
  //#region src/core/curve2dHandle.ts
10
10
  /**
11
11
  * Wrap a raw kernel 2D curve handle with brand + disposal tracking.
package/dist/2d.js CHANGED
@@ -1,10 +1,10 @@
1
- import { B as createKernelHandle, Q as getKernel2D, a as createEdge } from "./shapeTypes-C4lPfrc2.js";
1
+ import { B as createKernelHandle, Q as getKernel2D, a as createEdge } from "./shapeTypes-Dpu6mD3m.js";
2
2
  import { A as ok, b as err, d as validationError, t as BrepErrorCode } from "./errors-DNWJsfVU.js";
3
- import { w as kernelCallRaw } from "./topologyQueryFns-Do8E4EXj.js";
4
- import { a as Blueprints, i as CompoundBlueprint, r as organiseBlueprints } from "./blueprintSketcher-CEQ8s7TD.js";
5
- import { _ as Curve2D, t as Blueprint, y as BoundingBox2d } from "./blueprint-CF12Nceg.js";
6
- import { a as fuseBlueprints, c as roundedRectangleBlueprint, i as cutBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-8rB2sUzj.js";
7
- import { S as reverseCurve, _ as curve2dIsOnCurve, a as isInside2D, b as curve2dSplitAt, c as scale2D, d as stretch2D, f as toSVGPathD, g as curve2dFirstPoint, h as curve2dDistanceFrom, i as getOrientation2D, l as sketchOnFace2D, m as curve2dBoundingBox, o as mirror2D, p as translate2D, r as getBounds2D, s as rotate2D, t as createBlueprint, u as sketchOnPlane2D, v as curve2dLastPoint, x as curve2dTangentAt, y as curve2dParameter } from "./blueprintFns-BuPAK4OB.js";
3
+ import { w as kernelCallRaw } from "./topologyQueryFns-BeKaWpNm.js";
4
+ import { a as Blueprints, i as CompoundBlueprint, r as organiseBlueprints } from "./blueprintSketcher-7rtwqUHZ.js";
5
+ import { _ as Curve2D, t as Blueprint, y as BoundingBox2d } from "./blueprint-Dw0QqImu.js";
6
+ import { a as fuseBlueprints, c as roundedRectangleBlueprint, i as cutBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-y0SSZfe2.js";
7
+ import { S as reverseCurve, _ as curve2dIsOnCurve, a as isInside2D, b as curve2dSplitAt, c as scale2D, d as stretch2D, f as toSVGPathD, g as curve2dFirstPoint, h as curve2dDistanceFrom, i as getOrientation2D, l as sketchOnFace2D, m as curve2dBoundingBox, o as mirror2D, p as translate2D, r as getBounds2D, s as rotate2D, t as createBlueprint, u as sketchOnPlane2D, v as curve2dLastPoint, x as curve2dTangentAt, y as curve2dParameter } from "./blueprintFns-BowWsZgJ.js";
8
8
  //#region src/core/curve2dHandle.ts
9
9
  /**
10
10
  * Wrap a raw kernel 2D curve handle with brand + disposal tracking.
@@ -1,14 +1,14 @@
1
- const require_shapeTypes = require("./shapeTypes-Bwgm5N6R.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-BTTwjHy5.cjs");
2
2
  const require_vec3 = require("./vec3-CFwOI0ZI.cjs");
3
3
  const require_errors = require("./errors-CXJtc4I7.cjs");
4
4
  const require_constants = require("./constants-BOVyEYGH.cjs");
5
5
  const require_types = require("./types-KjA8tY4Y.cjs");
6
6
  const require_planeOps = require("./planeOps-BA4HfgQu.cjs");
7
- const require_faceFns = require("./faceFns-DKg2St8b.cjs");
8
- const require_curveFns = require("./curveFns-Dx7_wMut.cjs");
7
+ const require_faceFns = require("./faceFns-BV0GnTlt.cjs");
8
+ const require_curveFns = require("./curveFns-DgUJpH4z.cjs");
9
9
  const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
10
- const require_surfaceBuilders = require("./surfaceBuilders-FLnYYA70.cjs");
11
- const require_helpers = require("./helpers-8zxf2gkc.cjs");
10
+ const require_surfaceBuilders = require("./surfaceBuilders-UyyfZy8w.cjs");
11
+ const require_helpers = require("./helpers-BSLPCflF.cjs");
12
12
  //#region src/2d/lib/definitions.ts
13
13
  /** Type guard that checks whether a value is a `Point2D`. */
14
14
  function isPoint2D(point) {
@@ -1,14 +1,14 @@
1
- import { G as unregisterFromCleanup, Q as getKernel2D, U as registerForCleanup, Z as getKernel, a as createEdge, u as createWire } from "./shapeTypes-C4lPfrc2.js";
1
+ import { G as unregisterFromCleanup, Q as getKernel2D, U as registerForCleanup, Z as getKernel, a as createEdge, u as createWire } from "./shapeTypes-Dpu6mD3m.js";
2
2
  import { n as wasmIndex } from "./vec3-Dpha8d5k.js";
3
3
  import { A as ok, R as unwrap, b as err, d as validationError, h as bug, n as computationError } from "./errors-DNWJsfVU.js";
4
4
  import { r as RAD2DEG, t as DEG2RAD } from "./constants-ITRzCnCp.js";
5
5
  import { r as toVec3 } from "./types-D24Y27N0.js";
6
6
  import { r as makePlane } from "./planeOps-DSjjtrjg.js";
7
- import { _ as cast, h as uvCoordinates, i as faceGeomType, m as uvBounds, r as faceCenter } from "./faceFns-mo4ThIHz.js";
8
- import { p as getOrientation } from "./curveFns-CG05Jygr.js";
7
+ import { _ as cast, h as uvCoordinates, i as faceGeomType, m as uvBounds, r as faceCenter } from "./faceFns-B86WGqDg.js";
8
+ import { p as getOrientation } from "./curveFns-CcSn4-Rf.js";
9
9
  import { n as getAtOrThrow, r as lastOrThrow, t as firstOrThrow } from "./arrayAccess-DrUGPADn.js";
10
- import { r as makeFace } from "./surfaceBuilders-Bww4jhBo.js";
11
- import { _ as samePoint, b as subtract2d, l as add2d, o as normalize2d, p as distance2d, t as getSingleFace, v as scalarMultiply2d } from "./helpers-DT44wBAD.js";
10
+ import { r as makeFace } from "./surfaceBuilders-rkE-jE90.js";
11
+ import { _ as samePoint, b as subtract2d, l as add2d, o as normalize2d, p as distance2d, t as getSingleFace, v as scalarMultiply2d } from "./helpers-DhJwFrkC.js";
12
12
  //#region src/2d/lib/definitions.ts
13
13
  /** Type guard that checks whether a value is a `Point2D`. */
14
14
  function isPoint2D(point) {
@@ -1,6 +1,6 @@
1
1
  const require_errors = require("./errors-CXJtc4I7.cjs");
2
- const require_blueprintSketcher = require("./blueprintSketcher-DCttG3KS.cjs");
3
- const require_blueprint = require("./blueprint-D5ArjKiA.cjs");
2
+ const require_blueprintSketcher = require("./blueprintSketcher-RK-cH6ps.cjs");
3
+ const require_blueprint = require("./blueprint-BwkD2qeC.cjs");
4
4
  //#region src/2d/lib/curve2dFns.ts
5
5
  /**
6
6
  * Return a reversed copy of the curve (non-mutating).
@@ -1,6 +1,6 @@
1
1
  import { A as ok, b as err, d as validationError, t as BrepErrorCode } from "./errors-DNWJsfVU.js";
2
- import { i as CompoundBlueprint } from "./blueprintSketcher-CEQ8s7TD.js";
3
- import { t as Blueprint } from "./blueprint-CF12Nceg.js";
2
+ import { i as CompoundBlueprint } from "./blueprintSketcher-7rtwqUHZ.js";
3
+ import { t as Blueprint } from "./blueprint-Dw0QqImu.js";
4
4
  //#region src/2d/lib/curve2dFns.ts
5
5
  /**
6
6
  * Return a reversed copy of the curve (non-mutating).
@@ -1,10 +1,10 @@
1
- import { Q as getKernel2D, Z as getKernel } from "./shapeTypes-C4lPfrc2.js";
1
+ import { Q as getKernel2D, Z as getKernel } from "./shapeTypes-Dpu6mD3m.js";
2
2
  import { n as wasmIndex } from "./vec3-Dpha8d5k.js";
3
3
  import { A as ok, R as unwrap, T as isOk, b as err, h as bug, n as computationError, s as safeIndex } from "./errors-DNWJsfVU.js";
4
4
  import { r as RAD2DEG, t as DEG2RAD } from "./constants-ITRzCnCp.js";
5
5
  import { t as firstOrThrow } from "./arrayAccess-DrUGPADn.js";
6
- import { _ as samePoint, b as subtract2d, d as cartesianToPolar, f as crossProduct2d, g as rotate2d, h as polarToCartesian, l as add2d, m as polarAngle2d, o as normalize2d, p as distance2d, v as scalarMultiply2d } from "./helpers-DT44wBAD.js";
7
- import { _ as Curve2D, c as make2dCircle, f as make2dSegmentCurve, h as approximateAsBSpline, m as make2dThreePointArc, n as asSVG, o as make2dArcFromCenter, p as make2dTangentArc, r as viewbox, s as make2dBezierCurve, t as Blueprint, u as make2dEllipseArc, x as isPoint2D, y as BoundingBox2d } from "./blueprint-CF12Nceg.js";
6
+ import { _ as samePoint, b as subtract2d, d as cartesianToPolar, f as crossProduct2d, g as rotate2d, h as polarToCartesian, l as add2d, m as polarAngle2d, o as normalize2d, p as distance2d, v as scalarMultiply2d } from "./helpers-DhJwFrkC.js";
7
+ import { _ as Curve2D, c as make2dCircle, f as make2dSegmentCurve, h as approximateAsBSpline, m as make2dThreePointArc, n as asSVG, o as make2dArcFromCenter, p as make2dTangentArc, r as viewbox, s as make2dBezierCurve, t as Blueprint, u as make2dEllipseArc, x as isPoint2D, y as BoundingBox2d } from "./blueprint-Dw0QqImu.js";
8
8
  //#region node_modules/flatqueue/index.js
9
9
  /**
10
10
  * @typedef {Float64ArrayConstructor | Float32ArrayConstructor |
@@ -1,10 +1,10 @@
1
- const require_shapeTypes = require("./shapeTypes-Bwgm5N6R.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-BTTwjHy5.cjs");
2
2
  const require_vec3 = require("./vec3-CFwOI0ZI.cjs");
3
3
  const require_errors = require("./errors-CXJtc4I7.cjs");
4
4
  const require_constants = require("./constants-BOVyEYGH.cjs");
5
5
  const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
6
- const require_helpers = require("./helpers-8zxf2gkc.cjs");
7
- const require_blueprint = require("./blueprint-D5ArjKiA.cjs");
6
+ const require_helpers = require("./helpers-BSLPCflF.cjs");
7
+ const require_blueprint = require("./blueprint-BwkD2qeC.cjs");
8
8
  //#region node_modules/flatqueue/index.js
9
9
  /**
10
10
  * @typedef {Float64ArrayConstructor | Float32ArrayConstructor |
@@ -1,10 +1,10 @@
1
1
  const require_vec3 = require("./vec3-CFwOI0ZI.cjs");
2
2
  const require_errors = require("./errors-CXJtc4I7.cjs");
3
3
  const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
4
- const require_surfaceBuilders = require("./surfaceBuilders-FLnYYA70.cjs");
5
- const require_blueprintSketcher = require("./blueprintSketcher-DCttG3KS.cjs");
6
- const require_helpers = require("./helpers-8zxf2gkc.cjs");
7
- const require_blueprint = require("./blueprint-D5ArjKiA.cjs");
4
+ const require_surfaceBuilders = require("./surfaceBuilders-UyyfZy8w.cjs");
5
+ const require_blueprintSketcher = require("./blueprintSketcher-RK-cH6ps.cjs");
6
+ const require_helpers = require("./helpers-BSLPCflF.cjs");
7
+ const require_blueprint = require("./blueprint-BwkD2qeC.cjs");
8
8
  //#region src/2d/blueprints/cannedBlueprints.ts
9
9
  /**
10
10
  * Create a regular polygon blueprint inscribed in a circle of the given radius.
@@ -1,10 +1,10 @@
1
1
  import { n as wasmIndex } from "./vec3-Dpha8d5k.js";
2
2
  import { R as unwrap, h as bug, s as safeIndex } from "./errors-DNWJsfVU.js";
3
3
  import { r as lastOrThrow } from "./arrayAccess-DrUGPADn.js";
4
- import { v as zip } from "./surfaceBuilders-Bww4jhBo.js";
5
- import { a as Blueprints, i as CompoundBlueprint, l as intersectCurves, r as organiseBlueprints, t as BlueprintSketcher, u as Flatbush } from "./blueprintSketcher-CEQ8s7TD.js";
6
- import { _ as samePoint$1, b as subtract2d, f as crossProduct2d, s as PRECISION_INTERSECTION } from "./helpers-DT44wBAD.js";
7
- import { b as removeDuplicatePoints, f as make2dSegmentCurve, t as Blueprint } from "./blueprint-CF12Nceg.js";
4
+ import { v as zip } from "./surfaceBuilders-rkE-jE90.js";
5
+ import { a as Blueprints, i as CompoundBlueprint, l as intersectCurves, r as organiseBlueprints, t as BlueprintSketcher, u as Flatbush } from "./blueprintSketcher-7rtwqUHZ.js";
6
+ import { _ as samePoint$1, b as subtract2d, f as crossProduct2d, s as PRECISION_INTERSECTION } from "./helpers-DhJwFrkC.js";
7
+ import { b as removeDuplicatePoints, f as make2dSegmentCurve, t as Blueprint } from "./blueprint-Dw0QqImu.js";
8
8
  //#region src/2d/blueprints/cannedBlueprints.ts
9
9
  /**
10
10
  * Create a regular polygon blueprint inscribed in a circle of the given radius.
package/dist/brepjs.cjs CHANGED
@@ -1,37 +1,37 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_textBlueprints = require("./textBlueprints-08NcMO9T.cjs");
3
- const require_shapeTypes = require("./shapeTypes-Bwgm5N6R.cjs");
4
- const require_occtWasmAdapter = require("./occtWasmAdapter-DDZELjlB.cjs");
2
+ const require_textBlueprints = require("./textBlueprints-D5lsZswr.cjs");
3
+ const require_shapeTypes = require("./shapeTypes-BTTwjHy5.cjs");
4
+ const require_occtWasmAdapter = require("./occtWasmAdapter-B2TEQOjs.cjs");
5
5
  const require_vec3 = require("./vec3-CFwOI0ZI.cjs");
6
6
  const require_errors = require("./errors-CXJtc4I7.cjs");
7
- const require_topologyQueryFns = require("./topologyQueryFns-ygBBXxnP.cjs");
7
+ const require_topologyQueryFns = require("./topologyQueryFns-CoXVHuN7.cjs");
8
8
  const require_constants = require("./constants-BOVyEYGH.cjs");
9
9
  const require_types = require("./types-KjA8tY4Y.cjs");
10
10
  const require_vecOps = require("./vecOps-CCnJt-yH.cjs");
11
11
  const require_planeOps = require("./planeOps-BA4HfgQu.cjs");
12
- const require_faceFns = require("./faceFns-DKg2St8b.cjs");
13
- const require_shapeFns = require("./shapeFns-L4a8kH_A.cjs");
14
- const require_curveFns = require("./curveFns-Dx7_wMut.cjs");
15
- const require_meshFns = require("./meshFns-BgF4Xesg.cjs");
12
+ const require_faceFns = require("./faceFns-BV0GnTlt.cjs");
13
+ const require_shapeFns = require("./shapeFns-ybo0INGL.cjs");
14
+ const require_curveFns = require("./curveFns-DgUJpH4z.cjs");
15
+ const require_meshFns = require("./meshFns-1hQSn1p2.cjs");
16
16
  const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
17
- const require_surfaceBuilders = require("./surfaceBuilders-FLnYYA70.cjs");
18
- const require_solidBuilders = require("./solidBuilders-CgRmJEdn.cjs");
19
- const require_healingFns = require("./healingFns-OL0bBSSY.cjs");
20
- const require_threadFns = require("./threadFns-DGYdomjN.cjs");
21
- const require_blueprintSketcher = require("./blueprintSketcher-DCttG3KS.cjs");
22
- const require_helpers = require("./helpers-8zxf2gkc.cjs");
23
- const require_drawFns = require("./drawFns-DYkjT_hx.cjs");
24
- const require_measureFns = require("./measureFns-Q2dnokUU.cjs");
25
- const require_cornerFinder = require("./cornerFinder-Ci2NbbAW.cjs");
26
- const require_boolean2D = require("./boolean2D-BCqDjg0y.cjs");
27
- const require_blueprintFns = require("./blueprintFns-CcCfkbyd.cjs");
28
- const require_importFns = require("./importFns-B6hw9Nhx.cjs");
29
- const require_loftFns = require("./loftFns-DaRDYpfB.cjs");
30
- const require_cameraFns = require("./cameraFns-S7YbAxfg.cjs");
31
- const require_textMetrics = require("./textMetrics-W-H6jUDj.cjs");
32
- const require_shapeRefFns = require("./shapeRefFns-Dij41NuC.cjs");
17
+ const require_surfaceBuilders = require("./surfaceBuilders-UyyfZy8w.cjs");
18
+ const require_solidBuilders = require("./solidBuilders-DiUv_mD0.cjs");
19
+ const require_healingFns = require("./healingFns-C4UE1ZyM.cjs");
20
+ const require_threadFns = require("./threadFns-C8bErjVC.cjs");
21
+ const require_blueprintSketcher = require("./blueprintSketcher-RK-cH6ps.cjs");
22
+ const require_helpers = require("./helpers-BSLPCflF.cjs");
23
+ const require_drawFns = require("./drawFns-DNxs7PAT.cjs");
24
+ const require_measureFns = require("./measureFns-DblG0Yaz.cjs");
25
+ const require_cornerFinder = require("./cornerFinder-B4q88TRb.cjs");
26
+ const require_boolean2D = require("./boolean2D-CZUEOoAh.cjs");
27
+ const require_blueprintFns = require("./blueprintFns-B-aybpEo.cjs");
28
+ const require_importFns = require("./importFns-CgMQIi0z.cjs");
29
+ const require_loftFns = require("./loftFns-fpTmrIdd.cjs");
30
+ const require_cameraFns = require("./cameraFns-uo1sZbBT.cjs");
31
+ const require_textMetrics = require("./textMetrics-IC_IoI7l.cjs");
32
+ const require_shapeRefFns = require("./shapeRefFns--2FPCL7P.cjs");
33
33
  const require_workerPool = require("./workerPool-D30NsiIW.cjs");
34
- const require_primitiveFns = require("./primitiveFns-BAWtMd9H.cjs");
34
+ const require_primitiveFns = require("./primitiveFns-DLIWtQWA.cjs");
35
35
  //#region src/topology/shapeBooleans.ts
36
36
  var BOPAlgo_GlueShift = 1;
37
37
  var BOPAlgo_GlueFull = 2;
@@ -5665,13 +5665,45 @@ function emptyResult(kind) {
5665
5665
  function optVec3(expr, env, where, fallback) {
5666
5666
  return expr ? evalVec3(expr, env, where) : require_errors.ok(fallback);
5667
5667
  }
5668
+ /**
5669
+ * Apply a rigid transform as a cheap location re-tag instead of a deep-copying
5670
+ * transform. The target is an evaluator-cached shape; `locate` returns a fresh,
5671
+ * independently-disposable handle (it shares the source geometry but holds its
5672
+ * own location), so the evaluator owns and disposes it like any other
5673
+ * materialized node. On kernels without a cheap-location path `locate` falls
5674
+ * back to a copy — same geometry, so cached output is unchanged.
5675
+ *
5676
+ * A location re-tag carries no kernel evolution record, so face metadata isn't
5677
+ * propagated automatically and the moved faces carry new (location-dependent)
5678
+ * hashes. Primitives have no metadata (pure O(1) locate); boolean results carry
5679
+ * face tags/colors, which we re-key onto the moved faces (1:1 by iteration
5680
+ * order, since locate shares the source TShape) so a move preserves them —
5681
+ * matching `scale`/`mirror`.
5682
+ */
5683
+ function relocate(shape, ops) {
5684
+ const kernel = require_shapeTypes.getKernel();
5685
+ const { handle, dispose } = kernel.composeTransform(ops);
5686
+ let moved;
5687
+ try {
5688
+ moved = require_shapeTypes.castShape(kernel.locate(shape.wrapped, handle));
5689
+ } finally {
5690
+ dispose();
5691
+ }
5692
+ if (require_shapeFns.hasAnyMetadata(shape)) require_shapeFns.propagateMetadataThroughRelocation(shape, moved);
5693
+ return moved;
5694
+ }
5668
5695
  function evalTranslate(node, ctx) {
5669
5696
  if (node.target.kind === "Empty") return emptyResult("Translate");
5670
5697
  const v = evalVec3(node.vector, ctx.env, "Translate.vector");
5671
5698
  if (!v.ok) return v;
5672
5699
  const r = ctx.evalNode(node.target);
5673
5700
  if (!r.ok) return r;
5674
- return require_errors.ok(require_shapeFns.translate(r.value, v.value));
5701
+ return require_errors.ok(relocate(r.value, [{
5702
+ type: "translate",
5703
+ x: v.value[0],
5704
+ y: v.value[1],
5705
+ z: v.value[2]
5706
+ }]));
5675
5707
  }
5676
5708
  function evalRotate(node, ctx) {
5677
5709
  if (node.target.kind === "Empty") return emptyResult("Rotate");
@@ -5691,7 +5723,12 @@ function evalRotate(node, ctx) {
5691
5723
  if (!at.ok) return at;
5692
5724
  const r = ctx.evalNode(node.target);
5693
5725
  if (!r.ok) return r;
5694
- return require_errors.ok(require_shapeFns.rotate(r.value, a.value, at.value, axis.value));
5726
+ return require_errors.ok(relocate(r.value, [{
5727
+ type: "rotate",
5728
+ angle: a.value,
5729
+ axis: axis.value,
5730
+ center: at.value
5731
+ }]));
5695
5732
  }
5696
5733
  function evalScale(node, ctx) {
5697
5734
  if (node.target.kind === "Empty") return emptyResult("Scale");
@@ -5807,6 +5844,8 @@ var Evaluator = class {
5807
5844
  kernelId;
5808
5845
  defaultTolerance;
5809
5846
  maxCacheEntries;
5847
+ maxMeshCacheEntries;
5848
+ meshCache = /* @__PURE__ */ new Map();
5810
5849
  onStep;
5811
5850
  hits = 0;
5812
5851
  misses = 0;
@@ -5818,6 +5857,9 @@ var Evaluator = class {
5818
5857
  const max = options.maxCacheEntries;
5819
5858
  if (max !== void 0 && (!Number.isInteger(max) || max < 1)) throw new RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(max)}`);
5820
5859
  this.maxCacheEntries = max;
5860
+ const meshMax = options.maxMeshCacheEntries;
5861
+ if (meshMax !== void 0 && (!Number.isInteger(meshMax) || meshMax < 1)) throw new RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(meshMax)}`);
5862
+ this.maxMeshCacheEntries = meshMax;
5821
5863
  }
5822
5864
  /**
5823
5865
  * Materialize a CSG IR tree against the given parameter environment.
@@ -5846,6 +5888,40 @@ var Evaluator = class {
5846
5888
  }
5847
5889
  });
5848
5890
  }
5891
+ /**
5892
+ * Materialize a node and mesh it, caching the mesh by the shape's content key
5893
+ * plus the mesh parameters. The mesh cache is independent of the shape cache:
5894
+ * a hit returns the cached mesh without evaluating or meshing — even after the
5895
+ * shape was LRU-evicted (a mesh is plain data, not a kernel handle). The
5896
+ * returned mesh is borrowed (do not mutate it); it stays valid for the
5897
+ * Evaluator's lifetime, or until `maxMeshCacheEntries` evicts it.
5898
+ */
5899
+ evaluateMesh(node, env = {}, meshOpts = {}) {
5900
+ meshOpts.signal?.throwIfAborted();
5901
+ const useCache = meshOpts.cache ?? true;
5902
+ const quality = require_shapeTypes.qualityDeflection();
5903
+ const tolerance = meshOpts.tolerance ?? quality.tolerance;
5904
+ const angularTolerance = meshOpts.angularTolerance ?? quality.angularTolerance;
5905
+ const meshKey = `${cacheKey(node, env, this.kernelId, this.defaultTolerance)}|${require_meshFns.buildMeshCacheKey(tolerance, angularTolerance, meshOpts.skipNormals ?? false, meshOpts.includeUVs ?? false)}`;
5906
+ if (useCache) {
5907
+ const cached = this.meshCache.get(meshKey);
5908
+ if (cached !== void 0) {
5909
+ if (this.maxMeshCacheEntries !== void 0) {
5910
+ this.meshCache.delete(meshKey);
5911
+ this.meshCache.set(meshKey, cached);
5912
+ }
5913
+ return require_errors.ok(cached);
5914
+ }
5915
+ }
5916
+ const shape = this.evaluate(node, env);
5917
+ if (!shape.ok) return shape;
5918
+ const built = require_shapeTypes.withKernel(this.kernelId, () => require_meshFns.mesh(shape.value, meshOpts));
5919
+ if (useCache) {
5920
+ this.meshCache.set(meshKey, built);
5921
+ if (this.maxMeshCacheEntries !== void 0) this.trimMeshCache(this.maxMeshCacheEntries);
5922
+ }
5923
+ return require_errors.ok(built);
5924
+ }
5849
5925
  evaluateInner(node, env) {
5850
5926
  const key = cacheKey(node, env, this.kernelId, this.defaultTolerance);
5851
5927
  const cached = this.cache.get(key);
@@ -5898,6 +5974,13 @@ var Evaluator = class {
5898
5974
  if (shape !== void 0) this.releaseShape(shape);
5899
5975
  }
5900
5976
  }
5977
+ trimMeshCache(max) {
5978
+ while (this.meshCache.size > max) {
5979
+ const oldest = this.meshCache.keys().next();
5980
+ if (oldest.done) break;
5981
+ this.meshCache.delete(oldest.value);
5982
+ }
5983
+ }
5901
5984
  rollbackPending() {
5902
5985
  for (const key of this.pendingKeys) {
5903
5986
  const shape = this.cache.get(key);
@@ -5923,6 +6006,7 @@ var Evaluator = class {
5923
6006
  for (const shape of this.refCounts.keys()) shape[Symbol.dispose]();
5924
6007
  this.refCounts.clear();
5925
6008
  this.cache.clear();
6009
+ this.meshCache.clear();
5926
6010
  }
5927
6011
  };
5928
6012
  /**
package/dist/brepjs.js CHANGED
@@ -1,36 +1,36 @@
1
- import { $ as getKernelCapabilities, A as planarWire, B as createKernelHandle, C as isOrientedFace, D as manifoldShell, E as isValidSolid, F as as3D, H as isLive, I as is2D, J as withScopeResultAsync, K as withScope, L as is3D, M as getShapeKind, O as orientedFace, P as as2D, R as DisposalScope, S as isManifoldShell, T as isPlanarWire, V as getDisposalStats, W as resetDisposalStats, X as getActiveKernelId, Y as _usingCtx, Z as getKernel, _ as isSolid, a as createEdge, at as registerKernel, b as closedWire, c as createSolid, ct as withQuality, d as isCompound, dt as supportsProjection, et as getKernelTier, f as isEdge, ft as BrepkitAdapter, g as isShell, h as isShape3D, ht as currentQuality, i as createCompound, it as prewarm, j as validSolid, k as planarFace, l as createVertex, lt as withTier, m as isShape1D, mt as resetPerformanceStats, n as castShape3D, nt as initFromManifold, o as createFace, ot as registerKernelTier, p as isFace, pt as getPerformanceStats, q as withScopeResult, rt as initFromOC, s as createShell, st as withKernel, t as castShape, tt as init, u as createWire, ut as supportsConstraintSketch, v as isVertex, w as isPlanarFace, x as isClosedWire, y as isWire, z as createHandle } from "./shapeTypes-C4lPfrc2.js";
2
- import { D as DEFAULT_CAPABILITIES, O as EXACT_BREP_CAPABILITIES, t as OcctWasmAdapter } from "./occtWasmAdapter-BDEPveZs.js";
1
+ import { $ as getKernelCapabilities, A as planarWire, B as createKernelHandle, C as isOrientedFace, D as manifoldShell, E as isValidSolid, F as as3D, H as isLive, I as is2D, J as withScopeResultAsync, K as withScope, L as is3D, M as getShapeKind, O as orientedFace, P as as2D, R as DisposalScope, S as isManifoldShell, T as isPlanarWire, V as getDisposalStats, W as resetDisposalStats, X as getActiveKernelId, Y as _usingCtx, Z as getKernel, _ as isSolid, a as createEdge, at as registerKernel, b as closedWire, c as createSolid, ct as withQuality, d as isCompound, dt as supportsProjection, et as getKernelTier, f as isEdge, ft as BrepkitAdapter, g as isShell, gt as qualityDeflection, h as isShape3D, ht as currentQuality, i as createCompound, it as prewarm, j as validSolid, k as planarFace, l as createVertex, lt as withTier, m as isShape1D, mt as resetPerformanceStats, n as castShape3D, nt as initFromManifold, o as createFace, ot as registerKernelTier, p as isFace, pt as getPerformanceStats, q as withScopeResult, rt as initFromOC, s as createShell, st as withKernel, t as castShape, tt as init, u as createWire, ut as supportsConstraintSketch, v as isVertex, w as isPlanarFace, x as isClosedWire, y as isWire, z as createHandle } from "./shapeTypes-Dpu6mD3m.js";
2
+ import { D as DEFAULT_CAPABILITIES, O as EXACT_BREP_CAPABILITIES, t as OcctWasmAdapter } from "./occtWasmAdapter-CKwtxwNH.js";
3
3
  import { n as wasmIndex } from "./vec3-Dpha8d5k.js";
4
4
  import { A as ok, B as unwrapOr, C as fromNullable, D as mapBoth, E as map, F as tapErr, H as zip, I as tryCatch, L as tryCatchAsync, M as orElse, N as pipeline, O as mapErr, P as tap, R as unwrap, S as flatten, T as isOk, V as unwrapOrElse, _ as all, a as moduleInitError, b as err, c as sketcherStateError, d as validationError, g as OK, h as bug, i as kernelError, j as or, k as match, l as typeCastError, m as BrepBugError, n as computationError, o as queryError, r as ioError, t as BrepErrorCode, u as unsupportedError, v as andThen, w as isErr, x as flatMap, y as collect, z as unwrapErr } from "./errors-DNWJsfVU.js";
5
- import { C as kernelCall, S as vertexPosition, T as kernelCallScoped, _ as iterFaces, a as getCachedSurfaceType, b as iterVertices, c as getFaces, d as getSolids, f as getVertices, g as iterEdges, h as iterCompSolids, m as invalidateShapeCache, n as getBounds, o as getCompSolids, p as getWires, s as getEdges, t as describe$1, u as getShells, v as iterShells, w as kernelCallRaw, x as iterWires, y as iterSolids } from "./topologyQueryFns-Do8E4EXj.js";
5
+ import { C as kernelCall, S as vertexPosition, T as kernelCallScoped, _ as iterFaces, a as getCachedSurfaceType, b as iterVertices, c as getFaces, d as getSolids, f as getVertices, g as iterEdges, h as iterCompSolids, m as invalidateShapeCache, n as getBounds, o as getCompSolids, p as getWires, s as getEdges, t as describe$1, u as getShells, v as iterShells, w as kernelCallRaw, x as iterWires, y as iterSolids } from "./topologyQueryFns-BeKaWpNm.js";
6
6
  import { n as HASH_CODE_MAX, r as RAD2DEG, t as DEG2RAD } from "./constants-ITRzCnCp.js";
7
7
  import { n as toVec2, r as toVec3, t as resolveDirection } from "./types-D24Y27N0.js";
8
8
  import { a as vecDot, c as vecLength, d as vecNormalize, f as vecProjectToPlane, g as vecSub, h as vecScale, i as vecDistance, l as vecLengthSq, m as vecRotate, n as vecAngle, o as vecEquals, p as vecRepr, r as vecCross, s as vecIsZero, t as vecAdd, u as vecNegate } from "./vecOps-SKPRvPH-.js";
9
9
  import { i as pivotPlane, n as createPlane, o as resolvePlane, r as makePlane, s as translatePlane, t as createNamedPlane } from "./planeOps-DSjjtrjg.js";
10
- import { S as shapeType, _ as cast, a as faceOrientation, b as isCompSolid, c as innerWires, d as pointOnSurface, f as projectPointOnFace, g as asTopo, h as uvCoordinates, i as faceGeomType, l as normalAt, m as uvBounds, n as faceAxis, o as flipFaceOrientation, p as removeHolesFromFace, r as faceCenter, s as getSurfaceType, t as classifyPointOnFace, u as outerWire, v as downcast, x as iterTopo, y as fromBREP } from "./faceFns-mo4ThIHz.js";
11
- import { C as findFacesByTag, D as tagFaces, E as setTagMetadata, O as getFaceOrigins, S as getShapeColor, T as getTagMetadata, a as isSameShape, b as colorShape, c as applyMatrix$1, d as resize, f as rotate$2, h as translate$2, i as isEqualShape, k as setShapeOrigin, l as composeTransforms, m as transformCopy$1, n as getHashCode, o as simplify$1, p as scale$3, r as isEmpty$2, s as toBREP$1, t as clone$1, u as mirror$2, w as getFaceTags, x as getFaceColor, y as colorFaces } from "./shapeFns-DyBbhU30.js";
12
- import { a as curveIsPeriodic, c as curvePointAt, d as flipOrientation, f as getCurveType, h as offsetWire2D, i as curveIsClosed, l as curveStartPoint, m as interpolateCurve, n as curveAxis, o as curveLength, p as getOrientation, r as curveEndPoint, s as curvePeriod, t as approximateCurve, u as curveTangentAt } from "./curveFns-CG05Jygr.js";
13
- import { a as meshEdges$1, c as meshMultiLOD, i as mesh$1, l as clearMeshCache, n as exportSTEP, o as meshLODs, r as exportSTL, s as meshLODsProgressive, t as exportIGES, u as createMeshCache } from "./meshFns-BvP9Tm5Q.js";
10
+ import { S as shapeType, _ as cast, a as faceOrientation, b as isCompSolid, c as innerWires, d as pointOnSurface, f as projectPointOnFace, g as asTopo, h as uvCoordinates, i as faceGeomType, l as normalAt, m as uvBounds, n as faceAxis, o as flipFaceOrientation, p as removeHolesFromFace, r as faceCenter, s as getSurfaceType, t as classifyPointOnFace, u as outerWire, v as downcast, x as iterTopo, y as fromBREP } from "./faceFns-B86WGqDg.js";
11
+ import { A as getFaceOrigins, C as getFaceColor, D as getTagMetadata, E as getFaceTags, O as setTagMetadata, S as colorShape, T as findFacesByTag, _ as hasAnyMetadata, a as isSameShape, b as propagateMetadataThroughRelocation, c as applyMatrix$1, d as resize, f as rotate$2, h as translate$2, i as isEqualShape, j as setShapeOrigin, k as tagFaces, l as composeTransforms, m as transformCopy$1, n as getHashCode, o as simplify$1, p as scale$3, r as isEmpty$2, s as toBREP$1, t as clone$1, u as mirror$2, w as getShapeColor, x as colorFaces } from "./shapeFns-DrZOVwHX.js";
12
+ import { a as curveIsPeriodic, c as curvePointAt, d as flipOrientation, f as getCurveType, h as offsetWire2D, i as curveIsClosed, l as curveStartPoint, m as interpolateCurve, n as curveAxis, o as curveLength, p as getOrientation, r as curveEndPoint, s as curvePeriod, t as approximateCurve, u as curveTangentAt } from "./curveFns-CcSn4-Rf.js";
13
+ import { a as meshEdges$1, c as meshMultiLOD, d as createMeshCache, i as mesh$1, l as buildMeshCacheKey, n as exportSTEP, o as meshLODs, r as exportSTL, s as meshLODsProgressive, t as exportIGES, u as clearMeshCache } from "./meshFns-DbmidUzH.js";
14
14
  import { n as getAtOrThrow, r as lastOrThrow, t as firstOrThrow } from "./arrayAccess-DrUGPADn.js";
15
- import { _ as makeThreePointArc, d as makeCircle, h as makeLine, l as makeBSplineInterpolation, n as fill, r as makeFace, s as assembleWire } from "./surfaceBuilders-Bww4jhBo.js";
16
- import { _ as section$1, b as split$1, d as booleanPipeline, f as cut$2, g as intersect$2, h as fuseAll$2, m as fuse$2, p as cutAll$2, r as makeCylinder, t as makeCompound, v as sectionToFace$1, y as slice$1 } from "./solidBuilders-Biwv2cW3.js";
17
- import { A as edgesOfFace, B as toLineGeometryData, C as shellWithEvolution, D as getNurbsCurveData, E as fuseAllBisect, F as chamferDistAngle, I as toBufferGeometryData, L as toGroupedBufferGeometryData, M as sharedEdges, N as verticesOfEdge, O as getNurbsSurfaceData, P as wiresOfFace, R as toLODGeometryData, S as intersectWithEvolution, T as cutAllBisect, _ as positionOnCurve, a as healFace, b as filletWithEvolution, c as isValid$1, d as draft$1, f as fillet$1, g as variableFillet, h as thicken$1, i as heal$1, j as facesOfEdge, k as adjacentFaces, l as solidFromShell, m as shell$1, n as fixSelfIntersection, o as healSolid, p as offset$1, r as fixShape, s as healWire, t as autoHeal, u as chamfer$1, v as chamferWithEvolution, w as checkBoolean, x as fuseWithEvolution, y as cutWithEvolution, z as toLODGeometryLevels } from "./healingFns-C5AomW4j.js";
18
- import { A as setJointValue, B as findNode, C as cylindricalJoint, D as planarJoint, E as mechanismDOF, F as quatRotate, G as gridPattern, H as updateNode, I as addChild, J as createAssembly, K as linearPattern, L as collectShapes, M as sphericalJoint, N as quatFromAxisAngle, O as prismaticJoint, P as quatFromTo, R as countNodes, S as addJoint, T as jointTransform, U as walkAssembly, V as removeChild, W as circularPattern, _ as exportURDF, a as deserializeHistory, b as inverseKinematics, c as modifyStep, d as replayFrom, f as replayHistory, g as undoLast, h as stepsFrom, i as createRegistry, j as setJointValues, k as revoluteJoint, l as registerOperation, m as stepCount, n as addStep, o as findStep, p as serializeHistory, q as exportAssemblySTEP, r as createHistory, s as getShape, t as thread, u as registerShape, v as importURDF, w as forwardKinematics, x as jointTrajectory, y as jointsFromDH, z as createAssemblyNode } from "./threadFns-8rKpQXiR.js";
19
- import { n as BaseSketcher2d, r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-CEQ8s7TD.js";
20
- import { a as createTypedFinder, i as wireFinder, n as edgeFinder, r as faceFinder, t as getSingleFace } from "./helpers-DT44wBAD.js";
21
- import { A as sketchEllipse, D as makeBaseBox, E as deserializeDrawing, F as sketchRectangle, I as sketchRoundedRectangle, L as FaceSketcher, M as sketchHelix, N as sketchParametricFunction, O as polysideInnerRadius, P as sketchPolysides, R as Sketcher, S as drawText, _ as drawPolysides, a as drawingIntersect, b as drawSingleCircle, c as rotateDrawing, d as drawFaceOutline, f as drawProjection, g as drawPointsInterpolation, h as drawParametricFunction, i as drawingFuse, j as sketchFaceOffset, k as sketchCircle, l as scaleDrawing, m as drawEllipse, n as drawingCut, o as drawingToSketchOnPlane, p as drawCircle, r as drawingFillet, s as mirrorDrawing, t as drawingChamfer, u as translateDrawing, v as drawRectangle, w as draw, x as drawSingleEllipse, y as drawRoundedRectangle } from "./drawFns-CsXPFyDe.js";
22
- import { a as measureDistance, c as measureLinearProps, d as measureVolumeProps, i as measureCurvatureAtMid, l as measureSurfaceProps, n as measureArea, o as measureDistanceProps, r as measureCurvatureAt, s as measureLength, t as createDistanceQuery, u as measureVolume } from "./measureFns-Dkh_DmrE.js";
23
- import { t as cornerFinder } from "./cornerFinder-COqoeY--.js";
24
- import { a as fuseBlueprints, c as roundedRectangleBlueprint, i as cutBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-8rB2sUzj.js";
25
- import { S as reverseCurve, _ as curve2dIsOnCurve, a as isInside2D, b as curve2dSplitAt, c as scale2D, d as stretch2D, f as toSVGPathD, g as curve2dFirstPoint, h as curve2dDistanceFrom, i as getOrientation2D, l as sketchOnFace2D, m as curve2dBoundingBox, n as createCompoundBlueprint, o as mirror2D, p as translate2D, r as getBounds2D, s as rotate2D, t as createBlueprint, u as sketchOnPlane2D, v as curve2dLastPoint, x as curve2dTangentAt, y as curve2dParameter } from "./blueprintFns-BuPAK4OB.js";
26
- import { a as importSVG, c as blueprintToDXF, d as exportGltf, f as exportOBJ, i as exportSTEPConfigured, l as exportDXF, n as importSTEP, o as importSVGPathD, r as importSTL, s as exportThreeMF, t as importIGES, u as exportGlb } from "./importFns-CEczwPdN.js";
27
- import { a as revolve$1, c as multiSectionSweep, d as twistExtrude, i as extrudeAll, l as supportExtrude, n as loftAll, o as complexExtrude, r as extrude$1, s as guidedSweep, t as loft$1, u as sweep$1 } from "./loftFns-DyNuD9XL.js";
28
- import { a as Sketch, c as compoundSketchLoft, d as sketchFace, f as sketchLoft, h as sketchWires, i as Sketches, l as compoundSketchRevolve, m as sketchSweep, n as getFont, o as compoundSketchExtrude, p as sketchRevolve, r as loadFont, s as compoundSketchFace, t as textBlueprints, u as sketchExtrude, v as CompoundSketch } from "./textBlueprints-CEzTC9vX.js";
29
- import { a as makeProjectedEdges, i as projectEdges, n as cameraLookAt, r as createCamera, s as isProjectionPlane, t as cameraFromPlane } from "./cameraFns-Bu6jgTKc.js";
30
- import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-CBbDQ5QW.js";
31
- import { a as updateRoles, i as resolveRef, n as captureHint, o as defaultScorer, r as createRef, t as assignRoles } from "./shapeRefFns-Cn4WNb3q.js";
15
+ import { _ as makeThreePointArc, d as makeCircle, h as makeLine, l as makeBSplineInterpolation, n as fill, r as makeFace, s as assembleWire } from "./surfaceBuilders-rkE-jE90.js";
16
+ import { _ as section$1, b as split$1, d as booleanPipeline, f as cut$2, g as intersect$2, h as fuseAll$2, m as fuse$2, p as cutAll$2, r as makeCylinder, t as makeCompound, v as sectionToFace$1, y as slice$1 } from "./solidBuilders-C32wXQWG.js";
17
+ import { A as edgesOfFace, B as toLineGeometryData, C as shellWithEvolution, D as getNurbsCurveData, E as fuseAllBisect, F as chamferDistAngle, I as toBufferGeometryData, L as toGroupedBufferGeometryData, M as sharedEdges, N as verticesOfEdge, O as getNurbsSurfaceData, P as wiresOfFace, R as toLODGeometryData, S as intersectWithEvolution, T as cutAllBisect, _ as positionOnCurve, a as healFace, b as filletWithEvolution, c as isValid$1, d as draft$1, f as fillet$1, g as variableFillet, h as thicken$1, i as heal$1, j as facesOfEdge, k as adjacentFaces, l as solidFromShell, m as shell$1, n as fixSelfIntersection, o as healSolid, p as offset$1, r as fixShape, s as healWire, t as autoHeal, u as chamfer$1, v as chamferWithEvolution, w as checkBoolean, x as fuseWithEvolution, y as cutWithEvolution, z as toLODGeometryLevels } from "./healingFns-CPm_VFck.js";
18
+ import { A as setJointValue, B as findNode, C as cylindricalJoint, D as planarJoint, E as mechanismDOF, F as quatRotate, G as gridPattern, H as updateNode, I as addChild, J as createAssembly, K as linearPattern, L as collectShapes, M as sphericalJoint, N as quatFromAxisAngle, O as prismaticJoint, P as quatFromTo, R as countNodes, S as addJoint, T as jointTransform, U as walkAssembly, V as removeChild, W as circularPattern, _ as exportURDF, a as deserializeHistory, b as inverseKinematics, c as modifyStep, d as replayFrom, f as replayHistory, g as undoLast, h as stepsFrom, i as createRegistry, j as setJointValues, k as revoluteJoint, l as registerOperation, m as stepCount, n as addStep, o as findStep, p as serializeHistory, q as exportAssemblySTEP, r as createHistory, s as getShape, t as thread, u as registerShape, v as importURDF, w as forwardKinematics, x as jointTrajectory, y as jointsFromDH, z as createAssemblyNode } from "./threadFns-bCOhVQLb.js";
19
+ import { n as BaseSketcher2d, r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-7rtwqUHZ.js";
20
+ import { a as createTypedFinder, i as wireFinder, n as edgeFinder, r as faceFinder, t as getSingleFace } from "./helpers-DhJwFrkC.js";
21
+ import { A as sketchEllipse, D as makeBaseBox, E as deserializeDrawing, F as sketchRectangle, I as sketchRoundedRectangle, L as FaceSketcher, M as sketchHelix, N as sketchParametricFunction, O as polysideInnerRadius, P as sketchPolysides, R as Sketcher, S as drawText, _ as drawPolysides, a as drawingIntersect, b as drawSingleCircle, c as rotateDrawing, d as drawFaceOutline, f as drawProjection, g as drawPointsInterpolation, h as drawParametricFunction, i as drawingFuse, j as sketchFaceOffset, k as sketchCircle, l as scaleDrawing, m as drawEllipse, n as drawingCut, o as drawingToSketchOnPlane, p as drawCircle, r as drawingFillet, s as mirrorDrawing, t as drawingChamfer, u as translateDrawing, v as drawRectangle, w as draw, x as drawSingleEllipse, y as drawRoundedRectangle } from "./drawFns-SQIBls6p.js";
22
+ import { a as measureDistance, c as measureLinearProps, d as measureVolumeProps, i as measureCurvatureAtMid, l as measureSurfaceProps, n as measureArea, o as measureDistanceProps, r as measureCurvatureAt, s as measureLength, t as createDistanceQuery, u as measureVolume } from "./measureFns-a5Vx25or.js";
23
+ import { t as cornerFinder } from "./cornerFinder-DUGeBIvD.js";
24
+ import { a as fuseBlueprints, c as roundedRectangleBlueprint, i as cutBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-y0SSZfe2.js";
25
+ import { S as reverseCurve, _ as curve2dIsOnCurve, a as isInside2D, b as curve2dSplitAt, c as scale2D, d as stretch2D, f as toSVGPathD, g as curve2dFirstPoint, h as curve2dDistanceFrom, i as getOrientation2D, l as sketchOnFace2D, m as curve2dBoundingBox, n as createCompoundBlueprint, o as mirror2D, p as translate2D, r as getBounds2D, s as rotate2D, t as createBlueprint, u as sketchOnPlane2D, v as curve2dLastPoint, x as curve2dTangentAt, y as curve2dParameter } from "./blueprintFns-BowWsZgJ.js";
26
+ import { a as importSVG, c as blueprintToDXF, d as exportGltf, f as exportOBJ, i as exportSTEPConfigured, l as exportDXF, n as importSTEP, o as importSVGPathD, r as importSTL, s as exportThreeMF, t as importIGES, u as exportGlb } from "./importFns-nR9lEx22.js";
27
+ import { a as revolve$1, c as multiSectionSweep, d as twistExtrude, i as extrudeAll, l as supportExtrude, n as loftAll, o as complexExtrude, r as extrude$1, s as guidedSweep, t as loft$1, u as sweep$1 } from "./loftFns-CmShFQlv.js";
28
+ import { a as Sketch, c as compoundSketchLoft, d as sketchFace, f as sketchLoft, h as sketchWires, i as Sketches, l as compoundSketchRevolve, m as sketchSweep, n as getFont, o as compoundSketchExtrude, p as sketchRevolve, r as loadFont, s as compoundSketchFace, t as textBlueprints, u as sketchExtrude, v as CompoundSketch } from "./textBlueprints-BnkWAqwS.js";
29
+ import { a as makeProjectedEdges, i as projectEdges, n as cameraLookAt, r as createCamera, s as isProjectionPlane, t as cameraFromPlane } from "./cameraFns-bk9e0F-T.js";
30
+ import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-COGYk0LE.js";
31
+ import { a as updateRoles, i as resolveRef, n as captureHint, o as defaultScorer, r as createRef, t as assignRoles } from "./shapeRefFns-C1DefNzr.js";
32
32
  import { _ as isSuccessResponse, a as createWorkerClient, c as enqueueTask, d as rejectAll, f as isBatchRequest, g as isOperationRequest, h as isInitRequest, i as registerHandler, l as isEmpty$1, m as isErrorResponse, n as createOperationRegistry, o as createTaskQueue, p as isDisposeRequest, r as createWorkerHandler, s as dequeueTask, t as createWorkerPool, u as pendingCount } from "./workerPool-XcYX2UZ0.js";
33
- import { C as threePointArc, D as wireLoop, E as wire, S as tangentArc, T as vertex, _ as polygon, a as circle, b as sphere$1, c as cylinder, d as ellipsoid, f as face, g as offsetFace, h as line, i as bsplineApprox, l as ellipse, m as helix, n as bezier, o as compound, p as filledFace, r as box, s as cone, t as addHoles, u as ellipseArc, v as sewShells, w as torus$1, x as subFace, y as solid } from "./primitiveFns-62SO4ti5.js";
33
+ import { C as threePointArc, D as wireLoop, E as wire, S as tangentArc, T as vertex, _ as polygon, a as circle, b as sphere$1, c as cylinder, d as ellipsoid, f as face, g as offsetFace, h as line, i as bsplineApprox, l as ellipse, m as helix, n as bezier, o as compound, p as filledFace, r as box, s as cone, t as addHoles, u as ellipseArc, v as sewShells, w as torus$1, x as subFace, y as solid } from "./primitiveFns-CBrOyk5S.js";
34
34
  //#region \0rolldown/runtime.js
35
35
  var __defProp = Object.defineProperty;
36
36
  var __exportAll = (all, no_symbols) => {
@@ -5668,13 +5668,45 @@ function emptyResult(kind) {
5668
5668
  function optVec3(expr, env, where, fallback) {
5669
5669
  return expr ? evalVec3(expr, env, where) : ok(fallback);
5670
5670
  }
5671
+ /**
5672
+ * Apply a rigid transform as a cheap location re-tag instead of a deep-copying
5673
+ * transform. The target is an evaluator-cached shape; `locate` returns a fresh,
5674
+ * independently-disposable handle (it shares the source geometry but holds its
5675
+ * own location), so the evaluator owns and disposes it like any other
5676
+ * materialized node. On kernels without a cheap-location path `locate` falls
5677
+ * back to a copy — same geometry, so cached output is unchanged.
5678
+ *
5679
+ * A location re-tag carries no kernel evolution record, so face metadata isn't
5680
+ * propagated automatically and the moved faces carry new (location-dependent)
5681
+ * hashes. Primitives have no metadata (pure O(1) locate); boolean results carry
5682
+ * face tags/colors, which we re-key onto the moved faces (1:1 by iteration
5683
+ * order, since locate shares the source TShape) so a move preserves them —
5684
+ * matching `scale`/`mirror`.
5685
+ */
5686
+ function relocate(shape, ops) {
5687
+ const kernel = getKernel();
5688
+ const { handle, dispose } = kernel.composeTransform(ops);
5689
+ let moved;
5690
+ try {
5691
+ moved = castShape(kernel.locate(shape.wrapped, handle));
5692
+ } finally {
5693
+ dispose();
5694
+ }
5695
+ if (hasAnyMetadata(shape)) propagateMetadataThroughRelocation(shape, moved);
5696
+ return moved;
5697
+ }
5671
5698
  function evalTranslate(node, ctx) {
5672
5699
  if (node.target.kind === "Empty") return emptyResult("Translate");
5673
5700
  const v = evalVec3(node.vector, ctx.env, "Translate.vector");
5674
5701
  if (!v.ok) return v;
5675
5702
  const r = ctx.evalNode(node.target);
5676
5703
  if (!r.ok) return r;
5677
- return ok(translate$2(r.value, v.value));
5704
+ return ok(relocate(r.value, [{
5705
+ type: "translate",
5706
+ x: v.value[0],
5707
+ y: v.value[1],
5708
+ z: v.value[2]
5709
+ }]));
5678
5710
  }
5679
5711
  function evalRotate(node, ctx) {
5680
5712
  if (node.target.kind === "Empty") return emptyResult("Rotate");
@@ -5694,7 +5726,12 @@ function evalRotate(node, ctx) {
5694
5726
  if (!at.ok) return at;
5695
5727
  const r = ctx.evalNode(node.target);
5696
5728
  if (!r.ok) return r;
5697
- return ok(rotate$2(r.value, a.value, at.value, axis.value));
5729
+ return ok(relocate(r.value, [{
5730
+ type: "rotate",
5731
+ angle: a.value,
5732
+ axis: axis.value,
5733
+ center: at.value
5734
+ }]));
5698
5735
  }
5699
5736
  function evalScale(node, ctx) {
5700
5737
  if (node.target.kind === "Empty") return emptyResult("Scale");
@@ -5810,6 +5847,8 @@ var Evaluator = class {
5810
5847
  kernelId;
5811
5848
  defaultTolerance;
5812
5849
  maxCacheEntries;
5850
+ maxMeshCacheEntries;
5851
+ meshCache = /* @__PURE__ */ new Map();
5813
5852
  onStep;
5814
5853
  hits = 0;
5815
5854
  misses = 0;
@@ -5821,6 +5860,9 @@ var Evaluator = class {
5821
5860
  const max = options.maxCacheEntries;
5822
5861
  if (max !== void 0 && (!Number.isInteger(max) || max < 1)) throw new RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(max)}`);
5823
5862
  this.maxCacheEntries = max;
5863
+ const meshMax = options.maxMeshCacheEntries;
5864
+ if (meshMax !== void 0 && (!Number.isInteger(meshMax) || meshMax < 1)) throw new RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(meshMax)}`);
5865
+ this.maxMeshCacheEntries = meshMax;
5824
5866
  }
5825
5867
  /**
5826
5868
  * Materialize a CSG IR tree against the given parameter environment.
@@ -5849,6 +5891,40 @@ var Evaluator = class {
5849
5891
  }
5850
5892
  });
5851
5893
  }
5894
+ /**
5895
+ * Materialize a node and mesh it, caching the mesh by the shape's content key
5896
+ * plus the mesh parameters. The mesh cache is independent of the shape cache:
5897
+ * a hit returns the cached mesh without evaluating or meshing — even after the
5898
+ * shape was LRU-evicted (a mesh is plain data, not a kernel handle). The
5899
+ * returned mesh is borrowed (do not mutate it); it stays valid for the
5900
+ * Evaluator's lifetime, or until `maxMeshCacheEntries` evicts it.
5901
+ */
5902
+ evaluateMesh(node, env = {}, meshOpts = {}) {
5903
+ meshOpts.signal?.throwIfAborted();
5904
+ const useCache = meshOpts.cache ?? true;
5905
+ const quality = qualityDeflection();
5906
+ const tolerance = meshOpts.tolerance ?? quality.tolerance;
5907
+ const angularTolerance = meshOpts.angularTolerance ?? quality.angularTolerance;
5908
+ const meshKey = `${cacheKey(node, env, this.kernelId, this.defaultTolerance)}|${buildMeshCacheKey(tolerance, angularTolerance, meshOpts.skipNormals ?? false, meshOpts.includeUVs ?? false)}`;
5909
+ if (useCache) {
5910
+ const cached = this.meshCache.get(meshKey);
5911
+ if (cached !== void 0) {
5912
+ if (this.maxMeshCacheEntries !== void 0) {
5913
+ this.meshCache.delete(meshKey);
5914
+ this.meshCache.set(meshKey, cached);
5915
+ }
5916
+ return ok(cached);
5917
+ }
5918
+ }
5919
+ const shape = this.evaluate(node, env);
5920
+ if (!shape.ok) return shape;
5921
+ const built = withKernel(this.kernelId, () => mesh$1(shape.value, meshOpts));
5922
+ if (useCache) {
5923
+ this.meshCache.set(meshKey, built);
5924
+ if (this.maxMeshCacheEntries !== void 0) this.trimMeshCache(this.maxMeshCacheEntries);
5925
+ }
5926
+ return ok(built);
5927
+ }
5852
5928
  evaluateInner(node, env) {
5853
5929
  const key = cacheKey(node, env, this.kernelId, this.defaultTolerance);
5854
5930
  const cached = this.cache.get(key);
@@ -5901,6 +5977,13 @@ var Evaluator = class {
5901
5977
  if (shape !== void 0) this.releaseShape(shape);
5902
5978
  }
5903
5979
  }
5980
+ trimMeshCache(max) {
5981
+ while (this.meshCache.size > max) {
5982
+ const oldest = this.meshCache.keys().next();
5983
+ if (oldest.done) break;
5984
+ this.meshCache.delete(oldest.value);
5985
+ }
5986
+ }
5904
5987
  rollbackPending() {
5905
5988
  for (const key of this.pendingKeys) {
5906
5989
  const shape = this.cache.get(key);
@@ -5926,6 +6009,7 @@ var Evaluator = class {
5926
6009
  for (const shape of this.refCounts.keys()) shape[Symbol.dispose]();
5927
6010
  this.refCounts.clear();
5928
6011
  this.cache.clear();
6012
+ this.meshCache.clear();
5929
6013
  }
5930
6014
  };
5931
6015
  /**
@@ -1,6 +1,6 @@
1
- import { Z as getKernel, t as castShape } from "./shapeTypes-C4lPfrc2.js";
1
+ import { Z as getKernel, t as castShape } from "./shapeTypes-Dpu6mD3m.js";
2
2
  import { A as ok, b as err, d as validationError } from "./errors-DNWJsfVU.js";
3
- import { s as getEdges } from "./topologyQueryFns-Do8E4EXj.js";
3
+ import { s as getEdges } from "./topologyQueryFns-BeKaWpNm.js";
4
4
  import { c as vecLength, d as vecNormalize, g as vecSub, r as vecCross } from "./vecOps-SKPRvPH-.js";
5
5
  //#region src/projection/projectionPlanes.ts
6
6
  /** Lookup table mapping each {@link ProjectionPlane} to its camera configuration. */
@@ -1,6 +1,6 @@
1
- const require_shapeTypes = require("./shapeTypes-Bwgm5N6R.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-BTTwjHy5.cjs");
2
2
  const require_errors = require("./errors-CXJtc4I7.cjs");
3
- const require_topologyQueryFns = require("./topologyQueryFns-ygBBXxnP.cjs");
3
+ const require_topologyQueryFns = require("./topologyQueryFns-CoXVHuN7.cjs");
4
4
  const require_vecOps = require("./vecOps-CCnJt-yH.cjs");
5
5
  //#region src/projection/projectionPlanes.ts
6
6
  /** Lookup table mapping each {@link ProjectionPlane} to its camera configuration. */