@faicad/faijs 0.16.1 → 0.17.0

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 (490) hide show
  1. package/LICENSE +4 -5
  2. package/NOTICE +5 -6
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +19 -1
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/assembly/entities.d.ts +1 -1
  7. package/dist/api/assembly/entities.d.ts.map +1 -1
  8. package/dist/api/assembly/entities.js.map +1 -1
  9. package/dist/api/assembly/joints.d.ts +2 -2
  10. package/dist/api/assembly/joints.d.ts.map +1 -1
  11. package/dist/api/assembly/joints.js +2 -2
  12. package/dist/api/assembly/joints.js.map +1 -1
  13. package/dist/api/assembly/lower.d.ts +1 -1
  14. package/dist/api/assembly/lower.d.ts.map +1 -1
  15. package/dist/api/assembly/lower.js.map +1 -1
  16. package/dist/api/assembly/pose.d.ts +3 -3
  17. package/dist/api/assembly/pose.d.ts.map +1 -1
  18. package/dist/api/assembly/pose.js +1 -1
  19. package/dist/api/assembly/pose.js.map +1 -1
  20. package/dist/api/assembly/preview.d.ts +1 -1
  21. package/dist/api/assembly/preview.d.ts.map +1 -1
  22. package/dist/api/assembly/preview.js +1 -1
  23. package/dist/api/assembly/preview.js.map +1 -1
  24. package/dist/api/assembly/solve.d.ts.map +1 -1
  25. package/dist/api/assembly/solve.js +3 -3
  26. package/dist/api/assembly/solve.js.map +1 -1
  27. package/dist/api/assembly/solvers/assembly-tree.d.ts +98 -0
  28. package/dist/api/assembly/solvers/assembly-tree.d.ts.map +1 -0
  29. package/dist/api/assembly/solvers/assembly-tree.js +130 -0
  30. package/dist/api/assembly/solvers/assembly-tree.js.map +1 -0
  31. package/dist/api/assembly/solvers/chain-solver.d.ts +27 -0
  32. package/dist/api/assembly/solvers/chain-solver.d.ts.map +1 -0
  33. package/dist/api/assembly/solvers/chain-solver.js +330 -0
  34. package/dist/api/assembly/solvers/chain-solver.js.map +1 -0
  35. package/dist/api/assembly/solvers/global-solver.js +2 -2
  36. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  37. package/dist/api/assembly/solvers/joints-kinematics.d.ts +308 -0
  38. package/dist/api/assembly/solvers/joints-kinematics.d.ts.map +1 -0
  39. package/dist/api/assembly/solvers/joints-kinematics.js +643 -0
  40. package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -0
  41. package/dist/api/assembly/solvers/quat.d.ts +35 -0
  42. package/dist/api/assembly/solvers/quat.d.ts.map +1 -0
  43. package/dist/api/assembly/solvers/quat.js +84 -0
  44. package/dist/api/assembly/solvers/quat.js.map +1 -0
  45. package/dist/api/assembly/solvers/types.d.ts +33 -0
  46. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  47. package/dist/api/assembly/solvers/types.js.map +1 -1
  48. package/dist/api/boolean.d.ts.map +1 -1
  49. package/dist/api/boolean.js +3 -4
  50. package/dist/api/boolean.js.map +1 -1
  51. package/dist/api/brep-mirror/booleanFns.d.ts +40 -0
  52. package/dist/api/brep-mirror/booleanFns.d.ts.map +1 -0
  53. package/dist/api/brep-mirror/booleanFns.js +99 -0
  54. package/dist/api/brep-mirror/booleanFns.js.map +1 -0
  55. package/dist/api/brep-mirror/brepHelpers.d.ts +55 -0
  56. package/dist/api/brep-mirror/brepHelpers.d.ts.map +1 -0
  57. package/dist/api/brep-mirror/brepHelpers.js +131 -0
  58. package/dist/api/brep-mirror/brepHelpers.js.map +1 -0
  59. package/dist/api/brep-mirror/compoundFns.d.ts +47 -0
  60. package/dist/api/brep-mirror/compoundFns.d.ts.map +1 -0
  61. package/dist/api/brep-mirror/compoundFns.js +300 -0
  62. package/dist/api/brep-mirror/compoundFns.js.map +1 -0
  63. package/dist/api/brep-mirror/healingFns.d.ts +78 -0
  64. package/dist/api/brep-mirror/healingFns.d.ts.map +1 -0
  65. package/dist/api/brep-mirror/healingFns.js +294 -0
  66. package/dist/api/brep-mirror/healingFns.js.map +1 -0
  67. package/dist/api/brep-mirror/hullFns.d.ts +20 -0
  68. package/dist/api/brep-mirror/hullFns.d.ts.map +1 -0
  69. package/dist/api/brep-mirror/hullFns.js +46 -0
  70. package/dist/api/brep-mirror/hullFns.js.map +1 -0
  71. package/dist/api/brep-mirror/patternFns.d.ts +43 -0
  72. package/dist/api/brep-mirror/patternFns.d.ts.map +1 -0
  73. package/dist/api/brep-mirror/patternFns.js +178 -0
  74. package/dist/api/brep-mirror/patternFns.js.map +1 -0
  75. package/dist/api/brep-mirror/primitiveFns.d.ts +42 -0
  76. package/dist/api/brep-mirror/primitiveFns.d.ts.map +1 -0
  77. package/dist/api/brep-mirror/primitiveFns.js +104 -0
  78. package/dist/api/brep-mirror/primitiveFns.js.map +1 -0
  79. package/dist/api/brep-mirror/roofFns.d.ts +24 -0
  80. package/dist/api/brep-mirror/roofFns.d.ts.map +1 -0
  81. package/dist/api/brep-mirror/roofFns.js +229 -0
  82. package/dist/api/brep-mirror/roofFns.js.map +1 -0
  83. package/dist/api/brep-mirror/straightSkeleton.d.ts +36 -0
  84. package/dist/api/brep-mirror/straightSkeleton.d.ts.map +1 -0
  85. package/dist/api/brep-mirror/straightSkeleton.js +443 -0
  86. package/dist/api/brep-mirror/straightSkeleton.js.map +1 -0
  87. package/dist/api/brep-mirror/sweepFns.d.ts +55 -0
  88. package/dist/api/brep-mirror/sweepFns.d.ts.map +1 -0
  89. package/dist/api/brep-mirror/sweepFns.js +200 -0
  90. package/dist/api/brep-mirror/sweepFns.js.map +1 -0
  91. package/dist/api/brep-mirror/threadFns.d.ts +15 -0
  92. package/dist/api/brep-mirror/threadFns.d.ts.map +1 -1
  93. package/dist/api/brep-mirror/threadFns.js +37 -2
  94. package/dist/api/brep-mirror/threadFns.js.map +1 -1
  95. package/dist/api/brep-mirror/topologyFns.d.ts +74 -0
  96. package/dist/api/brep-mirror/topologyFns.d.ts.map +1 -0
  97. package/dist/api/brep-mirror/topologyFns.js +273 -0
  98. package/dist/api/brep-mirror/topologyFns.js.map +1 -0
  99. package/dist/api/brep-topology.d.ts +190 -0
  100. package/dist/api/brep-topology.d.ts.map +1 -0
  101. package/dist/api/brep-topology.js +337 -0
  102. package/dist/api/brep-topology.js.map +1 -0
  103. package/dist/api/brepjs-compat/constants.d.ts +11 -0
  104. package/dist/api/brepjs-compat/constants.d.ts.map +1 -0
  105. package/dist/api/brepjs-compat/constants.js +11 -0
  106. package/dist/api/brepjs-compat/constants.js.map +1 -0
  107. package/dist/api/brepjs-compat/index.d.ts +19 -232
  108. package/dist/api/brepjs-compat/index.d.ts.map +1 -1
  109. package/dist/api/brepjs-compat/index.js +19 -286
  110. package/dist/api/brepjs-compat/index.js.map +1 -1
  111. package/dist/api/brepjs-compat/planeOps.d.ts +98 -0
  112. package/dist/api/brepjs-compat/planeOps.d.ts.map +1 -0
  113. package/dist/api/brepjs-compat/planeOps.js +170 -0
  114. package/dist/api/brepjs-compat/planeOps.js.map +1 -0
  115. package/dist/api/brepjs-compat/planeTypes.d.ts +24 -0
  116. package/dist/api/brepjs-compat/planeTypes.d.ts.map +1 -0
  117. package/dist/api/brepjs-compat/planeTypes.js +8 -0
  118. package/dist/api/brepjs-compat/planeTypes.js.map +1 -0
  119. package/dist/api/brepjs-compat/types.d.ts +64 -0
  120. package/dist/api/brepjs-compat/types.d.ts.map +1 -0
  121. package/dist/api/brepjs-compat/types.js +48 -0
  122. package/dist/api/brepjs-compat/types.js.map +1 -0
  123. package/dist/api/brepjs-compat/vecOps.d.ts +124 -0
  124. package/dist/api/brepjs-compat/vecOps.d.ts.map +1 -0
  125. package/dist/api/brepjs-compat/vecOps.js +202 -0
  126. package/dist/api/brepjs-compat/vecOps.js.map +1 -0
  127. package/dist/api/chamfer.d.ts +5 -0
  128. package/dist/api/chamfer.d.ts.map +1 -1
  129. package/dist/api/chamfer.js +13 -8
  130. package/dist/api/chamfer.js.map +1 -1
  131. package/dist/api/compound-geom.d.ts.map +1 -1
  132. package/dist/api/compound-geom.js +8 -2
  133. package/dist/api/compound-geom.js.map +1 -1
  134. package/dist/api/draft.d.ts +69 -0
  135. package/dist/api/draft.d.ts.map +1 -0
  136. package/dist/api/draft.js +109 -0
  137. package/dist/api/draft.js.map +1 -0
  138. package/dist/api/edge-ref.d.ts.map +1 -1
  139. package/dist/api/edge-ref.js +2 -2
  140. package/dist/api/edge-ref.js.map +1 -1
  141. package/dist/api/engrave.d.ts.map +1 -1
  142. package/dist/api/engrave.js +2 -3
  143. package/dist/api/engrave.js.map +1 -1
  144. package/dist/api/extrude.d.ts.map +1 -1
  145. package/dist/api/extrude.js +28 -13
  146. package/dist/api/extrude.js.map +1 -1
  147. package/dist/api/face-ref.d.ts.map +1 -1
  148. package/dist/api/face-ref.js +2 -2
  149. package/dist/api/face-ref.js.map +1 -1
  150. package/dist/api/feature-repair.d.ts +137 -0
  151. package/dist/api/feature-repair.d.ts.map +1 -0
  152. package/dist/api/feature-repair.js +221 -0
  153. package/dist/api/feature-repair.js.map +1 -0
  154. package/dist/api/fillet-variable.d.ts +35 -0
  155. package/dist/api/fillet-variable.d.ts.map +1 -0
  156. package/dist/api/fillet-variable.js +71 -0
  157. package/dist/api/fillet-variable.js.map +1 -0
  158. package/dist/api/fillet.d.ts +3 -0
  159. package/dist/api/fillet.d.ts.map +1 -1
  160. package/dist/api/fillet.js +7 -4
  161. package/dist/api/fillet.js.map +1 -1
  162. package/dist/api/generated/2d.d.ts +1 -13
  163. package/dist/api/generated/2d.d.ts.map +1 -1
  164. package/dist/api/generated/2d.js +6 -1
  165. package/dist/api/generated/2d.js.map +1 -1
  166. package/dist/api/generated/brepjs/index.d.ts +298 -298
  167. package/dist/api/generated/brepjs/index.d.ts.map +1 -1
  168. package/dist/api/generated/brepjs/index.js +183 -183
  169. package/dist/api/generated/brepjs/index.js.map +1 -1
  170. package/dist/api/generated/core.d.ts +3 -123
  171. package/dist/api/generated/core.d.ts.map +1 -1
  172. package/dist/api/generated/core.js +2 -81
  173. package/dist/api/generated/core.js.map +1 -1
  174. package/dist/api/generated/gear.d.ts +1 -15
  175. package/dist/api/generated/gear.d.ts.map +1 -1
  176. package/dist/api/generated/gear.js +6 -3
  177. package/dist/api/generated/gear.js.map +1 -1
  178. package/dist/api/generated/io.d.ts +1 -13
  179. package/dist/api/generated/io.d.ts.map +1 -1
  180. package/dist/api/generated/io.js +6 -1
  181. package/dist/api/generated/io.js.map +1 -1
  182. package/dist/api/generated/kernel.d.ts +1 -39
  183. package/dist/api/generated/kernel.d.ts.map +1 -1
  184. package/dist/api/generated/kernel.js +6 -4
  185. package/dist/api/generated/kernel.js.map +1 -1
  186. package/dist/api/generated/measurement.d.ts +53 -97
  187. package/dist/api/generated/measurement.d.ts.map +1 -1
  188. package/dist/api/generated/measurement.js +48 -143
  189. package/dist/api/generated/measurement.js.map +1 -1
  190. package/dist/api/generated/ns.d.ts +1 -10
  191. package/dist/api/generated/ns.d.ts.map +1 -1
  192. package/dist/api/generated/ns.js +2 -10
  193. package/dist/api/generated/ns.js.map +1 -1
  194. package/dist/api/generated/operations.d.ts +65 -110
  195. package/dist/api/generated/operations.d.ts.map +1 -1
  196. package/dist/api/generated/operations.js +132 -80
  197. package/dist/api/generated/operations.js.map +1 -1
  198. package/dist/api/generated/projection.d.ts +1 -8
  199. package/dist/api/generated/projection.d.ts.map +1 -1
  200. package/dist/api/generated/projection.js +6 -4
  201. package/dist/api/generated/projection.js.map +1 -1
  202. package/dist/api/generated/query.d.ts +1 -9
  203. package/dist/api/generated/query.d.ts.map +1 -1
  204. package/dist/api/generated/query.js +6 -1
  205. package/dist/api/generated/query.js.map +1 -1
  206. package/dist/api/generated/script-face-manifest.d.ts +2 -0
  207. package/dist/api/generated/script-face-manifest.d.ts.map +1 -1
  208. package/dist/api/generated/script-face-manifest.js +34 -22
  209. package/dist/api/generated/script-face-manifest.js.map +1 -1
  210. package/dist/api/generated/script-face.d.ts +52 -27
  211. package/dist/api/generated/script-face.d.ts.map +1 -1
  212. package/dist/api/generated/script-face.js +18 -4
  213. package/dist/api/generated/script-face.js.map +1 -1
  214. package/dist/api/generated/sketching.d.ts +4 -7
  215. package/dist/api/generated/sketching.d.ts.map +1 -1
  216. package/dist/api/generated/sketching.js +10 -8
  217. package/dist/api/generated/sketching.js.map +1 -1
  218. package/dist/api/generated/text.d.ts +1 -6
  219. package/dist/api/generated/text.d.ts.map +1 -1
  220. package/dist/api/generated/text.js +6 -3
  221. package/dist/api/generated/text.js.map +1 -1
  222. package/dist/api/generated/topology.d.ts +77 -175
  223. package/dist/api/generated/topology.d.ts.map +1 -1
  224. package/dist/api/generated/topology.js +172 -131
  225. package/dist/api/generated/topology.js.map +1 -1
  226. package/dist/api/geom.d.ts.map +1 -1
  227. package/dist/api/geom.js +2 -2
  228. package/dist/api/geom.js.map +1 -1
  229. package/dist/api/helix.d.ts +51 -0
  230. package/dist/api/helix.d.ts.map +1 -0
  231. package/dist/api/helix.js +63 -0
  232. package/dist/api/helix.js.map +1 -0
  233. package/dist/api/import-step.d.ts.map +1 -1
  234. package/dist/api/import-step.js +6 -2
  235. package/dist/api/import-step.js.map +1 -1
  236. package/dist/api/index.d.ts +18 -5
  237. package/dist/api/index.d.ts.map +1 -1
  238. package/dist/api/index.js +29 -12
  239. package/dist/api/index.js.map +1 -1
  240. package/dist/api/internal/compat-op.d.ts +10 -0
  241. package/dist/api/internal/compat-op.d.ts.map +1 -1
  242. package/dist/api/internal/compat-op.js +9 -3
  243. package/dist/api/internal/compat-op.js.map +1 -1
  244. package/dist/api/internal/compat-projection.d.ts +4 -4
  245. package/dist/api/internal/compat-projection.js +7 -7
  246. package/dist/api/internal/compat-projection.js.map +1 -1
  247. package/dist/api/internal/l3-bridge.d.ts +75 -42
  248. package/dist/api/internal/l3-bridge.d.ts.map +1 -1
  249. package/dist/api/internal/l3-bridge.js +105 -50
  250. package/dist/api/internal/l3-bridge.js.map +1 -1
  251. package/dist/api/internal/profile-wire.d.ts +31 -0
  252. package/dist/api/internal/profile-wire.d.ts.map +1 -0
  253. package/dist/api/internal/profile-wire.js +37 -0
  254. package/dist/api/internal/profile-wire.js.map +1 -0
  255. package/dist/api/internal/replica-role-table.js +2 -2
  256. package/dist/api/internal/replica-role-table.js.map +1 -1
  257. package/dist/api/loft.d.ts +66 -0
  258. package/dist/api/loft.d.ts.map +1 -0
  259. package/dist/api/loft.js +111 -0
  260. package/dist/api/loft.js.map +1 -0
  261. package/dist/api/measurement/index.d.ts +51 -0
  262. package/dist/api/measurement/index.d.ts.map +1 -0
  263. package/dist/api/measurement/index.js +71 -0
  264. package/dist/api/measurement/index.js.map +1 -0
  265. package/dist/api/occt-kernel-bridge.d.ts +5 -8
  266. package/dist/api/occt-kernel-bridge.d.ts.map +1 -1
  267. package/dist/api/occt-kernel-bridge.js +18 -14
  268. package/dist/api/occt-kernel-bridge.js.map +1 -1
  269. package/dist/api/pattern.d.ts.map +1 -1
  270. package/dist/api/pattern.js +3 -4
  271. package/dist/api/pattern.js.map +1 -1
  272. package/dist/api/place.d.ts.map +1 -1
  273. package/dist/api/place.js +2 -4
  274. package/dist/api/place.js.map +1 -1
  275. package/dist/api/primitives.d.ts.map +1 -1
  276. package/dist/api/primitives.js +3 -4
  277. package/dist/api/primitives.js.map +1 -1
  278. package/dist/api/replicate.d.ts +28 -1
  279. package/dist/api/replicate.d.ts.map +1 -1
  280. package/dist/api/replicate.js +29 -19
  281. package/dist/api/replicate.js.map +1 -1
  282. package/dist/api/result.d.ts +6 -11
  283. package/dist/api/result.d.ts.map +1 -1
  284. package/dist/api/result.js +6 -11
  285. package/dist/api/result.js.map +1 -1
  286. package/dist/api/revolve.d.ts.map +1 -1
  287. package/dist/api/revolve.js +15 -14
  288. package/dist/api/revolve.js.map +1 -1
  289. package/dist/api/screw.d.ts +3 -0
  290. package/dist/api/screw.d.ts.map +1 -1
  291. package/dist/api/screw.js +9 -4
  292. package/dist/api/screw.js.map +1 -1
  293. package/dist/api/sdf.d.ts +1 -1
  294. package/dist/api/section-by-plane.d.ts +42 -0
  295. package/dist/api/section-by-plane.d.ts.map +1 -0
  296. package/dist/api/section-by-plane.js +61 -0
  297. package/dist/api/section-by-plane.js.map +1 -0
  298. package/dist/api/shell.d.ts +45 -0
  299. package/dist/api/shell.d.ts.map +1 -0
  300. package/dist/api/shell.js +73 -0
  301. package/dist/api/shell.js.map +1 -0
  302. package/dist/api/sketch.d.ts +8 -1
  303. package/dist/api/sketch.d.ts.map +1 -1
  304. package/dist/api/sketch.js +12 -7
  305. package/dist/api/sketch.js.map +1 -1
  306. package/dist/api/split-by-plane.d.ts +41 -0
  307. package/dist/api/split-by-plane.d.ts.map +1 -0
  308. package/dist/api/split-by-plane.js +60 -0
  309. package/dist/api/split-by-plane.js.map +1 -0
  310. package/dist/api/split.d.ts +6 -1
  311. package/dist/api/split.d.ts.map +1 -1
  312. package/dist/api/split.js +23 -9
  313. package/dist/api/split.js.map +1 -1
  314. package/dist/api/surface/arg-spec.d.ts +22 -0
  315. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  316. package/dist/api/surface/arg-spec.js +723 -476
  317. package/dist/api/surface/arg-spec.js.map +1 -1
  318. package/dist/api/sweep.d.ts +55 -0
  319. package/dist/api/sweep.d.ts.map +1 -0
  320. package/dist/api/sweep.js +86 -0
  321. package/dist/api/sweep.js.map +1 -0
  322. package/dist/api/thicken.d.ts +36 -0
  323. package/dist/api/thicken.d.ts.map +1 -0
  324. package/dist/api/thicken.js +55 -0
  325. package/dist/api/thicken.js.map +1 -0
  326. package/dist/api/transform.d.ts +8 -0
  327. package/dist/api/transform.d.ts.map +1 -1
  328. package/dist/api/transform.js +15 -4
  329. package/dist/api/transform.js.map +1 -1
  330. package/dist/api/view/cameraFns.d.ts +48 -0
  331. package/dist/api/view/cameraFns.d.ts.map +1 -0
  332. package/dist/api/view/cameraFns.js +75 -0
  333. package/dist/api/view/cameraFns.js.map +1 -0
  334. package/dist/api/view/projectionPlanes.d.ts +25 -0
  335. package/dist/api/view/projectionPlanes.d.ts.map +1 -0
  336. package/dist/api/view/projectionPlanes.js +30 -0
  337. package/dist/api/view/projectionPlanes.js.map +1 -0
  338. package/dist/api/view/view-camera.d.ts +2 -2
  339. package/dist/api/view/view-camera.d.ts.map +1 -1
  340. package/dist/api/view/view-camera.js +3 -3
  341. package/dist/api/view/view-camera.js.map +1 -1
  342. package/dist/api/view/view-projection.d.ts +9 -6
  343. package/dist/api/view/view-projection.d.ts.map +1 -1
  344. package/dist/api/view/view-projection.js +132 -65
  345. package/dist/api/view/view-projection.js.map +1 -1
  346. package/dist/api/wire.d.ts +45 -0
  347. package/dist/api/wire.d.ts.map +1 -0
  348. package/dist/api/wire.js +96 -0
  349. package/dist/api/wire.js.map +1 -0
  350. package/dist/boolean/creased-normals.d.ts +50 -0
  351. package/dist/boolean/creased-normals.d.ts.map +1 -0
  352. package/dist/boolean/creased-normals.js +114 -0
  353. package/dist/boolean/creased-normals.js.map +1 -0
  354. package/dist/boolean/deriveNormals.d.ts +4 -1
  355. package/dist/boolean/deriveNormals.d.ts.map +1 -1
  356. package/dist/boolean/deriveNormals.js +5 -2
  357. package/dist/boolean/deriveNormals.js.map +1 -1
  358. package/dist/brep/brep-ops.d.ts +6 -0
  359. package/dist/brep/brep-ops.d.ts.map +1 -1
  360. package/dist/brep/brep-ops.js +11 -2
  361. package/dist/brep/brep-ops.js.map +1 -1
  362. package/dist/brep/brep-topology.d.ts +4 -0
  363. package/dist/brep/brep-topology.d.ts.map +1 -1
  364. package/dist/brep/brep-topology.js +4 -0
  365. package/dist/brep/brep-topology.js.map +1 -1
  366. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  367. package/dist/brep/engine/adapters/brep-mock.js +79 -59
  368. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  369. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  370. package/dist/brep/engine/adapters/brepkit.js +7 -1
  371. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  372. package/dist/brep/engine/adapters/occt.d.ts +15 -7
  373. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  374. package/dist/brep/engine/adapters/occt.js +52 -167
  375. package/dist/brep/engine/adapters/occt.js.map +1 -1
  376. package/dist/brep/engine/primitives.d.ts +93 -130
  377. package/dist/brep/engine/primitives.d.ts.map +1 -1
  378. package/dist/brep/engine/primitives.js +9 -7
  379. package/dist/brep/engine/primitives.js.map +1 -1
  380. package/dist/brep/engine/types.d.ts +14 -1
  381. package/dist/brep/engine/types.d.ts.map +1 -1
  382. package/dist/brep/engine/types.js +11 -1
  383. package/dist/brep/engine/types.js.map +1 -1
  384. package/dist/brep/export/step.d.ts +3 -0
  385. package/dist/brep/export/step.d.ts.map +1 -1
  386. package/dist/brep/export/step.js +7 -1
  387. package/dist/brep/export/step.js.map +1 -1
  388. package/dist/brep/face-evolution.d.ts +8 -0
  389. package/dist/brep/face-evolution.d.ts.map +1 -1
  390. package/dist/brep/face-evolution.js +15 -3
  391. package/dist/brep/face-evolution.js.map +1 -1
  392. package/dist/brep/handle-bridge.d.ts +20 -2
  393. package/dist/brep/handle-bridge.d.ts.map +1 -1
  394. package/dist/brep/handle-bridge.js +25 -2
  395. package/dist/brep/handle-bridge.js.map +1 -1
  396. package/dist/brepkit-kernel/brepkitKernel.d.ts +25 -5
  397. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  398. package/dist/brepkit-kernel/brepkitKernel.js +336 -144
  399. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  400. package/dist/cad-runtime/admit-compat-lib.d.ts +6 -1
  401. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  402. package/dist/cad-runtime/admit-compat-lib.js +5 -1
  403. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  404. package/dist/cad-runtime/backend-dispatch.d.ts +9 -3
  405. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  406. package/dist/cad-runtime/backend-dispatch.js +32 -2
  407. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  408. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  409. package/dist/cad-runtime/direct-executor.js +8 -2
  410. package/dist/cad-runtime/direct-executor.js.map +1 -1
  411. package/dist/cad-runtime/runtime.d.ts +3 -0
  412. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  413. package/dist/cad-runtime/runtime.js +3 -1
  414. package/dist/cad-runtime/runtime.js.map +1 -1
  415. package/dist/define-op.d.ts +18 -2
  416. package/dist/define-op.d.ts.map +1 -1
  417. package/dist/define-op.js +29 -1
  418. package/dist/define-op.js.map +1 -1
  419. package/dist/env-agnostic.d.ts +3 -0
  420. package/dist/env-agnostic.d.ts.map +1 -1
  421. package/dist/env-agnostic.js +7 -0
  422. package/dist/env-agnostic.js.map +1 -1
  423. package/dist/index.d.ts.map +1 -1
  424. package/dist/index.js +3 -4
  425. package/dist/index.js.map +1 -1
  426. package/dist/lang/symbol-table.generated.d.ts +28 -0
  427. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  428. package/dist/lang/symbol-table.generated.js +29 -1
  429. package/dist/lang/symbol-table.generated.js.map +1 -1
  430. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  431. package/dist/occt-kernel/highLevelApi.js +6 -3
  432. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  433. package/dist/occt-kernel/hullGeometry.d.ts +31 -0
  434. package/dist/occt-kernel/hullGeometry.d.ts.map +1 -0
  435. package/dist/occt-kernel/hullGeometry.js +319 -0
  436. package/dist/occt-kernel/hullGeometry.js.map +1 -0
  437. package/dist/occt-kernel/hullOps.d.ts +24 -0
  438. package/dist/occt-kernel/hullOps.d.ts.map +1 -0
  439. package/dist/occt-kernel/hullOps.js +52 -0
  440. package/dist/occt-kernel/hullOps.js.map +1 -0
  441. package/dist/occt-kernel/occt-primitives.d.ts +14 -0
  442. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -0
  443. package/dist/occt-kernel/occt-primitives.js +351 -0
  444. package/dist/occt-kernel/occt-primitives.js.map +1 -0
  445. package/dist/occt-kernel/occtKernel.d.ts +14 -6
  446. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  447. package/dist/occt-kernel/occtKernel.js +11 -3
  448. package/dist/occt-kernel/occtKernel.js.map +1 -1
  449. package/dist/occt-kernel/topologyExt.js +2 -2
  450. package/dist/occt-kernel/topologyExt.js.map +1 -1
  451. package/dist/primitives/brep-primitives.d.ts +4 -0
  452. package/dist/primitives/brep-primitives.d.ts.map +1 -1
  453. package/dist/primitives/brep-primitives.js +4 -0
  454. package/dist/primitives/brep-primitives.js.map +1 -1
  455. package/dist/result/bug.d.ts +22 -0
  456. package/dist/result/bug.d.ts.map +1 -0
  457. package/dist/result/bug.js +28 -0
  458. package/dist/result/bug.js.map +1 -0
  459. package/dist/result/errors.d.ts +270 -0
  460. package/dist/result/errors.d.ts.map +1 -0
  461. package/dist/result/errors.js +317 -0
  462. package/dist/result/errors.js.map +1 -0
  463. package/dist/result/kernelErrorTranslation.d.ts +21 -0
  464. package/dist/result/kernelErrorTranslation.d.ts.map +1 -0
  465. package/dist/result/kernelErrorTranslation.js +102 -0
  466. package/dist/result/kernelErrorTranslation.js.map +1 -0
  467. package/dist/result/result.d.ts +213 -0
  468. package/dist/result/result.d.ts.map +1 -0
  469. package/dist/result/result.js +336 -0
  470. package/dist/result/result.js.map +1 -0
  471. package/dist/result/vec3.d.ts +12 -0
  472. package/dist/result/vec3.d.ts.map +1 -0
  473. package/dist/result/vec3.js +14 -0
  474. package/dist/result/vec3.js.map +1 -0
  475. package/dist/runtime-state.d.ts +9 -0
  476. package/dist/runtime-state.d.ts.map +1 -1
  477. package/dist/runtime-state.js.map +1 -1
  478. package/dist/sdk.d.ts +3 -1
  479. package/dist/sdk.d.ts.map +1 -1
  480. package/dist/sdk.js +2 -1
  481. package/dist/sdk.js.map +1 -1
  482. package/dist/shape.d.ts +43 -1
  483. package/dist/shape.d.ts.map +1 -1
  484. package/dist/shape.js +57 -1
  485. package/dist/shape.js.map +1 -1
  486. package/dist/topology/naming/geom-hint.js +1 -1
  487. package/dist/topology/naming/geom-hint.js.map +1 -1
  488. package/dist/topology/naming/score.js +1 -1
  489. package/dist/topology/naming/score.js.map +1 -1
  490. package/package.json +6 -16
