@faicad/faijs 0.22.2 → 0.29.5

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 (488) hide show
  1. package/LICENSE +202 -28
  2. package/dist/api/api-namespace.d.ts +5 -5
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +4 -4
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/appearance.d.ts +138 -0
  7. package/dist/api/appearance.d.ts.map +1 -0
  8. package/dist/api/appearance.js +230 -0
  9. package/dist/api/appearance.js.map +1 -0
  10. package/dist/api/assert.d.ts +2 -2
  11. package/dist/api/assert.js +8 -8
  12. package/dist/api/assert.js.map +1 -1
  13. package/dist/api/asset.d.ts +1 -1
  14. package/dist/api/asset.js +2 -2
  15. package/dist/api/asset.js.map +1 -1
  16. package/dist/api/boolean.d.ts +1 -1
  17. package/dist/api/boolean.d.ts.map +1 -1
  18. package/dist/api/boolean.js +128 -16
  19. package/dist/api/boolean.js.map +1 -1
  20. package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
  21. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
  22. package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
  23. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
  24. package/dist/api/cadquery-selectors/edge.d.ts +40 -0
  25. package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
  26. package/dist/api/cadquery-selectors/edge.js +70 -0
  27. package/dist/api/cadquery-selectors/edge.js.map +1 -0
  28. package/dist/api/cadquery-selectors/entity.d.ts +121 -0
  29. package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
  30. package/dist/api/cadquery-selectors/entity.js +167 -0
  31. package/dist/api/cadquery-selectors/entity.js.map +1 -0
  32. package/dist/api/cadquery-selectors/face.d.ts +33 -0
  33. package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
  34. package/dist/api/cadquery-selectors/face.js +353 -0
  35. package/dist/api/cadquery-selectors/face.js.map +1 -0
  36. package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
  37. package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
  38. package/dist/api/cadquery-selectors/grammar.js +345 -0
  39. package/dist/api/cadquery-selectors/grammar.js.map +1 -0
  40. package/dist/api/cadquery-selectors/index.d.ts +18 -0
  41. package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
  42. package/dist/api/cadquery-selectors/index.js +17 -0
  43. package/dist/api/cadquery-selectors/index.js.map +1 -0
  44. package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
  45. package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
  46. package/dist/api/cadquery-selectors/predicates.js +85 -0
  47. package/dist/api/cadquery-selectors/predicates.js.map +1 -0
  48. package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
  49. package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
  50. package/dist/api/cadquery-selectors/resolve.js +243 -0
  51. package/dist/api/cadquery-selectors/resolve.js.map +1 -0
  52. package/dist/api/cadquery-selectors/types.d.ts +96 -0
  53. package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
  54. package/dist/api/cadquery-selectors/types.js +11 -0
  55. package/dist/api/cadquery-selectors/types.js.map +1 -0
  56. package/dist/api/chamfer.d.ts +13 -5
  57. package/dist/api/chamfer.d.ts.map +1 -1
  58. package/dist/api/chamfer.js +63 -7
  59. package/dist/api/chamfer.js.map +1 -1
  60. package/dist/api/compound-geom.d.ts +1 -1
  61. package/dist/api/compound-geom.js +1 -1
  62. package/dist/api/compound-geom.js.map +1 -1
  63. package/dist/api/draft.d.ts +1 -1
  64. package/dist/api/draft.js +1 -1
  65. package/dist/api/draft.js.map +1 -1
  66. package/dist/api/edge-ref.d.ts +1 -1
  67. package/dist/api/edge-ref.d.ts.map +1 -1
  68. package/dist/api/edge-ref.js +11 -3
  69. package/dist/api/edge-ref.js.map +1 -1
  70. package/dist/api/engrave.d.ts +1 -1
  71. package/dist/api/engrave.js +7 -7
  72. package/dist/api/engrave.js.map +1 -1
  73. package/dist/api/extrude.d.ts +6 -1
  74. package/dist/api/extrude.d.ts.map +1 -1
  75. package/dist/api/extrude.js +59 -5
  76. package/dist/api/extrude.js.map +1 -1
  77. package/dist/api/face-ref.d.ts +1 -1
  78. package/dist/api/face-ref.js +1 -1
  79. package/dist/api/face-ref.js.map +1 -1
  80. package/dist/api/feature-repair.d.ts +1 -1
  81. package/dist/api/feature-repair.js +1 -1
  82. package/dist/api/feature-repair.js.map +1 -1
  83. package/dist/api/fillet-variable.d.ts +1 -1
  84. package/dist/api/fillet-variable.js +1 -1
  85. package/dist/api/fillet-variable.js.map +1 -1
  86. package/dist/api/fillet.d.ts +28 -8
  87. package/dist/api/fillet.d.ts.map +1 -1
  88. package/dist/api/fillet.js +64 -9
  89. package/dist/api/fillet.js.map +1 -1
  90. package/dist/api/geom.d.ts +1 -1
  91. package/dist/api/geom.js +1 -1
  92. package/dist/api/geom.js.map +1 -1
  93. package/dist/api/helix.d.ts +1 -1
  94. package/dist/api/helix.js +1 -1
  95. package/dist/api/helix.js.map +1 -1
  96. package/dist/api/import-brep.d.ts +20 -2
  97. package/dist/api/import-brep.d.ts.map +1 -1
  98. package/dist/api/import-brep.js +28 -3
  99. package/dist/api/import-brep.js.map +1 -1
  100. package/dist/api/import-step.d.ts +17 -2
  101. package/dist/api/import-step.d.ts.map +1 -1
  102. package/dist/api/import-step.js +51 -3
  103. package/dist/api/import-step.js.map +1 -1
  104. package/dist/api/index.d.ts +6 -1
  105. package/dist/api/index.d.ts.map +1 -1
  106. package/dist/api/index.js +7 -2
  107. package/dist/api/index.js.map +1 -1
  108. package/dist/api/internal/compat-op.js +1 -1
  109. package/dist/api/internal/compat-op.js.map +1 -1
  110. package/dist/api/internal/mesh-solid-op.d.ts +236 -0
  111. package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
  112. package/dist/api/internal/mesh-solid-op.js +352 -0
  113. package/dist/api/internal/mesh-solid-op.js.map +1 -0
  114. package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
  115. package/dist/api/internal/svg-asset-resolver.js +1 -1
  116. package/dist/api/internal/svg-asset-resolver.js.map +1 -1
  117. package/dist/api/knurl.d.ts +1 -1
  118. package/dist/api/knurl.js +2 -2
  119. package/dist/api/knurl.js.map +1 -1
  120. package/dist/api/loft.d.ts +1 -1
  121. package/dist/api/loft.js +1 -1
  122. package/dist/api/loft.js.map +1 -1
  123. package/dist/api/measurement/index.d.ts +9 -5
  124. package/dist/api/measurement/index.d.ts.map +1 -1
  125. package/dist/api/measurement/index.js +47 -20
  126. package/dist/api/measurement/index.js.map +1 -1
  127. package/dist/api/meta.d.ts +93 -0
  128. package/dist/api/meta.d.ts.map +1 -0
  129. package/dist/api/meta.js +99 -0
  130. package/dist/api/meta.js.map +1 -0
  131. package/dist/api/pattern.d.ts +5 -3
  132. package/dist/api/pattern.d.ts.map +1 -1
  133. package/dist/api/pattern.js +32 -4
  134. package/dist/api/pattern.js.map +1 -1
  135. package/dist/api/place.d.ts +1 -1
  136. package/dist/api/place.js +1 -1
  137. package/dist/api/place.js.map +1 -1
  138. package/dist/api/primitives.d.ts +1 -1
  139. package/dist/api/primitives.d.ts.map +1 -1
  140. package/dist/api/primitives.js +119 -4
  141. package/dist/api/primitives.js.map +1 -1
  142. package/dist/api/profile.d.ts +39 -12
  143. package/dist/api/profile.d.ts.map +1 -1
  144. package/dist/api/profile.js +4 -4
  145. package/dist/api/profile.js.map +1 -1
  146. package/dist/api/reconcile.d.ts +1 -1
  147. package/dist/api/reconcile.js +1 -1
  148. package/dist/api/reconcile.js.map +1 -1
  149. package/dist/api/replicate.d.ts.map +1 -1
  150. package/dist/api/replicate.js +122 -1
  151. package/dist/api/replicate.js.map +1 -1
  152. package/dist/api/screw.d.ts +1 -1
  153. package/dist/api/screw.js +3 -3
  154. package/dist/api/screw.js.map +1 -1
  155. package/dist/api/sdf.d.ts +1 -1
  156. package/dist/api/sdf.js +2 -2
  157. package/dist/api/sdf.js.map +1 -1
  158. package/dist/api/section-by-plane.d.ts +1 -1
  159. package/dist/api/section-by-plane.d.ts.map +1 -1
  160. package/dist/api/section-by-plane.js +2 -1
  161. package/dist/api/section-by-plane.js.map +1 -1
  162. package/dist/api/shell.d.ts +11 -4
  163. package/dist/api/shell.d.ts.map +1 -1
  164. package/dist/api/shell.js +53 -7
  165. package/dist/api/shell.js.map +1 -1
  166. package/dist/api/sketch-on-face.d.ts +41 -0
  167. package/dist/api/sketch-on-face.d.ts.map +1 -1
  168. package/dist/api/sketch-on-face.js +100 -1
  169. package/dist/api/sketch-on-face.js.map +1 -1
  170. package/dist/api/sketch-on-plane.d.ts +7 -5
  171. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  172. package/dist/api/sketch-on-plane.js +6 -7
  173. package/dist/api/sketch-on-plane.js.map +1 -1
  174. package/dist/api/split-by-plane.d.ts +1 -1
  175. package/dist/api/split-by-plane.d.ts.map +1 -1
  176. package/dist/api/split-by-plane.js +2 -1
  177. package/dist/api/split-by-plane.js.map +1 -1
  178. package/dist/api/split.d.ts +1 -1
  179. package/dist/api/split.js +2 -2
  180. package/dist/api/split.js.map +1 -1
  181. package/dist/api/sweep.d.ts +1 -1
  182. package/dist/api/sweep.js +1 -1
  183. package/dist/api/sweep.js.map +1 -1
  184. package/dist/api/thicken.d.ts +1 -1
  185. package/dist/api/thicken.js +1 -1
  186. package/dist/api/thicken.js.map +1 -1
  187. package/dist/api/topo-resolve.d.ts +74 -1
  188. package/dist/api/topo-resolve.d.ts.map +1 -1
  189. package/dist/api/topo-resolve.js +180 -2
  190. package/dist/api/topo-resolve.js.map +1 -1
  191. package/dist/api/transform.d.ts +5 -1
  192. package/dist/api/transform.d.ts.map +1 -1
  193. package/dist/api/transform.js +62 -11
  194. package/dist/api/transform.js.map +1 -1
  195. package/dist/api/wire.d.ts +1 -1
  196. package/dist/api/wire.js +1 -1
  197. package/dist/api/wire.js.map +1 -1
  198. package/dist/brep/brep-ops.d.ts +9 -7
  199. package/dist/brep/brep-ops.d.ts.map +1 -1
  200. package/dist/brep/brep-ops.js +50 -26
  201. package/dist/brep/brep-ops.js.map +1 -1
  202. package/dist/brep/brep-topology.d.ts +5 -4
  203. package/dist/brep/brep-topology.d.ts.map +1 -1
  204. package/dist/brep/brep-topology.js +6 -5
  205. package/dist/brep/brep-topology.js.map +1 -1
  206. package/dist/brep/effective-deflection.d.ts +35 -0
  207. package/dist/brep/effective-deflection.d.ts.map +1 -0
  208. package/dist/brep/effective-deflection.js +49 -0
  209. package/dist/brep/effective-deflection.js.map +1 -0
  210. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  211. package/dist/brep/engine/adapters/brep-mock.js +27 -0
  212. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  213. package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
  214. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  215. package/dist/brep/engine/adapters/brepkit.js +46 -1
  216. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  217. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  218. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  219. package/dist/brep/engine/adapters/occt.js +4 -2
  220. package/dist/brep/engine/adapters/occt.js.map +1 -1
  221. package/dist/brep/engine/primitives.d.ts +29 -7
  222. package/dist/brep/engine/primitives.d.ts.map +1 -1
  223. package/dist/brep/engine/primitives.js.map +1 -1
  224. package/dist/brep/engine/registry.d.ts +24 -1
  225. package/dist/brep/engine/registry.d.ts.map +1 -1
  226. package/dist/brep/engine/registry.js +24 -0
  227. package/dist/brep/engine/registry.js.map +1 -1
  228. package/dist/brep/engine/types.d.ts +54 -3
  229. package/dist/brep/engine/types.d.ts.map +1 -1
  230. package/dist/brep/engine/types.js +10 -0
  231. package/dist/brep/engine/types.js.map +1 -1
  232. package/dist/brep/export/export-model.d.ts +40 -0
  233. package/dist/brep/export/export-model.d.ts.map +1 -1
  234. package/dist/brep/export/export-model.js +274 -30
  235. package/dist/brep/export/export-model.js.map +1 -1
  236. package/dist/brep/export/step-meta-header.d.ts +102 -0
  237. package/dist/brep/export/step-meta-header.d.ts.map +1 -0
  238. package/dist/brep/export/step-meta-header.js +225 -0
  239. package/dist/brep/export/step-meta-header.js.map +1 -0
  240. package/dist/brep/export/step.d.ts +5 -1
  241. package/dist/brep/export/step.d.ts.map +1 -1
  242. package/dist/brep/export/step.js +11 -2
  243. package/dist/brep/export/step.js.map +1 -1
  244. package/dist/brep/face-evolution.d.ts +1 -1
  245. package/dist/brep/face-evolution.d.ts.map +1 -1
  246. package/dist/brep/face-evolution.js +20 -1
  247. package/dist/brep/face-evolution.js.map +1 -1
  248. package/dist/brep/handle-bridge.d.ts +1 -1
  249. package/dist/brep/handle-bridge.js +1 -1
  250. package/dist/brep/handle-bridge.js.map +1 -1
  251. package/dist/brep/mesh-solid.d.ts +218 -0
  252. package/dist/brep/mesh-solid.d.ts.map +1 -0
  253. package/dist/brep/mesh-solid.js +229 -0
  254. package/dist/brep/mesh-solid.js.map +1 -0
  255. package/dist/brep/text/fontRegistry.d.ts +32 -1
  256. package/dist/brep/text/fontRegistry.d.ts.map +1 -1
  257. package/dist/brep/text/fontRegistry.js +51 -1
  258. package/dist/brep/text/fontRegistry.js.map +1 -1
  259. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  260. package/dist/brep/text/text-to-solid.js +8 -3
  261. package/dist/brep/text/text-to-solid.js.map +1 -1
  262. package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
  263. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  264. package/dist/brepkit-kernel/brepkitKernel.js +449 -123
  265. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  266. package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
  267. package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
  268. package/dist/brepkit-kernel/brepkitWasm.js +10 -0
  269. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  270. package/dist/browser-host/browser-font-provider.d.ts +12 -0
  271. package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
  272. package/dist/browser-host/browser-font-provider.js +25 -0
  273. package/dist/browser-host/browser-font-provider.js.map +1 -1
  274. package/dist/browser.d.ts +6 -3
  275. package/dist/browser.d.ts.map +1 -1
  276. package/dist/browser.js +10 -3
  277. package/dist/browser.js.map +1 -1
  278. package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
  279. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  280. package/dist/cad-runtime/backend-dispatch.js +119 -4
  281. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  282. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  283. package/dist/cad-runtime/direct-executor.d.ts +15 -3
  284. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  285. package/dist/cad-runtime/direct-executor.js +33 -1
  286. package/dist/cad-runtime/direct-executor.js.map +1 -1
  287. package/dist/cad-runtime/ports.d.ts +3 -3
  288. package/dist/cad-runtime/ports.d.ts.map +1 -1
  289. package/dist/cad-runtime/ports.js.map +1 -1
  290. package/dist/cad-runtime/preview-exec.d.ts +4 -4
  291. package/dist/cad-runtime/preview-exec.js +2 -2
  292. package/dist/cad-runtime/preview-exec.js.map +1 -1
  293. package/dist/cad-runtime/runtime.d.ts +42 -7
  294. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  295. package/dist/cad-runtime/runtime.js +68 -5
  296. package/dist/cad-runtime/runtime.js.map +1 -1
  297. package/dist/define-op.d.ts +15 -1
  298. package/dist/define-op.d.ts.map +1 -1
  299. package/dist/define-op.js +73 -2
  300. package/dist/define-op.js.map +1 -1
  301. package/dist/env-agnostic.d.ts +2 -2
  302. package/dist/env-agnostic.d.ts.map +1 -1
  303. package/dist/env-agnostic.js +1 -1
  304. package/dist/env-agnostic.js.map +1 -1
  305. package/dist/geometry2d/adapt.d.ts +39 -4
  306. package/dist/geometry2d/adapt.d.ts.map +1 -1
  307. package/dist/geometry2d/adapt.js +14 -3
  308. package/dist/geometry2d/adapt.js.map +1 -1
  309. package/dist/geometry2d/blueprint.d.ts +2 -2
  310. package/dist/geometry2d/blueprint.js +2 -2
  311. package/dist/geometry2d/blueprint.js.map +1 -1
  312. package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
  313. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  314. package/dist/geometry2d/bridge/lift-on-plane.js +65 -12
  315. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  316. package/dist/geometry2d/bridge/plane.d.ts +17 -0
  317. package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
  318. package/dist/geometry2d/bridge/plane.js +22 -0
  319. package/dist/geometry2d/bridge/plane.js.map +1 -1
  320. package/dist/geometry2d/curve2d.d.ts +25 -0
  321. package/dist/geometry2d/curve2d.d.ts.map +1 -1
  322. package/dist/geometry2d/curve2d.js +41 -5
  323. package/dist/geometry2d/curve2d.js.map +1 -1
  324. package/dist/index.d.ts +6 -2
  325. package/dist/index.d.ts.map +1 -1
  326. package/dist/index.js +10 -3
  327. package/dist/index.js.map +1 -1
  328. package/dist/io/bytes-node.d.ts +11 -0
  329. package/dist/io/bytes-node.d.ts.map +1 -0
  330. package/dist/io/bytes-node.js +28 -0
  331. package/dist/io/bytes-node.js.map +1 -0
  332. package/dist/io/bytes.d.ts +33 -0
  333. package/dist/io/bytes.d.ts.map +1 -0
  334. package/dist/io/bytes.js +41 -0
  335. package/dist/io/bytes.js.map +1 -0
  336. package/dist/io/fai-zip/container-read.d.ts +102 -0
  337. package/dist/io/fai-zip/container-read.d.ts.map +1 -0
  338. package/dist/io/fai-zip/container-read.js +305 -0
  339. package/dist/io/fai-zip/container-read.js.map +1 -0
  340. package/dist/io/fai-zip/container-write.d.ts +70 -0
  341. package/dist/io/fai-zip/container-write.d.ts.map +1 -0
  342. package/dist/io/fai-zip/container-write.js +186 -0
  343. package/dist/io/fai-zip/container-write.js.map +1 -0
  344. package/dist/io/fai-zip/container.d.ts +107 -0
  345. package/dist/io/fai-zip/container.d.ts.map +1 -0
  346. package/dist/io/fai-zip/container.js +89 -0
  347. package/dist/io/fai-zip/container.js.map +1 -0
  348. package/dist/io/fai-zip/index.d.ts +18 -0
  349. package/dist/io/fai-zip/index.d.ts.map +1 -0
  350. package/dist/io/fai-zip/index.js +4 -0
  351. package/dist/io/fai-zip/index.js.map +1 -0
  352. package/dist/io/index.d.ts +10 -0
  353. package/dist/io/index.d.ts.map +1 -0
  354. package/dist/io/index.js +13 -0
  355. package/dist/io/index.js.map +1 -0
  356. package/dist/io/zip.d.ts +68 -0
  357. package/dist/io/zip.d.ts.map +1 -0
  358. package/dist/io/zip.js +147 -0
  359. package/dist/io/zip.js.map +1 -0
  360. package/dist/lang/code-to-args.d.ts +1 -1
  361. package/dist/lang/code-to-args.js +1 -1
  362. package/dist/lang/code-to-args.js.map +1 -1
  363. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  364. package/dist/lang/metadata-extractor.js +2 -21
  365. package/dist/lang/metadata-extractor.js.map +1 -1
  366. package/dist/lang/statement-summary.d.ts +1 -1
  367. package/dist/lang/statement-summary.js +1 -1
  368. package/dist/lang/statement-summary.js.map +1 -1
  369. package/dist/lang/types.d.ts +6 -7
  370. package/dist/lang/types.d.ts.map +1 -1
  371. package/dist/lang/types.js +1 -1
  372. package/dist/lang/types.js.map +1 -1
  373. package/dist/mesh/index.d.ts +2 -1
  374. package/dist/mesh/index.d.ts.map +1 -1
  375. package/dist/mesh/index.js +2 -1
  376. package/dist/mesh/index.js.map +1 -1
  377. package/dist/mesh/io.d.ts +13 -0
  378. package/dist/mesh/io.d.ts.map +1 -1
  379. package/dist/mesh/io.js +38 -17
  380. package/dist/mesh/io.js.map +1 -1
  381. package/dist/mesh/primitives.d.ts.map +1 -1
  382. package/dist/mesh/primitives.js +41 -6
  383. package/dist/mesh/primitives.js.map +1 -1
  384. package/dist/mesh/reconcile.d.ts +1 -1
  385. package/dist/mesh/reconcile.js +1 -1
  386. package/dist/mesh/reconcile.js.map +1 -1
  387. package/dist/mesh/rigid-transform.d.ts +3 -3
  388. package/dist/mesh/rigid-transform.js +3 -3
  389. package/dist/mesh/rigid-transform.js.map +1 -1
  390. package/dist/mesh/stl-unit.d.ts +24 -0
  391. package/dist/mesh/stl-unit.d.ts.map +1 -0
  392. package/dist/mesh/stl-unit.js +17 -0
  393. package/dist/mesh/stl-unit.js.map +1 -0
  394. package/dist/mesh/threemf-bambu.d.ts +142 -0
  395. package/dist/mesh/threemf-bambu.d.ts.map +1 -0
  396. package/dist/mesh/threemf-bambu.js +334 -0
  397. package/dist/mesh/threemf-bambu.js.map +1 -0
  398. package/dist/mesh/threemf-loader.d.ts +65 -7
  399. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  400. package/dist/mesh/threemf-loader.js +738 -99
  401. package/dist/mesh/threemf-loader.js.map +1 -1
  402. package/dist/mesh/threemf-view.d.ts +71 -0
  403. package/dist/mesh/threemf-view.d.ts.map +1 -0
  404. package/dist/mesh/threemf-view.js +100 -0
  405. package/dist/mesh/threemf-view.js.map +1 -0
  406. package/dist/mesh/types.d.ts +38 -0
  407. package/dist/mesh/types.d.ts.map +1 -1
  408. package/dist/mesh/types.js.map +1 -1
  409. package/dist/node-host/cli.d.ts +44 -6
  410. package/dist/node-host/cli.d.ts.map +1 -1
  411. package/dist/node-host/cli.js +76 -26
  412. package/dist/node-host/cli.js.map +1 -1
  413. package/dist/node-host/font-family-index.d.ts +93 -0
  414. package/dist/node-host/font-family-index.d.ts.map +1 -0
  415. package/dist/node-host/font-family-index.js +273 -0
  416. package/dist/node-host/font-family-index.js.map +1 -0
  417. package/dist/node-host/fs-asset-resolver.d.ts +8 -3
  418. package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
  419. package/dist/node-host/fs-asset-resolver.js +13 -5
  420. package/dist/node-host/fs-asset-resolver.js.map +1 -1
  421. package/dist/node-host/index.d.ts +8 -0
  422. package/dist/node-host/index.d.ts.map +1 -1
  423. package/dist/node-host/index.js +1 -0
  424. package/dist/node-host/index.js.map +1 -1
  425. package/dist/node-host/node-font-provider.d.ts +28 -0
  426. package/dist/node-host/node-font-provider.d.ts.map +1 -1
  427. package/dist/node-host/node-font-provider.js +49 -0
  428. package/dist/node-host/node-font-provider.js.map +1 -1
  429. package/dist/node.d.ts +1 -0
  430. package/dist/node.d.ts.map +1 -1
  431. package/dist/node.js +1 -0
  432. package/dist/node.js.map +1 -1
  433. package/dist/occt-kernel/highLevelApi.d.ts +4 -1
  434. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  435. package/dist/occt-kernel/highLevelApi.js +4 -2
  436. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  437. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  438. package/dist/occt-kernel/occt-primitives.js +36 -3
  439. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  440. package/dist/occt-kernel/occtKernel.d.ts +19 -14
  441. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  442. package/dist/occt-kernel/occtKernel.js +19 -32
  443. package/dist/occt-kernel/occtKernel.js.map +1 -1
  444. package/dist/occt-kernel/stepColorParser.d.ts +18 -0
  445. package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
  446. package/dist/occt-kernel/stepColorParser.js +38 -0
  447. package/dist/occt-kernel/stepColorParser.js.map +1 -1
  448. package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
  449. package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
  450. package/dist/occt-kernel/stepMetaParser.js +166 -0
  451. package/dist/occt-kernel/stepMetaParser.js.map +1 -0
  452. package/dist/occt-kernel/topologyExt.d.ts +1 -1
  453. package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
  454. package/dist/occt-kernel/topologyExt.js +4 -5
  455. package/dist/occt-kernel/topologyExt.js.map +1 -1
  456. package/dist/primitives/text/cjk-font.d.ts +2 -15
  457. package/dist/primitives/text/cjk-font.d.ts.map +1 -1
  458. package/dist/primitives/text/cjk-font.js +13 -1
  459. package/dist/primitives/text/cjk-font.js.map +1 -1
  460. package/dist/runtime-state.d.ts +85 -9
  461. package/dist/runtime-state.d.ts.map +1 -1
  462. package/dist/runtime-state.js +72 -2
  463. package/dist/runtime-state.js.map +1 -1
  464. package/dist/sdk.d.ts +3 -3
  465. package/dist/sdk.d.ts.map +1 -1
  466. package/dist/sdk.js +5 -5
  467. package/dist/sdk.js.map +1 -1
  468. package/dist/shape.d.ts +108 -5
  469. package/dist/shape.d.ts.map +1 -1
  470. package/dist/shape.js +130 -3
  471. package/dist/shape.js.map +1 -1
  472. package/dist/step/stepMetaParser.d.ts +55 -0
  473. package/dist/step/stepMetaParser.d.ts.map +1 -0
  474. package/dist/step/stepMetaParser.js +177 -0
  475. package/dist/step/stepMetaParser.js.map +1 -0
  476. package/dist/topology/naming/lineage.d.ts +6 -0
  477. package/dist/topology/naming/lineage.d.ts.map +1 -1
  478. package/dist/topology/naming/lineage.js +8 -0
  479. package/dist/topology/naming/lineage.js.map +1 -1
  480. package/dist/topology/naming/resolve-edge.d.ts +20 -1
  481. package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
  482. package/dist/topology/naming/resolve-edge.js +54 -20
  483. package/dist/topology/naming/resolve-edge.js.map +1 -1
  484. package/dist/weapp.d.ts +6 -2
  485. package/dist/weapp.d.ts.map +1 -1
  486. package/dist/weapp.js +7 -1
  487. package/dist/weapp.js.map +1 -1
  488. package/package.json +19 -3
