brepjs 20.12.6 → 20.12.7

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 (89) hide show
  1. package/dist/2d/blueprints/booleanHelpers.d.ts +0 -5
  2. package/dist/2d/blueprints/intersectionSegments.d.ts +6 -5
  3. package/dist/2d.cjs +6 -6
  4. package/dist/2d.js +6 -6
  5. package/dist/{adjacencyFns--KmBIKYJ.js → adjacencyFns-hMihivxC.js} +3 -3
  6. package/dist/{adjacencyFns-BFJfaUwX.cjs → adjacencyFns-mMmTBUBY.cjs} +3 -3
  7. package/dist/{blueprint-D83DDDPb.cjs → blueprint-17RUHsoP.cjs} +5 -5
  8. package/dist/{blueprint-BhIk9Pvm.js → blueprint-BS50D3J_.js} +5 -5
  9. package/dist/{blueprintFns-C4TQn-x_.cjs → blueprintFns-Dw5_4_Bk.cjs} +2 -2
  10. package/dist/{blueprintFns-eULVgkq9.js → blueprintFns-zy5lo2IF.js} +2 -2
  11. package/dist/{blueprintSketcher-Di376t-0.cjs → blueprintSketcher-BG--DxWB.cjs} +3 -3
  12. package/dist/{blueprintSketcher-D_Faf0GO.js → blueprintSketcher-C1WCI6E0.js} +3 -3
  13. package/dist/{boolean2D-CNZFI_y8.cjs → boolean2D-7SQ3B0pC.cjs} +42 -50
  14. package/dist/{boolean2D-DqpCF72W.js → boolean2D-CsdyfjFE.js} +42 -50
  15. package/dist/brepjs.cjs +30 -30
  16. package/dist/brepjs.js +30 -30
  17. package/dist/{cameraFns-RqraCXIc.cjs → cameraFns-BAtzhCYM.cjs} +3 -3
  18. package/dist/{cameraFns-CrClIkmV.js → cameraFns-BVWyAscu.js} +3 -3
  19. package/dist/core.cjs +2 -2
  20. package/dist/core.js +2 -2
  21. package/dist/{cornerFinder-BZuQkRp2.js → cornerFinder-Dv_2rmaY.js} +1 -1
  22. package/dist/{cornerFinder-CdOe1Wrb.cjs → cornerFinder-e4Wc7_yp.cjs} +1 -1
  23. package/dist/{curveFns-CyIvQNYT.cjs → curveFns-BAM7QHrP.cjs} +1 -1
  24. package/dist/{curveFns-BP3srCfK.js → curveFns-CEI-rouh.js} +1 -1
  25. package/dist/{drawFns-DxDwJ5zZ.js → drawFns-Cl1i8B_B.js} +12 -12
  26. package/dist/{drawFns-71cOhWD-.cjs → drawFns-d-RvC6u6.cjs} +12 -12
  27. package/dist/{faceFns-B7MiDYj1.cjs → faceFns-C-2ttg8X.cjs} +2 -2
  28. package/dist/{faceFns-iVPbTxki.js → faceFns-Q87HCJrp.js} +2 -2
  29. package/dist/{healingFns-BhP8zfp1.js → healingFns-Cm4NkKD8.js} +5 -5
  30. package/dist/{healingFns-DWljGTNR.cjs → healingFns-DZkO5okn.cjs} +5 -5
  31. package/dist/{helpers-DKEVm6Hu.cjs → helpers-BdGGaLhF.cjs} +6 -6
  32. package/dist/{helpers-D2hANLRu.js → helpers-DpGcM2qZ.js} +6 -6
  33. package/dist/{importFns-DUzIkns7.js → importFns-Bp-p0jiP.js} +2 -2
  34. package/dist/{importFns-KEPAgbjj.cjs → importFns-DLiP26NW.cjs} +2 -2
  35. package/dist/io.cjs +2 -2
  36. package/dist/io.js +2 -2
  37. package/dist/kernel/occtWasm/occtWasmAdapter.cjs +1 -1
  38. package/dist/kernel/occtWasm/occtWasmAdapter.js +1 -1
  39. package/dist/{loftFns-D5AvfCGG.cjs → loftFns-DGV1z2NJ.cjs} +1 -1
  40. package/dist/{loftFns-D5NJpHLZ.js → loftFns-DQ7Z29n3.js} +1 -1
  41. package/dist/{measureFns-CZHNWkiA.cjs → measureFns-BdSjw5fr.cjs} +3 -3
  42. package/dist/{measureFns-mxBdPiWa.js → measureFns-BrdCH4cH.js} +3 -3
  43. package/dist/measurement.cjs +2 -2
  44. package/dist/measurement.js +2 -2
  45. package/dist/{meshFns-Czlt-GBJ.cjs → meshFns-BeubBqEI.cjs} +3 -3
  46. package/dist/{meshFns-DmjMzNbH.js → meshFns-UE8tByyw.js} +3 -3
  47. package/dist/{occtWasmAdapter-DVxLkjlJ.cjs → occtWasmAdapter-D3qerQTq.cjs} +96 -35
  48. package/dist/{occtWasmAdapter-B9d0Q0Vl.js → occtWasmAdapter-DA7oMgcQ.js} +96 -35
  49. package/dist/operations.cjs +2 -2
  50. package/dist/operations.js +2 -2
  51. package/dist/{originTrackingFns-CBnyKLm7.js → originTrackingFns-c2qgRZ_9.js} +2 -2
  52. package/dist/{originTrackingFns-CHymOLLm.cjs → originTrackingFns-rEKOAP65.cjs} +2 -2
  53. package/dist/{primitiveFns-DeNl60Rw.js → primitiveFns-3-gs-FUX.js} +4 -4
  54. package/dist/{primitiveFns-BVeBEaa4.cjs → primitiveFns-CLGVLwG8.cjs} +4 -4
  55. package/dist/{principalBoxFns-CG6kG7vT.cjs → principalBoxFns-CiXzjOkr.cjs} +3 -3
  56. package/dist/{principalBoxFns-3mW_hA6z.js → principalBoxFns-RMZItjfR.js} +3 -3
  57. package/dist/projection.cjs +1 -1
  58. package/dist/projection.js +1 -1
  59. package/dist/query.cjs +2 -2
  60. package/dist/query.js +2 -2
  61. package/dist/{refResolveFns-BAs4p9z7.cjs → refResolveFns-DNX0bCrP.cjs} +6 -6
  62. package/dist/{refResolveFns-DHx1Y3GG.js → refResolveFns-kJg2iCad.js} +6 -6
  63. package/dist/{shapeFns-CgqKICF_.js → shapeFns-CZ6VF1yd.js} +2 -2
  64. package/dist/{shapeFns-C0w8vvfb.cjs → shapeFns-SgIrOjN4.cjs} +2 -2
  65. package/dist/shapeRef.cjs +1 -1
  66. package/dist/shapeRef.js +1 -1
  67. package/dist/{shapeTypes-DwvQUp9M.js → shapeTypes-BNGu103j.js} +1 -1
  68. package/dist/{shapeTypes-Dc7j-MYg.cjs → shapeTypes-MUEH4XuH.cjs} +1 -1
  69. package/dist/sketching.cjs +3 -3
  70. package/dist/sketching.js +3 -3
  71. package/dist/{solidBuilders-DT1gpVWM.js → solidBuilders-Bmr59cGp.js} +5 -5
  72. package/dist/{solidBuilders-iS5DDwg8.cjs → solidBuilders-DdG4NPHM.cjs} +5 -5
  73. package/dist/{surfaceBuilders-CPLe0bbk.js → surfaceBuilders-DI376ai0.js} +3 -3
  74. package/dist/{surfaceBuilders-BvwSgD3C.cjs → surfaceBuilders-DOmDVuMs.cjs} +3 -3
  75. package/dist/text.cjs +2 -2
  76. package/dist/text.js +2 -2
  77. package/dist/{textBlueprints-CNPCPJix.cjs → textBlueprints-B7Vhr0xu.cjs} +7 -7
  78. package/dist/{textBlueprints-BU0Rhk54.js → textBlueprints-CE0oxB43.js} +7 -7
  79. package/dist/{textMetrics-C71g4TmO.cjs → textMetrics-C6_kSht6.cjs} +1 -1
  80. package/dist/{textMetrics-Df9aLYK2.js → textMetrics-_VGqdewQ.js} +1 -1
  81. package/dist/{threadFns-CzXEnnmo.cjs → threadFns-1H60LrFX.cjs} +7 -7
  82. package/dist/{threadFns-DESH7lcs.js → threadFns-CHdY-4Cz.js} +7 -7
  83. package/dist/topology.cjs +9 -9
  84. package/dist/topology.js +9 -9
  85. package/dist/{topologyQueryFns-5Frx8Y-0.cjs → topologyQueryFns-C_fXO6xL.cjs} +1 -1
  86. package/dist/{topologyQueryFns-LXV1nTaS.js → topologyQueryFns-CltEv7Pi.js} +1 -1
  87. package/dist/{validityTypes-C6rROGTP.cjs → validityTypes-CGX2ES81.cjs} +1 -1
  88. package/dist/{validityTypes-DM-Iwe8N.js → validityTypes-GanLrmvY.js} +1 -1
  89. package/package.json +1 -1
