brepjs 14.1.3 → 14.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/2d.cjs +5 -5
  2. package/dist/2d.js +5 -5
  3. package/dist/{blueprint-C6B--LQ6.cjs → blueprint-C8nlHdUE.cjs} +5 -5
  4. package/dist/{blueprint-CzFYcmzV.js → blueprint-Dsp-f4De.js} +5 -5
  5. package/dist/{blueprintFns-B2AvzIXt.cjs → blueprintFns-CvtakKGf.cjs} +2 -2
  6. package/dist/{blueprintFns-wka8INr_.js → blueprintFns-D1QUp5y4.js} +2 -2
  7. package/dist/{boolean2D-CfCt_m29.js → boolean2D-D1MYwspP.js} +49 -8
  8. package/dist/{boolean2D-6bQx64bR.cjs → boolean2D-DE2axG6W.cjs} +54 -7
  9. package/dist/{booleanFns-B6zxpf96.js → booleanFns-DViuH9nW.js} +32 -16
  10. package/dist/{booleanFns-C2pjUC6-.cjs → booleanFns-Dmvv9VVT.cjs} +32 -16
  11. package/dist/brepjs.cjs +23 -19
  12. package/dist/brepjs.js +20 -20
  13. package/dist/core.cjs +1 -1
  14. package/dist/core.js +1 -1
  15. package/dist/{cornerFinder-DBXma4vL.js → cornerFinder-CyvfiiYv.js} +1 -1
  16. package/dist/{cornerFinder-DrHIlWCS.cjs → cornerFinder-Du1Q1hgu.cjs} +1 -1
  17. package/dist/{curveFns-C_vQNb7-.cjs → curveFns--4Nh1ZtB.cjs} +1 -1
  18. package/dist/{curveFns-DmID8AQO.js → curveFns-D9GbWpcl.js} +1 -1
  19. package/dist/{drawFns-rLQIZezc.js → drawFns-BDqEWrCy.js} +11 -11
  20. package/dist/{drawFns-DRG-UpkW.cjs → drawFns-DTqCnYeo.cjs} +11 -11
  21. package/dist/{extrudeFns-BP7fNL5O.cjs → extrudeFns-CIUq5ZQW.cjs} +44 -1
  22. package/dist/{extrudeFns-1qcdK9dq.js → extrudeFns-DxS_UOMr.js} +39 -2
  23. package/dist/{faceFns-BwzwlBjE.cjs → faceFns-D7i9yEts.cjs} +1 -1
  24. package/dist/{faceFns-BHT5DAOL.js → faceFns-lcEYbLOs.js} +1 -1
  25. package/dist/{helpers-C4Ajoc6x.cjs → helpers-BK3DVd3M.cjs} +5 -5
  26. package/dist/{helpers-B94CkHQe.js → helpers-BwzOwHWl.js} +5 -5
  27. package/dist/{historyFns-CrsjeD69.cjs → historyFns-BO9c4AgQ.cjs} +4 -4
  28. package/dist/{historyFns-BsSuAQ0m.js → historyFns-C_EoZWD5.js} +4 -4
  29. package/dist/{importFns-DPwXjtkm.cjs → importFns-Ca7DsY-k.cjs} +2 -2
  30. package/dist/{importFns-DQsQOpRY.js → importFns-NY1stg0C.js} +2 -2
  31. package/dist/index.d.ts +4 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/io.cjs +2 -2
  34. package/dist/io.js +2 -2
  35. package/dist/kernel/index.d.ts +2 -0
  36. package/dist/kernel/index.d.ts.map +1 -1
  37. package/dist/kernel/interfaces/modifierOps.d.ts +16 -0
  38. package/dist/kernel/interfaces/modifierOps.d.ts.map +1 -1
  39. package/dist/kernel/interfaces/sweepOps.d.ts +15 -0
  40. package/dist/kernel/interfaces/sweepOps.d.ts.map +1 -1
  41. package/dist/kernel/occt/booleanBatchOps.d.ts +13 -0
  42. package/dist/kernel/occt/booleanBatchOps.d.ts.map +1 -0
  43. package/dist/kernel/occt/booleanOps.d.ts.map +1 -1
  44. package/dist/kernel/occt/defaultAdapter.d.ts +6 -0
  45. package/dist/kernel/occt/defaultAdapter.d.ts.map +1 -1
  46. package/dist/kernel/occt/meshOps.d.ts.map +1 -1
  47. package/dist/kernel/occt/modifierOps.d.ts +19 -0
  48. package/dist/kernel/occt/modifierOps.d.ts.map +1 -1
  49. package/dist/kernel/occt/sweepOps.d.ts +17 -0
  50. package/dist/kernel/occt/sweepOps.d.ts.map +1 -1
  51. package/dist/kernel/occt/transformOps.d.ts.map +1 -1
  52. package/dist/kernel/perfStats.d.ts +27 -0
  53. package/dist/kernel/perfStats.d.ts.map +1 -0
  54. package/dist/kernel/types.d.ts +6 -0
  55. package/dist/kernel/types.d.ts.map +1 -1
  56. package/dist/{measureFns-iarjC69-.js → measureFns-Dsan3QcB.js} +2 -2
  57. package/dist/{measureFns-j1ze9DDM.cjs → measureFns-rVSankqO.cjs} +2 -2
  58. package/dist/measurement.cjs +1 -1
  59. package/dist/measurement.js +1 -1
  60. package/dist/{meshFns-DRl9xnbO.js → meshFns-CKs4H-CH.js} +2 -2
  61. package/dist/{meshFns-CONktkIA.cjs → meshFns-Z5n8gFAS.cjs} +2 -2
  62. package/dist/operations/extrudeFns.d.ts +16 -0
  63. package/dist/operations/extrudeFns.d.ts.map +1 -1
  64. package/dist/operations/loftFns.d.ts +22 -0
  65. package/dist/operations/loftFns.d.ts.map +1 -1
  66. package/dist/operations.cjs +2 -2
  67. package/dist/operations.js +2 -2
  68. package/dist/{primitiveFns-CMIscOrN.js → primitiveFns-DmIP-qnU.js} +17 -7
  69. package/dist/{primitiveFns-CGg6EBKg.cjs → primitiveFns-w2otksRk.cjs} +17 -7
  70. package/dist/query.cjs +2 -2
  71. package/dist/query.js +2 -2
  72. package/dist/{shapeFns-DY7pjzrz.cjs → shapeFns-DZ2c5Nqo.cjs} +2 -2
  73. package/dist/{shapeFns-Brq2J-mW.js → shapeFns-E3qTx3nN.js} +2 -2
  74. package/dist/shapeRef.cjs +1 -1
  75. package/dist/shapeRef.js +1 -1
  76. package/dist/{shapeRefFns-BqOlRA7C.js → shapeRefFns-CEYgkZ1v.js} +3 -3
  77. package/dist/{shapeRefFns-BOljxSxd.cjs → shapeRefFns-Dl7v17MC.cjs} +3 -3
  78. package/dist/{shapeTypes-B3kwoJWf.cjs → shapeTypes-B5Vx1Wsw.cjs} +538 -171
  79. package/dist/{shapeTypes-CoNj-AHu.js → shapeTypes-DUJg_N3P.js} +527 -172
  80. package/dist/sketching.cjs +2 -2
  81. package/dist/sketching.js +2 -2
  82. package/dist/{solidBuilders-BzIatk9a.js → solidBuilders-0gTTuSxw.js} +2 -2
  83. package/dist/{solidBuilders-V8qvmW7h.cjs → solidBuilders-Bvq6br4f.cjs} +2 -2
  84. package/dist/{surfaceBuilders-CoiofY0Y.cjs → surfaceBuilders-CYWopaht.cjs} +2 -2
  85. package/dist/{surfaceBuilders-Cfo4nH6A.js → surfaceBuilders-DMI0n7Bf.js} +2 -2
  86. package/dist/topology/booleanFns.d.ts.map +1 -1
  87. package/dist/topology/modifierFns.d.ts +6 -2
  88. package/dist/topology/modifierFns.d.ts.map +1 -1
  89. package/dist/topology.cjs +6 -6
  90. package/dist/topology.js +6 -6
  91. package/package.json +2 -2