@@ -273,6 +273,33 @@ export function createBrepMockApi() {
273
273
  }, tag: `arc` });
274
274
  },
275
275
  makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),
276
+ makeBSplineEdge: (poles) => {
277
+ // Bbox from the control polygon (a superset of a Bézier's hull; exact for
278
+ // the shape's own bbox purposes and good enough for the mock's role as a
279
+ // call-sequence recorder).
280
+ const xs = [];
281
+ const ys = [];
282
+ const zs = [];
283
+ for (let i = 0; i + 2 < poles.length; i += 3) {
284
+ xs.push(poles[i]);
285
+ ys.push(poles[i + 1]);
286
+ zs.push(poles[i + 2]);
287
+ }
288
+ return alloc({
289
+ kind: 'edge',
290
+ bbox: xs.length > 0
291
+ ? { xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs), xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs) }
292
+ : bboxOf('edge', [1, 1, 1]),
293
+ tag: 'bspline',
294
+ });
295
+ },
296
+ curveSplit: (edge) => {
297
+ const e = need(edge, 'curveSplit');
298
+ return [
299
+ alloc({ kind: 'edge', bbox: { ...e.bbox }, tag: `splitA(#${edge})` }),
300
+ alloc({ kind: 'edge', bbox: { ...e.bbox }, tag: `splitB(#${edge})` }),
301
+ ];
302
+ },
276
303
  makeCircleEdge: (center, _normal, radius) => alloc({ kind: 'edge', bbox: bboxOf('edge', [radius * 2, radius * 2, 0]), tag: `circle(${center.x},${center.y},${center.z},r=${radius})` }),