@@ -1541,10 +1541,7 @@ function intersectCurves2dFn(c1, c2, tolerance) {
1541
1541
  points: intersectLineCircle(c2, b2, c1, b1, tolerance),
1542
1542
  segments: []
1543
1543
  };
1544
- if (b1.__bk2d === "circle" && b2.__bk2d === "circle") return {
1545
- points: intersectCircleCircle(c1, b1, c2, b2, tolerance),
1546
- segments: []
1547
- };
1544
+ if (b1.__bk2d === "circle" && b2.__bk2d === "circle") return intersectCircleCircle(c1, b1, c2, b2, tolerance);
1548
1545
  return numericalIntersect(c1, c2, tolerance, c1 === c2);
1549
1546
  }
1550
1547
  /** Unwrap trimmed wrappers to get the basis curve type. */
@@ -1553,9 +1550,32 @@ function unwrapCurve(c) {
1553
1550
  while (cur.__bk2d === "trimmed") cur = cur.basis;
1554
1551
  return cur;
1555
1552
  }
1556
- /** Check if parameter t is within the curve's domain. */
1553
+ /**
1554
+ * The interval a curve covers on its innermost basis's parameter. A trimmed wrapper's own
1555
+ * parameter runs 0..1, but the analytic solvers work on the unwrapped basis, so their
1556
+ * parameters must be bounded by this interval rather than by `curveBounds(c)`.
1557
+ */
1558
+ function basisInterval(c) {
1559
+ if (c.__bk2d !== "trimmed") return curveBounds(c);
1560
+ const a = basisParam(c.basis, c.tStart);
1561
+ const b = basisParam(c.basis, c.tEnd);
1562
+ return {
1563
+ first: Math.min(a, b),
1564
+ last: Math.max(a, b)
1565
+ };
1566
+ }
1567
+ function basisParam(c, t) {
1568
+ let cur = c;
1569
+ let s = t;
1570
+ while (cur.__bk2d === "trimmed") {
1571
+ s = cur.tStart + s * (cur.tEnd - cur.tStart);
1572
+ cur = cur.basis;
1573
+ }
1574
+ return s;
1575
+ }
1576
+ /** Check if basis parameter t lies within the part of the basis that c covers. */
1557
1577
  function inDomain(c, t, tol) {
1558
- const b = curveBounds(c);
1578
+ const b = basisInterval(c);
1559
1579
  return t >= b.first - tol && t <= b.last + tol;
1560
1580
  }
1561
1581
  /** Find the parameter on curve c closest to point (px, py), searching near tGuess. */
@@ -1631,7 +1651,7 @@ function intersectLineLine(c1, l1, c2, l2, tol) {
1631
1651
  points: [],
1632
1652
  segments: []
1633
1653
  };
1634
- const b1 = curveBounds(c1);
1654
+ const b1 = basisInterval(c1);
1635
1655
  const b2 = curveBounds(c2);
1636
1656
  const p2s = evaluateCurve2d$1(c2, b2.first);
1637
1657
  const p2e = evaluateCurve2d$1(c2, b2.last);
@@ -1672,42 +1692,83 @@ function intersectLineCircle(cLine, line, cCirc, circ, tol) {
1672
1692
  }
1673
1693
  return results;
1674
1694
  }