package/dist/2d.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_shapeTypes = require("./shapeTypes-B3kwoJWf.cjs");
2
+ const require_shapeTypes = require("./shapeTypes-B5Vx1Wsw.cjs");
3
3
  const require_errors = require("./errors-9zQcQK1H.cjs");
4
- const require_faceFns = require("./faceFns-BwzwlBjE.cjs");
5
- const require_boolean2D = require("./boolean2D-6bQx64bR.cjs");
6
- const require_blueprint = require("./blueprint-C6B--LQ6.cjs");
7
- const require_blueprintFns = require("./blueprintFns-B2AvzIXt.cjs");
4
+ const require_faceFns = require("./faceFns-D7i9yEts.cjs");
5
+ const require_boolean2D = require("./boolean2D-DE2axG6W.cjs");
6
+ const require_blueprint = require("./blueprint-C8nlHdUE.cjs");
7
+ const require_blueprintFns = require("./blueprintFns-CvtakKGf.cjs");
8
8
  //#region src/core/curve2dHandle.ts
9
9
  /**
10
10
  * Wrap a raw kernel 2D curve handle with brand + disposal tracking.
package/dist/2d.js CHANGED
@@ -1,9 +1,9 @@
1
- import { X as getKernel2D, a as createEdge, z as createKernelHandle } from "./shapeTypes-CoNj-AHu.js";
1
+ import { X as getKernel2D, a as createEdge, z as createKernelHandle } from "./shapeTypes-DUJg_N3P.js";
2
2
  import { A as ok, b as err, d as validationError, t as BrepErrorCode } from "./errors-C-cgQA3w.js";
3
- import { C as kernelCallRaw } from "./faceFns-BHT5DAOL.js";
4
- import { a as fuseBlueprints, c as roundedRectangleBlueprint, g as Blueprints, h as CompoundBlueprint, i as cutBlueprints, m as organiseBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-CfCt_m29.js";
5
- import { _ as Curve2D, t as Blueprint, y as BoundingBox2d } from "./blueprint-CzFYcmzV.js";
6
- 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-wka8INr_.js";
3
+ import { C as kernelCallRaw } from "./faceFns-lcEYbLOs.js";
4
+ import { _ as Blueprints, a as fuseBlueprints, c as roundedRectangleBlueprint, g as CompoundBlueprint, h as organiseBlueprints, i as cutBlueprints, n as fuse2D, o as intersectBlueprints, r as intersect2D, s as polysidesBlueprint, t as cut2D } from "./boolean2D-D1MYwspP.js";
5
+ import { _ as Curve2D, t as Blueprint, y as BoundingBox2d } from "./blueprint-Dsp-f4De.js";
6
+ 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-D1QUp5y4.js";
7
7
  //#region src/core/curve2dHandle.ts
8
8
  /**
9
9
  * Wrap a raw kernel 2D curve handle with brand + disposal tracking.
@@ -1,13 +1,13 @@
1
- const require_shapeTypes = require("./shapeTypes-B3kwoJWf.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-B5Vx1Wsw.cjs");
2
2
  const require_errors = require("./errors-9zQcQK1H.cjs");
3
- const require_faceFns = require("./faceFns-BwzwlBjE.cjs");
3
+ const require_faceFns = require("./faceFns-D7i9yEts.cjs");
4
4
  const require_constants = require("./constants-unWN8k4c.cjs");
5
5
  const require_types = require("./types-BjDcsS7l.cjs");
6
6
  const require_planeOps = require("./planeOps-6Wu7dMDN.cjs");
7
- const require_curveFns = require("./curveFns-C_vQNb7-.cjs");
7
+ const require_curveFns = require("./curveFns--4Nh1ZtB.cjs");
8
8
  const require_arrayAccess = require("./arrayAccess-CmulMesb.cjs");
9
- const require_surfaceBuilders = require("./surfaceBuilders-CoiofY0Y.cjs");
10
- const require_helpers = require("./helpers-C4Ajoc6x.cjs");
9
+ const require_surfaceBuilders = require("./surfaceBuilders-CYWopaht.cjs");
10
+ const require_helpers = require("./helpers-BK3DVd3M.cjs");
11
11
  //#region src/2d/lib/definitions.ts
12
12
  /** Type guard that checks whether a value is a `Point2D`. */
