brepjs 20.12.11 → 20.12.12

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 (59) hide show
  1. package/dist/2d.cjs +4 -4
  2. package/dist/2d.js +4 -4
  3. package/dist/{blueprint-DbNFPHzC.js → blueprint-BYXwa2cF.js} +1 -1
  4. package/dist/{blueprint-BY2aygt_.cjs → blueprint-DtPRNDEu.cjs} +1 -1
  5. package/dist/{blueprintFns-dU5V5WcD.js → blueprintFns-YuJQgywS.js} +2 -2
  6. package/dist/{blueprintFns-AfHtvBKP.cjs → blueprintFns-y2oH3LOO.cjs} +2 -2
  7. package/dist/{blueprintSketcher-nBI9PlsW.js → blueprintSketcher-DPP1g95U.js} +2 -2
  8. package/dist/{blueprintSketcher-DHp6AeEM.cjs → blueprintSketcher-zQgjgodb.cjs} +2 -2
  9. package/dist/{boolean2D-C6TS6oFP.cjs → boolean2D-BJFpEXix.cjs} +3 -3
  10. package/dist/{boolean2D-DuWgyjOR.js → boolean2D-CNf7lVXV.js} +3 -3
  11. package/dist/{booleanFns-BwzBRGqj.js → booleanFns-B9RvEpHB.js} +55 -29
  12. package/dist/{booleanFns-D0qfjH0a.cjs → booleanFns-CkcJ8WB7.cjs} +60 -28
  13. package/dist/brepjs.cjs +18 -18
  14. package/dist/brepjs.js +18 -18
  15. package/dist/{cornerFinder-CeyQ5JMA.js → cornerFinder-DgVMDBCo.js} +1 -1
  16. package/dist/{cornerFinder-Da8Dv4bp.cjs → cornerFinder-Dzsi68w-.cjs} +1 -1
  17. package/dist/{drawFns-BQIHgHQg.js → drawFns-Bht1ceeH.js} +6 -6
  18. package/dist/{drawFns-JZV96JGO.cjs → drawFns-CLJog-Xp.cjs} +6 -6
  19. package/dist/{healingFns-qioD81Of.cjs → healingFns-DGc2hk9z.cjs} +76 -16
  20. package/dist/{healingFns-D6mUhe0Z.js → healingFns-DvuJr4RS.js} +76 -16
  21. package/dist/{helpers-CsHdKbfF.js → helpers-BuI9lh-t.js} +1 -1
  22. package/dist/{helpers-BvYkHZK7.cjs → helpers-D7Y4Vxhf.cjs} +1 -1
  23. package/dist/{importFns-BzzUvnKA.cjs → importFns-Dwlc0KtB.cjs} +1 -1
  24. package/dist/{importFns-C8yUNPzJ.js → importFns-TKzj4FaZ.js} +1 -1
  25. package/dist/io.cjs +1 -1
  26. package/dist/io.js +1 -1
  27. package/dist/{measureFns-D3egqKcW.js → measureFns--UKrACtx.js} +12 -6
  28. package/dist/{measureFns-R85865k9.cjs → measureFns-D8uSDn-8.cjs} +23 -5
  29. package/dist/measurement/measureFns.d.ts +18 -3
  30. package/dist/measurement/principalBoxFns.d.ts +2 -1
  31. package/dist/measurement.cjs +2 -2
  32. package/dist/measurement.js +2 -2
  33. package/dist/operations.cjs +1 -1
  34. package/dist/operations.js +1 -1
  35. package/dist/{primitiveFns-eiM6OjWU.cjs → primitiveFns-CZqSRhm8.cjs} +1 -1
  36. package/dist/{primitiveFns-NxbTqKy7.js → primitiveFns-DPqHA3sX.js} +1 -1
  37. package/dist/{principalBoxFns-BgetPvvQ.js → principalBoxFns-C3SQMyG5.js} +28 -19
  38. package/dist/{principalBoxFns-DepJW5im.cjs → principalBoxFns-Cozj46sS.cjs} +27 -18
  39. package/dist/query.cjs +2 -2
  40. package/dist/query.js +2 -2
  41. package/dist/{refResolveFns-DpWvqRm0.cjs → refResolveFns-DBY8yC6n.cjs} +1 -1
  42. package/dist/{refResolveFns-Bl10yOGJ.js → refResolveFns-DtztzO1g.js} +1 -1
  43. package/dist/shapeRef.cjs +1 -1
  44. package/dist/shapeRef.js +1 -1
  45. package/dist/sketching.cjs +3 -3
  46. package/dist/sketching.js +3 -3
  47. package/dist/text.cjs +2 -2
  48. package/dist/text.js +2 -2
  49. package/dist/{textBlueprints-D3XhH1kb.cjs → textBlueprints-BPrPhg5b.cjs} +2 -2
  50. package/dist/{textBlueprints-BvZNjVwM.js → textBlueprints-Dq3pUNSr.js} +2 -2
  51. package/dist/{textMetrics-zk48vXsM.cjs → textMetrics-4xkjKmD1.cjs} +1 -1
  52. package/dist/{textMetrics-BGPUxjiq.js → textMetrics-JN70dV5x.js} +1 -1
  53. package/dist/{threadFns-CEr8JDsu.js → threadFns-D7D_qR7t.js} +3 -3
  54. package/dist/{threadFns-DNFoBBrH.cjs → threadFns-Dq_Gff0C.cjs} +3 -3
  55. package/dist/topology/booleanFns.d.ts +15 -3
  56. package/dist/topology/metadata/metadataPropagation.d.ts +4 -1
  57. package/dist/topology.cjs +3 -3
  58. package/dist/topology.js +3 -3
  59. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  import { G as _usingCtx, n as castResultShape, q as getKernel } from "./shapeTypes-DoPnZHn_.js";
