brepjs 12.8.2 → 12.9.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 (225) hide show
  1. package/dist/2d/lib/svgPath.d.ts.map +1 -1
  2. package/dist/2d/lib/vectorOperations.d.ts +4 -1
  3. package/dist/2d/lib/vectorOperations.d.ts.map +1 -1
  4. package/dist/2d.cjs +2 -2
  5. package/dist/2d.js +5 -5
  6. package/dist/{Blueprint-DbVaf6k7.js → Blueprint-1HGbugaC.js} +33 -63
  7. package/dist/{Blueprint-CQ28WJhz.cjs → Blueprint-CUyXM6CV.cjs} +15 -45
  8. package/dist/{boolean2D-0blbVtJ8.cjs → boolean2D-9OnbotKT.cjs} +9 -9
  9. package/dist/{boolean2D-y3E92F0u.js → boolean2D-CR4efa35.js} +11 -11
  10. package/dist/{booleanFns-gmsX3Cv2.cjs → booleanFns-BBd2oTvv.cjs} +43 -40
  11. package/dist/{booleanFns-BCTjYZAg.js → booleanFns-Br2KdGJq.js} +53 -50
  12. package/dist/brepjs.cjs +379 -284
  13. package/dist/brepjs.js +1437 -1341
  14. package/dist/core/definitionMaps.d.ts +2 -7
  15. package/dist/core/definitionMaps.d.ts.map +1 -1
  16. package/dist/core/dimensionTypes.d.ts +52 -0
  17. package/dist/core/dimensionTypes.d.ts.map +1 -0
  18. package/dist/core/disposal.d.ts +18 -0
  19. package/dist/core/disposal.d.ts.map +1 -1
  20. package/dist/core/errors.d.ts +1 -8
  21. package/dist/core/errors.d.ts.map +1 -1
  22. package/dist/core/kernelErrorTranslation.d.ts +15 -0
  23. package/dist/core/kernelErrorTranslation.d.ts.map +1 -0
  24. package/dist/core/planeOps.d.ts +14 -0
  25. package/dist/core/planeOps.d.ts.map +1 -1
  26. package/dist/core/result.d.ts +4 -0
  27. package/dist/core/result.d.ts.map +1 -1
  28. package/dist/core/shapeTypes.d.ts +14 -146
  29. package/dist/core/shapeTypes.d.ts.map +1 -1
  30. package/dist/core/typeDiscriminants.d.ts +14 -0
  31. package/dist/core/typeDiscriminants.d.ts.map +1 -0
  32. package/dist/core/validityTypes.d.ts +100 -0
  33. package/dist/core/validityTypes.d.ts.map +1 -0
  34. package/dist/core.cjs +52 -11
  35. package/dist/core.d.ts +1 -1
  36. package/dist/core.d.ts.map +1 -1
  37. package/dist/core.js +118 -75
  38. package/dist/{curveFns-mROFhiuG.js → curveFns-1u0oZ0u0.js} +14 -14
  39. package/dist/{curveFns-BZngcnQ1.cjs → curveFns-BwLvO_Ia.cjs} +2 -2
  40. package/dist/{drawFns-Bwakrq7w.js → drawFns-B0na6sbo.js} +16 -16
  41. package/dist/{drawFns-CjRc1NfQ.cjs → drawFns-CzlEePor.cjs} +18 -18
  42. package/dist/{faceFns-DB1Fc5gy.cjs → faceFns-BAKkZG6D.cjs} +2 -2
  43. package/dist/{faceFns-B8GnxjdY.js → faceFns-DGMp47Os.js} +3 -3
  44. package/dist/{helpers-C8NoT0Wu.cjs → helpers-DVdscQxW.cjs} +73 -8
  45. package/dist/{helpers-X0juxnwj.js → helpers-sJjnIXDA.js} +85 -20
  46. package/dist/index.d.ts +10 -11
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/io.cjs +4 -4
  49. package/dist/io.js +4 -4
  50. package/dist/kernel/brepkit/booleanOps.d.ts +23 -0
  51. package/dist/kernel/brepkit/booleanOps.d.ts.map +1 -0
  52. package/dist/kernel/brepkit/constructionOps.d.ts +51 -0
  53. package/dist/kernel/brepkit/constructionOps.d.ts.map +1 -0
  54. package/dist/kernel/brepkit/evolutionOps.d.ts +31 -0
  55. package/dist/kernel/brepkit/evolutionOps.d.ts.map +1 -0
  56. package/dist/kernel/brepkit/geometryOps.d.ts +56 -0
  57. package/dist/kernel/brepkit/geometryOps.d.ts.map +1 -0
  58. package/dist/kernel/brepkit/helpers.d.ts +84 -0
  59. package/dist/kernel/brepkit/helpers.d.ts.map +1 -0
  60. package/dist/kernel/brepkit/internalOps.d.ts +28 -0
  61. package/dist/kernel/brepkit/internalOps.d.ts.map +1 -0
  62. package/dist/kernel/brepkit/ioOps.d.ts +43 -0
  63. package/dist/kernel/brepkit/ioOps.d.ts.map +1 -0
  64. package/dist/kernel/brepkit/measureOps.d.ts +30 -0
  65. package/dist/kernel/brepkit/measureOps.d.ts.map +1 -0
  66. package/dist/kernel/brepkit/meshOps.d.ts +7 -0
  67. package/dist/kernel/brepkit/meshOps.d.ts.map +1 -0
  68. package/dist/kernel/brepkit/modifierOps.d.ts +15 -0
  69. package/dist/kernel/brepkit/modifierOps.d.ts.map +1 -0
  70. package/dist/kernel/brepkit/repairOps.d.ts +14 -0
  71. package/dist/kernel/brepkit/repairOps.d.ts.map +1 -0
  72. package/dist/kernel/brepkit/sweepOps.d.ts +27 -0
  73. package/dist/kernel/brepkit/sweepOps.d.ts.map +1 -0
  74. package/dist/kernel/brepkit/topologyOps.d.ts +16 -0
  75. package/dist/kernel/brepkit/topologyOps.d.ts.map +1 -0
  76. package/dist/kernel/brepkit/transformOps.d.ts +14 -0
  77. package/dist/kernel/brepkit/transformOps.d.ts.map +1 -0
  78. package/dist/kernel/brepkitAdapter.d.ts +1 -1
  79. package/dist/kernel/brepkitAdapter.d.ts.map +1 -1
  80. package/dist/kernel/brepkitWasmTypes.d.ts +8 -0
  81. package/dist/kernel/brepkitWasmTypes.d.ts.map +1 -1
  82. package/dist/kernel/defaultAdapter.d.ts.map +1 -1
  83. package/dist/kernel/extendedConstructorOps.d.ts +9 -1
  84. package/dist/kernel/extendedConstructorOps.d.ts.map +1 -1
  85. package/dist/kernel/index.d.ts +1 -0
  86. package/dist/kernel/index.d.ts.map +1 -1
  87. package/dist/kernel/interfaces/boolean-ops.d.ts +25 -0
  88. package/dist/kernel/interfaces/boolean-ops.d.ts.map +1 -0
  89. package/dist/kernel/interfaces/construction-ops.d.ts +76 -0
  90. package/dist/kernel/interfaces/construction-ops.d.ts.map +1 -0
  91. package/dist/kernel/interfaces/core.d.ts +45 -0
  92. package/dist/kernel/interfaces/core.d.ts.map +1 -0
  93. package/dist/kernel/interfaces/evolution-ops.d.ts +19 -0
  94. package/dist/kernel/interfaces/evolution-ops.d.ts.map +1 -0
  95. package/dist/kernel/interfaces/geometry-ops.d.ts +77 -0
  96. package/dist/kernel/interfaces/geometry-ops.d.ts.map +1 -0
  97. package/dist/kernel/interfaces/index.d.ts +29 -0
  98. package/dist/kernel/interfaces/index.d.ts.map +1 -0
  99. package/dist/kernel/interfaces/io-ops.d.ts +66 -0
  100. package/dist/kernel/interfaces/io-ops.d.ts.map +1 -0
  101. package/dist/kernel/interfaces/measure-ops.d.ts +35 -0
  102. package/dist/kernel/interfaces/measure-ops.d.ts.map +1 -0
  103. package/dist/kernel/interfaces/mesh-ops.d.ts +21 -0
  104. package/dist/kernel/interfaces/mesh-ops.d.ts.map +1 -0
  105. package/dist/kernel/interfaces/modifier-ops.d.ts +22 -0
  106. package/dist/kernel/interfaces/modifier-ops.d.ts.map +1 -0
  107. package/dist/kernel/interfaces/repair-ops.d.ts +36 -0
  108. package/dist/kernel/interfaces/repair-ops.d.ts.map +1 -0
  109. package/dist/kernel/interfaces/sweep-ops.d.ts +49 -0
  110. package/dist/kernel/interfaces/sweep-ops.d.ts.map +1 -0
  111. package/dist/kernel/interfaces/topology-ops.d.ts +30 -0
  112. package/dist/kernel/interfaces/topology-ops.d.ts.map +1 -0
  113. package/dist/kernel/interfaces/transform-ops.d.ts +20 -0
  114. package/dist/kernel/interfaces/transform-ops.d.ts.map +1 -0
  115. package/dist/kernel/modifierOps.d.ts +2 -2
  116. package/dist/kernel/modifierOps.d.ts.map +1 -1
  117. package/dist/kernel/types.d.ts +2 -446
  118. package/dist/kernel/types.d.ts.map +1 -1
  119. package/dist/{loft-hp3pc1M7.cjs → loft-BNvBZzqe.cjs} +5 -5
  120. package/dist/{loft-Bhw-FMoL.js → loft-D0aCZRaB.js} +7 -7
  121. package/dist/measurement/measureFns.d.ts +2 -2
  122. package/dist/measurement/measureFns.d.ts.map +1 -1
  123. package/dist/{measurement-D8EJ694A.js → measurement-C7o5jE6G.js} +2 -2
  124. package/dist/{measurement-BoNTUBAp.cjs → measurement-DZcaxo1A.cjs} +2 -2
  125. package/dist/measurement.cjs +1 -1
  126. package/dist/measurement.js +1 -1
  127. package/dist/{meshFns-BnV0ZR8w.cjs → meshFns-7dgZgNYK.cjs} +4 -4
  128. package/dist/{meshFns-nQjK38EC.js → meshFns-CtUl9fGY.js} +3 -3
  129. package/dist/operations/compoundOpsFns.d.ts +38 -0
  130. package/dist/operations/compoundOpsFns.d.ts.map +1 -0
  131. package/dist/operations/extrude.d.ts +2 -12
  132. package/dist/operations/extrude.d.ts.map +1 -1
  133. package/dist/operations/extrudeFns.d.ts +2 -93
  134. package/dist/operations/extrudeFns.d.ts.map +1 -1
  135. package/dist/operations/guidedSweepFns.d.ts +3 -22
  136. package/dist/operations/guidedSweepFns.d.ts.map +1 -1
  137. package/dist/operations/loft.d.ts +2 -16
  138. package/dist/operations/loft.d.ts.map +1 -1
  139. package/dist/operations/multiSweepFns.d.ts +3 -29
  140. package/dist/operations/multiSweepFns.d.ts.map +1 -1
  141. package/dist/operations/roofFns.d.ts +2 -2
  142. package/dist/operations/roofFns.d.ts.map +1 -1
  143. package/dist/operations/sweepFns.d.ts +121 -0
  144. package/dist/operations/sweepFns.d.ts.map +1 -0
  145. package/dist/{operations-BfbkK6DU.js → operations-DisJ5F8s.js} +110 -57
  146. package/dist/{operations-CYpmLSC4.cjs → operations-DwZ-RBO1.cjs} +97 -44
  147. package/dist/operations.cjs +2 -2
  148. package/dist/operations.js +14 -14
  149. package/dist/originTrackingFns-NJ1dWoiF.js +137 -0
  150. package/dist/originTrackingFns-dhaCe8Yb.cjs +136 -0
  151. package/dist/query/edgeFinder.d.ts +4 -14
  152. package/dist/query/edgeFinder.d.ts.map +1 -1
  153. package/dist/query/faceFinder.d.ts +4 -14
  154. package/dist/query/faceFinder.d.ts.map +1 -1
  155. package/dist/query/finderCore.d.ts +6 -0
  156. package/dist/query/finderCore.d.ts.map +1 -1
  157. package/dist/query/shapeFinders.d.ts +32 -0
  158. package/dist/query/shapeFinders.d.ts.map +1 -0
  159. package/dist/query/wireFinder.d.ts +4 -9
  160. package/dist/query/wireFinder.d.ts.map +1 -1
  161. package/dist/query.cjs +54 -32
  162. package/dist/query.js +56 -34
  163. package/dist/{result-fAX0OZzI.cjs → result-DJAAj1yb.cjs} +8 -59
  164. package/dist/{result-BaSD1fqR.js → result-DtuwWSUD.js} +38 -89
  165. package/dist/result.cjs +1 -1
  166. package/dist/result.js +22 -22
  167. package/dist/shapeFns-BJbua5kT.js +34 -0
  168. package/dist/shapeFns-w9tWELHX.cjs +33 -0
  169. package/dist/{shapeTypes-CpSaBLDv.js → shapeTypes-CAEAyk8j.js} +233 -172
  170. package/dist/{shapeTypes-7xEam9Ri.cjs → shapeTypes-owrg2MNK.cjs} +421 -360
  171. package/dist/sketching/Sketcher.d.ts.map +1 -1
  172. package/dist/sketching.cjs +2 -2
  173. package/dist/sketching.js +2 -2
  174. package/dist/{solidBuilders-994_MQwB.cjs → solidBuilders-BLQ4I6Ig.cjs} +3 -3
  175. package/dist/{solidBuilders-DmwhTCCd.js → solidBuilders-BS-1220W.js} +3 -3
  176. package/dist/{surfaceBuilders-nQdJ56fe.js → surfaceBuilders-Dj6AjhOv.js} +7 -7
  177. package/dist/{surfaceBuilders-5VA34a3_.cjs → surfaceBuilders-KU_7OD2q.cjs} +3 -3
  178. package/dist/topology/booleanFns.d.ts.map +1 -1
  179. package/dist/topology/compoundOpsFns.d.ts +3 -35
  180. package/dist/topology/compoundOpsFns.d.ts.map +1 -1
  181. package/dist/topology/index.d.ts +0 -1
  182. package/dist/topology/index.d.ts.map +1 -1
  183. package/dist/topology/metadataPropagation.d.ts +30 -0
  184. package/dist/topology/metadataPropagation.d.ts.map +1 -0
  185. package/dist/topology/modifierFns.d.ts.map +1 -1
  186. package/dist/topology/originTrackingFns.d.ts +23 -0
  187. package/dist/topology/originTrackingFns.d.ts.map +1 -0
  188. package/dist/topology/shapeFns.d.ts +6 -120
  189. package/dist/topology/shapeFns.d.ts.map +1 -1
  190. package/dist/topology/topologyQueryFns.d.ts +67 -0
  191. package/dist/topology/topologyQueryFns.d.ts.map +1 -0
  192. package/dist/topology/transformFns.d.ts +49 -0
  193. package/dist/topology/transformFns.d.ts.map +1 -0
  194. package/dist/topology/wrapperFns.d.ts.map +1 -1
  195. package/dist/{topology-ANwCzGL8.cjs → topology-CyPHYYjV.cjs} +205 -20
  196. package/dist/{topology-C7x98OVn.js → topology-D6LeuhI_.js} +235 -50
  197. package/dist/topology.cjs +18 -17
  198. package/dist/topology.js +92 -91
  199. package/dist/topologyQueryFns-De439iBP.js +119 -0
  200. package/dist/topologyQueryFns-fz5kz5e1.cjs +118 -0
  201. package/dist/{types-CWDdqcrq.js → types-CcKqsmd0.js} +2 -2
  202. package/dist/utils/precisionRound.d.ts +4 -0
  203. package/dist/utils/precisionRound.d.ts.map +1 -1
  204. package/dist/utils/vec2d.d.ts +5 -0
  205. package/dist/utils/vec2d.d.ts.map +1 -1
  206. package/dist/{vecOps-ZDdZWbwT.js → vecOps-LTN--A58.js} +15 -15
  207. package/dist/{vectors-D_IiZx0q.cjs → vectors-C8N_QeEX.cjs} +9 -1
  208. package/dist/{vectors-Bx8wkNui.js → vectors-DTREgnVp.js} +15 -7
  209. package/dist/vectors.cjs +1 -1
  210. package/dist/vectors.js +23 -23
  211. package/package.json +3 -3
  212. package/dist/core/geometryHelpers.d.ts +0 -30
  213. package/dist/core/geometryHelpers.d.ts.map +0 -1
  214. package/dist/core/memory.d.ts +0 -6
  215. package/dist/core/memory.d.ts.map +0 -1
  216. package/dist/core/typeErrors.d.ts +0 -17
  217. package/dist/core/typeErrors.d.ts.map +0 -1
  218. package/dist/cornerFinder-Ckz-mPHE.js +0 -59
  219. package/dist/cornerFinder-ZmOyOOsh.cjs +0 -58
  220. package/dist/shapeFns-C2SnNvdH.cjs +0 -468
  221. package/dist/shapeFns-FDuKkrDR.js +0 -469
  222. package/dist/utils/round2.d.ts +0 -3
  223. package/dist/utils/round2.d.ts.map +0 -1
  224. package/dist/utils/round5.d.ts +0 -3
  225. package/dist/utils/round5.d.ts.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs",