13
13
  function isPoint2D(point) {
@@ -1,13 +1,13 @@
1
- import { H as registerForCleanup, W as unregisterFromCleanup, X as getKernel2D, Y as getKernel, a as createEdge, u as createWire } from "./shapeTypes-CoNj-AHu.js";
1
+ import { H as registerForCleanup, W as unregisterFromCleanup, X as getKernel2D, Y as getKernel, a as createEdge, u as createWire } from "./shapeTypes-DUJg_N3P.js";
2
2
  import { A as ok, R as unwrap, b as err, d as validationError, h as bug, n as computationError } from "./errors-C-cgQA3w.js";
3
- import { g as cast, m as uvCoordinates, n as faceCenter, p as uvBounds, r as faceGeomType } from "./faceFns-BHT5DAOL.js";
3
+ import { g as cast, m as uvCoordinates, n as faceCenter, p as uvBounds, r as faceGeomType } from "./faceFns-lcEYbLOs.js";
4
4
  import { r as RAD2DEG, t as DEG2RAD } from "./constants-B9u763C3.js";
5
5
  import { r as toVec3 } from "./types-BWBlwp6w.js";
6
6
  import { r as makePlane } from "./planeOps-gTOEarV2.js";
7
- import { f as getOrientation } from "./curveFns-DmID8AQO.js";
7
+ import { f as getOrientation } from "./curveFns-D9GbWpcl.js";
8
8
  import { n as getAtOrThrow, r as lastOrThrow, t as firstOrThrow } from "./arrayAccess-xxcB3YNq.js";
9
- import { r as makeFace } from "./surfaceBuilders-Cfo4nH6A.js";
10
- import { _ as samePoint, b as subtract2d, l as add2d, o as normalize2d, p as distance2d, t as getSingleFace, v as scalarMultiply2d } from "./helpers-B94CkHQe.js";
9
+ import { r as makeFace } from "./surfaceBuilders-DMI0n7Bf.js";
10
+ import { _ as samePoint, b as subtract2d, l as add2d, o as normalize2d, p as distance2d, t as getSingleFace, v as scalarMultiply2d } from "./helpers-BwzOwHWl.js";
11
11
  //#region src/2d/lib/definitions.ts
12
12
  /** Type guard that checks whether a value is a `Point2D`. */
13
13
  function isPoint2D(point) {
@@ -1,6 +1,6 @@
1
1
  const require_errors = require("./errors-9zQcQK1H.cjs");
2
- const require_boolean2D = require("./boolean2D-6bQx64bR.cjs");
3
- const require_blueprint = require("./blueprint-C6B--LQ6.cjs");
2
+ const require_boolean2D = require("./boolean2D-DE2axG6W.cjs");
3
+ const require_blueprint = require("./blueprint-C8nlHdUE.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-C-cgQA3w.js";
2
- import { h as CompoundBlueprint } from "./boolean2D-CfCt_m29.js";
3
- import { t as Blueprint } from "./blueprint-CzFYcmzV.js";
2
+ import { g as CompoundBlueprint } from "./boolean2D-D1MYwspP.js";
3
+ import { t as Blueprint } from "./blueprint-Dsp-f4De.js";
4
4
  //#region src/2d/lib/curve2dFns.ts
5
5
  /**
6
6
  * Return a reversed copy of the curve (non-mutating).
@@ -1,16 +1,16 @@
1
- import { J as _usingCtx, L as DisposalScope, X as getKernel2D, Y as getKernel, a as createEdge, h as isShape3D, o as createFace, t as castShape, u as createWire } from "./shapeTypes-CoNj-AHu.js";
1
+ import { J as _usingCtx, L as DisposalScope, X as getKernel2D, Y as getKernel, a as createEdge, h as isShape3D, o as createFace, t as castShape, u as createWire } from "./shapeTypes-DUJg_N3P.js";
2
2
  import { A as ok, R as unwrap, T as isOk, b as err, d as validationError, h as bug, i as kernelError, l as typeCastError, n as computationError, s as safeIndex } from "./errors-C-cgQA3w.js";
3
- import { _ as downcast, c as normalAt, p as uvBounds, u as pointOnSurface } from "./faceFns-BHT5DAOL.js";
3
+ import { _ as downcast, c as normalAt, p as uvBounds, u as pointOnSurface } from "./faceFns-lcEYbLOs.js";
4
4
  import { r as RAD2DEG, t as DEG2RAD } from "./constants-B9u763C3.js";
5
5
  import { r as toVec3 } from "./types-BWBlwp6w.js";
6
6
  import { d as vecNormalize, h as vecScale, r as vecCross } from "./vecOps-D9etjPgV.js";
7
7
  import { n as createPlane } from "./planeOps-gTOEarV2.js";
8
- import { c as curveStartPoint, l as curveTangentAt, r as curveIsClosed } from "./curveFns-DmID8AQO.js";
8
+ import { c as curveStartPoint, l as curveTangentAt, r as curveIsClosed } from "./curveFns-D9GbWpcl.js";
9
9
  import { r as lastOrThrow, t as firstOrThrow } from "./arrayAccess-xxcB3YNq.js";
10
- import { _ as zip, i as makeNewFaceWithinFace, r as makeFace, s as assembleWire } from "./surfaceBuilders-Cfo4nH6A.js";
11
- import { _ as samePoint$1, 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, s as PRECISION_INTERSECTION, v as scalarMultiply2d } from "./helpers-B94CkHQe.js";
12
- import { _ as Curve2D, b as removeDuplicatePoints, 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-CzFYcmzV.js";
13
- import { c as twistExtrude, n as revolve, r as complexExtrude, s as sweep, t as extrude } from "./extrudeFns-1qcdK9dq.js";
10
+ import { _ as zip, i as makeNewFaceWithinFace, r as makeFace, s as assembleWire } from "./surfaceBuilders-DMI0n7Bf.js";
11
+ import { _ as samePoint$1, 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, s as PRECISION_INTERSECTION, v as scalarMultiply2d } from "./helpers-BwzOwHWl.js";
12
+ import { _ as Curve2D, b as removeDuplicatePoints, 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-Dsp-f4De.js";
13
+ import { c as sweep, i as complexExtrude, l as twistExtrude, r as revolve, t as extrude } from "./extrudeFns-DxS_UOMr.js";
14
14
  //#region node_modules/flatqueue/index.js
15
15
  /** @template T */
16
16
  var FlatQueue = class {
@@ -1025,6 +1025,47 @@ function loft(wires, { ruled = true, startPoint, endPoint, tolerance = 1e-6 } =
1025
1025
  return err(kernelError("LOFT_FAILED", "Loft operation failed", void 0, void 0, "Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered."));
1026
1026
  }
1027
1027
  }
1028
+ /**
1029
+ * Batch loft: build N independent lofts in a single kernel call.
1030
+ *
1031
+ * Uses the C++ LoftBatch extractor when available (single WASM call),
1032
+ * falling back to N individual loft operations otherwise.
1033
+ *
1034
+ * @returns Array of 3D shapes, one per entry.
1035
+ */
1036
+ function loftAll(entries) {
1037
+ if (entries.length === 0) return ok([]);
1038
+ const kernel = getKernel();
1039
+ const verticesToDelete = [];
1040
+ const kernelEntries = entries.map((e) => {
1041
+ const startVertex = e.startPoint ? kernel.makeVertex(...toVec3(e.startPoint)) : void 0;
1042
+ const endVertex = e.endPoint ? kernel.makeVertex(...toVec3(e.endPoint)) : void 0;
1043
+ if (startVertex) verticesToDelete.push(startVertex);
1044
+ if (endVertex) verticesToDelete.push(endVertex);
1045
+ return {
1046
+ wires: e.wires.map((w) => w.wrapped),
1047
+ solid: true,
1048
+ ruled: e.ruled ?? true,
1049
+ tolerance: e.tolerance ?? 1e-6,
1050
+ startVertex,
1051
+ endVertex
1052
+ };
1053
+ });
1054
+ try {
1055
+ const shapes = kernel.loftBatch?.(kernelEntries) ?? kernelEntries.map((e) => kernel.loft(e.wires, e.ruled, e.startVertex, e.endVertex));
1056
+ const results = [];
1057
+ for (const shape of shapes) {
1058
+ const cast = castShape(shape);
1059
+ if (!isShape3D(cast)) return err(typeCastError("LOFT_ALL_NOT_3D", "Batch loft entry did not produce a 3D shape"));
1060
+ results.push(cast);
1061
+ }
1062
+ return ok(results);
1063
+ } catch (e) {
1064
+ return err(kernelError("LOFT_ALL_FAILED", "Batch loft operation failed", e));
1065
+ } finally {
1066
+ for (const v of verticesToDelete) kernel.dispose(v);
1067
+ }
1068
+ }
1028
1069
  //#endregion
1029
1070
  //#region src/sketching/sketch.ts
1030
1071
  /**
@@ -2544,4 +2585,4 @@ function intersect2D(first, second) {
2544
2585
  bug("intersect2D", "Unhandled Shape2D combination");
2545
2586
  }
2546
2587
  //#endregion
2547
- export { chamferCurves as _, fuseBlueprints as a, intersectCurves as b, roundedRectangleBlueprint as c, FaceSketcher as d, Sketch as f, Blueprints as g, CompoundBlueprint as h, cutBlueprints as i, BaseSketcher2d as l, organiseBlueprints as m, fuse2D as n, intersectBlueprints as o, loft as p, intersect2D as r, polysidesBlueprint as s, cut2D as t, BlueprintSketcher as u, filletCurves as v, Flatbush as x, make2dOffset as y };
2588
+ export { Flatbush as S, Blueprints as _, fuseBlueprints as a, make2dOffset as b, roundedRectangleBlueprint as c, FaceSketcher as d, Sketch as f, CompoundBlueprint as g, organiseBlueprints as h, cutBlueprints as i, BaseSketcher2d as l, loftAll as m, fuse2D as n, intersectBlueprints as o, loft as p, intersect2D as r, polysidesBlueprint as s, cut2D as t, BlueprintSketcher as u, chamferCurves as v, intersectCurves as x, filletCurves as y };
@@ -1,16 +1,16 @@
1
- const require_shapeTypes = require("./shapeTypes-B3kwoJWf.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-B5Vx1Wsw.cjs");
2
2
  const require_errors = require("./errors-9zQcQK1H.cjs");
3
- const require_faceFns = require("./faceFns-BwzwlBjE.cjs");
3
+ const require_faceFns = require("./faceFns-D7i9yEts.cjs");
4
4
  const require_constants = require("./constants-unWN8k4c.cjs");
5
5
  const require_types = require("./types-BjDcsS7l.cjs");
6
6
  const require_vecOps = require("./vecOps-BXvBYIor.cjs");
7
7
  const require_planeOps = require("./planeOps-6Wu7dMDN.cjs");
8
- const require_curveFns = require("./curveFns-C_vQNb7-.cjs");
8
+ const require_curveFns = require("./curveFns--4Nh1ZtB.cjs");
9
9
  const require_arrayAccess = require("./arrayAccess-CmulMesb.cjs");
10
- const require_surfaceBuilders = require("./surfaceBuilders-CoiofY0Y.cjs");
11
- const require_helpers = require("./helpers-C4Ajoc6x.cjs");
12
- const require_blueprint = require("./blueprint-C6B--LQ6.cjs");
13
- const require_extrudeFns = require("./extrudeFns-BP7fNL5O.cjs");
10
+ const require_surfaceBuilders = require("./surfaceBuilders-CYWopaht.cjs");
11
+ const require_helpers = require("./helpers-BK3DVd3M.cjs");
12
+ const require_blueprint = require("./blueprint-C8nlHdUE.cjs");
13
+ const require_extrudeFns = require("./extrudeFns-CIUq5ZQW.cjs");
14
14
  //#region node_modules/flatqueue/index.js
15
15
  /** @template T */
16
16
  var FlatQueue = class {
@@ -1025,6 +1025,47 @@ function loft(wires, { ruled = true, startPoint, endPoint, tolerance = 1e-6 } =
1025
1025
  return require_errors.err(require_errors.kernelError("LOFT_FAILED", "Loft operation failed", void 0, void 0, "Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered."));
1026
1026
  }
1027
1027
  }
1028
+ /**
1029
+ * Batch loft: build N independent lofts in a single kernel call.
1030
+ *
1031
+ * Uses the C++ LoftBatch extractor when available (single WASM call),
1032
+ * falling back to N individual loft operations otherwise.
1033
+ *
1034
+ * @returns Array of 3D shapes, one per entry.
1035
+ */
1036
+ function loftAll(entries) {
1037
+ if (entries.length === 0) return require_errors.ok([]);
1038
+ const kernel = require_shapeTypes.getKernel();
1039
+ const verticesToDelete = [];
1040
+ const kernelEntries = entries.map((e) => {
1041
+ const startVertex = e.startPoint ? kernel.makeVertex(...require_types.toVec3(e.startPoint)) : void 0;
1042
+ const endVertex = e.endPoint ? kernel.makeVertex(...require_types.toVec3(e.endPoint)) : void 0;
1043
+ if (startVertex) verticesToDelete.push(startVertex);
1044
+ if (endVertex) verticesToDelete.push(endVertex);
1045
+ return {
1046
+ wires: e.wires.map((w) => w.wrapped),
1047
+ solid: true,
1048
+ ruled: e.ruled ?? true,
1049
+ tolerance: e.tolerance ?? 1e-6,
1050
+ startVertex,
1051
+ endVertex
1052
+ };
1053
+ });
1054
+ try {
1055
+ const shapes = kernel.loftBatch?.(kernelEntries) ?? kernelEntries.map((e) => kernel.loft(e.wires, e.ruled, e.startVertex, e.endVertex));
1056
+ const results = [];
1057
+ for (const shape of shapes) {
1058
+ const cast = require_shapeTypes.castShape(shape);
1059
+ if (!require_shapeTypes.isShape3D(cast)) return require_errors.err(require_errors.typeCastError("LOFT_ALL_NOT_3D", "Batch loft entry did not produce a 3D shape"));
1060
+ results.push(cast);
1061
+ }
1062
+ return require_errors.ok(results);
1063
+ } catch (e) {
1064
+ return require_errors.err(require_errors.kernelError("LOFT_ALL_FAILED", "Batch loft operation failed", e));
1065
+ } finally {
1066
+ for (const v of verticesToDelete) kernel.dispose(v);
1067
+ }
1068
+ }
1028
1069
  //#endregion
1029
1070
  //#region src/sketching/sketch.ts
1030
1071
  /**
@@ -2646,6 +2687,12 @@ Object.defineProperty(exports, "loft", {
2646
2687
  return loft;
2647
2688
  }
2648
2689
  });
2690
+ Object.defineProperty(exports, "loftAll", {
2691
+ enumerable: true,
2692
+ get: function() {
2693
+ return loftAll;
2694
+ }
2695
+ });
2649
2696
  Object.defineProperty(exports, "make2dOffset", {
2650
2697
  enumerable: true,
2651
2698
  get: function() {
@@ -1,11 +1,11 @@
1
- import { Y as getKernel, h as isShape3D, t as castShape } from "./shapeTypes-CoNj-AHu.js";
1
+ import { Y as getKernel, h as isShape3D, t as castShape } from "./shapeTypes-DUJg_N3P.js";
2
2
  import { A as ok, R as unwrap, b as err, d as validationError, i as kernelError, l as typeCastError, t as BrepErrorCode, w as isErr } from "./errors-C-cgQA3w.js";
3
3
  import { n as HASH_CODE_MAX } from "./constants-B9u763C3.js";
4
4
  import { h as vecScale, t as vecAdd } from "./vecOps-D9etjPgV.js";
5
5
  import { o as resolvePlane } from "./planeOps-gTOEarV2.js";
6
- import { F as getVertices, I as getWires, M as getEdges, _ as propagateAllMetadata, g as collectInputFaceHashes, v as propagateMetadataByHash } from "./shapeFns-Brq2J-mW.js";
6
+ import { F as getVertices, I as getWires, M as getEdges, _ as propagateAllMetadata, g as collectInputFaceHashes, v as propagateMetadataByHash } from "./shapeFns-E3qTx3nN.js";
7
7
  import { n as getAtOrThrow, t as firstOrThrow } from "./arrayAccess-xxcB3YNq.js";
8
- import { r as makeFace } from "./surfaceBuilders-Cfo4nH6A.js";
8
+ import { r as makeFace } from "./surfaceBuilders-DMI0n7Bf.js";
9
9
  //#region src/topology/booleanFns.ts
10
10
  /**
11
11
  * Boolean and compound operations — functional replacements for _3DShape boolean methods.
@@ -35,12 +35,17 @@ function castToShape3D(shape, errorCode, errorMsg, suggestion, diagnostics) {
35
35
  }
36
36
  return ok(wrapped);
37
37
  }
38
- function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
38
+ function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
39
39
  if (signal?.aborted) throw signal.reason;
40
40
  const checkA = validateShape3D(a, "fuse: first operand");
41
41
  if (isErr(checkA)) return checkA;
42
42
  const checkB = validateShape3D(b, "fuse: second operand");
43
43
  if (isErr(checkB)) return checkB;
44
+ if (!trackEvolution) return castToShape3D(getKernel().fuse(a.wrapped, b.wrapped, {
45
+ optimisation,
46
+ simplify,
47
+ fuzzyValue
48
+ }), "FUSE_NOT_3D", "Fuse did not produce a 3D shape");
44
49
  const inputFaceHashes = collectInputFaceHashes([a, b]);
45
50
  const { shape: resultShape, evolution, diagnostics } = getKernel().fuseWithHistory(a.wrapped, b.wrapped, inputFaceHashes, HASH_CODE_MAX, {
46
51
  optimisation,
@@ -55,12 +60,17 @@ function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValu
55
60
  if (fuseResult.ok) propagateAllMetadata(evolution, [a, b], fuseResult.value);
56
61
  return fuseResult;
57
62
  }
58
- function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
63
+ function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
59
64
  if (signal?.aborted) throw signal.reason;
60
65
  const checkBase = validateShape3D(base, "cut: base");
61
66
  if (isErr(checkBase)) return checkBase;
62
67
  const checkTool = validateShape3D(tool, "cut: tool");
63
68
  if (isErr(checkTool)) return checkTool;
69
+ if (!trackEvolution) return castToShape3D(getKernel().cut(base.wrapped, tool.wrapped, {
70
+ optimisation,
71
+ simplify,
72
+ fuzzyValue
73
+ }), "CUT_NOT_3D", "Cut did not produce a 3D shape");
64
74
  const inputFaceHashes = collectInputFaceHashes([base, tool]);
65
75
  const { shape: resultShape, evolution, diagnostics } = getKernel().cutWithHistory(base.wrapped, tool.wrapped, inputFaceHashes, HASH_CODE_MAX, {
66
76
  optimisation,
@@ -75,12 +85,16 @@ function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzz
75
85
  if (cutResult.ok) propagateAllMetadata(evolution, [base, tool], cutResult.value);
76
86
  return cutResult;
77
87
  }
78
- function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
88
+ function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
79
89
  if (signal?.aborted) throw signal.reason;
80
90
  const checkA = validateShape3D(a, "intersect: first operand");
81
91
  if (isErr(checkA)) return checkA;
82
92
  const checkB = validateShape3D(b, "intersect: second operand");
83
93
  if (isErr(checkB)) return checkB;
94
+ if (!trackEvolution) return castToShape3D(getKernel().intersect(a.wrapped, b.wrapped, {
95
+ simplify,
96
+ fuzzyValue
97
+ }), "INTERSECT_NOT_3D", "Intersect did not produce a 3D shape");
84
98
  const inputFaceHashes = collectInputFaceHashes([a, b]);
85
99
  const { shape: resultShape, evolution, diagnostics } = getKernel().intersectWithHistory(a.wrapped, b.wrapped, inputFaceHashes, HASH_CODE_MAX, {
86
100
  simplify,
@@ -97,31 +111,33 @@ function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe
97
111
  /**
98
112
  * Internal helper for pairwise fuse using index ranges to avoid array allocations.
99
113
  */
100
- function fuseAllPairwise(shapes, start, end, optimisation, simplify, isTopLevel, signal, fuzzyValue) {
114
+ function fuseAllPairwise(shapes, start, end, optimisation, simplify, trackEvolution, signal, fuzzyValue) {
101
115
  if (signal?.aborted) throw signal.reason;
102
116
  const count = end - start;
103
117
  if (count === 1) return ok(getAtOrThrow(shapes, start));
104
118
  if (count === 2) return fuse(getAtOrThrow(shapes, start), getAtOrThrow(shapes, start + 1), {
105
119
  optimisation,
106
- simplify: isTopLevel ? simplify : false,
120
+ simplify: false,
121
+ trackEvolution,
107
122
  fuzzyValue,
108
123
  unsafe: true,
109
124
  ...signal ? { signal } : {}
110
125
  });
111
126
  const mid = start + Math.ceil(count / 2);
112
- const leftResult = fuseAllPairwise(shapes, start, mid, optimisation, simplify, false, signal, fuzzyValue);
127
+ const leftResult = fuseAllPairwise(shapes, start, mid, optimisation, simplify, trackEvolution, signal, fuzzyValue);
113
128
  if (isErr(leftResult)) return leftResult;
114
- const rightResult = fuseAllPairwise(shapes, mid, end, optimisation, simplify, false, signal, fuzzyValue);
129
+ const rightResult = fuseAllPairwise(shapes, mid, end, optimisation, simplify, trackEvolution, signal, fuzzyValue);
115
130
  if (isErr(rightResult)) return rightResult;
116
131
  return fuse(leftResult.value, rightResult.value, {
117
132
  optimisation,
118
- simplify: isTopLevel ? simplify : false,
133
+ simplify,
134
+ trackEvolution,
119
135
  fuzzyValue,
120
136
  unsafe: true,
121
137
  ...signal ? { signal } : {}
122
138
  });
123
139
  }
124
- function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "native", signal, fuzzyValue, unsafe: _unsafe } = {}) {
140
+ function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "native", signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
125
141
  if (signal?.aborted) throw signal.reason;
126
142
  if (shapes.length === 0) return err(validationError("FUSE_ALL_EMPTY", "fuseAll requires at least one shape"));
127
143
  if (shapes.length === 1) return ok(firstOrThrow(shapes));
@@ -137,12 +153,12 @@ function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "
137
153
  fuzzyValue,
138
154
  ...signal ? { signal } : {}
139
155
  }), "FUSE_ALL_NOT_3D", "fuseAll did not produce a 3D shape");