@@ -1 +1 @@
1
- {"version":3,"file":"brep-topology.d.ts","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAoC,MAAM,mBAAmB,CAAA;AAK1F;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,OAAO,EAAE,eAAe,CAAA;IACxB,6CAA6C;IAC7C,IAAI,EAAE;QACJ,SAAS,EAAE,YAAY,CAAA;QACvB,OAAO,EAAE,YAAY,CAAA;QACrB,OAAO,EAAE,WAAW,CAAA;KACrB,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,cAAc,GAC7B,eAAe,CAcjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,GAChB,mBAAmB,CA0BrB"}
1
+ {"version":3,"file":"brep-topology.d.ts","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAoC,MAAM,mBAAmB,CAAA;AAK1F;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,OAAO,EAAE,eAAe,CAAA;IACxB,6CAA6C;IAC7C,IAAI,EAAE;QACJ,SAAS,EAAE,YAAY,CAAA;QACvB,OAAO,EAAE,YAAY,CAAA;QACrB,OAAO,EAAE,WAAW,CAAA;KACrB,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EACjB,cAAc,EAAE,cAAc,GAC7B,eAAe,CAcjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,GAChB,mBAAmB,CA0BrB"}
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * BREP 拓扑运行时构建 — 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据
3
3
  *
4
+ * @platform occt — 本文件 import occt-kernel(occtKernel / topologyExt):拓扑
5
+ * 提取直接消费平台原生句柄与扩展方法,由调用方(宿主导出缓存 / 平台装配点)
6
+ * 在 occt 引擎下使用;守卫 R1 豁免、R2 无 defineOp 不适用。
7
+ *
4
8
  * 与 STEP 文件导入的拓扑提取使用**同源算法**:
