@faicad/faijs 0.33.1 → 0.35.2

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 (392) hide show
  1. package/dist/api/api-namespace.d.ts +14 -14
  2. package/dist/api/api-namespace.d.ts.map +1 -1
  3. package/dist/api/api-namespace.js +40 -14
  4. package/dist/api/api-namespace.js.map +1 -1
  5. package/dist/api/appearance.d.ts +47 -6
  6. package/dist/api/appearance.d.ts.map +1 -1
  7. package/dist/api/appearance.js.map +1 -1
  8. package/dist/api/assembly/solve-tree.d.ts +1 -0
  9. package/dist/api/assembly/solve-tree.d.ts.map +1 -1
  10. package/dist/api/assembly/solve-tree.js +42 -17
  11. package/dist/api/assembly/solve-tree.js.map +1 -1
  12. package/dist/api/assembly/solve.d.ts +1 -0
  13. package/dist/api/assembly/solve.d.ts.map +1 -1
  14. package/dist/api/assembly/solve.js.map +1 -1
  15. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  16. package/dist/api/assembly/solvers/global-solver.js +130 -23
  17. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  18. package/dist/api/assembly/solvers/pose-from-delta.d.ts +9 -0
  19. package/dist/api/assembly/solvers/pose-from-delta.d.ts.map +1 -1
  20. package/dist/api/assembly/solvers/pose-from-delta.js +23 -0
  21. package/dist/api/assembly/solvers/pose-from-delta.js.map +1 -1
  22. package/dist/api/assembly/solvers/types.d.ts +20 -2
  23. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  24. package/dist/api/assembly/solvers/types.js.map +1 -1
  25. package/dist/api/chamfer.d.ts +7 -4
  26. package/dist/api/chamfer.d.ts.map +1 -1
  27. package/dist/api/chamfer.js +57 -13
  28. package/dist/api/chamfer.js.map +1 -1
  29. package/dist/api/draft.d.ts +7 -4
  30. package/dist/api/draft.d.ts.map +1 -1
  31. package/dist/api/draft.js +11 -6
  32. package/dist/api/draft.js.map +1 -1
  33. package/dist/api/edge-ref.d.ts +4 -4
  34. package/dist/api/edge-ref.js +4 -4
  35. package/dist/api/edge-ref.js.map +1 -1
  36. package/dist/api/extrude.d.ts +10 -6
  37. package/dist/api/extrude.d.ts.map +1 -1
  38. package/dist/api/extrude.js +50 -25
  39. package/dist/api/extrude.js.map +1 -1
  40. package/dist/api/face-ref.d.ts +4 -4
  41. package/dist/api/face-ref.js +4 -4
  42. package/dist/api/face-ref.js.map +1 -1
  43. package/dist/api/feature-repair.d.ts +6 -3
  44. package/dist/api/feature-repair.d.ts.map +1 -1
  45. package/dist/api/feature-repair.js +12 -7
  46. package/dist/api/feature-repair.js.map +1 -1
  47. package/dist/api/fillet-variable.d.ts +6 -2
  48. package/dist/api/fillet-variable.d.ts.map +1 -1
  49. package/dist/api/fillet-variable.js +24 -6
  50. package/dist/api/fillet-variable.js.map +1 -1
  51. package/dist/api/fillet.d.ts +7 -4
  52. package/dist/api/fillet.d.ts.map +1 -1
  53. package/dist/api/fillet.js +45 -12
  54. package/dist/api/fillet.js.map +1 -1
  55. package/dist/api/helix.d.ts +13 -13
  56. package/dist/api/helix.d.ts.map +1 -1
  57. package/dist/api/helix.js +19 -24
  58. package/dist/api/helix.js.map +1 -1
  59. package/dist/api/import-brep.d.ts +10 -18
  60. package/dist/api/import-brep.d.ts.map +1 -1
  61. package/dist/api/import-brep.js +17 -25
  62. package/dist/api/import-brep.js.map +1 -1
  63. package/dist/api/import-step.d.ts +10 -15
  64. package/dist/api/import-step.d.ts.map +1 -1
  65. package/dist/api/import-step.js +24 -29
  66. package/dist/api/import-step.js.map +1 -1
  67. package/dist/api/index.js +2 -2
  68. package/dist/api/index.js.map +1 -1
  69. package/dist/api/internal/export-members.js.map +1 -1
  70. package/dist/api/loft-advanced.d.ts +4 -0
  71. package/dist/api/loft-advanced.d.ts.map +1 -1
  72. package/dist/api/loft-advanced.js +4 -0
  73. package/dist/api/loft-advanced.js.map +1 -1
  74. package/dist/api/loft.d.ts +5 -3
  75. package/dist/api/loft.d.ts.map +1 -1
  76. package/dist/api/loft.js +5 -3
  77. package/dist/api/loft.js.map +1 -1
  78. package/dist/api/meta.d.ts +42 -6
  79. package/dist/api/meta.d.ts.map +1 -1
  80. package/dist/api/meta.js.map +1 -1
  81. package/dist/api/punch-hole.d.ts +5 -2
  82. package/dist/api/punch-hole.d.ts.map +1 -1
  83. package/dist/api/punch-hole.js +4 -1
  84. package/dist/api/punch-hole.js.map +1 -1
  85. package/dist/api/replicate.d.ts +4 -5
  86. package/dist/api/replicate.d.ts.map +1 -1
  87. package/dist/api/replicate.js +4 -5
  88. package/dist/api/replicate.js.map +1 -1
  89. package/dist/api/selectors-to-refs.d.ts +83 -0
  90. package/dist/api/selectors-to-refs.d.ts.map +1 -0
  91. package/dist/api/selectors-to-refs.js +211 -0
  92. package/dist/api/selectors-to-refs.js.map +1 -0
  93. package/dist/api/shell.d.ts +17 -8
  94. package/dist/api/shell.d.ts.map +1 -1
  95. package/dist/api/shell.js +45 -15
  96. package/dist/api/shell.js.map +1 -1
  97. package/dist/api/sketch-on-face.d.ts +12 -6
  98. package/dist/api/sketch-on-face.d.ts.map +1 -1
  99. package/dist/api/sketch-on-face.js +31 -4
  100. package/dist/api/sketch-on-face.js.map +1 -1
  101. package/dist/api/sketch-on-plane.d.ts +3 -0
  102. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  103. package/dist/api/sketch-on-plane.js +3 -0
  104. package/dist/api/sketch-on-plane.js.map +1 -1
  105. package/dist/api/sketch-on-surface.d.ts +4 -1
  106. package/dist/api/sketch-on-surface.d.ts.map +1 -1
  107. package/dist/api/sketch-on-surface.js +4 -1
  108. package/dist/api/sketch-on-surface.js.map +1 -1
  109. package/dist/api/view/view-projection.d.ts.map +1 -1
  110. package/dist/api/view/view-projection.js +9 -2
  111. package/dist/api/view/view-projection.js.map +1 -1
  112. package/dist/brep/brep-chain.js +2 -2
  113. package/dist/brep/brep-chain.js.map +1 -1
  114. package/dist/brep/brep-ops.d.ts +1 -1
  115. package/dist/brep/brep-ops.js +1 -1
  116. package/dist/brep/brep-ops.js.map +1 -1
  117. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  118. package/dist/brep/engine/adapters/brep-mock.js +45 -0
  119. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  120. package/dist/brep/engine/primitives.d.ts +87 -3
  121. package/dist/brep/engine/primitives.d.ts.map +1 -1
  122. package/dist/brep/engine/primitives.js +1 -1
  123. package/dist/brep/engine/primitives.js.map +1 -1
  124. package/dist/brep/engine/registry.d.ts +33 -7
  125. package/dist/brep/engine/registry.d.ts.map +1 -1
  126. package/dist/brep/engine/registry.js +47 -16
  127. package/dist/brep/engine/registry.js.map +1 -1
  128. package/dist/brep/handle-bridge.d.ts +14 -15
  129. package/dist/brep/handle-bridge.d.ts.map +1 -1
  130. package/dist/brep/handle-bridge.js +35 -15
  131. package/dist/brep/handle-bridge.js.map +1 -1
  132. package/dist/brep/primitives-brep.js +2 -2
  133. package/dist/brep/primitives-brep.js.map +1 -1
  134. package/dist/brep/text/text-to-solid.d.ts +40 -3
  135. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  136. package/dist/brep/text/text-to-solid.js +104 -24
  137. package/dist/brep/text/text-to-solid.js.map +1 -1
  138. package/dist/brepkit-kernel/brepkitKernel.d.ts +2 -2
  139. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  140. package/dist/brepkit-kernel/brepkitKernel.js +315 -36
  141. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  142. package/dist/brepkit-kernel/brepkitWasm.js +7 -7
  143. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  144. package/dist/brepkit-kernel/multi-version-test.d.ts +2 -2
  145. package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
  146. package/dist/brepkit-kernel/multi-version-test.js +6 -6
  147. package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
  148. package/dist/browser.d.ts +2 -3
  149. package/dist/browser.d.ts.map +1 -1
  150. package/dist/browser.js +1 -2
  151. package/dist/browser.js.map +1 -1
  152. package/dist/cad-runtime/admit-compat-lib.d.ts +9 -1
  153. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  154. package/dist/cad-runtime/admit-compat-lib.js +11 -1
  155. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  156. package/dist/cad-runtime/browser-lib-loader.d.ts +16 -11
  157. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  158. package/dist/cad-runtime/browser-lib-loader.js +16 -8
  159. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  160. package/dist/cad-runtime/direct-executor.d.ts +62 -5
  161. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  162. package/dist/cad-runtime/direct-executor.js +617 -42
  163. package/dist/cad-runtime/direct-executor.js.map +1 -1
  164. package/dist/cad-runtime/interp/closure.d.ts +3 -2
  165. package/dist/cad-runtime/interp/closure.d.ts.map +1 -1
  166. package/dist/cad-runtime/interp/closure.js.map +1 -1
  167. package/dist/cad-runtime/interp/env.d.ts +9 -6
  168. package/dist/cad-runtime/interp/env.d.ts.map +1 -1
  169. package/dist/cad-runtime/interp/env.js +4 -2
  170. package/dist/cad-runtime/interp/env.js.map +1 -1
  171. package/dist/cad-runtime/lib-decl.d.ts +121 -0
  172. package/dist/cad-runtime/lib-decl.d.ts.map +1 -0
  173. package/dist/cad-runtime/lib-decl.js +100 -0
  174. package/dist/cad-runtime/lib-decl.js.map +1 -0
  175. package/dist/cad-runtime/ports.d.ts +12 -0
  176. package/dist/cad-runtime/ports.d.ts.map +1 -1
  177. package/dist/cad-runtime/ports.js.map +1 -1
  178. package/dist/cad-runtime/runtime.d.ts +59 -5
  179. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  180. package/dist/cad-runtime/runtime.js +237 -18
  181. package/dist/cad-runtime/runtime.js.map +1 -1
  182. package/dist/extra/browser.d.ts +9 -0
  183. package/dist/extra/browser.d.ts.map +1 -0
  184. package/dist/extra/browser.js +9 -0
  185. package/dist/extra/browser.js.map +1 -0
  186. package/dist/extra/editor-ops.d.ts +22 -0
  187. package/dist/extra/editor-ops.d.ts.map +1 -0
  188. package/dist/extra/editor-ops.js +21 -0
  189. package/dist/extra/editor-ops.js.map +1 -0
  190. package/dist/extra/extras/svg-extrude.d.ts +45 -0
  191. package/dist/extra/extras/svg-extrude.d.ts.map +1 -0
  192. package/dist/extra/extras/svg-extrude.js +110 -0
  193. package/dist/extra/extras/svg-extrude.js.map +1 -0
  194. package/dist/extra/extras/text-cjk.d.ts +36 -0
  195. package/dist/extra/extras/text-cjk.d.ts.map +1 -0
  196. package/dist/extra/extras/text-cjk.js +86 -0
  197. package/dist/extra/extras/text-cjk.js.map +1 -0
  198. package/dist/extra/extras/text-geometry.d.ts +69 -0
  199. package/dist/extra/extras/text-geometry.d.ts.map +1 -0
  200. package/dist/extra/extras/text-geometry.js +188 -0
  201. package/dist/extra/extras/text-geometry.js.map +1 -0
  202. package/dist/extra/index.d.ts +40 -0
  203. package/dist/extra/index.d.ts.map +1 -0
  204. package/dist/extra/index.js +40 -0
  205. package/dist/extra/index.js.map +1 -0
  206. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts +94 -0
  207. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts.map +1 -0
  208. package/dist/extra/mesh/drill-hole/DrillHoleCore.js +282 -0
  209. package/dist/extra/mesh/drill-hole/DrillHoleCore.js.map +1 -0
  210. package/dist/extra/mesh/drill-hole/drill-types.d.ts +34 -0
  211. package/dist/extra/mesh/drill-hole/drill-types.d.ts.map +1 -0
  212. package/dist/extra/mesh/drill-hole/drill-types.js +7 -0
  213. package/dist/extra/mesh/drill-hole/drill-types.js.map +1 -0
  214. package/dist/extra/mesh/engrave-decoration.d.ts +42 -0
  215. package/dist/extra/mesh/engrave-decoration.d.ts.map +1 -0
  216. package/dist/extra/mesh/engrave-decoration.js +39 -0
  217. package/dist/extra/mesh/engrave-decoration.js.map +1 -0
  218. package/dist/extra/mesh/fai_drill.d.ts +21 -0
  219. package/dist/extra/mesh/fai_drill.d.ts.map +1 -0
  220. package/dist/extra/mesh/fai_drill.js +89 -0
  221. package/dist/extra/mesh/fai_drill.js.map +1 -0
  222. package/dist/extra/mesh/fai_extrude.d.ts +24 -0
  223. package/dist/extra/mesh/fai_extrude.d.ts.map +1 -0
  224. package/dist/extra/mesh/fai_extrude.js +42 -0
  225. package/dist/extra/mesh/fai_extrude.js.map +1 -0
  226. package/dist/extra/mesh/fai_split.d.ts +164 -0
  227. package/dist/extra/mesh/fai_split.d.ts.map +1 -0
  228. package/dist/extra/mesh/fai_split.js +269 -0
  229. package/dist/extra/mesh/fai_split.js.map +1 -0
  230. package/dist/extra/mesh/primitives.d.ts +29 -0
  231. package/dist/extra/mesh/primitives.d.ts.map +1 -0
  232. package/dist/extra/mesh/primitives.js +41 -0
  233. package/dist/extra/mesh/primitives.js.map +1 -0
  234. package/dist/extra/op-names.d.ts +37 -0
  235. package/dist/extra/op-names.d.ts.map +1 -0
  236. package/dist/extra/op-names.js +46 -0
  237. package/dist/extra/op-names.js.map +1 -0
  238. package/dist/extra/ops/compound.d.ts +140 -0
  239. package/dist/extra/ops/compound.d.ts.map +1 -0
  240. package/dist/extra/ops/compound.js +167 -0
  241. package/dist/extra/ops/compound.js.map +1 -0
  242. package/dist/extra/ops/copy.d.ts +40 -0
  243. package/dist/extra/ops/copy.d.ts.map +1 -0
  244. package/dist/extra/ops/copy.js +83 -0
  245. package/dist/extra/ops/copy.js.map +1 -0
  246. package/dist/extra/ops/fai_drill.d.ts +51 -0
  247. package/dist/extra/ops/fai_drill.d.ts.map +1 -0
  248. package/dist/extra/ops/fai_drill.js +233 -0
  249. package/dist/extra/ops/fai_drill.js.map +1 -0
  250. package/dist/extra/ops/fai_extrude.d.ts +36 -0
  251. package/dist/extra/ops/fai_extrude.d.ts.map +1 -0
  252. package/dist/extra/ops/fai_extrude.js +84 -0
  253. package/dist/extra/ops/fai_extrude.js.map +1 -0
  254. package/dist/extra/ops/fai_split.d.ts +46 -0
  255. package/dist/extra/ops/fai_split.d.ts.map +1 -0
  256. package/dist/extra/ops/fai_split.js +235 -0
  257. package/dist/extra/ops/fai_split.js.map +1 -0
  258. package/dist/extra/ops/load.d.ts +49 -0
  259. package/dist/extra/ops/load.d.ts.map +1 -0
  260. package/dist/extra/ops/load.js +385 -0
  261. package/dist/extra/ops/load.js.map +1 -0
  262. package/dist/extra/ops/svg-extrude.d.ts +32 -0
  263. package/dist/extra/ops/svg-extrude.d.ts.map +1 -0
  264. package/dist/extra/ops/svg-extrude.js +74 -0
  265. package/dist/extra/ops/svg-extrude.js.map +1 -0
  266. package/dist/extra/ops/text.d.ts +34 -0
  267. package/dist/extra/ops/text.d.ts.map +1 -0
  268. package/dist/extra/ops/text.js +100 -0
  269. package/dist/extra/ops/text.js.map +1 -0
  270. package/dist/geometry2d/bridge/lift-on-plane.d.ts +8 -5
  271. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  272. package/dist/geometry2d/bridge/lift-on-plane.js +8 -5
  273. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  274. package/dist/index.d.ts +6 -2
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +8 -2
  277. package/dist/index.js.map +1 -1
  278. package/dist/lang/symbol-table.d.ts +3 -3
  279. package/dist/lang/symbol-table.generated.d.ts +10 -0
  280. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  281. package/dist/lang/symbol-table.generated.js +10 -0
  282. package/dist/lang/symbol-table.generated.js.map +1 -1
  283. package/dist/lang/symbol-table.js +3 -3
  284. package/dist/lang/symbol-table.js.map +1 -1
  285. package/dist/math3d/index.d.ts +1 -1
  286. package/dist/math3d/index.js +1 -1
  287. package/dist/math3d/index.js.map +1 -1
  288. package/dist/mesh/engrave.d.ts +2 -3
  289. package/dist/mesh/engrave.d.ts.map +1 -1
  290. package/dist/mesh/engrave.js +4 -11
  291. package/dist/mesh/engrave.js.map +1 -1
  292. package/dist/mesh/index.d.ts +0 -2
  293. package/dist/mesh/index.d.ts.map +1 -1
  294. package/dist/mesh/index.js +0 -2
  295. package/dist/mesh/index.js.map +1 -1
  296. package/dist/mesh/primitives.d.ts +1 -1
  297. package/dist/mesh/primitives.js +1 -1
  298. package/dist/mesh/primitives.js.map +1 -1
  299. package/dist/node-host/cli.d.ts +20 -4
  300. package/dist/node-host/cli.d.ts.map +1 -1
  301. package/dist/node-host/cli.js +84 -35
  302. package/dist/node-host/cli.js.map +1 -1
  303. package/dist/node-host/execute-script.d.ts.map +1 -1
  304. package/dist/node-host/execute-script.js +3 -4
  305. package/dist/node-host/execute-script.js.map +1 -1
  306. package/dist/node-host/lib-package-json.d.ts +36 -0
  307. package/dist/node-host/lib-package-json.d.ts.map +1 -0
  308. package/dist/node-host/lib-package-json.js +73 -0
  309. package/dist/node-host/lib-package-json.js.map +1 -0
  310. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  311. package/dist/occt-kernel/occt-primitives.js +41 -0
  312. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  313. package/dist/occt-kernel/occtKernel.d.ts +1 -1
  314. package/dist/occt-kernel/occtKernel.js +1 -1
  315. package/dist/occt-kernel/occtKernel.js.map +1 -1
  316. package/dist/runtime-state.d.ts +28 -1
  317. package/dist/runtime-state.d.ts.map +1 -1
  318. package/dist/runtime-state.js +14 -1
  319. package/dist/runtime-state.js.map +1 -1
  320. package/dist/sdk.d.ts +2 -2
  321. package/dist/sdk.d.ts.map +1 -1
  322. package/dist/sdk.js +11 -2
  323. package/dist/sdk.js.map +1 -1
  324. package/dist/sketch/bspline.d.ts +58 -0
  325. package/dist/sketch/bspline.d.ts.map +1 -0
  326. package/dist/sketch/bspline.js +104 -0
  327. package/dist/sketch/bspline.js.map +1 -0
  328. package/dist/sketch/canonical.d.ts +239 -0
  329. package/dist/sketch/canonical.d.ts.map +1 -0
  330. package/dist/sketch/canonical.js +17 -0
  331. package/dist/sketch/canonical.js.map +1 -0
  332. package/dist/sketch/contour.d.ts +43 -0
  333. package/dist/sketch/contour.d.ts.map +1 -0
  334. package/dist/sketch/contour.js +202 -0
  335. package/dist/sketch/contour.js.map +1 -0
  336. package/dist/sketch/dim-spec.d.ts +32 -0
  337. package/dist/sketch/dim-spec.d.ts.map +1 -0
  338. package/dist/sketch/dim-spec.js +112 -0
  339. package/dist/sketch/dim-spec.js.map +1 -0
  340. package/dist/sketch/faces.d.ts +45 -0
  341. package/dist/sketch/faces.d.ts.map +1 -0
  342. package/dist/sketch/faces.js +108 -0
  343. package/dist/sketch/faces.js.map +1 -0
  344. package/dist/sketch/fcstd-types.d.ts +194 -0
  345. package/dist/sketch/fcstd-types.d.ts.map +1 -0
  346. package/dist/sketch/fcstd-types.js +67 -0
  347. package/dist/sketch/fcstd-types.js.map +1 -0
  348. package/dist/sketch/index.d.ts +46 -0
  349. package/dist/sketch/index.d.ts.map +1 -0
  350. package/dist/sketch/index.js +39 -0
  351. package/dist/sketch/index.js.map +1 -0
  352. package/dist/sketch/node.d.ts +14 -0
  353. package/dist/sketch/node.d.ts.map +1 -0
  354. package/dist/sketch/node.js +43 -0
  355. package/dist/sketch/node.js.map +1 -0
  356. package/dist/sketch/op.d.ts +111 -0
  357. package/dist/sketch/op.d.ts.map +1 -0
  358. package/dist/sketch/op.js +185 -0
  359. package/dist/sketch/op.js.map +1 -0
  360. package/dist/sketch/planegcs-backend.d.ts +69 -0
  361. package/dist/sketch/planegcs-backend.d.ts.map +1 -0
  362. package/dist/sketch/planegcs-backend.js +812 -0
  363. package/dist/sketch/planegcs-backend.js.map +1 -0
  364. package/dist/sketch/project.d.ts +176 -0
  365. package/dist/sketch/project.d.ts.map +1 -0
  366. package/dist/sketch/project.js +656 -0
  367. package/dist/sketch/project.js.map +1 -0
  368. package/dist/sketch/shapes.d.ts +370 -0
  369. package/dist/sketch/shapes.d.ts.map +1 -0
  370. package/dist/sketch/shapes.js +959 -0
  371. package/dist/sketch/shapes.js.map +1 -0
  372. package/dist/sketch/solve.d.ts +21 -0
  373. package/dist/sketch/solve.d.ts.map +1 -0
  374. package/dist/sketch/solve.js +144 -0
  375. package/dist/sketch/solve.js.map +1 -0
  376. package/dist/sketch/solver-loader.d.ts +47 -0
  377. package/dist/sketch/solver-loader.d.ts.map +1 -0
  378. package/dist/sketch/solver-loader.js +77 -0
  379. package/dist/sketch/solver-loader.js.map +1 -0
  380. package/dist/sketch/solver.d.ts +63 -0
  381. package/dist/sketch/solver.d.ts.map +1 -0
  382. package/dist/sketch/solver.js +28 -0
  383. package/dist/sketch/solver.js.map +1 -0
  384. package/dist/sketch/verify.d.ts +53 -0
  385. package/dist/sketch/verify.d.ts.map +1 -0
  386. package/dist/sketch/verify.js +71 -0
  387. package/dist/sketch/verify.js.map +1 -0
  388. package/dist/weapp.d.ts +1 -1
  389. package/dist/weapp.d.ts.map +1 -1
  390. package/dist/weapp.js +1 -1
  391. package/dist/weapp.js.map +1 -1
  392. package/package.json +43 -11