140
- if (fuseAllResult.ok) propagateMetadataByHash(shapes, fuseAllResult.value);
156
+ if (fuseAllResult.ok && trackEvolution) propagateMetadataByHash(shapes, fuseAllResult.value);
141
157
  return fuseAllResult;
142
158
  }
143
- return fuseAllPairwise(shapes, 0, shapes.length, optimisation, simplify, true, signal, fuzzyValue);
159
+ return fuseAllPairwise(shapes, 0, shapes.length, optimisation, simplify, trackEvolution, signal, fuzzyValue);
144
160
  }
145
- function cutAll(base, tools, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
161
+ function cutAll(base, tools, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
146
162
  if (signal?.aborted) throw signal.reason;
147
163
  if (tools.length === 0) return ok(base);
148
164
  const checkBase = validateShape3D(base, "cutAll: base");
@@ -157,7 +173,7 @@ function cutAll(base, tools, { optimisation = "none", simplify = false, signal,
157
173
  simplify,
158
174
  fuzzyValue
159
175
  }), "CUT_ALL_NOT_3D", "cutAll did not produce a 3D shape");
160
- if (cutAllResult.ok) propagateMetadataByHash(allInputs, cutAllResult.value);
176
+ if (cutAllResult.ok && trackEvolution) propagateMetadataByHash(allInputs, cutAllResult.value);
161
177
  return cutAllResult;
162
178
  }