5
9
  * meshShape + buildAssemblySelectorManifest + buildSelectorRuntime
6
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"brep-topology.js","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAiBzE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,KAAiB,EACjB,cAA8B;IAE9B,oDAAoD;IACpD,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,EAAE,CAAC;YACpD,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK;YAClB,cAAc;SACf,CAAC,CAAC,CAAA;IAEH,qBAAqB;IACrB,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAuC;QACxD,OAAO,EAAE,MAAM,CAAC,OAAiE;KAClF,CAAA;IACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,KAAiB;IAEjB,qDAAqD;IACrD,uDAAuD;IACvD,MAAM,0BAA0B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE;QACpD,gBAAgB,EAAE,GAAG;QACrB,iBAAiB,EAAE,0BAA0B;QAC7C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IACF,MAAM,IAAI,GAAmB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACnD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAE1D,yCAAyC;IACzC,OAAO;QACL,OAAO;QACP,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;SAC9B;KACF,CAAA;AACH,CAAC","sourcesContent":["/**\n * BREP 拓扑运行时构建 — 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据\n *\n * 与 STEP 文件导入的拓扑提取使用**同源算法**:\n * meshShape + buildAssemblySelectorManifest + buildSelectorRuntime\n *\n * 不执行 STEP round-trip(export→import),直接在原始 solid 上运行。\n * solid 句柄不被释放或修改——由调用方(宿主导出缓存)管理生命周期。\n *\n * 同时返回 mesh 数据(positions/normals/indices),用于更新场景几何,\n * 保证 mesh 三角形与 topology faceRuns 一一对应。\n */\n\nimport type { BrepHandle, BrepMeshResult } from './engine/types'\nimport type { BrepEngineApi } from './engine/primitives'\nimport type { SelectorRuntime, SelectorBundle, SelectorManifest } from '../topology/types'\nimport { computeEffectiveDeflection } from '../occt-kernel/occtKernel'\nimport { buildAssemblySelectorManifest } from '../occt-kernel/topologyExt'\nimport { buildSelectorRuntime } from '../topology/build-selector-runtime'\n\n/**\n * Result of building BREP topology from an OCCT solid: the SelectorRuntime\n * plus the mesh data produced by the same meshShape call.\n */\nexport interface SolidTopologyResult {\n /** SelectorRuntime,与 STEP_T 使用同源算法生成 */\n runtime: SelectorRuntime\n /** 与 topology 使用同一个 meshShape 输出的 mesh 数据 */\n mesh: {\n positions: Float32Array\n normals: Float32Array\n indices: Uint32Array\n }\n}\n\n/**\n * 从已有的三角化结果(meshWithGroups)构建拓扑,不强制重新 meshShape。\n *\n * 用于 BREP 路径在场景已有三角化时复用——三角化属于几何数据生成,\n * 拓扑构建应接收已有结果而非内部重新生成(需求 §2.0/§2.2、验收 3)。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (the shapeHandle for buildAssemblySelectorManifest).\n * @param meshWithGroups the existing tessellation result (from kernel.meshShape).\n * @returns the assembled SelectorRuntime.\n */\nexport function buildTopologyFromMesh(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n meshWithGroups: BrepMeshResult,\n): SelectorRuntime {\n // 生成拓扑清单(与 STEP_T 同源:buildAssemblySelectorManifest)\n const result = buildAssemblySelectorManifest(kernel, [{\n labelPath: 'o1',\n shapeHandle: solid,\n meshWithGroups,\n }])\n\n // 构建 SelectorRuntime\n const bundle: SelectorBundle = {\n manifest: result.manifest as unknown as SelectorManifest,\n buffers: result.buffers as unknown as import('../topology/types').SelectorBuffers,\n }\n return buildSelectorRuntime(bundle, { scale: 1 })\n}\n\n/**\n * 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据。\n *\n * 算法与 STEP 文件导入路径(step-worker.ts → importStepToMesh →\n * buildAssemblySelectorManifest → buildSelectorRuntime)完全同源,\n * 区别仅在于 solid 来源是 OCCT 运算而非 STEP 文件导入。\n *\n * 三角化参数与显示 mesh 完全一致\n * (linearDeflection=0.1, angularDeflection=2π/32≈0.196, relative=false)。\n * 这与 solidToShape 的默认值一致,保证拓扑 faceRuns 与显示 mesh 三角形一一对应。\n *\n * 规则 1:拓扑数据生成所使用的 mesh,必须是当前用户看到的 mesh。\n * 由于 OCCT meshShape 对同一 solid + 同一参数是确定性的,\n * 此处重新三角化的结果与显示 mesh 完全相同。\n * 如果已有三角化结果(meshShapeCache),应直接调 buildTopologyFromMesh 以复用。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (never released or modified).\n * @returns the SelectorRuntime plus the mesh data from the same meshShape call.\n */\nexport function buildSolidTopologyRuntime(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n): SolidTopologyResult {\n // 1. 三角化(含 faceGroups)——与显示 mesh 使用相同的 deflection 参数\n // solidToShape 默认 angularDeflection = 2π/32 ≈ 0.196\n const DISPLAY_ANGULAR_DEFLECTION = (2 * Math.PI) / 32\n const eff = computeEffectiveDeflection(kernel, solid, {\n linearDeflection: 0.1,\n angularDeflection: DISPLAY_ANGULAR_DEFLECTION,\n relative: false,\n })\n const mesh: BrepMeshResult = kernel.meshShape(solid, {\n linearDeflection: eff.linearDeflection,\n angularDeflection: eff.angularDeflection,\n })\n\n // 2. 从已有三角化结果构建拓扑(复用 buildTopologyFromMesh)\n const runtime = buildTopologyFromMesh(kernel, solid, mesh)\n\n // 3. 返回 runtime + mesh(同一个 meshShape 输出)\n return {\n runtime,\n mesh: {\n positions: mesh.positions.slice(),\n normals: mesh.normals.slice(),\n indices: mesh.indices.slice(),\n },\n }\n}\n"]}
1
+ {"version":3,"file":"brep-topology.js","sourceRoot":"","sources":["../../src/brep/brep-topology.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAiBzE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqB,EACrB,KAAiB,EACjB,cAA8B;IAE9B,oDAAoD;IACpD,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,EAAE,CAAC;YACpD,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,KAAK;YAClB,cAAc;SACf,CAAC,CAAC,CAAA;IAEH,qBAAqB;IACrB,MAAM,MAAM,GAAmB;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAuC;QACxD,OAAO,EAAE,MAAM,CAAC,OAAiE;KAClF,CAAA;IACD,OAAO,oBAAoB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;AACnD,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAqB,EACrB,KAAiB;IAEjB,qDAAqD;IACrD,uDAAuD;IACvD,MAAM,0BAA0B,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;IACrD,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAK,EAAE;QACpD,gBAAgB,EAAE,GAAG;QACrB,iBAAiB,EAAE,0BAA0B;QAC7C,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IACF,MAAM,IAAI,GAAmB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QACnD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;KACzC,CAAC,CAAA;IAEF,4CAA4C;IAC5C,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAE1D,yCAAyC;IACzC,OAAO;QACL,OAAO;QACP,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;SAC9B;KACF,CAAA;AACH,CAAC","sourcesContent":["/**\n * BREP 拓扑运行时构建 — 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据\n *\n * @platform occt — 本文件 import occt-kernel(occtKernel / topologyExt):拓扑\n * 提取直接消费平台原生句柄与扩展方法,由调用方(宿主导出缓存 / 平台装配点)\n * 在 occt 引擎下使用;守卫 R1 豁免、R2 无 defineOp 不适用。\n *\n * 与 STEP 文件导入的拓扑提取使用**同源算法**:\n * meshShape + buildAssemblySelectorManifest + buildSelectorRuntime\n *\n * 不执行 STEP round-trip(export→import),直接在原始 solid 上运行。\n * solid 句柄不被释放或修改——由调用方(宿主导出缓存)管理生命周期。\n *\n * 同时返回 mesh 数据(positions/normals/indices),用于更新场景几何,\n * 保证 mesh 三角形与 topology faceRuns 一一对应。\n */\n\nimport type { BrepHandle, BrepMeshResult } from './engine/types'\nimport type { BrepEngineApi } from './engine/primitives'\nimport type { SelectorRuntime, SelectorBundle, SelectorManifest } from '../topology/types'\nimport { computeEffectiveDeflection } from '../occt-kernel/occtKernel'\nimport { buildAssemblySelectorManifest } from '../occt-kernel/topologyExt'\nimport { buildSelectorRuntime } from '../topology/build-selector-runtime'\n\n/**\n * Result of building BREP topology from an OCCT solid: the SelectorRuntime\n * plus the mesh data produced by the same meshShape call.\n */\nexport interface SolidTopologyResult {\n /** SelectorRuntime,与 STEP_T 使用同源算法生成 */\n runtime: SelectorRuntime\n /** 与 topology 使用同一个 meshShape 输出的 mesh 数据 */\n mesh: {\n positions: Float32Array\n normals: Float32Array\n indices: Uint32Array\n }\n}\n\n/**\n * 从已有的三角化结果(meshWithGroups)构建拓扑,不强制重新 meshShape。\n *\n * 用于 BREP 路径在场景已有三角化时复用——三角化属于几何数据生成,\n * 拓扑构建应接收已有结果而非内部重新生成(需求 §2.0/§2.2、验收 3)。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (the shapeHandle for buildAssemblySelectorManifest).\n * @param meshWithGroups the existing tessellation result (from kernel.meshShape).\n * @returns the assembled SelectorRuntime.\n */\nexport function buildTopologyFromMesh(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n meshWithGroups: BrepMeshResult,\n): SelectorRuntime {\n // 生成拓扑清单(与 STEP_T 同源:buildAssemblySelectorManifest)\n const result = buildAssemblySelectorManifest(kernel, [{\n labelPath: 'o1',\n shapeHandle: solid,\n meshWithGroups,\n }])\n\n // 构建 SelectorRuntime\n const bundle: SelectorBundle = {\n manifest: result.manifest as unknown as SelectorManifest,\n buffers: result.buffers as unknown as import('../topology/types').SelectorBuffers,\n }\n return buildSelectorRuntime(bundle, { scale: 1 })\n}\n\n/**\n * 从 OCCT solid 句柄生成 SelectorRuntime + mesh 数据。\n *\n * 算法与 STEP 文件导入路径(step-worker.ts → importStepToMesh →\n * buildAssemblySelectorManifest → buildSelectorRuntime)完全同源,\n * 区别仅在于 solid 来源是 OCCT 运算而非 STEP 文件导入。\n *\n * 三角化参数与显示 mesh 完全一致\n * (linearDeflection=0.1, angularDeflection=2π/32≈0.196, relative=false)。\n * 这与 solidToShape 的默认值一致,保证拓扑 faceRuns 与显示 mesh 三角形一一对应。\n *\n * 规则 1:拓扑数据生成所使用的 mesh,必须是当前用户看到的 mesh。\n * 由于 OCCT meshShape 对同一 solid + 同一参数是确定性的,\n * 此处重新三角化的结果与显示 mesh 完全相同。\n * 如果已有三角化结果(meshShapeCache),应直接调 buildTopologyFromMesh 以复用。\n *\n * @param kernel the OCCT kernel instance.\n * @param solid the OCCT solid handle (never released or modified).\n * @returns the SelectorRuntime plus the mesh data from the same meshShape call.\n */\nexport function buildSolidTopologyRuntime(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n): SolidTopologyResult {\n // 1. 三角化(含 faceGroups)——与显示 mesh 使用相同的 deflection 参数\n // solidToShape 默认 angularDeflection = 2π/32 ≈ 0.196\n const DISPLAY_ANGULAR_DEFLECTION = (2 * Math.PI) / 32\n const eff = computeEffectiveDeflection(kernel, solid, {\n linearDeflection: 0.1,\n angularDeflection: DISPLAY_ANGULAR_DEFLECTION,\n relative: false,\n })\n const mesh: BrepMeshResult = kernel.meshShape(solid, {\n linearDeflection: eff.linearDeflection,\n angularDeflection: eff.angularDeflection,\n })\n\n // 2. 从已有三角化结果构建拓扑(复用 buildTopologyFromMesh)\n const runtime = buildTopologyFromMesh(kernel, solid, mesh)\n\n // 3. 返回 runtime + mesh(同一个 meshShape 输出)\n return {\n runtime,\n mesh: {\n positions: mesh.positions.slice(),\n normals: mesh.normals.slice(),\n indices: mesh.indices.slice(),\n },\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"brep-mock.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAA;AAEhF,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,cAAc,CAAA;AAoC9C;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CA0VjD;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,IAAI,IAAI,CAQ7C"}
1
+ {"version":3,"file":"brep-mock.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/brep-mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAA;AAEhF,wCAAwC;AACxC,eAAO,MAAM,mBAAmB,cAAc,CAAA;AAoC9C;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAuWjD;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,IAAI,IAAI,CAQ7C"}
@@ -67,14 +67,6 @@ export function createBrepMockApi() {
67
67
  ymax: Math.max(a.ymax, b.ymax),
68
68
  zmax: Math.max(a.zmax, b.zmax),
69
69
  });
70
- const mockXcafDocument = () => ({
71
- addShape: () => undefined,
72
- exportSTEP: () => mockStepExport(),
73
- close: () => undefined,
74
- });
75
- const mockStepExport = () => 'brep-mock-engine STEP (mock)\n' +
76
- '// Not real STEP — marker of the in-memory mock BREP engine, for engine-switch tests only.\n' +
77
- 'FILE_DESCRIPTION(("brep-mock-engine"), "2;1");';
78
70
  const primitive = (kind, size, tag) => alloc({ kind, bbox: bboxOf(kind, size), tag });
79
71
  const primitives = {
80
72
  // ── 生命周期 ──
@@ -91,7 +83,54 @@ export function createBrepMockApi() {
91
83
  const s = need(shape, 'extrude');
92
84
  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})` });
93
85
  },
94
- loft: () => unsupported('loft'),
86
+ revolveVec: (shape, _center, direction, angleDeg) => {
87
+ // Mock approximation: revolve grows the bbox by sweeping the profile's
88
+ // extent around the axis — approximate with the direction-scaled extent
89
+ // (signature-level coverage only, like extrude above).
90
+ const s = need(shape, 'revolveVec');
91
+ const grow = (Math.abs(angleDeg) / 360) * Math.hypot(direction.x, direction.y, direction.z) * 2;
92
+ return alloc({
93
+ kind: 'solid',
94
+ bbox: {
95
+ xmin: s.bbox.xmin - grow, ymin: s.bbox.ymin - grow, zmin: s.bbox.zmin,
96
+ xmax: s.bbox.xmax + grow, ymax: s.bbox.ymax + grow, zmax: s.bbox.zmax,
97
+ },
98
+ tag: `revolveVec(${s.tag},a=${angleDeg})`,
99
+ });
100
+ },
101
+ sew: (shapesIn, _tolerance) => {
102
+ // Mock approximation: merge the parts' bboxes into one shell-ish solid.
103
+ let bbox = null;
104
+ let tag = 'sew(';
105
+ for (const h of shapesIn) {
106
+ const rec = need(h, 'sew');
107
+ bbox = bbox ? mergeBbox(bbox, rec.bbox) : { ...rec.bbox };
108
+ tag += `${rec.tag},`;
109
+ }
110
+ return alloc({ kind: 'solid', bbox: bbox ?? bboxOf('solid', [0, 0, 0]), tag: `${tag})` });
111
+ },
112
+ sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),
113
+ shell: (solid, _facesToRemove, thickness, _tolerance) => {
114
+ // Mock approximation: shelling keeps the outer bbox and marks it hollow.
115
+ const s = need(solid, 'shell');
116
+ return alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `shell(${s.tag},t=${thickness})` });
117
+ },
118
+ hullFromPoints: (points, _tolerance) => {
119
+ // Mock approximation: bbox of the point set as a solid.
120
+ if (points.length === 0)
121
+ return unsupported('hullFromPoints: empty point set');
122
+ let xmin = Infinity, ymin = Infinity, zmin = Infinity;
123
+ let xmax = -Infinity, ymax = -Infinity, zmax = -Infinity;
124
+ for (const p of points) {
125
+ xmin = Math.min(xmin, p.x);
126
+ ymin = Math.min(ymin, p.y);
127
+ zmin = Math.min(zmin, p.z);
128
+ xmax = Math.max(xmax, p.x);
129
+ ymax = Math.max(ymax, p.y);
130
+ zmax = Math.max(zmax, p.z);
131
+ }
132
+ return alloc({ kind: 'solid', bbox: { xmin, ymin, zmin, xmax, ymax, zmax }, tag: `hullFromPoints(n=${points.length})` });
133
+ },
95
134
  // ── 倒角与圆角(mock:只重打标签/复制,不做真几何;引擎切换测试覆盖签名面) ──
96
135
  chamfer: (solid, edges, distance) => {
97
136
  const s = need(solid, 'chamfer');
@@ -115,12 +154,6 @@ export function createBrepMockApi() {
115
154
  const evo = { result, modified: [], generated: [], deleted: [] };
116
155
  return evo;
117
156
  },
118
- chamferWithHistory: (solid, edges, distance, _hashes, _upper) => {
119
- const s = need(solid, 'chamferWithHistory');
120
- const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferWH(${s.tag},d=${distance},e=${edges.length})` });
121
- const evo = { result, modified: [], generated: [], deleted: [] };
122
- return evo;
123
- },
124
157
  // ── 布尔与分割 ──