2
2
  import { i as wasmIndex } from "./bug-ClMTAJhe.js";
3
3
  import { E as ok, d as validationError, g as err, t as BrepErrorCode, u as unsupportedError } from "./errors-BTccWbtE.js";
4
- import { E as kernelCallRaw, S as subShapeCount } from "./topologyQueryFns-yOGEI9hO.js";
4
+ import { E as kernelCallRaw } from "./topologyQueryFns-yOGEI9hO.js";
5
5
  import { r as vecCross } from "./vecOps-S-m9H_fe.js";
6
- import { f as getCachedMeasurement, p as setCachedMeasurement } from "./measureFns-D3egqKcW.js";
6
+ import { f as withCompoundOf, h as setCachedMeasurement, m as getCachedMeasurement, p as withSubShapes } from "./measureFns--UKrACtx.js";
7
7
  // src/measurement/principalBoxFns.ts
8
8
  /**
9
9
  * Principal-axes bounding box: a solid's extent measured in the frame of its
@@ -27,9 +27,9 @@ function validatePrincipalBoxInput(shape) {
27
27
  if (kernel.isNull(shape.wrapped)) return err(validationError(BrepErrorCode.NULL_SHAPE_INPUT, "principalBoundingBox: shape is a null shape"));
28
28
  const type = kernel.shapeType(shape.wrapped);
29
29
  if (type !== "solid" && type !== "compsolid" && type !== "compound") return err(validationError(BrepErrorCode.NOT_A_SOLID, `principalBoundingBox: expected a solid, got a ${type}`, void 0, { shapeType: type }, "Use getBounds() for faces, wires, and shells"));
30
- const volume = kernelCallRaw(() => type === "solid" || subShapeCount(shape, "solid") > 0 ? kernel.volume(shape.wrapped) : 0, BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure volume");
31
- if (!volume.ok) return volume;
32
- if (volume.value <= ZERO_VOLUME_TOLERANCE) return err(validationError(BrepErrorCode.ZERO_VOLUME, "principalBoundingBox: shape encloses no volume", void 0, { volume: volume.value }, "Use getBounds() for shapes without volume, or build a solid first"));
30
+ }
31
+ function zeroVolumeErr(volume) {
32
+ return err(validationError(BrepErrorCode.ZERO_VOLUME, "principalBoundingBox: shape encloses no volume", void 0, { volume }, "Use getBounds() for shapes without volume, or build a solid first"));
33
33
  }
34
34
  /** One cyclic-Jacobi rotation that zeroes `a[p][q]`, accumulated into the eigenvector matrix `v`. */
35
35
  function jacobiRotate(a, v, p, q) {
@@ -113,12 +113,12 @@ function withoutNegativeZero(v) {
113
113
  v[2] + 0
114
114
  ];
115
115
  }