163
179
  /**
@@ -1,11 +1,11 @@
1
- const require_shapeTypes = require("./shapeTypes-B3kwoJWf.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-B5Vx1Wsw.cjs");
2
2
  const require_errors = require("./errors-9zQcQK1H.cjs");
3
3
  const require_constants = require("./constants-unWN8k4c.cjs");
4
4
  const require_vecOps = require("./vecOps-BXvBYIor.cjs");
5
5
  const require_planeOps = require("./planeOps-6Wu7dMDN.cjs");
6
- const require_shapeFns = require("./shapeFns-DY7pjzrz.cjs");
6
+ const require_shapeFns = require("./shapeFns-DZ2c5Nqo.cjs");
7
7
  const require_arrayAccess = require("./arrayAccess-CmulMesb.cjs");
8
- const require_surfaceBuilders = require("./surfaceBuilders-CoiofY0Y.cjs");
8
+ const require_surfaceBuilders = require("./surfaceBuilders-CYWopaht.cjs");
9
9
  //#region src/topology/booleanFns.ts
10
10
  /**
11
11
  * Boolean and compound operations — functional replacements for _3DShape boolean methods.
@@ -35,12 +35,17 @@ function castToShape3D(shape, errorCode, errorMsg, suggestion, diagnostics) {
35
35
  }
36
36
  return require_errors.ok(wrapped);
37
37
  }
38
- function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
38
+ function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
39
39
  if (signal?.aborted) throw signal.reason;
40
40
  const checkA = validateShape3D(a, "fuse: first operand");
41
41
  if (require_errors.isErr(checkA)) return checkA;
42
42
  const checkB = validateShape3D(b, "fuse: second operand");
43
43
  if (require_errors.isErr(checkB)) return checkB;
44
+ if (!trackEvolution) return castToShape3D(require_shapeTypes.getKernel().fuse(a.wrapped, b.wrapped, {
45
+ optimisation,
46
+ simplify,
47
+ fuzzyValue
48
+ }), "FUSE_NOT_3D", "Fuse did not produce a 3D shape");
44
49
  const inputFaceHashes = require_shapeFns.collectInputFaceHashes([a, b]);
45
50
  const { shape: resultShape, evolution, diagnostics } = require_shapeTypes.getKernel().fuseWithHistory(a.wrapped, b.wrapped, inputFaceHashes, require_constants.HASH_CODE_MAX, {
46
51
  optimisation,
@@ -55,12 +60,17 @@ function fuse(a, b, { optimisation = "none", simplify = false, signal, fuzzyValu
55
60
  if (fuseResult.ok) require_shapeFns.propagateAllMetadata(evolution, [a, b], fuseResult.value);
56
61
  return fuseResult;
57
62
  }
58
- function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
63
+ function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
59
64
  if (signal?.aborted) throw signal.reason;
60
65
  const checkBase = validateShape3D(base, "cut: base");
61
66
  if (require_errors.isErr(checkBase)) return checkBase;
62
67
  const checkTool = validateShape3D(tool, "cut: tool");
63
68
  if (require_errors.isErr(checkTool)) return checkTool;
69
+ if (!trackEvolution) return castToShape3D(require_shapeTypes.getKernel().cut(base.wrapped, tool.wrapped, {
70
+ optimisation,
71
+ simplify,
72
+ fuzzyValue
73
+ }), "CUT_NOT_3D", "Cut did not produce a 3D shape");
64
74
  const inputFaceHashes = require_shapeFns.collectInputFaceHashes([base, tool]);
65
75
  const { shape: resultShape, evolution, diagnostics } = require_shapeTypes.getKernel().cutWithHistory(base.wrapped, tool.wrapped, inputFaceHashes, require_constants.HASH_CODE_MAX, {
66
76
  optimisation,
@@ -75,12 +85,16 @@ function cut(base, tool, { optimisation = "none", simplify = false, signal, fuzz
75
85
  if (cutResult.ok) require_shapeFns.propagateAllMetadata(evolution, [base, tool], cutResult.value);
76
86
  return cutResult;
77
87
  }
78
- function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
88
+ function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
79
89
  if (signal?.aborted) throw signal.reason;
80
90
  const checkA = validateShape3D(a, "intersect: first operand");
81
91
  if (require_errors.isErr(checkA)) return checkA;
82
92
  const checkB = validateShape3D(b, "intersect: second operand");
83
93
  if (require_errors.isErr(checkB)) return checkB;
94
+ if (!trackEvolution) return castToShape3D(require_shapeTypes.getKernel().intersect(a.wrapped, b.wrapped, {
95
+ simplify,
96
+ fuzzyValue
97
+ }), "INTERSECT_NOT_3D", "Intersect did not produce a 3D shape");
84
98
  const inputFaceHashes = require_shapeFns.collectInputFaceHashes([a, b]);
85
99
  const { shape: resultShape, evolution, diagnostics } = require_shapeTypes.getKernel().intersectWithHistory(a.wrapped, b.wrapped, inputFaceHashes, require_constants.HASH_CODE_MAX, {
86
100
  simplify,
@@ -97,31 +111,33 @@ function intersect(a, b, { simplify = false, signal, fuzzyValue, unsafe: _unsafe
97
111
  /**
98
112
  * Internal helper for pairwise fuse using index ranges to avoid array allocations.
99
113
  */