125
158
  fuse: (a, b) => {
126
159
  const sa = need(a, 'fuse');
@@ -141,7 +174,19 @@ export function createBrepMockApi() {
141
174
  const sb = need(b, 'intersect');
142
175
  return alloc({ kind: 'solid', bbox: mergeBbox(sa.bbox, sb.bbox), tag: `intersect(${sa.tag},${sb.tag})` });
143
176
  },
144
- section: () => unsupported('section'),
177
+ sectionByPlane: (shape, _point, _normal) => {
178
+ // Mock approximation: section curves keep the input bbox as a wire-ish record.
179
+ const s = need(shape, 'sectionByPlane');
180
+ return [alloc({ kind: 'wire', bbox: { ...s.bbox }, tag: `sectionByPlane(${s.tag})` })];
181
+ },
182
+ splitByPlane: (shape, _point, _normal) => {
183
+ // Mock approximation: two halves share the input bbox (no real cut).
184
+ const s = need(shape, 'splitByPlane');
185
+ return {
186
+ positive: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane+(${s.tag})` }),
187
+ negative: alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `splitByPlane-(${s.tag})` }),
188
+ };
189
+ },
145
190
  fuseAll: (shapesIn) => {
146
191
  let bbox = null;
147
192
  let tag = 'fuseAll(';
@@ -228,6 +273,7 @@ export function createBrepMockApi() {
228
273
  }, tag: `arc` });
229
274
  },
230
275
  makeBezierEdge: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'bezier' }),
276
+ 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})` }),
231
277
  // ── 拓扑构造 ──
232
278
  makeWire: (edges) => alloc({ kind: 'wire', bbox: edges.length > 0 ? { ...need(edges[0], 'makeWire').bbox } : bboxOf('wire', [0, 0, 0]), tag: `wire(${edges.length})` }),
233
279
  makeFace: (wire) => alloc({ kind: 'face', bbox: { ...need(wire, 'makeFace').bbox }, tag: `face(#${wire})` }),
@@ -239,7 +285,6 @@ export function createBrepMockApi() {
239
285
  }
240
286
  return alloc({ kind: 'compound', bbox: bbox ?? bboxOf('compound', [0, 0, 0]), tag: `compound(${parts.length})` });
241
287
  },