277
304
  // ── 拓扑构造 ──
278
305
  makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),
@@ -1 +1 @@
1
- {"version":3,"file":"brep-mock.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAA;AAajE,wCAAwC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAA;AAW9C,SAAS,MAAM,CAAC,IAAsB,EAAE,IAA8B;IACpE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAA;AAC5F,CAAC;AAED,2DAA2D;AAC3D,MAAM,kBAAkB,GAAG,IAAI,YAAY,CAAC;IAC1C,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG;IAClE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;CAC/D,CAAC,CAAA;AACF,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAC;IACvC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;CACrD,CAAC,CAAA;AAEF,SAAS,WAAW;IAClB,OAAO;QACL,SAAS,EAAE,IAAI,YAAY,CAAC,kBAAkB,CAAC;QAC/C,OAAO,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,kBAAkB;QACjD,OAAO,EAAE,IAAI,WAAW,CAAC,gBAAgB,CAAC;QAC1C,WAAW,EAAE,CAAC;QACd,aAAa,EAAE,EAAE;KAClB,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC1C,IAAI,UAAU,GAAG,CAAC,CAAA;IAElB,MAAM,KAAK,GAAG,CAAC,KAAe,EAAc,EAAE;QAC5C,MAAM,CAAC,GAAG,UAAwB,CAAA;QAClC,UAAU,IAAI,CAAC,CAAA;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACpB,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,CAAa,EAAE,MAAc,EAAY,EAAE;QACvD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC5E,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,MAAc,EAAS,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,8CAA8C,CAAC,CAAA;IAC7F,CAAC,CAAA;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAmB,EAAE,CAAC,CAAC;QAC9E,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;KAC/B,CAAC,CAAA;IAGF,MAAM,SAAS,GAAG,CAChB,IAAsB,EACtB,IAA8B,EAC9B,GAAW,EACC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAE/D,MAAM,UAAU,GAAkB;QAChC,aAAa;QACb,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;QAExB,aAAa;QACb,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;QAChF,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAC7C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EACrE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;QAC5D,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,MAAM,MAAM,MAAM,EAAE,CAAC;QAC7H,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,YAAY,MAAM,EAAE,CAAC;QACvG,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,MAAM,EAAE,CAAC;QAC3I,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,MAAM,EAAE,CAAC;QAEvG,aAAa;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAChC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACxJ,CAAC;QACD,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YAClD,uEAAuE;YACvE,wEAAwE;YACxE,uDAAuD;YACvD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;YACnC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC/F,OAAO,KAAK,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE;oBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;oBACrE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;iBACtE;gBACD,GAAG,EAAE,cAAc,CAAC,CAAC,GAAG,MAAM,QAAQ,GAAG;aAC1C,CAAC,CAAA;QACJ,CAAC;QACD,GAAG,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE;YAC5B,wEAAwE;YACxE,IAAI,IAAI,GAA2B,IAAI,CAAA;YACvC,IAAI,GAAG,GAAG,MAAM,CAAA;YAChB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBAC1B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;gBACzD,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;YACtB,CAAC;YACD,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAA;QAC3F,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;QACvG,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE;YACtD,yEAAyE;YACzE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM,SAAS,GAAG,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;YACrC,wDAAwD;YACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,WAAW,CAAC,iCAAiC,CAAC,CAAA;YAC9E,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAA;YACrD,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAA;YACxD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBAClF,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACpF,CAAC;YACD,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,oBAAoB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;QAC1H,CAAC;QAED,+CAA+C;QAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAChC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,GAAG,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;QAChH,CAAC;QACD,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACrD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;YACzC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,GAAG,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;QAChI,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC/B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;QAC7G,CAAC;QACD,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;YACtD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;YACvC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,GAAG,MAAM,WAAW,IAAI,SAAS,OAAO,EAAE,CAAC,CAAA;QACpH,CAAC;QACD,iBAAiB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAA;YAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,GAAG,MAAM,MAAM,MAAM,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;YACrH,MAAM,GAAG,GAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YACnF,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,cAAc;QACd,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAC1B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACtG,CAAC;QACD,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACzB,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACpF,CAAC;QACD,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC5B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACxG,CAAC;QACD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAC/B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAC3G,CAAC;QACD,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YACzC,+EAA+E;YAC/E,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;YACvC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;QACxF,CAAC;QACD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;YACvC,qEAAqE;YACrE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;YACrC,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;gBACvF,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;aACxF,CAAA;QACH,CAAC;QACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,IAAI,GAA2B,IAAI,CAAA;YACvC,IAAI,GAAG,GAAG,UAAU,CAAA;YACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;gBAC9B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;gBACzD,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;YACtB,CAAC;YACD,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAA;QAC3F,CAAC;QAED,WAAW;QACX,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YAClC,OAAO,KAAK,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE;oBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;oBACtE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE;iBACvE;gBACD,GAAG,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG;aAC7C,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;oBAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM;oBAClF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM;iBACnF,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI,MAAM,GAAG,EAAE,CAAC,CAAA;QACxC,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YAClC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAChC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAChF,CAAC;QACD,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;YACzC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QACzF,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC7B,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAC7E,CAAC;QAED,6CAA6C;QAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;YACtC,MAAM,IAAI,GAAiB,EAAE,CAAA;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;oBACd,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE;wBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;wBAC3I,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC;qBAC5I;oBACD,GAAG,EAAE,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;iBACpC,CAAC,CAAC,CAAA;YACL,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAA;YACxC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;QAC1F,CAAC;QACD,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACjF,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;YACpC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,MAAM,GAAG,EAAE,CAAC,CAAA;QACxG,CAAC;QAED,aAAa;QACb,YAAY,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM;YAChD,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9F,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aAC/F;YACD,GAAG,EAAE,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/E,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAClC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAClC,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;oBACjC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACnE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;iBACpE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAClB,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC7F,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC;QAEvL,aAAa;QACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACvK,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC;QAC5G,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACtB,IAAI,IAAI,GAA2B,IAAI,CAAA;YACvC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;gBACnC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;YAC3D,CAAC;YACD,OAAO,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;QACnH,CAAC;QAED,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAC5F,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,cAAc,IAAI,GAAG,EAAE,CAAC;QAE7H,4BAA4B;QAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QAC9B,SAAS,EAAE,GAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAE5H,aAAa;QACb,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;QACtB,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE;QACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,UAAU;QACvC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO;QACxB,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;QACjC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QACzB,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE;QACvB,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;QAErB,aAAa;QACb,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;QACvB,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/C,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,eAAe,EAAE,GAAwB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;QAC1B,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO;QAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3C,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,QAAQ,EAAE,GAAiB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC/B,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI;QAC7B,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC;QAC3G,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,KAAK,CAAA,CAAC,CAAC;QAChE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAA,CAAC,CAAC;QACxD,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;QACjF,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,KAAK,CAAA,CAAC,CAAC;QACtE,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;QAE/C,WAAW;QACX,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,CAAA;YACvC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAA;YAC7C,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;QACzF,CAAC;QACD,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QACvB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAElB,cAAc;QACd,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QACjC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QAC1B,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QACrC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QAEvC,WAAW;QACX,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC;QACxG,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;YACnC,OAAO,wCAAwC,KAAK,KAAK,CAAC,CAAC,GAAG,kDAAkD,CAAA;QAClH,CAAC;QACD,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;QACtG,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;QAEpG,sCAAsC;QACtC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnC,MAAM,GAAG,GAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YACnF,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACpC,MAAM,GAAG,GAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YACnF,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACzC,MAAM,GAAG,GAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;YACnF,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,8CAA8C;QAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;QACxB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACvD,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC;QACjD,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;QACzC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/I,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG,EAAE,CAAC;QACjI,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA,CAAC,CAAC;QAC9K,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG,EAAE,CAAC;QACjI,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,KAAK,GAAG,EAAE,CAAC;KACzI,CAAA;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,sBAAsB;IACpC,kBAAkB,CAAC,mBAAmB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QACxE,EAAE,EAAE,mBAAmB;QACvB,UAAU,EAAE,iBAAiB,EAAE;QAC/B,YAAY,EAAE;QACZ,qFAAqF;SACtF;KACF,CAAC,CAAC,CAAA;AACL,CAAC","sourcesContent":["/**\n * engine/adapters/memory — 内存模拟 BREP 引擎(第二引擎,引擎切换验证用)\n *\n *\n * 目的:证明「引擎可切换」——不是生产内核,是注册表机制的验证载体。\n * 与 occt 适配器(adapters/occt.ts)同构注册;同一段 faijs 代码在\n * occt / memory 两个引擎下都能执行(构造 → 变换 → 布尔 → 三角化 → 导出),\n * 通过 mock STEP 文本标记区分当前引擎。\n *\n * 实现形态:句柄为自增 number;每条形状记录 { kind, bbox, tag }。\n * 只实现引擎切换测试所需的方法面(原语/变换/布尔/网格化/导出),\n * 其余方法抛「not implemented」——缺失即暴露,绝不伪造(§7.5 语义)。\n */\n\nimport { registerBrepEngine, type BrepEngine } from '../registry'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepUvBounds,\n\n} from '../types'\nimport type { BrepEngineApi, AssertSatisfiesBrepEngineApi } from '../primitives'\n\n/** brep-mock engine registration id. */\nexport const BREP_MOCK_ENGINE_ID = 'brep_mock'\n\n/** Internal shape record (the \"solid\" of an in-memory mock BREP). */\ninterface MemShape {\n kind: 'box' | 'sphere' | 'cylinder' | 'cone' | 'edge' | 'wire' | 'face' | 'solid' | 'compound'\n /** 轴对齐包围盒(近似真实几何,供 getBoundingBox / 导出用)。 */\n bbox: BrepBoundingBox\n /** 人类可读描述(导出标记用)。 */\n tag: string\n}\n\nfunction bboxOf(kind: MemShape['kind'], size: [number, number, number]): BrepBoundingBox {\n const [x, y, z] = size\n return { xmin: -x / 2, ymin: -y / 2, zmin: -z / 2, xmax: x / 2, ymax: y / 2, zmax: z / 2 }\n}\n\n/** 1×1×1 单位盒三角化(8 顶点 / 12 三角形;memory 引擎的 meshShape 输出)。 */\nconst UNIT_BOX_POSITIONS = new Float32Array([\n -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5,\n -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5,\n])\nconst UNIT_BOX_INDICES = new Uint32Array([\n 0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, 0, 1, 5, 0, 5, 4,\n 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 0, 4, 3, 4, 7,\n])\n\nfunction unitBoxMesh(): BrepMeshResult {\n return {\n positions: new Float32Array(UNIT_BOX_POSITIONS),\n normals: new Float32Array(24), // 占位法线(切换测试不校验法线)\n indices: new Uint32Array(UNIT_BOX_INDICES),\n vertexCount: 8,\n triangleCount: 12,\n }\n}\n\n/**\n * Build an in-memory mock BREP engine (a BrepEngineApi subset).\n * @returns the mock in-memory BREP engine API.\n */\nexport function createBrepMockApi(): BrepEngineApi {\n const shapes = new Map<number, MemShape>()\n let nextHandle = 1\n\n const alloc = (shape: MemShape): BrepHandle => {\n const h = nextHandle as BrepHandle\n nextHandle += 1\n shapes.set(h, shape)\n return h\n }\n\n const need = (h: BrepHandle, method: string): MemShape => {\n const s = shapes.get(h)\n if (!s) throw new Error(`[brep-mock-engine] ${method}: unknown handle ${h}`)\n return s\n }\n\n const unsupported = (method: string): never => {\n throw new Error(`[brep-mock-engine] ${method}() not implemented — engine-switch test only`)\n }\n\n /** 布尔合并 bbox(fuse/cut/common 的近似包围盒)。 */\n const mergeBbox = (a: BrepBoundingBox, b: BrepBoundingBox): BrepBoundingBox => ({\n xmin: Math.min(a.xmin, b.xmin),\n ymin: Math.min(a.ymin, b.ymin),\n zmin: Math.min(a.zmin, b.zmin),\n xmax: Math.max(a.xmax, b.xmax),\n ymax: Math.max(a.ymax, b.ymax),\n zmax: Math.max(a.zmax, b.zmax),\n })\n\n\n const primitive = (\n kind: MemShape['kind'],\n size: [number, number, number],\n tag: string,\n ): BrepHandle => alloc({ kind, bbox: bboxOf(kind, size), tag })\n\n const primitives: BrepEngineApi = {\n // ── 生命周期 ──\n release: () => undefined,\n\n // ── 实体图元 ──\n makeBox: (dx, dy, dz) => primitive('box', [dx, dy, dz], `box ${dx}x${dy}x${dz}`),\n makeBoxFromCorners: (c1, c2) => primitive('box',\n [Math.abs(c2.x - c1.x), Math.abs(c2.y - c1.y), Math.abs(c2.z - c1.z)],\n `box (${c1.x},${c1.y},${c1.z})→(${c2.x},${c2.y},${c2.z})`),\n makeCylinder: (radius, height) => primitive('cylinder', [radius * 2, radius * 2, height], `cylinder r=${radius} h=${height}`),\n makeSphere: (radius) => primitive('sphere', [radius * 2, radius * 2, radius * 2], `sphere r=${radius}`),\n makeCone: (r1, r2, height) => primitive('cone', [Math.max(r1, r2) * 2, Math.max(r1, r2) * 2, height], `cone r1=${r1} r2=${r2} h=${height}`),\n makeRectangle: (width, height) => primitive('face', [width, height, 0], `rectangle ${width}x${height}`),\n\n // ── 造型运算 ──\n extrude: (shape, dx, dy, dz) => {\n const s = need(shape, 'extrude')\n return alloc({ kind: 'solid', bbox: { ...s.bbox, xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz }, tag: `extrude(${s.tag})` })\n },\n revolveVec: (shape, _center, direction, angleDeg) => {\n // Mock approximation: revolve grows the bbox by sweeping the profile's\n // extent around the axis — approximate with the direction-scaled extent\n // (signature-level coverage only, like extrude above).\n const s = need(shape, 'revolveVec')\n const grow = (Math.abs(angleDeg) / 360) * Math.hypot(direction.x, direction.y, direction.z) * 2\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin - grow, ymin: s.bbox.ymin - grow, zmin: s.bbox.zmin,\n xmax: s.bbox.xmax + grow, ymax: s.bbox.ymax + grow, zmax: s.bbox.zmax,\n },\n tag: `revolveVec(${s.tag},a=${angleDeg})`,\n })\n },\n sew: (shapesIn, _tolerance) => {\n // Mock approximation: merge the parts' bboxes into one shell-ish solid.\n let bbox: BrepBoundingBox | null = null\n let tag = 'sew('\n for (const h of shapesIn) {\n const rec = need(h, 'sew')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),\n shell: (solid, _facesToRemove, thickness, _tolerance) => {\n // Mock approximation: shelling keeps the outer bbox and marks it hollow.\n const s = need(solid, 'shell')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `shell(${s.tag},t=${thickness})` })\n },\n hullFromPoints: (points, _tolerance) => {\n // Mock approximation: bbox of the point set as a solid.\n if (points.length === 0) return unsupported('hullFromPoints: empty point set')\n let xmin = Infinity, ymin = Infinity, zmin = Infinity\n let xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const p of points) {\n xmin = Math.min(xmin, p.x); ymin = Math.min(ymin, p.y); zmin = Math.min(zmin, p.z)\n xmax = Math.max(xmax, p.x); ymax = Math.max(ymax, p.y); zmax = Math.max(zmax, p.z)\n }\n return alloc({ kind: 'solid', bbox: { xmin, ymin, zmin, xmax, ymax, zmax }, tag: `hullFromPoints(n=${points.length})` })\n },\n\n // ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──\n chamfer: (solid, edges, distance) => {\n const s = need(solid, 'chamfer')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamfer(${s.tag},d=${distance},e=${edges.length})` })\n },\n chamferDistAngle: (solid, edges, distance, angleDeg) => {\n const s = need(solid, 'chamferDistAngle')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferDA(${s.tag},d=${distance},a=${angleDeg},e=${edges.length})` })\n },\n fillet: (solid, edges, radius) => {\n const s = need(solid, 'fillet')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `fillet(${s.tag},r=${radius},e=${edges.length})` })\n },\n filletVariable: (solid, edge, startRadius, endRadius) => {\n const s = need(solid, 'filletVariable')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletVar(${s.tag},r=${startRadius}-${endRadius},e=1)` })\n },\n filletWithHistory: (solid, edges, radius, _hashes, _upper) => {\n const s = need(solid, 'filletWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletWH(${s.tag},r=${radius},e=${edges.length})` })\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── 布尔与分割 ──\n fuse: (a, b) => {\n const sa = need(a, 'fuse')\n const sb = need(b, 'fuse')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `fuse(${sa.tag},${sb.tag})` })\n },\n cut: (a, b) => {\n const sa = need(a, 'cut')\n return alloc({ kind: 'solid', bbox: { ...sa.bbox }, tag: `cut(${sa.tag},#${b})` })\n },\n common: (a, b) => {\n const sa = need(a, 'common')\n const sb = need(b, 'common')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `common(${sa.tag},${sb.tag})` })\n },\n intersect: (a, b) => {\n const sa = need(a, 'intersect')\n const sb = need(b, 'intersect')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` })\n },\n sectionByPlane: (shape, _point, _normal) => {\n // Mock approximation: section curves keep the input bbox as a wire-ish record.\n const s = need(shape, 'sectionByPlane')\n return [alloc({ kind: 'wire', bbox: { ...s.bbox }, tag: `sectionByPlane(${s.tag})` })]\n },\n splitByPlane: (shape, _point, _normal) => {\n // Mock approximation: two halves share the input bbox (no real cut).\n const s = need(shape, 'splitByPlane')\n return {\n positive: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane+(${s.tag})` }),\n negative: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane-(${s.tag})` }),\n }\n },\n fuseAll: (shapesIn) => {\n let bbox: BrepBoundingBox | null = null\n let tag = 'fuseAll('\n for (const s of shapesIn) {\n const rec = need(s, 'fuseAll')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n\n // ── 变换 ──\n translate: (shape, dx, dy, dz) => {\n const s = need(shape, 'translate')\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + dx, ymin: s.bbox.ymin + dy, zmin: s.bbox.zmin + dz,\n xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz,\n },\n tag: `translate(${s.tag},${dx},${dy},${dz})`,\n })\n },\n scale: (shape, _center, factor) => {\n const s = need(shape, 'scale')\n return alloc({ kind: 'solid', bbox: {\n xmin: s.bbox.xmin * factor, ymin: s.bbox.ymin * factor, zmin: s.bbox.zmin * factor,\n xmax: s.bbox.xmax * factor, ymax: s.bbox.ymax * factor, zmax: s.bbox.zmax * factor,\n }, tag: `scale(${s.tag},${factor})` })\n },\n transform: (shape, _matrix) => {\n const s = need(shape, 'transform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `transform(${s.tag})` })\n },\n located: (shape, _matrix) => {\n const s = need(shape, 'located')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `located(${s.tag})` })\n },\n generalTransform: (shape, _matrix) => {\n const s = need(shape, 'generalTransform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `generalTransform(${s.tag})` })\n },\n copy: (shape) => {\n const s = need(shape, 'copy')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `copy(${s.tag})` })\n },\n\n // ── 阵列(Phase 2 接口新增;mock 只重打标签/复制,不做真几何) ──\n linearPattern: (shape, direction, spacing, count) => {\n const s = need(shape, 'linearPattern')\n const list: BrepHandle[] = []\n for (let i = 0; i < count; i++) {\n list.push(alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + direction.x * spacing * i, ymin: s.bbox.ymin + direction.y * spacing * i, zmin: s.bbox.zmin + direction.z * spacing * i,\n xmax: s.bbox.xmax + direction.x * spacing * i, ymax: s.bbox.ymax + direction.y * spacing * i, zmax: s.bbox.zmax + direction.z * spacing * i,\n },\n tag: `linearPattern(${s.tag},${i})`,\n }))\n }\n return list\n },\n circularPattern: (shape, _center, _axis, _angleStep, _count) => {\n const s = need(shape, 'circularPattern')\n return [alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `circularPattern(${s.tag})` })]\n },\n gridPattern: (shape, directionX, directionY, spacingX, spacingY, countX, countY) => {\n const s = need(shape, 'gridPattern')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `gridPattern(${s.tag},${countX}x${countY})` })\n },\n\n // ── 曲线构造 ──\n makeLineEdge: (start, end) => alloc({ kind: 'edge',\n bbox: {\n xmin: Math.min(start.x, end.x), ymin: Math.min(start.y, end.y), zmin: Math.min(start.z, end.z),\n xmax: Math.max(start.x, end.x), ymax: Math.max(start.y, end.y), zmax: Math.max(start.z, end.z),\n },\n tag: `line(${start.x},${start.y},${start.z})→(${end.x},${end.y},${end.z})` }),\n makeArcEdge: (start, mid, end) => {\n const xs = [start.x, mid.x, end.x]\n const ys = [start.y, mid.y, end.y]\n const zs = [start.z, mid.z, end.z]\n return alloc({ kind: 'edge', bbox: {\n xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs),\n xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs),\n }, tag: `arc` })\n },\n makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),\n makeCircleEdge: (center, _normal, radius) => alloc({ kind: 'edge', bbox: bboxOf('edge', [radius * 2, radius * 2, 0]), tag: `circle(${center.x},${center.y},${center.z},r=${radius})` }),\n\n // ── 拓扑构造 ──\n makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),\n makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),\n makeCompound: (parts) => {\n let bbox: BrepBoundingBox | null = null\n for (const p of parts) {\n const rec = need(p, 'makeCompound')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n }\n return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` })\n },\n\n buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),\n addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape: () => unitBoxMesh(),\n wireframe: (): BrepEdgeData => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),\n\n // ── 拓扑查询 ──\n getSubShapes: () => [],\n subShapeHashes: () => [],\n hashCode: (shape) => shape % 2147483647,\n isSame: (a, b) => a === b,\n isSolid: () => true,\n shapeType: () => 'SOLID',\n shapeOrientation: () => 'forward',\n edgeToFaceMap: () => ({}),\n adjacentFaces: () => [],\n sharedEdges: () => [],\n\n // ── 几何求值 ──\n curveType: () => 'line',\n curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),\n curveTangent: () => ({ x: 1, y: 0, z: 0 }),\n curveParameters: (): BrepCurveParameters => ({ first: 0, last: 1 }),\n curveIsClosed: () => false,\n curveLength: () => 0,\n surfaceType: () => 'plane',\n surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),\n pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),\n uvBounds: (): BrepUvBounds => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),\n getFaceCylinderData: () => null,\n getNurbsCurveData: () => null,\n interpolatePoints: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'interpolatePoints' }),\n defeature: (shape) => { need(shape, 'defeature'); return shape },\n draft: (shape) => { need(shape, 'draft'); return shape },\n removeHolesFromFace: (face) => { need(face, 'removeHolesFromFace'); return face },\n reverseShape: (shape) => { need(shape, 'reverseShape'); return shape },\n projectEdges: () => unsupported('projectEdges'),\n\n // ── 测量 ──\n getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),\n getVolume: (shape) => {\n const b = need(shape, 'getVolume').bbox\n return (b.xmax - b.xmin) * (b.ymax - b.ymin) * (b.zmax - b.zmin)\n },\n getCenterOfMass: (shape) => {\n const b = need(shape, 'getCenterOfMass').bbox\n return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }\n },\n getSurfaceArea: () => 0,\n getLength: () => 0,\n\n // ── 校验与修复 ──\n isValid: () => true,\n unifySameDomain: (shape) => shape,\n healSolid: (shape) => shape,\n fixShape: (shape) => shape,\n fixFaceOrientations: (shape) => shape,\n removeDegenerateEdges: (shape) => shape,\n\n // ── IO ──\n importStep: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStep(mock)' }),\n exportStep: (shape) => {\n const s = need(shape, 'exportStep')\n return `brep-mock-engine STEP (mock)\\nshape #${shape}: ${s.tag}\\nFILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");`\n },\n importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),\n fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),\n\n // ── 面演化(L1 三员:mock 用底层布尔 + 空 evo) ──\n cutWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.cut(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n fuseWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.fuse(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n intersectWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.intersect(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── L1 补齐方法(mock 验证载体——查询类给简单实现,其余明确缺失暴露) ──\n dispose: () => undefined,\n composeTransform: () => unsupported('composeTransform'),\n makeEllipsoid: () => unsupported('makeEllipsoid'),\n makeTorus: () => unsupported('makeTorus'),\n makeVertex: (x, y, z) => alloc({ kind: 'edge', bbox: { xmin: x, ymin: y, zmin: z, xmax: x, ymax: y, zmax: z }, tag: `vertex(${x},${y},${z})` }),\n mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),\n surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 } },\n locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),\n copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),\n }\n return primitives\n}\n\n/** Assemble the brep-mock engine (sync registration — no async init). */\nexport function registerBrepMockEngine(): void {\n registerBrepEngine(BREP_MOCK_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREP_MOCK_ENGINE_ID,\n primitives: createBrepMockApi(),\n capabilities: {\n // brep-mock lacks evolution/heal/assembly — missing capabilities are exposed (§7.5).\n },\n }))\n}\n\n// §7.8 compile-time guard: createBrepMockApi's return type must satisfy BrepEngineApi.\ntype _AssertBrepMockApi = AssertSatisfiesBrepEngineApi<ReturnType<typeof createBrepMockApi>>\n"]}
1
+ {"version":3,"file":"brep-mock.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * engine/adapters/memory — 内存模拟 BREP 引擎(第二引擎,引擎切换验证用)\n *\n *\n * 目的:证明「引擎可切换」——不是生产内核,是注册表机制的验证载体。\n * 与 occt 适配器(adapters/occt.ts)同构注册;同一段 faijs 代码在\n * occt / memory 两个引擎下都能执行(构造 → 变换 → 布尔 → 三角化 → 导出),\n * 通过 mock STEP 文本标记区分当前引擎。\n *\n * 实现形态:句柄为自增 number;每条形状记录 { kind, bbox, tag }。\n * 只实现引擎切换测试所需的方法面(原语/变换/布尔/网格化/导出),\n * 其余方法抛「not implemented」——缺失即暴露,绝不伪造(§7.5 语义)。\n */\n\nimport { registerBrepEngine, type BrepEngine } from '../registry'\nimport type {\n BrepBoundingBox,\n BrepCurveParameters,\n BrepEdgeData,\n BrepEvolutionData,\n BrepHandle,\n BrepMeshResult,\n BrepUvBounds,\n\n} from '../types'\nimport type { BrepEngineApi, AssertSatisfiesBrepEngineApi } from '../primitives'\n\n/** brep-mock engine registration id. */\nexport const BREP_MOCK_ENGINE_ID = 'brep_mock'\n\n/** Internal shape record (the \"solid\" of an in-memory mock BREP). */\ninterface MemShape {\n kind: 'box' | 'sphere' | 'cylinder' | 'cone' | 'edge' | 'wire' | 'face' | 'solid' | 'compound'\n /** 轴对齐包围盒(近似真实几何,供 getBoundingBox / 导出用)。 */\n bbox: BrepBoundingBox\n /** 人类可读描述(导出标记用)。 */\n tag: string\n}\n\nfunction bboxOf(kind: MemShape['kind'], size: [number, number, number]): BrepBoundingBox {\n const [x, y, z] = size\n return { xmin: -x / 2, ymin: -y / 2, zmin: -z / 2, xmax: x / 2, ymax: y / 2, zmax: z / 2 }\n}\n\n/** 1×1×1 单位盒三角化(8 顶点 / 12 三角形;memory 引擎的 meshShape 输出)。 */\nconst UNIT_BOX_POSITIONS = new Float32Array([\n -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5,\n -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5,\n])\nconst UNIT_BOX_INDICES = new Uint32Array([\n 0, 2, 1, 0, 3, 2, 4, 5, 6, 4, 6, 7, 0, 1, 5, 0, 5, 4,\n 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 0, 4, 3, 4, 7,\n])\n\nfunction unitBoxMesh(): BrepMeshResult {\n return {\n positions: new Float32Array(UNIT_BOX_POSITIONS),\n normals: new Float32Array(24), // 占位法线(切换测试不校验法线)\n indices: new Uint32Array(UNIT_BOX_INDICES),\n vertexCount: 8,\n triangleCount: 12,\n }\n}\n\n/**\n * Build an in-memory mock BREP engine (a BrepEngineApi subset).\n * @returns the mock in-memory BREP engine API.\n */\nexport function createBrepMockApi(): BrepEngineApi {\n const shapes = new Map<number, MemShape>()\n let nextHandle = 1\n\n const alloc = (shape: MemShape): BrepHandle => {\n const h = nextHandle as BrepHandle\n nextHandle += 1\n shapes.set(h, shape)\n return h\n }\n\n const need = (h: BrepHandle, method: string): MemShape => {\n const s = shapes.get(h)\n if (!s) throw new Error(`[brep-mock-engine] ${method}: unknown handle ${h}`)\n return s\n }\n\n const unsupported = (method: string): never => {\n throw new Error(`[brep-mock-engine] ${method}() not implemented — engine-switch test only`)\n }\n\n /** 布尔合并 bbox(fuse/cut/common 的近似包围盒)。 */\n const mergeBbox = (a: BrepBoundingBox, b: BrepBoundingBox): BrepBoundingBox => ({\n xmin: Math.min(a.xmin, b.xmin),\n ymin: Math.min(a.ymin, b.ymin),\n zmin: Math.min(a.zmin, b.zmin),\n xmax: Math.max(a.xmax, b.xmax),\n ymax: Math.max(a.ymax, b.ymax),\n zmax: Math.max(a.zmax, b.zmax),\n })\n\n\n const primitive = (\n kind: MemShape['kind'],\n size: [number, number, number],\n tag: string,\n ): BrepHandle => alloc({ kind, bbox: bboxOf(kind, size), tag })\n\n const primitives: BrepEngineApi = {\n // ── 生命周期 ──\n release: () => undefined,\n\n // ── 实体图元 ──\n makeBox: (dx, dy, dz) => primitive('box', [dx, dy, dz], `box ${dx}x${dy}x${dz}`),\n makeBoxFromCorners: (c1, c2) => primitive('box',\n [Math.abs(c2.x - c1.x), Math.abs(c2.y - c1.y), Math.abs(c2.z - c1.z)],\n `box (${c1.x},${c1.y},${c1.z})→(${c2.x},${c2.y},${c2.z})`),\n makeCylinder: (radius, height) => primitive('cylinder', [radius * 2, radius * 2, height], `cylinder r=${radius} h=${height}`),\n makeSphere: (radius) => primitive('sphere', [radius * 2, radius * 2, radius * 2], `sphere r=${radius}`),\n makeCone: (r1, r2, height) => primitive('cone', [Math.max(r1, r2) * 2, Math.max(r1, r2) * 2, height], `cone r1=${r1} r2=${r2} h=${height}`),\n makeRectangle: (width, height) => primitive('face', [width, height, 0], `rectangle ${width}x${height}`),\n\n // ── 造型运算 ──\n extrude: (shape, dx, dy, dz) => {\n const s = need(shape, 'extrude')\n return alloc({ kind: 'solid', bbox: { ...s.bbox, xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz }, tag: `extrude(${s.tag})` })\n },\n revolveVec: (shape, _center, direction, angleDeg) => {\n // Mock approximation: revolve grows the bbox by sweeping the profile's\n // extent around the axis — approximate with the direction-scaled extent\n // (signature-level coverage only, like extrude above).\n const s = need(shape, 'revolveVec')\n const grow = (Math.abs(angleDeg) / 360) * Math.hypot(direction.x, direction.y, direction.z) * 2\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin - grow, ymin: s.bbox.ymin - grow, zmin: s.bbox.zmin,\n xmax: s.bbox.xmax + grow, ymax: s.bbox.ymax + grow, zmax: s.bbox.zmax,\n },\n tag: `revolveVec(${s.tag},a=${angleDeg})`,\n })\n },\n sew: (shapesIn, _tolerance) => {\n // Mock approximation: merge the parts' bboxes into one shell-ish solid.\n let bbox: BrepBoundingBox | null = null\n let tag = 'sew('\n for (const h of shapesIn) {\n const rec = need(h, 'sew')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),\n shell: (solid, _facesToRemove, thickness, _tolerance) => {\n // Mock approximation: shelling keeps the outer bbox and marks it hollow.\n const s = need(solid, 'shell')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `shell(${s.tag},t=${thickness})` })\n },\n hullFromPoints: (points, _tolerance) => {\n // Mock approximation: bbox of the point set as a solid.\n if (points.length === 0) return unsupported('hullFromPoints: empty point set')\n let xmin = Infinity, ymin = Infinity, zmin = Infinity\n let xmax = -Infinity, ymax = -Infinity, zmax = -Infinity\n for (const p of points) {\n xmin = Math.min(xmin, p.x); ymin = Math.min(ymin, p.y); zmin = Math.min(zmin, p.z)\n xmax = Math.max(xmax, p.x); ymax = Math.max(ymax, p.y); zmax = Math.max(zmax, p.z)\n }\n return alloc({ kind: 'solid', bbox: { xmin, ymin, zmin, xmax, ymax, zmax }, tag: `hullFromPoints(n=${points.length})` })\n },\n\n // ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──\n chamfer: (solid, edges, distance) => {\n const s = need(solid, 'chamfer')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamfer(${s.tag},d=${distance},e=${edges.length})` })\n },\n chamferDistAngle: (solid, edges, distance, angleDeg) => {\n const s = need(solid, 'chamferDistAngle')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferDA(${s.tag},d=${distance},a=${angleDeg},e=${edges.length})` })\n },\n fillet: (solid, edges, radius) => {\n const s = need(solid, 'fillet')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `fillet(${s.tag},r=${radius},e=${edges.length})` })\n },\n filletVariable: (solid, edge, startRadius, endRadius) => {\n const s = need(solid, 'filletVariable')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletVar(${s.tag},r=${startRadius}-${endRadius},e=1)` })\n },\n filletWithHistory: (solid, edges, radius, _hashes, _upper) => {\n const s = need(solid, 'filletWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `filletWH(${s.tag},r=${radius},e=${edges.length})` })\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── 布尔与分割 ──\n fuse: (a, b) => {\n const sa = need(a, 'fuse')\n const sb = need(b, 'fuse')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `fuse(${sa.tag},${sb.tag})` })\n },\n cut: (a, b) => {\n const sa = need(a, 'cut')\n return alloc({ kind: 'solid', bbox: { ...sa.bbox }, tag: `cut(${sa.tag},#${b})` })\n },\n common: (a, b) => {\n const sa = need(a, 'common')\n const sb = need(b, 'common')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `common(${sa.tag},${sb.tag})` })\n },\n intersect: (a, b) => {\n const sa = need(a, 'intersect')\n const sb = need(b, 'intersect')\n return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` })\n },\n sectionByPlane: (shape, _point, _normal) => {\n // Mock approximation: section curves keep the input bbox as a wire-ish record.\n const s = need(shape, 'sectionByPlane')\n return [alloc({ kind: 'wire', bbox: { ...s.bbox }, tag: `sectionByPlane(${s.tag})` })]\n },\n splitByPlane: (shape, _point, _normal) => {\n // Mock approximation: two halves share the input bbox (no real cut).\n const s = need(shape, 'splitByPlane')\n return {\n positive: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane+(${s.tag})` }),\n negative: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane-(${s.tag})` }),\n }\n },\n fuseAll: (shapesIn) => {\n let bbox: BrepBoundingBox | null = null\n let tag = 'fuseAll('\n for (const s of shapesIn) {\n const rec = need(s, 'fuseAll')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n tag += `${rec.tag},`\n }\n return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` })\n },\n\n // ── 变换 ──\n translate: (shape, dx, dy, dz) => {\n const s = need(shape, 'translate')\n return alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + dx, ymin: s.bbox.ymin + dy, zmin: s.bbox.zmin + dz,\n xmax: s.bbox.xmax + dx, ymax: s.bbox.ymax + dy, zmax: s.bbox.zmax + dz,\n },\n tag: `translate(${s.tag},${dx},${dy},${dz})`,\n })\n },\n scale: (shape, _center, factor) => {\n const s = need(shape, 'scale')\n return alloc({ kind: 'solid', bbox: {\n xmin: s.bbox.xmin * factor, ymin: s.bbox.ymin * factor, zmin: s.bbox.zmin * factor,\n xmax: s.bbox.xmax * factor, ymax: s.bbox.ymax * factor, zmax: s.bbox.zmax * factor,\n }, tag: `scale(${s.tag},${factor})` })\n },\n transform: (shape, _matrix) => {\n const s = need(shape, 'transform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `transform(${s.tag})` })\n },\n located: (shape, _matrix) => {\n const s = need(shape, 'located')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `located(${s.tag})` })\n },\n generalTransform: (shape, _matrix) => {\n const s = need(shape, 'generalTransform')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `generalTransform(${s.tag})` })\n },\n copy: (shape) => {\n const s = need(shape, 'copy')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `copy(${s.tag})` })\n },\n\n // ── 阵列(Phase 2 接口新增;mock 只重打标签/复制,不做真几何) ──\n linearPattern: (shape, direction, spacing, count) => {\n const s = need(shape, 'linearPattern')\n const list: BrepHandle[] = []\n for (let i = 0; i < count; i++) {\n list.push(alloc({\n kind: 'solid',\n bbox: {\n xmin: s.bbox.xmin + direction.x * spacing * i, ymin: s.bbox.ymin + direction.y * spacing * i, zmin: s.bbox.zmin + direction.z * spacing * i,\n xmax: s.bbox.xmax + direction.x * spacing * i, ymax: s.bbox.ymax + direction.y * spacing * i, zmax: s.bbox.zmax + direction.z * spacing * i,\n },\n tag: `linearPattern(${s.tag},${i})`,\n }))\n }\n return list\n },\n circularPattern: (shape, _center, _axis, _angleStep, _count) => {\n const s = need(shape, 'circularPattern')\n return [alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `circularPattern(${s.tag})` })]\n },\n gridPattern: (shape, directionX, directionY, spacingX, spacingY, countX, countY) => {\n const s = need(shape, 'gridPattern')\n return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `gridPattern(${s.tag},${countX}x${countY})` })\n },\n\n // ── 曲线构造 ──\n makeLineEdge: (start, end) => alloc({ kind: 'edge',\n bbox: {\n xmin: Math.min(start.x, end.x), ymin: Math.min(start.y, end.y), zmin: Math.min(start.z, end.z),\n xmax: Math.max(start.x, end.x), ymax: Math.max(start.y, end.y), zmax: Math.max(start.z, end.z),\n },\n tag: `line(${start.x},${start.y},${start.z})→(${end.x},${end.y},${end.z})` }),\n makeArcEdge: (start, mid, end) => {\n const xs = [start.x, mid.x, end.x]\n const ys = [start.y, mid.y, end.y]\n const zs = [start.z, mid.z, end.z]\n return alloc({ kind: 'edge', bbox: {\n xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs),\n xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs),\n }, tag: `arc` })\n },\n makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),\n makeBSplineEdge: (poles) => {\n // Bbox from the control polygon (a superset of a Bézier's hull; exact for\n // the shape's own bbox purposes and good enough for the mock's role as a\n // call-sequence recorder).\n const xs: number[] = []\n const ys: number[] = []\n const zs: number[] = []\n for (let i = 0; i + 2 < poles.length; i += 3) {\n xs.push(poles[i]!)\n ys.push(poles[i + 1]!)\n zs.push(poles[i + 2]!)\n }\n return alloc({\n kind: 'edge',\n bbox: xs.length > 0\n ? { xmin: Math.min(...xs), ymin: Math.min(...ys), zmin: Math.min(...zs), xmax: Math.max(...xs), ymax: Math.max(...ys), zmax: Math.max(...zs) }\n : bboxOf('edge', [1, 1, 1]),\n tag: 'bspline',\n })\n },\n curveSplit: (edge) => {\n const e = need(edge, 'curveSplit')\n return [\n alloc({ kind: 'edge', bbox: { ...e.bbox }, tag: `splitA(#${edge})` }),\n alloc({ kind: 'edge', bbox: { ...e.bbox }, tag: `splitB(#${edge})` }),\n ]\n },\n makeCircleEdge: (center, _normal, radius) => alloc({ kind: 'edge', bbox: bboxOf('edge', [radius * 2, radius * 2, 0]), tag: `circle(${center.x},${center.y},${center.z},r=${radius})` }),\n\n // ── 拓扑构造 ──\n makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),\n makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),\n makeCompound: (parts) => {\n let bbox: BrepBoundingBox | null = null\n for (const p of parts) {\n const rec = need(p, 'makeCompound')\n bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox }\n }\n return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` })\n },\n\n buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),\n addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),\n\n // ── 三角化(BREP→mesh 唯一出口) ──\n meshShape: () => unitBoxMesh(),\n wireframe: (): BrepEdgeData => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),\n\n // ── 拓扑查询 ──\n getSubShapes: () => [],\n subShapeHashes: () => [],\n hashCode: (shape) => shape % 2147483647,\n isSame: (a, b) => a === b,\n isSolid: () => true,\n shapeType: () => 'SOLID',\n shapeOrientation: () => 'forward',\n edgeToFaceMap: () => ({}),\n adjacentFaces: () => [],\n sharedEdges: () => [],\n\n // ── 几何求值 ──\n curveType: () => 'line',\n curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),\n curveTangent: () => ({ x: 1, y: 0, z: 0 }),\n curveParameters: (): BrepCurveParameters => ({ first: 0, last: 1 }),\n curveIsClosed: () => false,\n curveLength: () => 0,\n surfaceType: () => 'plane',\n surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),\n pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),\n uvBounds: (): BrepUvBounds => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),\n getFaceCylinderData: () => null,\n getNurbsCurveData: () => null,\n interpolatePoints: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'interpolatePoints' }),\n defeature: (shape) => { need(shape, 'defeature'); return shape },\n draft: (shape) => { need(shape, 'draft'); return shape },\n removeHolesFromFace: (face) => { need(face, 'removeHolesFromFace'); return face },\n reverseShape: (shape) => { need(shape, 'reverseShape'); return shape },\n projectEdges: () => unsupported('projectEdges'),\n\n // ── 测量 ──\n getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),\n getVolume: (shape) => {\n const b = need(shape, 'getVolume').bbox\n return (b.xmax - b.xmin) * (b.ymax - b.ymin) * (b.zmax - b.zmin)\n },\n getCenterOfMass: (shape) => {\n const b = need(shape, 'getCenterOfMass').bbox\n return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 }\n },\n getSurfaceArea: () => 0,\n getLength: () => 0,\n\n // ── 校验与修复 ──\n isValid: () => true,\n unifySameDomain: (shape) => shape,\n healSolid: (shape) => shape,\n fixShape: (shape) => shape,\n fixFaceOrientations: (shape) => shape,\n removeDegenerateEdges: (shape) => shape,\n\n // ── IO ──\n importStep: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStep(mock)' }),\n exportStep: (shape) => {\n const s = need(shape, 'exportStep')\n return `brep-mock-engine STEP (mock)\\nshape #${shape}: ${s.tag}\\nFILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");`\n },\n importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),\n fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),\n\n // ── 面演化(L1 三员:mock 用底层布尔 + 空 evo) ──\n cutWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.cut(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n fuseWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.fuse(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n intersectWithHistory: (a, b, _hashes, _upper) => {\n const result = primitives.intersect(a, b)\n const evo: BrepEvolutionData = { result, modified: [], generated: [], deleted: [] }\n return evo\n },\n\n // ── L1 补齐方法(mock 验证载体——查询类给简单实现,其余明确缺失暴露) ──\n dispose: () => undefined,\n composeTransform: () => unsupported('composeTransform'),\n makeEllipsoid: () => unsupported('makeEllipsoid'),\n makeTorus: () => unsupported('makeTorus'),\n makeVertex: (x, y, z) => alloc({ kind: 'edge', bbox: { xmin: x, ymin: y, zmin: z, xmax: x, ymax: y, zmax: z }, tag: `vertex(${x},${y},${z})` }),\n mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),\n surfaceCenterOfMass: (shape) => { const b = need(shape, 'surfaceCenterOfMass').bbox; return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 } },\n locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),\n copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),\n }\n return primitives\n}\n\n/** Assemble the brep-mock engine (sync registration — no async init). */\nexport function registerBrepMockEngine(): void {\n registerBrepEngine(BREP_MOCK_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREP_MOCK_ENGINE_ID,\n primitives: createBrepMockApi(),\n capabilities: {\n // brep-mock lacks evolution/heal/assembly — missing capabilities are exposed (§7.5).\n },\n }))\n}\n\n// §7.8 compile-time guard: createBrepMockApi's return type must satisfy BrepEngineApi.\ntype _AssertBrepMockApi = AssertSatisfiesBrepEngineApi<ReturnType<typeof createBrepMockApi>>\n"]}
@@ -22,4 +22,22 @@ export declare const BREPKIT_BREP_ENGINE_ID = "brepkit";
22
22
  export declare function registerBrepkitBrepEngine(): Promise<void>;