100
- function fuseAllPairwise(shapes, start, end, optimisation, simplify, isTopLevel, signal, fuzzyValue) {
114
+ function fuseAllPairwise(shapes, start, end, optimisation, simplify, trackEvolution, signal, fuzzyValue) {
101
115
  if (signal?.aborted) throw signal.reason;
102
116
  const count = end - start;
103
117
  if (count === 1) return require_errors.ok(require_arrayAccess.getAtOrThrow(shapes, start));
104
118
  if (count === 2) return fuse(require_arrayAccess.getAtOrThrow(shapes, start), require_arrayAccess.getAtOrThrow(shapes, start + 1), {
105
119
  optimisation,
106
- simplify: isTopLevel ? simplify : false,
120
+ simplify: false,
121
+ trackEvolution,
107
122
  fuzzyValue,
108
123
  unsafe: true,
109
124
  ...signal ? { signal } : {}
110
125
  });
111
126
  const mid = start + Math.ceil(count / 2);
112
- const leftResult = fuseAllPairwise(shapes, start, mid, optimisation, simplify, false, signal, fuzzyValue);
127
+ const leftResult = fuseAllPairwise(shapes, start, mid, optimisation, simplify, trackEvolution, signal, fuzzyValue);
113
128
  if (require_errors.isErr(leftResult)) return leftResult;
114
- const rightResult = fuseAllPairwise(shapes, mid, end, optimisation, simplify, false, signal, fuzzyValue);
129
+ const rightResult = fuseAllPairwise(shapes, mid, end, optimisation, simplify, trackEvolution, signal, fuzzyValue);
115
130
  if (require_errors.isErr(rightResult)) return rightResult;
116
131
  return fuse(leftResult.value, rightResult.value, {
117
132
  optimisation,
118
- simplify: isTopLevel ? simplify : false,
133
+ simplify,
134
+ trackEvolution,
119
135
  fuzzyValue,
120
136
  unsafe: true,
121
137
  ...signal ? { signal } : {}
122
138
  });
123
139
  }
124
- function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "native", signal, fuzzyValue, unsafe: _unsafe } = {}) {
140
+ function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "native", signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
125
141
  if (signal?.aborted) throw signal.reason;
126
142
  if (shapes.length === 0) return require_errors.err(require_errors.validationError("FUSE_ALL_EMPTY", "fuseAll requires at least one shape"));
127
143
  if (shapes.length === 1) return require_errors.ok(require_arrayAccess.firstOrThrow(shapes));
@@ -137,12 +153,12 @@ function fuseAll(shapes, { optimisation = "none", simplify = false, strategy = "
137
153
  fuzzyValue,
138
154
  ...signal ? { signal } : {}
139
155
  }), "FUSE_ALL_NOT_3D", "fuseAll did not produce a 3D shape");