242
- sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),
243
288
  buildTriFace: () => alloc({ kind: 'face', bbox: bboxOf('face', [1, 1, 0]), tag: 'triFace' }),
244
289
  addHolesInFace: (face) => alloc({ kind: 'face', bbox: { ...need(face, 'addHolesInFace').bbox }, tag: `holedFace(#${face})` }),
245
290
  // ── 三角化(BREP→mesh 唯一出口) ──
@@ -247,12 +292,15 @@ export function createBrepMockApi() {
247
292
  wireframe: () => ({ points: new Float32Array(0), edgeGroups: new Int32Array(0), pointCount: 0, edgeCount: 0 }),
248
293
  // ── 拓扑查询 ──
249
294
  getSubShapes: () => [],
250
- queryBatch: (shapesIn) => shapesIn.map(() => ({ area: 0 })),
251
295
  subShapeHashes: () => [],
252
296
  hashCode: (shape) => shape % 2147483647,
253
297
  isSame: (a, b) => a === b,
254
298
  isSolid: () => true,
299
+ shapeType: () => 'SOLID',
255
300
  shapeOrientation: () => 'forward',
301
+ edgeToFaceMap: () => ({}),
302
+ adjacentFaces: () => [],
303
+ sharedEdges: () => [],
256
304
  // ── 几何求值 ──
257
305
  curveType: () => 'line',
258
306
  curvePointAtParam: () => ({ x: 0, y: 0, z: 0 }),
@@ -264,9 +312,14 @@ export function createBrepMockApi() {
264
312
  surfaceNormal: () => ({ x: 0, y: 0, z: 1 }),
265
313
  pointOnSurface: () => ({ x: 0, y: 0, z: 0 }),
266
314
  uvBounds: () => ({ uMin: 0, uMax: 1, vMin: 0, vMax: 1 }),
267
- getSurfaceCenterOfMass: () => ({ x: 0, y: 0, z: 0 }),
268
315
  getFaceCylinderData: () => null,
269
316
  getNurbsCurveData: () => null,
317
+ interpolatePoints: () => alloc({ kind: 'edge', bbox: bboxOf('edge', [1, 1, 1]), tag: 'interpolatePoints' }),
318
+ defeature: (shape) => { need(shape, 'defeature'); return shape; },
319
+ draft: (shape) => { need(shape, 'draft'); return shape; },
320
+ removeHolesFromFace: (face) => { need(face, 'removeHolesFromFace'); return face; },
321
+ reverseShape: (shape) => { need(shape, 'reverseShape'); return shape; },
322
+ projectEdges: () => unsupported('projectEdges'),
270
323
  // ── 测量 ──
271
324
  getBoundingBox: (shape) => ({ ...need(shape, 'getBoundingBox').bbox }),
272
325
  getVolume: (shape) => {
@@ -277,6 +330,8 @@ export function createBrepMockApi() {
277
330
  const b = need(shape, 'getCenterOfMass').bbox;
278
331
  return { x: (b.xmin + b.xmax) / 2, y: (b.ymin + b.ymax) / 2, z: (b.zmin + b.zmax) / 2 };
279
332
  },
333
+ getSurfaceArea: () => 0,
334
+ getLength: () => 0,
280
335
  // ── 校验与修复 ──
281
336
  isValid: () => true,
282
337
  unifySameDomain: (shape) => shape,
@@ -292,7 +347,7 @@ export function createBrepMockApi() {
292
347
  },
293
348
  importStl: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'importStl(mock)' }),
294
349
  fromBREP: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [10, 10, 10]), tag: 'fromBREP(mock)' }),
