@faicad/faijs 0.29.5 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/NOTICE +6 -5
  2. package/dist/api/align/index.d.ts +64 -0
  3. package/dist/api/align/index.d.ts.map +1 -0
  4. package/dist/api/align/index.js +101 -0
  5. package/dist/api/align/index.js.map +1 -0
  6. package/dist/api/api-namespace.d.ts +6 -5
  7. package/dist/api/api-namespace.d.ts.map +1 -1
  8. package/dist/api/api-namespace.js +89 -5
  9. package/dist/api/api-namespace.js.map +1 -1
  10. package/dist/api/appearance.d.ts +0 -2
  11. package/dist/api/appearance.d.ts.map +1 -1
  12. package/dist/api/appearance.js +0 -2
  13. package/dist/api/appearance.js.map +1 -1
  14. package/dist/api/assembly/entities.d.ts +1 -1
  15. package/dist/api/assembly/entities.js +1 -1
  16. package/dist/api/assembly/entities.js.map +1 -1
  17. package/dist/api/assembly/index.d.ts +1 -1
  18. package/dist/api/assembly/index.js +1 -1
  19. package/dist/api/assembly/index.js.map +1 -1
  20. package/dist/api/assembly/joints.d.ts +33 -15
  21. package/dist/api/assembly/joints.d.ts.map +1 -1
  22. package/dist/api/assembly/joints.js +31 -13
  23. package/dist/api/assembly/joints.js.map +1 -1
  24. package/dist/api/assembly/preview.d.ts +1 -1
  25. package/dist/api/assembly/preview.js +1 -1
  26. package/dist/api/assembly/preview.js.map +1 -1
  27. package/dist/api/assembly/solve.d.ts +1 -1
  28. package/dist/api/assembly/solve.js +1 -1
  29. package/dist/api/assembly/solve.js.map +1 -1
  30. package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
  31. package/dist/api/assembly/solvers/assembly-tree.js +1 -1
  32. package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
  33. package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
  34. package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
  35. package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
  36. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  37. package/dist/api/assembly/solvers/global-solver.js +3 -4
  38. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  39. package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
  40. package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
  41. package/dist/api/assembly/solvers/linalg.d.ts +2 -2
  42. package/dist/api/assembly/solvers/linalg.js +2 -2
  43. package/dist/api/assembly/solvers/linalg.js.map +1 -1
  44. package/dist/api/assembly/solvers/types.d.ts +2 -5
  45. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  46. package/dist/api/assembly/solvers/types.js +1 -4
  47. package/dist/api/assembly/solvers/types.js.map +1 -1
  48. package/dist/api/boolean-op/index.d.ts +65 -0
  49. package/dist/api/boolean-op/index.d.ts.map +1 -0
  50. package/dist/api/boolean-op/index.js +113 -0
  51. package/dist/api/boolean-op/index.js.map +1 -0
  52. package/dist/api/boolean.d.ts.map +1 -1
  53. package/dist/api/boolean.js +22 -33
  54. package/dist/api/boolean.js.map +1 -1
  55. package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
  56. package/dist/api/brep-mirror/booleanFns.js +5 -5
  57. package/dist/api/brep-mirror/booleanFns.js.map +1 -1
  58. package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
  59. package/dist/api/brep-mirror/compoundFns.js +4 -4
  60. package/dist/api/brep-mirror/compoundFns.js.map +1 -1
  61. package/dist/api/brep-mirror/healingFns.d.ts +4 -4
  62. package/dist/api/brep-mirror/healingFns.js +4 -4
  63. package/dist/api/brep-mirror/healingFns.js.map +1 -1
  64. package/dist/api/brep-mirror/hullFns.d.ts +2 -2
  65. package/dist/api/brep-mirror/hullFns.js +2 -2
  66. package/dist/api/brep-mirror/hullFns.js.map +1 -1
  67. package/dist/api/brep-mirror/patternFns.d.ts +5 -5
  68. package/dist/api/brep-mirror/patternFns.js +10 -10
  69. package/dist/api/brep-mirror/patternFns.js.map +1 -1
  70. package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
  71. package/dist/api/brep-mirror/primitiveFns.js +4 -4
  72. package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
  73. package/dist/api/brep-mirror/roofFns.d.ts +3 -3
  74. package/dist/api/brep-mirror/roofFns.js +7 -7
  75. package/dist/api/brep-mirror/roofFns.js.map +1 -1
  76. package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
  77. package/dist/api/brep-mirror/sweepFns.js +14 -14
  78. package/dist/api/brep-mirror/sweepFns.js.map +1 -1
  79. package/dist/api/brep-mirror/threadFns.d.ts +1 -1
  80. package/dist/api/brep-mirror/threadFns.js +1 -1
  81. package/dist/api/brep-mirror/threadFns.js.map +1 -1
  82. package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
  83. package/dist/api/brep-mirror/topologyFns.js +8 -8
  84. package/dist/api/brep-mirror/topologyFns.js.map +1 -1
  85. package/dist/api/brep-operations/booleanFns.d.ts +40 -0
  86. package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
  87. package/dist/api/brep-operations/booleanFns.js +104 -0
  88. package/dist/api/brep-operations/booleanFns.js.map +1 -0
  89. package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
  90. package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
  91. package/dist/api/brep-operations/brepHelpers.js +131 -0
  92. package/dist/api/brep-operations/brepHelpers.js.map +1 -0
  93. package/dist/api/brep-operations/compoundFns.d.ts +46 -0
  94. package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
  95. package/dist/api/brep-operations/compoundFns.js +299 -0
  96. package/dist/api/brep-operations/compoundFns.js.map +1 -0
  97. package/dist/api/brep-operations/healingFns.d.ts +91 -0
  98. package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
  99. package/dist/api/brep-operations/healingFns.js +321 -0
  100. package/dist/api/brep-operations/healingFns.js.map +1 -0
  101. package/dist/api/brep-operations/hullFns.d.ts +20 -0
  102. package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
  103. package/dist/api/brep-operations/hullFns.js +46 -0
  104. package/dist/api/brep-operations/hullFns.js.map +1 -0
  105. package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
  106. package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
  107. package/dist/api/brep-operations/joinery-brep.js +463 -0
  108. package/dist/api/brep-operations/joinery-brep.js.map +1 -0
  109. package/dist/api/brep-operations/patternFns.d.ts +43 -0
  110. package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
  111. package/dist/api/brep-operations/patternFns.js +178 -0
  112. package/dist/api/brep-operations/patternFns.js.map +1 -0
  113. package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
  114. package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
  115. package/dist/api/brep-operations/primitiveFns.js +104 -0
  116. package/dist/api/brep-operations/primitiveFns.js.map +1 -0
  117. package/dist/api/brep-operations/roofFns.d.ts +24 -0
  118. package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
  119. package/dist/api/brep-operations/roofFns.js +229 -0
  120. package/dist/api/brep-operations/roofFns.js.map +1 -0
  121. package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
  122. package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
  123. package/dist/api/brep-operations/straightSkeleton.js +431 -0
  124. package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
  125. package/dist/api/brep-operations/sweepFns.d.ts +60 -0
  126. package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
  127. package/dist/api/brep-operations/sweepFns.js +323 -0
  128. package/dist/api/brep-operations/sweepFns.js.map +1 -0
  129. package/dist/api/brep-operations/threadFns.d.ts +83 -0
  130. package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
  131. package/dist/api/brep-operations/threadFns.js +138 -0
  132. package/dist/api/brep-operations/threadFns.js.map +1 -0
  133. package/dist/api/brep-operations/topologyFns.d.ts +111 -0
  134. package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
  135. package/dist/api/brep-operations/topologyFns.js +300 -0
  136. package/dist/api/brep-operations/topologyFns.js.map +1 -0
  137. package/dist/api/brep-topology.d.ts +1 -1
  138. package/dist/api/brep-topology.d.ts.map +1 -1
  139. package/dist/api/brep-topology.js +1 -1
  140. package/dist/api/brep-topology.js.map +1 -1
  141. package/dist/api/brepjs-compat/index.d.ts +1 -1
  142. package/dist/api/brepjs-compat/index.js +3 -3
  143. package/dist/api/brepjs-compat/index.js.map +1 -1
  144. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
  145. package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
  146. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
  147. package/dist/api/chamfer.d.ts +5 -4
  148. package/dist/api/chamfer.d.ts.map +1 -1
  149. package/dist/api/chamfer.js +12 -11
  150. package/dist/api/chamfer.js.map +1 -1
  151. package/dist/api/curve-sketch/index.d.ts +235 -0
  152. package/dist/api/curve-sketch/index.d.ts.map +1 -0
  153. package/dist/api/curve-sketch/index.js +493 -0
  154. package/dist/api/curve-sketch/index.js.map +1 -0
  155. package/dist/api/draft.d.ts.map +1 -1
  156. package/dist/api/draft.js +1 -3
  157. package/dist/api/draft.js.map +1 -1
  158. package/dist/api/engrave.d.ts.map +1 -1
  159. package/dist/api/engrave.js +6 -15
  160. package/dist/api/engrave.js.map +1 -1
  161. package/dist/api/export-3mf.d.ts +73 -0
  162. package/dist/api/export-3mf.d.ts.map +1 -0
  163. package/dist/api/export-3mf.js +121 -0
  164. package/dist/api/export-3mf.js.map +1 -0
  165. package/dist/api/export-brep.d.ts +47 -0
  166. package/dist/api/export-brep.d.ts.map +1 -0
  167. package/dist/api/export-brep.js +67 -0
  168. package/dist/api/export-brep.js.map +1 -0
  169. package/dist/api/export-step.d.ts +67 -0
  170. package/dist/api/export-step.d.ts.map +1 -0
  171. package/dist/api/export-step.js +98 -0
  172. package/dist/api/export-step.js.map +1 -0
  173. package/dist/api/export-stl.d.ts +58 -0
  174. package/dist/api/export-stl.d.ts.map +1 -0
  175. package/dist/api/export-stl.js +114 -0
  176. package/dist/api/export-stl.js.map +1 -0
  177. package/dist/api/extrude.d.ts +8 -11
  178. package/dist/api/extrude.d.ts.map +1 -1
  179. package/dist/api/extrude.js +11 -14
  180. package/dist/api/extrude.js.map +1 -1
  181. package/dist/api/feature-repair.d.ts +1 -1
  182. package/dist/api/feature-repair.d.ts.map +1 -1
  183. package/dist/api/feature-repair.js +1 -7
  184. package/dist/api/feature-repair.js.map +1 -1
  185. package/dist/api/fillet-variable.d.ts +2 -2
  186. package/dist/api/fillet-variable.d.ts.map +1 -1
  187. package/dist/api/fillet-variable.js +2 -3
  188. package/dist/api/fillet-variable.js.map +1 -1
  189. package/dist/api/fillet.d.ts +5 -7
  190. package/dist/api/fillet.d.ts.map +1 -1
  191. package/dist/api/fillet.js +5 -8
  192. package/dist/api/fillet.js.map +1 -1
  193. package/dist/api/generated/2d.d.ts +4 -0
  194. package/dist/api/generated/2d.d.ts.map +1 -1
  195. package/dist/api/generated/2d.js +4 -0
  196. package/dist/api/generated/2d.js.map +1 -1
  197. package/dist/api/generated/core.d.ts +4 -0
  198. package/dist/api/generated/core.d.ts.map +1 -1
  199. package/dist/api/generated/core.js +4 -0
  200. package/dist/api/generated/core.js.map +1 -1
  201. package/dist/api/generated/gear.d.ts +4 -0
  202. package/dist/api/generated/gear.d.ts.map +1 -1
  203. package/dist/api/generated/gear.js +4 -0
  204. package/dist/api/generated/gear.js.map +1 -1
  205. package/dist/api/generated/io.d.ts +4 -0
  206. package/dist/api/generated/io.d.ts.map +1 -1
  207. package/dist/api/generated/io.js +4 -0
  208. package/dist/api/generated/io.js.map +1 -1
  209. package/dist/api/generated/kernel.d.ts +4 -0
  210. package/dist/api/generated/kernel.d.ts.map +1 -1
  211. package/dist/api/generated/kernel.js +4 -0
  212. package/dist/api/generated/kernel.js.map +1 -1
  213. package/dist/api/generated/measurement.d.ts +21 -21
  214. package/dist/api/generated/measurement.d.ts.map +1 -1
  215. package/dist/api/generated/measurement.js +25 -21
  216. package/dist/api/generated/measurement.js.map +1 -1
  217. package/dist/api/generated/ns.d.ts +4 -0
  218. package/dist/api/generated/ns.d.ts.map +1 -1
  219. package/dist/api/generated/ns.js +4 -0
  220. package/dist/api/generated/ns.js.map +1 -1
  221. package/dist/api/generated/operations.d.ts +32 -32
  222. package/dist/api/generated/operations.d.ts.map +1 -1
  223. package/dist/api/generated/operations.js +58 -54
  224. package/dist/api/generated/operations.js.map +1 -1
  225. package/dist/api/generated/projection.d.ts +4 -0
  226. package/dist/api/generated/projection.d.ts.map +1 -1
  227. package/dist/api/generated/projection.js +4 -0
  228. package/dist/api/generated/projection.js.map +1 -1
  229. package/dist/api/generated/query.d.ts +4 -0
  230. package/dist/api/generated/query.d.ts.map +1 -1
  231. package/dist/api/generated/query.js +4 -0
  232. package/dist/api/generated/query.js.map +1 -1
  233. package/dist/api/generated/script-face-manifest.d.ts +1 -1
  234. package/dist/api/generated/script-face-manifest.js +3 -3
  235. package/dist/api/generated/script-face-manifest.js.map +1 -1
  236. package/dist/api/generated/script-face.d.ts +1 -1
  237. package/dist/api/generated/script-face.js +1 -1
  238. package/dist/api/generated/script-face.js.map +1 -1
  239. package/dist/api/generated/sketching.d.ts +2 -2
  240. package/dist/api/generated/sketching.d.ts.map +1 -1
  241. package/dist/api/generated/sketching.js +8 -4
  242. package/dist/api/generated/sketching.js.map +1 -1
  243. package/dist/api/generated/text.d.ts +4 -0
  244. package/dist/api/generated/text.d.ts.map +1 -1
  245. package/dist/api/generated/text.js +4 -0
  246. package/dist/api/generated/text.js.map +1 -1
  247. package/dist/api/generated/topology.d.ts +45 -45
  248. package/dist/api/generated/topology.d.ts.map +1 -1
  249. package/dist/api/generated/topology.js +77 -73
  250. package/dist/api/generated/topology.js.map +1 -1
  251. package/dist/api/generated/view.d.ts +4 -0
  252. package/dist/api/generated/view.d.ts.map +1 -1
  253. package/dist/api/generated/view.js +4 -0
  254. package/dist/api/generated/view.js.map +1 -1
  255. package/dist/api/geom-types/constants.d.ts +11 -0
  256. package/dist/api/geom-types/constants.d.ts.map +1 -0
  257. package/dist/api/geom-types/constants.js +11 -0
  258. package/dist/api/geom-types/constants.js.map +1 -0
  259. package/dist/api/geom-types/index.d.ts +21 -0
  260. package/dist/api/geom-types/index.d.ts.map +1 -0
  261. package/dist/api/geom-types/index.js +22 -0
  262. package/dist/api/geom-types/index.js.map +1 -0
  263. package/dist/api/geom-types/planeOps.d.ts +98 -0
  264. package/dist/api/geom-types/planeOps.d.ts.map +1 -0
  265. package/dist/api/geom-types/planeOps.js +170 -0
  266. package/dist/api/geom-types/planeOps.js.map +1 -0
  267. package/dist/api/geom-types/planeTypes.d.ts +24 -0
  268. package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
  269. package/dist/api/geom-types/planeTypes.js +8 -0
  270. package/dist/api/geom-types/planeTypes.js.map +1 -0
  271. package/dist/api/geom-types/types.d.ts +64 -0
  272. package/dist/api/geom-types/types.d.ts.map +1 -0
  273. package/dist/api/geom-types/types.js +48 -0
  274. package/dist/api/geom-types/types.js.map +1 -0
  275. package/dist/api/geom-types/vecOps.d.ts +124 -0
  276. package/dist/api/geom-types/vecOps.d.ts.map +1 -0
  277. package/dist/api/geom-types/vecOps.js +202 -0
  278. package/dist/api/geom-types/vecOps.js.map +1 -0
  279. package/dist/api/geom.d.ts.map +1 -1
  280. package/dist/api/geom.js +6 -5
  281. package/dist/api/geom.js.map +1 -1
  282. package/dist/api/half-space.d.ts +56 -0
  283. package/dist/api/half-space.d.ts.map +1 -0
  284. package/dist/api/half-space.js +82 -0
  285. package/dist/api/half-space.js.map +1 -0
  286. package/dist/api/helix.d.ts +11 -2
  287. package/dist/api/helix.d.ts.map +1 -1
  288. package/dist/api/helix.js +20 -4
  289. package/dist/api/helix.js.map +1 -1
  290. package/dist/api/index.d.ts +19 -7
  291. package/dist/api/index.d.ts.map +1 -1
  292. package/dist/api/index.js +44 -11
  293. package/dist/api/index.js.map +1 -1
  294. package/dist/api/internal/compat-op.d.ts +10 -36
  295. package/dist/api/internal/compat-op.d.ts.map +1 -1
  296. package/dist/api/internal/compat-op.js +17 -51
  297. package/dist/api/internal/compat-op.js.map +1 -1
  298. package/dist/api/internal/compat-projection.d.ts +5 -5
  299. package/dist/api/internal/compat-projection.js +5 -5
  300. package/dist/api/internal/compat-projection.js.map +1 -1
  301. package/dist/api/internal/dual-form-args.d.ts +0 -2
  302. package/dist/api/internal/dual-form-args.d.ts.map +1 -1
  303. package/dist/api/internal/dual-form-args.js +1 -3
  304. package/dist/api/internal/dual-form-args.js.map +1 -1
  305. package/dist/api/internal/export-members.d.ts +80 -0
  306. package/dist/api/internal/export-members.d.ts.map +1 -0
  307. package/dist/api/internal/export-members.js +104 -0
  308. package/dist/api/internal/export-members.js.map +1 -0
  309. package/dist/api/internal/l3-bridge.d.ts +22 -37
  310. package/dist/api/internal/l3-bridge.d.ts.map +1 -1
  311. package/dist/api/internal/l3-bridge.js +30 -77
  312. package/dist/api/internal/l3-bridge.js.map +1 -1
  313. package/dist/api/internal/profile-wire.d.ts +1 -1
  314. package/dist/api/internal/profile-wire.js +1 -1
  315. package/dist/api/internal/profile-wire.js.map +1 -1
  316. package/dist/api/internal/result-unwrap.d.ts +4 -6
  317. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  318. package/dist/api/internal/result-unwrap.js +4 -6
  319. package/dist/api/internal/result-unwrap.js.map +1 -1
  320. package/dist/api/knurl.d.ts.map +1 -1
  321. package/dist/api/knurl.js +5 -3
  322. package/dist/api/knurl.js.map +1 -1
  323. package/dist/api/loft.d.ts +2 -2
  324. package/dist/api/loft.d.ts.map +1 -1
  325. package/dist/api/loft.js +2 -2
  326. package/dist/api/loft.js.map +1 -1
  327. package/dist/api/measure-query/index.d.ts +262 -0
  328. package/dist/api/measure-query/index.d.ts.map +1 -0
  329. package/dist/api/measure-query/index.js +390 -0
  330. package/dist/api/measure-query/index.js.map +1 -0
  331. package/dist/api/measurement/index.d.ts +3 -3
  332. package/dist/api/measurement/index.js +3 -3
  333. package/dist/api/measurement/index.js.map +1 -1
  334. package/dist/api/meta.d.ts +0 -2
  335. package/dist/api/meta.d.ts.map +1 -1
  336. package/dist/api/meta.js +0 -2
  337. package/dist/api/meta.js.map +1 -1
  338. package/dist/api/offset2d.d.ts +49 -0
  339. package/dist/api/offset2d.d.ts.map +1 -0
  340. package/dist/api/offset2d.js +86 -0
  341. package/dist/api/offset2d.js.map +1 -0
  342. package/dist/api/pattern.d.ts.map +1 -1
  343. package/dist/api/pattern.js +3 -6
  344. package/dist/api/pattern.js.map +1 -1
  345. package/dist/api/primitives.d.ts +6 -6
  346. package/dist/api/primitives.d.ts.map +1 -1
  347. package/dist/api/primitives.js +19 -17
  348. package/dist/api/primitives.js.map +1 -1
  349. package/dist/api/profile.d.ts.map +1 -1
  350. package/dist/api/profile.js +0 -1
  351. package/dist/api/profile.js.map +1 -1
  352. package/dist/api/punch-hole.d.ts.map +1 -1
  353. package/dist/api/punch-hole.js +0 -1
  354. package/dist/api/punch-hole.js.map +1 -1
  355. package/dist/api/replicate.d.ts +6 -8
  356. package/dist/api/replicate.d.ts.map +1 -1
  357. package/dist/api/replicate.js +27 -65
  358. package/dist/api/replicate.js.map +1 -1
  359. package/dist/api/result.d.ts +1 -1
  360. package/dist/api/result.js +1 -1
  361. package/dist/api/result.js.map +1 -1
  362. package/dist/api/revolve.d.ts +2 -2
  363. package/dist/api/revolve.js +3 -3
  364. package/dist/api/revolve.js.map +1 -1
  365. package/dist/api/screw.d.ts +1 -1
  366. package/dist/api/screw.d.ts.map +1 -1
  367. package/dist/api/screw.js +5 -4
  368. package/dist/api/screw.js.map +1 -1
  369. package/dist/api/sdf.d.ts.map +1 -1
  370. package/dist/api/sdf.js +3 -2
  371. package/dist/api/sdf.js.map +1 -1
  372. package/dist/api/section-by-plane.d.ts.map +1 -1
  373. package/dist/api/section-by-plane.js +0 -1
  374. package/dist/api/section-by-plane.js.map +1 -1
  375. package/dist/api/shape-type/index.d.ts +141 -0
  376. package/dist/api/shape-type/index.d.ts.map +1 -0
  377. package/dist/api/shape-type/index.js +182 -0
  378. package/dist/api/shape-type/index.js.map +1 -0
  379. package/dist/api/shell.d.ts +2 -2
  380. package/dist/api/shell.d.ts.map +1 -1
  381. package/dist/api/shell.js +12 -3
  382. package/dist/api/shell.js.map +1 -1
  383. package/dist/api/sketch-on-face.d.ts +3 -3
  384. package/dist/api/sketch-on-face.d.ts.map +1 -1
  385. package/dist/api/sketch-on-face.js +6 -4
  386. package/dist/api/sketch-on-face.js.map +1 -1
  387. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  388. package/dist/api/sketch-on-plane.js +0 -1
  389. package/dist/api/sketch-on-plane.js.map +1 -1
  390. package/dist/api/solid-from-faces.d.ts +45 -0
  391. package/dist/api/solid-from-faces.d.ts.map +1 -0
  392. package/dist/api/solid-from-faces.js +72 -0
  393. package/dist/api/solid-from-faces.js.map +1 -0
  394. package/dist/api/solid-offset/index.d.ts +67 -0
  395. package/dist/api/solid-offset/index.d.ts.map +1 -0
  396. package/dist/api/solid-offset/index.js +132 -0
  397. package/dist/api/solid-offset/index.js.map +1 -0
  398. package/dist/api/split-by-plane.d.ts.map +1 -1
  399. package/dist/api/split-by-plane.js +0 -1
  400. package/dist/api/split-by-plane.js.map +1 -1
  401. package/dist/api/split.d.ts +1 -1
  402. package/dist/api/split.js +1 -1
  403. package/dist/api/split.js.map +1 -1
  404. package/dist/api/surface/arg-spec.d.ts +37 -44
  405. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  406. package/dist/api/surface/arg-spec.js +224 -233
  407. package/dist/api/surface/arg-spec.js.map +1 -1
  408. package/dist/api/surface-face/index.d.ts +104 -0
  409. package/dist/api/surface-face/index.d.ts.map +1 -0
  410. package/dist/api/surface-face/index.js +217 -0
  411. package/dist/api/surface-face/index.js.map +1 -0
  412. package/dist/api/surface.d.ts +44 -0
  413. package/dist/api/surface.d.ts.map +1 -0
  414. package/dist/api/surface.js +66 -0
  415. package/dist/api/surface.js.map +1 -0
  416. package/dist/api/sweep.d.ts +71 -9
  417. package/dist/api/sweep.d.ts.map +1 -1
  418. package/dist/api/sweep.js +13 -6
  419. package/dist/api/sweep.js.map +1 -1
  420. package/dist/api/thicken.d.ts +1 -1
  421. package/dist/api/thicken.d.ts.map +1 -1
  422. package/dist/api/thicken.js +12 -3
  423. package/dist/api/thicken.js.map +1 -1
  424. package/dist/api/transform.d.ts +8 -8
  425. package/dist/api/transform.d.ts.map +1 -1
  426. package/dist/api/transform.js +58 -27
  427. package/dist/api/transform.js.map +1 -1
  428. package/dist/api/view/cameraFns.d.ts +1 -1
  429. package/dist/api/view/cameraFns.d.ts.map +1 -1
  430. package/dist/api/view/cameraFns.js +1 -1
  431. package/dist/api/view/cameraFns.js.map +1 -1
  432. package/dist/api/view/index.d.ts +0 -2
  433. package/dist/api/view/index.d.ts.map +1 -1
  434. package/dist/api/view/index.js +0 -2
  435. package/dist/api/view/index.js.map +1 -1
  436. package/dist/api/view/projectionPlanes.d.ts +1 -1
  437. package/dist/api/view/projectionPlanes.d.ts.map +1 -1
  438. package/dist/api/view/projectionPlanes.js.map +1 -1
  439. package/dist/api/view/view-camera.d.ts +7 -9
  440. package/dist/api/view/view-camera.d.ts.map +1 -1
  441. package/dist/api/view/view-camera.js +4 -6
  442. package/dist/api/view/view-camera.js.map +1 -1
  443. package/dist/api/view/view-projection.d.ts +0 -2
  444. package/dist/api/view/view-projection.d.ts.map +1 -1
  445. package/dist/api/view/view-projection.js +0 -2
  446. package/dist/api/view/view-projection.js.map +1 -1
  447. package/dist/api/view/view-sheet.d.ts +0 -2
  448. package/dist/api/view/view-sheet.d.ts.map +1 -1
  449. package/dist/api/view/view-sheet.js +0 -2
  450. package/dist/api/view/view-sheet.js.map +1 -1
  451. package/dist/api/view-export/index.d.ts +97 -0
  452. package/dist/api/view-export/index.d.ts.map +1 -0
  453. package/dist/api/view-export/index.js +118 -0
  454. package/dist/api/view-export/index.js.map +1 -0
  455. package/dist/boolean/index.d.ts +23 -0
  456. package/dist/boolean/index.d.ts.map +1 -0
  457. package/dist/boolean/index.js +27 -0
  458. package/dist/boolean/index.js.map +1 -0
  459. package/dist/brep/brep-chain.d.ts +1 -19
  460. package/dist/brep/brep-chain.d.ts.map +1 -1
  461. package/dist/brep/brep-chain.js +0 -1
  462. package/dist/brep/brep-chain.js.map +1 -1
  463. package/dist/brep/brep-ops.d.ts +93 -2
  464. package/dist/brep/brep-ops.d.ts.map +1 -1
  465. package/dist/brep/brep-ops.js +185 -15
  466. package/dist/brep/brep-ops.js.map +1 -1
  467. package/dist/brep/brep-topology.d.ts +20 -0
  468. package/dist/brep/brep-topology.d.ts.map +1 -1
  469. package/dist/brep/brep-topology.js +46 -0
  470. package/dist/brep/brep-topology.js.map +1 -1
  471. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  472. package/dist/brep/engine/adapters/brep-mock.js +0 -3
  473. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  474. package/dist/brep/engine/adapters/brepkit.d.ts +4 -3
  475. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  476. package/dist/brep/engine/adapters/brepkit.js +4 -98
  477. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  478. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  479. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  480. package/dist/brep/engine/adapters/occt.js +4 -148
  481. package/dist/brep/engine/adapters/occt.js.map +1 -1
  482. package/dist/brep/engine/native-history.d.ts +27 -0
  483. package/dist/brep/engine/native-history.d.ts.map +1 -0
  484. package/dist/brep/engine/native-history.js +54 -0
  485. package/dist/brep/engine/native-history.js.map +1 -0
  486. package/dist/brep/engine/primitives.d.ts +2 -3
  487. package/dist/brep/engine/primitives.d.ts.map +1 -1
  488. package/dist/brep/engine/primitives.js +1 -2
  489. package/dist/brep/engine/primitives.js.map +1 -1
  490. package/dist/brep/engine/registry.d.ts +3 -5
  491. package/dist/brep/engine/registry.d.ts.map +1 -1
  492. package/dist/brep/engine/registry.js +2 -2
  493. package/dist/brep/engine/registry.js.map +1 -1
  494. package/dist/brep/engine/types.d.ts +35 -77
  495. package/dist/brep/engine/types.d.ts.map +1 -1
  496. package/dist/brep/engine/types.js.map +1 -1
  497. package/dist/brep/export/export-model.d.ts +21 -0
  498. package/dist/brep/export/export-model.d.ts.map +1 -1
  499. package/dist/brep/export/export-model.js +171 -73
  500. package/dist/brep/export/export-model.js.map +1 -1
  501. package/dist/brep/export/step.d.ts +17 -1
  502. package/dist/brep/export/step.d.ts.map +1 -1
  503. package/dist/brep/export/step.js +133 -0
  504. package/dist/brep/export/step.js.map +1 -1
  505. package/dist/brep/export/stl.d.ts +22 -1
  506. package/dist/brep/export/stl.d.ts.map +1 -1
  507. package/dist/brep/export/stl.js +58 -10
  508. package/dist/brep/export/stl.js.map +1 -1
  509. package/dist/brep/export/transform12.d.ts +47 -0
  510. package/dist/brep/export/transform12.d.ts.map +1 -0
  511. package/dist/brep/export/transform12.js +87 -0
  512. package/dist/brep/export/transform12.js.map +1 -0
  513. package/dist/brep/face-evolution.d.ts +53 -0
  514. package/dist/brep/face-evolution.d.ts.map +1 -1
  515. package/dist/brep/face-evolution.js +65 -0
  516. package/dist/brep/face-evolution.js.map +1 -1
  517. package/dist/brep/handle-bridge.d.ts +2 -2
  518. package/dist/brep/handle-bridge.js +2 -2
  519. package/dist/brep/handle-bridge.js.map +1 -1
  520. package/dist/brep/index.d.ts +6 -3
  521. package/dist/brep/index.d.ts.map +1 -1
  522. package/dist/brep/index.js +6 -3
  523. package/dist/brep/index.js.map +1 -1
  524. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  525. package/dist/brepkit-kernel/brepkitKernel.js +2 -2
  526. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  527. package/dist/browser-host/index.d.ts +4 -1
  528. package/dist/browser-host/index.d.ts.map +1 -1
  529. package/dist/browser-host/index.js +7 -1
  530. package/dist/browser-host/index.js.map +1 -1
  531. package/dist/browser.d.ts +5 -9
  532. package/dist/browser.d.ts.map +1 -1
  533. package/dist/browser.js +5 -26
  534. package/dist/browser.js.map +1 -1
  535. package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
  536. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  537. package/dist/cad-runtime/admit-compat-lib.js +3 -9
  538. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  539. package/dist/cad-runtime/backend-dispatch.d.ts +13 -58
  540. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  541. package/dist/cad-runtime/backend-dispatch.js +34 -83
  542. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  543. package/dist/cad-runtime/content-key.d.ts +3 -3
  544. package/dist/cad-runtime/content-key.js +3 -3
  545. package/dist/cad-runtime/content-key.js.map +1 -1
  546. package/dist/cad-runtime/direct-executor.d.ts +6 -3
  547. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  548. package/dist/cad-runtime/direct-executor.js +31 -9
  549. package/dist/cad-runtime/direct-executor.js.map +1 -1
  550. package/dist/cad-runtime/interp/env.d.ts +1 -1
  551. package/dist/cad-runtime/interp/env.js.map +1 -1
  552. package/dist/cad-runtime/lib-id.d.ts +0 -2
  553. package/dist/cad-runtime/lib-id.d.ts.map +1 -1
  554. package/dist/cad-runtime/lib-id.js +0 -2
  555. package/dist/cad-runtime/lib-id.js.map +1 -1
  556. package/dist/cad-runtime/live-shapes.d.ts +3 -5
  557. package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
  558. package/dist/cad-runtime/live-shapes.js +8 -10
  559. package/dist/cad-runtime/live-shapes.js.map +1 -1
  560. package/dist/cad-runtime/ports.d.ts +31 -3
  561. package/dist/cad-runtime/ports.d.ts.map +1 -1
  562. package/dist/cad-runtime/ports.js.map +1 -1
  563. package/dist/cad-runtime/runtime.d.ts +54 -19
  564. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  565. package/dist/cad-runtime/runtime.js +89 -54
  566. package/dist/cad-runtime/runtime.js.map +1 -1
  567. package/dist/define-op.d.ts +10 -14
  568. package/dist/define-op.d.ts.map +1 -1
  569. package/dist/define-op.js +5 -22
  570. package/dist/define-op.js.map +1 -1
  571. package/dist/env-agnostic.d.ts +2 -2
  572. package/dist/env-agnostic.d.ts.map +1 -1
  573. package/dist/env-agnostic.js +1 -1
  574. package/dist/env-agnostic.js.map +1 -1
  575. package/dist/geometry2d/bridge/plane.d.ts +1 -1
  576. package/dist/geometry2d/bridge/plane.js +1 -1
  577. package/dist/geometry2d/bridge/plane.js.map +1 -1
  578. package/dist/geometry2d/curve2d.d.ts +1 -1
  579. package/dist/geometry2d/curve2d.js +1 -1
  580. package/dist/geometry2d/curve2d.js.map +1 -1
  581. package/dist/index.d.ts +14 -65
  582. package/dist/index.d.ts.map +1 -1
  583. package/dist/index.js +18 -70
  584. package/dist/index.js.map +1 -1
  585. package/dist/io/fai-zip/container-read.d.ts +16 -0
  586. package/dist/io/fai-zip/container-read.d.ts.map +1 -1
  587. package/dist/io/fai-zip/container-read.js +22 -0
  588. package/dist/io/fai-zip/container-read.js.map +1 -1
  589. package/dist/io/fai-zip/index.d.ts +1 -1
  590. package/dist/io/fai-zip/index.d.ts.map +1 -1
  591. package/dist/io/fai-zip/index.js +1 -1
  592. package/dist/io/fai-zip/index.js.map +1 -1
  593. package/dist/lang/code-to-args.d.ts.map +1 -1
  594. package/dist/lang/code-to-args.js +10 -1
  595. package/dist/lang/code-to-args.js.map +1 -1
  596. package/dist/lang/determinism-scanner.d.ts.map +1 -1
  597. package/dist/lang/determinism-scanner.js +22 -9
  598. package/dist/lang/determinism-scanner.js.map +1 -1
  599. package/dist/lang/metadata-extractor.d.ts +27 -6
  600. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  601. package/dist/lang/metadata-extractor.js +88 -8
  602. package/dist/lang/metadata-extractor.js.map +1 -1
  603. package/dist/lang/parse-error.d.ts +4 -0
  604. package/dist/lang/parse-error.d.ts.map +1 -1
  605. package/dist/lang/parse-error.js.map +1 -1
  606. package/dist/lang/security-scanner.d.ts +27 -2
  607. package/dist/lang/security-scanner.d.ts.map +1 -1
  608. package/dist/lang/security-scanner.js +29 -2
  609. package/dist/lang/security-scanner.js.map +1 -1
  610. package/dist/lang/source-edit.d.ts +2 -2
  611. package/dist/lang/source-edit.js.map +1 -1
  612. package/dist/lang/symbol-table.generated.d.ts +53 -0
  613. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  614. package/dist/lang/symbol-table.generated.js +53 -0
  615. package/dist/lang/symbol-table.generated.js.map +1 -1
  616. package/dist/mesh/import-model.d.ts +94 -0
  617. package/dist/mesh/import-model.d.ts.map +1 -0
  618. package/dist/mesh/import-model.js +15 -0
  619. package/dist/mesh/import-model.js.map +1 -0
  620. package/dist/mesh/index.d.ts +19 -63
  621. package/dist/mesh/index.d.ts.map +1 -1
  622. package/dist/mesh/index.js +19 -72
  623. package/dist/mesh/index.js.map +1 -1
  624. package/dist/mesh/io.d.ts +62 -17
  625. package/dist/mesh/io.d.ts.map +1 -1
  626. package/dist/mesh/io.js +210 -41
  627. package/dist/mesh/io.js.map +1 -1
  628. package/dist/mesh/primitives.js +1 -1
  629. package/dist/mesh/primitives.js.map +1 -1
  630. package/dist/mesh/threemf-bambu.d.ts +12 -1
  631. package/dist/mesh/threemf-bambu.d.ts.map +1 -1
  632. package/dist/mesh/threemf-bambu.js +68 -16
  633. package/dist/mesh/threemf-bambu.js.map +1 -1
  634. package/dist/mesh/threemf-loader.d.ts +52 -5
  635. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  636. package/dist/mesh/threemf-loader.js +139 -41
  637. package/dist/mesh/threemf-loader.js.map +1 -1
  638. package/dist/mesh/transform.d.ts +1 -1
  639. package/dist/mesh/transform.js +1 -1
  640. package/dist/mesh/transform.js.map +1 -1
  641. package/dist/mesh/types.d.ts +35 -5
  642. package/dist/mesh/types.d.ts.map +1 -1
  643. package/dist/mesh/types.js.map +1 -1
  644. package/dist/node-host/cli.d.ts +49 -1
  645. package/dist/node-host/cli.d.ts.map +1 -1
  646. package/dist/node-host/cli.js +125 -19
  647. package/dist/node-host/cli.js.map +1 -1
  648. package/dist/node-host/execute-script.d.ts +56 -0
  649. package/dist/node-host/execute-script.d.ts.map +1 -0
  650. package/dist/node-host/execute-script.js +47 -0
  651. package/dist/node-host/execute-script.js.map +1 -0
  652. package/dist/node-host/index.d.ts +1 -0
  653. package/dist/node-host/index.d.ts.map +1 -1
  654. package/dist/node-host/index.js +4 -0
  655. package/dist/node-host/index.js.map +1 -1
  656. package/dist/node.d.ts +2 -0
  657. package/dist/node.d.ts.map +1 -1
  658. package/dist/node.js +3 -0
  659. package/dist/node.js.map +1 -1
  660. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
  661. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
  662. package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
  663. package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
  664. package/dist/occt-kernel/hullGeometry.d.ts +2 -2
  665. package/dist/occt-kernel/hullGeometry.js +2 -3
  666. package/dist/occt-kernel/hullGeometry.js.map +1 -1
  667. package/dist/occt-kernel/hullOps.d.ts +3 -3
  668. package/dist/occt-kernel/hullOps.js +4 -4
  669. package/dist/occt-kernel/hullOps.js.map +1 -1
  670. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  671. package/dist/occt-kernel/occt-primitives.js +31 -4
  672. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  673. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  674. package/dist/occt-kernel/occtKernel.js +18 -0
  675. package/dist/occt-kernel/occtKernel.js.map +1 -1
  676. package/dist/occt-scan/recognize.d.ts +58 -0
  677. package/dist/occt-scan/recognize.d.ts.map +1 -0
  678. package/dist/occt-scan/recognize.js +216 -0
  679. package/dist/occt-scan/recognize.js.map +1 -0
  680. package/dist/primitives/brep-primitives.js +7 -7
  681. package/dist/primitives/brep-primitives.js.map +1 -1
  682. package/dist/primitives/index.d.ts +19 -0
  683. package/dist/primitives/index.d.ts.map +1 -0
  684. package/dist/primitives/index.js +21 -0
  685. package/dist/primitives/index.js.map +1 -0
  686. package/dist/result/bug.d.ts +1 -1
  687. package/dist/result/bug.js +1 -1
  688. package/dist/result/bug.js.map +1 -1
  689. package/dist/result/errors.d.ts +2 -2
  690. package/dist/result/errors.d.ts.map +1 -1
  691. package/dist/result/errors.js +1 -1
  692. package/dist/result/errors.js.map +1 -1
  693. package/dist/result/vec3.d.ts +1 -1
  694. package/dist/result/vec3.js +1 -1
  695. package/dist/result/vec3.js.map +1 -1
  696. package/dist/runtime-state.d.ts +79 -29
  697. package/dist/runtime-state.d.ts.map +1 -1
  698. package/dist/runtime-state.js +84 -0
  699. package/dist/runtime-state.js.map +1 -1
  700. package/dist/script-globals.d.ts +24 -0
  701. package/dist/script-globals.d.ts.map +1 -0
  702. package/dist/script-globals.js +24 -0
  703. package/dist/script-globals.js.map +1 -0
  704. package/dist/sdf/index.d.ts +12 -0
  705. package/dist/sdf/index.d.ts.map +1 -0
  706. package/dist/sdf/index.js +13 -0
  707. package/dist/sdf/index.js.map +1 -0
  708. package/dist/sdk.d.ts +0 -1
  709. package/dist/sdk.d.ts.map +1 -1
  710. package/dist/sdk.js.map +1 -1
  711. package/dist/shape.d.ts +24 -0
  712. package/dist/shape.d.ts.map +1 -1
  713. package/dist/shape.js +40 -0
  714. package/dist/shape.js.map +1 -1
  715. package/dist/topology/naming/lineage.d.ts +3 -2
  716. package/dist/topology/naming/lineage.d.ts.map +1 -1
  717. package/dist/topology/naming/lineage.js.map +1 -1
  718. package/dist/weapp.d.ts +3 -3
  719. package/dist/weapp.d.ts.map +1 -1
  720. package/dist/weapp.js +2 -2
  721. package/dist/weapp.js.map +1 -1
  722. package/package.json +283 -44