23
23
  /** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */
24
24
  export declare function ensureBrepkitDefaultEngine(): Promise<void>;
25
+ /** brepkit 网格实体后端 id —— 与 `defineOp.meshEngines` 的门禁名同源。 */
26
+ export declare const BREPKIT_MESH_ENGINE_ID = "brepkit";
27
+ /**
28
+ * 装配 brepkit **网格实体后端**(网格语义路径;与 BREP 槽独立)。
29
+ *
30
+ * 与 `registerBrepkitBrepEngine` 的关系:同一个 brepkit wasm 实例、同一个
31
+ * `createBrepkitPrimitives()` 对象(已按内核 memo 化,见其 GOTCHA),但走的是
32
+ * **mesh 语义**——逐三角形导入 → 缝合 → 共面合并 → 网格实体。
33
+ *
34
+ * 装与不装的区别:装了,`load` 的 mesh 路径产出的零件带近似拓扑(可选中面/边,
35
+ * 后续 mesh op 可作用于其上);不装,mesh 路径维持"裸网格、无拓扑"的历史行为。
36
+ * 这是**宿主装配事实**,不是错误(与"规范化失败必须报错"是两回事)。
37
+ *
38
+ * 幂等:已注册同名 mesh 引擎则跳过。
39
+ */
40
+ export declare function registerBrepkitMeshEngine(): Promise<void>;
41
+ /** 已注册任何网格实体后端则 no-op;否则注册 brepkit(宿主的显式缺省装配点)。 */
42
+ export declare function ensureBrepkitMeshBackend(): Promise<void>;
25
43
  //# sourceMappingURL=brepkit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+F/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE"}