295
- // ── 面演化(可选能力槽:memory 不支持 → 明确缺失暴露) ──
350
+ // ── 面演化(L1 三员:mock 用底层布尔 + 空 evo) ──
296
351
  cutWithHistory: (a, b, _hashes, _upper) => {
297
352
  const result = primitives.cut(a, b);
298
353
  const evo = { result, modified: [], generated: [], deleted: [] };
@@ -308,51 +363,16 @@ export function createBrepMockApi() {
308
363
  const evo = { result, modified: [], generated: [], deleted: [] };
309
364
  return evo;
310
365
  },
311
- // Phase 0.1 补齐的 7 个:memory 引擎不实现 —— 明确缺失暴露,不伪造(与 loft/section 同风格)。
312
- translateWithHistory: () => unsupported('translateWithHistory'),
313
- rotateWithHistory: () => unsupported('rotateWithHistory'),
314
- mirrorWithHistory: () => unsupported('mirrorWithHistory'),
315
- scaleWithHistory: () => unsupported('scaleWithHistory'),
316
- shellWithHistory: () => unsupported('shellWithHistory'),
317
- offsetWithHistory: () => unsupported('offsetWithHistory'),
318
- thickenWithHistory: () => unsupported('thickenWithHistory'),
319
- // ── XCAF 装配(mock 文档) ──
320
- createXCAFDocument: () => mockXcafDocument(),
321
- importXCAFFromSTEP: () => mockXcafDocument(),
322
- // ── Phase 3 登记方法:mock 验证载体——查询类给简单实现,其余明确缺失暴露 ──
323
- boundingBox: (shape) => ({ ...need(shape, 'boundingBox').bbox }),
324
- shapeType: (shape) => need(shape, 'shapeType').kind === 'face' ? 'face' : need(shape, 'shapeType').kind === 'edge' ? 'edge' : need(shape, 'shapeType').kind === 'wire' ? 'wire' : 'solid',
325
- isNull: () => false,
326
- iterShapes: (shape) => { need(shape, 'iterShapes'); return []; },
327
- 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 }; },
328
- locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),
329
- copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),
330
- downcast: (shape) => alloc({ kind: need(shape, 'downcast').kind, bbox: { ...need(shape, 'downcast').bbox }, tag: `downcast(#${shape})` }),
366
+ // ── L1 补齐方法(mock 验证载体——查询类给简单实现,其余明确缺失暴露) ──
331
367
  dispose: () => undefined,