1675
- function intersectConcentricArcs(c1, c2, tol) {
1676
- const b1 = curveBounds(c1);
1677
- const b2 = curveBounds(c2);
1678
- const isFullCircle1 = Math.abs(b1.last - b1.first - 2 * Math.PI) < 1e-10;
1679
- const isFullCircle2 = Math.abs(b2.last - b2.first - 2 * Math.PI) < 1e-10;
1680
- if (isFullCircle1 && isFullCircle2) return [];
1681
- if (isFullCircle1) return [evaluateCurve2d$1(c2, b2.first), evaluateCurve2d$1(c2, b2.last)];
1682
- if (isFullCircle2) return [evaluateCurve2d$1(c1, b1.first), evaluateCurve2d$1(c1, b1.last)];
1683
- const pts = [];
1684
- const checks = [
1685
- [c2, evaluateCurve2d$1(c1, b1.first)],
1686
- [c2, evaluateCurve2d$1(c1, b1.last)],
1687
- [c1, evaluateCurve2d$1(c2, b2.first)],
1688
- [c1, evaluateCurve2d$1(c2, b2.last)]
1689
- ];
1690
- for (const [target, pt] of checks) {
1691
- const t = refineParam(target, pt[0], pt[1]);
1692
- if (t !== null) {
1693
- const [ex, ey] = evaluateCurve2d$1(target, t);
1694
- if ((ex - pt[0]) ** 2 + (ey - pt[1]) ** 2 < tol * tol * 100) pts.push(pt);
1695
- }
1695
+ /**
1696
+ * The counter-clockwise angular range [start, start + sweep] a circular curve covers,
1697
+ * and whether the curve itself runs counter-clockwise through it.
1698
+ */
1699
+ function arcSpan(c, circ) {
1700
+ const range = basisInterval(c);
1701
+ const own = curveBounds(c);
1702
+ const forward = basisParam(c, own.last) >= basisParam(c, own.first);
1703
+ return {
1704
+ start: circ.sense ? range.first : -range.last,
1705
+ sweep: Math.min(range.last - range.first, 2 * Math.PI),
1706
+ ccw: circ.sense === forward
1707
+ };
1708
+ }
1709
+ /** The arc of `circ` from angle `from` counter-clockwise to `to`, traversed as `ccw` says. */
1710
+ function arcBetween(circ, from, to, ccw) {
1711
+ const basis = makeCircle2d$1(circ.cx, circ.cy, circ.radius, ccw);
1712
+ return ccw ? {
1713
+ __bk2d: "trimmed",
1714
+ basis,
1715
+ tStart: from,
1716
+ tEnd: to
1717
+ } : {
1718
+ __bk2d: "trimmed",
1719
+ basis,
1720
+ tStart: -to,
1721
+ tEnd: -from
1722
+ };
1723
+ }
1724
+ /**
1725
+ * Overlap of two arcs on the same circle: the shared stretches as segments oriented
1726
+ * along c1, and the places where the arcs only touch end to end as points.
1727
+ */
1728
+ function intersectCoincidentArcs(c1, circ1, c2, circ2, tol) {
1729
+ const turn = 2 * Math.PI;
1730
+ const a = arcSpan(c1, circ1);
1731
+ const b = arcSpan(c2, circ2);
1732
+ const angleTol = tol / circ1.radius;
1733
+ const isFull = (sweep) => turn - sweep <= angleTol;
1734
+ const d = ((b.start - a.start) % turn + turn) % turn;
1735
+ let windows;
1736
+ if (isFull(b.sweep)) windows = [[0, a.sweep]];
1737
+ else if (isFull(a.sweep)) windows = [[d, d + b.sweep]];
1738
+ else windows = [[Math.max(0, d), Math.min(a.sweep, d + b.sweep)], [Math.max(0, d - turn), Math.min(a.sweep, d - turn + b.sweep)]];
1739
+ const points = [];
1740
+ const segments = [];
1741
+ for (const [u, v] of windows) if (v - u > angleTol) segments.push(arcBetween(circ1, a.start + u, a.start + v, a.ccw));
1742
+ else if (v - u > -angleTol) {
1743
+ const angle = a.start + (u + v) / 2;
1744
+ points.push([circ1.cx + circ1.radius * Math.cos(angle), circ1.cy + circ1.radius * Math.sin(angle)]);
1696
1745
  }
1697
- const deduped = [];
1698
- for (const p of pts) if (!deduped.some(([ddx, ddy]) => (ddx - p[0]) ** 2 + (ddy - p[1]) ** 2 < tol * tol * 100)) deduped.push(p);
1699
- return deduped;
1746
+ return {
1747
+ points,
1748
+ segments
1749
+ };
1700
1750
  }
1701
1751
  function intersectCircleCircle(c1, circ1, c2, circ2, tol) {
1702
1752
  const dx = circ2.cx - circ1.cx;
1703
1753
  const dy = circ2.cy - circ1.cy;
1704
1754
  const d = Math.sqrt(dx * dx + dy * dy);
1755
+ if (d <= tol) {
1756
+ if (Math.abs(circ1.radius - circ2.radius) > tol) return {
1757
+ points: [],
1758
+ segments: []
1759
+ };
1760
+ return intersectCoincidentArcs(c1, circ1, c2, circ2, tol);
1761
+ }
1762
+ return {
1763
+ points: intersectCrossingCircles(c1, circ1, c2, circ2, tol, d),
1764
+ segments: []
1765
+ };
1766
+ }
1767
+ function intersectCrossingCircles(c1, circ1, c2, circ2, tol, d) {
1768
+ const dx = circ2.cx - circ1.cx;
1769
+ const dy = circ2.cy - circ1.cy;
1705
1770
  if (d > circ1.radius + circ2.radius + tol) return [];
1706
1771
  if (d < Math.abs(circ1.radius - circ2.radius) - tol) return [];
1707
- if (d < 1e-14) {
1708
- if (Math.abs(circ1.radius - circ2.radius) > tol) return [];
1709
- return intersectConcentricArcs(c1, c2, tol);
1710
- }
1711
1772
  const a = (circ1.radius * circ1.radius - circ2.radius * circ2.radius + d * d) / (2 * d);
1712
1773
  const h2 = circ1.radius * circ1.radius - a * a;
1713
1774
  const h = Math.sqrt(Math.max(0, h2));
@@ -1541,10 +1541,7 @@ function intersectCurves2dFn(c1, c2, tolerance) {
1541
1541
  points: intersectLineCircle(c2, b2, c1, b1, tolerance),
1542
1542
  segments: []
1543
1543
  };
1544
- if (b1.__bk2d === "circle" && b2.__bk2d === "circle") return {
1545
- points: intersectCircleCircle(c1, b1, c2, b2, tolerance),
1546
- segments: []
1547
- };
1544
+ if (b1.__bk2d === "circle" && b2.__bk2d === "circle") return intersectCircleCircle(c1, b1, c2, b2, tolerance);
1548
1545
  return numericalIntersect(c1, c2, tolerance, c1 === c2);
1549
1546
  }
1550
1547
  /** Unwrap trimmed wrappers to get the basis curve type. */
@@ -1553,9 +1550,32 @@ function unwrapCurve(c) {
1553
1550
  while (cur.__bk2d === "trimmed") cur = cur.basis;
1554
1551
  return cur;
1555
1552
  }
1556
- /** Check if parameter t is within the curve's domain. */
1553
+ /**
1554
+ * The interval a curve covers on its innermost basis's parameter. A trimmed wrapper's own
1555
+ * parameter runs 0..1, but the analytic solvers work on the unwrapped basis, so their
1556
+ * parameters must be bounded by this interval rather than by `curveBounds(c)`.
1557
+ */
1558
+ function basisInterval(c) {
1559
+ if (c.__bk2d !== "trimmed") return curveBounds(c);
1560
+ const a = basisParam(c.basis, c.tStart);
1561
+ const b = basisParam(c.basis, c.tEnd);
1562
+ return {
1563
+ first: Math.min(a, b),
1564
+ last: Math.max(a, b)
1565
+ };
1566
+ }
1567
+ function basisParam(c, t) {
1568
+ let cur = c;
1569
+ let s = t;
1570
+ while (cur.__bk2d === "trimmed") {
1571
+ s = cur.tStart + s * (cur.tEnd - cur.tStart);
1572
+ cur = cur.basis;
1573
+ }
1574
+ return s;
1575
+ }
1576
+ /** Check if basis parameter t lies within the part of the basis that c covers. */
1557
1577
  function inDomain(c, t, tol) {
1558
- const b = curveBounds(c);
1578
+ const b = basisInterval(c);
1559
1579
  return t >= b.first - tol && t <= b.last + tol;
1560
1580
  }
1561
1581
  /** Find the parameter on curve c closest to point (px, py), searching near tGuess. */
@@ -1631,7 +1651,7 @@ function intersectLineLine(c1, l1, c2, l2, tol) {
1631
1651
  points: [],
1632
1652
  segments: []
1633
1653
  };
1634
- const b1 = curveBounds(c1);
1654
+ const b1 = basisInterval(c1);
1635
1655
  const b2 = curveBounds(c2);
1636
1656
  const p2s = evaluateCurve2d$1(c2, b2.first);
1637
1657
  const p2e = evaluateCurve2d$1(c2, b2.last);
@@ -1672,42 +1692,83 @@ function intersectLineCircle(cLine, line, cCirc, circ, tol) {
1672
1692
  }
1673
1693
  return results;
1674
1694
  }
1675
- function intersectConcentricArcs(c1, c2, tol) {
1676
- const b1 = curveBounds(c1);
1677
- const b2 = curveBounds(c2);
1678
- const isFullCircle1 = Math.abs(b1.last - b1.first - 2 * Math.PI) < 1e-10;
1679
- const isFullCircle2 = Math.abs(b2.last - b2.first - 2 * Math.PI) < 1e-10;
1680
- if (isFullCircle1 && isFullCircle2) return [];
1681
- if (isFullCircle1) return [evaluateCurve2d$1(c2, b2.first), evaluateCurve2d$1(c2, b2.last)];
1682
- if (isFullCircle2) return [evaluateCurve2d$1(c1, b1.first), evaluateCurve2d$1(c1, b1.last)];
1683
- const pts = [];
1684
- const checks = [
1685
- [c2, evaluateCurve2d$1(c1, b1.first)],
1686
- [c2, evaluateCurve2d$1(c1, b1.last)],
1687
- [c1, evaluateCurve2d$1(c2, b2.first)],
1688
- [c1, evaluateCurve2d$1(c2, b2.last)]
1689
- ];
1690
- for (const [target, pt] of checks) {
1691
- const t = refineParam(target, pt[0], pt[1]);
1692
- if (t !== null) {
1693
- const [ex, ey] = evaluateCurve2d$1(target, t);
1694
- if ((ex - pt[0]) ** 2 + (ey - pt[1]) ** 2 < tol * tol * 100) pts.push(pt);
1695
- }
1695
+ /**
1696
+ * The counter-clockwise angular range [start, start + sweep] a circular curve covers,
1697
+ * and whether the curve itself runs counter-clockwise through it.
1698
+ */
1699
+ function arcSpan(c, circ) {
1700
+ const range = basisInterval(c);
1701
+ const own = curveBounds(c);
1702
+ const forward = basisParam(c, own.last) >= basisParam(c, own.first);
1703
+ return {
1704
+ start: circ.sense ? range.first : -range.last,
1705
+ sweep: Math.min(range.last - range.first, 2 * Math.PI),
1706
+ ccw: circ.sense === forward
1707
+ };
1708
+ }
1709
+ /** The arc of `circ` from angle `from` counter-clockwise to `to`, traversed as `ccw` says. */
1710
+ function arcBetween(circ, from, to, ccw) {
1711
+ const basis = makeCircle2d$1(circ.cx, circ.cy, circ.radius, ccw);
1712
+ return ccw ? {
1713
+ __bk2d: "trimmed",
1714
+ basis,
1715
+ tStart: from,
1716
+ tEnd: to
1717
+ } : {
1718
+ __bk2d: "trimmed",
1719
+ basis,
1720
+ tStart: -to,
1721
+ tEnd: -from
1722
+ };
1723
+ }
1724
+ /**
1725
+ * Overlap of two arcs on the same circle: the shared stretches as segments oriented
1726
+ * along c1, and the places where the arcs only touch end to end as points.
1727
+ */
1728
+ function intersectCoincidentArcs(c1, circ1, c2, circ2, tol) {
1729
+ const turn = 2 * Math.PI;
1730
+ const a = arcSpan(c1, circ1);
1731
+ const b = arcSpan(c2, circ2);
1732
+ const angleTol = tol / circ1.radius;
1733
+ const isFull = (sweep) => turn - sweep <= angleTol;
1734
+ const d = ((b.start - a.start) % turn + turn) % turn;
1735
+ let windows;
1736
+ if (isFull(b.sweep)) windows = [[0, a.sweep]];
1737
+ else if (isFull(a.sweep)) windows = [[d, d + b.sweep]];
1738
+ else windows = [[Math.max(0, d), Math.min(a.sweep, d + b.sweep)], [Math.max(0, d - turn), Math.min(a.sweep, d - turn + b.sweep)]];
1739
+ const points = [];
1740
+ const segments = [];
1741
+ for (const [u, v] of windows) if (v - u > angleTol) segments.push(arcBetween(circ1, a.start + u, a.start + v, a.ccw));
1742
+ else if (v - u > -angleTol) {
1743
+ const angle = a.start + (u + v) / 2;
1744
+ points.push([circ1.cx + circ1.radius * Math.cos(angle), circ1.cy + circ1.radius * Math.sin(angle)]);
1696
1745
  }
1697
- const deduped = [];
1698
- for (const p of pts) if (!deduped.some(([ddx, ddy]) => (ddx - p[0]) ** 2 + (ddy - p[1]) ** 2 < tol * tol * 100)) deduped.push(p);
1699
- return deduped;
1746
+ return {
1747
+ points,
1748
+ segments
1749
+ };
1700
1750
  }
1701
1751
  function intersectCircleCircle(c1, circ1, c2, circ2, tol) {
1702
1752
  const dx = circ2.cx - circ1.cx;
1703
1753
  const dy = circ2.cy - circ1.cy;
1704
1754
  const d = Math.sqrt(dx * dx + dy * dy);
1755
+ if (d <= tol) {
1756
+ if (Math.abs(circ1.radius - circ2.radius) > tol) return {
1757
+ points: [],
1758
+ segments: []
1759
+ };
1760
+ return intersectCoincidentArcs(c1, circ1, c2, circ2, tol);
1761
+ }
1762
+ return {
1763
+ points: intersectCrossingCircles(c1, circ1, c2, circ2, tol, d),
1764
+ segments: []
1765
+ };
1766
+ }
1767
+ function intersectCrossingCircles(c1, circ1, c2, circ2, tol, d) {
1768
+ const dx = circ2.cx - circ1.cx;
1769
+ const dy = circ2.cy - circ1.cy;
1705
1770
  if (d > circ1.radius + circ2.radius + tol) return [];
1706
1771
  if (d < Math.abs(circ1.radius - circ2.radius) - tol) return [];
1707
- if (d < 1e-14) {
1708
- if (Math.abs(circ1.radius - circ2.radius) > tol) return [];
1709
- return intersectConcentricArcs(c1, c2, tol);
1710
- }
1711
1772
  const a = (circ1.radius * circ1.radius - circ2.radius * circ2.radius + d * d) / (2 * d);
1712
1773
  const h2 = circ1.radius * circ1.radius - a * a;
1713
1774
  const h = Math.sqrt(Math.max(0, h2));
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_threadFns = require("./threadFns-CzXEnnmo.cjs");
3
- const require_loftFns = require("./loftFns-D5AvfCGG.cjs");
2
+ const require_threadFns = require("./threadFns-1H60LrFX.cjs");
3
+ const require_loftFns = require("./loftFns-DGV1z2NJ.cjs");
4
4
  exports.addChild = require_threadFns.addChild;
5
5
  exports.addJoint = require_threadFns.addJoint;
6
6
  exports.addStep = require_threadFns.addStep;
@@ -1,3 +1,3 @@
1
- import { A as setJointValue, B as walkAssembly, C as cylindricalJoint, D as planarJoint, E as mechanismDOF, F as countNodes, H as circularPattern, I as createAssemblyNode, L as findNode, M as sphericalJoint, N as addChild, O as prismaticJoint, P as collectShapes, R as removeChild, S as addJoint, T as jointTransform, U as gridPattern, V as exportAssemblySTEP, W as linearPattern, Y as createAssembly, _ as exportURDF, 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, 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 updateNode } from "./threadFns-DESH7lcs.js";
2
- import { c as twistExtrude, o as supportExtrude, r as complexExtrude, s as sweep } from "./loftFns-D5NJpHLZ.js";
1
+ import { A as setJointValue, B as walkAssembly, C as cylindricalJoint, D as planarJoint, E as mechanismDOF, F as countNodes, H as circularPattern, I as createAssemblyNode, L as findNode, M as sphericalJoint, N as addChild, O as prismaticJoint, P as collectShapes, R as removeChild, S as addJoint, T as jointTransform, U as gridPattern, V as exportAssemblySTEP, W as linearPattern, Y as createAssembly, _ as exportURDF, 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, 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 updateNode } from "./threadFns-CHdY-4Cz.js";
2
+ import { c as twistExtrude, o as supportExtrude, r as complexExtrude, s as sweep } from "./loftFns-DQ7Z29n3.js";
3
3
  export { addChild, addJoint, addStep, circularPattern, collectShapes, complexExtrude, countNodes, createAssembly, createAssemblyNode, createHistory, createRegistry, cylindricalJoint, exportAssemblySTEP, exportURDF, findNode, findStep, forwardKinematics, getShape as getHistoryShape, gridPattern, importURDF, inverseKinematics, jointTrajectory, jointTransform, jointsFromDH, linearPattern, mechanismDOF, modifyStep, planarJoint, prismaticJoint, registerOperation, registerShape, removeChild, replayFrom, replayHistory, revoluteJoint, setJointValue, setJointValues, sphericalJoint, stepCount, stepsFrom, supportExtrude, sweep, thread, twistExtrude, undoLast, updateNode, walkAssembly };
@@ -1,5 +1,5 @@
1
- import { q as getKernel } from "./shapeTypes-DwvQUp9M.js";
2
- import { C as subShapeHashes, c as getFaces, l as getOrCreateCache, r as getCacheEntry } from "./topologyQueryFns-LXV1nTaS.js";
1
+ import { q as getKernel } from "./shapeTypes-BNGu103j.js";
2
+ import { C as subShapeHashes, c as getFaces, l as getOrCreateCache, r as getCacheEntry } from "./topologyQueryFns-CltEv7Pi.js";
3
3
  import { n as HASH_CODE_MAX } from "./constants-iraOnb2p.js";
4
4
  // src/topology/metadata/originTrackingFns.ts
5
5
  /**
@@ -1,5 +1,5 @@
1
- const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
2
- const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-MUEH4XuH.cjs");
2
+ const require_topologyQueryFns = require("./topologyQueryFns-C_fXO6xL.cjs");
3
3
  const require_constants = require("./constants-oee0S_x6.cjs");
4
4
  // src/topology/metadata/originTrackingFns.ts
5
5
  /**
@@ -1,10 +1,10 @@
1
- import { E as GeometryCleanupError, G as _usingCtx, d as createSolid, n as castResultShape, q as getKernel } from "./shapeTypes-DwvQUp9M.js";
1
+ import { E as GeometryCleanupError, G as _usingCtx, d as createSolid, n as castResultShape, q as getKernel } from "./shapeTypes-BNGu103j.js";
2
2
  import { E as ok, d as validationError, g as err, m as andThen, t as BrepErrorCode } from "./errors-BTccWbtE.js";
3
- import { n as isClosedWire } from "./validityTypes-DM-Iwe8N.js";
3
+ import { n as isClosedWire } from "./validityTypes-GanLrmvY.js";
4
4
  import { n as HASH_CODE_MAX, t as DEG2RAD } from "./constants-iraOnb2p.js";
5
5
  import { d as vecNormalize, h as vecScale } from "./vecOps-S-m9H_fe.js";
6
- import { C as propagateAllMetadata, S as hasAnyMetadata, T as propagateMetadataThroughRelocation, a as makeOffset, c as makeTorus, i as makeEllipsoid, l as makeVertex, n as makeCone, o as makeSolid, r as makeCylinder, s as makeSphere, t as makeCompound, u as weldShellsAndFaces, w as propagateMetadataByHash, x as collectInputFaceHashes } from "./solidBuilders-DT1gpVWM.js";
7
- import { _ as makeThreePointArc, a as makeNonPlanarFace, c as makeBSplineApproximation, d as makeCircle, f as makeEllipse, g as makeTangentArc, h as makeLine, i as makeNewFaceWithinFace, m as makeHelix, o as makePolygon, p as makeEllipseArc, r as makeFace, s as assembleWire, t as addHolesInFace, u as makeBezierCurve } from "./surfaceBuilders-CPLe0bbk.js";
6
+ import { C as propagateAllMetadata, S as hasAnyMetadata, T as propagateMetadataThroughRelocation, a as makeOffset, c as makeTorus, i as makeEllipsoid, l as makeVertex, n as makeCone, o as makeSolid, r as makeCylinder, s as makeSphere, t as makeCompound, u as weldShellsAndFaces, w as propagateMetadataByHash, x as collectInputFaceHashes } from "./solidBuilders-Bmr59cGp.js";
7
+ import { _ as makeThreePointArc, a as makeNonPlanarFace, c as makeBSplineApproximation, d as makeCircle, f as makeEllipse, g as makeTangentArc, h as makeLine, i as makeNewFaceWithinFace, m as makeHelix, o as makePolygon, p as makeEllipseArc, r as makeFace, s as assembleWire, t as addHolesInFace, u as makeBezierCurve } from "./surfaceBuilders-DI376ai0.js";
8
8
  // src/topology/transformFns.ts
9
9
  /**
10
10
  * Immutable shape transforms — translate, rotate, scale, mirror, applyMatrix.
@@ -1,10 +1,10 @@
1
- const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-MUEH4XuH.cjs");
2
2
  const require_errors = require("./errors-O_blYTWT.cjs");
3
- const require_validityTypes = require("./validityTypes-C6rROGTP.cjs");
3
+ const require_validityTypes = require("./validityTypes-CGX2ES81.cjs");
4
4
  const require_constants = require("./constants-oee0S_x6.cjs");
5
5
  const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
6
- const require_solidBuilders = require("./solidBuilders-iS5DDwg8.cjs");
7
- const require_surfaceBuilders = require("./surfaceBuilders-BvwSgD3C.cjs");
6
+ const require_solidBuilders = require("./solidBuilders-DdG4NPHM.cjs");
7
+ const require_surfaceBuilders = require("./surfaceBuilders-DOmDVuMs.cjs");
8
8
  // src/topology/transformFns.ts
9
9
  /**
10
10
  * Immutable shape transforms — translate, rotate, scale, mirror, applyMatrix.
@@ -1,9 +1,9 @@
1
- const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-MUEH4XuH.cjs");
2
2
  const require_bug = require("./bug-CBcpIPuf.cjs");
3
3
  const require_errors = require("./errors-O_blYTWT.cjs");
4
- const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
4
+ const require_topologyQueryFns = require("./topologyQueryFns-C_fXO6xL.cjs");
5
5
  const require_vecOps = require("./vecOps-CrGEPPQM.cjs");
6
- const require_measureFns = require("./measureFns-CZHNWkiA.cjs");
6
+ const require_measureFns = require("./measureFns-BdSjw5fr.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
@@ -1,9 +1,9 @@
1
- import { G as _usingCtx, n as castResultShape, q as getKernel } from "./shapeTypes-DwvQUp9M.js";
1
+ import { G as _usingCtx, n as castResultShape, q as getKernel } from "./shapeTypes-BNGu103j.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-LXV1nTaS.js";
4
+ import { E as kernelCallRaw, S as subShapeCount } from "./topologyQueryFns-CltEv7Pi.js";
5
5
  import { r as vecCross } from "./vecOps-S-m9H_fe.js";
6
- import { f as getCachedMeasurement, p as setCachedMeasurement } from "./measureFns-mxBdPiWa.js";
6
+ import { f as getCachedMeasurement, p as setCachedMeasurement } from "./measureFns-BrdCH4cH.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
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_cameraFns = require("./cameraFns-RqraCXIc.cjs");
2
+ const require_cameraFns = require("./cameraFns-BAtzhCYM.cjs");
3
3
  exports.PROJECTION_PLANES = require_cameraFns.PROJECTION_PLANES;
4
4
  exports.cameraFromPlane = require_cameraFns.cameraFromPlane;
5
5
  exports.cameraLookAt = require_cameraFns.cameraLookAt;
@@ -1 +1 @@
1
- export { o as PROJECTION_PLANES, t as cameraFromPlane, n as cameraLookAt, r as createCamera, s as isProjectionPlane, a as makeProjectedEdges, i as projectEdges } from "./cameraFns-CrClIkmV.js";
1
+ export { o as PROJECTION_PLANES, t as cameraFromPlane, n as cameraLookAt, r as createCamera, s as isProjectionPlane, a as makeProjectedEdges, i as projectEdges } from "./cameraFns-BVWyAscu.js";
package/dist/query.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_helpers = require("./helpers-DKEVm6Hu.cjs");
3
- const require_cornerFinder = require("./cornerFinder-CdOe1Wrb.cjs");
2
+ const require_helpers = require("./helpers-BdGGaLhF.cjs");
3
+ const require_cornerFinder = require("./cornerFinder-e4Wc7_yp.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-D2hANLRu.js";
2
- import { t as cornerFinder } from "./cornerFinder-BZuQkRp2.js";
1
+ import { n as edgeFinder, r as faceFinder, t as getSingleFace } from "./helpers-DpGcM2qZ.js";
2
+ import { t as cornerFinder } from "./cornerFinder-Dv_2rmaY.js";
3
3
  export { cornerFinder, edgeFinder, faceFinder, getSingleFace };
@@ -1,10 +1,10 @@
1
- const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
2
- const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
3
- const require_faceFns = require("./faceFns-B7MiDYj1.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-MUEH4XuH.cjs");
2
+ const require_topologyQueryFns = require("./topologyQueryFns-C_fXO6xL.cjs");
3
+ const require_faceFns = require("./faceFns-C-2ttg8X.cjs");
4
4
  const require_faceRoleFns = require("./faceRoleFns-Db5bYj4Q.cjs");
5
- const require_shapeFns = require("./shapeFns-C0w8vvfb.cjs");
6
- const require_measureFns = require("./measureFns-CZHNWkiA.cjs");
7
- const require_adjacencyFns = require("./adjacencyFns-BFJfaUwX.cjs");
5
+ const require_shapeFns = require("./shapeFns-SgIrOjN4.cjs");
6
+ const require_measureFns = require("./measureFns-BdSjw5fr.cjs");
7
+ const require_adjacencyFns = require("./adjacencyFns-mMmTBUBY.cjs");
8
8
  // src/topology/shapeRef/scoring.ts
9
9
  /**
10
10
  * Default face scorer combining surface type, normal alignment, centroid proximity,
@@ -1,10 +1,10 @@
1
- import { g as disposeTransientSubShape, o as castShapeWithKnownType, q as getKernel } from "./shapeTypes-DwvQUp9M.js";
2
- import { c as getFaces, w as vertexPosition } from "./topologyQueryFns-LXV1nTaS.js";
3
- import { i as faceGeomType, l as normalAt, r as faceCenter } from "./faceFns-iVPbTxki.js";
1
+ import { g as disposeTransientSubShape, o as castShapeWithKnownType, q as getKernel } from "./shapeTypes-BNGu103j.js";
2
+ import { c as getFaces, w as vertexPosition } from "./topologyQueryFns-CltEv7Pi.js";
3
+ import { i as faceGeomType, l as normalAt, r as faceCenter } from "./faceFns-Q87HCJrp.js";
4
4
  import { t as getFaceRoles } from "./faceRoleFns-BPxzQF-n.js";
5
- import { n as getHashCode } from "./shapeFns-CgqKICF_.js";
6
- import { n as measureArea, s as measureLength } from "./measureFns-mxBdPiWa.js";
7
- import { a as facesOfVertex, c as verticesOfFace, i as facesOfEdge, o as sharedEdges, s as verticesOfEdge, t as adjacentFaceHashes } from "./adjacencyFns--KmBIKYJ.js";
5
+ import { n as getHashCode } from "./shapeFns-CZ6VF1yd.js";
6
+ import { n as measureArea, s as measureLength } from "./measureFns-BrdCH4cH.js";
7
+ import { a as facesOfVertex, c as verticesOfFace, i as facesOfEdge, o as sharedEdges, s as verticesOfEdge, t as adjacentFaceHashes } from "./adjacencyFns-hMihivxC.js";
8
8
  // src/topology/shapeRef/scoring.ts
9
9
  /**
10
10
  * Default face scorer combining surface type, normal alignment, centroid proximity,
@@ -1,6 +1,6 @@
1
- import { q as getKernel } from "./shapeTypes-DwvQUp9M.js";
1
+ import { q as getKernel } from "./shapeTypes-BNGu103j.js";
2
2
  import { t as BrepErrorCode } from "./errors-BTccWbtE.js";
3
- import { E as kernelCallRaw, T as kernelCall } from "./topologyQueryFns-LXV1nTaS.js";
3
+ import { E as kernelCallRaw, T as kernelCall } from "./topologyQueryFns-CltEv7Pi.js";
4
4
  import { n as HASH_CODE_MAX } from "./constants-iraOnb2p.js";
5
5
  // src/topology/shapeFns.ts
6
6
  /**
@@ -1,6 +1,6 @@
1
- const require_shapeTypes = require("./shapeTypes-Dc7j-MYg.cjs");
1
+ const require_shapeTypes = require("./shapeTypes-MUEH4XuH.cjs");
2
2
  const require_errors = require("./errors-O_blYTWT.cjs");
3
- const require_topologyQueryFns = require("./topologyQueryFns-5Frx8Y-0.cjs");
3
+ const require_topologyQueryFns = require("./topologyQueryFns-C_fXO6xL.cjs");
4
4
  const require_constants = require("./constants-oee0S_x6.cjs");
5
5
  // src/topology/shapeFns.ts
6
6
  /**
package/dist/shapeRef.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_refResolveFns = require("./refResolveFns-BAs4p9z7.cjs");
2
+ const require_refResolveFns = require("./refResolveFns-DNX0bCrP.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-DHx1Y3GG.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-kJg2iCad.js";
@@ -1,4 +1,4 @@
1
- import { A as UnsupportedKernelOperationError, C as reverseCurve2d$2, D as tangentCurve2d, E as serializeCurve2d$2, N as EXACT_BREP_CAPABILITIES, O as translateCurve2d$2, P as OCCT_CAPABILITIES, S as offsetCurve2d$2, T as scaleCurve2d$2, _ as makeCircle2d$2, a as buildAsciiSTL, b as mirrorAcrossAxis, c as createBBox2d, d as deserializeCurve2d$2, f as evaluateCurve2d$2, g as makeBezier2d$2, h as makeArc2dThreePoints, i as DEFAULT_STL_TOLERANCE, j as isUnsupportedKernelOperationError, k as quickHull, l as curveBounds, m as makeArc2dTangent, o as buildBinarySTL, p as intersectCurves2dFn, r as DEFAULT_STL_ANGULAR_TOLERANCE, s as addCurveToBBox, t as OcctWasmAdapter, u as curveTypeName, v as makeEllipse2d$2, w as rotateCurve2d$2, x as mirrorAtPoint, y as makeLine2d$2 } from "./occtWasmAdapter-B9d0Q0Vl.js";
1
+ import { A as UnsupportedKernelOperationError, C as reverseCurve2d$2, D as tangentCurve2d, E as serializeCurve2d$2, N as EXACT_BREP_CAPABILITIES, O as translateCurve2d$2, P as OCCT_CAPABILITIES, S as offsetCurve2d$2, T as scaleCurve2d$2, _ as makeCircle2d$2, a as buildAsciiSTL, b as mirrorAcrossAxis, c as createBBox2d, d as deserializeCurve2d$2, f as evaluateCurve2d$2, g as makeBezier2d$2, h as makeArc2dThreePoints, i as DEFAULT_STL_TOLERANCE, j as isUnsupportedKernelOperationError, k as quickHull, l as curveBounds, m as makeArc2dTangent, o as buildBinarySTL, p as intersectCurves2dFn, r as DEFAULT_STL_ANGULAR_TOLERANCE, s as addCurveToBBox, t as OcctWasmAdapter, u as curveTypeName, v as makeEllipse2d$2, w as rotateCurve2d$2, x as mirrorAtPoint, y as makeLine2d$2 } from "./occtWasmAdapter-DA7oMgcQ.js";
2
2
  import { i as wasmIndex, r as vec3At } from "./bug-ClMTAJhe.js";
3
3
  // src/kernel/quality.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- const require_occtWasmAdapter = require("./occtWasmAdapter-DVxLkjlJ.cjs");
1
+ const require_occtWasmAdapter = require("./occtWasmAdapter-D3qerQTq.cjs");
2
2
  const require_bug = require("./bug-CBcpIPuf.cjs");
3
3
  // src/kernel/quality.ts
4
4
  /**
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_blueprintSketcher = require("./blueprintSketcher-Di376t-0.cjs");
3
- const require_drawFns = require("./drawFns-71cOhWD-.cjs");
4
- const require_textBlueprints = require("./textBlueprints-CNPCPJix.cjs");
2
+ const require_blueprintSketcher = require("./blueprintSketcher-BG--DxWB.cjs");
3
+ const require_drawFns = require("./drawFns-d-RvC6u6.cjs");
4
+ const require_textBlueprints = require("./textBlueprints-B7Vhr0xu.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-D_Faf0GO.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-DxDwJ5zZ.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-BU0Rhk54.js";
1
+ import { n as BaseSketcher2d, t as BlueprintSketcher } from "./blueprintSketcher-C1WCI6E0.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-Cl1i8B_B.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-CE0oxB43.js";
4
4
  // src/sketching.ts
5
5
  /**
6
6
  * brepjs/sketching — Sketcher, Drawing, and sketch-to-shape operations.
@@ -1,14 +1,14 @@
1
- import { C as isSolid, D as getShapeKind, E as GeometryCleanupError, G as _usingCtx, S as isShell, d as createSolid, f as createVertex, h as disposeResultShape, n as castResultShape, q as getKernel, s as createCompound, x as isShape3D } from "./shapeTypes-DwvQUp9M.js";
1
+ import { C as isSolid, D as getShapeKind, E as GeometryCleanupError, G as _usingCtx, S as isShell, d as createSolid, f as createVertex, h as disposeResultShape, n as castResultShape, q as getKernel, s as createCompound, x as isShape3D } from "./shapeTypes-BNGu103j.js";
2
2
  import { E as ok, P as unwrap, b as isErr, d as validationError, g as err, i as kernelError, l as typeCastError, m as andThen, t as BrepErrorCode } from "./errors-BTccWbtE.js";
3
- import { C as subShapeHashes, c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-LXV1nTaS.js";
3
+ import { C as subShapeHashes, c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-CltEv7Pi.js";
4
4
  import { n as HASH_CODE_MAX } from "./constants-iraOnb2p.js";
5
5
  import { a as vecDot, g as vecSub, h as vecScale, t as vecAdd } from "./vecOps-S-m9H_fe.js";
6
6
  import { o as resolvePlane } from "./planeOps-D3yDuMux.js";
7
- import { _ as cast, y as downcast } from "./faceFns-iVPbTxki.js";
8
- import { n as propagateOriginsByHash, r as propagateOriginsFromEvolution, t as getFaceOrigins } from "./originTrackingFns-CBnyKLm7.js";
7
+ import { _ as cast, y as downcast } from "./faceFns-Q87HCJrp.js";
8
+ import { n as propagateOriginsByHash, r as propagateOriginsFromEvolution, t as getFaceOrigins } from "./originTrackingFns-c2qgRZ_9.js";
9
9
  import { n as hasFaceRoles, r as propagateFaceRolesFromEvolution } from "./faceRoleFns-BPxzQF-n.js";
10
10
  import { n as getAtOrThrow, t as firstOrThrow } from "./arrayAccess-BpgouNir.js";
11
- import { r as makeFace } from "./surfaceBuilders-CPLe0bbk.js";
11
+ import { r as makeFace } from "./surfaceBuilders-DI376ai0.js";
12
12
  // src/topology/metadata/faceTagFns.ts
13
13
  var shapeTagStore = /* @__PURE__ */ new WeakMap();
14
14
  var tagMetadataStore = /* @__PURE__ */ new WeakMap();