3
- "version": "12.8.2",
3
+ "version": "12.9.1",
4
4
  "description": "Web CAD library with pluggable geometry kernel",
5
5
  "keywords": [
6
6
  "cad",
@@ -194,7 +194,7 @@
194
194
  "@types/opentype.js": "1.3.9",
195
195
  "@vitest/coverage-v8": "4.0.18",
196
196
  "brepjs-opencascade": "*",
197
- "brepkit-wasm": "1.1.0",
197
+ "brepkit-wasm": "2.1.0",
198
198
  "eslint": "10.0.3",
199
199
  "husky": "9.1.7",
200
200
  "knip": "5.86.0",
@@ -210,7 +210,7 @@
210
210
  },
211
211
  "peerDependencies": {
212
212
  "brepjs-opencascade": "^0.5.1 || ^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0",
213
- "brepkit-wasm": "^0.10.1 || ^1.0.0"
213
+ "brepkit-wasm": "^0.10.1 || ^1.0.0 || ^2.0.0"
214
214
  },
215
215
  "peerDependenciesMeta": {
216
216
  "brepjs-opencascade": {
@@ -1,30 +0,0 @@
1
- import { Plane, PlaneName, PlaneInput } from './planeTypes.js';
2
- import { PointInput } from './types.js';
3
- import { KernelType } from '../kernel/types.js';
4
- /**
5
- * Create or copy a {@link Plane}.
6
- *
7
- * When called with a `Plane` object, returns a shallow copy.
8
- * When called with a `PlaneName` string (or no arguments), resolves the named
9
- * plane with an optional origin offset.
10
- *
11
- * @param plane - A `Plane` object to copy, or a `PlaneName` string to resolve.
12
- * @param origin - Origin point or scalar offset along the plane normal.
13
- * @default plane `'XY'`
14
- */
15
- declare function makePlane(plane: Plane): Plane;
16
- declare function makePlane(plane?: PlaneName, origin?: PointInput | number): Plane;
17
- export { makePlane };
18
- /**
19
- * Mirror an kernel shape across a plane.
20
- *
21
- * The mirror plane can be specified as a `PlaneName`, a `Plane` object,
22
- * or a direction vector (used as the plane normal). Defaults to the YZ plane.
23
- *
24
- * @param shape - Raw kernel shape to mirror.
25
- * @param inputPlane - Mirror plane specification.
26
- * @param origin - Override origin for the mirror plane.
27
- * @returns A new mirrored kernel shape.
28
- */
29
- export declare function mirror(shape: KernelType, inputPlane?: PlaneInput | PointInput, origin?: PointInput): KernelType;
30
- //# sourceMappingURL=geometryHelpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"geometryHelpers.d.ts","sourceRoot":"","sources":["../../src/core/geometryHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,OAAO,KAAK,EAAQ,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD;;;;;;;;;;GAUG;AACH,iBAAS,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC;AACxC,iBAAS,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAU3E,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,UAAU,EACjB,UAAU,CAAC,EAAE,UAAU,GAAG,UAAU,EACpC,MAAM,CAAC,EAAE,UAAU,GAClB,UAAU,CAgCZ"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Memory management utilities — re-export hub for disposal.ts.
3
- */
4
- export type { Deletable } from './disposal.js';
5
- export { createHandle, createKernelHandle, DisposalScope, withScope, withScopeResult, withScopeResultAsync, isLive, registerForCleanup, unregisterFromCleanup, type ShapeHandle, type KernelHandle, } from './disposal.js';
6
- //# sourceMappingURL=memory.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC"}
@@ -1,17 +0,0 @@
1
- import { Dimension } from './shapeTypes.js';
2
- /**
3
- * Compile-time error message for dimension mismatches.
4
- * Resolves to a string literal type that appears in IDE diagnostics.
5
- */
6
- export type DimensionError<Op extends string, Expected extends string, Got extends string> = `❌ ${Op}: expected ${Expected}, got ${Got}`;
7
- /**
8
- * Conditional type that resolves to T if D matches Expected,
9
- * otherwise resolves to a readable error string type.
10
- */
11
- export type RequireDimension<D extends Dimension, Expected extends Dimension, T, Op extends string = 'operation'> = D extends Expected ? T : DimensionError<Op, Expected, D>;
12
- /**
13
- * Asserts both dimensions are equal at the type level.
14
- * Resolves to the shared dimension if equal, or a readable error if not.
15
- */
16
- export type SameDimension<A extends Dimension, B extends Dimension, Op extends string = 'operation'> = A extends B ? A : DimensionError<Op, A, B>;
17
- //# sourceMappingURL=typeErrors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeErrors.d.ts","sourceRoot":"","sources":["../../src/core/typeErrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,cAAc,CACxB,EAAE,SAAS,MAAM,EACjB,QAAQ,SAAS,MAAM,EACvB,GAAG,SAAS,MAAM,IAChB,KAAK,EAAE,cAAc,QAAQ,SAAS,GAAG,EAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,SAAS,EACnB,QAAQ,SAAS,SAAS,EAC1B,CAAC,EACD,EAAE,SAAS,MAAM,GAAG,WAAW,IAC7B,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,MAAM,aAAa,CACvB,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,SAAS,EACnB,EAAE,SAAS,MAAM,GAAG,WAAW,IAC7B,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -1,59 +0,0 @@
1
- import { D as DEG2RAD } from "./vecOps-ZDdZWbwT.js";
2
- import { a as angle2d, s as samePoint, d as distance2d } from "./helpers-X0juxnwj.js";
3
- const PI_2 = 2 * Math.PI;
4
- function positiveHalfAngle(angle) {
5
- const limitedAngle = angle % PI_2;
6
- const coterminalAngle = limitedAngle < 0 ? limitedAngle + PI_2 : limitedAngle;
7
- if (coterminalAngle < Math.PI) return coterminalAngle;
8
- if (coterminalAngle === Math.PI) return 0;
9
- return Math.abs(coterminalAngle - PI_2);
10
- }
11
- function blueprintCorners(blueprint) {
12
- return blueprint.curves.map((curve, index) => ({
13
- firstCurve: curve,
14
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- modulo wraps within bounds
15
- secondCurve: blueprint.curves[(index + 1) % blueprint.curves.length],
16
- point: curve.lastPoint
17
- }));
18
- }
19
- function buildCornerFinder(filters) {
20
- const withFilter = (pred) => buildCornerFinder([...filters, pred]);
21
- const shouldKeep = (corner) => filters.every((f) => f(corner));
22
- return {
23
- shouldKeep,
24
- when: (pred) => withFilter(pred),
25
- inList: (points) => withFilter((corner) => points.some((p) => samePoint(p, corner.point))),
26
- atDistance: (distance, point = [0, 0]) => withFilter((corner) => Math.abs(distance2d(point, corner.point) - distance) < 1e-9),
27
- atPoint: (point) => withFilter((corner) => samePoint(point, corner.point)),
28
- inBox: (corner1, corner2) => {
29
- const minX = Math.min(corner1[0], corner2[0]);
30
- const maxX = Math.max(corner1[0], corner2[0]);
31
- const minY = Math.min(corner1[1], corner2[1]);
32
- const maxY = Math.max(corner1[1], corner2[1]);
33
- return withFilter((corner) => {
34
- const [x, y] = corner.point;
35
- return x >= minX && x <= maxX && y >= minY && y <= maxY;
36
- });
37
- },
38
- ofAngle: (angle) => withFilter((corner) => {
39
- const tgt1 = corner.firstCurve.tangentAt(1);
40
- const tgt2 = corner.secondCurve.tangentAt(0);
41
- return Math.abs(positiveHalfAngle(angle2d(tgt1, tgt2)) - positiveHalfAngle(DEG2RAD * angle)) < 1e-9;
42
- }),
43
- not: (fn) => {
44
- const inner = fn(buildCornerFinder([]));
45
- return withFilter((corner) => !inner.shouldKeep(corner));
46
- },
47
- either: (fns) => {
48
- const builtFinders = fns.map((fn) => fn(buildCornerFinder([])));
49
- return withFilter((corner) => builtFinders.some((f) => f.shouldKeep(corner)));
50
- },
51
- find: (blueprint) => blueprintCorners(blueprint).filter(shouldKeep)
52
- };
53
- }
54
- function cornerFinder() {
55
- return buildCornerFinder([]);
56
- }
57
- export {
58
- cornerFinder as c
59
- };
@@ -1,58 +0,0 @@
1
- "use strict";
2
- const vecOps = require("./vecOps-CjRL1jau.cjs");
3
- const helpers = require("./helpers-C8NoT0Wu.cjs");
4
- const PI_2 = 2 * Math.PI;
5
- function positiveHalfAngle(angle) {
6
- const limitedAngle = angle % PI_2;
7
- const coterminalAngle = limitedAngle < 0 ? limitedAngle + PI_2 : limitedAngle;
8
- if (coterminalAngle < Math.PI) return coterminalAngle;
9
- if (coterminalAngle === Math.PI) return 0;
10
- return Math.abs(coterminalAngle - PI_2);
11
- }
12
- function blueprintCorners(blueprint) {
13
- return blueprint.curves.map((curve, index) => ({
14
- firstCurve: curve,
15
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- modulo wraps within bounds
16
- secondCurve: blueprint.curves[(index + 1) % blueprint.curves.length],
17
- point: curve.lastPoint
18
- }));
19
- }
20
- function buildCornerFinder(filters) {
21
- const withFilter = (pred) => buildCornerFinder([...filters, pred]);
22
- const shouldKeep = (corner) => filters.every((f) => f(corner));
23
- return {
24
- shouldKeep,
25
- when: (pred) => withFilter(pred),
26
- inList: (points) => withFilter((corner) => points.some((p) => helpers.samePoint(p, corner.point))),
27
- atDistance: (distance, point = [0, 0]) => withFilter((corner) => Math.abs(helpers.distance2d(point, corner.point) - distance) < 1e-9),
28
- atPoint: (point) => withFilter((corner) => helpers.samePoint(point, corner.point)),
29
- inBox: (corner1, corner2) => {
30
- const minX = Math.min(corner1[0], corner2[0]);
31
- const maxX = Math.max(corner1[0], corner2[0]);
32
- const minY = Math.min(corner1[1], corner2[1]);
33
- const maxY = Math.max(corner1[1], corner2[1]);
34
- return withFilter((corner) => {
35
- const [x, y] = corner.point;
36
- return x >= minX && x <= maxX && y >= minY && y <= maxY;
37
- });
38
- },
39
- ofAngle: (angle) => withFilter((corner) => {
40
- const tgt1 = corner.firstCurve.tangentAt(1);
41
- const tgt2 = corner.secondCurve.tangentAt(0);
42
- return Math.abs(positiveHalfAngle(helpers.angle2d(tgt1, tgt2)) - positiveHalfAngle(vecOps.DEG2RAD * angle)) < 1e-9;
43
- }),
44
- not: (fn) => {
45
- const inner = fn(buildCornerFinder([]));
46
- return withFilter((corner) => !inner.shouldKeep(corner));
47
- },
48
- either: (fns) => {
49
- const builtFinders = fns.map((fn) => fn(buildCornerFinder([])));
50
- return withFilter((corner) => builtFinders.some((f) => f.shouldKeep(corner)));
51
- },
52
- find: (blueprint) => blueprintCorners(blueprint).filter(shouldKeep)
53
- };
54
- }
55
- function cornerFinder() {
56
- return buildCornerFinder([]);
57
- }
58
- exports.cornerFinder = cornerFinder;
@@ -1,468 +0,0 @@
1
- "use strict";
2
- const shapeTypes = require("./shapeTypes-7xEam9Ri.cjs");
3
- const vecOps = require("./vecOps-CjRL1jau.cjs");
4
- const faceFns = require("./faceFns-DB1Fc5gy.cjs");
5
- const result = require("./result-fAX0OZzI.cjs");
6
- function clone(shape) {
7
- return shapeTypes.castShape(result.unwrap(faceFns.downcast(shape.wrapped)));
8
- }
9
- function toBREP(shape) {
10
- return shapeTypes.getKernel().toBREP(shape.wrapped);
11
- }
12
- function getHashCode(shape) {
13
- return shapeTypes.getKernel().hashCode(shape.wrapped, vecOps.HASH_CODE_MAX);
14
- }
15
- function isEmpty(shape) {
16
- return shapeTypes.getKernel().isNull(shape.wrapped);
17
- }
18
- function isSameShape(a, b) {
19
- return shapeTypes.getKernel().isSame(a.wrapped, b.wrapped);
20
- }
21
- function isEqualShape(a, b) {
22
- return shapeTypes.getKernel().isEqual(a.wrapped, b.wrapped);
23
- }
24
- function simplify(shape) {
25
- return shapeTypes.castShape(shapeTypes.getKernel().simplify(shape.wrapped));
26
- }
27
- function collectInputFaceHashes(inputs) {
28
- const hashes = [];
29
- for (const input of inputs) {
30
- const origins = getFaceOrigins(input);
31
- if (!origins) continue;
32
- for (const hash of origins.keys()) {
33
- hashes.push(hash);
34
- }
35
- }
36
- return hashes;
37
- }
38
- function translate(shape, v) {
39
- const inputFaceHashes = collectInputFaceHashes([shape]);
40
- const { shape: resultShape, evolution } = shapeTypes.getKernel().translateWithHistory(
41
- shape.wrapped,
42
- v[0],
43
- v[1],
44
- v[2],
45
- inputFaceHashes,
46
- vecOps.HASH_CODE_MAX
47
- );
48
- const result2 = shapeTypes.castShape(resultShape);
49
- propagateOriginsFromEvolution(evolution, [shape], result2);
50
- return result2;
51
- }
52
- function rotate(shape, angle, position = [0, 0, 0], direction = [0, 0, 1]) {
53
- const inputFaceHashes = collectInputFaceHashes([shape]);
54
- const { shape: resultShape, evolution } = shapeTypes.getKernel().rotateWithHistory(
55
- shape.wrapped,
56
- angle * vecOps.DEG2RAD,
57
- inputFaceHashes,
58
- vecOps.HASH_CODE_MAX,
59
- direction,
60
- position
61
- );
62
- const result2 = shapeTypes.castShape(resultShape);
63
- propagateOriginsFromEvolution(evolution, [shape], result2);
64
- return result2;
65
- }
66
- function mirror(shape, planeNormal = [0, 1, 0], planeOrigin = [0, 0, 0]) {
67
- const inputFaceHashes = collectInputFaceHashes([shape]);
68
- const { shape: resultShape, evolution } = shapeTypes.getKernel().mirrorWithHistory(
69
- shape.wrapped,
70
- planeOrigin,
71
- planeNormal,
72
- inputFaceHashes,
73
- vecOps.HASH_CODE_MAX
74
- );
75
- const result2 = shapeTypes.castShape(resultShape);
76
- propagateOriginsFromEvolution(evolution, [shape], result2);
77
- return result2;
78
- }
79
- function scale(shape, factor, center = [0, 0, 0]) {
80
- const inputFaceHashes = collectInputFaceHashes([shape]);
81
- const { shape: resultShape, evolution } = shapeTypes.getKernel().scaleWithHistory(
82
- shape.wrapped,
83
- center,
84
- factor,
85
- inputFaceHashes,
86
- vecOps.HASH_CODE_MAX
87
- );
88
- const result2 = shapeTypes.castShape(resultShape);
89
- propagateOriginsFromEvolution(evolution, [shape], result2);
90
- return result2;
91
- }
92
- function resize(shape, dimensions, options) {
93
- const bbox = shapeTypes.getKernel().boundingBox(shape.wrapped);
94
- const size = [
95
- bbox.max[0] - bbox.min[0],
96
- bbox.max[1] - bbox.min[1],
97
- bbox.max[2] - bbox.min[2]
98
- ];
99
- const auto = options?.auto === true;
100
- function factor(dim, sz, baseFactor) {
101
- if (dim !== void 0 && sz > 1e-12) return dim / sz;
102
- if (dim === void 0 && auto) return baseFactor;
103
- return 1;
104
- }
105
- let autoFactor = 1;
106
- if (auto) {
107
- if (dimensions[0] !== void 0 && size[0] > 1e-12) autoFactor = dimensions[0] / size[0];
108
- else if (dimensions[1] !== void 0 && size[1] > 1e-12) autoFactor = dimensions[1] / size[1];
109
- else if (dimensions[2] !== void 0 && size[2] > 1e-12) autoFactor = dimensions[2] / size[2];
110
- }
111
- const factors = [
112
- factor(dimensions[0], size[0], autoFactor),
113
- factor(dimensions[1], size[1], autoFactor),
114
- factor(dimensions[2], size[2], autoFactor)
115
- ];
116
- const isUniform = Math.abs(factors[0] - factors[1]) < 1e-6 && Math.abs(factors[1] - factors[2]) < 1e-6;
117
- if (!isUniform) {
118
- throw new Error(
119
- "resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform). Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling."
120
- );
121
- }
122
- return scale(shape, factors[0]);
123
- }
124
- function parseMatrixInput(input) {
125
- if ("linear" in input) {
126
- return { linear: input.linear, translation: input.translation };
127
- }
128
- const [r0, r1, r2, r3] = input;
129
- const TOL = 1e-10;
130
- if (Math.abs(r3[0]) > TOL || Math.abs(r3[1]) > TOL || Math.abs(r3[2]) > TOL || Math.abs(r3[3] - 1) > TOL) {
131
- throw new Error(
132
- `applyMatrix: invalid bottom row [${String(r3[0])}, ${String(r3[1])}, ${String(r3[2])}, ${String(r3[3])}]. Must be [0, 0, 0, 1] for an affine transform.`
133
- );
134
- }
135
- return {
136
- linear: [r0[0], r0[1], r0[2], r1[0], r1[1], r1[2], r2[0], r2[1], r2[2]],
137
- translation: [r0[3], r1[3], r2[3]]
138
- };
139
- }
140
- function det3x3(m) {
141
- return m[0] * (m[4] * m[8] - m[5] * m[7]) - m[1] * (m[3] * m[8] - m[5] * m[6]) + m[2] * (m[3] * m[7] - m[4] * m[6]);
142
- }
143
- function isOrthogonalMatrix(m) {
144
- const TOL = 1e-8;
145
- const d00 = m[0] * m[0] + m[3] * m[3] + m[6] * m[6];
146
- const d11 = m[1] * m[1] + m[4] * m[4] + m[7] * m[7];
147
- const d22 = m[2] * m[2] + m[5] * m[5] + m[8] * m[8];
148
- const d01 = m[0] * m[1] + m[3] * m[4] + m[6] * m[7];
149
- const d02 = m[0] * m[2] + m[3] * m[5] + m[6] * m[8];
150
- const d12 = m[1] * m[2] + m[4] * m[5] + m[7] * m[8];
151
- if (Math.abs(d01) > TOL) return false;
152
- if (Math.abs(d02) > TOL) return false;
153
- if (Math.abs(d12) > TOL) return false;
154
- if (Math.abs(d00 - d11) > TOL) return false;
155
- if (Math.abs(d00 - d22) > TOL) return false;
156
- return true;
157
- }
158
- function applyMatrix(shape, matrix) {
159
- const { linear, translation } = parseMatrixInput(matrix);
160
- const d = det3x3(linear);
161
- if (Math.abs(d) < 1e-12) {
162
- throw new Error(
163
- "applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform."
164
- );
165
- }
166
- const orthogonal = isOrthogonalMatrix(linear);
167
- if (orthogonal) {
168
- const inputFaceHashes = collectInputFaceHashes([shape]);
169
- const { shape: resultShape2, evolution } = shapeTypes.getKernel().generalTransformWithHistory(
170
- shape.wrapped,
171
- linear,
172
- translation,
173
- true,
174
- inputFaceHashes,
175
- vecOps.HASH_CODE_MAX
176
- );
177
- const result22 = shapeTypes.castShape(resultShape2);
178
- propagateOriginsFromEvolution(evolution, [shape], result22);
179
- return result22;
180
- }
181
- const resultShape = shapeTypes.getKernel().generalTransformNonOrthogonal(shape.wrapped, linear, translation);
182
- const result2 = shapeTypes.castShape(resultShape);
183
- propagateOriginsByHash([shape], result2);
184
- return result2;
185
- }
186
- function composeTransforms(ops) {
187
- const kernelOps = ops.map((op) => {
188
- if (op.type === "translate") {
189
- return { type: "translate", x: op.v[0], y: op.v[1], z: op.v[2] };
190
- }
191
- return {
192
- type: "rotate",
193
- angle: op.angle,
194
- axis: op.axis,
195
- center: op.center
196
- };
197
- });
198
- const { handle, dispose } = shapeTypes.getKernel().composeTransform(kernelOps);
199
- return { trsf: handle, cleanup: dispose };
200
- }
201
- function transformCopy(shape, composed) {
202
- const inputFaceHashes = collectInputFaceHashes([shape]);
203
- const { shape: resultShape, evolution } = shapeTypes.getKernel().applyComposedTransformWithHistory(
204
- shape.wrapped,
205
- composed.trsf,
206
- inputFaceHashes,
207
- vecOps.HASH_CODE_MAX
208
- );
209
- const result2 = shapeTypes.castShape(resultShape);
210
- propagateOriginsFromEvolution(evolution, [shape], result2);
211
- return result2;
212
- }
213
- const topoCache = /* @__PURE__ */ new WeakMap();
214
- function getOrCreateCache(shape) {
215
- let entry = topoCache.get(shape.wrapped);
216
- if (!entry) {
217
- entry = {};
218
- topoCache.set(shape.wrapped, entry);
219
- }
220
- return entry;
221
- }
222
- function invalidateShapeCache(shape) {
223
- topoCache.delete(shape.wrapped);
224
- }
225
- function getEdges(shape) {
226
- const cache = getOrCreateCache(shape);
227
- if (cache.edges) return cache.edges;
228
- const edges = Array.from(faceFns.iterTopo(shape.wrapped, "edge")).map(
229
- (e) => shapeTypes.castShape(result.unwrap(faceFns.downcast(e)))
230
- );
231
- cache.edges = edges;
232
- return edges;
233
- }
234
- function getFaces(shape) {
235
- const cache = getOrCreateCache(shape);
236
- if (cache.faces) return cache.faces;
237
- const faces = Array.from(faceFns.iterTopo(shape.wrapped, "face")).map(
238
- (e) => shapeTypes.castShape(result.unwrap(faceFns.downcast(e)))
239
- );
240
- cache.faces = faces;
241
- return faces;
242
- }
243
- function getWires(shape) {
244
- const cache = getOrCreateCache(shape);
245
- if (cache.wires) return cache.wires;
246
- const wires = Array.from(faceFns.iterTopo(shape.wrapped, "wire")).map(
247
- (e) => shapeTypes.castShape(result.unwrap(faceFns.downcast(e)))
248
- );
249
- cache.wires = wires;
250
- return wires;
251
- }
252
- function setShapeOrigin(shape, origin) {
253
- const cache = getOrCreateCache(shape);
254
- const map = /* @__PURE__ */ new Map();
255
- for (const f of getFaces(shape)) {
256
- map.set(shapeTypes.getKernel().hashCode(f.wrapped, vecOps.HASH_CODE_MAX), origin);
257
- }
258
- cache.faceOrigins = map;
259
- }
260
- function getFaceOrigins(shape) {
261
- return topoCache.get(shape.wrapped)?.faceOrigins;
262
- }
263
- function propagateOriginsFromEvolution(evolution, inputs, result2) {
264
- const inputOrigins = /* @__PURE__ */ new Map();
265
- for (const input of inputs) {
266
- const origins = getFaceOrigins(input);
267
- if (!origins) continue;
268
- for (const [hash, origin] of origins) {
269
- inputOrigins.set(hash, origin);
270
- }
271
- }
272
- if (inputOrigins.size === 0) return;
273
- const resultMap = /* @__PURE__ */ new Map();
274
- for (const [hash, origin] of inputOrigins) {
275
- if (evolution.deleted.has(hash)) continue;
276
- const modifiedHashes = evolution.modified.get(hash);
277
- if (modifiedHashes && modifiedHashes.length > 0) {
278
- for (const modHash of modifiedHashes) {
279
- resultMap.set(modHash, origin);
280
- }
281
- } else {
282
- resultMap.set(hash, origin);
283
- }
284
- const generatedHashes = evolution.generated.get(hash);
285
- if (generatedHashes) {
286
- for (const genHash of generatedHashes) {
287
- if (!resultMap.has(genHash)) {
288
- resultMap.set(genHash, 0);
289
- }
290
- }
291
- }
292
- }
293
- if (resultMap.size > 0) {
294
- const cache = getOrCreateCache(result2);
295
- cache.faceOrigins = resultMap;
296
- }
297
- }
298
- function propagateOriginsByHash(inputs, result2) {
299
- const lookup = /* @__PURE__ */ new Map();
300
- for (const input of inputs) {
301
- const origins = getFaceOrigins(input);
302
- if (!origins) continue;
303
- for (const [hash, origin] of origins) {
304
- lookup.set(hash, origin);
305
- }
306
- }
307
- if (lookup.size === 0) return;
308
- const kernel = shapeTypes.getKernel();
309
- const resultMap = /* @__PURE__ */ new Map();
310
- const resultFaces = getFaces(result2);
311
- for (const f of resultFaces) {
312
- const hash = kernel.hashCode(f.wrapped, vecOps.HASH_CODE_MAX);
313
- const origin = lookup.get(hash);
314
- if (origin !== void 0) {
315
- resultMap.set(hash, origin);
316
- }
317
- }
318
- if (resultMap.size === 0) {
319
- const inputSigs = [];
320
- for (const input of inputs) {
321
- const origins = getFaceOrigins(input);
322
- if (!origins) continue;
323
- for (const f of getFaces(input)) {
324
- const hash = kernel.hashCode(f.wrapped, vecOps.HASH_CODE_MAX);
325
- const origin = origins.get(hash);
326
- if (origin === void 0) continue;
327
- try {
328
- const bounds = kernel.uvBounds(f.wrapped);
329
- const normal = kernel.surfaceNormal(
330
- f.wrapped,
331
- 0.5 * (bounds.uMin + bounds.uMax),
332
- 0.5 * (bounds.vMin + bounds.vMax)
333
- );
334
- const centroid = kernel.surfaceCenterOfMass(f.wrapped);
335
- inputSigs.push({ origin, normal, centroid });
336
- } catch {
337
- }
338
- }
339
- }
340
- if (inputSigs.length > 0) {
341
- for (const f of resultFaces) {
342
- const hash = kernel.hashCode(f.wrapped, vecOps.HASH_CODE_MAX);
343
- try {
344
- const outBounds = kernel.uvBounds(f.wrapped);
345
- const outNormal = kernel.surfaceNormal(
346
- f.wrapped,
347
- 0.5 * (outBounds.uMin + outBounds.uMax),
348
- 0.5 * (outBounds.vMin + outBounds.vMax)
349
- );
350
- const outCentroid = kernel.surfaceCenterOfMass(f.wrapped);
351
- let bestScore = -Infinity;
352
- let bestOrigin;
353
- for (const inp of inputSigs) {
354
- const dot = outNormal[0] * inp.normal[0] + outNormal[1] * inp.normal[1] + outNormal[2] * inp.normal[2];
355
- if (dot < 0.707) continue;
356
- const dx = outCentroid[0] - inp.centroid[0];
357
- const dy = outCentroid[1] - inp.centroid[1];
358
- const dz = outCentroid[2] - inp.centroid[2];
359
- const distSq = dx * dx + dy * dy + dz * dz;
360
- if (distSq > 100) continue;
361
- const score = dot - distSq / 100;
362
- if (score > bestScore) {
363
- bestScore = score;
364
- bestOrigin = inp.origin;
365
- }
366
- }
367
- if (bestOrigin !== void 0) {
368
- resultMap.set(hash, bestOrigin);
369
- }
370
- } catch {
371
- }
372
- }
373
- }
374
- }
375
- if (resultMap.size > 0) {
376
- const cache = getOrCreateCache(result2);
377
- cache.faceOrigins = resultMap;
378
- }
379
- }
380
- function getVertices(shape) {
381
- const cache = getOrCreateCache(shape);
382
- if (cache.vertices) return cache.vertices;
383
- const vertices = Array.from(faceFns.iterTopo(shape.wrapped, "vertex")).map(
384
- (e) => shapeTypes.castShape(result.unwrap(faceFns.downcast(e)))
385
- );
386
- cache.vertices = vertices;
387
- return vertices;
388
- }
389
- function* iterEdges(shape) {
390
- for (const e of faceFns.iterTopo(shape.wrapped, "edge")) {
391
- yield shapeTypes.castShape(result.unwrap(faceFns.downcast(e)));
392
- }
393
- }
394
- function* iterFaces(shape) {
395
- for (const f of faceFns.iterTopo(shape.wrapped, "face")) {
396
- yield shapeTypes.castShape(result.unwrap(faceFns.downcast(f)));
397
- }
398
- }
399
- function* iterWires(shape) {
400
- for (const w of faceFns.iterTopo(shape.wrapped, "wire")) {
401
- yield shapeTypes.castShape(result.unwrap(faceFns.downcast(w)));
402
- }
403
- }
404
- function* iterVertices(shape) {
405
- for (const v of faceFns.iterTopo(shape.wrapped, "vertex")) {
406
- yield shapeTypes.castShape(result.unwrap(faceFns.downcast(v)));
407
- }
408
- }
409
- function getBounds(shape) {
410
- const cache = getOrCreateCache(shape);
411
- if (cache.bounds) return cache.bounds;
412
- const { min, max } = shapeTypes.getKernel().boundingBox(shape.wrapped);
413
- const bounds = {
414
- xMin: min[0],
415
- xMax: max[0],
416
- yMin: min[1],
417
- yMax: max[1],
418
- zMin: min[2],
419
- zMax: max[2]
420
- };
421
- cache.bounds = bounds;
422
- return bounds;
423
- }
424
- function describe(shape) {
425
- return {
426
- kind: shapeTypes.getShapeKind(shape),
427
- faceCount: getFaces(shape).length,
428
- edgeCount: getEdges(shape).length,
429
- wireCount: getWires(shape).length,
430
- vertexCount: getVertices(shape).length,
431
- valid: shapeTypes.getKernel().isValid(shape.wrapped),
432
- bounds: getBounds(shape)
433
- };
434
- }
435
- function vertexPosition(vertex) {
436
- return shapeTypes.getKernel().vertexPosition(vertex.wrapped);
437
- }
438
- exports.applyMatrix = applyMatrix;
439
- exports.clone = clone;
440
- exports.composeTransforms = composeTransforms;
441
- exports.describe = describe;
442
- exports.getBounds = getBounds;
443
- exports.getEdges = getEdges;
444
- exports.getFaceOrigins = getFaceOrigins;
445
- exports.getFaces = getFaces;
446
- exports.getHashCode = getHashCode;
447
- exports.getVertices = getVertices;
448
- exports.getWires = getWires;
449
- exports.invalidateShapeCache = invalidateShapeCache;
450
- exports.isEmpty = isEmpty;
451
- exports.isEqualShape = isEqualShape;
452
- exports.isSameShape = isSameShape;
453
- exports.iterEdges = iterEdges;
454
- exports.iterFaces = iterFaces;
455
- exports.iterVertices = iterVertices;
456
- exports.iterWires = iterWires;
457
- exports.mirror = mirror;
458
- exports.propagateOriginsByHash = propagateOriginsByHash;
459
- exports.propagateOriginsFromEvolution = propagateOriginsFromEvolution;
460
- exports.resize = resize;
461
- exports.rotate = rotate;
462
- exports.scale = scale;
463
- exports.setShapeOrigin = setShapeOrigin;
464
- exports.simplify = simplify;
465
- exports.toBREP = toBREP;
466
- exports.transformCopy = transformCopy;
467
- exports.translate = translate;
468
- exports.vertexPosition = vertexPosition;