140
- if (fuseAllResult.ok) require_shapeFns.propagateMetadataByHash(shapes, fuseAllResult.value);
156
+ if (fuseAllResult.ok && trackEvolution) require_shapeFns.propagateMetadataByHash(shapes, fuseAllResult.value);
141
157
  return fuseAllResult;
142
158
  }
143
- return fuseAllPairwise(shapes, 0, shapes.length, optimisation, simplify, true, signal, fuzzyValue);
159
+ return fuseAllPairwise(shapes, 0, shapes.length, optimisation, simplify, trackEvolution, signal, fuzzyValue);
144
160
  }
145
- function cutAll(base, tools, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe } = {}) {
161
+ function cutAll(base, tools, { optimisation = "none", simplify = false, signal, fuzzyValue, unsafe: _unsafe, trackEvolution = true } = {}) {
146
162
  if (signal?.aborted) throw signal.reason;
147
163
  if (tools.length === 0) return require_errors.ok(base);
148
164
  const checkBase = validateShape3D(base, "cutAll: base");
@@ -157,7 +173,7 @@ function cutAll(base, tools, { optimisation = "none", simplify = false, signal,
157
173
  simplify,
158
174
  fuzzyValue
159
175
  }), "CUT_ALL_NOT_3D", "cutAll did not produce a 3D shape");
160
- if (cutAllResult.ok) require_shapeFns.propagateMetadataByHash(allInputs, cutAllResult.value);
176
+ if (cutAllResult.ok && trackEvolution) require_shapeFns.propagateMetadataByHash(allInputs, cutAllResult.value);
161
177
  return cutAllResult;
162
178
  }