332
368
  composeTransform: () => unsupported('composeTransform'),
333
- buildExtrusionLaw: () => unsupported('buildExtrusionLaw'),
334
- buildEdgeOnSurface: () => unsupported('buildEdgeOnSurface'),
335
- healFace: () => unsupported('healFace'),
336
- healWire: () => unsupported('healWire'),
337
- fixSelfIntersection: () => unsupported('fixSelfIntersection'),
338
- hullFromPoints: () => unsupported('hullFromPoints'),
339
- loftAdvanced: () => unsupported('loftAdvanced'),
340
369
  makeEllipsoid: () => unsupported('makeEllipsoid'),
341
- makeFaceOnSurface: () => unsupported('makeFaceOnSurface'),
342
370
  makeTorus: () => unsupported('makeTorus'),
343
371
  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})` }),
344
- makeWireFromMixed: (items) => alloc({ kind: 'wire', bbox: items.length > 0 ? { ...need(items[0], 'makeWireFromMixed').bbox } : bboxOf('wire', [0, 0, 0]), tag: `mixedWire(${items.length})` }),
345
372
  mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),
346
- revolveVec: () => unsupported('revolveVec'),
347
- sew: () => unsupported('sew'),
348
- shell: () => unsupported('shell'),
349
- simplePipe: () => unsupported('simplePipe'),
350
- simplify: () => unsupported('simplify'),
351
- split: () => unsupported('split'),
352
- sweepPipeShell: () => unsupported('sweepPipeShell'),
353
- generalTransformNonOrthogonal: () => unsupported('generalTransformNonOrthogonal'),
354
- generalTransformWithHistory: () => unsupported('generalTransformWithHistory'),
355
- applyComposedTransformWithHistory: () => unsupported('applyComposedTransformWithHistory'),
373
+ 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 }; },
374
+ locate: (shape) => alloc({ kind: need(shape, 'locate').kind, bbox: { ...need(shape, 'locate').bbox }, tag: `locate(#${shape})` }),
375
+ copyShape: (shape) => alloc({ kind: need(shape, 'copyShape').kind, bbox: { ...need(shape, 'copyShape').bbox }, tag: `copy(#${shape})` }),
356
376
  };
357
377
  return primitives;
358
378
  }