@@ -1 +1 @@
1
- {"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器\n *\n * Phase 4:\n * 本文件是 L1 契约 `BrepEngineApi` 的 **brepkit 显式对象字面量实现**——与 occt 侧\n * `occt-primitives.ts` 同构:逐方法接线、方言在适配器内消化、零 `unsupported()` 桩。\n *\n * 契约面收窄后 L1 只含 occt/brepkit 双方**语义可对齐**的方法(唯一真源:\n * `api/surface/engine-method-map.json` 的 aligned/dialect 条目)。brepkit 独有\n * 能力(chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean、\n * minkowskiSum …)与单方语义(loft、平面 section/split 之外的 splitter 语义…)\n * 都不在本对象里——平台代码经原生面 `getBrepkitKernel()`(D3)访问。\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理)。\n */\n\nimport { initBrepkitWasm, resetBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport { DEFAULT_LINEAR_DEFLECTION } from '../tolerance'\nimport { mm } from '../units'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { BREP_HASH_BOUND } from '../brep/engine/types'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepNurbsCurveData,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle ──\n//\n// GOTCHA(2026-10-01 实测,本文件最容易踩的坑):brepkit 句柄是**按类型分命名空间的裸 u32**\n// ——同一个 box 上 solid=0、face=0..5、edge=0..11 同时存在,且**内核没有任何可靠的类型判别式**:\n// getEdgeCurveType(0) / edgeLength(0) → 命中 edge 0\n// getFaceEdges(0) / getFaceNormal(0) → 命中 face 0\n// getSolidFaces(0) → 命中 solid 0\n// 三者对同一个数字 0 各自返回「自己命名空间里 0 号」的数据,谁都不抛错(`getSolidFaces(1)` 才抛)。\n// 因此「拿句柄去问内核它是什么类型」在 brepkit 上**不可能实现**。\n//\n// 但 L1 契约里 `hashCode(handle)` 只收到一个数字,必须知道类型才能选面/边指纹函数。\n// 解法:适配器在**出口**把类型编进句柄高位。类型随句柄流动,`asNum()` 剥掉标签后仍是内核\n// 裸句柄号——内部集合(knownFaces/knownEdges/…)、hashRegistry、全部 `kernel.*` 调用语义不变。\n// 高 3 位(bit 26..28)放类型;虚拟 compound 句柄从 bit 29(0x20000000)起分配,互不干扰。\n// 注意 `asNum` 用**算术减法**而非 `& ~KIND_MASK`:后者把 ≥2^31 的虚拟句柄按 int32 截断成负数。\nconst KIND_SHIFT = 26\nconst KIND_MASK = 7 << KIND_SHIFT\nconst KIND_SOLID = 0 << KIND_SHIFT // 也是 compound / 未登记句柄的默认类\nconst KIND_FACE = 1 << KIND_SHIFT\nconst KIND_EDGE = 2 << KIND_SHIFT\nconst KIND_WIRE = 3 << KIND_SHIFT\nconst KIND_VERTEX = 4 << KIND_SHIFT\n\n/** 句柄类型标签(0 = SOLID/COMPOUND 默认类)。 */\nconst kindOf = (h: BrepHandle): number => (h as unknown as number) & KIND_MASK\n/** 剥掉类型标签,得到 brepkit 内核裸句柄号——所有 `kernel.*` 调用必须用这个。 */\nconst asNum = (h: BrepHandle): number => {\n const n = h as unknown as number\n return n - (n & KIND_MASK)\n}\n/** 实体/compound 句柄(默认类,保持历史行为:无标签 ⇒ 内核按 solid 路径分发)。 */\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asFace = (n: number): BrepHandle => (n | KIND_FACE) as BrepHandle\nconst asEdge = (n: number): BrepHandle => (n | KIND_EDGE) as BrepHandle\nconst asWire = (n: number): BrepHandle => (n | KIND_WIRE) as BrepHandle\nconst asVertex = (n: number): BrepHandle => (n | KIND_VERTEX) as BrepHandle\n/** 按已有类型标签给裸句柄重新打标签(copy/transform 族保持入参类型)。 */\nconst withKind = (kind: number, n: number): BrepHandle => {\n switch (kind) {\n case KIND_FACE: return asFace(n)\n case KIND_EDGE: return asEdge(n)\n case KIND_WIRE: return asWire(n)\n case KIND_VERTEX: return asVertex(n)\n default: return asHandle(n)\n }\n}\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/** 适配器内部的显式失败(替代旧 unsupported 桩:能力缺失一律在静态判定拦截,不在实现体里伪装)。 */\nfunction fail(detail: string): never {\n throw new Error(`[brepkit-kernel] ${detail}`)\n}\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/**\n * brepkit 无任何 hash API(228 个方法里没有 hashCode/subShapeHashes)——faijs 侧的\n * 面/边 hash 全部由适配器**合成指纹**,因此「合成函数」与「消费函数的取模上界」\n * 必须同源:\n * - 消费端 `topologyExt.buildSelectorManifestCore` 用\n * `kernel.hashCode(subShape, BREP_HASH_BOUND)` 回查 faceGroups/edgeGroups 里的 hash;\n * - 生产端(本文件的 solidMesh / faceMesh / compoundMesh / wireframe)必须用**同一个**\n * `BREP_HASH_BOUND` 生成,否则查表恒 miss。\n *\n * GOTCHA(2026-10-01 实测修复):本文件此前生产端用 1e9、消费端用 2147483647,\n * 导致 brepkit 引擎下面行的 triStart/triCount 恒为 0(面积/法向随之丢失)。\n */\nfunction fnv1a(basis: string, upperBound: number): number {\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n return fnv1a(`${params}|${area.toFixed(6)}`, upperBound)\n}\n\n/**\n * 边稳定指纹:曲线类型 + 参数区间 + 两端/中点采样 + 长度 → FNV-1a。\n *\n * 为什么不能用 `faceFingerprint`:它对边恒得同一个值(`getAnalyticSurfaceParams`\n * 与 `faceArea` 对 edge 句柄都抛错)——旧实现在 box 上 12 条边 hash 全同,\n * 使 `topologyExt` 的 edgeGroupByHash 只留最后一条折线(实测 2026-10-01)。\n *\n * 为什么不能只用端点:整圆(圆柱端盖)首末点重合,z 不同的两个圆会撞 —\n * 故补 UV 中点采样。`getBoundingBox(edge)` 在 brepkit 上抛错,不可用。\n */\nfunction edgeFingerprint(kernel: BrepKitKernel, edge: number, upperBound: number): number {\n let curveType = ''\n try { curveType = String(kernel.getEdgeCurveType(edge) ?? '') } catch { /* 非边 */ }\n let range = ''\n let mid = ''\n try {\n // 方言:`getEdgeCurveParameters` 返回 **Float64Array**(如 [0, 10]),不是 JSON 字符串\n // (见本文件头的返回值归一化说明)。曾误用 JSON.parse → 恒定抛错 → range/mid 恒空,\n // 于是所有同类型同长度的边(box 的 12 条棱)挤成同一个指纹(2026-10-01 实测)。\n const p = toNumArray(kernel.getEdgeCurveParameters(edge))\n const first = p[0] ?? 0\n const last = p[1] ?? 0\n range = `${first.toFixed(9)},${last.toFixed(9)}`\n const midT = (first + last) / 2\n const sample = (t: number): string => toNumArray(kernel.evaluateEdgeCurve(edge, t)).map((x) => x.toFixed(6)).join(',')\n mid = `${sample(first)}|${sample(midT)}|${sample(last)}`\n } catch { /* 采样失败 → 退化为类型 + 空几何 */ }\n let length = 0\n try { length = Number(kernel.edgeLength(edge) ?? 0) } catch { /* 长度不可用用 0 */ }\n return fnv1a(`${curveType}|${range}|${mid}|${length.toFixed(6)}`, upperBound)\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // registry 登记的是 hash→handle(输入面)。下游 decodeEvolution/decodeHashEvolution 期望\n // modified 为 OCCT 分段格式 [inHash, count, outHash1, outHash2, ...](见 face-evolution.ts),\n // 不是扁平 hash 列表——GOTCHA:曾误返回扁平列表,把 modified[1](一个 hash ~1e9)当成\n // count,导致 decodeHashEvolution 空转 17 亿次 push 抛 \"Invalid array length\"(2026-09-26 实证)。\n // 故这里反向建 handle→hash 表,逐条目拼出 [inHash, outCount, ...outHashes]。\n const registry = hashRegistry.get(kernel)\n const handleToHash = new Map<number, number>()\n if (registry) for (const [h, handle] of registry) handleToHash.set(handle, h)\n const modified: number[] = []\n const deleted: number[] = []\n for (const oldHandle of deletedKeys) {\n const h = handleToHash.get(oldHandle)\n if (h !== undefined) deleted.push(h)\n }\n for (const [oldHandleStr, newHandles] of Object.entries(evo.modified ?? {})) {\n const inHash = handleToHash.get(Number(oldHandleStr))\n if (inHash === undefined) continue\n const outHashes = (newHandles as number[]).map((nh) => faceFingerprint(kernel, nh, hashUpperBound))\n modified.push(inHash, outHashes.length, ...outHashes)\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断 + 网格实体原语。 */\ntype BrepkitEngineExtras = BrepEngineApi & {\n getMeshFallbackCount(): number\n /**\n * 网格实体原语(`brep/mesh-solid.ts` 的 `MeshSolidKernelOps`)。\n *\n * 为什么放在适配器而不是 L1 契约面:`weldShellsAndFaces` / `unifyFaces` 是\n * brepkit **内核私有**的缝合/合并原语(L1 `BrepEngineApi` 没有对应概念——\n * OCCT 侧用 `sew`+`unifySameDomain` 才有等价语义,形态不同)。挂在适配器\n * 返回对象上,网格后端(`MeshSolidBackend`)经端口取用,契约面保持干净。\n */\n meshSolid: import('../brep/mesh-solid').MeshSolidKernelOps\n}\n\n/**\n * 三点外接圆(makeArcEdge 方言消化:occt 吃 3 点,brepkit 吃圆心+轴)。\n *\n * 圆心偏移取标准式 `d = ( |ab|²·(ac×n) + |ac|²·(n×ab) ) / (2·|n|²)`,`n = ab×ac`。\n * GOTCHA(弧缺陷,2026-09-30 实证):旧式 `( |ac|²·(ab×n) + |ab|²·(n×ac) ) / (2·|n|²)`\n * 把两项的系数对调,等于整体取反——圆心落到弦的另一侧(实测 quarter arc 圆心 (20,0,0)\n * 而非 (0,0,0),三点不等距),brepkit 据此生成 333° 的补弧(弧长 58.195 而非 πr/2)。\n * 判据是等距不变量 `|center−a| = |center−b| = |center−c|`。\n *\n * axis = n/|n| 即三点逆时针扫掠方向的右手法向;brepkit `makeCircleArc3d` 语义为\n * \"沿法向看从 start 逆时针到 end\",故该轴向同时正确表达 ccw 与 cw 弧。\n */\nfunction circumcircle(a: BrepVec3, b: BrepVec3, c: BrepVec3): { center: BrepVec3; axis: BrepVec3 } {\n const abx = b.x - a.x, aby = b.y - a.y, abz = b.z - a.z\n const acx = c.x - a.x, acy = c.y - a.y, acz = c.z - a.z\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const n2 = nx * nx + ny * ny + nz * nz\n if (n2 < 1e-18) fail('makeArcEdge: 3 points are collinear (no circumscribed circle)')\n const ab2 = abx * abx + aby * aby + abz * abz\n const ac2 = acx * acx + acy * acy + acz * acz\n // center = a + ( ab2·(ac×n) + ac2·(n×ab) ) / (2·n²)\n const acxnx = acy * nz - acz * ny, acxny = acz * nx - acx * nz, acxnz = acx * ny - acy * nx\n const nxabx = ny * abz - nz * aby, nxaby = nz * abx - nx * abz, nxabz = nx * aby - ny * abx\n const denom = 2 * n2\n const len = Math.sqrt(n2)\n return {\n center: {\n x: a.x + (ab2 * acxnx + ac2 * nxabx) / denom,\n y: a.y + (ab2 * acxny + ac2 * nxaby) / denom,\n z: a.z + (ab2 * acxnz + ac2 * nxabz) / denom,\n },\n axis: { x: nx / len, y: ny / len, z: nz / len },\n }\n}\n\n/** BrepVec3[] → 扁平 Float64Array(brepkit 坐标数组方言)。 */\nfunction flattenPoints(points: BrepVec3[]): Float64Array {\n const out = new Float64Array(points.length * 3)\n for (let i = 0; i < points.length; i++) {\n out[i * 3] = points[i].x\n out[i * 3 + 1] = points[i].y\n out[i * 3 + 2] = points[i].z\n }\n return out\n}\n\n/**\n * 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。\n * 与 occt 的 createOcctPrimitives 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n // GOTCHA(2026-10-01):本函数此前每次调用都新建一套闭包(knownFaces/knownSolids/\n // derivedFaces…)——即**新建一套句柄桥接层**。句柄号虽然对同一个 wasm 内核全局有效,\n // 但桥接层侧的类型登记表不同:A 层枚举出的面句柄交给 B 层做 getSubShapes,会被当\n // 实体走 tessellateSolidGrouped。BREP 引擎装配点与网格后端装配点都调本函数,必须\n // 拿到**同一个**对象。故按内核实例 memo 化(disposeBrepkit 会清掉)。\n if (memoizedPrimitives && memoizedKernel === kernel) return memoizedPrimitives\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') / makeRectangle / makeFace / buildTriFace\n // 返回的面在此登记;extrude/revolveVec 的 face 输入断言、getSubShapes 的\n // edge/vertex 分发都据此判定(brepkit 无 shape-type 分类 API,见下方注释)。\n const knownFaces = new Set<number>()\n // GOTCHA(2026-09-26 非实体句柄修复):brepkit 的 tessellateSolidGrouped / getSolidFaces\n // 等 *Solid API 只吃 solid 句柄,传 face/wire/edge/compound 即抛\n // \"invalid solid handle: index N out of bounds\"。而 brepkit **没有 shape-type 分类 API**\n // (getFaceEdges(solid) 不抛错、会返回某一面的边,不能 try/catch 探测)。故 meshShape\n // 必须靠这组「已知句柄集合」在执行前静态分发,而不是运行时探测:\n // knownFaces → tessellateFace(JsMesh)\n // knownWires → getWireEdges + tessellateEdge 逐边采样成线段\n // knownEdges → tessellateEdge 直接采样成线段(wire.ts smooth 路径 interpolatePoints 返回 edge)\n // knownCompounds→ 逐子句柄按其类型 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)\n // 不在任何集合里的句柄一律按 solid 走 tessellateSolidGrouped(实体创建不入集合,天然落此路径)。\n const knownWires = new Set<number>()\n const knownEdges = new Set<number>()\n // GOTCHA: getSolidFaces returns GLOBAL face indices (0..5, 6..11, ...) that collide\n // with solid handles (per-type namespace). Enumerated sub-faces must NOT pollute\n // knownFaces, else measuring a later solid whose handle number equals an old\n // enumerated face gets mis-tessellated as a face. derivedFaces is consulted ONLY by\n // getSubShapes edge/vertex drilling, never by meshShape/getBoundingBox.\n const derivedFaces = new Set<number>()\n // 虚拟 compound 句柄计数器(非实体子句柄不进内核 makeCompound,见 makeCompound GOTCHA)。\n const knownCompounds = new Map<number, number[]>()\n let virtualCompoundCounter = 0\n // GOTCHA(2026-09-26):brepkit 句柄按**类型分命名空间**——solid/face/wire/edge 各自从 0 计数\n // (实测 edge=wire=face=solid=0 可共存)。因此「某编号 N 在 knownFaces」与「某编号 N 是 solid」\n // 并不互斥:新 solid 恰好复用了早先某 face 的编号时,knownFaces.has(N) 会把 solid 误判成 face\n // (实测 box makeBox 返回 solid 2,撞 profile 早先的 face 2 → cloneShape 走 copyFace 崩溃)。\n // 建 solid 时必须从 knownFaces/knownWires/knownEdges/derivedFaces 抹掉该编号,让默认 solid 路径生效。\n // derivedFaces 也必须清:getSubShapes(solid,'edge') 会查 derivedFaces.has(s) 误走 getFaceEdges。\n // GOTCHA(2026-10-01 实测):`derivedFaces` 是**全局**面句柄号集合,枚举 solid A 的面会把\n // 面号 0..N 写进去;此后对**裸句柄号恰好相同的另一个 solid**做 getSubShapes(...,'edge')\n // 时,`derivedFaces.has(s)` 为真 → isFaceLike 误判 → 走 getFaceEdges 只拿到一张面的 4 条边\n // (实测 box:12 条边变 4 条)。故必须显式登记 solid 句柄:实体永远不是 face-like。\n const knownSolids = new Set<number>()\n const markSolid = (h: number): number => {\n knownFaces.delete(h); knownWires.delete(h); knownEdges.delete(h); knownCompounds.delete(h); derivedFaces.delete(h)\n knownSolids.add(h)\n return h\n }\n /** 实体数组批量登记(阵列族返回多个实体)。 */\n const markSolids = (list: number[]): number[] => list.map(markSolid)\n /**\n * 句柄类型解析:**标签优先**,无标签时退回已知集合(历史行为)。\n *\n * 标签是权威来源——集合的 key 是**裸句柄号**,face 3 与 edge 3 会共存于不同集合,\n * 靠集合无法区分。故有标签(非 0)时直接用标签,集合里的同名条目一律忽略;\n * 只有无标签句柄(实体/compound/构造 API 外传入)才走集合分发,行为与加标签前一致。\n */\n const resolveKind = (shape: BrepHandle, s: number): number => {\n const tagged = kindOf(shape)\n if (tagged !== KIND_SOLID) return tagged\n // 已登记的实体优先:knownFaces/knownEdges 的 key 是裸句柄号,历史登记(如\n // getSubShapes(face,'edge') 写 knownEdges)与后来新建的 solid 号同号时会把实体判成边。\n if (knownSolids.has(s)) return KIND_SOLID\n if (knownFaces.has(s)) return KIND_FACE\n if (knownWires.has(s)) return KIND_WIRE\n if (knownEdges.has(s)) return KIND_EDGE\n return KIND_SOLID\n }\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const faceCenterOfMass = (face: BrepHandle): BrepVec3 => {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n const u = ((d[0] ?? 0) + (d[1] ?? 1)) / 2\n const v = ((d[2] ?? 0) + (d[3] ?? 1)) / 2\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n }\n\n // ── 非实体 tessellation 助手(meshShape 分发用) ──\n // GOTCHA:tessellateFace 返回 JsMesh(positions/normals 为 Float64Array、indices 为 Uint32Array),\n // **不是** tessellateSolidGrouped 的 JSON 字符串——两者形态不同,勿混用 JSON.parse。\n type JsMesh = { positions: ArrayLike<number>; normals: ArrayLike<number>; indices: ArrayLike<number>; vertexCount: number; triangleCount: number }\n\n /** 单个 face → BrepMeshResult(tessellateFace)。 */\n const faceMesh = (f: number, deflection: number, angular: number): BrepMeshResult => {\n const jm = kernel.tessellateFace(f, deflection, angular) as JsMesh\n const positions = arr(jm.positions)\n const normals = arr(jm.normals)\n const indices = arr(jm.indices)\n const triCount = jm.triangleCount > 0 ? jm.triangleCount : indices.length / 3\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: triCount,\n faceGroups: new Int32Array([0, indices.length, faceFingerprint(kernel, f, BREP_HASH_BOUND)]),\n faceCount: 1,\n }\n }\n\n /** 一组 edge 句柄 → 线段 mesh(positions 为采样点、indices 为端点对)。 */\n // GOTCHA:tessellateEdge(edge, N) 返回扁平 [x,y,z,...] 采样点(NURBS 才采样 N 点,\n // 直线边只回端点),不是三角网格;wire/curve 显示吃「端点对」索引(与 mesh 路径 wireMesh 同构)。\n const edgesToLineMesh = (edgeHandles: number[], deflection: number): BrepMeshResult => {\n const positions: number[] = []\n const indices: number[] = []\n // 采样密度:按 deflection 粗采样即可(1D 线框显示,非精确几何)。\n const nPts = Math.max(12, Math.round(4 / Math.max(deflection, 0.01)))\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n const base = positions.length / 3\n for (let i = 0; i < pts.length; i++) positions.push(pts[i]!)\n const verts = pts.length / 3\n for (let i = 0; i < verts - 1; i++) indices.push(base + i, base + i + 1)\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(positions.length),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: 0,\n faceGroups: new Int32Array(0),\n faceCount: 0,\n }\n }\n\n /** wire → 线段 mesh(getWireEdges 取边集后逐边采样)。 */\n const wireMesh = (wire: number, deflection: number): BrepMeshResult => {\n const edges = arr(kernel.getWireEdges(wire))\n return edgesToLineMesh(edges, deflection)\n }\n\n /** solid → BrepMeshResult(tessellateSolidGrouped,原 meshShape 实体路径抽出)。 */\n const solidMesh = (solid: number, deflection: number, angular: number): BrepMeshResult => {\n const raw = kernel.tessellateSolidGrouped(solid, deflection, angular)\n // GOTCHA (2026-10-10, real-device iOS): tessellateSolidGrouped once returned\n // undefined on WeChat's JavaScriptCore worker; the unguarded JSON.parse(undefined)\n // threw the engine-specific \"JSON Parse error: Unexpected identifier \\\"undefined\\\"\",\n // which toOpFailure wrapped into an unlocatable E_OP_FAILED. Fail loudly with\n // handle/param context instead — reporting beats masking, and this also surfaces\n // null / object / other non-string shapes (JSON.parse's implicit ToString would\n // otherwise mangle them into unrecognizable messages).\n if (typeof raw !== 'string') {\n fail(`tessellateSolidGrouped(${solid}, deflection=${deflection}, angular=${angular}) returned ${typeof raw} (${String(raw)}); expected a JSON string`)\n }\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移\n // (2026-09-19 实测)。**L1 契约的 faceGroups 就是索引单位**(与 OCCT 一致,\n // 见 brep/engine/types.BrepMeshResult)——此处原样透传,不得再除以 3。\n // GOTCHA(2026-10-01):旧实现除以 3 换成三角形单位,与 topologyExt 的 `/3`\n // 叠加 → 面行区间缩小 3 倍。\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(solid))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i]!, BREP_HASH_BOUND))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i]!\n faceGroups[i * 3 + 1] = fo[i + 1]! - fo[i]!\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n }\n\n /** compound → 逐子句柄 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)。 */\n const compoundMesh = (children: number[], deflection: number, angular: number): BrepMeshResult => {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const faceGroups: number[] = []\n let indexOffset = 0\n for (const c of children) {\n let sub: BrepMeshResult\n if (knownFaces.has(c)) {\n sub = faceMesh(c, deflection, angular)\n } else if (knownWires.has(c)) {\n sub = wireMesh(c, deflection)\n } else if (knownEdges.has(c)) {\n sub = edgesToLineMesh([c], deflection)\n } else {\n // 子句柄按 solid 处理(importStep 多实体 / makeCompound(solids))。\n sub = solidMesh(c, deflection, angular)\n }\n const vOffset = positions.length / 3\n for (let i = 0; i < sub.positions.length; i++) positions.push(sub.positions[i]!)\n for (let i = 0; i < sub.normals.length; i++) normals.push(sub.normals[i] ?? 0)\n for (let i = 0; i < sub.indices.length; i++) indices.push(sub.indices[i]! + vOffset)\n if (sub.faceGroups) {\n for (let i = 0; i < sub.faceGroups.length; i += 3) {\n faceGroups.push((sub.faceGroups[i] ?? 0) + indexOffset, sub.faceGroups[i + 1] ?? 0, sub.faceGroups[i + 2] ?? 0)\n }\n }\n indexOffset += sub.indices.length\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: indices.length / 3,\n faceGroups: new Int32Array(faceGroups),\n faceCount: faceGroups.length / 3,\n }\n }\n\n // ── 按句柄类型深拷贝(transform/copy 族分发用) ──\n // GOTCHA:brepkit copySolid/copyFace/copyWire 三者入参严格对应 solid/face/wire 句柄,\n // 传错即崩溃;transformSolid/transformFace/transformWire 均为「原地修改」void。\n // place/translate 等会作用在 profile 产出的 face 上(sew 用例 place 两张 face),\n // 故必须按 knownFaces/knownWires 分发,不能一律 copySolid。\n // kind 为调用方句柄的类型标签(0 = solid):句柄标签是**权威判定**,knownFaces/knownWires\n // 只作无标签时的兜底(枚举出的面句柄只进 derivedFaces,不在 knownFaces 里)。\n const cloneShape = (shape: number, kind: number = KIND_SOLID): number => {\n if (kind === KIND_FACE || knownFaces.has(shape)) { const c = kernel.copyFace(shape); knownFaces.add(c); return c }\n if (kind === KIND_WIRE || knownWires.has(shape)) { const c = kernel.copyWire(shape); knownWires.add(c); return c }\n return markSolid(kernel.copySolid(shape))\n }\n\n /** 深拷贝 + 原地仿射变换(matrix 已经 toKernelMatrix 归一为 16 元素 4×4)。 */\n const cloneAndTransform = (shape: number, matrix16: number[], kind: number = KIND_SOLID): number => {\n const c = cloneShape(shape, kind)\n const m = Float64Array.from(matrix16)\n if (kind === KIND_FACE || knownFaces.has(c)) kernel.transformFace(c, m)\n else if (kind === KIND_WIRE || knownWires.has(c)) kernel.transformWire(c, m)\n else kernel.transformSolid(c, m)\n return c\n }\n\n // ── 扫掠 / 放样共用助手(L1 中立名 sweep/loft 的 brepkit 方言消化)──\n\n /** 截面句柄(面直用、wire 升面)→ brepkit face 句柄号(升面结果登记 knownFaces)。 */\n const profileFaceOf = (section: BrepHandle, what: string): number => {\n const n = asNum(section)\n const kind = resolveKind(section, n)\n if (kind === KIND_FACE) return n\n if (kind === KIND_WIRE) {\n // GOTCHA(与 makeFace 同因):makeFaceFromWire 产出的是**新** face 句柄号,\n // 不登记 knownFaces 的话,后续任何按类型分发的调用(meshShape / 再扫掠)\n // 会把它当 solid 走 tessellateSolidGrouped 崩溃。\n const f = kernel.makeFaceFromWire(n)\n knownFaces.add(f)\n return f\n }\n return fail(`${what} requires a planar face or a closed wire; got a handle that is neither`)\n }\n\n /** edge 的参数域 `[first, last]`(brepkit `getEdgeCurveParameters` 返回 Float64Array)。 */\n const curveParamsOf = (edge: number): [number, number] => {\n const d = toNumArray(kernel.getEdgeCurveParameters(edge))\n return [d[0] ?? 0, d[d.length - 1] ?? 1]\n }\n\n /** 相邻重复点去重(折线链顶点与采样点列共用;容差 1e-9 mm)。 */\n const pushUnique = (out: BrepVec3[], p: BrepVec3): void => {\n const last = out[out.length - 1]\n if (\n last !== undefined &&\n Math.abs(last.x - p.x) < 1e-9 &&\n Math.abs(last.y - p.y) < 1e-9 &&\n Math.abs(last.z - p.z) < 1e-9\n ) return\n out.push(p)\n }\n\n /** 折线链顶点:各线的首点 + 末线终点(供 degree=1 插值,拐角不圆化)。 */\n const lineChainVertices = (edges: number[]): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0))))\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t1))))\n }\n return out\n }\n\n /** 曲线链按参数等分采样(每条边 perEdge 段),供 NURBS 拟合。 */\n const sampleChainPoints = (edges: number[], perEdge = 8): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n for (let i = 0; i <= perEdge; i++) {\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0 + (t1 - t0) * (i / perEdge)))))\n }\n }\n return out\n }\n\n /**\n * 路径 wire → 一条可作 brepkit 扫掠路径的 NURBS edge(方案 §4.1 三条路线)。\n *\n * - 路线 3:单条 NURBS/Bézier 边 → 原样返回,零损失;\n * - 路线 1:折线 wire(`cad.wire` 默认产物,全 line 边)→ 顶点列 + **degree=1** 插值。\n * 一次 NURBS 的基就是折线,这不是近似而是精确表示 —— 比一律 degree=3 拟合更忠实;\n * - 路线 2:含圆弧等曲线边 → 按参数等分采样后 degree=3 拟合(近似,方案 §8 已声明代价)。\n *\n * GOTCHA-1:`getNurbsCurveData` 对解析边(line/circle)**抛错**而非返回 null,\n * 「先拿它探路、失败再拟合」会踩坑 —— 必须**先**判 `getEdgeCurveType` 再选路线。\n *\n * GOTCHA-2(2026-10-10 实测):**不要**走 `kernel.sweep(face, degree, knots, ctrl, weights)`\n * —— 本仓 `getNurbsCurveData` 给出的 `knots`(去重值 + 平行 multiplicities)展开后\n * 与 brepkit `sweep` 期望的节点向量长度不一致,实测报\n * `invalid knot vector: expected 2 knots, got 6`。改用直吃 edge 句柄的\n * `sweepWithOptions`(本 helper 因此返回 edge 而不是四数组),绕开该约定差异。\n */\n const wireToSpineEdge = (spine: BrepHandle): number => {\n const w = asNum(spine)\n if (resolveKind(spine, w) !== KIND_WIRE) fail('sweep: spine must be a wire')\n const edges = arr(kernel.getWireEdges(w))\n if (edges.length === 0) fail('sweep: spine wire has no edges')\n const typeOf = (e: number): string => String(kernel.getEdgeCurveType(e)).toUpperCase()\n const ANALYTIC = new Set(['LINE', 'CIRCLE', 'ELLIPSE'])\n // 路线 3:单条非解析边(NURBS/Bézier)原样用,零损失。\n if (edges.length === 1 && !ANALYTIC.has(typeOf(edges[0]!))) return edges[0]!\n // 路线 1 / 2:采样点列 → interpolatePoints 拟合成一条 NURBS 边。\n const allLines = edges.every((e) => typeOf(e) === 'LINE')\n const pts = allLines ? lineChainVertices(edges) : sampleChainPoints(edges)\n if (pts.length < 2) fail('sweep: spine wire degenerates to fewer than 2 distinct points')\n const degree = allLines ? 1 : Math.min(3, pts.length - 1)\n // GOTCHA:brepkit 内核是 **GC 型**,没有 `release` 方法(HAND_MAP 里 core:'release'\n // 的 brepkit 侧为 null,适配器 no-op)——这里不能 `kernel.release(fit)`;\n // 拟合边登记进 knownEdges 后由内核统一管理生命周期。\n const fit = kernel.interpolatePoints(flattenPoints(pts), degree)\n knownEdges.add(fit)\n return fit\n }\n\n const api: BrepkitEngineExtras = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(markSolid(kernel.makeBox(dx, dy, dz))) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = markSolid(kernel.makeBox(dx, dy, dz))\n // ⚠️ transformSolid 是「原地修改、返回 undefined」——makeBox 的句柄本身即新实体,\n // 直接原地变换后返回 h;若写 `asHandle(transformSolid(...))` 会拿到 undefined 句柄\n // (2026-09-25 实证:导致 splitBrep 基于半空间盒的 common/cut 全部失效)。\n kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n )))\n return asHandle(h)\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCylinder(radius, height))) },\n makeSphere(radius: number): BrepHandle { return asHandle(markSolid(kernel.makeSphere(radius, 32))) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCone(r1, r2, height))) },\n makeRectangle(width: number, height: number): BrepHandle {\n const f = kernel.makeRectangle(width, height)\n knownFaces.add(f)\n return asFace(f)\n },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(markSolid(kernel.makeEllipsoid(rx, ry, rz))) },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(markSolid(kernel.makeTorus(majorRadius, minorRadius, 64))) },\n makeVertex(x: number, y: number, z: number): BrepHandle { return asVertex(kernel.makeVertex(x, y, z)) },\n\n // ── 造型运算 ──\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n // 方言归一(§3.6-1):L1 口径是挤出向量;brepkit 原生吃 (face, dir, distance)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('extrude requires a face input (plan §3.6-1); got a handle that is not a known face')\n }\n const len = Math.hypot(dx, dy, dz)\n if (len === 0) fail('extrude: zero-length extrusion vector')\n return asHandle(markSolid(kernel.extrude(s, dx / len, dy / len, dz / len, len)))\n },\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle {\n // 方言归一:brepkit revolve 只吃 face(与 extrude 同族断言)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('revolveVec requires a face input; got a handle that is not a known face')\n }\n return asHandle(markSolid(kernel.revolve(\n s, center.x, center.y, center.z, direction.x, direction.y, direction.z, angleDeg,\n )))\n },\n sweep(profile: BrepHandle, spine: BrepHandle): BrepHandle {\n // L1 中立 sweep:occt 侧走 sweepPipeShell;brepkit 只吃 (face, 路径 edge)\n // —— 两处方言都在这里消化,op 层只看到「截面 + 路径 → 体」。\n // ① 截面 wire → face(开口 wire 建面由内核拒绝;不在适配器预判,内核报错更权威)。\n const faceNum = profileFaceOf(profile, 'sweep')\n // ② 路径 wire → 一条 NURBS edge(见 wireToSpineEdge 的 GOTCHA-2)。\n const pathEdge = wireToSpineEdge(spine)\n // ③ sweepWithOptions:contact_mode 'rmf'(内核默认)、无缩放律、默认分段、光滑转角。\n return asHandle(markSolid(kernel.sweepWithOptions(\n faceNum, pathEdge, 'rmf', new Float64Array(0), 0, 'smooth',\n )))\n },\n loft(sections: BrepHandle[], ruled: boolean, endPoint?: BrepVec3): BrepHandle {\n if (!Array.isArray(sections) || sections.length < 2) {\n fail('loft requires at least 2 sections')\n }\n // ① 各截面 → face。\n const faces = sections.map((s) => profileFaceOf(s, 'loft'))\n // ② brepkit loft 要求各截面**顶点数一致**。内核自己也会抛,但报错不含「哪几个\n // 截面、差多少」——执行前静态判一次,给出可指路的错误;不静默降级、不换引擎\n // (方案 §5②,红线:静态可判的输入约束必须在执行前报错)。\n const counts = faces.map((f) => arr(kernel.getFaceVertices(f)).length)\n const ref = counts[0]!\n if (counts.some((c) => c !== ref)) {\n fail(\n 'E_LOFT_SECTION_MISMATCH: brepkit loft requires every section to have the same ' +\n `vertex count, got [${counts.join(', ')}] — use cad.loftAdvanced (occt) for ` +\n 'sections with different vertex counts',\n )\n }\n const farr = Uint32Array.from(faces)\n // ③ 选项映射:endPoint → loftWithOptions;ruled=false → loftSmooth。\n if (endPoint !== undefined) {\n return asHandle(markSolid(kernel.loftWithOptions(\n farr, JSON.stringify({ ruled, endPoint: [endPoint.x, endPoint.y, endPoint.z] }),\n )))\n }\n return asHandle(markSolid(ruled ? kernel.loft(farr) : kernel.loftSmooth(farr)))\n },\n sew(shapesList: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(markSolid(kernel.sewFaces(Uint32Array.from(shapesList.map(asNum)), tolerance ?? 1e-6)))\n },\n sewAndSolidify(faces: BrepHandle[], _tolerance?: number): BrepHandle {\n // brepkit 的 makeSolid 即「缝合并固化成实体」(sewFaces + 建 solid)。\n return asHandle(markSolid(kernel.makeSolid(Uint32Array.from(faces.map(asNum)))))\n },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle {\n // brepkit 参数序 (solid, thickness, open_faces);tolerance 内核固定。\n return asHandle(markSolid(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum)))))\n },\n hullFromPoints(points: BrepVec3[], _tolerance: number): BrepHandle {\n return asHandle(markSolid(kernel.convexHull(flattenPoints(points))))\n },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.fuse(asNum(a), asNum(b))))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.cut(asNum(a), asNum(b))))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle {\n // brepkit 无 `common` 原生名;交集语义由 `intersect` 承担(method-map: dialect)。\n return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b)))))\n },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b))))) },\n fuseAll(shapesList: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fuseAll(Int32Array.from(shapesList.map(asNum))))))\n },\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[] {\n // brepkit 原生 section(solid, plane) 返回剖面 face 句柄组(§3.6-2 新中立名)。\n // GOTCHA:brepkit section 返回的是 **face** 句柄(不是 edge/wire),必须登记进 knownFaces,\n // 否则 op 层 makeCompound(这些 face) 后送 meshShape 会按 solid 路径崩溃。\n const s = asNum(shape)\n const faces = arr(kernel.section(\n s, point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n for (const f of faces) knownFaces.add(f)\n return faces.map(asHandle)\n },\n splitByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): { positive: BrepHandle; negative: BrepHandle } {\n const parts = arr(kernel.split(\n asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n if (parts.length !== 2) {\n fail(`splitByPlane: expected 2 solids, got ${parts.length}`)\n }\n // 法向正侧 = positive(§3.7):按质心在平面法向的投影分类。\n const originDot = point.x * normal.x + point.y * normal.y + point.z * normal.z\n const side = (h: number): number => {\n const c = toNumArray(kernel.centerOfMass(h, 0.05))\n return (c[0] ?? 0) * normal.x + (c[1] ?? 0) * normal.y + (c[2] ?? 0) * normal.z - originDot\n }\n const [a, b] = parts\n markSolid(a); markSolid(b)\n return side(a) >= side(b)\n ? { positive: asHandle(a), negative: asHandle(b) }\n : { positive: asHandle(b), negative: asHandle(a) }\n },\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.chamfer(asNum(solid), Uint32Array.from(edges.map(asNum)), distance))))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n // 方言映射:L1 chamferDistAngle ↔ brepkit chamferDistanceAngle。\n // ⚠️ 单位方言:L1 口径是**度**(`AddDA(distance, angleDeg, E, F)`),brepkit 内核吃**弧度**\n // (2026-09-25 实证:传 45 抛 \"angle must be less than π/2\";传 π/4 正常倒角)。\n const angleRad = (angleDeg * Math.PI) / 180\n return asHandle(markSolid(trackFallback(kernel.chamferDistanceAngle(\n asNum(solid), Uint32Array.from(edges.map(asNum)), distance, angleRad,\n ))))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fillet(asNum(solid), Uint32Array.from(edges.map(asNum)), radius))))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n // 方言映射:L1 filletVariable(solid, edge, startRadius, endRadius)(单边变半径)\n // ↔ brepkit filletVariable(solid, json) 吃**序列** `[{edge, radius1, radius2}, ...]`。\n // ⚠️ 直接传 4 个位置参数会触发 wasm memory out of bounds(2026-09-25 实证)。\n const spec = JSON.stringify([{ edge: asNum(edge), radius1: startRadius, radius2: endRadius }])\n return asHandle(markSolid(trackFallback(kernel.filletVariable(asNum(solid), spec))))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(translationMatrix(dx, dy, dz)), kindOf(shape)))\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(scaleMatrix(center, factor)), kindOf(shape)))\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n locate(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n copy(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n copyShape(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n composeTransform(m1: number[], m2: number[]): number[] {\n // 方言:L1 是 3×4 行主序 12 元素;brepkit composeTransforms 吃/回 4×4 16 元素。\n const r = kernel.composeTransforms(\n Float64Array.from(toKernelMatrix(m1)),\n Float64Array.from(toKernelMatrix(m2)),\n )\n return Array.from(r as ArrayLike<number>).slice(0, 12)\n },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle {\n return withKind(kindOf(shape), kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z))\n },\n\n // ── 阵列 ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n // 阵列内核返回 compound(原始句柄)→ 拆成实体数组并逐个登记(见 markSolid GOTCHA)。\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n circularPattern(shape: BrepHandle, _center: BrepVec3, axis: BrepVec3, _angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(markSolid(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n )))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n const e = kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z)\n knownEdges.add(e)\n return asEdge(e)\n },\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle {\n // 方言消化:occt 吃 3 点;brepkit makeCircleArc3d 吃 (start,end,center,axis)。\n const { center, axis } = circumcircle(start, mid, end)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n axis.x, axis.y, axis.z,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle {\n // 方言消化:L1 吃控制点(Bezier);brepkit 原生 makeNurbsEdge 吃\n // (start,end,degree,knots,control_points,weights)。Bezier = degree n-1 的\n // clamped NURBS,knots = [0]×n + [1]×n,weights 全 1。\n const n = controlPoints.length\n if (n < 2) fail('makeBezierEdge: need at least 2 control points')\n const degree = n - 1\n const knots = new Float64Array(2 * n)\n for (let i = n; i < 2 * n; i++) knots[i] = 1\n const weights = new Float64Array(n).fill(1)\n const first = controlPoints[0]\n const last = controlPoints[n - 1]\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree, knots, flattenPoints(controlPoints), weights,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic = false,\n ): BrepHandle {\n // 方言消化:L1 吃 occt 形态 (poles, weights, knots, multiplicities, degree),\n // brepkit makeNurbsEdge 吃 (start,end,degree, **展开后** knots, control_points, weights)。\n // 两侧 knots 的表示不同:occt 给「去重值 + 多重度」两个平行数组,brepkit 要\n // 逐项重复后的整条节点向量(与 makeBezierEdge 里手工铺 [0]×n+[1]×n 同一口径)。\n const controlPoints: BrepVec3[] = []\n for (let i = 0; i + 2 < poles.length; i += 3) {\n controlPoints.push({ x: poles[i]!, y: poles[i + 1]!, z: poles[i + 2]! })\n }\n const n = controlPoints.length\n if (n < 2) fail('makeBSplineEdge: need at least 2 poles')\n const expanded: number[] = []\n for (let i = 0; i < knots.length; i++) {\n const rep = multiplicities[i] ?? 1\n for (let j = 0; j < rep; j++) expanded.push(knots[i]!)\n }\n const first = controlPoints[0]!\n const last = controlPoints[n - 1]!\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree,\n Float64Array.from(expanded),\n flattenPoints(controlPoints),\n weights.length === n ? Float64Array.from(weights) : new Float64Array(n).fill(1),\n )\n void periodic\n knownEdges.add(e)\n return asEdge(e)\n },\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle {\n const e = kernel.makeCircleEdge(\n center.x, center.y, center.z, normal.x, normal.y, normal.z, radius,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n const w = kernel.makeWire(Int32Array.from(edges.map(asNum)), false)\n knownWires.add(w)\n return asWire(w)\n },\n makeFace(wire: BrepHandle): BrepHandle {\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asFace(f)\n },\n makeCompound(shapesList: BrepHandle[]): BrepHandle {\n const kids = arr(shapesList.map(asNum))\n // GOTCHA(2026-09-26):brepkit makeCompound 只接受 **solid** 句柄——把 face/wire\n // (sectionByPlane 截面面组)塞进去即抛 \"invalid solid handle\"。非实体子句柄时\n // 不调内核,改用高段虚拟句柄(0x20000000+,避开类型标签 bit26..28),仅靠 knownCompounds 表分发\n // meshShape/wireframe/getSubShapes/getBoundingBox,不触达内核。\n const hasNonSolid = kids.some((k) => knownFaces.has(k) || knownWires.has(k) || knownEdges.has(k) || knownCompounds.has(k))\n if (hasNonSolid) {\n virtualCompoundCounter++\n const v = 0x20000000 + virtualCompoundCounter\n knownCompounds.set(v, kids)\n return asHandle(v)\n }\n const c = kernel.makeCompound(Int32Array.from(kids))\n knownCompounds.set(c, kids)\n return asHandle(c)\n },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n // addHolesToFace 返回**新 face 句柄**(同曲面 + 内孔 wire),必须登记进 knownFaces,\n // 否则 profile(op) 带孔面送 meshShape 会落到 solid 路径崩溃。\n const f = kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum)))\n knownFaces.add(f)\n return asFace(f)\n },\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle {\n const f = kernel.makePolygon(flattenPoints([a, b, c]))\n knownFaces.add(f)\n return asFace(f)\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const angular = options?.angularDeflection ?? 0.5\n const s = asNum(shape)\n // 非实体句柄按类型静态分发(标签优先,见文件头 GOTCHA:brepkit 无 shape-type 分类 API)。\n // 顺序:face → wire → edge → compound → solid。实体创建不入任何集合,天然落 solid 路径。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return faceMesh(s, deflection, angular)\n if (kind === KIND_WIRE) return wireMesh(s, deflection)\n if (kind === KIND_EDGE) return edgesToLineMesh([s], deflection)\n const compoundChildren = knownCompounds.get(s)\n if (compoundChildren) return compoundMesh(compoundChildren, deflection, angular)\n // solid(或未登记句柄):走原 tessellateSolidGrouped 路径。\n return solidMesh(s, deflection, angular)\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const s = asNum(shape)\n // GOTCHA:meshEdgesAll 是 solid-only API——buildTopologyFromMesh 会对 face/wire/edge\n // 产物调 wireframe(...),传入非实体句柄即抛 \"invalid solid handle\"。按已知集合分发:\n // face -> getFaceEdges;wire -> getWireEdges;edge -> [self];否则 solid 走 meshEdgesAll。\n let edgeHandles: number[] | null = null\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) edgeHandles = arr(kernel.getFaceEdges(s))\n else if (kind === KIND_WIRE) edgeHandles = arr(kernel.getWireEdges(s))\n else if (kind === KIND_EDGE) edgeHandles = [s]\n else if (knownCompounds.has(s)) {\n // compound(sectionByPlane 面组):逐子面收集边。\n edgeHandles = []\n for (const k of knownCompounds.get(s)!) {\n if (knownFaces.has(k)) edgeHandles.push(...arr(kernel.getFaceEdges(k)))\n else if (knownWires.has(k)) edgeHandles.push(...arr(kernel.getWireEdges(k)))\n else if (knownEdges.has(k)) edgeHandles.push(k)\n }\n }\n if (edgeHandles) {\n const nPts = Math.max(12, Math.round(4 / Math.max(d, 0.01)))\n const positions: number[] = []\n // offsets 为**浮点单位**(L1 契约:edgeGroups = [pointStart_float, pointCount_float, hash])\n const offsets: number[] = [0]\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n for (const p of pts) positions.push(p)\n offsets.push(positions.length)\n }\n const edgeGroups = new Int32Array(edgeHandles.length * 3)\n for (let i = 0; i < edgeHandles.length; i++) {\n edgeGroups[i * 3] = offsets[i] ?? 0\n edgeGroups[i * 3 + 1] = (offsets[i + 1] ?? positions.length) - (offsets[i] ?? 0)\n // hash 必须与 hashCode(edge, BREP_HASH_BOUND) 同源,否则 topologyExt 查不到折线。\n edgeGroups[i * 3 + 2] = edgeFingerprint(kernel, edgeHandles[i]!, BREP_HASH_BOUND)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount: edgeHandles.length }\n }\n // solid(或未登记句柄):走原 meshEdgesAll 路径。\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(s, d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n // hash:meshEdgesAll 与 getSolidEdges 同序(同一次遍历),据此回填真实边指纹;\n // 取不到(数量不符)时退化为序号——此时 topologyExt 查不到折线,曲面边走\n // 曲线采样兜底(功能可用,只是丢掉内核线框数据)。\n let solidEdges: number[] | null = null\n try { const es = arr(kernel.getSolidEdges(s)); if (es.length === edgeCount) solidEdges = es } catch { /* 非实体 */ }\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = solidEdges\n ? edgeFingerprint(kernel, solidEdges[i]!, BREP_HASH_BOUND)\n : i\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n // 出口一律按 **type 参数**打类型标签(`type` 就是调用方声明的子形类型,是权威来源;\n // 不用内核反查——brepkit 无法反查类型,见文件头句柄桥接 GOTCHA)。\n const tag = (list: number[]): BrepHandle[] => {\n switch (type) {\n case 'face': return list.map(asFace)\n case 'edge': return list.map(asEdge)\n case 'vertex': return list.map(asVertex)\n case 'wire': return list.map(asWire)\n default: return list.map(asHandle)\n }\n }\n // ── A. 有类型标签:按标签分发,**不登记 knownEdges** ──\n // GOTCHA(2026-10-01 实测回归):历史分支里 `es.forEach(e => knownEdges.add(e))` 会把\n // 面/线的边号写进 knownEdges,而 knownEdges 的 key 是**裸句柄号**、会与后来新建的\n // solid 号相撞 → resolveKind 把实体判成边 → getBoundingBox 返回边的退化 bbox\n // (实测 8 个 op 的 AABB 全错)。标签句柄自带类型,登记已无必要,故这里一律不登记。\n const tagged = kindOf(shape)\n if (tagged === KIND_FACE) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') return tag(arr(kernel.getFaceEdges(s)))\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (tagged === KIND_WIRE) {\n if (type === 'edge') return tag(arr(kernel.getWireEdges(s)))\n return []\n }\n if (tagged === KIND_EDGE) {\n // input is itself an edge (wire.ts smooth path: interpolatePoints returns edge)\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n // ── B. 无标签:逐字沿用历史集合分发(含 knownEdges 登记),行为与加标签前一致 ──\n // GOTCHA(2026-09-26 非实体句柄修复):buildTopologyFromMesh 会对**面产物**\n // 调 getSubShapes(face,'face')。brepkit 的 getSolidFaces/getShellFaces 是 solid-only,\n // 对面句柄一个抛 \"invalid solid handle\"、catch 里再抛 \"invalid shell handle\"——\n // 两跳都不被捕获即崩溃。无标签时靠已知集合先分发。\n if (knownFaces.has(s)) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') { const es = arr(kernel.getFaceEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (knownWires.has(s)) {\n if (type === 'edge') { const es = arr(kernel.getWireEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n return []\n }\n if (knownEdges.has(s)) {\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n const compKids = knownCompounds.get(s)\n if (compKids) {\n // compound(sectionByPlane 面组 / makeCompound 多实体 / importStep 多实体):\n // 'face' 返回子面,'solid' 返回子实体,'edge' 返回各子句柄的边,其余空。\n if (type === 'face') return tag(compKids.filter((k) => knownFaces.has(k)))\n if (type === 'solid') return tag(compKids.filter((k) => !knownFaces.has(k) && !knownWires.has(k) && !knownEdges.has(k)))\n if (type === 'edge') {\n // 2026-10-02 补:此前 compound 的边查询落到 `return []`,会让归一化后的\n // getLength(compound) 静默变 0。按子句柄的已知类型分发,与 occt 的\n // getSubShapes(compound,'edge')(返回全部子边)对齐。\n const out: number[] = []\n for (const kid of compKids) {\n if (knownFaces.has(kid)) out.push(...arr(kernel.getFaceEdges(kid)))\n else if (knownWires.has(kid)) out.push(...arr(kernel.getWireEdges(kid)))\n else if (knownEdges.has(kid)) out.push(kid)\n else out.push(...arr(kernel.getSolidEdges(kid)))\n }\n return tag(out)\n }\n return []\n }\n let list: number[]\n // 实体句柄(knownSolids)永远不是 face-like——`derivedFaces` 只装「枚举出来的面号」,\n // 与 solid 号共用一个裸数字空间,不排除会造成误判(见 knownSolids 注释)。\n const isFaceLike = knownFaces.has(s) || (derivedFaces.has(s) && !knownSolids.has(s))\n if (type === 'face') {\n // 输入可能是 solid 或 shell。枚举到的子面登记到 derivedFaces(不进 knownFaces,\n // 避免与 solid 句柄撞号——见 derivedFaces 注释)。\n try { list = arr(kernel.getSolidFaces(s)) } catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) derivedFaces.add(f)\n } else if (type === 'edge') {\n list = isFaceLike\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = isFaceLike\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n fail(`getSubShapes(${type}): unsupported sub-shape type`)\n }\n return tag(list)\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') fail(`subShapeHashes(${type}): only 'face' is supported by brepkit`)\n const s = asNum(shape)\n // GOTCHA:buildTopologyFromMesh 会对面产物调 subShapeHashes(face,'face');\n // getSolidFaces 是 solid-only,对面句柄崩溃。输入本身是面时,哈希即其自身指纹。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return [faceFingerprint(kernel, s, hashUpperBound)]\n // wire/edge 无面;compound(sectionByPlane 面组)的子句柄即面。\n if (kind === KIND_WIRE || kind === KIND_EDGE) return []\n const compKids = knownCompounds.get(s)\n if (compKids) {\n const faces = compKids.filter((k) => knownFaces.has(k))\n return faces.map((f) => faceFingerprint(kernel, f, hashUpperBound))\n }\n const faces = arr(kernel.getSolidFaces(s))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n // 类型由句柄标签决定(见文件头句柄桥接 GOTCHA):brepkit 无法反查句柄类型,\n // 而面指纹与边指纹必须落在**互不相交**的取值域,否则 edgeGroups 的 hash 会\n // 命中面的指纹(实测:box 的 edge 0..5 句柄号与 face 0..5 相同)。\n // 生产端(faceMesh/solidMesh/compoundMesh → faceFingerprint;wireframe →\n // edgeFingerprint)与消费端(本函数)用同一组函数、同一个上界,查表才命中。\n const raw = asNum(shape)\n return kindOf(shape) === KIND_EDGE\n ? edgeFingerprint(kernel, raw, upperBound)\n : faceFingerprint(kernel, raw, upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean {\n // 裸句柄号相同还不够:brepkit 的 face 3 与 edge 3 是**两个不同的形**。\n // 两侧都带标签时必须同类型;任一侧无标签(历史调用方)时退回纯数字比较,\n // 保证加标签不改变既有行为。\n if (asNum(a) !== asNum(b)) return false\n const ka = kindOf(a), kb = kindOf(b)\n return ka === kb || ka === KIND_SOLID || kb === KIND_SOLID\n },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n shapeType(shape: BrepHandle): string {\n try {\n const s = arr(kernel.getSolidFaces(asNum(shape)))\n const f = arr(kernel.getFaces(asNum(shape)))\n return s.length > 0 ? 'SOLID' : f.length > 0 ? 'FACE' : 'COMPOUND'\n } catch { return 'COMPOUND' }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n edgeToFaceMap(shape: BrepHandle): unknown {\n // brepkit 返回 JSON 字符串 {\"edgeId\":[faceId,...]};L1 契约是 unknown(调用方自解析)。\n return kernel.edgeToFaceMap(asNum(shape))\n },\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[] {\n return arr(kernel.adjacentFaces(asNum(shape), asNum(face))).map(asFace)\n },\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[] {\n return arr(kernel.sharedEdges(asNum(a), asNum(b))).map(asEdge)\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n surfaceCenterOfMass: faceCenterOfMass,\n vertexPosition(vertex: BrepHandle): BrepVec3 {\n // getVertexPosition 返回 Float64Array [x,y,z](brepkit_wasm.d.ts 实测)\n const p = toNumArray(kernel.getVertexPosition(asNum(vertex)))\n return { x: p[0] ?? 0, y: p[1] ?? 0, z: p[2] ?? 0 }\n },\n containsPoint(shape: BrepHandle, point: BrepVec3, tolerance: number): boolean {\n // classifyPoint 返回 \"inside\" | \"outside\" | \"boundary\"(d.ts 实测);\n // 边界视为包含(与 occt containsPoint 的口径对齐:探针点在面上不翻转法线)。\n return kernel.classifyPoint(asNum(shape), point.x, point.y, point.z, tolerance) !== 'outside'\n },\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as {\n degree?: number\n periodic?: boolean\n rational?: boolean\n knots?: number[]\n multiplicities?: number[]\n poles?: number[]\n weights?: number[]\n }\n if (p && typeof p.degree === 'number') {\n return {\n degree: p.degree,\n periodic: !!p.periodic,\n rational: !!p.rational,\n knots: (p.knots ?? []).map(Number),\n multiplicities: (p.multiplicities ?? []).map(Number),\n poles: (p.poles ?? []).map(Number),\n weights: (p.weights ?? []).map(Number),\n }\n }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle] {\n // brepkit 原生返回 Uint32Array 两元素(occt 返回 [ShapeHandle, ShapeHandle])——\n // 适配器统一为二元组。两个碎片都必须登记进 knownEdges,否则下游 meshShape 分发不到。\n const parts = kernel.curveSplit(asNum(edge), param)\n if (parts.length !== 2) fail(`curveSplit: expected 2 edges, got ${parts.length}`)\n const a = parts[0]!\n const b = parts[1]!\n knownEdges.add(a)\n knownEdges.add(b)\n return [asEdge(a), asEdge(b)]\n },\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle {\n // GOTCHA:interpolatePoints 返回 **edge** 句柄(不是 wire)——wire.ts smooth 路径把它\n // 直接当 wire 送 solidToShape。登记进 knownEdges,meshShape 才能走 tessellateEdge 路径。\n const e = kernel.interpolatePoints(flattenPoints(points), degree)\n knownEdges.add(e)\n return asEdge(e)\n },\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(kernel.defeature(asNum(shape), Uint32Array.from(faces.map(asNum)))))\n },\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle {\n return asHandle(kernel.draft(\n asNum(shape),\n Uint32Array.from(faces.map(asNum)),\n pull.x, pull.y, pull.z,\n neutral.x, neutral.y, neutral.z,\n angleDeg,\n ))\n },\n removeHolesFromFace(face: BrepHandle): BrepHandle {\n // removeHolesFromFace 返回**新 face 句柄**(去掉内孔的同曲面 face),必须登记进 knownFaces。\n const f = kernel.removeHolesFromFace(asNum(face))\n knownFaces.add(f)\n return asFace(f)\n },\n reverseShape(shape: BrepHandle): BrepHandle {\n return withKind(kindOf(shape), kernel.reverseShape(asNum(shape)))\n },\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown {\n // brepkit 返回 JSON 字符串 {\"visible\":[[x,y,…]],\"hidden\":[[…]]};L1 契约是 unknown。\n return kernel.projectEdges(\n asNum(shape),\n origin.x, origin.y, origin.z,\n direction.x, direction.y, direction.z,\n xAxis.x, xAxis.y, xAxis.z,\n hiddenLines, deflection,\n )\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const s = asNum(shape)\n const bboxFromPoints = (pts: ArrayLike<number>): BrepBoundingBox => {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (let i = 0; i + 2 < pts.length; i += 3) {\n xmin = Math.min(xmin, pts[i]!); ymin = Math.min(ymin, pts[i + 1]!); zmin = Math.min(zmin, pts[i + 2]!)\n xmax = Math.max(xmax, pts[i]!); ymax = Math.max(ymax, pts[i + 1]!); zmax = Math.max(zmax, pts[i + 2]!)\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n const solidBbox = (h: number): BrepBoundingBox => {\n const b = kernel.boundingBox(h) as ArrayLike<number>\n return { xmin: b[0]!, ymin: b[1]!, zmin: b[2]!, xmax: b[3]!, ymax: b[4]!, zmax: b[5]! }\n }\n const kids = knownCompounds.get(s)\n if (kids) {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const k of kids) {\n try {\n let b: BrepBoundingBox\n if (knownFaces.has(k)) b = bboxFromPoints(arr(kernel.tessellateFace(k, 0.1, 1).positions))\n else if (knownWires.has(k)) b = bboxFromPoints(arr(kernel.getWireEdges(k)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n else if (knownEdges.has(k)) b = bboxFromPoints(arr(kernel.tessellateEdge(k, 16)))\n else b = solidBbox(k)\n xmin = Math.min(xmin, b.xmin); ymin = Math.min(ymin, b.ymin); zmin = Math.min(zmin, b.zmin)\n xmax = Math.max(xmax, b.xmax); ymax = Math.max(ymax, b.ymax); zmax = Math.max(zmax, b.zmax)\n } catch { /* 子项 bbox 查询失败忽略 */ }\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n // GOTCHA:kernel.boundingBox 是 solid-only。face/wire/edge 句柄必须走 tessellation 采样,\n // 否则 measure() 对 wire/profile 调 getBoundingBox 即崩 \"invalid solid handle\"。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return bboxFromPoints(arr(kernel.tessellateFace(s, 0.1, 1).positions))\n if (kind === KIND_WIRE) return bboxFromPoints(arr(kernel.getWireEdges(s)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n if (kind === KIND_EDGE) return bboxFromPoints(arr(kernel.tessellateEdge(s, 16)))\n return solidBbox(s)\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n getSurfaceArea(shape: BrepHandle): number {\n // 方言映射:L1 getSurfaceArea ↔ brepkit surfaceArea(solid, deflection)。\n return Number(kernel.surfaceArea(asNum(shape), 0.05))\n },\n getLength(shape: BrepHandle): number {\n // 唯一 edge 弧长之和(与 occt 适配器同口径,D5)。\n // 旧实现用 `try { getEdgeCurveType } catch { wireLength }` 判别入参差异,但\n // getEdgeCurveType 对 solid / face / wire **也不抛错**,于是统一走 edgeLength,\n // 返回「首条边」长度——值随构建历史漂移(盒 20 vs 10;两边的 wire 真长 15 却给 20),\n // 且与 occt 的 Σ 面周长(280)不同口径。改为按 topo 去重枚举边后求和。\n let total = 0\n for (const e of api.getSubShapes(shape, 'edge')) total += api.curveLength(e)\n return total\n },\n\n // ── 校验与修复 ──\n // ⚠️ brepkit 的修复类内核函数全部是「**原地修改入参实体 + 返回修复计数**」,不是返回新句柄:\n // healSolid(solid) → 修复的问题数\n // fixFaceOrientations(solid) → 修复的面数\n // unifyFaces(solid) → 合并删除的面数\n // removeDegenerateEdges(s,tol) → 删除的边数\n // repairSolid(solid) → 修复后剩余错误数\n // 直接 `asHandle(kernel.healSolid(...))` 会把计数(常见为 0)当成句柄,得到无效实体\n // (2026-09-25 实证)。正确适配:先 copySolid 保护调用方原实体,再原地修复副本,返回副本句柄。\n isValid(shape: BrepHandle): boolean {\n // brepkit validateSolid 返回错误数(0 = 有效)。\n return Number(kernel.validateSolid(asNum(shape))) === 0\n },\n unifySameDomain(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.unifyFaces(c)\n return asHandle(c)\n },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixShape(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixFaceOrientations(shape: BrepHandle): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.fixFaceOrientations(c)\n return asHandle(c)\n },\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.removeDegenerateEdges(c, tolerance ?? 1e-6)\n return asHandle(c)\n },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n // ⚠️ brepkit importStep 吃 **Uint8Array**(不是字符串),返回 **Uint32Array**(文件内可含多个 solid)。\n // L1 契约是单 BrepHandle:0 个 → fail;1 个 → 直通;多个 → 合成 compound(2026-09-25 实证)。\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n const solids = arr(kernel.importStep(bytes))\n if (solids.length === 0) fail('importStep: kernel returned no solid')\n const c = solids.length === 1 ? solids[0] : kernel.makeCompound(Uint32Array.from(solids))\n if (solids.length > 1) knownCompounds.set(c, solids)\n return asHandle(markSolid(c))\n },\n exportStep(shape: BrepHandle): string {\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(asNum(shape))\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(data: string | ArrayBuffer): BrepHandle {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n return asHandle(markSolid(kernel.importStl(bytes)))\n },\n fromBREP(data: string): BrepHandle {\n // ⚠️ brepkit fromBREP 吃字符串(STEP 文本或 toBREP/toBrepJson 输出,内核自动判别),\n // 与 serializeSolid/deserializeSolid 的**二进制 arena** 是两套机制。\n // 旧实现误用 `deserializeSolid(atob(data))`:base64 解码破坏了 STEP 文本 → 往返必失败\n // (2026-09-25 实证:fromBREP(STEP)、fromBREP(toBREP)、fromBREP(toBrepJson) 均成功)。\n return asHandle(markSolid(kernel.fromBREP(data)))\n },\n\n // ── 网格实体原语(方案 2026-10-01 §3.3;内核私有,不在 L1 契约面) ──\n // 规范构造顺序**不可交换**:importMesh → weld → unify。\n // 实测(brepkit-kernel/mesh-solid-topology.test.ts):先 unify 后 weld 会把实体做坏\n // (体积归零、validate 非 0)。本对象只暴露原语,顺序由 `normalizeMeshSolid` 驱动。\n meshSolid: {\n importMesh(positions: Float32Array, indices: Uint32Array): BrepHandle {\n // 方言:importIndexedMesh 吃 **Float64Array**(坐标)+ **Uint32Array**(索引),\n // 返回裸 solid 号。逐三角形建面、顶点按坐标焊接、边不共享(不是真流形)。\n const coords = new Float64Array(positions.length)\n for (let i = 0; i < positions.length; i++) coords[i] = positions[i]!\n return asHandle(markSolid(kernel.importIndexedMesh(coords, indices)))\n },\n weld(faces: BrepHandle[], tolerance: number): BrepHandle {\n // weldShellsAndFaces 吃**裸面号数组**(Uint32Array),返回新 solid 号;\n // 把重复边缝成共享边 → 真流形(实测 10mm 立方体 36 边 → 18 边、validate 0)。\n return asHandle(markSolid(kernel.weldShellsAndFaces(\n Uint32Array.from(faces.map((f) => asNum(f))),\n tolerance,\n )))\n },\n unify(solid: BrepHandle): number {\n // GOTCHA:unifyFaces 是**原地修改**入参实体,返回值是**被合并掉的面数**\n // (不是新句柄)。写成 `const s = unify(...)` 会拿到一个落在合法句柄区间的\n // 数字,后续全部查询打在一个无关实体上且不报错。\n return Number(kernel.unifyFaces(asNum(solid)))\n },\n },\n\n // ── 面演化(L1 三员 + filletWithHistory,双方都有对齐实现) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.intersectWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n }\n memoizedKernel = kernel\n memoizedPrimitives = api\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n\n/** 已初始化的 brepkit 内核单例(createBrepkitPrimitives 时赋值)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/** 已构建的 L1 契约面对象(按内核实例 memo;见 createBrepkitPrimitives 的 GOTCHA)。 */\nlet memoizedPrimitives: BrepkitEngineExtras | null = null\nlet memoizedKernel: BrepKitKernel | null = null\n\n/**\n * 原生 brepkit 内核面(D3):平台特定代码访问 brepkit 独有能力的唯一入口\n * (chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean 等)。\n *\n * ⚠️ 这是**平台特定**出口——import 本函数即声明「这段代码只跑在 brepkit 引擎下」。\n * 可移植代码请用 `getBrepApi()`(L1 契约面)。\n *\n * @returns the live brepkit wasm kernel singleton.\n */\nexport function getBrepkitKernel(): BrepKitKernel {\n if (!liveKernel) {\n throw new Error('[brepkit-kernel] kernel not initialized: call createBrepkitPrimitives() first')\n }\n return liveKernel\n}\n\n/**\n * 释放内核单例(测试收尾用;宿主常驻不需调用)。\n *\n * GOTCHA(2026-10-01 修复):旧实现只 `free()` 内核、**不重置** brepkitWasm.ts 里\n * 缓存的 `initPromise`,也不丢 memo 化的原语对象 → 第二次 `createBrepkitPrimitives()`\n * 拿到**已释放**的内核,随后一切内核调用报 `null pointer passed to rust`\n * (实测:`BrepKernel.makeBox`)。现在三样一起清:内核、initPromise、memo 原语。\n */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n memoizedPrimitives = null\n memoizedKernel = null\n resetBrepkitWasm()\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}
1
+ {"version":3,"file":"brepkitKernel.js","sourceRoot":"","sources":["../../src/brepkit-kernel/brepkitKernel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * brepkit-kernel/brepkitKernel — brepkit 内核 → faijs BrepEngineApi 适配器\n *\n * Phase 4:\n * 本文件是 L1 契约 `BrepEngineApi` 的 **brepkit 显式对象字面量实现**——与 occt 侧\n * `occt-primitives.ts` 同构:逐方法接线、方言在适配器内消化、零 `unsupported()` 桩。\n *\n * 契约面收窄后 L1 只含 occt/brepkit 双方**语义可对齐**的方法(唯一真源:\n * `api/surface/engine-method-map.json` 的 aligned/dialect 条目)。brepkit 独有\n * 能力(chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean、\n * minkowskiSum …)与单方语义(loft、平面 section/split 之外的 splitter 语义…)\n * 都不在本对象里——平台代码经原生面 `getBrepKitKernel()`(D3)访问。\n *\n * 设计要点(对应 3d_editor 项目的 weapp-voice-ai-modeling 设计计划 §5):\n * - 句柄:brepkit u32 句柄与 faijs BrepHandle(number) 同构,直通零转换;\n * - 拓扑红线:meshShape 用 tessellateSolidGrouped 输出 faceGroups,与三角化几何同源;\n * - 面溯源:布尔/倒角走 *WithEvolution,映射为 BrepEvolutionData(hash 编码);\n * - 链纪律:kernel.meshFallbackCount 计数差 > 0 → getMeshFallbackCount 暴露给宿主,\n * 由宿主标记 BREP 链中断(不在此层静默处理)。\n */\n\nimport { initBrepkitWasm, resetBrepkitWasm, type BrepKitKernel } from './brepkitWasm'\nimport { DEFAULT_LINEAR_DEFLECTION } from '../tolerance'\nimport { mm } from '../units'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { BREP_HASH_BOUND } from '../brep/engine/types'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepNurbsCurveData,\n BrepSubShapeType,\n BrepTessellateOptions,\n BrepUvBounds,\n BrepVec3,\n} from '../brep/engine/types'\n\n// ── 句柄桥接:brepkit number 句柄 ↔ BrepHandle ──\n//\n// GOTCHA(2026-10-01 实测,本文件最容易踩的坑):brepkit 句柄是**按类型分命名空间的裸 u32**\n// ——同一个 box 上 solid=0、face=0..5、edge=0..11 同时存在,且**内核没有任何可靠的类型判别式**:\n// getEdgeCurveType(0) / edgeLength(0) → 命中 edge 0\n// getFaceEdges(0) / getFaceNormal(0) → 命中 face 0\n// getSolidFaces(0) → 命中 solid 0\n// 三者对同一个数字 0 各自返回「自己命名空间里 0 号」的数据,谁都不抛错(`getSolidFaces(1)` 才抛)。\n// 因此「拿句柄去问内核它是什么类型」在 brepkit 上**不可能实现**。\n//\n// 但 L1 契约里 `hashCode(handle)` 只收到一个数字,必须知道类型才能选面/边指纹函数。\n// 解法:适配器在**出口**把类型编进句柄高位。类型随句柄流动,`asNum()` 剥掉标签后仍是内核\n// 裸句柄号——内部集合(knownFaces/knownEdges/…)、hashRegistry、全部 `kernel.*` 调用语义不变。\n// 高 3 位(bit 26..28)放类型;虚拟 compound 句柄从 bit 29(0x20000000)起分配,互不干扰。\n// 注意 `asNum` 用**算术减法**而非 `& ~KIND_MASK`:后者把 ≥2^31 的虚拟句柄按 int32 截断成负数。\nconst KIND_SHIFT = 26\nconst KIND_MASK = 7 << KIND_SHIFT\nconst KIND_SOLID = 0 << KIND_SHIFT // 也是 compound / 未登记句柄的默认类\nconst KIND_FACE = 1 << KIND_SHIFT\nconst KIND_EDGE = 2 << KIND_SHIFT\nconst KIND_WIRE = 3 << KIND_SHIFT\nconst KIND_VERTEX = 4 << KIND_SHIFT\n\n/** 句柄类型标签(0 = SOLID/COMPOUND 默认类)。 */\nconst kindOf = (h: BrepHandle): number => (h as unknown as number) & KIND_MASK\n/** 剥掉类型标签,得到 brepkit 内核裸句柄号——所有 `kernel.*` 调用必须用这个。 */\nconst asNum = (h: BrepHandle): number => {\n const n = h as unknown as number\n return n - (n & KIND_MASK)\n}\n/** 实体/compound 句柄(默认类,保持历史行为:无标签 ⇒ 内核按 solid 路径分发)。 */\nconst asHandle = (n: number): BrepHandle => n as BrepHandle\nconst asFace = (n: number): BrepHandle => (n | KIND_FACE) as BrepHandle\nconst asEdge = (n: number): BrepHandle => (n | KIND_EDGE) as BrepHandle\nconst asWire = (n: number): BrepHandle => (n | KIND_WIRE) as BrepHandle\nconst asVertex = (n: number): BrepHandle => (n | KIND_VERTEX) as BrepHandle\n/** 按已有类型标签给裸句柄重新打标签(copy/transform 族保持入参类型)。 */\nconst withKind = (kind: number, n: number): BrepHandle => {\n switch (kind) {\n case KIND_FACE: return asFace(n)\n case KIND_EDGE: return asEdge(n)\n case KIND_WIRE: return asWire(n)\n case KIND_VERTEX: return asVertex(n)\n default: return asHandle(n)\n }\n}\nconst arr = (x: ArrayLike<number> | number[]): number[] => Array.from(x as ArrayLike<number>)\n\n/**\n * L1 向量形参的静态校验:`BrepVec3 = {x,y,z}` **对象**,不是元组、更不是布尔。\n *\n * 包侧旧口径(`loft(wires, isSolid?, ruled?)` 之类)会把标量/布尔塞进向量位,进内核\n * 后只剩一句无指向的 wasm 报错(实测 `cannot normalize zero vector`)。编译期管不住的\n * 调用点(跨包 `as unknown as` 注入)在此静态判一次,给可指路的错误。\n */\nconst isBrepVec3 = (v: unknown): boolean => {\n if (typeof v !== 'object' || v === null) return false\n const o = v as { x?: unknown; y?: unknown; z?: unknown }\n return typeof o.x === 'number' && typeof o.y === 'number' && typeof o.z === 'number'\n}\n\n/** 适配器内部的显式失败(替代旧 unsupported 桩:能力缺失一律在静态判定拦截,不在实现体里伪装)。 */\nfunction fail(detail: string): never {\n throw new Error(`[brepkit-kernel] ${detail}`)\n}\n\n/**\n * brepkit 几何查询返回值归一为 number[]。\n *\n * 关键事实(npm brepkit-wasm d.ts 与本地 web-target 胶水一致):\n * getSurfaceDomain / getFaceNormal / evaluateSurfaceNormal / evaluateSurface /\n * evaluateEdgeCurve / evaluateEdgeCurveD1 / getEdgeCurveParameters / centerOfMass\n * 返回 **Float64Array**(不是 JSON 字符串);\n * 仅 getAnalyticSurfaceParams / getNurbsCurveData / tessellateSolidGrouped /\n * *WithEvolution 返回 JSON 字符串。\n *\n * 历史 bug:曾误以为全部返回 JSON 字符串而统一 JSON.parse,导致\n * `String(Float64Array)` 变成逗号拼接数字串(如 \"-1000000,1000000,...\"),\n * JSON.parse 在第一个逗号处抛 \"Unexpected non-whitespace character after JSON\"。\n * 这里同时兼容:JSON 字符串 / TypedArray / 普通数组 / {x,y,z} / 数字键对象。\n */\nfunction toNumArray(v: unknown): number[] {\n if (typeof v === 'string') {\n const parsed: unknown = JSON.parse(v)\n if (Array.isArray(parsed)) return parsed.map(Number)\n if (parsed && typeof parsed === 'object') {\n const o = parsed as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n }\n if (v && typeof v === 'object') {\n if (Array.isArray(v)) return v.map(Number)\n if ('length' in v) return Array.from(v as ArrayLike<number>, Number)\n const o = v as Record<string, unknown>\n if (typeof o.x === 'number') return [o.x, Number(o.y), Number(o.z)]\n if (o[0] !== undefined) {\n const out: number[] = []\n for (let i = 0; o[i] !== undefined; i++) out.push(Number(o[i]))\n return out\n }\n }\n return []\n}\n\n/**\n * brepkit 无任何 hash API(228 个方法里没有 hashCode/subShapeHashes)——faijs 侧的\n * 面/边 hash 全部由适配器**合成指纹**,因此「合成函数」与「消费函数的取模上界」\n * 必须同源:\n * - 消费端 `topologyExt.buildSelectorManifestCore` 用\n * `kernel.hashCode(subShape, BREP_HASH_BOUND)` 回查 faceGroups/edgeGroups 里的 hash;\n * - 生产端(本文件的 solidMesh / faceMesh / compoundMesh / wireframe)必须用**同一个**\n * `BREP_HASH_BOUND` 生成,否则查表恒 miss。\n *\n * GOTCHA(2026-10-01 实测修复):本文件此前生产端用 1e9、消费端用 2147483647,\n * 导致 brepkit 引擎下面行的 triStart/triCount 恒为 0(面积/法向随之丢失)。\n */\nfunction fnv1a(basis: string, upperBound: number): number {\n let h = 0x811c9dc5\n for (let i = 0; i < basis.length; i++) {\n h ^= basis.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n return upperBound > 0 ? h % upperBound : h\n}\n\n/** 面稳定指纹:解析曲面参数 + 面积 → FNV-1a → 取模上界(跨操作可追溯,与句柄无关)。 */\nfunction faceFingerprint(kernel: BrepKitKernel, face: number, upperBound: number): number {\n let params = ''\n try { params = String(kernel.getAnalyticSurfaceParams(face) ?? '') } catch { /* 非解析面 */ }\n let area = 0\n try { area = Number(kernel.faceArea?.(face, 0.1) ?? 0) } catch { /* 查询失败用 0 */ }\n return fnv1a(`${params}|${area.toFixed(6)}`, upperBound)\n}\n\n/**\n * 边稳定指纹:曲线类型 + 参数区间 + 两端/中点采样 + 长度 → FNV-1a。\n *\n * 为什么不能用 `faceFingerprint`:它对边恒得同一个值(`getAnalyticSurfaceParams`\n * 与 `faceArea` 对 edge 句柄都抛错)——旧实现在 box 上 12 条边 hash 全同,\n * 使 `topologyExt` 的 edgeGroupByHash 只留最后一条折线(实测 2026-10-01)。\n *\n * 为什么不能只用端点:整圆(圆柱端盖)首末点重合,z 不同的两个圆会撞 —\n * 故补 UV 中点采样。`getBoundingBox(edge)` 在 brepkit 上抛错,不可用。\n */\nfunction edgeFingerprint(kernel: BrepKitKernel, edge: number, upperBound: number): number {\n let curveType = ''\n try { curveType = String(kernel.getEdgeCurveType(edge) ?? '') } catch { /* 非边 */ }\n let range = ''\n let mid = ''\n try {\n // 方言:`getEdgeCurveParameters` 返回 **Float64Array**(如 [0, 10]),不是 JSON 字符串\n // (见本文件头的返回值归一化说明)。曾误用 JSON.parse → 恒定抛错 → range/mid 恒空,\n // 于是所有同类型同长度的边(box 的 12 条棱)挤成同一个指纹(2026-10-01 实测)。\n const p = toNumArray(kernel.getEdgeCurveParameters(edge))\n const first = p[0] ?? 0\n const last = p[1] ?? 0\n range = `${first.toFixed(9)},${last.toFixed(9)}`\n const midT = (first + last) / 2\n const sample = (t: number): string => toNumArray(kernel.evaluateEdgeCurve(edge, t)).map((x) => x.toFixed(6)).join(',')\n mid = `${sample(first)}|${sample(midT)}|${sample(last)}`\n } catch { /* 采样失败 → 退化为类型 + 空几何 */ }\n let length = 0\n try { length = Number(kernel.edgeLength(edge) ?? 0) } catch { /* 长度不可用用 0 */ }\n return fnv1a(`${curveType}|${range}|${mid}|${length.toFixed(6)}`, upperBound)\n}\n\n/** 面演化数据(BrepEvolutionData):brepkit evolution JSON → hash 编码三元组。 */\nfunction mapEvolution(\n kernel: BrepKitKernel,\n raw: string,\n resultHandle: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n): BrepEvolutionData {\n // raw: {solid, evolution:{modified:{oldHandle:[newHandles]}, generated:{oldHandle:[new]}, deleted:[oldHandles]}}\n const parsed = JSON.parse(raw) as {\n solid: number\n evolution: { modified: Record<string, number[]>; generated: Record<string, number[]>; deleted: number[] }\n }\n const evo = parsed.evolution ?? { modified: {}, generated: {}, deleted: [] }\n const deletedKeys = new Set((evo.deleted ?? []).map(Number))\n // registry 登记的是 hash→handle(输入面)。下游 decodeEvolution/decodeHashEvolution 期望\n // modified 为 OCCT 分段格式 [inHash, count, outHash1, outHash2, ...](见 face-evolution.ts),\n // 不是扁平 hash 列表——GOTCHA:曾误返回扁平列表,把 modified[1](一个 hash ~1e9)当成\n // count,导致 decodeHashEvolution 空转 17 亿次 push 抛 \"Invalid array length\"(2026-09-26 实证)。\n // 故这里反向建 handle→hash 表,逐条目拼出 [inHash, outCount, ...outHashes]。\n const registry = hashRegistry.get(kernel)\n const handleToHash = new Map<number, number>()\n if (registry) for (const [h, handle] of registry) handleToHash.set(handle, h)\n const modified: number[] = []\n const deleted: number[] = []\n for (const oldHandle of deletedKeys) {\n const h = handleToHash.get(oldHandle)\n if (h !== undefined) deleted.push(h)\n }\n for (const [oldHandleStr, newHandles] of Object.entries(evo.modified ?? {})) {\n const inHash = handleToHash.get(Number(oldHandleStr))\n if (inHash === undefined) continue\n const outHashes = (newHandles as number[]).map((nh) => faceFingerprint(kernel, nh, hashUpperBound))\n modified.push(inHash, outHashes.length, ...outHashes)\n }\n // generated:结果实体的新面 hash(数量按 generated 表展开)\n const generated: number[] = []\n for (const news of Object.values(evo.generated ?? {})) {\n for (const nh of news) generated.push(faceFingerprint(kernel, nh, hashUpperBound))\n }\n // 更新注册表:结果实体 faces 的最新 hash 登记(供下一次演化对齐)\n try {\n const faces = arr(kernel.getSolidFaces(resultHandle))\n const reg = registry ?? new Map<number, number>()\n for (const f of faces) reg.set(faceFingerprint(kernel, f, hashUpperBound), f)\n hashRegistry.set(kernel, reg)\n } catch { /* 非实体结果跳过登记 */ }\n return { result: asHandle(resultHandle), modified, generated, deleted }\n}\n\n/** per-kernel 的 hash↔handle 登记表(fuseWithHistory 溯源对齐用)。 */\nconst hashRegistry = new WeakMap<BrepKitKernel, Map<number, number>>()\n\n/** brepkit 适配器返回类型:BrepEngineApi + brepkit 专属诊断 + 网格实体原语。 */\ntype BrepkitEngineExtras = BrepEngineApi & {\n getMeshFallbackCount(): number\n /**\n * 网格实体原语(`brep/mesh-solid.ts` 的 `MeshSolidKernelOps`)。\n *\n * 为什么放在适配器而不是 L1 契约面:`weldShellsAndFaces` / `unifyFaces` 是\n * brepkit **内核私有**的缝合/合并原语(L1 `BrepEngineApi` 没有对应概念——\n * OCCT 侧用 `sew`+`unifySameDomain` 才有等价语义,形态不同)。挂在适配器\n * 返回对象上,网格后端(`MeshSolidBackend`)经端口取用,契约面保持干净。\n */\n meshSolid: import('../brep/mesh-solid').MeshSolidKernelOps\n}\n\n/**\n * 三点外接圆(makeArcEdge 方言消化:occt 吃 3 点,brepkit 吃圆心+轴)。\n *\n * 圆心偏移取标准式 `d = ( |ab|²·(ac×n) + |ac|²·(n×ab) ) / (2·|n|²)`,`n = ab×ac`。\n * GOTCHA(弧缺陷,2026-09-30 实证):旧式 `( |ac|²·(ab×n) + |ab|²·(n×ac) ) / (2·|n|²)`\n * 把两项的系数对调,等于整体取反——圆心落到弦的另一侧(实测 quarter arc 圆心 (20,0,0)\n * 而非 (0,0,0),三点不等距),brepkit 据此生成 333° 的补弧(弧长 58.195 而非 πr/2)。\n * 判据是等距不变量 `|center−a| = |center−b| = |center−c|`。\n *\n * axis = n/|n| 即三点逆时针扫掠方向的右手法向;brepkit `makeCircleArc3d` 语义为\n * \"沿法向看从 start 逆时针到 end\",故该轴向同时正确表达 ccw 与 cw 弧。\n */\nfunction circumcircle(a: BrepVec3, b: BrepVec3, c: BrepVec3): { center: BrepVec3; axis: BrepVec3 } {\n const abx = b.x - a.x, aby = b.y - a.y, abz = b.z - a.z\n const acx = c.x - a.x, acy = c.y - a.y, acz = c.z - a.z\n const nx = aby * acz - abz * acy\n const ny = abz * acx - abx * acz\n const nz = abx * acy - aby * acx\n const n2 = nx * nx + ny * ny + nz * nz\n if (n2 < 1e-18) fail('makeArcEdge: 3 points are collinear (no circumscribed circle)')\n const ab2 = abx * abx + aby * aby + abz * abz\n const ac2 = acx * acx + acy * acy + acz * acz\n // center = a + ( ab2·(ac×n) + ac2·(n×ab) ) / (2·n²)\n const acxnx = acy * nz - acz * ny, acxny = acz * nx - acx * nz, acxnz = acx * ny - acy * nx\n const nxabx = ny * abz - nz * aby, nxaby = nz * abx - nx * abz, nxabz = nx * aby - ny * abx\n const denom = 2 * n2\n const len = Math.sqrt(n2)\n return {\n center: {\n x: a.x + (ab2 * acxnx + ac2 * nxabx) / denom,\n y: a.y + (ab2 * acxny + ac2 * nxaby) / denom,\n z: a.z + (ab2 * acxnz + ac2 * nxabz) / denom,\n },\n axis: { x: nx / len, y: ny / len, z: nz / len },\n }\n}\n\n/** BrepVec3[] → 扁平 Float64Array(brepkit 坐标数组方言)。 */\nfunction flattenPoints(points: BrepVec3[]): Float64Array {\n const out = new Float64Array(points.length * 3)\n for (let i = 0; i < points.length; i++) {\n out[i * 3] = points[i].x\n out[i * 3 + 1] = points[i].y\n out[i * 3 + 2] = points[i].z\n }\n return out\n}\n\n/**\n * 创建 brepkit BrepEngineApi 实现(L1 契约显式对象字面量)。\n * 与 occt 的 createOcctPrimitives 同位:返回满足引擎契约的原语集合。\n * @returns a promise resolving to the BrepEngineApi implementation plus brepkit-specific\n * diagnostics (`getMeshFallbackCount`).\n */\nexport async function createBrepkitPrimitives(): Promise<BrepkitEngineExtras> {\n const kernel = await initBrepkitWasm()\n // GOTCHA(2026-10-01):本函数此前每次调用都新建一套闭包(knownFaces/knownSolids/\n // derivedFaces…)——即**新建一套句柄桥接层**。句柄号虽然对同一个 wasm 内核全局有效,\n // 但桥接层侧的类型登记表不同:A 层枚举出的面句柄交给 B 层做 getSubShapes,会被当\n // 实体走 tessellateSolidGrouped。BREP 引擎装配点与网格后端装配点都调本函数,必须\n // 拿到**同一个**对象。故按内核实例 memo 化(disposeBrepkit 会清掉)。\n if (memoizedPrimitives && memoizedKernel === kernel) return memoizedPrimitives\n liveKernel = kernel\n let lastFallbackCount = 0\n // 已知面句柄集合:getSubShapes(shape,'face') / makeRectangle / makeFace / buildTriFace\n // 返回的面在此登记;extrude/revolveVec 的 face 输入断言、getSubShapes 的\n // edge/vertex 分发都据此判定(brepkit 无 shape-type 分类 API,见下方注释)。\n const knownFaces = new Set<number>()\n // GOTCHA(2026-09-26 非实体句柄修复):brepkit 的 tessellateSolidGrouped / getSolidFaces\n // 等 *Solid API 只吃 solid 句柄,传 face/wire/edge/compound 即抛\n // \"invalid solid handle: index N out of bounds\"。而 brepkit **没有 shape-type 分类 API**\n // (getFaceEdges(solid) 不抛错、会返回某一面的边,不能 try/catch 探测)。故 meshShape\n // 必须靠这组「已知句柄集合」在执行前静态分发,而不是运行时探测:\n // knownFaces → tessellateFace(JsMesh)\n // knownWires → getWireEdges + tessellateEdge 逐边采样成线段\n // knownEdges → tessellateEdge 直接采样成线段(wire.ts smooth 路径 interpolatePoints 返回 edge)\n // knownCompounds→ 逐子句柄按其类型 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)\n // 不在任何集合里的句柄一律按 solid 走 tessellateSolidGrouped(实体创建不入集合,天然落此路径)。\n const knownWires = new Set<number>()\n const knownEdges = new Set<number>()\n // GOTCHA: getSolidFaces returns GLOBAL face indices (0..5, 6..11, ...) that collide\n // with solid handles (per-type namespace). Enumerated sub-faces must NOT pollute\n // knownFaces, else measuring a later solid whose handle number equals an old\n // enumerated face gets mis-tessellated as a face. derivedFaces is consulted ONLY by\n // getSubShapes edge/vertex drilling, never by meshShape/getBoundingBox.\n const derivedFaces = new Set<number>()\n // 虚拟 compound 句柄计数器(非实体子句柄不进内核 makeCompound,见 makeCompound GOTCHA)。\n const knownCompounds = new Map<number, number[]>()\n // 虚拟 compound 句柄 → 真内核 compound 句柄(exportStep 等 IO 需要真句柄;几何分发全走虚拟句柄)。\n // 2026-10-13:brepkit 句柄按**类型分命名空间**(同文件 356 行 GOTCHA),compound 命名空间从 0 计数,\n // 与 solid 命名空间**重号**(实测 5 成员 solid [0..4] 的 compound 句柄 = 0)——knownCompounds 以\n // 内核句柄为 key 会在「查询同号的另一 solid」时误判成 compound(textToSolid 'Hello' translate 后\n // 只剩 1 成员即此:copySolid(0) 被当成员 solid 复制)。故 compound 一律用 0x20000000+ 虚拟句柄。\n const kernelCompoundHandles = new Map<number, number>()\n let virtualCompoundCounter = 0\n // GOTCHA(2026-09-26):brepkit 句柄按**类型分命名空间**——solid/face/wire/edge 各自从 0 计数\n // (实测 edge=wire=face=solid=0 可共存)。因此「某编号 N 在 knownFaces」与「某编号 N 是 solid」\n // 并不互斥:新 solid 恰好复用了早先某 face 的编号时,knownFaces.has(N) 会把 solid 误判成 face\n // (实测 box makeBox 返回 solid 2,撞 profile 早先的 face 2 → cloneShape 走 copyFace 崩溃)。\n // 建 solid 时必须从 knownFaces/knownWires/knownEdges/derivedFaces 抹掉该编号,让默认 solid 路径生效。\n // derivedFaces 也必须清:getSubShapes(solid,'edge') 会查 derivedFaces.has(s) 误走 getFaceEdges。\n // GOTCHA(2026-10-01 实测):`derivedFaces` 是**全局**面句柄号集合,枚举 solid A 的面会把\n // 面号 0..N 写进去;此后对**裸句柄号恰好相同的另一个 solid**做 getSubShapes(...,'edge')\n // 时,`derivedFaces.has(s)` 为真 → isFaceLike 误判 → 走 getFaceEdges 只拿到一张面的 4 条边\n // (实测 box:12 条边变 4 条)。故必须显式登记 solid 句柄:实体永远不是 face-like。\n const knownSolids = new Set<number>()\n const markSolid = (h: number): number => {\n knownFaces.delete(h); knownWires.delete(h); knownEdges.delete(h); knownCompounds.delete(h); derivedFaces.delete(h)\n knownSolids.add(h)\n return h\n }\n /** 实体数组批量登记(阵列族返回多个实体)。 */\n const markSolids = (list: number[]): number[] => list.map(markSolid)\n /**\n * 句柄类型解析:**标签优先**,无标签时退回已知集合(历史行为)。\n *\n * 标签是权威来源——集合的 key 是**裸句柄号**,face 3 与 edge 3 会共存于不同集合,\n * 靠集合无法区分。故有标签(非 0)时直接用标签,集合里的同名条目一律忽略;\n * 只有无标签句柄(实体/compound/构造 API 外传入)才走集合分发,行为与加标签前一致。\n */\n const resolveKind = (shape: BrepHandle, s: number): number => {\n const tagged = kindOf(shape)\n if (tagged !== KIND_SOLID) return tagged\n // 已登记的实体优先:knownFaces/knownEdges 的 key 是裸句柄号,历史登记(如\n // getSubShapes(face,'edge') 写 knownEdges)与后来新建的 solid 号同号时会把实体判成边。\n if (knownSolids.has(s)) return KIND_SOLID\n if (knownFaces.has(s)) return KIND_FACE\n if (knownWires.has(s)) return KIND_WIRE\n if (knownEdges.has(s)) return KIND_EDGE\n return KIND_SOLID\n }\n const readFallback = (): number => {\n try {\n return typeof kernel.meshFallbackCount === 'function' ? Number(kernel.meshFallbackCount()) : 0\n } catch { return 0 }\n }\n /** 布尔类操作后登记回退计数差(§5.4:宿主每步读取,>0 即链中断)。 */\n const trackFallback = <T>(r: T): T => { lastFallbackCount = readFallback(); return r }\n\n const faceCenterOfMass = (face: BrepHandle): BrepVec3 => {\n // brepkit 无 per-face 质心 API;用 UV 域中点在曲面上求值作为面中心近似\n // (与 OCCT 路径的「面中心用于命名/拾取锚点」语义一致,不追求精确质心)。\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n const u = ((d[0] ?? 0) + (d[1] ?? 1)) / 2\n const v = ((d[2] ?? 0) + (d[3] ?? 1)) / 2\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n }\n\n // ── 非实体 tessellation 助手(meshShape 分发用) ──\n // GOTCHA:tessellateFace 返回 JsMesh(positions/normals 为 Float64Array、indices 为 Uint32Array),\n // **不是** tessellateSolidGrouped 的 JSON 字符串——两者形态不同,勿混用 JSON.parse。\n type JsMesh = { positions: ArrayLike<number>; normals: ArrayLike<number>; indices: ArrayLike<number>; vertexCount: number; triangleCount: number }\n\n /** 单个 face → BrepMeshResult(tessellateFace)。 */\n const faceMesh = (f: number, deflection: number, angular: number): BrepMeshResult => {\n const jm = kernel.tessellateFace(f, deflection, angular) as JsMesh\n const positions = arr(jm.positions)\n const normals = arr(jm.normals)\n const indices = arr(jm.indices)\n const triCount = jm.triangleCount > 0 ? jm.triangleCount : indices.length / 3\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: triCount,\n faceGroups: new Int32Array([0, indices.length, faceFingerprint(kernel, f, BREP_HASH_BOUND)]),\n faceCount: 1,\n }\n }\n\n /** 一组 edge 句柄 → 线段 mesh(positions 为采样点、indices 为端点对)。 */\n // GOTCHA:tessellateEdge(edge, N) 返回扁平 [x,y,z,...] 采样点(NURBS 才采样 N 点,\n // 直线边只回端点),不是三角网格;wire/curve 显示吃「端点对」索引(与 mesh 路径 wireMesh 同构)。\n const edgesToLineMesh = (edgeHandles: number[], deflection: number): BrepMeshResult => {\n const positions: number[] = []\n const indices: number[] = []\n // 采样密度:按 deflection 粗采样即可(1D 线框显示,非精确几何)。\n const nPts = Math.max(12, Math.round(4 / Math.max(deflection, 0.01)))\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n const base = positions.length / 3\n for (let i = 0; i < pts.length; i++) positions.push(pts[i]!)\n const verts = pts.length / 3\n for (let i = 0; i < verts - 1; i++) indices.push(base + i, base + i + 1)\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(positions.length),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: 0,\n faceGroups: new Int32Array(0),\n faceCount: 0,\n }\n }\n\n /** wire → 线段 mesh(getWireEdges 取边集后逐边采样)。 */\n const wireMesh = (wire: number, deflection: number): BrepMeshResult => {\n const edges = arr(kernel.getWireEdges(wire))\n return edgesToLineMesh(edges, deflection)\n }\n\n /** solid → BrepMeshResult(tessellateSolidGrouped,原 meshShape 实体路径抽出)。 */\n const solidMesh = (solid: number, deflection: number, angular: number): BrepMeshResult => {\n const raw = kernel.tessellateSolidGrouped(solid, deflection, angular)\n // GOTCHA (2026-10-10, real-device iOS): tessellateSolidGrouped once returned\n // undefined on WeChat's JavaScriptCore worker; the unguarded JSON.parse(undefined)\n // threw the engine-specific \"JSON Parse error: Unexpected identifier \\\"undefined\\\"\",\n // which toOpFailure wrapped into an unlocatable E_OP_FAILED. Fail loudly with\n // handle/param context instead — reporting beats masking, and this also surfaces\n // null / object / other non-string shapes (JSON.parse's implicit ToString would\n // otherwise mangle them into unrecognizable messages).\n if (typeof raw !== 'string') {\n fail(`tessellateSolidGrouped(${solid}, deflection=${deflection}, angular=${angular}) returned ${typeof raw} (${String(raw)}); expected a JSON string`)\n }\n const m = JSON.parse(raw) as { positions: number[]; normals: number[]; indices: number[]; faceOffsets: number[] }\n // faceOffsets 形如 [start0, start1, ..., totalEnd]:以「索引数组单位」计的每面偏移\n // (2026-09-19 实测)。**L1 契约的 faceGroups 就是索引单位**(与 OCCT 一致,\n // 见 brep/engine/types.BrepMeshResult)——此处原样透传,不得再除以 3。\n // GOTCHA(2026-10-01):旧实现除以 3 换成三角形单位,与 topologyExt 的 `/3`\n // 叠加 → 面行区间缩小 3 倍。\n const fo = m.faceOffsets\n const faceCount = Math.max(0, fo.length - 1)\n const faceHashes: number[] = []\n try {\n const faces = arr(kernel.getSolidFaces(solid))\n for (let i = 0; i < faceCount && i < faces.length; i++) faceHashes.push(faceFingerprint(kernel, faces[i]!, BREP_HASH_BOUND))\n } catch { /* 非实体:faceHash 置 0 */ }\n const faceGroups = new Int32Array(faceCount * 3)\n for (let i = 0; i < faceCount; i++) {\n faceGroups[i * 3] = fo[i]!\n faceGroups[i * 3 + 1] = fo[i + 1]! - fo[i]!\n faceGroups[i * 3 + 2] = faceHashes[i] ?? 0\n }\n return {\n positions: new Float32Array(m.positions),\n normals: new Float32Array(m.normals),\n indices: new Uint32Array(m.indices),\n vertexCount: m.positions.length / 3,\n triangleCount: m.indices.length / 3,\n faceGroups,\n faceCount,\n }\n }\n\n /** compound → 逐子句柄 tessellate 后合并(sectionByPlane 面组 / importStep 多实体)。 */\n const compoundMesh = (children: number[], deflection: number, angular: number): BrepMeshResult => {\n const positions: number[] = []\n const normals: number[] = []\n const indices: number[] = []\n const faceGroups: number[] = []\n let indexOffset = 0\n for (const c of children) {\n let sub: BrepMeshResult\n if (knownFaces.has(c)) {\n sub = faceMesh(c, deflection, angular)\n } else if (knownWires.has(c)) {\n sub = wireMesh(c, deflection)\n } else if (knownEdges.has(c)) {\n sub = edgesToLineMesh([c], deflection)\n } else {\n // 子句柄按 solid 处理(importStep 多实体 / makeCompound(solids))。\n sub = solidMesh(c, deflection, angular)\n }\n const vOffset = positions.length / 3\n for (let i = 0; i < sub.positions.length; i++) positions.push(sub.positions[i]!)\n for (let i = 0; i < sub.normals.length; i++) normals.push(sub.normals[i] ?? 0)\n for (let i = 0; i < sub.indices.length; i++) indices.push(sub.indices[i]! + vOffset)\n if (sub.faceGroups) {\n for (let i = 0; i < sub.faceGroups.length; i += 3) {\n faceGroups.push((sub.faceGroups[i] ?? 0) + indexOffset, sub.faceGroups[i + 1] ?? 0, sub.faceGroups[i + 2] ?? 0)\n }\n }\n indexOffset += sub.indices.length\n }\n return {\n positions: new Float32Array(positions),\n normals: new Float32Array(normals),\n indices: new Uint32Array(indices),\n vertexCount: positions.length / 3,\n triangleCount: indices.length / 3,\n faceGroups: new Int32Array(faceGroups),\n faceCount: faceGroups.length / 3,\n }\n }\n\n // ── 按句柄类型深拷贝(transform/copy 族分发用) ──\n // GOTCHA:brepkit copySolid/copyFace/copyWire 三者入参严格对应 solid/face/wire 句柄,\n // 传错即崩溃;transformSolid/transformFace/transformWire 均为「原地修改」void。\n // place/translate 等会作用在 profile 产出的 face 上(sew 用例 place 两张 face),\n // 故必须按 knownFaces/knownWires 分发,不能一律 copySolid。\n // kind 为调用方句柄的类型标签(0 = solid):句柄标签是**权威判定**,knownFaces/knownWires\n // 只作无标签时的兜底(枚举出的面句柄只进 derivedFaces,不在 knownFaces 里)。\n const cloneShape = (shape: number, kind: number = KIND_SOLID): number => {\n if (kind === KIND_FACE || knownFaces.has(shape)) { const c = kernel.copyFace(shape); knownFaces.add(c); return c }\n if (kind === KIND_WIRE || knownWires.has(shape)) { const c = kernel.copyWire(shape); knownWires.add(c); return c }\n return markSolid(kernel.copySolid(shape))\n }\n\n /** 成员句柄数组 → compound(solid-only 内核直通;face/wire/edge 混合走虚拟句柄)。\n * makeCompound 适配器与 cloneAndTransform 的 compound 分支共用(同一分发逻辑一份)。\n *\n * GOTCHA(2026-10-13):**所有** compound 一律返回虚拟句柄(0x20000000+)——brepkit\n * 的 compound 句柄与 solid 句柄**分命名空间且可重号**(见 356 行 GOTCHA:实测成员\n * [0..4] 的 compound 内核句柄 = 0),knownCompounds 若以内核句柄为 key,查询同号的\n * 另一 solid 时会误判成 compound('Hello' translate 后只剩 1 成员的根因)。真内核\n * compound 句柄仅保留在 kernelCompoundHandles,供 exportStep 等 IO 使用。 */\n const compoundOf = (kids: number[]): number => {\n virtualCompoundCounter++\n const v = 0x20000000 + virtualCompoundCounter\n const hasNonSolid = kids.some(\n (k) => knownFaces.has(k) || knownWires.has(k) || knownEdges.has(k) || knownCompounds.has(k),\n )\n if (!hasNonSolid) {\n const c = kernel.makeCompound(Int32Array.from(kids))\n kernelCompoundHandles.set(v, c)\n }\n knownCompounds.set(v, kids)\n return v\n }\n\n /**\n * 深拷贝 + 原地仿射变换(matrix 已经 toKernelMatrix 归一为 16 元素 4×4)。\n *\n * compound 分支(2026-10-13 修复):brepkit 的 copySolid/transformSolid 只吃\n * **solid** 句柄——整体传 compound 会静默丢成员(实测 textToSolid 的 'Hello'\n * 5 成员 compound 经 translate 居中后只剩 1 个,真机 3D 文字只剩最后一个字符)。\n * 必须逐成员深拷贝 + 变换后再 compoundOf 重组。\n */\n const cloneAndTransform = (shape: number, matrix16: number[], kind: number = KIND_SOLID): number => {\n const kids = knownCompounds.get(shape)\n if (kids) {\n // kids 是裸句柄号(无类型标签,kindOf 恒 0);子成员类型由 cloneShape 的\n // knownFaces/knownWires 集合兜底分发(集合 key 即裸号),故递归传默认 kind。\n const t = kids.map((k) => cloneAndTransform(k, matrix16))\n return compoundOf(t)\n }\n const c = cloneShape(shape, kind)\n const m = Float64Array.from(matrix16)\n if (kind === KIND_FACE || knownFaces.has(c)) kernel.transformFace(c, m)\n else if (kind === KIND_WIRE || knownWires.has(c)) kernel.transformWire(c, m)\n else kernel.transformSolid(c, m)\n return c\n }\n\n // ── 扫掠 / 放样共用助手(L1 中立名 sweep/loft 的 brepkit 方言消化)──\n\n /** 截面句柄(面直用、wire 升面)→ brepkit face 句柄号(升面结果登记 knownFaces)。 */\n const profileFaceOf = (section: BrepHandle, what: string): number => {\n const n = asNum(section)\n const kind = resolveKind(section, n)\n if (kind === KIND_FACE) return n\n if (kind === KIND_WIRE) {\n // GOTCHA(与 makeFace 同因):makeFaceFromWire 产出的是**新** face 句柄号,\n // 不登记 knownFaces 的话,后续任何按类型分发的调用(meshShape / 再扫掠)\n // 会把它当 solid 走 tessellateSolidGrouped 崩溃。\n const f = kernel.makeFaceFromWire(n)\n knownFaces.add(f)\n return f\n }\n return fail(`${what} requires a planar face or a closed wire; got a handle that is neither`)\n }\n\n /** edge 的参数域 `[first, last]`(brepkit `getEdgeCurveParameters` 返回 Float64Array)。 */\n const curveParamsOf = (edge: number): [number, number] => {\n const d = toNumArray(kernel.getEdgeCurveParameters(edge))\n return [d[0] ?? 0, d[d.length - 1] ?? 1]\n }\n\n /** 相邻重复点去重(折线链顶点与采样点列共用;容差 1e-9 mm)。 */\n const pushUnique = (out: BrepVec3[], p: BrepVec3): void => {\n const last = out[out.length - 1]\n if (\n last !== undefined &&\n Math.abs(last.x - p.x) < 1e-9 &&\n Math.abs(last.y - p.y) < 1e-9 &&\n Math.abs(last.z - p.z) < 1e-9\n ) return\n out.push(p)\n }\n\n /** 折线链顶点:各线的首点 + 末线终点(供 degree=1 插值,拐角不圆化)。 */\n const lineChainVertices = (edges: number[]): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0))))\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t1))))\n }\n return out\n }\n\n /** 曲线链按参数等分采样(每条边 perEdge 段),供 NURBS 拟合。 */\n const sampleChainPoints = (edges: number[], perEdge = 8): BrepVec3[] => {\n const out: BrepVec3[] = []\n for (const e of edges) {\n const [t0, t1] = curveParamsOf(e)\n for (let i = 0; i <= perEdge; i++) {\n pushUnique(out, vec3Of(toNumArray(kernel.evaluateEdgeCurve(e, t0 + (t1 - t0) * (i / perEdge)))))\n }\n }\n return out\n }\n\n /**\n * 路径 wire → 一条可作 brepkit 扫掠路径的 NURBS edge(方案 §4.1 三条路线)。\n *\n * - 路线 3:单条 NURBS/Bézier 边 → 原样返回,零损失;\n * - 路线 1:折线 wire(`cad.wire` 默认产物,全 line 边)→ 顶点列 + **degree=1** 插值。\n * 一次 NURBS 的基就是折线,这不是近似而是精确表示 —— 比一律 degree=3 拟合更忠实;\n * - 路线 2:含圆弧等曲线边 → 按参数等分采样后 degree=3 拟合(近似,方案 §8 已声明代价)。\n *\n * GOTCHA-1:`getNurbsCurveData` 对解析边(line/circle)**抛错**而非返回 null,\n * 「先拿它探路、失败再拟合」会踩坑 —— 必须**先**判 `getEdgeCurveType` 再选路线。\n *\n * GOTCHA-2(2026-10-10 实测):**不要**走 `kernel.sweep(face, degree, knots, ctrl, weights)`\n * —— 本仓 `getNurbsCurveData` 给出的 `knots`(去重值 + 平行 multiplicities)展开后\n * 与 brepkit `sweep` 期望的节点向量长度不一致,实测报\n * `invalid knot vector: expected 2 knots, got 6`。改用直吃 edge 句柄的\n * `sweepWithOptions`(本 helper 因此返回 edge 而不是四数组),绕开该约定差异。\n */\n const wireToSpineEdge = (spine: BrepHandle): number => {\n const w = asNum(spine)\n if (resolveKind(spine, w) !== KIND_WIRE) fail('sweep: spine must be a wire')\n const edges = arr(kernel.getWireEdges(w))\n if (edges.length === 0) fail('sweep: spine wire has no edges')\n const typeOf = (e: number): string => String(kernel.getEdgeCurveType(e)).toUpperCase()\n const ANALYTIC = new Set(['LINE', 'CIRCLE', 'ELLIPSE'])\n // 路线 3:单条非解析边(NURBS/Bézier)原样用,零损失。\n if (edges.length === 1 && !ANALYTIC.has(typeOf(edges[0]!))) return edges[0]!\n // 路线 1 / 2:采样点列 → interpolatePoints 拟合成一条 NURBS 边。\n const allLines = edges.every((e) => typeOf(e) === 'LINE')\n const pts = allLines ? lineChainVertices(edges) : sampleChainPoints(edges)\n if (pts.length < 2) fail('sweep: spine wire degenerates to fewer than 2 distinct points')\n const degree = allLines ? 1 : Math.min(3, pts.length - 1)\n // GOTCHA:brepkit 内核是 **GC 型**,没有 `release` 方法(HAND_MAP 里 core:'release'\n // 的 brepkit 侧为 null,适配器 no-op)——这里不能 `kernel.release(fit)`;\n // 拟合边登记进 knownEdges 后由内核统一管理生命周期。\n const fit = kernel.interpolatePoints(flattenPoints(pts), degree)\n knownEdges.add(fit)\n return fit\n }\n\n const api: BrepkitEngineExtras = {\n // ── 生命周期 ──\n release(_shape: BrepHandle): void { /* GC 型:brepkit 句柄由内核统一管理,无逐句柄 free API */ },\n dispose(_shape?: BrepHandle): void { /* GC 型引擎:无显式释放 */ },\n /** 内核级诊断:距上次读取的 mesh 布尔回退计数差(>0 = BREP 链已中断)。 */\n getMeshFallbackCount(): number {\n const now = readFallback()\n const delta = now - lastFallbackCount\n lastFallbackCount = now\n return delta\n },\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle { return asHandle(markSolid(kernel.makeBox(dx, dy, dz))) },\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle {\n const dx = Math.abs(corner2.x - corner1.x), dy = Math.abs(corner2.y - corner1.y), dz = Math.abs(corner2.z - corner1.z)\n const h = markSolid(kernel.makeBox(dx, dy, dz))\n // ⚠️ transformSolid 是「原地修改、返回 undefined」——makeBox 的句柄本身即新实体,\n // 直接原地变换后返回 h;若写 `asHandle(transformSolid(...))` 会拿到 undefined 句柄\n // (2026-09-25 实证:导致 splitBrep 基于半空间盒的 common/cut 全部失效)。\n kernel.transformSolid(h, toKernelMatrix(translationMatrix(\n Math.min(corner1.x, corner2.x), Math.min(corner1.y, corner2.y), Math.min(corner1.z, corner2.z),\n )))\n return asHandle(h)\n },\n makeCylinder(radius: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCylinder(radius, height))) },\n makeSphere(radius: number): BrepHandle { return asHandle(markSolid(kernel.makeSphere(radius, 32))) },\n makeCone(r1: number, r2: number, height: number): BrepHandle { return asHandle(markSolid(kernel.makeCone(r1, r2, height))) },\n makeRectangle(width: number, height: number): BrepHandle {\n const f = kernel.makeRectangle(width, height)\n knownFaces.add(f)\n return asFace(f)\n },\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle { return asHandle(markSolid(kernel.makeEllipsoid(rx, ry, rz))) },\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle { return asHandle(markSolid(kernel.makeTorus(majorRadius, minorRadius, 64))) },\n makeVertex(x: number, y: number, z: number): BrepHandle { return asVertex(kernel.makeVertex(x, y, z)) },\n\n // ── 造型运算 ──\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n // 方言归一(§3.6-1):L1 口径是挤出向量;brepkit 原生吃 (face, dir, distance)。\n const s = asNum(shape)\n if (!knownFaces.has(s)) {\n fail('extrude requires a face input (plan §3.6-1); got a handle that is not a known face')\n }\n const len = Math.hypot(dx, dy, dz)\n if (len === 0) fail('extrude: zero-length extrusion vector')\n return asHandle(markSolid(kernel.extrude(s, dx / len, dy / len, dz / len, len)))\n },\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle {\n // 方言归一(与 sweep / loft 同款):brepkit 原生 revolve 只吃 face,而 L1 调用方\n // 传的是**闭合轮廓 wire**(如 faijs-fasteners 的 revolveProfile 直传 wire);\n // occt 侧原生 revolve 两者都吃。方言在适配器消化:wire → makeFaceFromWire 升面,\n // 升面失败(开口 wire)由内核报错,不在适配器预判(与 sweep 同一纪律)。\n const faceNum = profileFaceOf(shape, 'revolveVec')\n return asHandle(markSolid(kernel.revolve(\n faceNum, center.x, center.y, center.z, direction.x, direction.y, direction.z, angleDeg,\n )))\n },\n sweep(profile: BrepHandle, spine: BrepHandle): BrepHandle {\n // L1 中立 sweep:occt 侧走 sweepPipeShell;brepkit 只吃 (face, 路径 edge)\n // —— 两处方言都在这里消化,op 层只看到「截面 + 路径 → 体」。\n // ① 截面 wire → face(开口 wire 建面由内核拒绝;不在适配器预判,内核报错更权威)。\n const faceNum = profileFaceOf(profile, 'sweep')\n // ② 路径 wire → 一条 NURBS edge(见 wireToSpineEdge 的 GOTCHA-2)。\n const pathEdge = wireToSpineEdge(spine)\n // ③ sweepWithOptions:contact_mode 'rmf'(内核默认)、无缩放律、默认分段、光滑转角。\n return asHandle(markSolid(kernel.sweepWithOptions(\n faceNum, pathEdge, 'rmf', new Float64Array(0), 0, 'smooth',\n )))\n },\n loft(sections: BrepHandle[], ruled: boolean, endPoint?: BrepVec3): BrepHandle {\n if (!Array.isArray(sections) || sections.length < 2) {\n fail('loft requires at least 2 sections')\n }\n // ① 各截面 → face。\n const faces = sections.map((s) => profileFaceOf(s, 'loft'))\n // ② 顶点数不一致的截面(如圆 → 方)直接放行:brepkit 内核\n // (operations/loft.rs)会把所有截面重采样到最大顶点数再蒙皮,\n // wasm 绑定层无额外校验。不再执行前拦截(原 E_LOFT_SECTION_MISMATCH\n // 门禁已移除,2026-10-14)。\n const farr = Uint32Array.from(faces)\n // ③ 选项映射:endPoint → loftWithOptions;ruled=false → loftSmooth。\n if (endPoint !== undefined) {\n // 契约守卫:L1 的第三参是 `endPoint: BrepVec3`,而包侧旧口径是\n // `loft(wires, isSolid?, ruled?)`(faijs-gears `kernel/gears.ts` 的\n // `loft(wires, false, false)` 即如此)。布尔量落进 endPoint 位后会一路进内核,\n // 只得到一句无指向的 wasm 报错(实测 `cannot normalize zero vector`)——\n // 静态可判的输入约束必须在执行前显式失败(方案 §5② 红线),不进内核猜。\n if (!isBrepVec3(endPoint)) {\n fail(`E_LOFT_BAD_ENDPOINT: loft endPoint must be a BrepVec3 ({x,y,z}), got ${JSON.stringify(endPoint)}`)\n }\n return asHandle(markSolid(kernel.loftWithOptions(\n farr, JSON.stringify({ ruled, endPoint: [endPoint.x, endPoint.y, endPoint.z] }),\n )))\n }\n return asHandle(markSolid(ruled ? kernel.loft(farr) : kernel.loftSmooth(farr)))\n },\n sew(shapesList: BrepHandle[], tolerance?: number): BrepHandle {\n return asHandle(markSolid(kernel.sewFaces(Uint32Array.from(shapesList.map(asNum)), tolerance ?? 1e-6)))\n },\n sewAndSolidify(faces: BrepHandle[], _tolerance?: number): BrepHandle {\n // brepkit 的 makeSolid 即「缝合并固化成实体」(sewFaces + 建 solid)。\n return asHandle(markSolid(kernel.makeSolid(Uint32Array.from(faces.map(asNum)))))\n },\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, _tolerance: number): BrepHandle {\n // brepkit 参数序 (solid, thickness, open_faces);tolerance 内核固定。\n return asHandle(markSolid(kernel.shell(asNum(solid), thickness, Uint32Array.from(facesToRemove.map(asNum)))))\n },\n hullFromPoints(points: BrepVec3[], _tolerance: number): BrepHandle {\n return asHandle(markSolid(kernel.convexHull(flattenPoints(points))))\n },\n // ── 样条面 / 体构造补缺(2026-10-13 进 L1)──\n bsplineSurface(points: BrepVec3[], rows: number, cols: number): BrepHandle {\n // §7 决策点 1 选**插值**(interpolateSurface):L1 语义锚是 occt 的过点\n // GeomAPI_PointsToBSplineSurface。不用 approximateSurfaceLspia——那是逼近,语义不同。\n // 阶数:brepkit 要求 degree < 该方向点数,缺省 3 并夹紧(点少时降阶,不崩)。\n const degU = Math.max(1, Math.min(3, rows - 1))\n const degV = Math.max(1, Math.min(3, cols - 1))\n if (points.length !== rows * cols) {\n fail(`bsplineSurface: expected ${rows * cols} points (${rows}×${cols}), got ${points.length}`)\n }\n const f = kernel.interpolateSurface(flattenPoints(points), rows, cols, degU, degV)\n knownFaces.add(f)\n return asFace(f)\n },\n makeSolid(shell: BrepHandle): BrepHandle {\n const n = asNum(shell)\n // 方言归一:brepkit 的 revolve / extrude / loft 已直接产出实体(markSolid 登记),\n // 而 occt 的 revolve 产 shell、须 MakeSolid 固化。中立调用方统一写成\n // `makeSolid(revolve(...))`(faijs-fasteners 的 revolveProfile 即如此),故此处对\n // **已是实体**的输入幂等返回——不是吞错:非 shell 的输入仍交给内核报错。\n if (knownSolids.has(n)) return shell\n return asHandle(markSolid(kernel.solidFromShell(n)))\n },\n thicken(shape: BrepHandle, thickness: number, tolerance?: number): BrepHandle {\n // brepkit 原生 thicken 只有 (face, thickness),**无 tolerance 参数** ——\n // 传非零容差即显式失败,不静默丢弃(与 sweep/loft 的显式失败同一纪律)。\n if (tolerance !== undefined && tolerance !== 0) {\n fail(`thicken: brepkit has no tolerance parameter (got ${tolerance}); pass 0 or omit it`)\n }\n return asHandle(markSolid(kernel.thicken(asNum(shape), thickness)))\n },\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.fuse(asNum(a), asNum(b))))) },\n cut(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.cut(asNum(a), asNum(b))))) },\n common(a: BrepHandle, b: BrepHandle): BrepHandle {\n // brepkit 无 `common` 原生名;交集语义由 `intersect` 承担(method-map: dialect)。\n return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b)))))\n },\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle { return asHandle(markSolid(trackFallback(kernel.intersect(asNum(a), asNum(b))))) },\n fuseAll(shapesList: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fuseAll(Int32Array.from(shapesList.map(asNum))))))\n },\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[] {\n // brepkit 原生 section(solid, plane) 返回剖面 face 句柄组(§3.6-2 新中立名)。\n // GOTCHA:brepkit section 返回的是 **face** 句柄(不是 edge/wire),必须登记进 knownFaces,\n // 否则 op 层 makeCompound(这些 face) 后送 meshShape 会按 solid 路径崩溃。\n const s = asNum(shape)\n const faces = arr(kernel.section(\n s, point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n for (const f of faces) knownFaces.add(f)\n return faces.map(asHandle)\n },\n splitByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): { positive: BrepHandle; negative: BrepHandle } {\n const parts = arr(kernel.split(\n asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z,\n ))\n if (parts.length !== 2) {\n fail(`splitByPlane: expected 2 solids, got ${parts.length}`)\n }\n // 法向正侧 = positive(§3.7):按质心在平面法向的投影分类。\n const originDot = point.x * normal.x + point.y * normal.y + point.z * normal.z\n const side = (h: number): number => {\n const c = toNumArray(kernel.centerOfMass(h, 0.05))\n return (c[0] ?? 0) * normal.x + (c[1] ?? 0) * normal.y + (c[2] ?? 0) * normal.z - originDot\n }\n const [a, b] = parts\n markSolid(a); markSolid(b)\n return side(a) >= side(b)\n ? { positive: asHandle(a), negative: asHandle(b) }\n : { positive: asHandle(b), negative: asHandle(a) }\n },\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.chamfer(asNum(solid), Uint32Array.from(edges.map(asNum)), distance))))\n },\n chamferDistAngle(solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number): BrepHandle {\n // 方言映射:L1 chamferDistAngle ↔ brepkit chamferDistanceAngle。\n // ⚠️ 单位方言:L1 口径是**度**(`AddDA(distance, angleDeg, E, F)`),brepkit 内核吃**弧度**\n // (2026-09-25 实证:传 45 抛 \"angle must be less than π/2\";传 π/4 正常倒角)。\n const angleRad = (angleDeg * Math.PI) / 180\n return asHandle(markSolid(trackFallback(kernel.chamferDistanceAngle(\n asNum(solid), Uint32Array.from(edges.map(asNum)), distance, angleRad,\n ))))\n },\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle {\n return asHandle(markSolid(trackFallback(kernel.fillet(asNum(solid), Uint32Array.from(edges.map(asNum)), radius))))\n },\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle {\n // 方言映射:L1 filletVariable(solid, edge, startRadius, endRadius)(单边变半径)\n // ↔ brepkit filletVariable(solid, json) 吃**序列** `[{edge, radius1, radius2}, ...]`。\n // ⚠️ 直接传 4 个位置参数会触发 wasm memory out of bounds(2026-09-25 实证)。\n const spec = JSON.stringify([{ edge: asNum(edge), radius1: startRadius, radius2: endRadius }])\n return asHandle(markSolid(trackFallback(kernel.filletVariable(asNum(solid), spec))))\n },\n filletWithHistory(solid: BrepHandle, edges: BrepHandle[], radius: number, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.filletWithEvolution(asNum(solid), Int32Array.from(edges.map(asNum)), radius)\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n\n // ── 变换 ──\n // ⚠️ brepkit 的 transformSolid 是「原地修改、返回 undefined」——必须先 copySolid\n // 复制出新句柄再变换,否则会篡改调用方手里的原实体(单测 2026-09-19 实证)。\n // ⚠️ 矩阵方言:faijs 接口口径是 3×4 行主序 12 元素(见 brep/engine/primitives.ts);\n // brepkit transformSolid 吃 4×4 行主序 16 元素。所有 transformSolid 调用一律经\n // toKernelMatrix 归一(下方唯一转换点),禁止直出 16 元素旁路。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(translationMatrix(dx, dy, dz)), kindOf(shape)))\n },\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(scaleMatrix(center, factor)), kindOf(shape)))\n },\n transform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n located(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n locate(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle {\n return withKind(kindOf(shape), cloneAndTransform(asNum(shape), toKernelMatrix(matrix), kindOf(shape)))\n },\n copy(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n copyShape(shape: BrepHandle): BrepHandle { return withKind(kindOf(shape), cloneShape(asNum(shape), kindOf(shape))) },\n composeTransform(m1: number[], m2: number[]): number[] {\n // 方言:L1 是 3×4 行主序 12 元素;brepkit composeTransforms 吃/回 4×4 16 元素。\n const r = kernel.composeTransforms(\n Float64Array.from(toKernelMatrix(m1)),\n Float64Array.from(toKernelMatrix(m2)),\n )\n return Array.from(r as ArrayLike<number>).slice(0, 12)\n },\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle {\n return withKind(kindOf(shape), kernel.mirror(asNum(shape), point.x, point.y, point.z, normal.x, normal.y, normal.z))\n },\n rotate(shape: BrepHandle, axis: { point: BrepVec3; direction: BrepVec3 }, angleRad: number): BrepHandle {\n // brepkit 无 rotate 原语 → 适配器组 Rodrigues 3×4 矩阵后走既有 cloneAndTransform\n // (toKernelMatrix 仍是唯一方言转换点;与 translate/scale 同一条路径)。\n return withKind(\n kindOf(shape),\n cloneAndTransform(asNum(shape), toKernelMatrix(rotationMatrix(axis.point, axis.direction, angleRad)), kindOf(shape)),\n )\n },\n\n // ── 阵列 ──\n // brepkit wasm 的 pattern 内核函数都返回 compound(含全部副本)→ 经 getCompoundSolids 拆成数组。\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[] {\n const compound = kernel.linearPattern(asNum(shape), direction.x, direction.y, direction.z, spacing, count)\n // 阵列内核返回 compound(原始句柄)→ 拆成实体数组并逐个登记(见 markSolid GOTCHA)。\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n circularPattern(shape: BrepHandle, _center: BrepVec3, axis: BrepVec3, _angleStep: number, count: number): BrepHandle[] {\n // ⚠️ brepkit wasm circularPattern(solid, ax, ay, az, count) 无 center/angle 参数:\n // 固定整圆均分(每份 360°/count)。fullAngle=360 时与 occt 语义一致;\n // 其它角度跨度无法表达(语义限制记录于此,parity 测试用整圆)。\n const compound = kernel.circularPattern(asNum(shape), axis.x, axis.y, axis.z, count)\n return markSolids(arr(kernel.getCompoundSolids(compound))).map(asHandle)\n },\n gridPattern(shape: BrepHandle, directionX: BrepVec3, directionY: BrepVec3, spacingX: number, spacingY: number, countX: number, countY: number): BrepHandle {\n return asHandle(markSolid(kernel.gridPattern(\n asNum(shape),\n directionX.x, directionX.y, directionX.z,\n directionY.x, directionY.y, directionY.z,\n spacingX, spacingY, countX, countY,\n )))\n },\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle {\n const e = kernel.makeLineEdge(start.x, start.y, start.z, end.x, end.y, end.z)\n knownEdges.add(e)\n return asEdge(e)\n },\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle {\n // 方言消化:occt 吃 3 点;brepkit makeCircleArc3d 吃 (start,end,center,axis)。\n const { center, axis } = circumcircle(start, mid, end)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n axis.x, axis.y, axis.z,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle {\n // 方言消化:L1 吃控制点(Bezier);brepkit 原生 makeNurbsEdge 吃\n // (start,end,degree,knots,control_points,weights)。Bezier = degree n-1 的\n // clamped NURBS,knots = [0]×n + [1]×n,weights 全 1。\n const n = controlPoints.length\n if (n < 2) fail('makeBezierEdge: need at least 2 control points')\n const degree = n - 1\n const knots = new Float64Array(2 * n)\n for (let i = n; i < 2 * n; i++) knots[i] = 1\n const weights = new Float64Array(n).fill(1)\n const first = controlPoints[0]\n const last = controlPoints[n - 1]\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree, knots, flattenPoints(controlPoints), weights,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic = false,\n ): BrepHandle {\n // 方言消化:L1 吃 occt 形态 (poles, weights, knots, multiplicities, degree),\n // brepkit makeNurbsEdge 吃 (start,end,degree, **展开后** knots, control_points, weights)。\n // 两侧 knots 的表示不同:occt 给「去重值 + 多重度」两个平行数组,brepkit 要\n // 逐项重复后的整条节点向量(与 makeBezierEdge 里手工铺 [0]×n+[1]×n 同一口径)。\n const controlPoints: BrepVec3[] = []\n for (let i = 0; i + 2 < poles.length; i += 3) {\n controlPoints.push({ x: poles[i]!, y: poles[i + 1]!, z: poles[i + 2]! })\n }\n const n = controlPoints.length\n if (n < 2) fail('makeBSplineEdge: need at least 2 poles')\n const expanded: number[] = []\n for (let i = 0; i < knots.length; i++) {\n const rep = multiplicities[i] ?? 1\n for (let j = 0; j < rep; j++) expanded.push(knots[i]!)\n }\n const first = controlPoints[0]!\n const last = controlPoints[n - 1]!\n const e = kernel.makeNurbsEdge(\n first.x, first.y, first.z,\n last.x, last.y, last.z,\n degree,\n Float64Array.from(expanded),\n flattenPoints(controlPoints),\n weights.length === n ? Float64Array.from(weights) : new Float64Array(n).fill(1),\n )\n void periodic\n knownEdges.add(e)\n return asEdge(e)\n },\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle {\n const e = kernel.makeCircleEdge(\n center.x, center.y, center.z, normal.x, normal.y, normal.z, radius,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeCircleArc(\n center: BrepVec3,\n normal: BrepVec3,\n radius: number,\n startAngle: number,\n endAngle: number,\n ): BrepHandle {\n // 方言消化:L1 吃 (圆心, 法向, 半径, 起止角);brepkit makeCircleArc3d 吃\n // (start, end, center, axis)。先在法向的垂直平面里建正交基 (u,v),\n // 起点/终点由角度算,axis 取归一化法向(右手:θ 增大绕 axis 逆时针)。\n const len = Math.hypot(normal.x, normal.y, normal.z)\n if (!(len > 0)) fail('makeCircleArc: normal must be a non-zero vector')\n const n: BrepVec3 = { x: normal.x / len, y: normal.y / len, z: normal.z / len }\n let u: BrepVec3\n const ax = Math.abs(n.x)\n const ay = Math.abs(n.y)\n const az = Math.abs(n.z)\n if (ax <= ay && ax <= az) u = { x: 0, y: -n.z, z: n.y }\n else if (ay <= az) u = { x: -n.z, y: 0, z: n.x }\n else u = { x: n.y, y: -n.x, z: 0 }\n const ul = Math.hypot(u.x, u.y, u.z)\n u = { x: u.x / ul, y: u.y / ul, z: u.z / ul }\n const v: BrepVec3 = {\n x: n.y * u.z - n.z * u.y,\n y: n.z * u.x - n.x * u.z,\n z: n.x * u.y - n.y * u.x,\n }\n const at = (ang: number): BrepVec3 => {\n const cs = Math.cos(ang) * radius\n const sn = Math.sin(ang) * radius\n return {\n x: center.x + u.x * cs + v.x * sn,\n y: center.y + u.y * cs + v.y * sn,\n z: center.z + u.z * cs + v.z * sn,\n }\n }\n const start = at(startAngle)\n const end = at(endAngle)\n const e = kernel.makeCircleArc3d(\n start.x, start.y, start.z,\n end.x, end.y, end.z,\n center.x, center.y, center.z,\n n.x, n.y, n.z,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n makeHelixWire(\n origin: BrepVec3,\n axis: BrepVec3,\n pitch: number,\n height: number,\n radius: number,\n leftHanded?: boolean,\n ): BrepHandle {\n // 左手显式失败:brepkit 无带手性螺旋原语,而采样拟合补镜像属「静默换算法」\n // (同 pitch/height/radius 下左右旋互为镜像,报错比悄悄换构造更安全)。\n // 这是**形参级**缺口:右手在 brepkit 上仍然可用,故 op 侧不声明 engines:['occt']\n // ——声明了会把右手一并拒掉。缺口在实现体内显式报错(同 extrude 拒绝非 face 输入)。\n if (leftHanded) {\n fail(\n 'makeHelixWire: left-handed helix requires the occt engine ' +\n '(brepkit has no handed helix primitive; no mirror fallback by design)',\n )\n }\n // §7 决策点 2 选 (a):解析螺旋采样 → interpolatePoints 造 NURBS edge → makeWire。\n // brepkit 的 helicalSweep 是**扫掠成体**,不能用于 1D wire。\n // 偏差 = 采样弦高(近似,非解析),由 helix 一致性测试钉 band。\n const pts = sampleHelixPoints(origin, axis, pitch, height, radius)\n const degree = Math.min(3, pts.length - 1)\n const e = kernel.interpolatePoints(flattenPoints(pts), degree)\n knownEdges.add(e)\n const w = kernel.makeWire(Int32Array.from([e]), false)\n knownWires.add(w)\n return asWire(w)\n },\n approximatePoints(points: BrepVec3[], tolerance?: number): BrepHandle {\n // 方言消化:L1 吃 (点列, 容差);brepkit approximateCurveLspia 还要\n // degree / num_control_points / max_iterations —— 由适配器给缺省\n // (degree 3 夹紧、numCps 取点数、迭代 100),容差直接落 tolerance。\n const n = points.length\n if (n < 2) fail(`approximatePoints: need at least 2 points, got ${n}`)\n const degree = Math.max(1, Math.min(3, n - 1))\n const e = kernel.approximateCurveLspia(\n flattenPoints(points), degree, n, tolerance ?? 1e-2, 100,\n )\n knownEdges.add(e)\n return asEdge(e)\n },\n interpolatePointsWithTangents(\n points: BrepVec3[],\n _startTangent: BrepVec3,\n _endTangent: BrepVec3,\n ): BrepHandle {\n // ⚠️ 退化实现(§7 决策点 3 选 (a)):brepkit 无「带端点切向约束的插值」原语,\n // 这里退化为普通 interpolatePoints(degree 3)—— **两端切向被丢弃**,端点\n // 斜率与 occt 的 GeomAPI_Interpolate(scale=True) 不同。这是有记录的近似\n // (HAND_MAP note + 偏差 band 双钉),不是静默降级。\n const n = points.length\n if (n < 2) fail(`interpolatePointsWithTangents: need at least 2 points, got ${n}`)\n const e = kernel.interpolatePoints(flattenPoints(points), Math.min(3, n - 1))\n knownEdges.add(e)\n return asEdge(e)\n },\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle {\n const w = kernel.makeWire(Int32Array.from(edges.map(asNum)), false)\n knownWires.add(w)\n return asWire(w)\n },\n makeFace(wire: BrepHandle): BrepHandle {\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asFace(f)\n },\n makeCompound(shapesList: BrepHandle[]): BrepHandle {\n const kids = arr(shapesList.map(asNum))\n // GOTCHA(2026-09-26):brepkit makeCompound 只接受 **solid** 句柄——把 face/wire\n // (sectionByPlane 截面面组)塞进去即抛 \"invalid solid handle\"。非实体子句柄时\n // 不调内核;且 compound 与 solid 分命名空间会**重号**(2026-10-13 实测成员 [0..4]\n // 的 compound 内核句柄 = 0),真句柄进 knownCompounds 会让同号 solid 查询误判。\n // 故**一律**走高段虚拟句柄(0x20000000+),仅靠 knownCompounds 表分发\n // meshShape/wireframe/getSubShapes/getBoundingBox,不触达内核;真内核句柄由\n // compoundOf 保留在 kernelCompoundHandles 供 exportStep 映射。分发逻辑与\n // cloneAndTransform 的 compound 分支共用 compoundOf(一份实现)。\n return asHandle(compoundOf(kids))\n },\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle {\n // addHolesToFace 返回**新 face 句柄**(同曲面 + 内孔 wire),必须登记进 knownFaces,\n // 否则 profile(op) 带孔面送 meshShape 会落到 solid 路径崩溃。\n const f = kernel.addHolesToFace(asNum(face), Int32Array.from(holeWires.map(asNum)))\n knownFaces.add(f)\n return asFace(f)\n },\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle {\n const f = kernel.makePolygon(flattenPoints([a, b, c]))\n knownFaces.add(f)\n return asFace(f)\n },\n makeNonPlanarFace(wire: BrepHandle): BrepHandle {\n // brepkit 的 makeFaceFromWire 不区分平面/非平面(与 makeFace 同一原生),\n // 但 L1 保留独立中立名:occt 侧 makeFace 是平面路径,语义不同。\n const f = kernel.makeFaceFromWire(asNum(wire))\n knownFaces.add(f)\n return asFace(f)\n },\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult {\n const deflection = options?.linearDeflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const angular = options?.angularDeflection ?? 0.5\n const s = asNum(shape)\n // 非实体句柄按类型静态分发(标签优先,见文件头 GOTCHA:brepkit 无 shape-type 分类 API)。\n // 顺序:face → wire → edge → compound → solid。实体创建不入任何集合,天然落 solid 路径。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return faceMesh(s, deflection, angular)\n if (kind === KIND_WIRE) return wireMesh(s, deflection)\n if (kind === KIND_EDGE) return edgesToLineMesh([s], deflection)\n const compoundChildren = knownCompounds.get(s)\n if (compoundChildren) return compoundMesh(compoundChildren, deflection, angular)\n // solid(或未登记句柄):走原 tessellateSolidGrouped 路径。\n return solidMesh(s, deflection, angular)\n },\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData {\n const d = deflection ?? DEFAULT_LINEAR_DEFLECTION.as(mm)\n const s = asNum(shape)\n // GOTCHA:meshEdgesAll 是 solid-only API——buildTopologyFromMesh 会对 face/wire/edge\n // 产物调 wireframe(...),传入非实体句柄即抛 \"invalid solid handle\"。按已知集合分发:\n // face -> getFaceEdges;wire -> getWireEdges;edge -> [self];否则 solid 走 meshEdgesAll。\n let edgeHandles: number[] | null = null\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) edgeHandles = arr(kernel.getFaceEdges(s))\n else if (kind === KIND_WIRE) edgeHandles = arr(kernel.getWireEdges(s))\n else if (kind === KIND_EDGE) edgeHandles = [s]\n else if (knownCompounds.has(s)) {\n // compound(sectionByPlane 面组):逐子面收集边。\n edgeHandles = []\n for (const k of knownCompounds.get(s)!) {\n if (knownFaces.has(k)) edgeHandles.push(...arr(kernel.getFaceEdges(k)))\n else if (knownWires.has(k)) edgeHandles.push(...arr(kernel.getWireEdges(k)))\n else if (knownEdges.has(k)) edgeHandles.push(k)\n }\n }\n if (edgeHandles) {\n const nPts = Math.max(12, Math.round(4 / Math.max(d, 0.01)))\n const positions: number[] = []\n // offsets 为**浮点单位**(L1 契约:edgeGroups = [pointStart_float, pointCount_float, hash])\n const offsets: number[] = [0]\n for (const e of edgeHandles) {\n const pts = arr(kernel.tessellateEdge(e, nPts))\n for (const p of pts) positions.push(p)\n offsets.push(positions.length)\n }\n const edgeGroups = new Int32Array(edgeHandles.length * 3)\n for (let i = 0; i < edgeHandles.length; i++) {\n edgeGroups[i * 3] = offsets[i] ?? 0\n edgeGroups[i * 3 + 1] = (offsets[i + 1] ?? positions.length) - (offsets[i] ?? 0)\n // hash 必须与 hashCode(edge, BREP_HASH_BOUND) 同源,否则 topologyExt 查不到折线。\n edgeGroups[i * 3 + 2] = edgeFingerprint(kernel, edgeHandles[i]!, BREP_HASH_BOUND)\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount: edgeHandles.length }\n }\n // solid(或未登记句柄):走原 meshEdgesAll 路径。\n // JsEdgeLines:edgeCount/offsets/positions 均为属性(offsets/positions 为 TypedArray,2026-09-19 实测)\n const me = kernel.meshEdgesAll(s, d, 0.5) as {\n edgeCount: number; offsets: ArrayLike<number>; positions: ArrayLike<number>\n }\n const edgeCount = Number(me.edgeCount)\n const offsets = arr(me.offsets)\n const positions = arr(me.positions)\n // hash:meshEdgesAll 与 getSolidEdges 同序(同一次遍历),据此回填真实边指纹;\n // 取不到(数量不符)时退化为序号——此时 topologyExt 查不到折线,曲面边走\n // 曲线采样兜底(功能可用,只是丢掉内核线框数据)。\n let solidEdges: number[] | null = null\n try { const es = arr(kernel.getSolidEdges(s)); if (es.length === edgeCount) solidEdges = es } catch { /* 非实体 */ }\n const edgeGroups = new Int32Array(edgeCount * 3)\n for (let i = 0; i < edgeCount; i++) {\n const start = offsets[i] ?? 0\n const count = (offsets[i + 1] ?? positions.length) - start\n edgeGroups[i * 3] = start\n edgeGroups[i * 3 + 1] = count\n edgeGroups[i * 3 + 2] = solidEdges\n ? edgeFingerprint(kernel, solidEdges[i]!, BREP_HASH_BOUND)\n : i\n }\n return { points: new Float32Array(positions), edgeGroups, pointCount: positions.length, edgeCount }\n },\n\n // ── 拓扑查询 ──\n // 注意:拓扑 manifest(topologyExt.buildSelectorManifestCore)会在「面句柄」上调用\n // getSubShapes(face, 'edge'/'vertex'),而 brepkit 的 getSolidEdges/getSolidVertices\n // 只接受 solid 句柄;brepkit 提供 getFaceEdges(face)/getFaceVertices(face)。\n // brepkit 没有 shape-type 分类 API,且 getFaceEdges(solid) 不抛错(会返回某一面的边),\n // 不能用 try/catch 探测。改用「已知面集」:每次枚举面时把面句柄记入 knownFaces,\n // edge/vertex 查询时按句柄是否在 knownFaces 里分发到 face 级或 solid 级 API。\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[] {\n const s = asNum(shape)\n // 出口一律按 **type 参数**打类型标签(`type` 就是调用方声明的子形类型,是权威来源;\n // 不用内核反查——brepkit 无法反查类型,见文件头句柄桥接 GOTCHA)。\n const tag = (list: number[]): BrepHandle[] => {\n switch (type) {\n case 'face': return list.map(asFace)\n case 'edge': return list.map(asEdge)\n case 'vertex': return list.map(asVertex)\n case 'wire': return list.map(asWire)\n default: return list.map(asHandle)\n }\n }\n // ── A. 有类型标签:按标签分发,**不登记 knownEdges** ──\n // GOTCHA(2026-10-01 实测回归):历史分支里 `es.forEach(e => knownEdges.add(e))` 会把\n // 面/线的边号写进 knownEdges,而 knownEdges 的 key 是**裸句柄号**、会与后来新建的\n // solid 号相撞 → resolveKind 把实体判成边 → getBoundingBox 返回边的退化 bbox\n // (实测 8 个 op 的 AABB 全错)。标签句柄自带类型,登记已无必要,故这里一律不登记。\n const tagged = kindOf(shape)\n if (tagged === KIND_FACE) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') return tag(arr(kernel.getFaceEdges(s)))\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (tagged === KIND_WIRE) {\n if (type === 'edge') return tag(arr(kernel.getWireEdges(s)))\n return []\n }\n if (tagged === KIND_EDGE) {\n // input is itself an edge (wire.ts smooth path: interpolatePoints returns edge)\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n // ── B. 无标签:逐字沿用历史集合分发(含 knownEdges 登记),行为与加标签前一致 ──\n // GOTCHA(2026-09-26 非实体句柄修复):buildTopologyFromMesh 会对**面产物**\n // 调 getSubShapes(face,'face')。brepkit 的 getSolidFaces/getShellFaces 是 solid-only,\n // 对面句柄一个抛 \"invalid solid handle\"、catch 里再抛 \"invalid shell handle\"——\n // 两跳都不被捕获即崩溃。无标签时靠已知集合先分发。\n if (knownFaces.has(s)) {\n if (type === 'face') return [asFace(s)]\n if (type === 'edge') { const es = arr(kernel.getFaceEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n if (type === 'vertex') return tag(arr(kernel.getFaceVertices(s)))\n return []\n }\n if (knownWires.has(s)) {\n if (type === 'edge') { const es = arr(kernel.getWireEdges(s)); es.forEach((e) => knownEdges.add(e)); return tag(es) }\n return []\n }\n if (knownEdges.has(s)) {\n if (type === 'edge') return [asEdge(s)]\n return []\n }\n const compKids = knownCompounds.get(s)\n if (compKids) {\n // compound(sectionByPlane 面组 / makeCompound 多实体 / importStep 多实体):\n // 'face' 返回子面,'solid' 返回子实体,'edge' 返回各子句柄的边,其余空。\n if (type === 'face') return tag(compKids.filter((k) => knownFaces.has(k)))\n if (type === 'solid') return tag(compKids.filter((k) => !knownFaces.has(k) && !knownWires.has(k) && !knownEdges.has(k)))\n if (type === 'edge') {\n // 2026-10-02 补:此前 compound 的边查询落到 `return []`,会让归一化后的\n // getLength(compound) 静默变 0。按子句柄的已知类型分发,与 occt 的\n // getSubShapes(compound,'edge')(返回全部子边)对齐。\n const out: number[] = []\n for (const kid of compKids) {\n if (knownFaces.has(kid)) out.push(...arr(kernel.getFaceEdges(kid)))\n else if (knownWires.has(kid)) out.push(...arr(kernel.getWireEdges(kid)))\n else if (knownEdges.has(kid)) out.push(kid)\n else out.push(...arr(kernel.getSolidEdges(kid)))\n }\n return tag(out)\n }\n return []\n }\n let list: number[]\n // 实体句柄(knownSolids)永远不是 face-like——`derivedFaces` 只装「枚举出来的面号」,\n // 与 solid 号共用一个裸数字空间,不排除会造成误判(见 knownSolids 注释)。\n const isFaceLike = knownFaces.has(s) || (derivedFaces.has(s) && !knownSolids.has(s))\n if (type === 'face') {\n // 输入可能是 solid 或 shell。枚举到的子面登记到 derivedFaces(不进 knownFaces,\n // 避免与 solid 句柄撞号——见 derivedFaces 注释)。\n try { list = arr(kernel.getSolidFaces(s)) } catch { list = arr(kernel.getShellFaces?.(s) ?? []) }\n for (const f of list) derivedFaces.add(f)\n } else if (type === 'edge') {\n list = isFaceLike\n ? arr(kernel.getFaceEdges(s))\n : arr(kernel.getSolidEdges(s))\n } else if (type === 'vertex') {\n list = isFaceLike\n ? arr(kernel.getFaceVertices(s))\n : arr(kernel.getSolidVertices(s))\n } else if (type === 'shell') {\n list = arr(kernel.getSolidShells?.(s) ?? [])\n } else if (type === 'solid') {\n // 输入可能是 compound(多实体)或单个 solid。\n try { list = arr(kernel.getCompoundSolids(s)) }\n catch { list = [s] }\n } else {\n fail(`getSubShapes(${type}): unsupported sub-shape type`)\n }\n return tag(list)\n },\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[] {\n if (type !== 'face') fail(`subShapeHashes(${type}): only 'face' is supported by brepkit`)\n const s = asNum(shape)\n // GOTCHA:buildTopologyFromMesh 会对面产物调 subShapeHashes(face,'face');\n // getSolidFaces 是 solid-only,对面句柄崩溃。输入本身是面时,哈希即其自身指纹。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return [faceFingerprint(kernel, s, hashUpperBound)]\n // wire/edge 无面;compound(sectionByPlane 面组)的子句柄即面。\n if (kind === KIND_WIRE || kind === KIND_EDGE) return []\n const compKids = knownCompounds.get(s)\n if (compKids) {\n const faces = compKids.filter((k) => knownFaces.has(k))\n return faces.map((f) => faceFingerprint(kernel, f, hashUpperBound))\n }\n const faces = arr(kernel.getSolidFaces(s))\n const hashes = faces.map(f => faceFingerprint(kernel, f, hashUpperBound))\n // 登记 hash↔handle(fuseWithHistory 溯源对齐依赖此表)\n const reg = hashRegistry.get(kernel) ?? new Map<number, number>()\n faces.forEach((f, i) => reg.set(hashes[i], f))\n hashRegistry.set(kernel, reg)\n return hashes\n },\n hashCode(shape: BrepHandle, upperBound: number): number {\n // 类型由句柄标签决定(见文件头句柄桥接 GOTCHA):brepkit 无法反查句柄类型,\n // 而面指纹与边指纹必须落在**互不相交**的取值域,否则 edgeGroups 的 hash 会\n // 命中面的指纹(实测:box 的 edge 0..5 句柄号与 face 0..5 相同)。\n // 生产端(faceMesh/solidMesh/compoundMesh → faceFingerprint;wireframe →\n // edgeFingerprint)与消费端(本函数)用同一组函数、同一个上界,查表才命中。\n const raw = asNum(shape)\n return kindOf(shape) === KIND_EDGE\n ? edgeFingerprint(kernel, raw, upperBound)\n : faceFingerprint(kernel, raw, upperBound)\n },\n isSame(a: BrepHandle, b: BrepHandle): boolean {\n // 裸句柄号相同还不够:brepkit 的 face 3 与 edge 3 是**两个不同的形**。\n // 两侧都带标签时必须同类型;任一侧无标签(历史调用方)时退回纯数字比较,\n // 保证加标签不改变既有行为。\n if (asNum(a) !== asNum(b)) return false\n const ka = kindOf(a), kb = kindOf(b)\n return ka === kb || ka === KIND_SOLID || kb === KIND_SOLID\n },\n isSolid(shape: BrepHandle): boolean {\n try { return arr(kernel.getSolidFaces(asNum(shape))).length > 0 } catch { return false }\n },\n subShapeCount(shape: BrepHandle, type: BrepSubShapeType): number {\n return api.getSubShapes(shape, type).length\n },\n shapeType(shape: BrepHandle): string {\n try {\n const s = arr(kernel.getSolidFaces(asNum(shape)))\n const f = arr(kernel.getFaces(asNum(shape)))\n return s.length > 0 ? 'SOLID' : f.length > 0 ? 'FACE' : 'COMPOUND'\n } catch { return 'COMPOUND' }\n },\n shapeOrientation(shape: BrepHandle): string {\n try { return String(kernel.getShapeOrientation(asNum(shape))) } catch { return 'forward' }\n },\n edgeToFaceMap(shape: BrepHandle): unknown {\n // brepkit 返回 JSON 字符串 {\"edgeId\":[faceId,...]};L1 契约是 unknown(调用方自解析)。\n return kernel.edgeToFaceMap(asNum(shape))\n },\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[] {\n return arr(kernel.adjacentFaces(asNum(shape), asNum(face))).map(asFace)\n },\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[] {\n return arr(kernel.sharedEdges(asNum(a), asNum(b))).map(asEdge)\n },\n\n // ── 几何求值 ──\n curveType(edge: BrepHandle): string { return String(kernel.getEdgeCurveType(asNum(edge))) },\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurve 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.evaluateEdgeCurve(asNum(edge), param)))\n },\n curveTangent(edge: BrepHandle, param: number): BrepVec3 {\n // evaluateEdgeCurveD1 返回 Float64Array [px,py,pz, tx,ty,tz](点+切向量)\n const d = toNumArray(kernel.evaluateEdgeCurveD1(asNum(edge), param))\n return { x: d[3] ?? 0, y: d[4] ?? 0, z: d[5] ?? 0 }\n },\n curveParameters(edge: BrepHandle): BrepCurveParameters {\n // getEdgeCurveParameters 返回 Float64Array [first, last]\n const d = toNumArray(kernel.getEdgeCurveParameters(asNum(edge)))\n return { first: d[0] ?? 0, last: d[d.length - 1] ?? 1 }\n },\n curveIsClosed(edge: BrepHandle): boolean {\n // brepkit 无直接 edge-isClosed API;按曲线类型 + Nurbs 元数据判定:\n // CIRCLE/ELLIPSE 类曲线恒闭合;LINE 恒不闭合;\n // 其他曲线尝试 getNurbsCurveData().closed,拿不到时按不闭合处理(保守,不报错)。\n try {\n const t = String(kernel.getEdgeCurveType(asNum(edge))).toUpperCase()\n if (t === 'CIRCLE' || t === 'ELLIPSE') return true\n if (t === 'LINE') return false\n } catch { /* 类型查询失败走 Nurbs 元数据 */ }\n try {\n const raw = kernel.getNurbsCurveData(asNum(edge))\n if (typeof raw === 'string') {\n const p = JSON.parse(raw) as { closed?: boolean; periodic?: boolean }\n return !!p.closed || !!p.periodic\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n return !!(o.closed || o.periodic)\n }\n } catch { /* 非 Nurbs 边 */ }\n return false\n },\n curveLength(edge: BrepHandle): number { return Number(kernel.edgeLength(asNum(edge))) },\n surfaceType(face: BrepHandle): string { return String(kernel.getSurfaceType(asNum(face))) },\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurfaceNormal(face,u,v) 返回 Float64Array [nx,ny,nz];\n // 注意:getFaceNormal(face) 只接受 face 一个参数,不带 u/v,不能用于参数空间法向。\n return vec3Of(toNumArray(kernel.evaluateSurfaceNormal(asNum(face), u, v)))\n },\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3 {\n // evaluateSurface 返回 Float64Array [x,y,z]\n return vec3Of(toNumArray(kernel.evaluateSurface(asNum(face), u, v)))\n },\n uvBounds(face: BrepHandle): BrepUvBounds {\n // getSurfaceDomain 返回 Float64Array [uMin,uMax,vMin,vMax]\n const d = toNumArray(kernel.getSurfaceDomain(asNum(face)))\n return { uMin: d[0] ?? 0, uMax: d[1] ?? 1, vMin: d[2] ?? 0, vMax: d[3] ?? 1 }\n },\n surfaceCenterOfMass: faceCenterOfMass,\n vertexPosition(vertex: BrepHandle): BrepVec3 {\n // getVertexPosition 返回 Float64Array [x,y,z](brepkit_wasm.d.ts 实测)\n const p = toNumArray(kernel.getVertexPosition(asNum(vertex)))\n return { x: p[0] ?? 0, y: p[1] ?? 0, z: p[2] ?? 0 }\n },\n containsPoint(shape: BrepHandle, point: BrepVec3, tolerance: number): boolean {\n // classifyPoint 返回 \"inside\" | \"outside\" | \"boundary\"(d.ts 实测);\n // 边界视为包含(与 occt containsPoint 的口径对齐:探针点在面上不翻转法线)。\n return kernel.classifyPoint(asNum(shape), point.x, point.y, point.z, tolerance) !== 'outside'\n },\n getFaceCylinderData(face: BrepHandle): { radius: number } | null {\n try {\n const p = JSON.parse(kernel.getAnalyticSurfaceParams(asNum(face))) as { type?: string; radius?: number }\n if (p?.type === 'cylinder' && typeof p.radius === 'number') return { radius: p.radius }\n } catch { /* 非解析面 */ }\n return null\n },\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null {\n try {\n const p = JSON.parse(kernel.getNurbsCurveData(asNum(edge))) as {\n degree?: number\n periodic?: boolean\n rational?: boolean\n knots?: number[]\n multiplicities?: number[]\n poles?: number[]\n weights?: number[]\n }\n if (p && typeof p.degree === 'number') {\n return {\n degree: p.degree,\n periodic: !!p.periodic,\n rational: !!p.rational,\n knots: (p.knots ?? []).map(Number),\n multiplicities: (p.multiplicities ?? []).map(Number),\n poles: (p.poles ?? []).map(Number),\n weights: (p.weights ?? []).map(Number),\n }\n }\n } catch { /* 非 Nurbs 边 */ }\n return null\n },\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle] {\n // brepkit 原生返回 Uint32Array 两元素(occt 返回 [ShapeHandle, ShapeHandle])——\n // 适配器统一为二元组。两个碎片都必须登记进 knownEdges,否则下游 meshShape 分发不到。\n const parts = kernel.curveSplit(asNum(edge), param)\n if (parts.length !== 2) fail(`curveSplit: expected 2 edges, got ${parts.length}`)\n const a = parts[0]!\n const b = parts[1]!\n knownEdges.add(a)\n knownEdges.add(b)\n return [asEdge(a), asEdge(b)]\n },\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle {\n // GOTCHA:interpolatePoints 返回 **edge** 句柄(不是 wire)——wire.ts smooth 路径把它\n // 直接当 wire 送 solidToShape。登记进 knownEdges,meshShape 才能走 tessellateEdge 路径。\n const e = kernel.interpolatePoints(flattenPoints(points), degree)\n knownEdges.add(e)\n return asEdge(e)\n },\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle {\n return asHandle(markSolid(kernel.defeature(asNum(shape), Uint32Array.from(faces.map(asNum)))))\n },\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle {\n return asHandle(kernel.draft(\n asNum(shape),\n Uint32Array.from(faces.map(asNum)),\n pull.x, pull.y, pull.z,\n neutral.x, neutral.y, neutral.z,\n angleDeg,\n ))\n },\n removeHolesFromFace(face: BrepHandle): BrepHandle {\n // removeHolesFromFace 返回**新 face 句柄**(去掉内孔的同曲面 face),必须登记进 knownFaces。\n const f = kernel.removeHolesFromFace(asNum(face))\n knownFaces.add(f)\n return asFace(f)\n },\n reverseShape(shape: BrepHandle): BrepHandle {\n return withKind(kindOf(shape), kernel.reverseShape(asNum(shape)))\n },\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown {\n // brepkit 返回 JSON 字符串 {\"visible\":[[x,y,…]],\"hidden\":[[…]]};L1 契约是 unknown。\n return kernel.projectEdges(\n asNum(shape),\n origin.x, origin.y, origin.z,\n direction.x, direction.y, direction.z,\n xAxis.x, xAxis.y, xAxis.z,\n hiddenLines, deflection,\n )\n },\n\n // ── 测量 ──\n getBoundingBox(shape: BrepHandle, _useTriangulation?: boolean): BrepBoundingBox {\n const s = asNum(shape)\n const bboxFromPoints = (pts: ArrayLike<number>): BrepBoundingBox => {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (let i = 0; i + 2 < pts.length; i += 3) {\n xmin = Math.min(xmin, pts[i]!); ymin = Math.min(ymin, pts[i + 1]!); zmin = Math.min(zmin, pts[i + 2]!)\n xmax = Math.max(xmax, pts[i]!); ymax = Math.max(ymax, pts[i + 1]!); zmax = Math.max(zmax, pts[i + 2]!)\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n const solidBbox = (h: number): BrepBoundingBox => {\n const b = kernel.boundingBox(h) as ArrayLike<number>\n return { xmin: b[0]!, ymin: b[1]!, zmin: b[2]!, xmax: b[3]!, ymax: b[4]!, zmax: b[5]! }\n }\n const kids = knownCompounds.get(s)\n if (kids) {\n let xmin = Infinity, ymin = Infinity, zmin = Infinity, xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const k of kids) {\n try {\n let b: BrepBoundingBox\n if (knownFaces.has(k)) b = bboxFromPoints(arr(kernel.tessellateFace(k, 0.1, 1).positions))\n else if (knownWires.has(k)) b = bboxFromPoints(arr(kernel.getWireEdges(k)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n else if (knownEdges.has(k)) b = bboxFromPoints(arr(kernel.tessellateEdge(k, 16)))\n else b = solidBbox(k)\n xmin = Math.min(xmin, b.xmin); ymin = Math.min(ymin, b.ymin); zmin = Math.min(zmin, b.zmin)\n xmax = Math.max(xmax, b.xmax); ymax = Math.max(ymax, b.ymax); zmax = Math.max(zmax, b.zmax)\n } catch { /* 子项 bbox 查询失败忽略 */ }\n }\n if (!Number.isFinite(xmin)) { xmin = ymin = zmin = 0; xmax = ymax = zmax = 0 }\n return { xmin, ymin, zmin, xmax, ymax, zmax }\n }\n // GOTCHA:kernel.boundingBox 是 solid-only。face/wire/edge 句柄必须走 tessellation 采样,\n // 否则 measure() 对 wire/profile 调 getBoundingBox 即崩 \"invalid solid handle\"。\n const kind = resolveKind(shape, s)\n if (kind === KIND_FACE) return bboxFromPoints(arr(kernel.tessellateFace(s, 0.1, 1).positions))\n if (kind === KIND_WIRE) return bboxFromPoints(arr(kernel.getWireEdges(s)).flatMap((e) => arr(kernel.tessellateEdge(e, 16))))\n if (kind === KIND_EDGE) return bboxFromPoints(arr(kernel.tessellateEdge(s, 16)))\n return solidBbox(s)\n },\n getVolume(shape: BrepHandle): number { return Number(kernel.volume(asNum(shape), 0.05)) },\n getCenterOfMass(shape: BrepHandle): BrepVec3 {\n // centerOfMass 返回 Float64Array [x,y,z](非 JSON 字符串)\n return vec3Of(toNumArray(kernel.centerOfMass(asNum(shape), 0.05)))\n },\n getSurfaceArea(shape: BrepHandle): number {\n // 方言映射:L1 getSurfaceArea ↔ brepkit surfaceArea(solid, deflection)。\n // ⚠️ brepkit 的 surfaceArea **只吃 solid**(传 face 报 `invalid solid handle:\n // index 0 is out of bounds`),而 L1 的语义锚(occt getSurfaceArea)也吃 face\n // —— gears / fasteners 大量对面调 getSurfaceArea。故 face 走 brepkit 原生\n // faceArea(同名不同参,属方言消化,不是静默降级)。\n const n = asNum(shape)\n // faceArea(face, deflection) —— deflection 与 surfaceArea 同一口径(0.05)。\n if (resolveKind(shape, n) === KIND_FACE) return Number(kernel.faceArea(n, 0.05))\n return Number(kernel.surfaceArea(n, 0.05))\n },\n getLength(shape: BrepHandle): number {\n // 唯一 edge 弧长之和(与 occt 适配器同口径,D5)。\n // 旧实现用 `try { getEdgeCurveType } catch { wireLength }` 判别入参差异,但\n // getEdgeCurveType 对 solid / face / wire **也不抛错**,于是统一走 edgeLength,\n // 返回「首条边」长度——值随构建历史漂移(盒 20 vs 10;两边的 wire 真长 15 却给 20),\n // 且与 occt 的 Σ 面周长(280)不同口径。改为按 topo 去重枚举边后求和。\n let total = 0\n for (const e of api.getSubShapes(shape, 'edge')) total += api.curveLength(e)\n return total\n },\n\n // ── 校验与修复 ──\n // ⚠️ brepkit 的修复类内核函数全部是「**原地修改入参实体 + 返回修复计数**」,不是返回新句柄:\n // healSolid(solid) → 修复的问题数\n // fixFaceOrientations(solid) → 修复的面数\n // unifyFaces(solid) → 合并删除的面数\n // removeDegenerateEdges(s,tol) → 删除的边数\n // repairSolid(solid) → 修复后剩余错误数\n // 直接 `asHandle(kernel.healSolid(...))` 会把计数(常见为 0)当成句柄,得到无效实体\n // (2026-09-25 实证)。正确适配:先 copySolid 保护调用方原实体,再原地修复副本,返回副本句柄。\n isValid(shape: BrepHandle): boolean {\n // brepkit validateSolid 返回错误数(0 = 有效)。\n return Number(kernel.validateSolid(asNum(shape))) === 0\n },\n unifySameDomain(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.unifyFaces(c)\n return asHandle(c)\n },\n healSolid(shape: BrepHandle, _tolerance?: number): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixShape(shape: BrepHandle): BrepHandle {\n const c = kernel.copySolid(asNum(shape))\n kernel.healSolid(c)\n return asHandle(c)\n },\n fixFaceOrientations(shape: BrepHandle): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.fixFaceOrientations(c)\n return asHandle(c)\n },\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle {\n const c = markSolid(kernel.copySolid(asNum(shape)))\n kernel.removeDegenerateEdges(c, tolerance ?? 1e-6)\n return asHandle(c)\n },\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle {\n // ⚠️ brepkit importStep 吃 **Uint8Array**(不是字符串),返回 **Uint32Array**(文件内可含多个 solid)。\n // L1 契约是单 BrepHandle:0 个 → fail;1 个 → 直通;多个 → 合成 compound(2026-09-25 实证)。\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n const solids = arr(kernel.importStep(bytes))\n if (solids.length === 0) fail('importStep: kernel returned no solid')\n // 多实体 → compoundOf(虚拟句柄):compound 与 solid 分命名空间会重号,真句柄\n // 登记 knownCompounds 会在查询同号 solid 时误判(2026-10-13 修复,同 makeCompound)。\n // ⚠️ 每个成员 solid 必须先 markSolid:否则 buildCompoundTopologyRuntime 枚举成员面\n // (面号进 derivedFaces)后再 getSubShapes(member,'edge'),isFaceLike 会因成员号撞\n // 面号且不在 knownSolids 而误判 → getFaceEdges 只回一个面的 4 条边(faceCount=0,\n // edgeNaming.faces=null),真机选成员2 的边倒角报「no adjacent-face lineage」。\n if (solids.length > 1) return asHandle(compoundOf(markSolids(solids)))\n return asHandle(markSolid(solids[0]))\n },\n exportStep(shape: BrepHandle): string {\n // 虚拟 compound(0x20000000+)需映射回真内核句柄——compound 与 solid 分命名空间,\n // 内核 exportStep 不认虚拟句柄(2026-10-13 compoundOf 虚拟化后补映射)。\n const s = asNum(shape)\n const real = kernelCompoundHandles.get(s) ?? s\n // brepkit exportStep 返回 UTF-8 字节(Uint8Array),需解码为 STEP 文本(2026-09-19 实测)\n const bytes = kernel.exportStep(real)\n return typeof bytes === 'string' ? bytes : new TextDecoder().decode(bytes)\n },\n importStl(data: string | ArrayBuffer): BrepHandle {\n const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : new Uint8Array(data)\n return asHandle(markSolid(kernel.importStl(bytes)))\n },\n fromBREP(data: string): BrepHandle {\n // ⚠️ brepkit fromBREP 吃字符串(STEP 文本或 toBREP/toBrepJson 输出,内核自动判别),\n // 与 serializeSolid/deserializeSolid 的**二进制 arena** 是两套机制。\n // 旧实现误用 `deserializeSolid(atob(data))`:base64 解码破坏了 STEP 文本 → 往返必失败\n // (2026-09-25 实证:fromBREP(STEP)、fromBREP(toBREP)、fromBREP(toBrepJson) 均成功)。\n return asHandle(markSolid(kernel.fromBREP(data)))\n },\n\n // ── 网格实体原语(方案 2026-10-01 §3.3;内核私有,不在 L1 契约面) ──\n // 规范构造顺序**不可交换**:importMesh → weld → unify。\n // 实测(brepkit-kernel/mesh-solid-topology.test.ts):先 unify 后 weld 会把实体做坏\n // (体积归零、validate 非 0)。本对象只暴露原语,顺序由 `normalizeMeshSolid` 驱动。\n meshSolid: {\n importMesh(positions: Float32Array, indices: Uint32Array): BrepHandle {\n // 方言:importIndexedMesh 吃 **Float64Array**(坐标)+ **Uint32Array**(索引),\n // 返回裸 solid 号。逐三角形建面、顶点按坐标焊接、边不共享(不是真流形)。\n const coords = new Float64Array(positions.length)\n for (let i = 0; i < positions.length; i++) coords[i] = positions[i]!\n return asHandle(markSolid(kernel.importIndexedMesh(coords, indices)))\n },\n weld(faces: BrepHandle[], tolerance: number): BrepHandle {\n // weldShellsAndFaces 吃**裸面号数组**(Uint32Array),返回新 solid 号;\n // 把重复边缝成共享边 → 真流形(实测 10mm 立方体 36 边 → 18 边、validate 0)。\n return asHandle(markSolid(kernel.weldShellsAndFaces(\n Uint32Array.from(faces.map((f) => asNum(f))),\n tolerance,\n )))\n },\n unify(solid: BrepHandle): number {\n // GOTCHA:unifyFaces 是**原地修改**入参实体,返回值是**被合并掉的面数**\n // (不是新句柄)。写成 `const s = unify(...)` 会拿到一个落在合法句柄区间的\n // 数字,后续全部查询打在一个无关实体上且不报错。\n return Number(kernel.unifyFaces(asNum(solid)))\n },\n },\n\n // ── 面演化(L1 三员 + filletWithHistory,双方都有对齐实现) ──\n cutWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.cutWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n fuseWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.fuseWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n intersectWithHistory(a: BrepHandle, b: BrepHandle, inputFaceHashes: number[], hashUpperBound: number): BrepEvolutionData {\n const raw = kernel.intersectWithEvolution(asNum(a), asNum(b))\n return mapEvolution(kernel, raw, JSON.parse(raw).solid, inputFaceHashes, hashUpperBound)\n },\n }\n memoizedKernel = kernel\n memoizedPrimitives = api\n return api\n}\n\n// ── 工具 ──\n\n/** 3×4 行主序平移矩阵(faijs 接口方言:平移在 index 3/7/11,与 matrixToArray 同构)。 */\nfunction translationMatrix(dx: number, dy: number, dz: number): number[] {\n return [\n 1, 0, 0, dx,\n 0, 1, 0, dy,\n 0, 0, 1, dz,\n ]\n}\n\n/**\n * 3×4 行主序旋转矩阵(绕**任意轴** axis={point,direction} 转 angleRad,右手)。\n *\n * 与 `engine-compat/harness.ts` 的 rotate 测试桩同算法(Rodrigues),保证 brepkit\n * 侧与 occt 侧 `rotate` 可对照:\n * R = I·cosθ + (d⊗d)(1−cosθ) + [d]×·sinθ ,平移 t = P − R·P(轴上的点不动)。\n */\nfunction rotationMatrix(point: BrepVec3, direction: BrepVec3, angleRad: number): number[] {\n const len = Math.hypot(direction.x, direction.y, direction.z)\n if (!(len > 0)) fail('rotate: axis direction must be a non-zero vector')\n const d: BrepVec3 = { x: direction.x / len, y: direction.y / len, z: direction.z / len }\n const c = Math.cos(angleRad)\n const s = Math.sin(angleRad)\n const t = 1 - c\n const r00 = c + d.x * d.x * t\n const r01 = d.x * d.y * t - d.z * s\n const r02 = d.x * d.z * t + d.y * s\n const r10 = d.x * d.y * t + d.z * s\n const r11 = c + d.y * d.y * t\n const r12 = d.y * d.z * t - d.x * s\n const r20 = d.x * d.z * t - d.y * s\n const r21 = d.y * d.z * t + d.x * s\n const r22 = c + d.z * d.z * t\n return [\n r00, r01, r02, point.x - (r00 * point.x + r01 * point.y + r02 * point.z),\n r10, r11, r12, point.y - (r10 * point.x + r11 * point.y + r12 * point.z),\n r20, r21, r22, point.z - (r20 * point.x + r21 * point.y + r22 * point.z),\n ]\n}\n\n/**\n * 右手圆柱螺旋线采样点(解析式,供 brepkit 侧 makeHelixWire 拟合用)。\n *\n * 参数化:θ ∈ [0, 2π·turns],turns = height / pitch;\n * P(θ) = origin + u·r·cosθ + v·r·sinθ + â·(pitch·θ / 2π)\n * 其中 (u, v, â) 是右手正交基,â = axis/|axis|。θ 到终点时沿轴推进量恰为 height。\n *\n * 段数按圈数取(每圈 `SEGMENTS_PER_TURN` 段,下限 8 段)—— 采样弦高即偏差来源,\n * 由 helix 一致性测试钉 band。\n */\nfunction sampleHelixPoints(\n origin: BrepVec3,\n axis: BrepVec3,\n pitch: number,\n height: number,\n radius: number,\n segmentsPerTurn = 36,\n): BrepVec3[] {\n const len = Math.hypot(axis.x, axis.y, axis.z)\n if (!(len > 0)) fail('makeHelixWire: axis must be a non-zero vector')\n if (!(pitch !== 0)) fail('makeHelixWire: pitch must be non-zero')\n const a: BrepVec3 = { x: axis.x / len, y: axis.y / len, z: axis.z / len }\n // 与 makePlanarFaceTool(occt 侧)同一取轴策略:取分量绝对值最小的坐标构造正交基,\n // 避免 axis 轴对齐时退化。\n const ax = Math.abs(a.x)\n const ay = Math.abs(a.y)\n const az = Math.abs(a.z)\n let u: BrepVec3\n if (ax <= ay && ax <= az) u = { x: 0, y: -a.z, z: a.y }\n else if (ay <= az) u = { x: -a.z, y: 0, z: a.x }\n else u = { x: a.y, y: -a.x, z: 0 }\n const ul = Math.hypot(u.x, u.y, u.z)\n u = { x: u.x / ul, y: u.y / ul, z: u.z / ul }\n const v: BrepVec3 = {\n x: a.y * u.z - a.z * u.y,\n y: a.z * u.x - a.x * u.z,\n z: a.x * u.y - a.y * u.x,\n }\n const turns = height / pitch\n const total = Math.max(8, Math.ceil(Math.abs(turns) * segmentsPerTurn))\n const out: BrepVec3[] = []\n for (let i = 0; i <= total; i++) {\n const th = (2 * Math.PI * turns * i) / total\n const cs = Math.cos(th)\n const sn = Math.sin(th)\n const axial = (pitch * th) / (2 * Math.PI)\n out.push({\n x: origin.x + (u.x * cs + v.x * sn) * radius + a.x * axial,\n y: origin.y + (u.y * cs + v.y * sn) * radius + a.y * axial,\n z: origin.z + (u.z * cs + v.z * sn) * radius + a.z * axial,\n })\n }\n return out\n}\n\n/** 3×4 行主序缩放矩阵(绕 center 缩放;faijs 接口方言,12 元素)。 */\nfunction scaleMatrix(center: BrepVec3, factor: number): number[] {\n return [\n factor, 0, 0, center.x * (1 - factor),\n 0, factor, 0, center.y * (1 - factor),\n 0, 0, factor, center.z * (1 - factor),\n ]\n}\n\n/**\n * 唯一的矩阵方言转换点:faijs 3×4 行主序(12 元素,matrixToArray 口径)→\n * brepkit transformSolid 的 4×4 行主序(16 元素,补底行 0,0,0,1)。\n * translate/scale 内部矩阵与 transform/located/generalTransform 的宿主入参\n * 全部经此归一;非 12 元素直接抛错(方言不清 = 缺陷,静默通过即红线违规)。\n */\nfunction toKernelMatrix(matrix: number[]): number[] {\n if (matrix.length !== 12) {\n throw new Error(\n `[brepkit] matrix dialect violation: expected 12 elements (3x4 row-major, faijs interface contract), got ${matrix.length}`,\n )\n }\n return [\n matrix[0], matrix[1], matrix[2], matrix[3],\n matrix[4], matrix[5], matrix[6], matrix[7],\n matrix[8], matrix[9], matrix[10], matrix[11],\n 0, 0, 0, 1,\n ]\n}\n\n/** wasm 返回的点/向量形态归一(数组 [x,y,z] 或 {x,y,z})。 */\nfunction vec3Of(p: number[] | { x: number; y: number; z: number }): BrepVec3 {\n if (Array.isArray(p)) return { x: p[0], y: p[1], z: p[2] }\n return { x: Number(p.x), y: Number(p.y), z: Number(p.z) }\n}\n\n\n/** 已初始化的 brepkit 内核单例(createBrepkitPrimitives 时赋值)。 */\nlet liveKernel: BrepKitKernel | null = null\n\n/** 已构建的 L1 契约面对象(按内核实例 memo;见 createBrepkitPrimitives 的 GOTCHA)。 */\nlet memoizedPrimitives: BrepkitEngineExtras | null = null\nlet memoizedKernel: BrepKitKernel | null = null\n\n/**\n * 原生 brepkit 内核面(D3):平台特定代码访问 brepkit 独有能力的唯一入口\n * (chamfer2d/chamferV2/filletV2/sketch* 族、serializeSolid、meshBoolean 等)。\n *\n * ⚠️ 这是**平台特定**出口——import 本函数即声明「这段代码只跑在 brepkit 引擎下」。\n * 可移植代码请用 `getBrepApi()`(L1 契约面)。\n *\n * @returns the live brepkit wasm kernel singleton.\n */\nexport function getBrepKitKernel(): BrepKitKernel {\n if (!liveKernel) {\n throw new Error('[brepkit-kernel] kernel not initialized: call createBrepkitPrimitives() first')\n }\n return liveKernel\n}\n\n/**\n * 释放内核单例(测试收尾用;宿主常驻不需调用)。\n *\n * GOTCHA(2026-10-01 修复):旧实现只 `free()` 内核、**不重置** brepkitWasm.ts 里\n * 缓存的 `initPromise`,也不丢 memo 化的原语对象 → 第二次 `createBrepkitPrimitives()`\n * 拿到**已释放**的内核,随后一切内核调用报 `null pointer passed to rust`\n * (实测:`BrepKernel.makeBox`)。现在三样一起清:内核、initPromise、memo 原语。\n */\nexport function disposeBrepkit(): void {\n try {\n if (liveKernel?.free) liveKernel.free()\n } catch { /* 已释放 */ }\n liveKernel = null\n memoizedPrimitives = null\n memoizedKernel = null\n resetBrepkitWasm()\n}\n\n/** brepkit 适配器原语集类型(BrepEngineApi + brepkit 专属诊断 getMeshFallbackCount)。 */\nexport type BrepkitPrimitives = Awaited<ReturnType<typeof createBrepkitPrimitives>>\n"]}