1
+ {"version":3,"file":"brepkit.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsG/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE;AAID,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;;;;GAYG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAa/D;AAED,mDAAmD;AACnD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9D"}
@@ -7,8 +7,9 @@
7
7
  * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,
8
8
  * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。
9
9
  */
10
- import { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine } from '../registry.js';
10
+ import { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine, registerMeshEngine, getMeshSolidBackend, isMeshEngineRegistered, } from '../registry.js';
11
11
  import { createBrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel.js';
12
+ import { normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology } from '../../mesh-solid.js';
12
13
  /** brepkit 引擎注册 id。 */
13
14
  export const BREPKIT_BREP_ENGINE_ID = 'brepkit';
14
15
  /**
@@ -74,6 +75,13 @@ export async function registerBrepkitBrepEngine() {
74
75
  'hullFromPoints',
75
76
  'makeFace',
76
77
  'makeLineEdge',
78
+ // 2026-09-30 草图弧线修复(circumcircle 项序纠正)后,brepkit 的曲线构边族
79
+ // 几何实测正确:quarter/half/cw 弧长 = πr/2·span、makeCircleEdge 整圆 face 挤出
80
+ // πr²·L。逐名如实声明(声明 ⊆ 实例,engine-switch-p3 守卫)。
81
+ 'makeArcEdge',
82
+ 'makeBezierEdge',
83
+ 'makeCircleEdge',
84
+ 'makeWire',
77
85
  // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。
78
86
  'linearPattern',
79
87
  'circularPattern',
@@ -124,4 +132,41 @@ export async function ensureBrepkitDefaultEngine() {
124
132
  return;
125
133
  await registerBrepkitBrepEngine();
126
134
  }
135
+ // ── 网格实体后端(方案 2026-10-01 §3.3) ──
136
+ /** brepkit 网格实体后端 id —— 与 `defineOp.meshEngines` 的门禁名同源。 */
137
+ export const BREPKIT_MESH_ENGINE_ID = 'brepkit';
138
+ /**
139
+ * 装配 brepkit **网格实体后端**(网格语义路径;与 BREP 槽独立)。
140
+ *
141
+ * 与 `registerBrepkitBrepEngine` 的关系:同一个 brepkit wasm 实例、同一个
142
+ * `createBrepkitPrimitives()` 对象(已按内核 memo 化,见其 GOTCHA),但走的是
143
+ * **mesh 语义**——逐三角形导入 → 缝合 → 共面合并 → 网格实体。
144
+ *
145
+ * 装与不装的区别:装了,`load` 的 mesh 路径产出的零件带近似拓扑(可选中面/边,
146
+ * 后续 mesh op 可作用于其上);不装,mesh 路径维持"裸网格、无拓扑"的历史行为。
147
+ * 这是**宿主装配事实**,不是错误(与"规范化失败必须报错"是两回事)。
148
+ *
149
+ * 幂等:已注册同名 mesh 引擎则跳过。
150
+ */
151
+ export async function registerBrepkitMeshEngine() {
152
+ const primitives = await createBrepkitPrimitives();
153
+ if (isMeshEngineRegistered(BREPKIT_MESH_ENGINE_ID))
154
+ return;
155
+ const backend = {
156
+ id: BREPKIT_MESH_ENGINE_ID,
157
+ kernel: primitives,
158
+ ops: primitives.meshSolid,
159
+ normalize: (mesh, opts) => normalizeMeshSolid(backend, mesh, opts),
160
+ describe: (solid, opts) => describeMeshSolid(backend, solid, opts),
161
+ buildTopologyData: (result) => buildMeshSolidTopology(backend, result),
162
+ release: (solid) => { primitives.release(solid); },
163
+ };
164
+ registerMeshEngine(BREPKIT_MESH_ENGINE_ID, { id: BREPKIT_MESH_ENGINE_ID, meshSolid: backend });
165
+ }
166
+ /** 已注册任何网格实体后端则 no-op;否则注册 brepkit(宿主的显式缺省装配点)。 */
167
+ export async function ensureBrepkitMeshBackend() {
168
+ if (getMeshSolidBackend())
169
+ return;
170
+ await registerBrepkitMeshEngine();
171
+ }
127
172
  //# sourceMappingURL=brepkit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAA;AAExG,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,gBAAgB;gBAChB,4DAA4D;gBAC5D,oEAAoE;gBACpE,WAAW;gBACX,gBAAgB;gBAChB,WAAW;gBACX,iBAAiB;gBACjB,qBAAqB;gBACrB,iBAAiB;gBACjB,mBAAmB;gBACnB,cAAc;gBACd,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,oDAAoD;gBACpD,mEAAmE;gBACnE,0DAA0D;gBAC1D,qEAAqE;gBACrE,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,oDAAoD;gBACpD,8DAA8D;gBAC9D,8DAA8D;gBAC9D,gBAAgB;gBAChB,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;gBACV,6DAA6D;gBAC7D,+DAA+D;gBAC/D,8CAA8C;gBAC9C,SAAS;gBACT,WAAW;gBACX,uEAAuE;gBACvE,oEAAoE;gBACpE,yEAAyE;gBACzE,+EAA+E;gBAC/E,eAAe;gBACf,SAAS;gBACT,WAAW;gBACX,kBAAkB;gBAClB,uEAAuE;gBACvE,mFAAmF;gBACnF,0FAA0F;gBAC1F,wFAAwF;gBACxF,iDAAiD;gBACjD,gBAAgB;gBAChB,cAAc;gBACd,SAAS;gBACT,cAAc;aACf;YACD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC","sourcesContent":["/**\n * engine/adapters/brepkit — brepkit BREP 引擎适配器(对照 adapters/occt.ts 形态)\n *\n * 把 createBrepkitPrimitives 包装为 BrepEngine 注册进注册表。业务层只经注册表取\n * 引擎,不直接 import brepkit 初始化函数——引擎本体可整体替换(换适配器即换引擎)。\n *\n * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,\n * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。\n */\n\nimport { registerBrepEngine, isBrepEngineRegistered, hasBrepEngine, type BrepEngine } from '../registry'\nimport type { AssertSatisfiesBrepEngineApi } from '../primitives'\nimport { createBrepkitPrimitives, type BrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel'\n\n/** brepkit 引擎注册 id。 */\nexport const BREPKIT_BREP_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 createBrepkitPrimitives():wasm 装载完成后立即注册——注册返回后\n * provider 直接返回就绪实例。幂等:已注册则跳过。\n *\n * 能力表(设计文档 §5.2 v1 建议值,随单测逐项校正):\n * evolution 仅覆盖 fuse/cut/fillet(chamferWithHistory 未提供,诚实报错);\n * meshLift/assembly/advSurface 均为 false,命中即静态报错,禁止伪造。\n */\nexport async function registerBrepkitBrepEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isBrepEngineRegistered(BREPKIT_BREP_ENGINE_ID)) return\n registerBrepEngine(BREPKIT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREPKIT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n exact: true,\n // 面演化:逐核函数如实声明(Phase 0.2,不是族级布尔)。\n // brepkit 只实现 fillet/cut/fuse 三个 *WithHistory,其余(chamfer/intersect/\n // translate/rotate/mirror/scale/shell/offset/thicken)在\n // brepkit-kernel/brepkitKernel.ts:224-537 一律 unsupported(...)。\n // 声明里少写一项 = 让该 op 静默通过静态判定后死在运行时(红线违规)。\n evolution: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n methods: [\n 'addHolesInFace',\n // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——\n // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。\n 'getBoundingBox',\n // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、\n // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'surfaceCenterOfMass',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'cut',\n 'fixShape',\n 'fuse',\n 'fuseAll',\n 'hashCode',\n 'healSolid',\n 'intersect',\n 'makeCylinder',\n // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——\n // makeEllipsoid/makeTorus/makeVertex/mirror/shell;section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n // extrude 已于 B 批接线(makeRectangle 产出 knownFace → extrude 沿向量挤出,:446)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\n // 2026-09-26 B 批:brepkitKernel.hullFromPoints 真实现接线\n // (→ kernel.convexHull,brepkitKernel.ts:477)——convexHull op 由\n // engines:['occt'] 降级为 capabilities:['hullFromPoints'],故如实声明。\n 'hullFromPoints',\n 'makeFace',\n 'makeLineEdge',\n // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'scale',\n 'sewAndSolidify',\n 'surfaceNormal',\n 'surfaceType',\n 'translate',\n 'uvBounds',\n // 2026-09-26 A 批:brepkitKernel 已实现 dispose(GC 型 no-op,:226)与\n // copyShape(调 kernel.copySolid,:397)——此前未声明导致 torus/pattern 族/\n // clone 在静态判定被拒。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'dispose',\n 'copyShape',\n // 2026-09-26 B 批:brepkitKernel 真实现 makeRectangle(:436)/extrude(:446,要求\n // knownFace 输入——makeRectangle 产出的面已登记进 knownFaces,makeBaseBox 链可用)/\n // transform(:563)/generalTransform(:572,二者均经 cloneAndTransform 深拷贝+原地仿射,\n // 与 occt STEP-safe BRepBuilderAPI_Transform 同语义)。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'makeRectangle',\n 'extrude',\n 'transform',\n 'generalTransform',\n // 2026-09-26 C batch (section/drill/pocket/boss/mirrorJoin downgrade):\n // brepkitKernel real wiring - sectionByPlane(:492 returns face group, occt returns\n // edge/wire group; semantic diff noted), makeCompound(:668 virtual compound for non-solid\n // children), located(:566 drill cylinder placement), getSubShapes(:775 face selection).\n // declared <= instance (engine-switch-p3 guard).\n 'sectionByPlane',\n 'makeCompound',\n 'located',\n 'getSubShapes',\n ],\n heal: true,\n directEdit: true,\n advSurface: false,\n assembly: false,\n meshLift: false,\n exactMeasurement: true,\n brepExport: true,\n tessellationModel: 'extract-time',\n },\n }))\n}\n\n/** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerBrepkitBrepEngine()\n}\n\n// §7.8 编译期完整性守卫:brepkit 原语集合必须满足 BrepEngineApi。\n// 实现缺方法或签名不兼容 → tsc 在此报错列出缺失(与 occt 适配器同守卫)。\ntype _AssertBrepkitApi = AssertSatisfiesBrepEngineApi<BrepkitPrimitives>\n"]}
1
+ {"version":3,"file":"brepkit.js","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brepkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EACzD,kBAAkB,EAAE,mBAAmB,EAAE,sBAAsB,GAEhE,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,uBAAuB,EAA0B,MAAM,uCAAuC,CAAA;AAEvG,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAEhG,uBAAuB;AACvB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,kBAAkB,CAAC,sBAAsB,EAAE,KAAK,IAAyB,EAAE,CAAC,CAAC;QAC3E,EAAE,EAAE,sBAAsB;QAC1B,UAAU;QACV,YAAY,EAAE;YACZ,KAAK,EAAE,IAAI;YACX,kCAAkC;YAClC,oEAAoE;YACpE,uDAAuD;YACvD,+DAA+D;YAC/D,wCAAwC;YACxC,SAAS,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;YACrE,OAAO,EAAE;gBACP,gBAAgB;gBAChB,+EAA+E;gBAC/E,uEAAuE;gBACvE,gBAAgB;gBAChB,4DAA4D;gBAC5D,oEAAoE;gBACpE,WAAW;gBACX,gBAAgB;gBAChB,WAAW;gBACX,iBAAiB;gBACjB,qBAAqB;gBACrB,iBAAiB;gBACjB,mBAAmB;gBACnB,cAAc;gBACd,KAAK;gBACL,UAAU;gBACV,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,oDAAoD;gBACpD,mEAAmE;gBACnE,0DAA0D;gBAC1D,qEAAqE;gBACrE,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,oDAAoD;gBACpD,8DAA8D;gBAC9D,8DAA8D;gBAC9D,gBAAgB;gBAChB,UAAU;gBACV,cAAc;gBACd,uDAAuD;gBACvD,kEAAkE;gBAClE,6CAA6C;gBAC7C,aAAa;gBACb,gBAAgB;gBAChB,gBAAgB;gBAChB,UAAU;gBACV,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;gBACV,6DAA6D;gBAC7D,+DAA+D;gBAC/D,8CAA8C;gBAC9C,SAAS;gBACT,WAAW;gBACX,uEAAuE;gBACvE,oEAAoE;gBACpE,yEAAyE;gBACzE,+EAA+E;gBAC/E,eAAe;gBACf,SAAS;gBACT,WAAW;gBACX,kBAAkB;gBAClB,uEAAuE;gBACvE,mFAAmF;gBACnF,0FAA0F;gBAC1F,wFAAwF;gBACxF,iDAAiD;gBACjD,gBAAgB;gBAChB,cAAc;gBACd,SAAS;gBACT,cAAc;aACf;YACD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;AACL,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC;AAED,mCAAmC;AAEnC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAAA;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAClD,IAAI,sBAAsB,CAAC,sBAAsB,CAAC;QAAE,OAAM;IAC1D,MAAM,OAAO,GAAqB;QAChC,EAAE,EAAE,sBAAsB;QAC1B,MAAM,EAAE,UAAU;QAClB,GAAG,EAAE,UAAU,CAAC,SAAS;QACzB,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;QAClE,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;QAClE,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;QACtE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;KAClD,CAAA;IACD,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,sBAAsB,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,IAAI,mBAAmB,EAAE;QAAE,OAAM;IACjC,MAAM,yBAAyB,EAAE,CAAA;AACnC,CAAC","sourcesContent":["/**\n * engine/adapters/brepkit — brepkit BREP 引擎适配器(对照 adapters/occt.ts 形态)\n *\n * 把 createBrepkitPrimitives 包装为 BrepEngine 注册进注册表。业务层只经注册表取\n * 引擎,不直接 import brepkit 初始化函数——引擎本体可整体替换(换适配器即换引擎)。\n *\n * 小程序装配顺序(§6.1):Worker 启动时先 setBrepkitWasmInitFn + 本函数注册,\n * ensureOcctDefaultEngine 的动态 import('occt-wasm') 永不触发。\n */\n\nimport {\n registerBrepEngine, isBrepEngineRegistered, hasBrepEngine,\n registerMeshEngine, getMeshSolidBackend, isMeshEngineRegistered,\n type BrepEngine,\n} from '../registry'\nimport type { AssertSatisfiesBrepEngineApi } from '../primitives'\nimport { createBrepkitPrimitives, type BrepkitPrimitives } from '../../../brepkit-kernel/brepkitKernel'\nimport type { MeshSolidBackend } from '../../mesh-solid'\nimport { normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology } from '../../mesh-solid'\n\n/** brepkit 引擎注册 id。 */\nexport const BREPKIT_BREP_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit BREP 引擎(宿主启动时调用一次,幂等)。\n *\n * 预初始化 createBrepkitPrimitives():wasm 装载完成后立即注册——注册返回后\n * provider 直接返回就绪实例。幂等:已注册则跳过。\n *\n * 能力表(设计文档 §5.2 v1 建议值,随单测逐项校正):\n * evolution 仅覆盖 fuse/cut/fillet(chamferWithHistory 未提供,诚实报错);\n * meshLift/assembly/advSurface 均为 false,命中即静态报错,禁止伪造。\n */\nexport async function registerBrepkitBrepEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isBrepEngineRegistered(BREPKIT_BREP_ENGINE_ID)) return\n registerBrepEngine(BREPKIT_BREP_ENGINE_ID, async (): Promise<BrepEngine> => ({\n id: BREPKIT_BREP_ENGINE_ID,\n primitives,\n capabilities: {\n exact: true,\n // 面演化:逐核函数如实声明(Phase 0.2,不是族级布尔)。\n // brepkit 只实现 fillet/cut/fuse 三个 *WithHistory,其余(chamfer/intersect/\n // translate/rotate/mirror/scale/shell/offset/thicken)在\n // brepkit-kernel/brepkitKernel.ts:224-537 一律 unsupported(...)。\n // 声明里少写一项 = 让该 op 静默通过静态判定后死在运行时(红线违规)。\n evolution: ['fuseWithHistory', 'cutWithHistory', 'filletWithHistory'],\n methods: [\n 'addHolesInFace',\n // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——\n // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。\n 'getBoundingBox',\n // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、\n // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。\n 'getVolume',\n 'getSurfaceArea',\n 'getLength',\n 'getCenterOfMass',\n 'surfaceCenterOfMass',\n 'curveParameters',\n 'curvePointAtParam',\n 'curveTangent',\n 'cut',\n 'fixShape',\n 'fuse',\n 'fuseAll',\n 'hashCode',\n 'healSolid',\n 'intersect',\n 'makeCylinder',\n // Phase 3:brepkitKernel 真实现接线 5 个(wasm 导出同/可映射语义)——\n // makeEllipsoid/makeTorus/makeVertex/mirror/shell;section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n // extrude 已于 B 批接线(makeRectangle 产出 knownFace → extrude 沿向量挤出,:446)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\n // 2026-09-26 B 批:brepkitKernel.hullFromPoints 真实现接线\n // (→ kernel.convexHull,brepkitKernel.ts:477)——convexHull op 由\n // engines:['occt'] 降级为 capabilities:['hullFromPoints'],故如实声明。\n 'hullFromPoints',\n 'makeFace',\n 'makeLineEdge',\n // 2026-09-30 草图弧线修复(circumcircle 项序纠正)后,brepkit 的曲线构边族\n // 几何实测正确:quarter/half/cw 弧长 = πr/2·span、makeCircleEdge 整圆 face 挤出\n // πr²·L。逐名如实声明(声明 ⊆ 实例,engine-switch-p3 守卫)。\n 'makeArcEdge',\n 'makeBezierEdge',\n 'makeCircleEdge',\n 'makeWire',\n // Phase 2:brepkit wasm 已导出 pattern 三方法并已接线(brepkitKernel.ts 阵列族)。\n 'linearPattern',\n 'circularPattern',\n 'gridPattern',\n 'scale',\n 'sewAndSolidify',\n 'surfaceNormal',\n 'surfaceType',\n 'translate',\n 'uvBounds',\n // 2026-09-26 A 批:brepkitKernel 已实现 dispose(GC 型 no-op,:226)与\n // copyShape(调 kernel.copySolid,:397)——此前未声明导致 torus/pattern 族/\n // clone 在静态判定被拒。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'dispose',\n 'copyShape',\n // 2026-09-26 B 批:brepkitKernel 真实现 makeRectangle(:436)/extrude(:446,要求\n // knownFace 输入——makeRectangle 产出的面已登记进 knownFaces,makeBaseBox 链可用)/\n // transform(:563)/generalTransform(:572,二者均经 cloneAndTransform 深拷贝+原地仿射,\n // 与 occt STEP-safe BRepBuilderAPI_Transform 同语义)。声明 ⊆ 实例(engine-switch-p3 守卫)。\n 'makeRectangle',\n 'extrude',\n 'transform',\n 'generalTransform',\n // 2026-09-26 C batch (section/drill/pocket/boss/mirrorJoin downgrade):\n // brepkitKernel real wiring - sectionByPlane(:492 returns face group, occt returns\n // edge/wire group; semantic diff noted), makeCompound(:668 virtual compound for non-solid\n // children), located(:566 drill cylinder placement), getSubShapes(:775 face selection).\n // declared <= instance (engine-switch-p3 guard).\n 'sectionByPlane',\n 'makeCompound',\n 'located',\n 'getSubShapes',\n ],\n heal: true,\n directEdit: true,\n advSurface: false,\n assembly: false,\n meshLift: false,\n exactMeasurement: true,\n brepExport: true,\n tessellationModel: 'extract-time',\n },\n }))\n}\n\n/** 已注册任何 BREP 引擎则 no-op;否则注册 brepkit(可作为宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitDefaultEngine(): Promise<void> {\n if (hasBrepEngine()) return\n await registerBrepkitBrepEngine()\n}\n\n// ── 网格实体后端(方案 2026-10-01 §3.3) ──\n\n/** brepkit 网格实体后端 id —— 与 `defineOp.meshEngines` 的门禁名同源。 */\nexport const BREPKIT_MESH_ENGINE_ID = 'brepkit'\n\n/**\n * 装配 brepkit **网格实体后端**(网格语义路径;与 BREP 槽独立)。\n *\n * 与 `registerBrepkitBrepEngine` 的关系:同一个 brepkit wasm 实例、同一个\n * `createBrepkitPrimitives()` 对象(已按内核 memo 化,见其 GOTCHA),但走的是\n * **mesh 语义**——逐三角形导入 → 缝合 → 共面合并 → 网格实体。\n *\n * 装与不装的区别:装了,`load` 的 mesh 路径产出的零件带近似拓扑(可选中面/边,\n * 后续 mesh op 可作用于其上);不装,mesh 路径维持\"裸网格、无拓扑\"的历史行为。\n * 这是**宿主装配事实**,不是错误(与\"规范化失败必须报错\"是两回事)。\n *\n * 幂等:已注册同名 mesh 引擎则跳过。\n */\nexport async function registerBrepkitMeshEngine(): Promise<void> {\n const primitives = await createBrepkitPrimitives()\n if (isMeshEngineRegistered(BREPKIT_MESH_ENGINE_ID)) return\n const backend: MeshSolidBackend = {\n id: BREPKIT_MESH_ENGINE_ID,\n kernel: primitives,\n ops: primitives.meshSolid,\n normalize: (mesh, opts) => normalizeMeshSolid(backend, mesh, opts),\n describe: (solid, opts) => describeMeshSolid(backend, solid, opts),\n buildTopologyData: (result) => buildMeshSolidTopology(backend, result),\n release: (solid) => { primitives.release(solid) },\n }\n registerMeshEngine(BREPKIT_MESH_ENGINE_ID, { id: BREPKIT_MESH_ENGINE_ID, meshSolid: backend })\n}\n\n/** 已注册任何网格实体后端则 no-op;否则注册 brepkit(宿主的显式缺省装配点)。 */\nexport async function ensureBrepkitMeshBackend(): Promise<void> {\n if (getMeshSolidBackend()) return\n await registerBrepkitMeshEngine()\n}\n\n// §7.8 编译期完整性守卫:brepkit 原语集合必须满足 BrepEngineApi。\n// 实现缺方法或签名不兼容 → tsc 在此报错列出缺失(与 occt 适配器同守卫)。\ntype _AssertBrepkitApi = AssertSatisfiesBrepEngineApi<BrepkitPrimitives>\n"]}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/
5
5
  * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。
6
- * 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化
6
+ * 业务层(runtime/brep ops/api)只经注册表取引擎,不直接 import occt 初始化
7
7
  * 函数——引擎本体可整体替换(换一个适配器即换引擎)。
8
8
  *
9
9
  * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):