@@ -1 +1 @@
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 BrepXcafDocument,\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 const mockXcafDocument = (): BrepXcafDocument => ({\n addShape: () => undefined,\n exportSTEP: () => mockStepExport(),\n close: () => undefined,\n })\n\n const mockStepExport = (): string =>\n 'brep-mock-engine STEP (mock)\\n' +\n '// Not real STEP — marker of the in-memory mock BREP engine, for engine-switch tests only.\\n' +\n 'FILE_DESCRIPTION((\"brep-mock-engine\"), \"2;1\");'\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 loft: () => unsupported('loft'),\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 chamferWithHistory: (solid, edges, distance, _hashes, _upper) => {\n const s = need(solid, 'chamferWithHistory')\n const result = alloc({ kind: 'solid', bbox: { ...s.bbox }, tag: `chamferWH(${s.tag},d=${distance},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 section: () => unsupported('section'),\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\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 sewAndSolidify: () => alloc({ kind: 'solid', bbox: bboxOf('solid', [1, 1, 1]), tag: 'sewAndSolidify' }),\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 queryBatch: (shapesIn) => shapesIn.map(() => ({ area: 0 })),\n subShapeHashes: () => [],\n hashCode: (shape) => shape % 2147483647,\n isSame: (a, b) => a === b,\n isSolid: () => true,\n shapeOrientation: () => 'forward',\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 getSurfaceCenterOfMass: () => ({ x: 0, y: 0, z: 0 }),\n getFaceCylinderData: () => null,\n getNurbsCurveData: () => null,\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\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 // ── 面演化(可选能力槽:memory 不支持 → 明确缺失暴露) ──\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 // Phase 0.1 补齐的 7 个:memory 引擎不实现 —— 明确缺失暴露,不伪造(与 loft/section 同风格)。\n translateWithHistory: () => unsupported('translateWithHistory'),\n rotateWithHistory: () => unsupported('rotateWithHistory'),\n mirrorWithHistory: () => unsupported('mirrorWithHistory'),\n scaleWithHistory: () => unsupported('scaleWithHistory'),\n shellWithHistory: () => unsupported('shellWithHistory'),\n offsetWithHistory: () => unsupported('offsetWithHistory'),\n thickenWithHistory: () => unsupported('thickenWithHistory'),\n\n // ── XCAF 装配(mock 文档) ──\n createXCAFDocument: () => mockXcafDocument(),\n importXCAFFromSTEP: () => mockXcafDocument(),\n\n // ── Phase 3 登记方法:mock 验证载体——查询类给简单实现,其余明确缺失暴露 ──\n boundingBox: (shape) => ({ ...need(shape, 'boundingBox').bbox }),\n shapeType: (shape) => need(shape, 'shapeType').kind === 'face' ? 'face' : need(shape, 'shapeType').kind === 'edge' ? 'edge' : need(shape, 'shapeType').kind === 'wire' ? 'wire' : 'solid',\n isNull: () => false,\n iterShapes: (shape) => { need(shape, 'iterShapes'); return [] },\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 downcast: (shape) => alloc({ kind: need(shape, 'downcast').kind, bbox: { ...need(shape, 'downcast').bbox }, tag: `downcast(#${shape})` }),\n dispose: () => undefined,\n composeTransform: () => unsupported('composeTransform'),\n buildExtrusionLaw: () => unsupported('buildExtrusionLaw'),\n buildEdgeOnSurface: () => unsupported('buildEdgeOnSurface'),\n healFace: () => unsupported('healFace'),\n healWire: () => unsupported('healWire'),\n fixSelfIntersection: () => unsupported('fixSelfIntersection'),\n hullFromPoints: () => unsupported('hullFromPoints'),\n loftAdvanced: () => unsupported('loftAdvanced'),\n makeEllipsoid: () => unsupported('makeEllipsoid'),\n makeFaceOnSurface: () => unsupported('makeFaceOnSurface'),\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 makeWireFromMixed: (items) => alloc({ kind: 'wire', bbox: items.length > 0 ? { ...need(items[0], 'makeWireFromMixed').bbox } : bboxOf('wire', [0, 0, 0]), tag: `mixedWire(${items.length})` }),\n mirror: (shape) => alloc({ kind: need(shape, 'mirror').kind, bbox: { ...need(shape, 'mirror').bbox }, tag: `mirror(#${shape})` }),\n revolveVec: () => unsupported('revolveVec'),\n sew: () => unsupported('sew'),\n shell: () => unsupported('shell'),\n simplePipe: () => unsupported('simplePipe'),\n simplify: () => unsupported('simplify'),\n split: () => unsupported('split'),\n sweepPipeShell: () => unsupported('sweepPipeShell'),\n generalTransformNonOrthogonal: () => unsupported('generalTransformNonOrthogonal'),\n generalTransformWithHistory: () => unsupported('generalTransformWithHistory'),\n applyComposedTransformWithHistory: () => unsupported('applyComposedTransformWithHistory'),\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 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 +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,CA8D/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;AAMH,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,YAAY,CAAA;AAE/C;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoE/D;AAED,wDAAwD;AACxD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhE"}
@@ -40,7 +40,13 @@ export async function registerBrepkitBrepEngine() {
40
40
  'addHolesInFace',
41
41
  // Phase 3:brepkitKernel 真实现映射(wasm getBoundingBox/getSurfaceCenterOfMass 导出)——
42
42
  // 能力表可声明;其余 31 个 Phase 3 方法为 unsupported 桩 → 不声明(engine-switch-p3 断言)。
43
- 'boundingBox',
43
+ 'getBoundingBox',
44
+ // Phase 4(narrowing D9):测量族全部接线(surfaceArea→getSurfaceArea、
45
+ // length/wireLength→getLength、volume、centerOfMass)——L1 中立名(D5)如实声明。
46
+ 'getVolume',
47
+ 'getSurfaceArea',
48
+ 'getLength',
49
+ 'getCenterOfMass',
44
50
  'surfaceCenterOfMass',
45
51
  'curveParameters',
46
52
  'curvePointAtParam',
@@ -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,aAAa;gBACb,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,2EAA2E;gBAC3E,0DAA0D;gBAC1D,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;aACX;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 'boundingBox',\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;extrude/section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\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 ],\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,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,2EAA2E;gBAC3E,0DAA0D;gBAC1D,eAAe;gBACf,WAAW;gBACX,YAAY;gBACZ,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,cAAc;gBACd,kEAAkE;gBAClE,eAAe;gBACf,iBAAiB;gBACjB,aAAa;gBACb,OAAO;gBACP,gBAAgB;gBAChB,eAAe;gBACf,aAAa;gBACb,WAAW;gBACX,UAAU;aACX;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;extrude/section/split 语义\n // 不匹配(wasm 平面式)→ 保持 unsupported 不声明(engine-switch-p3 断言)。\n 'makeEllipsoid',\n 'makeTorus',\n 'makeVertex',\n 'mirror',\n 'shell',\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 ],\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,19 +1,27 @@
1
1
  /**
2
2
  * engine/adapters/occt — OCCT BREP 引擎适配器(槽位 1 的默认实现)
3
3
  *
4
+ * 本文件是「occt 引擎实现」的注册入口:把 `createOcctPrimitives()`(occt-kernel/
5
+ * occt-primitives.ts,L1 契约 `BrepEngineApi` 的 occt 显式实现)注册进引擎注册表。
6
+ * 业务层(runtime/brep ops/stdlib)只经注册表取引擎,不直接 import occt 初始化
7
+ * 函数——引擎本体可整体替换(换一个适配器即换引擎)。
4
8
  *
5
- * 本文件是「occt 引擎实现」的注册入口:把 occt-kernel 的 initOcctWasm 包装为
6
- * BrepEngine 注册进注册表。业务层(runtime/brep ops/stdlib)只经注册表取引擎,
7
- * 不直接 import occt 初始化函数——引擎本体可整体替换(换一个适配器即换引擎)。
9
+ * Phase 3(docs/plans/2026-09-24-brep-engine-api-narrowing-native-access.md):
10
+ * 本文件不再做任何猴子补丁(旧版在 occt-wasm 单例上覆写 pattern 三方法与 33 个
11
+ * 登记方法——全部移入 `createOcctPrimitives` 的显式对象字面量)。occt-wasm 类型
12
+ * 耦合只存在于 occt-kernel/(A1 允许的唯一耦合区);本文件不接触 occt-wasm 类型。
8
13
  *
9
- * OCCT 类型耦合(import 'occt-wasm')只存在于 occt-kernel/occtKernel.ts(A1 验收
10
- * 允许的唯一耦合区);本文件经 initOcctWasm 函数边界获得 BrepEngineApi,不直接
11
- * 接触 occt-wasm 类型。
14
+ * 平台独有能力(loft 族、工具实体 section/split、L1 三员之外的 *WithHistory、
15
+ * XCAF 等)不在 L1 契约里——平台代码经原生面 `getOcctKernel()`(D3)访问。
12
16
  */
13
17
  /** OCCT 引擎注册 id(默认 BREP 引擎;首个注册自动成为默认)。 */
14
18
  export declare const OCCT_BREP_ENGINE_ID = "occt";
15
19
  /**
16
- * 装配 OCCT BREP 引擎(幂等;pattern 三方法仅首次覆写,见上方长注释)。
20
+ * 装配 OCCT BREP 引擎(宿主启动时调用一次,幂等)。
21
+ *
22
+ * 预初始化 `createOcctPrimitives()`(内部 await initOcctWasm):wasm 加载完成后
23
+ * 立即注册——保证注册返回后内核单例已就绪。幂等:已注册(含运行时默认装配或
24
+ * 宿主先行注册)则跳过注册,仅确保 wasm 预初始化。
17
25
  */
18
26
  export declare function registerOcctBrepEngine(): Promise<void>;
19
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"occt.d.ts","sourceRoot":"","sources":["../../../../src/brep/engine/adapters/occt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,SAAS,CAAA;AA6IzC;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwL5D;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;AAuHzC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0B5D;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG7D"}