163
179
  /**
package/dist/brepjs.cjs CHANGED
@@ -1,29 +1,29 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_drawFns = require("./drawFns-DRG-UpkW.cjs");
3
- const require_shapeTypes = require("./shapeTypes-B3kwoJWf.cjs");
2
+ const require_drawFns = require("./drawFns-DTqCnYeo.cjs");
3
+ const require_shapeTypes = require("./shapeTypes-B5Vx1Wsw.cjs");
4
4
  const require_errors = require("./errors-9zQcQK1H.cjs");
5
- const require_faceFns = require("./faceFns-BwzwlBjE.cjs");
5
+ const require_faceFns = require("./faceFns-D7i9yEts.cjs");
6
6
  const require_constants = require("./constants-unWN8k4c.cjs");
7
7
  const require_types = require("./types-BjDcsS7l.cjs");
8
8
  const require_vecOps = require("./vecOps-BXvBYIor.cjs");
9
9
  const require_planeOps = require("./planeOps-6Wu7dMDN.cjs");
10
- const require_shapeFns = require("./shapeFns-DY7pjzrz.cjs");
11
- const require_curveFns = require("./curveFns-C_vQNb7-.cjs");
12
- const require_meshFns = require("./meshFns-CONktkIA.cjs");
10
+ const require_shapeFns = require("./shapeFns-DZ2c5Nqo.cjs");
11
+ const require_curveFns = require("./curveFns--4Nh1ZtB.cjs");
12
+ const require_meshFns = require("./meshFns-Z5n8gFAS.cjs");
13
13
  const require_arrayAccess = require("./arrayAccess-CmulMesb.cjs");
14
- const require_surfaceBuilders = require("./surfaceBuilders-CoiofY0Y.cjs");
15
- const require_booleanFns = require("./booleanFns-C2pjUC6-.cjs");
16
- const require_primitiveFns = require("./primitiveFns-CGg6EBKg.cjs");
17
- const require_historyFns = require("./historyFns-CrsjeD69.cjs");
18
- const require_boolean2D = require("./boolean2D-6bQx64bR.cjs");
19
- const require_helpers = require("./helpers-C4Ajoc6x.cjs");
20
- const require_solidBuilders = require("./solidBuilders-V8qvmW7h.cjs");
21
- const require_measureFns = require("./measureFns-j1ze9DDM.cjs");
22
- const require_cornerFinder = require("./cornerFinder-DrHIlWCS.cjs");
23
- const require_extrudeFns = require("./extrudeFns-BP7fNL5O.cjs");
24
- const require_blueprintFns = require("./blueprintFns-B2AvzIXt.cjs");
25
- const require_importFns = require("./importFns-DPwXjtkm.cjs");
26
- const require_shapeRefFns = require("./shapeRefFns-BOljxSxd.cjs");
14
+ const require_surfaceBuilders = require("./surfaceBuilders-CYWopaht.cjs");
15
+ const require_booleanFns = require("./booleanFns-Dmvv9VVT.cjs");
16
+ const require_primitiveFns = require("./primitiveFns-w2otksRk.cjs");
17
+ const require_historyFns = require("./historyFns-BO9c4AgQ.cjs");
18
+ const require_boolean2D = require("./boolean2D-DE2axG6W.cjs");
19
+ const require_helpers = require("./helpers-BK3DVd3M.cjs");
20
+ const require_solidBuilders = require("./solidBuilders-Bvq6br4f.cjs");
21
+ const require_measureFns = require("./measureFns-rVSankqO.cjs");
22
+ const require_cornerFinder = require("./cornerFinder-Du1Q1hgu.cjs");
23
+ const require_extrudeFns = require("./extrudeFns-CIUq5ZQW.cjs");
24
+ const require_blueprintFns = require("./blueprintFns-CvtakKGf.cjs");
25
+ const require_importFns = require("./importFns-Ca7DsY-k.cjs");
26
+ const require_shapeRefFns = require("./shapeRefFns-Dl7v17MC.cjs");
27
27
  const require_workerHandler = require("./workerHandler-C-7OUJsa.cjs");
28
28
  //#region src/topology/shapeBooleans.ts
29
29
  var BOPAlgo_GlueShift = 1;
@@ -2933,6 +2933,7 @@ exports.exportSTEPConfigured = require_importFns.exportSTEPConfigured;
2933
2933
  exports.exportSTL = require_meshFns.exportSTL;
2934
2934
  exports.exportThreeMF = require_importFns.exportThreeMF;
2935
2935
  exports.extrude = extrude;
2936
+ exports.extrudeAll = require_extrudeFns.extrudeAll;
2936
2937
  exports.face = require_primitiveFns.face;
2937
2938
  exports.faceCenter = require_faceFns.faceCenter;
2938
2939
  exports.faceFinder = require_helpers.faceFinder;
@@ -2980,6 +2981,7 @@ exports.getNurbsCurveData = require_primitiveFns.getNurbsCurveData;
2980
2981
  exports.getNurbsSurfaceData = require_primitiveFns.getNurbsSurfaceData;
2981
2982
  exports.getOrientation = require_curveFns.getOrientation;
2982
2983
  exports.getOrientation2D = require_blueprintFns.getOrientation2D;
2984
+ exports.getPerformanceStats = require_shapeTypes.getPerformanceStats;
2983
2985
  exports.getShapeColor = require_shapeFns.getShapeColor;
2984
2986
  exports.getShapeKind = require_shapeTypes.getShapeKind;
2985
2987
  exports.getSingleFace = require_helpers.getSingleFace;
@@ -3068,6 +3070,7 @@ exports.line = require_primitiveFns.line;
3068
3070
  exports.linearPattern = require_historyFns.linearPattern;
3069
3071
  exports.loadFont = require_drawFns.loadFont;
3070
3072
  exports.loft = loft;
3073
+ exports.loftAll = require_boolean2D.loftAll;
3071
3074
  exports.makeBaseBox = require_drawFns.makeBaseBox;
3072
3075
  exports.makePlane = require_planeOps.makePlane;
3073
3076
  exports.makeProjectedEdges = require_drawFns.makeProjectedEdges;
@@ -3163,6 +3166,7 @@ exports.removeHolesFromFace = require_faceFns.removeHolesFromFace;
3163
3166
  exports.replayFrom = require_historyFns.replayFrom;
3164
3167
  exports.replayHistory = require_historyFns.replayHistory;
3165
3168
  exports.resetDisposalStats = require_shapeTypes.resetDisposalStats;
3169
+ exports.resetPerformanceStats = require_shapeTypes.resetPerformanceStats;
3166
3170
  exports.resize = require_shapeFns.resize;
3167
3171
  exports.resolve = resolve;
3168
3172
  exports.resolve3D = resolve3D;