@@ -6,7 +6,7 @@
6
6
  * 业务层(runtime/brep ops/api)只经注册表取引擎,不直接 import occt 初始化
7
7
  * 函数——引擎本体可整体替换(换一个适配器即换引擎)。
8
8
  *
9
- * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):
9
+ * Phase 3:
10
10
  * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个
11
11
  * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型
12
12
  * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。
@@ -18,135 +18,6 @@ import { registerBrepEngine, hasBrepEngine, isBrepEngineRegistered } from '../re
18
18
  import { createOcctPrimitives } from '../../../occt-kernel/occt-primitives.js';
19
19
  /** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */
20
20
  export const OCCT_BREP_ENGINE_ID = 'occt';
21
- /**
22
- * OCCT 实际提供的 `*WithHistory` 核函数名(Phase 0.2:逐核函数如实声明)。
23
- *
24
- * 12 个全部由 `occt-wasm@5.6.0` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。
25
- * L1 契约只含前三员 + filletWithHistory(双方都有对齐实现);其余 8 个是 occt
26
- * 平台面能力(brepkit 无对应 API),存在性由本能力表如实声明,op 侧用
27
- * `engines: ['occt']`(Phase 5 D11)表达平台归属。
28
- */
29
- const OCCT_EVOLUTION_KINDS = [
30
- 'fuseWithHistory',
31
- 'cutWithHistory',
32
- 'intersectWithHistory',
33
- 'filletWithHistory',
34
- 'chamferWithHistory',
35
- 'translateWithHistory',
36
- 'rotateWithHistory',
37
- 'mirrorWithHistory',
38
- 'scaleWithHistory',
39
- 'shellWithHistory',
40
- 'offsetWithHistory',
41
- 'thickenWithHistory',
42
- ];
43
- /**
44
- * 非演化内核方法全集(BrepMethodKind)——逐核如实声明(Phase 1,P2 缺口补齐)。
45
- *
46
- * ⚠️ Phase 2 修正(能力声明=可执行语义):
47
- * - 保留 `gridPattern`:occt-wasm 无原生 gridPattern,但适配器有组合实现
48
- * (嵌套 linearPattern + fuseAll,见 occt-primitives.ts)——occt 下
49
- * gridPattern op 可执行,声明成立;
50
- * - 移除 `rectangularPattern`:occt-wasm 无此内核方法,vendored rectangularPattern
51
- * 是纯 JS 组合(compoundOpsFns.ts translate+fuseAll,不调内核)——无 op 依赖
52
- * 该能力名,声明即虚假(capability-map 实证 36 op 无一依赖)。
53
- */
54
- const OCCT_METHOD_KINDS = [
55
- 'linearPattern',
56
- 'circularPattern',
57
- 'gridPattern',
58
- 'mirror',
59
- 'rotate',
60
- 'translate',
61
- 'scale',
62
- 'makeRectangle',
63
- 'shell',
64
- 'extrude',
65
- 'loft',
66
- 'loftAdvanced',
67
- 'section',
68
- 'sweepPipeShell',
69
- 'simplePipe',
70
- 'revolveVec',
71
- 'buildExtrusionLaw',
72
- 'fuse',
73
- 'cut',
74
- 'intersect',
75
- 'fuseAll',
76
- 'makeArcEdge',
77
- 'makeCircleEdge',
78
- 'makeBezierEdge',
79
- 'makeCylinder',
80
- 'makeEllipsoid',
81
- 'makeFace',
82
- 'makeFaceOnSurface',
83
- 'makeLineEdge',
84
- 'makeTorus',
85
- 'makeVertex',
86
- 'makeWire',
87
- 'makeWireFromMixed',
88
- 'buildEdgeOnSurface',
89
- 'addHolesInFace',
90
- 'buildTriFace',
91
- 'sew',
92
- 'sewAndSolidify',
93
- 'healFace',
94
- 'healSolid',
95
- 'healWire',
96
- 'fixShape',
97
- 'fixSelfIntersection',
98
- 'isValid',
99
- 'removeDegenerateEdges',
100
- 'simplify',
101
- 'split',
102
- 'curveParameters',
103
- 'curvePointAtParam',
104
- 'curveTangent',
105
- 'hullFromPoints',
106
- 'isNull',
107
- 'iterShapes',
108
- 'locate',
109
- 'shapeType',
110
- 'surfaceCenterOfMass',
111
- 'surfaceNormal',
112
- 'surfaceType',
113
- 'uvBounds',
114
- // Phase 5(D5):测量族能力名统一为 L1 中立名(getBoundingBox/getVolume/...)——
115
- // vendored 面按 brepjs 自身命名(volume/area/length),core 能力表用 L1 中立名。
116
- 'getBoundingBox',
117
- 'getVolume',
118
- 'getSurfaceArea',
119
- 'getLength',
120
- 'getCenterOfMass',
121
- 'composeTransform',
122
- 'applyComposedTransformWithHistory',
123
- 'generalTransformNonOrthogonal',
124
- 'generalTransformWithHistory',
125
- 'importStl',
126
- 'createXCAFDocument',
127
- 'importXCAFFromSTEP',
128
- 'copyShape',
129
- 'dispose',
130
- 'downcast',
131
- 'hashCode',
132
- // chamfer/fillet 基础方法(directEdit 族逐核真名;occt-wasm 原生提供)
133
- 'chamfer',
134
- 'chamferDistAngle',
135
- 'fillet',
136
- 'filletVariable',
137
- // 2026-09-26 B 批:rotate/applyMatrix 从 engines:[occt] 降级为能力路由后,occt 侧须
138
- // 如实声明 transform(:228,BRepBuilderAPI_Transform 深拷贝,STEP-safe)/
139
- // generalTransform(:231,gp_GTrsf)——此前两方法在 primitives 上实现但未登记进能力表。
140
- 'transform',
141
- 'generalTransform',
142
- // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade - OCCT already implements
143
- // sectionByPlane(:162)/makeCompound(:285)/located(:229)/getSubShapes(:314) but previously undeclared
144
- // (engines:[occt] bypassed the gate). Now declared honestly for capability routing.
145
- 'sectionByPlane',
146
- 'makeCompound',
147
- 'located',
148
- 'getSubShapes',
149
- ];
150
21
  /**
151
22
  * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。
152
23
  *
@@ -161,26 +32,11 @@ export async function registerOcctBrepEngine() {
161
32
  registerBrepEngine(OCCT_BREP_ENGINE_ID, async () => ({
162
33
  id: OCCT_BREP_ENGINE_ID,
163
34
  primitives,
164
- capabilities: {
165
- // 面演化:逐核函数名单(不是族级布尔——见 BrepEvolutionKind)。
166
- evolution: OCCT_EVOLUTION_KINDS,
167
- // 非演化内核方法:逐核如实声明(Phase 1,P2 缺口补齐;op 声明按此静态判定)。
168
- methods: OCCT_METHOD_KINDS,
169
- heal: true,
170
- directEdit: true,
171
- advSurface: true,
172
- assembly: true,
173
- // P7 并入(D4):OCCT 是精确 B-rep 内核——如实声明 brepjs KernelCapabilities 字段。
174
- exact: true,
175
- brepExport: true,
176
- exactMeasurement: true,
177
- tessellationModel: 'extract-time',
178
- },
179
35
  }));
180
36
  // 2026-09-25 core-decouple Phase 2(§5.1):删除 occt-kernel-bridge 后,本注册
181
- // 流程只管 core 引擎注册表,不再向 vendored kernel registry 注入——vendored
182
- // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 vendored 面的
183
- // 宿主/测试自行装配 vendored registry。
37
+ // 流程只管 core 引擎注册表,不再向旧 kernel registry 注入——compat
38
+ // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 compat 面的
39
+ // 宿主/测试自行装配 registry。
184
40
  }
185
41
  /**
186
42
  * 内置默认 BREP 引擎装配(OCCT):宿主未注册任何引擎时的缺省值。
@@ -1 +1 @@
1
- {"version":3,"file":"occt.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)\n *\n * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/\n * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。\n * 业务层(runtime/brep ops/api)只经注册表取引擎,不直接 import occt 初始化\n * 函数——引擎本体可整体替换(换一个适配器即换引擎)。\n *\n * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):\n * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个\n * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型\n * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。\n *\n * 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、\n * XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。\n */\n\nimport { registerBrepEngine, hasBrepEngine, isBrepEngineRegistered, type BrepEngine } from '../registry'\nimport type { BrepEvolutionKind, BrepMethodKind } from '../types'\nimport { createOcctPrimitives } from '../../../occt-kernel/occt-primitives'\n\n/** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */\nexport const OCCT_BREP_ENGINE_ID = 'occt'\n\n/**\n * OCCT 实际提供的 `*WithHistory` 核函数名(Phase 0.2:逐核函数如实声明)。\n *\n * 12 个全部由 `occt-wasm@5.6.0` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。\n * L1 契约只含前三员 + filletWithHistory(双方都有对齐实现);其余 8 个是 occt\n * 平台面能力(brepkit 无对应 API),存在性由本能力表如实声明,op 侧用\n * `engines: ['occt']`(Phase 5 D11)表达平台归属。\n */\nconst OCCT_EVOLUTION_KINDS = [\n 'fuseWithHistory',\n 'cutWithHistory',\n 'intersectWithHistory',\n 'filletWithHistory',\n 'chamferWithHistory',\n 'translateWithHistory',\n 'rotateWithHistory',\n 'mirrorWithHistory',\n 'scaleWithHistory',\n 'shellWithHistory',\n 'offsetWithHistory',\n 'thickenWithHistory',\n] as const satisfies readonly BrepEvolutionKind[]\n\n/**\n * 非演化内核方法全集(BrepMethodKind)——逐核如实声明(Phase 1,P2 缺口补齐)。\n *\n * ⚠️ Phase 2 修正(能力声明=可执行语义):\n * - 保留 `gridPattern`:occt-wasm 无原生 gridPattern,但适配器有组合实现\n * (嵌套 linearPattern + fuseAll,见 occt-primitives.ts)——occt 下\n * gridPattern op 可执行,声明成立;\n * - 移除 `rectangularPattern`:occt-wasm 无此内核方法,vendored rectangularPattern\n * 是纯 JS 组合(compoundOpsFns.ts translate+fuseAll,不调内核)——无 op 依赖\n * 该能力名,声明即虚假(capability-map 实证 36 op 无一依赖)。\n */\nconst OCCT_METHOD_KINDS = [\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'mirror',\n 'rotate',\n 'translate',\n 'scale',\n 'makeRectangle',\n 'shell',\n 'extrude',\n 'loft',\n 'loftAdvanced',\n 'section',\n 'sweepPipeShell',\n 'simplePipe',\n 'revolveVec',\n 'buildExtrusionLaw',\n 'fuse',\n 'cut',\n 'intersect',\n 'fuseAll',\n 'makeArcEdge',\n 'makeCircleEdge',\n 'makeBezierEdge',\n 'makeCylinder',\n 'makeEllipsoid',\n 'makeFace',\n 'makeFaceOnSurface',\n 'makeLineEdge',\n 'makeTorus',\n 'makeVertex',\n 'makeWire',\n 'makeWireFromMixed',\n 'buildEdgeOnSurface',\n 'addHolesInFace',\n 'buildTriFace',\n 'sew',\n 'sewAndSolidify',\n 'healFace',\n 'healSolid',\n 'healWire',\n 'fixShape',\n 'fixSelfIntersection',\n 'isValid',\n 'removeDegenerateEdges',\n 'simplify',\n 'split',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'hullFromPoints',\n 'isNull',\n 'iterShapes',\n 'locate',\n 'shapeType',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n // Phase 5(D5):测量族能力名统一为 L1 中立名(getBoundingBox/getVolume/...)——\n // vendored 面按 brepjs 自身命名(volume/area/length),core 能力表用 L1 中立名。\n 'getBoundingBox',\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'composeTransform',\n 'applyComposedTransformWithHistory',\n 'generalTransformNonOrthogonal',\n 'generalTransformWithHistory',\n 'importStl',\n 'createXCAFDocument',\n 'importXCAFFromSTEP',\n 'copyShape',\n 'dispose',\n 'downcast',\n 'hashCode',\n // chamfer/fillet 基础方法(directEdit 族逐核真名;occt-wasm 原生提供)\n 'chamfer',\n 'chamferDistAngle',\n 'fillet',\n 'filletVariable',\n // 2026-09-26 B 批:rotate/applyMatrix 从 engines:[occt] 降级为能力路由后,occt 侧须\n // 如实声明 transform(:228,BRepBuilderAPI_Transform 深拷贝,STEP-safe)/\n // generalTransform(:231,gp_GTrsf)——此前两方法在 primitives 上实现但未登记进能力表。\n 'transform',\n 'generalTransform',\n // 2026-09-26 C batch: section/drill/pocket/boss/mirrorJoin downgrade - OCCT already implements\n // sectionByPlane(:162)/makeCompound(:285)/located(:229)/getSubShapes(:314) but previously undeclared\n // (engines:[occt] bypassed the gate). Now declared honestly for capability routing.\n 'sectionByPlane',\n 'makeCompound',\n 'located',\n 'getSubShapes',\n] as const satisfies readonly BrepMethodKind[]\n\n/**\n * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后\n * 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或\n * 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。\n */\nexport async function registerOcctBrepEngine(): Promise<void> {\n const primitives = await createOcctPrimitives()\n if (isBrepEngineRegistered(OCCT_BREP_ENGINE_ID)) return\n registerBrepEngine(OCCT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: OCCT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n // 面演化:逐核函数名单(不是族级布尔——见 BrepEvolutionKind)。\n evolution: OCCT_EVOLUTION_KINDS,\n // 非演化内核方法:逐核如实声明(Phase 1,P2 缺口补齐;op 声明按此静态判定)。\n methods: OCCT_METHOD_KINDS,\n heal: true,\n directEdit: true,\n advSurface: true,\n assembly: true,\n // P7 并入(D4):OCCT 是精确 B-rep 内核——如实声明 brepjs KernelCapabilities 字段。\n exact: true,\n brepExport: true,\n exactMeasurement: true,\n tessellationModel: 'extract-time',\n },\n }))\n // 2026-09-25 core-decouple Phase 2(§5.1):删除 occt-kernel-bridge 后,本注册\n // 流程只管 core 引擎注册表,不再向 vendored kernel registry 注入——vendored\n // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 vendored 面的\n // 宿主/测试自行装配 vendored registry。\n}\n\n/**\n * 内置默认 BREP 引擎装配(OCCT):宿主未注册任何引擎时的缺省值。\n *\n * OCCT 是 faijs 的默认 BREP 引擎——低频率、静态的替换:换引擎 = 宿主在\n * 装配期显式注册其它引擎(首个注册者为默认),或改本处默认。宿主无需为\n * 每次使用自行提供引擎;本函数幂等,已注册任何引擎则 no-op。\n */\nexport async function ensureOcctDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerOcctBrepEngine()\n}\n"]}
1
+ {"version":3,"file":"occt.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,sBAAsB,EAAmB,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE3E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,UAAU,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC/C,IAAI,sBAAsB,CAAC,mBAAmB,CAAC;QAAE,OAAM;IACvD,kBAAkB,CAAC,mBAAmB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QACxE,EAAE,EAAE,mBAAmB;QACvB,UAAU;KACX,CAAC,CAAC,CAAA;IACH,qEAAqE;IACrE,kDAAkD;IAClD,mDAAmD;IACnD,sBAAsB;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,sBAAsB,EAAE,CAAA;AAChC,CAAC","sourcesContent":["/**\r\n * engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)\r\n *\r\n * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/\r\n * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。\r\n * 业务层(runtime/brep ops/api)只经注册表取引擎,不直接 import occt 初始化\r\n * 函数——引擎本体可整体替换(换一个适配器即换引擎)。\r\n *\r\n * Phase 3:\r\n * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个\r\n * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型\r\n * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。\r\n *\r\n * 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、\r\n * XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。\r\n */\r\n\r\nimport { registerBrepEngine, hasBrepEngine, isBrepEngineRegistered, type BrepEngine } from '../registry'\r\nimport { createOcctPrimitives } from '../../../occt-kernel/occt-primitives'\r\n\r\n/** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */\r\nexport const OCCT_BREP_ENGINE_ID = 'occt'\r\n\r\n/**\r\n * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。\r\n *\r\n * 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后\r\n * 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或\r\n * 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。\r\n */\r\nexport async function registerOcctBrepEngine(): Promise<void> {\r\n const primitives = await createOcctPrimitives()\r\n if (isBrepEngineRegistered(OCCT_BREP_ENGINE_ID)) return\r\n registerBrepEngine(OCCT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\r\n id: OCCT_BREP_ENGINE_ID,\r\n primitives,\r\n }))\r\n // 2026-09-25 core-decouple Phase 2(§5.1):删除 occt-kernel-bridge 后,本注册\r\n // 流程只管 core 引擎注册表,不再向旧 kernel registry 注入——compat\r\n // 兼容面(compat op)由 Phase 3 逐批自有化替换;中间态下需要 compat 面的\r\n // 宿主/测试自行装配 registry。\r\n}\r\n\r\n/**\r\n * 内置默认 BREP 引擎装配(OCCT):宿主未注册任何引擎时的缺省值。\r\n *\r\n * OCCT 是 faijs 的默认 BREP 引擎——低频率、静态的替换:换引擎 = 宿主在\r\n * 装配期显式注册其它引擎(首个注册者为默认),或改本处默认。宿主无需为\r\n * 每次使用自行提供引擎;本函数幂等,已注册任何引擎则 no-op。\r\n */\r\nexport async function ensureOcctDefaultEngine(): Promise<void> {\r\n if (hasBrepEngine()) return\r\n await registerOcctBrepEngine()\r\n}\r\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * native-history — 引擎是否原生提供某个 `*WithHistory` 面演化核函数。
3
+ *
4
+ * op 实现体内选实现轨(调 `*WithHistory` 还是裸方法)时读这里:这是一条**引擎事实**,
5
+ * 与 op 无关,因此不挂在 op 声明上,也没有任何"能力表"参与——「引擎能不能做这件事」
6
+ * 由引擎身份静态决定,写代码的时刻就是常量。
7
+ *
8
+ * 两个真实引擎的事实(本模块是唯一归属,别处不再声明):
9
+ * - `occt`:12 个 `*WithHistory` 全有(`occt-wasm@5.6.0` 原生导出)。
10
+ * - `brepkit`:只有 `fuseWithHistory` / `cutWithHistory` / `filletWithHistory`
11
+ * (`brepkit-kernel/brepkitKernel.ts` 的面演化三员,其余为 `unsupported(...)` 桩)。
12
+ *
13
+ * 未知 / 未装配引擎(含测试替身 `brep_mock`)→ 一律 `false`:拿不到事实时按"没有"处理,
14
+ * 让 op 走裸方法轨(几何仍正确,只是不产面演化),绝不假设引擎有历史。
15
+ *
16
+ * 零重依赖:只读运行期装配配置(引擎 id),不 import 任何平台内核。
17
+ */
18
+ import type { BrepEvolutionKind } from './types.js';
19
+ /**
20
+ * 当前 BREP 引擎是否原生实现该 `*WithHistory`(静态;读引擎身份,不读任何声明表)。
21
+ *
22
+ * @param kind - the evolution kernel function name to test.
23
+ * @returns true when the current engine natively implements it; false otherwise
24
+ * (including when no engine is assembled / the engine is unknown).
25
+ */
26
+ export declare function hasNativeHistory(kind: BrepEvolutionKind): boolean;
27
+ //# sourceMappingURL=native-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-history.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/native-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AA2BhD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAGjE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * native-history — 引擎是否原生提供某个 `*WithHistory` 面演化核函数。
3
+ *
4
+ * op 实现体内选实现轨(调 `*WithHistory` 还是裸方法)时读这里:这是一条**引擎事实**,
5
+ * 与 op 无关,因此不挂在 op 声明上,也没有任何"能力表"参与——「引擎能不能做这件事」
6
+ * 由引擎身份静态决定,写代码的时刻就是常量。
7
+ *
8
+ * 两个真实引擎的事实(本模块是唯一归属,别处不再声明):
9
+ * - `occt`:12 个 `*WithHistory` 全有(`occt-wasm@5.6.0` 原生导出)。
10
+ * - `brepkit`:只有 `fuseWithHistory` / `cutWithHistory` / `filletWithHistory`
11
+ * (`brepkit-kernel/brepkitKernel.ts` 的面演化三员,其余为 `unsupported(...)` 桩)。
12
+ *
13
+ * 未知 / 未装配引擎(含测试替身 `brep_mock`)→ 一律 `false`:拿不到事实时按"没有"处理,
14
+ * 让 op 走裸方法轨(几何仍正确,只是不产面演化),绝不假设引擎有历史。
15
+ *
16
+ * 零重依赖:只读运行期装配配置(引擎 id),不 import 任何平台内核。
17
+ */
18
+ import { getBackends } from '../../runtime-state.js';
19
+ /**
20
+ * 各引擎**原生提供**的面演化核函数(常量表,非运行时探测)。
21
+ *
22
+ * 为什么是常量而不是"探测实现面":所有适配器的 `*WithHistory` 成员都在 API 对象里
23
+ * **有函数**——没实现的也放一个 `unsupported(...)` 桩,故
24
+ * `typeof api.xWithHistory === 'function'` 恒为真,探测不出"真有还是桩"。
25
+ */
26
+ const NATIVE_HISTORY_BY_ENGINE = {
27
+ occt: [
28
+ 'fuseWithHistory',
29
+ 'cutWithHistory',
30
+ 'intersectWithHistory',
31
+ 'filletWithHistory',
32
+ 'chamferWithHistory',
33
+ 'translateWithHistory',
34
+ 'rotateWithHistory',
35
+ 'mirrorWithHistory',
36
+ 'scaleWithHistory',
37
+ 'shellWithHistory',
38
+ 'offsetWithHistory',
39
+ 'thickenWithHistory',
40
+ ],
41
+ brepkit: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],
42
+ };
43
+ /**
44
+ * 当前 BREP 引擎是否原生实现该 `*WithHistory`(静态;读引擎身份,不读任何声明表)。
45
+ *
46
+ * @param kind - the evolution kernel function name to test.
47
+ * @returns true when the current engine natively implements it; false otherwise
48
+ * (including when no engine is assembled / the engine is unknown).
49
+ */
50
+ export function hasNativeHistory(kind) {
51
+ const engineId = getBackends().config.brepEngineId;
52
+ return engineId != null && (NATIVE_HISTORY_BY_ENGINE[engineId]?.includes(kind) ?? false);
53
+ }
54
+ //# sourceMappingURL=native-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-history.js","sourceRoot":"","sources":["../../../src/brep/engine/native-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAGjD;;;;;;GAMG;AACH,MAAM,wBAAwB,GAA2D;IACvF,IAAI,EAAE;QACJ,iBAAiB;QACjB,gBAAgB;QAChB,sBAAsB;QACtB,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,mBAAmB;QACnB,mBAAmB;QACnB,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,oBAAoB;KACrB;IACD,OAAO,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;CACpE,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuB;IACtD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAA;IAClD,OAAO,QAAQ,IAAI,IAAI,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAA;AAC1F,CAAC","sourcesContent":["/**\n * native-history — 引擎是否原生提供某个 `*WithHistory` 面演化核函数。\n *\n * op 实现体内选实现轨(调 `*WithHistory` 还是裸方法)时读这里:这是一条**引擎事实**,\n * 与 op 无关,因此不挂在 op 声明上,也没有任何\"能力表\"参与——「引擎能不能做这件事」\n * 由引擎身份静态决定,写代码的时刻就是常量。\n *\n * 两个真实引擎的事实(本模块是唯一归属,别处不再声明):\n * - `occt`:12 个 `*WithHistory` 全有(`occt-wasm@5.6.0` 原生导出)。\n * - `brepkit`:只有 `fuseWithHistory` / `cutWithHistory` / `filletWithHistory`\n * (`brepkit-kernel/brepkitKernel.ts` 的面演化三员,其余为 `unsupported(...)` 桩)。\n *\n * 未知 / 未装配引擎(含测试替身 `brep_mock`)→ 一律 `false`:拿不到事实时按\"没有\"处理,\n * 让 op 走裸方法轨(几何仍正确,只是不产面演化),绝不假设引擎有历史。\n *\n * 零重依赖:只读运行期装配配置(引擎 id),不 import 任何平台内核。\n */\n\nimport { getBackends } from '../../runtime-state'\nimport type { BrepEvolutionKind } from './types'\n\n/**\n * 各引擎**原生提供**的面演化核函数(常量表,非运行时探测)。\n *\n * 为什么是常量而不是\"探测实现面\":所有适配器的 `*WithHistory` 成员都在 API 对象里\n * **有函数**——没实现的也放一个 `unsupported(...)` 桩,故\n * `typeof api.xWithHistory === 'function'` 恒为真,探测不出\"真有还是桩\"。\n */\nconst NATIVE_HISTORY_BY_ENGINE: Readonly<Record<string, readonly BrepEvolutionKind[]>> = {\n occt: [\n 'fuseWithHistory',\n 'cutWithHistory',\n 'intersectWithHistory',\n 'filletWithHistory',\n 'chamferWithHistory',\n 'translateWithHistory',\n 'rotateWithHistory',\n 'mirrorWithHistory',\n 'scaleWithHistory',\n 'shellWithHistory',\n 'offsetWithHistory',\n 'thickenWithHistory',\n ],\n brepkit: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n}\n\n/**\n * 当前 BREP 引擎是否原生实现该 `*WithHistory`(静态;读引擎身份,不读任何声明表)。\n *\n * @param kind - the evolution kernel function name to test.\n * @returns true when the current engine natively implements it; false otherwise\n * (including when no engine is assembled / the engine is unknown).\n */\nexport function hasNativeHistory(kind: BrepEvolutionKind): boolean {\n const engineId = getBackends().config.brepEngineId\n return engineId != null && (NATIVE_HISTORY_BY_ENGINE[engineId]?.includes(kind) ?? false)\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * engine/primitives — BREP 引擎契约面(port 面,L1 核心面)
3
3
  *
4
- * ⚠️ 2026-09-24 契约面收窄(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md
5
- * §Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的
4
+ * ⚠️ 2026-09-24 契约面收窄(Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的
6
5
  * 方法**(occt 与 brepkit 双方语义可对齐的交集面,最大化口径)。判据唯一真源:
7
6
  * `api/surface/engine-method-map.json`(status ∈ {aligned, dialect} 的条目)。
8
7
  *
@@ -140,7 +139,7 @@ export interface BrepEngineApi {
140
139
  isSame(a: BrepHandle, b: BrepHandle): boolean;
141
140
  isSolid(shape: BrepHandle): boolean;
142
141
  /** 形状类型名('SOLID' / 'FACE' / 'EDGE' / 'WIRE' / 'COMPOUND' 等;引擎方言归一)。
143
- * 库桥(l3-bridge)构造借入视图时读;brepkit/mock 按能力防御返回。 */
142
+ * 库桥(l3-bridge)收编产物时判类型读;brepkit/mock 按能力防御返回。 */
144
143
  shapeType(shape: BrepHandle): string;
145
144
  /** 方向标识(与内核 ShapeOrientation 同构:'forward'|'reversed'|'internal'|'external')。 */
146
145
  shapeOrientation(shape: BrepHandle): string;
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/primitives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/primitives.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * engine/primitives — BREP 引擎契约面(port 面,L1 核心面)
3
3
  *
4
- * ⚠️ 2026-09-24 契约面收窄(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md
5
- * §Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的
4
+ * ⚠️ 2026-09-24 契约面收窄(Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的
6
5
  * 方法**(occt 与 brepkit 双方语义可对齐的交集面,最大化口径)。判据唯一真源:
7
6
  * `api/surface/engine-method-map.json`(status ∈ {aligned, dialect} 的条目)。
8
7
  *
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/brep/engine/primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * engine/primitives — BREP 引擎契约面(port 面,L1 核心面)\n *\n * ⚠️ 2026-09-24 契约面收窄(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md\n * §Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的\n * 方法**(occt 与 brepkit 双方语义可对齐的交集面,最大化口径)。判据唯一真源:\n * `api/surface/engine-method-map.json`(status ∈ {aligned, dialect} 的条目)。\n *\n * - 移出 L1 的方法(occt-only 语义)不再有中立名,平台代码直接走原生面:\n * `getOcctKernel()` / `getBrepkitKernel()`(D3),op 侧用 `engines: ['occt']` 声明(D11)。\n * - 禁止任何 `as BrepEngineApi` 跨层断言(守卫见 §5 守卫清单)。\n * - 三个适配器的编译期断言 `_Assert*Api` 由此全部获得真校验力。\n */\n\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 './types'\n\n/**\n * BREP 引擎原语契约(L1 核心面)。所有句柄参数/返回值均为 BrepHandle(不透明值,§6.3)。\n * 引擎实现(occt/brepkit 适配器)负责内部句柄形态与 BrepHandle 的转换,以及方言消化\n * (如 brepkit surfaceArea → getSurfaceArea,与 matrix 方言的 toKernelMatrix 同构)。\n */\nexport interface BrepEngineApi {\n // ── 生命周期 ──\n /** 手工释放句柄(GC 型引擎实现为 no-op)。 */\n release(shape: BrepHandle): void\n /** 释放内核/句柄(引擎级释放语义;brepkit GC 型 no-op)。 */\n dispose(shape?: BrepHandle): void\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle\n makeCylinder(radius: number, height: number): BrepHandle\n makeSphere(radius: number): BrepHandle\n makeCone(r1: number, r2: number, height: number): BrepHandle\n makeRectangle(width: number, height: number): BrepHandle\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle\n makeVertex(x: number, y: number, z: number): BrepHandle\n\n // ── 造型运算 ──\n /**\n * 挤出:`{dx,dy,dz}` 为挤出向量(occt 方言)。\n * brepkit 方言(方向+距离、只吃 face)由适配器归一:`len = |v|`、`dir = v/len`;\n * `len === 0` 抛错;输入不是 face → 报错(显式失败,不静默降级,§3.6-1)。\n */\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle\n /** 旋转挤出(绕过 center、方向 direction 的轴,angle 为度;输入需 face,brepkit 方言断言同 extrude)。 */\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle\n /** 缝合(tolerance 可选)。 */\n sew(shapes: BrepHandle[], tolerance?: number): BrepHandle\n /** 缝合并固化成实体。 */\n sewAndSolidify(faces: BrepHandle[], tolerance?: number): BrepHandle\n /** 抽壳(facesToRemove 移除面、thickness 壁厚、tolerance 容差)。 */\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, tolerance: number): BrepHandle\n /** 点集凸包(tolerance 为容差)。 */\n hullFromPoints(points: BrepVec3[], tolerance: number): BrepHandle\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle\n cut(a: BrepHandle, b: BrepHandle): BrepHandle\n common(a: BrepHandle, b: BrepHandle): BrepHandle\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle\n fuseAll(shapes: BrepHandle[]): BrepHandle\n /**\n * 平面求交线:solid 与「过 point、法向 normal 的无限平面」的交线(§3.6-2 新中立名)。\n * occt 适配器:大平面 face 作 tool 经原生 section 达成(Phase 1 探针 A 实测可达)。\n * 返回交线/顶点句柄数组(brepkit 返回 Uint32Array 句柄组,occt compound downcast 展开)。\n */\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[]\n /**\n * 平面二分:把 solid 沿「过 point、法向 normal 的无限平面」切成两半(§3.6-2 新中立名)。\n * occt 适配器:大平面 face 作 tool 经原生 splitter 达成(Phase 1 探针 A 实测,solidCount=2)。\n * 法向正侧 = `positive`(§3.7 返回口径)。\n */\n splitByPlane(\n shape: BrepHandle,\n point: BrepVec3,\n normal: BrepVec3,\n ): { positive: BrepHandle; negative: BrepHandle }\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n /** 等距倒角:逐边 `BRepFilletAPI_MakeChamfer::Add(distance, E)`。 */\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle\n /**\n * 距角倒角:`AddDA(distance, angleDeg, E, F)`(brepkit 原生 chamferDistanceAngle,方言映射)。\n * ⚠️ F 由内核自选(外层第一个含该边的面),调用方不可指定。\n */\n chamferDistAngle(\n solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number,\n ): BrepHandle\n /** 等半径圆角:`BRepFilletAPI_MakeFillet::Add(radius, E)`。 */\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle\n /** 变半径圆角:单边 `Add(startRadius, endRadius, E)`(brepkit 吃 json 描述,适配器消化)。 */\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle\n /**\n * 等半径圆角(带面演化):modified/generated/deleted 用面 hash 编码(§7.5)。\n * brepkit 原生 filletWithEvolution,适配器映射。\n */\n filletWithHistory(\n solid: BrepHandle,\n edges: BrepHandle[],\n radius: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n\n // ── 变换 ──\n // 矩阵口径(唯一权威):matrix 参数是 **3×4 行主序、12 个 double**——\n // [r00,r01,r02,tx, r10,r11,r12,ty, r20,r21,r22,tz],与 brep/brep-ops.ts 的\n // matrixToArray()(THREE.Matrix4 column-major → 行主序 3×4)产出同构。\n // 各引擎方言不同(如 brepkit transformSolid 吃 4×4 行主序 16 元素)时,\n // 由该引擎适配层内部转换(brepkit-kernel/brepkitKernel.ts 的 toKernelMatrix\n // 唯一转换点),禁止要求调用方适配引擎方言。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle\n /** 3×4 行主序 12 元素矩阵(口径见上方\"变换\"节注释)。 */\n transform(shape: BrepHandle, matrix: number[]): BrepHandle\n /** 带位置矩阵放置(3×4 行主序 12 元素,口径见变换族注释)。 */\n located(shape: BrepHandle, matrix: number[]): BrepHandle\n locate(shape: BrepHandle, matrix: number[]): BrepHandle\n /** 一般变换(3×4 行主序 12 元素)。 */\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle\n copy(shape: BrepHandle): BrepHandle\n /** 复制句柄(独立引用计数)。 */\n copyShape(shape: BrepHandle): BrepHandle\n /** 组合两个 3×4 行主序变换矩阵(12 元素)。 */\n composeTransform(m1: number[], m2: number[]): number[]\n /** 镜像(过 point、法向 normal 的平面)。 */\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle\n\n // ── 阵列 ──\n // 口径:两内核的 pattern 内核函数都返回 compound(含全部副本),适配器负责拆成数组。\n /** 线性阵列:沿 direction 复制 count 份(含原位置),返回各份副本句柄数组。 */\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[]\n /** 环形阵列:绕 axis 均分 angleStep 每份,返回各份副本句柄数组。 */\n circularPattern(\n shape: BrepHandle,\n center: BrepVec3,\n axis: BrepVec3,\n angleStep: number,\n count: number,\n ): BrepHandle[]\n /** 二维栅格阵列:沿两方向复制 countX×countY 份,返回 compound 单句柄。 */\n gridPattern(\n shape: BrepHandle,\n directionX: BrepVec3,\n directionY: BrepVec3,\n spacingX: number,\n spacingY: number,\n countX: number,\n countY: number,\n ): BrepHandle\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle\n /**\n * Exact NURBS edge from raw control data — the write-side counterpart of\n * `getNurbsCurveData`, so a rational / multi-span curve survives a round trip\n * instead of being tessellated.\n *\n * `poles` is flat `[x,y,z, …]`; `knots`/`multiplicities` are parallel (the\n * expanded knot vector is `knots[i]` repeated `multiplicities[i]` times). The\n * built edge spans the WHOLE curve — to reproduce an edge that is a sub-range\n * of its basis curve, trim it with `curveSplit`.\n */\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic?: boolean,\n ): BrepHandle\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle\n /**\n * Split an edge at an interior parameter into its two sub-edges, in order.\n * The parameter must be STRICTLY inside the edge's domain — splitting at an\n * end is rejected by the kernel rather than returning a degenerate pair.\n */\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle]\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle\n makeFace(wire: BrepHandle): BrepHandle\n makeCompound(shapes: BrepHandle[]): BrepHandle\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle\n /** 三角面(三顶点)。 */\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle\n\n // ── 三角化(BREP→mesh 唯一出口,断链物化依赖,硬必需) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData\n\n // ── 拓扑查询 ──\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[]\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[]\n hashCode(shape: BrepHandle, upperBound: number): number\n isSame(a: BrepHandle, b: BrepHandle): boolean\n isSolid(shape: BrepHandle): boolean\n /** 形状类型名('SOLID' / 'FACE' / 'EDGE' / 'WIRE' / 'COMPOUND' 等;引擎方言归一)。\n * 库桥(l3-bridge)构造借入视图时读;brepkit/mock 按能力防御返回。 */\n shapeType(shape: BrepHandle): string\n /** 方向标识(与内核 ShapeOrientation 同构:'forward'|'reversed'|'internal'|'external')。 */\n shapeOrientation(shape: BrepHandle): string\n /** 边→面关联(brepkit 原生同名)。 */\n edgeToFaceMap(shape: BrepHandle): unknown\n /** 面的相邻面(同一 solid 内与 face 共享边的面;两内核原生都吃 (shape, face))。 */\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[]\n /** 两面共享的边。 */\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[]\n\n // ── 几何求值 ──\n /** 曲线类型标识(与内核 CurveKind 同构的中立字符串形态)。 */\n curveType(edge: BrepHandle): string\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3\n curveTangent(edge: BrepHandle, param: number): BrepVec3\n curveParameters(edge: BrepHandle): BrepCurveParameters\n curveIsClosed(edge: BrepHandle): boolean\n curveLength(edge: BrepHandle): number\n /** 曲面类型标识(与内核 SurfaceKind 同构的中立字符串形态)。 */\n surfaceType(face: BrepHandle): string\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3\n uvBounds(face: BrepHandle): BrepUvBounds\n /** 曲面质心。 */\n surfaceCenterOfMass(face: BrepHandle): BrepVec3\n /** Phase 1 钉死返回形态(topologyExt 仅读 radius)。 */\n getFaceCylinderData(face: BrepHandle): { radius: number } | null\n /**\n * NURBS control data of the edge's basis curve, or `null` for the analytic\n * kinds (line / circle / ellipse / hyperbola / parabola).\n *\n * ⚠️ Two measured behaviours (2026-09-29) that the name does not imply:\n * · it THROWS — it is not a nullable getter — when the edge is not a B-spline\n * or Bézier, so callers must guard, not just null-check;\n * · it returns the WHOLE basis curve, while `curveParameters` returns the\n * EDGE's trim range on it; rebuilding without the trim is not faithful.\n */\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle\n\n /** 去特征(移除面集合)。 */\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle\n /** 拔模。 */\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle\n removeHolesFromFace(face: BrepHandle): BrepHandle\n reverseShape(shape: BrepHandle): BrepHandle\n /** 边投影(方言参数由适配器消化)。 */\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown\n\n // ── 测量(D5/D6:核心面只进双方都有的;linearCenterOfMass/inertia/distance 是 L2 平台面)──\n getBoundingBox(shape: BrepHandle, useTriangulation?: boolean): BrepBoundingBox\n getVolume(shape: BrepHandle): number\n getCenterOfMass(shape: BrepHandle): BrepVec3\n /** 表面积(D6:面积进 L1;brepkit 原生 surfaceArea/faceArea,适配器映射)。 */\n getSurfaceArea(shape: BrepHandle): number\n /** 长度(D6:进 L1;brepkit 原生 length/wireLength,wire 与 edge 入参差异由适配器判别)。 */\n getLength(shape: BrepHandle): number\n\n // ── 校验与修复 ──\n isValid(shape: BrepHandle): boolean\n unifySameDomain(shape: BrepHandle): BrepHandle\n healSolid(shape: BrepHandle, tolerance?: number): BrepHandle\n fixShape(shape: BrepHandle): BrepHandle\n fixFaceOrientations(shape: BrepHandle): BrepHandle\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle\n exportStep(shape: BrepHandle): string\n importStl(data: string | ArrayBuffer): BrepHandle\n fromBREP(data: string): BrepHandle\n\n // ── 面演化(仅双方都有原生/可对齐实现的三员,D1)──\n cutWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n fuseWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n intersectWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n}\n\n/**\n * 编译期完整性断言(D1):实现类型必须逐成员满足 L1 核心面。\n * 三处守卫 `_AssertOcctApi` / `_AssertBrepkitApi` / `_AssertBrepMockApi` 同时生效。\n */\nexport type AssertSatisfiesBrepEngineApi<Impl extends BrepEngineApi> = Impl\n"]}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/brep/engine/primitives.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG","sourcesContent":["/**\n * engine/primitives — BREP 引擎契约面(port 面,L1 核心面)\n *\n * ⚠️ 2026-09-24 契约面收窄(Phase 2 / D1 / D9 / D10):`BrepEngineApi` 的语义 = **所有已注册 BREP 引擎都真实现的\n * 方法**(occt 与 brepkit 双方语义可对齐的交集面,最大化口径)。判据唯一真源:\n * `api/surface/engine-method-map.json`(status ∈ {aligned, dialect} 的条目)。\n *\n * - 移出 L1 的方法(occt-only 语义)不再有中立名,平台代码直接走原生面:\n * `getOcctKernel()` / `getBrepkitKernel()`(D3),op 侧用 `engines: ['occt']` 声明(D11)。\n * - 禁止任何 `as BrepEngineApi` 跨层断言(守卫见 §5 守卫清单)。\n * - 三个适配器的编译期断言 `_Assert*Api` 由此全部获得真校验力。\n */\n\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 './types'\n\n/**\n * BREP 引擎原语契约(L1 核心面)。所有句柄参数/返回值均为 BrepHandle(不透明值,§6.3)。\n * 引擎实现(occt/brepkit 适配器)负责内部句柄形态与 BrepHandle 的转换,以及方言消化\n * (如 brepkit surfaceArea → getSurfaceArea,与 matrix 方言的 toKernelMatrix 同构)。\n */\nexport interface BrepEngineApi {\n // ── 生命周期 ──\n /** 手工释放句柄(GC 型引擎实现为 no-op)。 */\n release(shape: BrepHandle): void\n /** 释放内核/句柄(引擎级释放语义;brepkit GC 型 no-op)。 */\n dispose(shape?: BrepHandle): void\n\n // ── 实体图元 ──\n makeBox(dx: number, dy: number, dz: number): BrepHandle\n makeBoxFromCorners(corner1: BrepVec3, corner2: BrepVec3): BrepHandle\n makeCylinder(radius: number, height: number): BrepHandle\n makeSphere(radius: number): BrepHandle\n makeCone(r1: number, r2: number, height: number): BrepHandle\n makeRectangle(width: number, height: number): BrepHandle\n makeEllipsoid(rx: number, ry: number, rz: number): BrepHandle\n makeTorus(majorRadius: number, minorRadius: number): BrepHandle\n makeVertex(x: number, y: number, z: number): BrepHandle\n\n // ── 造型运算 ──\n /**\n * 挤出:`{dx,dy,dz}` 为挤出向量(occt 方言)。\n * brepkit 方言(方向+距离、只吃 face)由适配器归一:`len = |v|`、`dir = v/len`;\n * `len === 0` 抛错;输入不是 face → 报错(显式失败,不静默降级,§3.6-1)。\n */\n extrude(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle\n /** 旋转挤出(绕过 center、方向 direction 的轴,angle 为度;输入需 face,brepkit 方言断言同 extrude)。 */\n revolveVec(shape: BrepHandle, center: BrepVec3, direction: BrepVec3, angleDeg: number): BrepHandle\n /** 缝合(tolerance 可选)。 */\n sew(shapes: BrepHandle[], tolerance?: number): BrepHandle\n /** 缝合并固化成实体。 */\n sewAndSolidify(faces: BrepHandle[], tolerance?: number): BrepHandle\n /** 抽壳(facesToRemove 移除面、thickness 壁厚、tolerance 容差)。 */\n shell(solid: BrepHandle, facesToRemove: BrepHandle[], thickness: number, tolerance: number): BrepHandle\n /** 点集凸包(tolerance 为容差)。 */\n hullFromPoints(points: BrepVec3[], tolerance: number): BrepHandle\n\n // ── 布尔与分割 ──\n fuse(a: BrepHandle, b: BrepHandle): BrepHandle\n cut(a: BrepHandle, b: BrepHandle): BrepHandle\n common(a: BrepHandle, b: BrepHandle): BrepHandle\n intersect(a: BrepHandle, b: BrepHandle): BrepHandle\n fuseAll(shapes: BrepHandle[]): BrepHandle\n /**\n * 平面求交线:solid 与「过 point、法向 normal 的无限平面」的交线(§3.6-2 新中立名)。\n * occt 适配器:大平面 face 作 tool 经原生 section 达成(Phase 1 探针 A 实测可达)。\n * 返回交线/顶点句柄数组(brepkit 返回 Uint32Array 句柄组,occt compound downcast 展开)。\n */\n sectionByPlane(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle[]\n /**\n * 平面二分:把 solid 沿「过 point、法向 normal 的无限平面」切成两半(§3.6-2 新中立名)。\n * occt 适配器:大平面 face 作 tool 经原生 splitter 达成(Phase 1 探针 A 实测,solidCount=2)。\n * 法向正侧 = `positive`(§3.7 返回口径)。\n */\n splitByPlane(\n shape: BrepHandle,\n point: BrepVec3,\n normal: BrepVec3,\n ): { positive: BrepHandle; negative: BrepHandle }\n\n // ── 倒角与圆角(Q7:只对齐等距 + 距角两种粒度)──\n /** 等距倒角:逐边 `BRepFilletAPI_MakeChamfer::Add(distance, E)`。 */\n chamfer(solid: BrepHandle, edges: BrepHandle[], distance: number): BrepHandle\n /**\n * 距角倒角:`AddDA(distance, angleDeg, E, F)`(brepkit 原生 chamferDistanceAngle,方言映射)。\n * ⚠️ F 由内核自选(外层第一个含该边的面),调用方不可指定。\n */\n chamferDistAngle(\n solid: BrepHandle, edges: BrepHandle[], distance: number, angleDeg: number,\n ): BrepHandle\n /** 等半径圆角:`BRepFilletAPI_MakeFillet::Add(radius, E)`。 */\n fillet(solid: BrepHandle, edges: BrepHandle[], radius: number): BrepHandle\n /** 变半径圆角:单边 `Add(startRadius, endRadius, E)`(brepkit 吃 json 描述,适配器消化)。 */\n filletVariable(solid: BrepHandle, edge: BrepHandle, startRadius: number, endRadius: number): BrepHandle\n /**\n * 等半径圆角(带面演化):modified/generated/deleted 用面 hash 编码(§7.5)。\n * brepkit 原生 filletWithEvolution,适配器映射。\n */\n filletWithHistory(\n solid: BrepHandle,\n edges: BrepHandle[],\n radius: number,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n\n // ── 变换 ──\n // 矩阵口径(唯一权威):matrix 参数是 **3×4 行主序、12 个 double**——\n // [r00,r01,r02,tx, r10,r11,r12,ty, r20,r21,r22,tz],与 brep/brep-ops.ts 的\n // matrixToArray()(THREE.Matrix4 column-major → 行主序 3×4)产出同构。\n // 各引擎方言不同(如 brepkit transformSolid 吃 4×4 行主序 16 元素)时,\n // 由该引擎适配层内部转换(brepkit-kernel/brepkitKernel.ts 的 toKernelMatrix\n // 唯一转换点),禁止要求调用方适配引擎方言。\n translate(shape: BrepHandle, dx: number, dy: number, dz: number): BrepHandle\n scale(shape: BrepHandle, center: BrepVec3, factor: number): BrepHandle\n /** 3×4 行主序 12 元素矩阵(口径见上方\"变换\"节注释)。 */\n transform(shape: BrepHandle, matrix: number[]): BrepHandle\n /** 带位置矩阵放置(3×4 行主序 12 元素,口径见变换族注释)。 */\n located(shape: BrepHandle, matrix: number[]): BrepHandle\n locate(shape: BrepHandle, matrix: number[]): BrepHandle\n /** 一般变换(3×4 行主序 12 元素)。 */\n generalTransform(shape: BrepHandle, matrix: number[]): BrepHandle\n copy(shape: BrepHandle): BrepHandle\n /** 复制句柄(独立引用计数)。 */\n copyShape(shape: BrepHandle): BrepHandle\n /** 组合两个 3×4 行主序变换矩阵(12 元素)。 */\n composeTransform(m1: number[], m2: number[]): number[]\n /** 镜像(过 point、法向 normal 的平面)。 */\n mirror(shape: BrepHandle, point: BrepVec3, normal: BrepVec3): BrepHandle\n\n // ── 阵列 ──\n // 口径:两内核的 pattern 内核函数都返回 compound(含全部副本),适配器负责拆成数组。\n /** 线性阵列:沿 direction 复制 count 份(含原位置),返回各份副本句柄数组。 */\n linearPattern(shape: BrepHandle, direction: BrepVec3, spacing: number, count: number): BrepHandle[]\n /** 环形阵列:绕 axis 均分 angleStep 每份,返回各份副本句柄数组。 */\n circularPattern(\n shape: BrepHandle,\n center: BrepVec3,\n axis: BrepVec3,\n angleStep: number,\n count: number,\n ): BrepHandle[]\n /** 二维栅格阵列:沿两方向复制 countX×countY 份,返回 compound 单句柄。 */\n gridPattern(\n shape: BrepHandle,\n directionX: BrepVec3,\n directionY: BrepVec3,\n spacingX: number,\n spacingY: number,\n countX: number,\n countY: number,\n ): BrepHandle\n\n // ── 曲线构造 ──\n makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle\n makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle\n makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle\n /**\n * Exact NURBS edge from raw control data — the write-side counterpart of\n * `getNurbsCurveData`, so a rational / multi-span curve survives a round trip\n * instead of being tessellated.\n *\n * `poles` is flat `[x,y,z, …]`; `knots`/`multiplicities` are parallel (the\n * expanded knot vector is `knots[i]` repeated `multiplicities[i]` times). The\n * built edge spans the WHOLE curve — to reproduce an edge that is a sub-range\n * of its basis curve, trim it with `curveSplit`.\n */\n makeBSplineEdge(\n poles: number[],\n weights: number[],\n knots: number[],\n multiplicities: number[],\n degree: number,\n periodic?: boolean,\n ): BrepHandle\n makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle\n /**\n * Split an edge at an interior parameter into its two sub-edges, in order.\n * The parameter must be STRICTLY inside the edge's domain — splitting at an\n * end is rejected by the kernel rather than returning a degenerate pair.\n */\n curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle]\n\n // ── 拓扑构造 ──\n makeWire(edges: BrepHandle[]): BrepHandle\n makeFace(wire: BrepHandle): BrepHandle\n makeCompound(shapes: BrepHandle[]): BrepHandle\n addHolesInFace(face: BrepHandle, holeWires: BrepHandle[]): BrepHandle\n /** 三角面(三顶点)。 */\n buildTriFace(a: BrepVec3, b: BrepVec3, c: BrepVec3): BrepHandle\n\n // ── 三角化(BREP→mesh 唯一出口,断链物化依赖,硬必需) ──\n meshShape(shape: BrepHandle, options?: BrepTessellateOptions): BrepMeshResult\n wireframe(shape: BrepHandle, deflection?: number): BrepEdgeData\n\n // ── 拓扑查询 ──\n getSubShapes(shape: BrepHandle, type: BrepSubShapeType): BrepHandle[]\n subShapeHashes(shape: BrepHandle, type: BrepSubShapeType, hashUpperBound: number): number[]\n hashCode(shape: BrepHandle, upperBound: number): number\n isSame(a: BrepHandle, b: BrepHandle): boolean\n isSolid(shape: BrepHandle): boolean\n /** 形状类型名('SOLID' / 'FACE' / 'EDGE' / 'WIRE' / 'COMPOUND' 等;引擎方言归一)。\n * 库桥(l3-bridge)收编产物时判类型读;brepkit/mock 按能力防御返回。 */\n shapeType(shape: BrepHandle): string\n /** 方向标识(与内核 ShapeOrientation 同构:'forward'|'reversed'|'internal'|'external')。 */\n shapeOrientation(shape: BrepHandle): string\n /** 边→面关联(brepkit 原生同名)。 */\n edgeToFaceMap(shape: BrepHandle): unknown\n /** 面的相邻面(同一 solid 内与 face 共享边的面;两内核原生都吃 (shape, face))。 */\n adjacentFaces(shape: BrepHandle, face: BrepHandle): BrepHandle[]\n /** 两面共享的边。 */\n sharedEdges(a: BrepHandle, b: BrepHandle): BrepHandle[]\n\n // ── 几何求值 ──\n /** 曲线类型标识(与内核 CurveKind 同构的中立字符串形态)。 */\n curveType(edge: BrepHandle): string\n curvePointAtParam(edge: BrepHandle, param: number): BrepVec3\n curveTangent(edge: BrepHandle, param: number): BrepVec3\n curveParameters(edge: BrepHandle): BrepCurveParameters\n curveIsClosed(edge: BrepHandle): boolean\n curveLength(edge: BrepHandle): number\n /** 曲面类型标识(与内核 SurfaceKind 同构的中立字符串形态)。 */\n surfaceType(face: BrepHandle): string\n surfaceNormal(face: BrepHandle, u: number, v: number): BrepVec3\n pointOnSurface(face: BrepHandle, u: number, v: number): BrepVec3\n uvBounds(face: BrepHandle): BrepUvBounds\n /** 曲面质心。 */\n surfaceCenterOfMass(face: BrepHandle): BrepVec3\n /** Phase 1 钉死返回形态(topologyExt 仅读 radius)。 */\n getFaceCylinderData(face: BrepHandle): { radius: number } | null\n /**\n * NURBS control data of the edge's basis curve, or `null` for the analytic\n * kinds (line / circle / ellipse / hyperbola / parabola).\n *\n * ⚠️ Two measured behaviours (2026-09-29) that the name does not imply:\n * · it THROWS — it is not a nullable getter — when the edge is not a B-spline\n * or Bézier, so callers must guard, not just null-check;\n * · it returns the WHOLE basis curve, while `curveParameters` returns the\n * EDGE's trim range on it; rebuilding without the trim is not faithful.\n */\n getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null\n interpolatePoints(points: BrepVec3[], degree: number): BrepHandle\n\n /** 去特征(移除面集合)。 */\n defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle\n /** 拔模。 */\n draft(shape: BrepHandle, faces: BrepHandle[], pull: BrepVec3, neutral: BrepVec3, angleDeg: number): BrepHandle\n removeHolesFromFace(face: BrepHandle): BrepHandle\n reverseShape(shape: BrepHandle): BrepHandle\n /** 边投影(方言参数由适配器消化)。 */\n projectEdges(shape: BrepHandle, origin: BrepVec3, direction: BrepVec3, xAxis: BrepVec3, hiddenLines: boolean, deflection: number): unknown\n\n // ── 测量(D5/D6:核心面只进双方都有的;linearCenterOfMass/inertia/distance 是 L2 平台面)──\n getBoundingBox(shape: BrepHandle, useTriangulation?: boolean): BrepBoundingBox\n getVolume(shape: BrepHandle): number\n getCenterOfMass(shape: BrepHandle): BrepVec3\n /** 表面积(D6:面积进 L1;brepkit 原生 surfaceArea/faceArea,适配器映射)。 */\n getSurfaceArea(shape: BrepHandle): number\n /** 长度(D6:进 L1;brepkit 原生 length/wireLength,wire 与 edge 入参差异由适配器判别)。 */\n getLength(shape: BrepHandle): number\n\n // ── 校验与修复 ──\n isValid(shape: BrepHandle): boolean\n unifySameDomain(shape: BrepHandle): BrepHandle\n healSolid(shape: BrepHandle, tolerance?: number): BrepHandle\n fixShape(shape: BrepHandle): BrepHandle\n fixFaceOrientations(shape: BrepHandle): BrepHandle\n removeDegenerateEdges(shape: BrepHandle, tolerance?: number): BrepHandle\n\n // ── IO ──\n importStep(data: string | ArrayBuffer): BrepHandle\n exportStep(shape: BrepHandle): string\n importStl(data: string | ArrayBuffer): BrepHandle\n fromBREP(data: string): BrepHandle\n\n // ── 面演化(仅双方都有原生/可对齐实现的三员,D1)──\n cutWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n fuseWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n intersectWithHistory(\n a: BrepHandle,\n b: BrepHandle,\n inputFaceHashes: number[],\n hashUpperBound: number,\n ): BrepEvolutionData\n}\n\n/**\n * 编译期完整性断言(D1):实现类型必须逐成员满足 L1 核心面。\n * 三处守卫 `_AssertOcctApi` / `_AssertBrepkitApi` / `_AssertBrepMockApi` 同时生效。\n */\nexport type AssertSatisfiesBrepEngineApi<Impl extends BrepEngineApi> = Impl\n"]}
@@ -2,7 +2,7 @@
2
2
  * engine/registry — BREP / mesh 双槽位注册表(§6.2,R8 构建时切换)
3
3
  *
4
4
  *
5
- * 与 brepjs 的 registerKernel 同构(首个注册者为默认),但两张表、两套 getter——
5
+ * 首个注册者为默认,但两张表、两套 getter——
6
6
  * 这是 R2(双槽位正交:mesh 引擎与 BREP 引擎独立注册、单独切换)的直接落地。
7
7
  *
8
8
  * BREP 槽以「异步 provider」注册:引擎可能需异步初始化(occt-wasm 加载、
@@ -13,12 +13,10 @@
13
13
  * 装配完成后调用 freezeEngineRegistries() 冻结,冻结后任何注册尝试抛错(E2 验收)。
14
14
  */
15
15
  import type { BrepEngineApi } from './primitives.js';
16
- import type { BrepCapabilities } from './types.js';
17
- /** BREP 引擎实例(槽位 1):原语契约 + 可选能力声明。 */
16
+ /** BREP 引擎实例(槽位 1):原语契约。引擎能做什么由实现本身决定,没有能力声明面。 */
18
17
  export interface BrepEngine {
19
18
  readonly id: string;
20
19
  readonly primitives: BrepEngineApi;
21
- readonly capabilities?: BrepCapabilities;
22
20
  }
23
21
  /** BREP 引擎异步提供者(宿主装配时注册;引擎初始化完成后 resolve)。 */
24
22
  export type BrepEngineProvider = () => Promise<BrepEngine>;
@@ -58,7 +56,7 @@ export declare function registerMeshEngine(id: string, engine: MeshEngine): void
58
56
  */
59
57
  export declare function isMeshEngineRegistered(id: string): boolean;
60
58
  /**
61
- * Whether a default BREP engine is registered (none → mesh mode, equivalent to "no BREP capability").
59
+ * Whether a default BREP engine is registered (none → mesh mode, i.e. no BREP engine at all).
62
60
  * @returns true when a default BREP engine is registered.
63
61
  */
64
62
  export declare function hasBrepEngine(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAA;CACzC;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,eAAe,EAAE,gBAAgB,CAAA;CAC9D;AAWD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CASjF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcpE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAOrD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAKrF;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAOtD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/brep/engine/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAA;CACnC;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,eAAe,EAAE,gBAAgB,CAAA;CAC9D;AAWD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CASjF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CASvE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAcpE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAOrD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAKrF;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAOtD"}
@@ -2,7 +2,7 @@
2
2
  * engine/registry — BREP / mesh 双槽位注册表(§6.2,R8 构建时切换)
3
3
  *
4
4
  *
5
- * 与 brepjs 的 registerKernel 同构(首个注册者为默认),但两张表、两套 getter——
5
+ * 首个注册者为默认,但两张表、两套 getter——
6
6
  * 这是 R2(双槽位正交:mesh 引擎与 BREP 引擎独立注册、单独切换)的直接落地。
7
7
  *
8
8
  * BREP 槽以「异步 provider」注册:引擎可能需异步初始化(occt-wasm 加载、
@@ -67,7 +67,7 @@ export function isMeshEngineRegistered(id) {
67
67
  return meshEngines.has(id);
68
68
  }
69
69
  /**
70
- * Whether a default BREP engine is registered (none → mesh mode, equivalent to "no BREP capability").
70
+ * Whether a default BREP engine is registered (none → mesh mode, i.e. no BREP engine at all).
71
71
  * @returns true when a default BREP engine is registered.
72
72
  */
73
73
  export function hasBrepEngine() {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/brep/engine/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA2BH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA8B,CAAA;AACjE,MAAM,eAAe,GAAG,IAAI,GAAG,EAAsB,CAAA;AACrD,IAAI,aAAa,GAAkB,IAAI,CAAA;AAEvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAA;AACjD,IAAI,aAAa,GAAkB,IAAI,CAAA;AAEvC,IAAI,MAAM,GAAG,KAAK,CAAA;AAElB;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,IAAI,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU,EAAE,QAA4B;IACzE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oEAAoE,EAAE,uBAAuB,CAAC,CAAA;IAChH,CAAC;IACD,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,sBAAsB,CAAC,CAAA;IAC7E,CAAC;IACD,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IACrC,IAAI,aAAa,KAAK,IAAI;QAAE,aAAa,GAAG,EAAE,CAAA;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAU,EAAE,MAAkB;IAC/D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oEAAoE,EAAE,uBAAuB,CAAC,CAAA;IAChH,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,sBAAsB,CAAC,CAAA;IAC7E,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IAC3B,IAAI,aAAa,KAAK,IAAI;QAAE,aAAa,GAAG,EAAE,CAAA;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAU;IAC/C,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,aAAa,KAAK,IAAI,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAU;IAC/C,OAAO,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAW;IAC7C,MAAM,GAAG,GAAG,EAAE,IAAI,aAAa,CAAA;IAC/B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAA;IACtH,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACvC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,kBAAkB,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAA;IAC/B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAW;IACvC,MAAM,GAAG,GAAG,EAAE,IAAI,aAAa,CAAA;IAC/B,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,QAAQ,kBAAkB,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB;IACjC,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,SAAS,CAAA;IAC/C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B;IAC7C,mBAAmB,CAAC,KAAK,EAAE,CAAA;IAC3B,eAAe,CAAC,KAAK,EAAE,CAAA;IACvB,WAAW,CAAC,KAAK,EAAE,CAAA;IACnB,aAAa,GAAG,IAAI,CAAA;IACpB,aAAa,GAAG,IAAI,CAAA;IACpB,MAAM,GAAG,KAAK,CAAA;AAChB,CAAC","sourcesContent":["/**\n * engine/registry — BREP / mesh 双槽位注册表(§6.2,R8 构建时切换)\n *\n *\n * 与 brepjs 的 registerKernel 同构(首个注册者为默认),但两张表、两套 getter——\n * 这是 R2(双槽位正交:mesh 引擎与 BREP 引擎独立注册、单独切换)的直接落地。\n *\n * BREP 槽以「异步 provider」注册:引擎可能需异步初始化(occt-wasm 加载、\n * 外部内核 wasm 下载等),provider 只解析一次,结果缓存。\n *\n * 注册只发生在宿主启动装配期(R8):构建时选定的适配器包在初始化时完成注册,\n * 之后注册表运行期只读。不提供运行时的 unregister / setDefault / 切换 API;\n * 装配完成后调用 freezeEngineRegistries() 冻结,冻结后任何注册尝试抛错(E2 验收)。\n */\n\nimport type { BrepEngineApi } from './primitives'\nimport type { BrepCapabilities } from './types'\n\n/** BREP 引擎实例(槽位 1):原语契约 + 可选能力声明。 */\nexport interface BrepEngine {\n readonly id: string\n readonly primitives: BrepEngineApi\n readonly capabilities?: BrepCapabilities\n}\n\n/** BREP 引擎异步提供者(宿主装配时注册;引擎初始化完成后 resolve)。 */\nexport type BrepEngineProvider = () => Promise<BrepEngine>\n\n/**\n * mesh 引擎实例(槽位 2)——与 BREP 槽完全独立(R2)。\n *\n * `meshSolid`:可选的**网格实体后端**(方案 2026-10-01 §3.3)。提供它的 mesh\n * 引擎才能把网格文件导入成\"网格实体 + 近似拓扑\"。缺省(未提供)= 该 mesh 后端\n * 只做裸网格布尔,`load` 的 mesh 路径保持\"裸网格、无拓扑\"的历史行为。\n */\nexport interface MeshEngine {\n readonly id: string\n readonly meshSolid?: import('../mesh-solid').MeshSolidBackend\n}\n\nconst brepEngineProviders = new Map<string, BrepEngineProvider>()\nconst brepEngineCache = new Map<string, BrepEngine>()\nlet defaultBrepId: string | null = null\n\nconst meshEngines = new Map<string, MeshEngine>()\nlet defaultMeshId: string | null = null\n\nlet frozen = false\n\n/**\n * 冻结注册表:宿主启动装配完成后调用(R8)。\n * 冻结后任何 registerBrepEngine / registerMeshEngine 尝试抛错。\n * 已解析的引擎实例仍可读取(运行期只读,不冻结读取)。\n */\nexport function freezeEngineRegistries(): void {\n frozen = true\n}\n\n/**\n * Register a BREP engine (slot 1). The first registrant automatically becomes the default.\n * @param id - the engine registration id.\n * @param provider - the async provider that resolves the engine instance.\n */\nexport function registerBrepEngine(id: string, provider: BrepEngineProvider): void {\n if (frozen) {\n throw new Error(`[engine/registry] registry frozen — cannot register BREP engine '${id}' after assembly (R8)`)\n }\n if (brepEngineProviders.has(id)) {\n throw new Error(`[engine/registry] BREP engine '${id}' already registered`)\n }\n brepEngineProviders.set(id, provider)\n if (defaultBrepId === null) defaultBrepId = id\n}\n\n/**\n * Register a mesh engine (slot 2). The first registrant automatically becomes the default.\n * @param id - the engine registration id.\n * @param engine - the engine instance to register.\n */\nexport function registerMeshEngine(id: string, engine: MeshEngine): void {\n if (frozen) {\n throw new Error(`[engine/registry] registry frozen — cannot register mesh engine '${id}' after assembly (R8)`)\n }\n if (meshEngines.has(id)) {\n throw new Error(`[engine/registry] mesh engine '${id}' already registered`)\n }\n meshEngines.set(id, engine)\n if (defaultMeshId === null) defaultMeshId = id\n}\n\n/**\n * Whether the given mesh engine is registered (used for idempotent adapter registration).\n * @param id - the mesh engine registration id to look up.\n * @returns true when the engine is registered.\n */\nexport function isMeshEngineRegistered(id: string): boolean {\n return meshEngines.has(id)\n}\n\n/**\n * Whether a default BREP engine is registered (none → mesh mode, equivalent to \"no BREP capability\").\n * @returns true when a default BREP engine is registered.\n */\nexport function hasBrepEngine(): boolean {\n return defaultBrepId !== null\n}\n\n/**\n * Whether the given BREP engine is registered (used for idempotent adapter registration).\n * @param id - the engine registration id to look up.\n * @returns true when the engine is registered.\n */\nexport function isBrepEngineRegistered(id: string): boolean {\n return brepEngineProviders.has(id)\n}\n\n/**\n * Resolve a BREP engine (asynchronously, resolving its provider; throws when not registered).\n * Omitting id uses the default (the first registrant).\n * @param id - optional engine registration id; defaults to the active engine.\n * @returns a Promise resolving to the BREP engine instance.\n */\nexport async function getBrepEngine(id?: string): Promise<BrepEngine> {\n const key = id ?? defaultBrepId\n if (key === null) {\n throw new Error('[engine/registry] no BREP engine registered — call registerBrepEngine() during host assembly (R8)')\n }\n const cached = brepEngineCache.get(key)\n if (cached) return cached\n const provider = brepEngineProviders.get(key)\n if (!provider) {\n throw new Error(`[engine/registry] BREP engine '${key}' not registered`)\n }\n const engine = await provider()\n brepEngineCache.set(key, engine)\n return engine\n}\n\n/**\n * Get a mesh engine (throws when not registered). Omitting id uses the default (the first registrant).\n * @param id - optional engine registration id; defaults to the active engine.\n * @returns the mesh engine instance.\n */\nexport function getMeshEngine(id?: string): MeshEngine {\n const key = id ?? defaultMeshId\n const engine = key === null ? undefined : meshEngines.get(key)\n if (!engine) {\n throw new Error(`[engine/registry] mesh engine '${key ?? '<none>'}' not registered`)\n }\n return engine\n}\n\n/**\n * The current default BREP engine id (null when none is registered).\n * @returns the active BREP engine id or null.\n */\nexport function getActiveBrepEngineId(): string | null {\n return defaultBrepId\n}\n\n/**\n * The current default mesh engine id (null when none is registered).\n * @returns the active mesh engine id or null.\n */\nexport function getActiveMeshEngineId(): string | null {\n return defaultMeshId\n}\n\n/**\n * 已装配的网格实体后端(方案 2026-10-01 §3.3)。\n *\n * 按**注册顺序**返回第一个声明了 `meshSolid` 的 mesh 引擎——不要求它就是\n * \"默认\" mesh 引擎(默认槽位今天无人注册,直接看默认槽会永远拿不到后端)。\n * 一个都没有 → `null`:这是宿主装配事实,不是错误。\n *\n * @returns the assembled mesh-solid backend, or null when none is available.\n */\nexport function getMeshSolidBackend(): import('../mesh-solid').MeshSolidBackend | null {\n for (const engine of meshEngines.values()) {\n if (engine.meshSolid) return engine.meshSolid\n }\n return null\n}\n\n/**\n * 仅测试用:重置注册表状态。\n *\n * R8 不提供运行期的 unregister / setDefault;此函数仅供 registry.test.ts\n * 重置模块级单例,不进入任何公共导出面(index/browser/node/sdk 均不 re-export)。\n */\nexport function __resetEngineRegistriesForTests(): void {\n brepEngineProviders.clear()\n brepEngineCache.clear()\n meshEngines.clear()\n defaultBrepId = null\n defaultMeshId = null\n frozen = false\n}\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/brep/engine/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/registry — BREP / mesh 双槽位注册表(§6.2,R8 构建时切换)\n *\n *\n * 首个注册者为默认,但两张表、两套 getter——\n * 这是 R2(双槽位正交:mesh 引擎与 BREP 引擎独立注册、单独切换)的直接落地。\n *\n * BREP 槽以「异步 provider」注册:引擎可能需异步初始化(occt-wasm 加载、\n * 外部内核 wasm 下载等),provider 只解析一次,结果缓存。\n *\n * 注册只发生在宿主启动装配期(R8):构建时选定的适配器包在初始化时完成注册,\n * 之后注册表运行期只读。不提供运行时的 unregister / setDefault / 切换 API;\n * 装配完成后调用 freezeEngineRegistries() 冻结,冻结后任何注册尝试抛错(E2 验收)。\n */\n\nimport type { BrepEngineApi } from './primitives'\n\n/** BREP 引擎实例(槽位 1):原语契约。引擎能做什么由实现本身决定,没有能力声明面。 */\nexport interface BrepEngine {\n readonly id: string\n readonly primitives: BrepEngineApi\n}\n\n/** BREP 引擎异步提供者(宿主装配时注册;引擎初始化完成后 resolve)。 */\nexport type BrepEngineProvider = () => Promise<BrepEngine>\n\n/**\n * mesh 引擎实例(槽位 2)——与 BREP 槽完全独立(R2)。\n *\n * `meshSolid`:可选的**网格实体后端**(方案 2026-10-01 §3.3)。提供它的 mesh\n * 引擎才能把网格文件导入成\"网格实体 + 近似拓扑\"。缺省(未提供)= 该 mesh 后端\n * 只做裸网格布尔,`load` 的 mesh 路径保持\"裸网格、无拓扑\"的历史行为。\n */\nexport interface MeshEngine {\n readonly id: string\n readonly meshSolid?: import('../mesh-solid').MeshSolidBackend\n}\n\nconst brepEngineProviders = new Map<string, BrepEngineProvider>()\nconst brepEngineCache = new Map<string, BrepEngine>()\nlet defaultBrepId: string | null = null\n\nconst meshEngines = new Map<string, MeshEngine>()\nlet defaultMeshId: string | null = null\n\nlet frozen = false\n\n/**\n * 冻结注册表:宿主启动装配完成后调用(R8)。\n * 冻结后任何 registerBrepEngine / registerMeshEngine 尝试抛错。\n * 已解析的引擎实例仍可读取(运行期只读,不冻结读取)。\n */\nexport function freezeEngineRegistries(): void {\n frozen = true\n}\n\n/**\n * Register a BREP engine (slot 1). The first registrant automatically becomes the default.\n * @param id - the engine registration id.\n * @param provider - the async provider that resolves the engine instance.\n */\nexport function registerBrepEngine(id: string, provider: BrepEngineProvider): void {\n if (frozen) {\n throw new Error(`[engine/registry] registry frozen — cannot register BREP engine '${id}' after assembly (R8)`)\n }\n if (brepEngineProviders.has(id)) {\n throw new Error(`[engine/registry] BREP engine '${id}' already registered`)\n }\n brepEngineProviders.set(id, provider)\n if (defaultBrepId === null) defaultBrepId = id\n}\n\n/**\n * Register a mesh engine (slot 2). The first registrant automatically becomes the default.\n * @param id - the engine registration id.\n * @param engine - the engine instance to register.\n */\nexport function registerMeshEngine(id: string, engine: MeshEngine): void {\n if (frozen) {\n throw new Error(`[engine/registry] registry frozen — cannot register mesh engine '${id}' after assembly (R8)`)\n }\n if (meshEngines.has(id)) {\n throw new Error(`[engine/registry] mesh engine '${id}' already registered`)\n }\n meshEngines.set(id, engine)\n if (defaultMeshId === null) defaultMeshId = id\n}\n\n/**\n * Whether the given mesh engine is registered (used for idempotent adapter registration).\n * @param id - the mesh engine registration id to look up.\n * @returns true when the engine is registered.\n */\nexport function isMeshEngineRegistered(id: string): boolean {\n return meshEngines.has(id)\n}\n\n/**\n * Whether a default BREP engine is registered (none → mesh mode, i.e. no BREP engine at all).\n * @returns true when a default BREP engine is registered.\n */\nexport function hasBrepEngine(): boolean {\n return defaultBrepId !== null\n}\n\n/**\n * Whether the given BREP engine is registered (used for idempotent adapter registration).\n * @param id - the engine registration id to look up.\n * @returns true when the engine is registered.\n */\nexport function isBrepEngineRegistered(id: string): boolean {\n return brepEngineProviders.has(id)\n}\n\n/**\n * Resolve a BREP engine (asynchronously, resolving its provider; throws when not registered).\n * Omitting id uses the default (the first registrant).\n * @param id - optional engine registration id; defaults to the active engine.\n * @returns a Promise resolving to the BREP engine instance.\n */\nexport async function getBrepEngine(id?: string): Promise<BrepEngine> {\n const key = id ?? defaultBrepId\n if (key === null) {\n throw new Error('[engine/registry] no BREP engine registered — call registerBrepEngine() during host assembly (R8)')\n }\n const cached = brepEngineCache.get(key)\n if (cached) return cached\n const provider = brepEngineProviders.get(key)\n if (!provider) {\n throw new Error(`[engine/registry] BREP engine '${key}' not registered`)\n }\n const engine = await provider()\n brepEngineCache.set(key, engine)\n return engine\n}\n\n/**\n * Get a mesh engine (throws when not registered). Omitting id uses the default (the first registrant).\n * @param id - optional engine registration id; defaults to the active engine.\n * @returns the mesh engine instance.\n */\nexport function getMeshEngine(id?: string): MeshEngine {\n const key = id ?? defaultMeshId\n const engine = key === null ? undefined : meshEngines.get(key)\n if (!engine) {\n throw new Error(`[engine/registry] mesh engine '${key ?? '<none>'}' not registered`)\n }\n return engine\n}\n\n/**\n * The current default BREP engine id (null when none is registered).\n * @returns the active BREP engine id or null.\n */\nexport function getActiveBrepEngineId(): string | null {\n return defaultBrepId\n}\n\n/**\n * The current default mesh engine id (null when none is registered).\n * @returns the active mesh engine id or null.\n */\nexport function getActiveMeshEngineId(): string | null {\n return defaultMeshId\n}\n\n/**\n * 已装配的网格实体后端(方案 2026-10-01 §3.3)。\n *\n * 按**注册顺序**返回第一个声明了 `meshSolid` 的 mesh 引擎——不要求它就是\n * \"默认\" mesh 引擎(默认槽位今天无人注册,直接看默认槽会永远拿不到后端)。\n * 一个都没有 → `null`:这是宿主装配事实,不是错误。\n *\n * @returns the assembled mesh-solid backend, or null when none is available.\n */\nexport function getMeshSolidBackend(): import('../mesh-solid').MeshSolidBackend | null {\n for (const engine of meshEngines.values()) {\n if (engine.meshSolid) return engine.meshSolid\n }\n return null\n}\n\n/**\n * 仅测试用:重置注册表状态。\n *\n * R8 不提供运行期的 unregister / setDefault;此函数仅供 registry.test.ts\n * 重置模块级单例,不进入任何公共导出面(index/browser/node/sdk 均不 re-export)。\n */\nexport function __resetEngineRegistriesForTests(): void {\n brepEngineProviders.clear()\n brepEngineCache.clear()\n meshEngines.clear()\n defaultBrepId = null\n defaultMeshId = null\n frozen = false\n}\n"]}