116
- function boundsInFrame(shape, axes) {
116
+ function boundsInFrame(target, axes) {
117
117
  try {
118
118
  var _usingCtx$1 = _usingCtx();
119
119
  const kernel = getKernel();
120
120
  const [a0, a1, a2] = axes;
121
- const framed = _usingCtx$1.u(castResultShape(kernel.generalTransform(shape.wrapped, [
121
+ const framed = _usingCtx$1.u(castResultShape(kernel.generalTransform(target, [
122
122
  ...a0,
123
123
  ...a1,
124
124
  ...a2
@@ -158,6 +158,21 @@ function assembleBox(axes, bounds) {
158
158
  ]
159
159
  };
160
160
  }
161
+ /** The principal box of `target`, a solid, a compsolid, or a compound of solids. */
162
+ function principalBoxOf(target) {
163
+ const kernel = getKernel();
164
+ const volume = kernelCallRaw(() => kernel.volume(target), BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure volume");
165
+ if (!volume.ok) return volume;
166
+ if (volume.value <= ZERO_VOLUME_TOLERANCE) return zeroVolumeErr(volume.value);
167
+ const inertiaOf = kernel.inertia?.bind(kernel);
168
+ if (!inertiaOf) return err(unsupportedError(BrepErrorCode.UNSUPPORTED_CAPABILITY, `principalBoundingBox: the ${kernel.kernelId} kernel has no inertia query`, void 0, { kernel: kernel.kernelId }, "Use the occt-wasm kernel, which provides the inertia query"));
169
+ const inertia = kernelCallRaw(() => inertiaOf(target), BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to compute the matrix of inertia");
170
+ if (!inertia.ok) return inertia;
171
+ const axes = principalAxes(inertia.value);
172
+ const bounds = kernelCallRaw(() => boundsInFrame(target, axes), BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure bounds in the principal frame");
173
+ if (!bounds.ok) return bounds;
174
+ return ok(assembleBox(axes, bounds.value));
175
+ }
161
176
  /**
162
177
  * Measure a solid's bounding box on its principal axes of inertia.
163
178
  *
@@ -172,7 +187,8 @@ function assembleBox(axes, bounds) {
172
187
  * Z reports 136.6 x 136.6 x 2, because any in-plane pair of axes is principal
173
188
  * for a square plate.
174
189
  *
175
- * @param shape - A solid, compsolid, or compound containing solids.
190
+ * @param shape - A solid, compsolid, or compound containing solids. A compound
191
+ * is measured by its solids alone: loose faces, shells, or wires in it are ignored.
176
192
  * @returns `Result` with the box center in world coordinates, orthonormal
177
193
  * right-handed axes ordered by decreasing extent, and the full edge lengths
178
194
  * along those axes. Fails with `NOT_A_SOLID` for any other shape type
@@ -191,16 +207,9 @@ function principalBoundingBox(shape) {
191
207
  if (cached) return ok(cached);
192
208
  const invalid = validatePrincipalBoxInput(shape);
193
209
  if (invalid) return invalid;
194
- const kernel = getKernel();
195
- const inertiaOf = kernel.inertia?.bind(kernel);
196
- if (!inertiaOf) return err(unsupportedError(BrepErrorCode.UNSUPPORTED_CAPABILITY, `principalBoundingBox: the ${kernel.kernelId} kernel has no inertia query`, void 0, { kernel: kernel.kernelId }, "Use the occt-wasm kernel, which provides the inertia query"));
197
- const inertia = kernelCallRaw(() => inertiaOf(shape.wrapped), BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to compute the matrix of inertia");
198
- if (!inertia.ok) return inertia;
199
- const axes = principalAxes(inertia.value);
200
- const bounds = kernelCallRaw(() => boundsInFrame(shape, axes), BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure bounds in the principal frame");
201
- if (!bounds.ok) return bounds;
202
- const result = assembleBox(axes, bounds.value);
203
- setCachedMeasurement(shape.wrapped, "principal", result);
204
- return ok(result);
210
+ const result = getKernel().shapeType(shape.wrapped) === "compound" ? withSubShapes(shape, "solid", (solids) => solids.length === 0 ? zeroVolumeErr(0) : withCompoundOf(solids, principalBoxOf)) : principalBoxOf(shape.wrapped);
211
+ if (!result.ok) return result;
212
+ setCachedMeasurement(shape.wrapped, "principal", result.value);
213
+ return result;
205
214
  }
206
215
  export { principalBoundingBox as t };
@@ -3,7 +3,7 @@ const require_bug = require("./bug-CBcpIPuf.cjs");
3
3
  const require_errors = require("./errors-O_blYTWT.cjs");
4
4
  const require_topologyQueryFns = require("./topologyQueryFns-BUhKY2Kj.cjs");
5
5
  const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
6
- const require_measureFns = require("./measureFns-R85865k9.cjs");
6
+ const require_measureFns = require("./measureFns-D8uSDn-8.cjs");
7
7
  // src/measurement/principalBoxFns.ts
8
8
  /**
9
9
  * Principal-axes bounding box: a solid's extent measured in the frame of its
@@ -27,9 +27,9 @@ function validatePrincipalBoxInput(shape) {
27
27
  if (kernel.isNull(shape.wrapped)) return require_errors.err(require_errors.validationError(require_errors.BrepErrorCode.NULL_SHAPE_INPUT, "principalBoundingBox: shape is a null shape"));
28
28
  const type = kernel.shapeType(shape.wrapped);
29
29
  if (type !== "solid" && type !== "compsolid" && type !== "compound") return require_errors.err(require_errors.validationError(require_errors.BrepErrorCode.NOT_A_SOLID, `principalBoundingBox: expected a solid, got a ${type}`, void 0, { shapeType: type }, "Use getBounds() for faces, wires, and shells"));
30
- const volume = require_topologyQueryFns.kernelCallRaw(() => type === "solid" || require_topologyQueryFns.subShapeCount(shape, "solid") > 0 ? kernel.volume(shape.wrapped) : 0, require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure volume");
31
- if (!volume.ok) return volume;
32
- if (volume.value <= ZERO_VOLUME_TOLERANCE) return require_errors.err(require_errors.validationError(require_errors.BrepErrorCode.ZERO_VOLUME, "principalBoundingBox: shape encloses no volume", void 0, { volume: volume.value }, "Use getBounds() for shapes without volume, or build a solid first"));
30
+ }
31
+ function zeroVolumeErr(volume) {
32
+ return require_errors.err(require_errors.validationError(require_errors.BrepErrorCode.ZERO_VOLUME, "principalBoundingBox: shape encloses no volume", void 0, { volume }, "Use getBounds() for shapes without volume, or build a solid first"));
33
33
  }
34
34
  /** One cyclic-Jacobi rotation that zeroes `a[p][q]`, accumulated into the eigenvector matrix `v`. */
35
35
  function jacobiRotate(a, v, p, q) {
@@ -113,12 +113,12 @@ function withoutNegativeZero(v) {
113
113
  v[2] + 0
114
114
  ];
115
115
  }
116
- function boundsInFrame(shape, axes) {
116
+ function boundsInFrame(target, axes) {
117
117
  try {
118
118
  var _usingCtx$1 = require_shapeTypes._usingCtx();
119
119
  const kernel = require_shapeTypes.getKernel();
120
120
  const [a0, a1, a2] = axes;
121
- const framed = _usingCtx$1.u(require_shapeTypes.castResultShape(kernel.generalTransform(shape.wrapped, [
121
+ const framed = _usingCtx$1.u(require_shapeTypes.castResultShape(kernel.generalTransform(target, [
122
122
  ...a0,
123
123
  ...a1,
124
124
  ...a2
@@ -158,6 +158,21 @@ function assembleBox(axes, bounds) {
158
158
  ]
159
159
  };
160
160
  }
161
+ /** The principal box of `target`, a solid, a compsolid, or a compound of solids. */
162
+ function principalBoxOf(target) {
163
+ const kernel = require_shapeTypes.getKernel();
164
+ const volume = require_topologyQueryFns.kernelCallRaw(() => kernel.volume(target), require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure volume");
165
+ if (!volume.ok) return volume;
166
+ if (volume.value <= ZERO_VOLUME_TOLERANCE) return zeroVolumeErr(volume.value);
167
+ const inertiaOf = kernel.inertia?.bind(kernel);
168
+ if (!inertiaOf) return require_errors.err(require_errors.unsupportedError(require_errors.BrepErrorCode.UNSUPPORTED_CAPABILITY, `principalBoundingBox: the ${kernel.kernelId} kernel has no inertia query`, void 0, { kernel: kernel.kernelId }, "Use the occt-wasm kernel, which provides the inertia query"));
169
+ const inertia = require_topologyQueryFns.kernelCallRaw(() => inertiaOf(target), require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to compute the matrix of inertia");
170
+ if (!inertia.ok) return inertia;
171
+ const axes = principalAxes(inertia.value);
172
+ const bounds = require_topologyQueryFns.kernelCallRaw(() => boundsInFrame(target, axes), require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure bounds in the principal frame");
173
+ if (!bounds.ok) return bounds;
174
+ return require_errors.ok(assembleBox(axes, bounds.value));
175
+ }
161
176
  /**
162
177
  * Measure a solid's bounding box on its principal axes of inertia.
163
178
  *
@@ -172,7 +187,8 @@ function assembleBox(axes, bounds) {
172
187
  * Z reports 136.6 x 136.6 x 2, because any in-plane pair of axes is principal
173
188
  * for a square plate.
174
189
  *
175
- * @param shape - A solid, compsolid, or compound containing solids.
190
+ * @param shape - A solid, compsolid, or compound containing solids. A compound
191
+ * is measured by its solids alone: loose faces, shells, or wires in it are ignored.
176
192
  * @returns `Result` with the box center in world coordinates, orthonormal
177
193
  * right-handed axes ordered by decreasing extent, and the full edge lengths
178
194
  * along those axes. Fails with `NOT_A_SOLID` for any other shape type
@@ -191,17 +207,10 @@ function principalBoundingBox(shape) {
191
207
  if (cached) return require_errors.ok(cached);
192
208
  const invalid = validatePrincipalBoxInput(shape);
193
209
  if (invalid) return invalid;
194
- const kernel = require_shapeTypes.getKernel();
195
- const inertiaOf = kernel.inertia?.bind(kernel);
196
- if (!inertiaOf) return require_errors.err(require_errors.unsupportedError(require_errors.BrepErrorCode.UNSUPPORTED_CAPABILITY, `principalBoundingBox: the ${kernel.kernelId} kernel has no inertia query`, void 0, { kernel: kernel.kernelId }, "Use the occt-wasm kernel, which provides the inertia query"));
197
- const inertia = require_topologyQueryFns.kernelCallRaw(() => inertiaOf(shape.wrapped), require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to compute the matrix of inertia");
198
- if (!inertia.ok) return inertia;
199
- const axes = principalAxes(inertia.value);
200
- const bounds = require_topologyQueryFns.kernelCallRaw(() => boundsInFrame(shape, axes), require_errors.BrepErrorCode.PRINCIPAL_BOX_FAILED, "principalBoundingBox: failed to measure bounds in the principal frame");
201
- if (!bounds.ok) return bounds;
202
- const result = assembleBox(axes, bounds.value);
203
- require_measureFns.setCachedMeasurement(shape.wrapped, "principal", result);
204
- return require_errors.ok(result);
210
+ const result = require_shapeTypes.getKernel().shapeType(shape.wrapped) === "compound" ? require_measureFns.withSubShapes(shape, "solid", (solids) => solids.length === 0 ? zeroVolumeErr(0) : require_measureFns.withCompoundOf(solids, principalBoxOf)) : principalBoxOf(shape.wrapped);
211
+ if (!result.ok) return result;
212
+ require_measureFns.setCachedMeasurement(shape.wrapped, "principal", result.value);
213
+ return result;
205
214
  }
206
215
  Object.defineProperty(exports, "principalBoundingBox", {
207
216
  enumerable: true,
package/dist/query.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_helpers = require("./helpers-BvYkHZK7.cjs");
3
- const require_cornerFinder = require("./cornerFinder-Da8Dv4bp.cjs");
2
+ const require_helpers = require("./helpers-D7Y4Vxhf.cjs");
3
+ const require_cornerFinder = require("./cornerFinder-Dzsi68w-.cjs");
4
4
  exports.cornerFinder = require_cornerFinder.cornerFinder;
5
5
  exports.edgeFinder = require_helpers.edgeFinder;
6
6
  exports.faceFinder = require_helpers.faceFinder;
package/dist/query.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as edgeFinder, r as faceFinder, t as getSingleFace } from "./helpers-CsHdKbfF.js";
2
- import { t as cornerFinder } from "./cornerFinder-CeyQ5JMA.js";
1
+ import { n as edgeFinder, r as faceFinder, t as getSingleFace } from "./helpers-BuI9lh-t.js";
2
+ import { t as cornerFinder } from "./cornerFinder-DgVMDBCo.js";
3
3
  export { cornerFinder, edgeFinder, faceFinder, getSingleFace };
@@ -3,7 +3,7 @@ const require_topologyQueryFns = require("./topologyQueryFns-BUhKY2Kj.cjs");
3
3
  const require_faceFns = require("./faceFns-Jo9hMVqL.cjs");
4
4
  const require_faceRoleFns = require("./faceRoleFns-Db5bYj4Q.cjs");
5
5
  const require_shapeFns = require("./shapeFns-D47cmLG8.cjs");
6
- const require_measureFns = require("./measureFns-R85865k9.cjs");
6
+ const require_measureFns = require("./measureFns-D8uSDn-8.cjs");
7
7
  const require_adjacencyFns = require("./adjacencyFns-DSGyqGyy.cjs");
8
8
  // src/topology/shapeRef/scoring.ts
9
9
  /**
@@ -3,7 +3,7 @@ import { c as getFaces, w as vertexPosition } from "./topologyQueryFns-yOGEI9hO.
3
3
  import { i as faceGeomType, l as normalAt, r as faceCenter } from "./faceFns-2jGPfqvB.js";
4
4
  import { t as getFaceRoles } from "./faceRoleFns-BPxzQF-n.js";
5
5
  import { n as getHashCode } from "./shapeFns-kFm-m8jh.js";
6
- import { n as measureArea, s as measureLength } from "./measureFns-D3egqKcW.js";
6
+ import { n as measureArea, s as measureLength } from "./measureFns--UKrACtx.js";
7
7
  import { a as facesOfVertex, c as verticesOfFace, i as facesOfEdge, o as sharedEdges, s as verticesOfEdge, t as adjacentFaceHashes } from "./adjacencyFns-DfPO5LGP.js";
8
8
  // src/topology/shapeRef/scoring.ts
9
9
  /**
package/dist/shapeRef.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_refResolveFns = require("./refResolveFns-DpWvqRm0.cjs");
2
+ const require_refResolveFns = require("./refResolveFns-DBY8yC6n.cjs");
3
3
  exports.assignRoles = require_refResolveFns.assignRoles;
4
4
  exports.captureHint = require_refResolveFns.captureHint;
5
5
  exports.createDerivedFaceRef = require_refResolveFns.createDerivedFaceRef;
package/dist/shapeRef.js CHANGED
@@ -1 +1 @@
1
- export { h as assignRoles, g as captureHint, l as createDerivedFaceRef, p as createEdgeRef, _ as createRef, d as createVertexRef, b as defaultScorer, t as isDerivedFaceRef, n as isEdgeRef, r as isFaceRef, i as isLineageRef, a as isVertexRef, u as resolveDerivedFaceRef, m as resolveEdgeRef, o as resolveLineageRef, v as resolveRef, s as resolveRefIn, c as resolveRefParams, f as resolveVertexRef, y as updateRoles } from "./refResolveFns-Bl10yOGJ.js";
1
+ export { h as assignRoles, g as captureHint, l as createDerivedFaceRef, p as createEdgeRef, _ as createRef, d as createVertexRef, b as defaultScorer, t as isDerivedFaceRef, n as isEdgeRef, r as isFaceRef, i as isLineageRef, a as isVertexRef, u as resolveDerivedFaceRef, m as resolveEdgeRef, o as resolveLineageRef, v as resolveRef, s as resolveRefIn, c as resolveRefParams, f as resolveVertexRef, y as updateRoles } from "./refResolveFns-DtztzO1g.js";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_blueprintSketcher = require("./blueprintSketcher-DHp6AeEM.cjs");
3
- const require_drawFns = require("./drawFns-JZV96JGO.cjs");
4
- const require_textBlueprints = require("./textBlueprints-D3XhH1kb.cjs");
2
+ const require_blueprintSketcher = require("./blueprintSketcher-zQgjgodb.cjs");
3
+ const require_drawFns = require("./drawFns-CLJog-Xp.cjs");
4
+ const require_textBlueprints = require("./textBlueprints-BPrPhg5b.cjs");
5
5
  // src/sketching.ts
6
6
  /**
7
7
  * brepjs/sketching — Sketcher, Drawing, and sketch-to-shape operations.
package/dist/sketching.js CHANGED
@@ -1,6 +1,6 @@
1
- import { n as BaseSketcher2d, t as BlueprintSketcher } from "./blueprintSketcher-nBI9PlsW.js";
2
- import { A as sketchEllipse, C as DrawingPen, 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, T as Drawing, _ 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-BQIHgHQg.js";
3
- import { a as Sketches, c as compoundSketchFace, d as sketchExtrude, f as sketchFace, g as sketchWires, h as sketchSweep, l as compoundSketchLoft, m as sketchRevolve, o as Sketch, p as sketchLoft, s as compoundSketchExtrude, u as compoundSketchRevolve, y as CompoundSketch } from "./textBlueprints-BvZNjVwM.js";
1
+ import { n as BaseSketcher2d, t as BlueprintSketcher } from "./blueprintSketcher-DPP1g95U.js";
2
+ import { A as sketchEllipse, C as DrawingPen, 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, T as Drawing, _ 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-Bht1ceeH.js";
3
+ import { a as Sketches, c as compoundSketchFace, d as sketchExtrude, f as sketchFace, g as sketchWires, h as sketchSweep, l as compoundSketchLoft, m as sketchRevolve, o as Sketch, p as sketchLoft, s as compoundSketchExtrude, u as compoundSketchRevolve, y as CompoundSketch } from "./textBlueprints-Dq3pUNSr.js";
4
4
  // src/sketching.ts
5
5
  /**
6
6
  * brepjs/sketching — Sketcher, Drawing, and sketch-to-shape operations.
package/dist/text.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_textBlueprints = require("./textBlueprints-D3XhH1kb.cjs");
3
- const require_textMetrics = require("./textMetrics-zk48vXsM.cjs");
2
+ const require_textBlueprints = require("./textBlueprints-BPrPhg5b.cjs");
3
+ const require_textMetrics = require("./textMetrics-4xkjKmD1.cjs");
4
4
  exports.fontMetrics = require_textMetrics.fontMetrics;
5
5
  exports.getFont = require_textBlueprints.getFont;
6
6
  exports.loadFont = require_textBlueprints.loadFont;
package/dist/text.js CHANGED
@@ -1,3 +1,3 @@
1
- import { i as setFallbackFont, n as getFont, r as loadFont, t as textBlueprints } from "./textBlueprints-BvZNjVwM.js";
2
- import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-BGPUxjiq.js";
1
+ import { i as setFallbackFont, n as getFont, r as loadFont, t as textBlueprints } from "./textBlueprints-Dq3pUNSr.js";
2
+ import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-JN70dV5x.js";
3
3
  export { fontMetrics, getFont, loadFont, setFallbackFont, sketchText, textBlueprints, textMetrics };
@@ -8,12 +8,12 @@ const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
8
8
  const require_planeOps = require("./planeOps-DZfLToKZ.cjs");
9
9
  const require_faceFns = require("./faceFns-Jo9hMVqL.cjs");
10
10
  const require_solidBuilders = require("./solidBuilders-Dwm0hXn5.cjs");
11
- const require_booleanFns = require("./booleanFns-D0qfjH0a.cjs");
11
+ const require_booleanFns = require("./booleanFns-CkcJ8WB7.cjs");
12
12
  const require_faceRoleFns = require("./faceRoleFns-Db5bYj4Q.cjs");
13
13
  const require_curveFns = require("./curveFns-B8mm5cou.cjs");
14
14
  const require_arrayAccess = require("./arrayAccess-DpJYARwv.cjs");
15
15
  const require_surfaceBuilders = require("./surfaceBuilders-D5kFAV1i.cjs");
16
- const require_blueprintSketcher = require("./blueprintSketcher-DHp6AeEM.cjs");
16
+ const require_blueprintSketcher = require("./blueprintSketcher-zQgjgodb.cjs");
17
17
  const require_loftFns = require("./loftFns-CnerVgTM.cjs");
18
18
  let opentype_js = require("opentype.js");
19
19
  opentype_js = require_rolldown_runtime.__toESM(opentype_js, 1);
@@ -7,12 +7,12 @@ import { c as vecLength, d as vecNormalize, h as vecScale, i as vecDistance, r a
7
7
  import { n as createPlane } from "./planeOps-D3yDuMux.js";
8
8
  import { v as copyShape } from "./faceFns-2jGPfqvB.js";
9
9
  import { o as makeSolid, t as makeCompound } from "./solidBuilders-ZDGdvaTU.js";
10
- import { r as cutAll } from "./booleanFns-BwzBRGqj.js";
10
+ import { i as cutAll } from "./booleanFns-B9RvEpHB.js";
11
11
  import { i as setFaceRoles } from "./faceRoleFns-BPxzQF-n.js";
12
12
  import { l as curveStartPoint, u as curveTangentAt } from "./curveFns-EsJgIpc6.js";
13
13
  import { n as getAtOrThrow, t as firstOrThrow } from "./arrayAccess-BpgouNir.js";
14
14
  import { i as makeNewFaceWithinFace, r as makeFace, t as addHolesInFace } from "./surfaceBuilders-BBs6D6Km.js";
15
- import { r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-nBI9PlsW.js";
15
+ import { r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-DPP1g95U.js";
16
16
  import { c as twistExtrude, r as complexExtrude, s as sweep, t as loft } from "./loftFns-jnQL_zpD.js";
17
17
  import opentype from "opentype.js";
18
18
  // src/topology/shapeRef/extrudeRoleFns.ts
@@ -1,5 +1,5 @@
1
1
  const require_errors = require("./errors-O_blYTWT.cjs");
2
- const require_textBlueprints = require("./textBlueprints-D3XhH1kb.cjs");
2
+ const require_textBlueprints = require("./textBlueprints-BPrPhg5b.cjs");
3
3
  // src/text/sketchText.ts
4
4
  /**
5
5
  * Render text as 3D sketch outlines on a plane.
@@ -1,5 +1,5 @@
1
1
  import { E as ok, d as validationError, g as err, t as BrepErrorCode } from "./errors-BTccWbtE.js";
2
- import { _ as wrapSketchData, a as Sketches, n as getFont, t as textBlueprints, y as CompoundSketch } from "./textBlueprints-BvZNjVwM.js";
2
+ import { _ as wrapSketchData, a as Sketches, n as getFont, t as textBlueprints, y as CompoundSketch } from "./textBlueprints-Dq3pUNSr.js";
3
3
  // src/text/sketchText.ts
4
4
  /**
5
5
  * Render text as 3D sketch outlines on a plane.
@@ -2,11 +2,11 @@ import { F as createKernelHandle, G as _usingCtx, N as DisposalScope, n as castR
2
2
  import { E as ok, d as validationError, g as err, n as computationError, r as ioError, t as BrepErrorCode, x as isOk } from "./errors-BTccWbtE.js";
3
3
  import { d as vecNormalize, s as vecIsZero } from "./vecOps-S-m9H_fe.js";
4
4
  import { b as fromBREP } from "./faceFns-2jGPfqvB.js";
5
- import { a as fuseAll } from "./booleanFns-BwzBRGqj.js";
6
- import { E as wire, h as line } from "./primitiveFns-NxbTqKy7.js";
5
+ import { o as fuseAll } from "./booleanFns-B9RvEpHB.js";
6
+ import { E as wire, h as line } from "./primitiveFns-DPqHA3sX.js";
7
7
  import { s as toBREP, t as clone } from "./shapeFns-kFm-m8jh.js";
8
8
  import { t as loft } from "./loftFns-jnQL_zpD.js";
9
- import { c as resolveRefParams } from "./refResolveFns-Bl10yOGJ.js";
9
+ import { c as resolveRefParams } from "./refResolveFns-DtztzO1g.js";
10
10
  // src/utils/uuid.ts
11
11
  /** Generate a v4-style UUID string using `crypto.getRandomValues`. */
12
12
  function uuidv() {
@@ -2,11 +2,11 @@ const require_shapeTypes = require("./shapeTypes-C06KHgTm.cjs");
2
2
  const require_errors = require("./errors-O_blYTWT.cjs");
3
3
  const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
4
4
  const require_faceFns = require("./faceFns-Jo9hMVqL.cjs");
5
- const require_booleanFns = require("./booleanFns-D0qfjH0a.cjs");
6
- const require_primitiveFns = require("./primitiveFns-eiM6OjWU.cjs");
5
+ const require_booleanFns = require("./booleanFns-CkcJ8WB7.cjs");
6
+ const require_primitiveFns = require("./primitiveFns-CZqSRhm8.cjs");
7
7
  const require_shapeFns = require("./shapeFns-D47cmLG8.cjs");
8
8
  const require_loftFns = require("./loftFns-CnerVgTM.cjs");
9
- const require_refResolveFns = require("./refResolveFns-DpWvqRm0.cjs");
9
+ const require_refResolveFns = require("./refResolveFns-DBY8yC6n.cjs");
10
10
  // src/utils/uuid.ts
11
11
  /** Generate a v4-style UUID string using `crypto.getRandomValues`. */
12
12
  function uuidv() {
@@ -4,6 +4,14 @@ import { PlaneInput } from '../core/planeTypes.js';
4
4
  import { BooleanOptions } from '../kernel/types.js';
5
5
  import { ValidSolid } from '../core/validityTypes.js';
6
6
  export type { BooleanOptions };
7
+ /**
8
+ * A copy of `shape` the caller owns, for a boolean that has nothing to combine.
9
+ * With `trackEvolution` on, its face metadata is re-keyed onto the copy, as a
10
+ * real boolean would propagate it.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare function copyAsBooleanResult<T extends AnyShape<Dimension>>(shape: T, trackEvolution: boolean): Result<T>;
7
15
  /**
8
16
  * Fuse two 3D shapes together (boolean union). Returns a new shape.
9
17
  *
@@ -68,6 +76,7 @@ export declare function intersect(a: Shape3D, b: Shape3D, options: BooleanOption
68
76
  * @param shapes - Array of 3D shapes to fuse (at least one required).
69
77
  * @param options - Boolean operation options.
70
78
  * @returns Ok with the fused shape, or Err if the array is empty or the result is not 3D.
79
+ * A single shape comes back as a copy, so the result is always the caller's to dispose.
71
80
  *
72
81
  * @example
73
82
  * ```ts
@@ -87,7 +96,8 @@ export declare function fuseAll(shapes: Shape3D[], options: BooleanOptions & {
87
96
  * @param base - The shape to cut from.
88
97
  * @param tools - Array of tool shapes to subtract.
89
98
  * @param options - Boolean operation options.
90
- * @returns Ok with the cut shape, or the base shape unchanged if tools is empty.
99
+ * @returns Ok with the cut shape, or a copy of the base if tools is empty, so the
100
+ * result is always the caller's to dispose.
91
101
  */
92
102
  export declare function cutAll(base: ValidSolid, tools: ValidSolid[], options?: BooleanOptions): Result<ValidSolid>;
93
103
  export declare function cutAll(base: Shape3D, tools: Shape3D[], options: BooleanOptions & {
@@ -119,7 +129,8 @@ export declare function sectionToFace(shape: AnyShape<Dimension>, plane: PlaneIn
119
129
  }): Result<OrientedFace>;
120
130
  /**
121
131
  * Split a shape with one or more tool shapes using BRepAlgoAPI_Splitter.
122
- * Returns all pieces from the split as a compound.
132
+ * Returns all pieces from the split as a compound, or a copy of the shape when
133
+ * `tools` is empty, so the result is always the caller's to dispose.
123
134
  */
124
135
  export declare function split(shape: AnyShape<Dimension>, tools: AnyShape<Dimension>[]): Result<AnyShape<Dimension>>;
125
136
  /**
@@ -143,7 +154,8 @@ export interface BooleanPipelineStep {
143
154
  * simplifies the final shape.
144
155
  *
145
156
  * Falls back to sequential operations when the C++ pipeline class is not
146
- * available in the WASM build.
157
+ * available in the WASM build. An empty pipeline returns a copy of `base`, so
158
+ * the result is always the caller's to dispose.
147
159
  */
148
160
  export declare function booleanPipeline(base: Shape3D, steps: readonly BooleanPipelineStep[], options?: {
149
161
  readonly optimisation?: 'none' | 'commonFace' | 'sameFace' | undefined;
@@ -43,8 +43,11 @@ export declare function propagateMetadataByHash(inputs: readonly AnyShape<Dimens
43
43
  * hash) and runs the standard propagation pipeline, so origins, tags, and
44
44
  * colors all survive a move at `locate` cost (O(faces)), not a full copy.
45
45
  *
46
+ * A `copyShape` copy keeps the same 1:1 face order with new hashes, so this
47
+ * re-keys metadata onto a copy too.
48
+ *
46
49
  * Callers should gate on {@link hasAnyMetadata} first: with no metadata this
47
50
  * does pointless face iteration. The face counts always match for a rigid
48
- * relocation; the length guard is purely defensive.
51
+ * relocation or a copy; the length guard is purely defensive.
49
52
  */
50
53
  export declare function propagateMetadataThroughRelocation(source: AnyShape<Dimension>, moved: AnyShape<Dimension>): void;
package/dist/topology.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_topologyQueryFns = require("./topologyQueryFns-BUhKY2Kj.cjs");
3
3
  const require_faceFns = require("./faceFns-Jo9hMVqL.cjs");
4
- const require_booleanFns = require("./booleanFns-D0qfjH0a.cjs");
5
- const require_primitiveFns = require("./primitiveFns-eiM6OjWU.cjs");
4
+ const require_booleanFns = require("./booleanFns-CkcJ8WB7.cjs");
5
+ const require_primitiveFns = require("./primitiveFns-CZqSRhm8.cjs");
6
6
  const require_shapeFns = require("./shapeFns-D47cmLG8.cjs");
7
7
  const require_curveFns = require("./curveFns-B8mm5cou.cjs");
8
8
  const require_meshFns = require("./meshFns-Cs_qrlXI.cjs");
9
- const require_healingFns = require("./healingFns-qioD81Of.cjs");
9
+ const require_healingFns = require("./healingFns-DGc2hk9z.cjs");
10
10
  const require_adjacencyFns = require("./adjacencyFns-DSGyqGyy.cjs");
11
11
  exports.addHoles = require_primitiveFns.addHoles;
12
12
  exports.adjacentFaces = require_adjacencyFns.adjacentFaces;
package/dist/topology.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { _ as iterFaces, b as iterVertices, c as getFaces, f as getVertices, g as iterEdges, m as invalidateShapeCache, n as getBounds, p as getWires, s as getEdges, w as vertexPosition, x as iterWires } from "./topologyQueryFns-yOGEI9hO.js";
2
2
  import { C as shapeType, S as iterTopo, _ as cast, a as faceOrientation, b as fromBREP, 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, r as faceCenter, s as getSurfaceType, t as classifyPointOnFace, u as outerWire, x as isCompSolid, y as downcast } from "./faceFns-2jGPfqvB.js";
3
- import { a as fuseAll, r as cutAll } from "./booleanFns-BwzBRGqj.js";
4
- import { C as threePointArc, D as wireLoop, E as wire, S as tangentArc, T as vertex, _ as polygon, a as circle, b as sphere, 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, x as subFace, y as solid } from "./primitiveFns-NxbTqKy7.js";
3
+ import { i as cutAll, o as fuseAll } from "./booleanFns-B9RvEpHB.js";
4
+ import { C as threePointArc, D as wireLoop, E as wire, S as tangentArc, T as vertex, _ as polygon, a as circle, b as sphere, 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, x as subFace, y as solid } from "./primitiveFns-DPqHA3sX.js";
5
5
  import { a as isSameShape, i as isEqualShape, n as getHashCode } from "./shapeFns-kFm-m8jh.js";
6
6
  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-EsJgIpc6.js";
7
7
  import { f as clearMeshCache, n as exportSTEP, p as createMeshCache, r as exportSTL, t as exportIGES } from "./meshFns-Bo4EQJFO.js";
8
- import { I as toLineGeometryData, M as toBufferGeometryData, N as toGroupedBufferGeometryData, S as chamferDistAngle, _ as checkBoolean, a as healFace, b as getNurbsCurveData, d as chamferWithEvolution, f as cutWithEvolution, g as shellWithEvolution, h as intersectWithEvolution, j as variableFillet, l as solidFromShell, m as fuseWithEvolution, n as fixSelfIntersection, o as healSolid, p as filletWithEvolution, r as fixShape, s as healWire, t as autoHeal, u as positionOnCurve, v as cutAllBisect, x as getNurbsSurfaceData, y as fuseAllBisect } from "./healingFns-D6mUhe0Z.js";
8
+ import { I as toLineGeometryData, M as toBufferGeometryData, N as toGroupedBufferGeometryData, S as chamferDistAngle, _ as checkBoolean, a as healFace, b as getNurbsCurveData, d as chamferWithEvolution, f as cutWithEvolution, g as shellWithEvolution, h as intersectWithEvolution, j as variableFillet, l as solidFromShell, m as fuseWithEvolution, n as fixSelfIntersection, o as healSolid, p as filletWithEvolution, r as fixShape, s as healWire, t as autoHeal, u as positionOnCurve, v as cutAllBisect, x as getNurbsSurfaceData, y as fuseAllBisect } from "./healingFns-DvuJr4RS.js";
9
9
  import { i as facesOfEdge, l as wiresOfFace, n as adjacentFaces, o as sharedEdges, r as edgesOfFace, s as verticesOfEdge } from "./adjacencyFns-DfPO5LGP.js";
10
10
  export { addHoles, adjacentFaces, approximateCurve, asTopo, autoHeal, bezier, box, bsplineApprox, cast, chamferDistAngle as chamferDistAngleShape, chamferWithEvolution, checkBoolean, circle, classifyPointOnFace, clearMeshCache, compound, cone, createMeshCache, curveAxis, curveEndPoint, curveIsClosed, curveIsPeriodic, curveLength, curvePeriod, curvePointAt, curveStartPoint, curveTangentAt, cutAll, cutAllBisect, cutWithEvolution, cylinder, fromBREP as deserializeShape, downcast, edgesOfFace, ellipse, ellipseArc, ellipsoid, exportIGES, exportSTEP, exportSTL, face, faceAxis, faceCenter, faceGeomType, faceOrientation, facesOfEdge, filledFace, filletWithEvolution, fixSelfIntersection, fixShape, flipFaceOrientation, flipOrientation, fuseAll, fuseAllBisect, fuseWithEvolution, getBounds, getCurveType, getEdges, getFaces, getHashCode, getNurbsCurveData, getNurbsSurfaceData, getOrientation, getSurfaceType, getVertices, getWires, healFace, healSolid, healWire, helix, innerWires, interpolateCurve, intersectWithEvolution, invalidateShapeCache, isCompSolid, isEqualShape, isSameShape, iterEdges, iterFaces, iterTopo, iterVertices, iterWires, line, normalAt, offsetFace, offsetWire2D, outerWire, pointOnSurface, polygon, positionOnCurve, projectPointOnFace, sewShells, shapeType, sharedEdges, shellWithEvolution, solid, solidFromShell, sphere, subFace, tangentArc, threePointArc, toBufferGeometryData, toGroupedBufferGeometryData, toLineGeometryData, torus, uvBounds, uvCoordinates, variableFillet, vertex, vertexPosition, verticesOfEdge, wire, wireLoop, wiresOfFace };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs",
3
- "version": "20.12.11",
3
+ "version": "20.12.12",
4
4
  "description": "Exact B-Rep CAD in TypeScript on OpenCascade WebAssembly, with a pluggable geometry kernel",
5
5
  "keywords": [
6
6
  "cad",