@@ -1 +1 @@
1
- {"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAmIzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
1
+ {"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAqIzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/
5
5
  * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。
6
- * 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化
6
+ * 业务层(runtime/brep ops/api)只经注册表取引擎,不直接 import occt 初始化
7
7
  * 函数——引擎本体可整体替换(换一个适配器即换引擎)。
8
8
  *
9
9
  * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):
@@ -21,7 +21,7 @@ export const OCCT_BREP_ENGINE_ID = 'occt';
21
21
  /**
22
22
  * OCCT 实际提供的 `*WithHistory` 核函数名(Phase 0.2:逐核函数如实声明)。
23
23
  *
24
- * 12 个全部由 `occt-wasm@3.8.4` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。
24
+ * 12 个全部由 `occt-wasm@5.6.0` 提供(`dist/index.d.ts` 的 `*WithHistory` 声明)。
25
25
  * L1 契约只含前三员 + filletWithHistory(双方都有对齐实现);其余 8 个是 occt
26
26
  * 平台面能力(brepkit 无对应 API),存在性由本能力表如实声明,op 侧用
27
27
  * `engines: ['occt']`(Phase 5 D11)表达平台归属。
@@ -74,6 +74,7 @@ const OCCT_METHOD_KINDS = [
74
74
  'intersect',
75
75
  'fuseAll',
76
76
  'makeArcEdge',
77
+ 'makeCircleEdge',
77
78
  'makeBezierEdge',
78
79
  'makeCylinder',
79
80
  'makeEllipsoid',
@@ -82,6 +83,7 @@ const OCCT_METHOD_KINDS = [
82
83
  'makeLineEdge',
83
84
  'makeTorus',
84
85
  'makeVertex',
86
+ 'makeWire',
85
87
  'makeWireFromMixed',
86
88
  'buildEdgeOnSurface',
87
89
  'addHolesInFace',
@@ -1 +1 @@
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;AAExG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAA;AAE3E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAEzC;;;;;;;GAOG;AACH,MAAM,oBAAoB,GAAG;IAC3B,iBAAiB;IACjB,gBAAgB;IAChB,sBAAsB;IACtB,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;CAC2B,CAAA;AAEjD;;;;;;;;;;GAUG;AACH,MAAM,iBAAiB,GAAG;IACxB,eAAe;IACf,iBAAiB;IACjB,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,OAAO;IACP,eAAe;IACf,OAAO;IACP,SAAS;IACT,MAAM;IACN,cAAc;IACd,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,MAAM;IACN,KAAK;IACL,WAAW;IACX,SAAS;IACT,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,eAAe;IACf,UAAU;IACV,mBAAmB;IACnB,cAAc;IACd,WAAW;IACX,YAAY;IACZ,mBAAmB;IACnB,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,KAAK;IACL,gBAAgB;IAChB,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,qBAAqB;IACrB,SAAS;IACT,uBAAuB;IACvB,UAAU;IACV,OAAO;IACP,iBAAiB;IACjB,mBAAmB;IACnB,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,WAAW;IACX,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,UAAU;IACV,+DAA+D;IAC/D,gEAAgE;IAChE,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,WAAW;IACX,iBAAiB;IACjB,kBAAkB;IAClB,mCAAmC;IACnC,+BAA+B;IAC/B,6BAA6B;IAC7B,WAAW;IACX,oBAAoB;IACpB,oBAAoB;IACpB,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,uDAAuD;IACvD,SAAS;IACT,kBAAkB;IAClB,QAAQ;IACR,gBAAgB;IAChB,sEAAsE;IACtE,+DAA+D;IAC/D,kEAAkE;IAClE,WAAW;IACX,kBAAkB;IAClB,+FAA+F;IAC/F,qGAAqG;IACrG,oFAAoF;IACpF,gBAAgB;IAChB,cAAc;IACd,SAAS;IACT,cAAc;CAC8B,CAAA;AAE9C;;;;;;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;QACV,YAAY,EAAE;YACZ,2CAA2C;YAC3C,SAAS,EAAE,oBAAoB;YAC/B,+CAA+C;YAC/C,OAAO,EAAE,iBAAiB;YAC1B,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;YACd,kEAAkE;YAClE,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,IAAI;YACtB,iBAAiB,EAAE,cAAc;SAClC;KACF,CAAC,CAAC,CAAA;IACH,qEAAqE;IACrE,4DAA4D;IAC5D,qDAAqD;IACrD,+BAA+B;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,aAAa,EAAE;QAAE,OAAM;IAC3B,MAAM,sBAAsB,EAAE,CAAA;AAChC,CAAC","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/stdlib)只经注册表取引擎,不直接 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@3.8.4` 提供(`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 'makeBezierEdge',\n 'makeCylinder',\n 'makeEllipsoid',\n 'makeFace',\n 'makeFaceOnSurface',\n 'makeLineEdge',\n 'makeTorus',\n 'makeVertex',\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":"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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"]}
@@ -11,7 +11,7 @@
11
11
  * - 禁止任何 `as BrepEngineApi` 跨层断言(守卫见 §5 守卫清单)。
12
12
  * - 三个适配器的编译期断言 `_Assert*Api` 由此全部获得真校验力。
13
13
  */
14
- import type { BrepBoundingBox, BrepCurveParameters, BrepEdgeData, BrepEvolutionData, BrepHandle, BrepMeshResult, BrepSubShapeType, BrepTessellateOptions, BrepUvBounds, BrepVec3 } from './types.js';
14
+ import type { BrepBoundingBox, BrepCurveParameters, BrepEdgeData, BrepEvolutionData, BrepHandle, BrepMeshResult, BrepNurbsCurveData, BrepSubShapeType, BrepTessellateOptions, BrepUvBounds, BrepVec3 } from './types.js';
15
15
  /**
16
16
  * BREP 引擎原语契约(L1 核心面)。所有句柄参数/返回值均为 BrepHandle(不透明值,§6.3)。
17
17
  * 引擎实现(occt/brepkit 适配器)负责内部句柄形态与 BrepHandle 的转换,以及方言消化
@@ -108,7 +108,24 @@ export interface BrepEngineApi {
108
108
  makeLineEdge(start: BrepVec3, end: BrepVec3): BrepHandle;
109
109
  makeArcEdge(start: BrepVec3, mid: BrepVec3, end: BrepVec3): BrepHandle;
110
110
  makeBezierEdge(controlPoints: BrepVec3[]): BrepHandle;
111
+ /**
112
+ * Exact NURBS edge from raw control data — the write-side counterpart of
113
+ * `getNurbsCurveData`, so a rational / multi-span curve survives a round trip
114
+ * instead of being tessellated.
115
+ *
116
+ * `poles` is flat `[x,y,z, …]`; `knots`/`multiplicities` are parallel (the
117
+ * expanded knot vector is `knots[i]` repeated `multiplicities[i]` times). The
118
+ * built edge spans the WHOLE curve — to reproduce an edge that is a sub-range
119
+ * of its basis curve, trim it with `curveSplit`.
120
+ */
121
+ makeBSplineEdge(poles: number[], weights: number[], knots: number[], multiplicities: number[], degree: number, periodic?: boolean): BrepHandle;
111
122
  makeCircleEdge(center: BrepVec3, normal: BrepVec3, radius: number): BrepHandle;
123
+ /**
124
+ * Split an edge at an interior parameter into its two sub-edges, in order.
125
+ * The parameter must be STRICTLY inside the edge's domain — splitting at an
126
+ * end is rejected by the kernel rather than returning a degenerate pair.
127
+ */
128
+ curveSplit(edge: BrepHandle, param: number): [BrepHandle, BrepHandle];
112
129
  makeWire(edges: BrepHandle[]): BrepHandle;
113
130
  makeFace(wire: BrepHandle): BrepHandle;
114
131
  makeCompound(shapes: BrepHandle[]): BrepHandle;
@@ -151,12 +168,17 @@ export interface BrepEngineApi {
151
168
  getFaceCylinderData(face: BrepHandle): {
152
169
  radius: number;
153
170
  } | null;
154
- /** Phase 1 钉死返回形态(topologyExt 读 degree/periodic/rational)。 */
155
- getNurbsCurveData(edge: BrepHandle): {
156
- degree: number;
157
- periodic: boolean;
158
- rational: boolean;
159
- } | null;
171
+ /**
172
+ * NURBS control data of the edge's basis curve, or `null` for the analytic
173
+ * kinds (line / circle / ellipse / hyperbola / parabola).
174
+ *
175
+ * ⚠️ Two measured behaviours (2026-09-29) that the name does not imply:
176
+ * · it THROWS — it is not a nullable getter — when the edge is not a B-spline
177
+ * or Bézier, so callers must guard, not just null-check;
178
+ * · it returns the WHOLE basis curve, while `curveParameters` returns the
179
+ * EDGE's trim range on it; rebuilding without the trim is not faithful.
180
+ */
181
+ getNurbsCurveData(edge: BrepHandle): BrepNurbsCurveData | null;
160
182
  interpolatePoints(points: BrepVec3[], degree: number): BrepHandle;
161
183
  /** 去特征(移除面集合)。 */
162
184
  defeature(shape: BrepHandle, faces: BrepHandle[]): BrepHandle;