@faicad/faijs 0.29.5 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/NOTICE +6 -5
  2. package/dist/api/align/index.d.ts +64 -0
  3. package/dist/api/align/index.d.ts.map +1 -0
  4. package/dist/api/align/index.js +101 -0
  5. package/dist/api/align/index.js.map +1 -0
  6. package/dist/api/api-namespace.d.ts +6 -5
  7. package/dist/api/api-namespace.d.ts.map +1 -1
  8. package/dist/api/api-namespace.js +89 -5
  9. package/dist/api/api-namespace.js.map +1 -1
  10. package/dist/api/appearance.d.ts +0 -2
  11. package/dist/api/appearance.d.ts.map +1 -1
  12. package/dist/api/appearance.js +0 -2
  13. package/dist/api/appearance.js.map +1 -1
  14. package/dist/api/assembly/entities.d.ts +1 -1
  15. package/dist/api/assembly/entities.js +1 -1
  16. package/dist/api/assembly/entities.js.map +1 -1
  17. package/dist/api/assembly/index.d.ts +1 -1
  18. package/dist/api/assembly/index.js +1 -1
  19. package/dist/api/assembly/index.js.map +1 -1
  20. package/dist/api/assembly/joints.d.ts +33 -15
  21. package/dist/api/assembly/joints.d.ts.map +1 -1
  22. package/dist/api/assembly/joints.js +31 -13
  23. package/dist/api/assembly/joints.js.map +1 -1
  24. package/dist/api/assembly/preview.d.ts +1 -1
  25. package/dist/api/assembly/preview.js +1 -1
  26. package/dist/api/assembly/preview.js.map +1 -1
  27. package/dist/api/assembly/solve.d.ts +1 -1
  28. package/dist/api/assembly/solve.js +1 -1
  29. package/dist/api/assembly/solve.js.map +1 -1
  30. package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
  31. package/dist/api/assembly/solvers/assembly-tree.js +1 -1
  32. package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
  33. package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
  34. package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
  35. package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
  36. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  37. package/dist/api/assembly/solvers/global-solver.js +3 -4
  38. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  39. package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
  40. package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
  41. package/dist/api/assembly/solvers/linalg.d.ts +2 -2
  42. package/dist/api/assembly/solvers/linalg.js +2 -2
  43. package/dist/api/assembly/solvers/linalg.js.map +1 -1
  44. package/dist/api/assembly/solvers/types.d.ts +2 -5
  45. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  46. package/dist/api/assembly/solvers/types.js +1 -4
  47. package/dist/api/assembly/solvers/types.js.map +1 -1
  48. package/dist/api/boolean-op/index.d.ts +65 -0
  49. package/dist/api/boolean-op/index.d.ts.map +1 -0
  50. package/dist/api/boolean-op/index.js +113 -0
  51. package/dist/api/boolean-op/index.js.map +1 -0
  52. package/dist/api/boolean.d.ts.map +1 -1
  53. package/dist/api/boolean.js +22 -33
  54. package/dist/api/boolean.js.map +1 -1
  55. package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
  56. package/dist/api/brep-mirror/booleanFns.js +5 -5
  57. package/dist/api/brep-mirror/booleanFns.js.map +1 -1
  58. package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
  59. package/dist/api/brep-mirror/compoundFns.js +4 -4
  60. package/dist/api/brep-mirror/compoundFns.js.map +1 -1
  61. package/dist/api/brep-mirror/healingFns.d.ts +4 -4
  62. package/dist/api/brep-mirror/healingFns.js +4 -4
  63. package/dist/api/brep-mirror/healingFns.js.map +1 -1
  64. package/dist/api/brep-mirror/hullFns.d.ts +2 -2
  65. package/dist/api/brep-mirror/hullFns.js +2 -2
  66. package/dist/api/brep-mirror/hullFns.js.map +1 -1
  67. package/dist/api/brep-mirror/patternFns.d.ts +5 -5
  68. package/dist/api/brep-mirror/patternFns.js +10 -10
  69. package/dist/api/brep-mirror/patternFns.js.map +1 -1
  70. package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
  71. package/dist/api/brep-mirror/primitiveFns.js +4 -4
  72. package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
  73. package/dist/api/brep-mirror/roofFns.d.ts +3 -3
  74. package/dist/api/brep-mirror/roofFns.js +7 -7
  75. package/dist/api/brep-mirror/roofFns.js.map +1 -1
  76. package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
  77. package/dist/api/brep-mirror/sweepFns.js +14 -14
  78. package/dist/api/brep-mirror/sweepFns.js.map +1 -1
  79. package/dist/api/brep-mirror/threadFns.d.ts +1 -1
  80. package/dist/api/brep-mirror/threadFns.js +1 -1
  81. package/dist/api/brep-mirror/threadFns.js.map +1 -1
  82. package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
  83. package/dist/api/brep-mirror/topologyFns.js +8 -8
  84. package/dist/api/brep-mirror/topologyFns.js.map +1 -1
  85. package/dist/api/brep-operations/booleanFns.d.ts +40 -0
  86. package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
  87. package/dist/api/brep-operations/booleanFns.js +104 -0
  88. package/dist/api/brep-operations/booleanFns.js.map +1 -0
  89. package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
  90. package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
  91. package/dist/api/brep-operations/brepHelpers.js +131 -0
  92. package/dist/api/brep-operations/brepHelpers.js.map +1 -0
  93. package/dist/api/brep-operations/compoundFns.d.ts +46 -0
  94. package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
  95. package/dist/api/brep-operations/compoundFns.js +299 -0
  96. package/dist/api/brep-operations/compoundFns.js.map +1 -0
  97. package/dist/api/brep-operations/healingFns.d.ts +91 -0
  98. package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
  99. package/dist/api/brep-operations/healingFns.js +321 -0
  100. package/dist/api/brep-operations/healingFns.js.map +1 -0
  101. package/dist/api/brep-operations/hullFns.d.ts +20 -0
  102. package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
  103. package/dist/api/brep-operations/hullFns.js +46 -0
  104. package/dist/api/brep-operations/hullFns.js.map +1 -0
  105. package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
  106. package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
  107. package/dist/api/brep-operations/joinery-brep.js +463 -0
  108. package/dist/api/brep-operations/joinery-brep.js.map +1 -0
  109. package/dist/api/brep-operations/patternFns.d.ts +43 -0
  110. package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
  111. package/dist/api/brep-operations/patternFns.js +178 -0
  112. package/dist/api/brep-operations/patternFns.js.map +1 -0
  113. package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
  114. package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
  115. package/dist/api/brep-operations/primitiveFns.js +104 -0
  116. package/dist/api/brep-operations/primitiveFns.js.map +1 -0
  117. package/dist/api/brep-operations/roofFns.d.ts +24 -0
  118. package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
  119. package/dist/api/brep-operations/roofFns.js +229 -0
  120. package/dist/api/brep-operations/roofFns.js.map +1 -0
  121. package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
  122. package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
  123. package/dist/api/brep-operations/straightSkeleton.js +431 -0
  124. package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
  125. package/dist/api/brep-operations/sweepFns.d.ts +60 -0
  126. package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
  127. package/dist/api/brep-operations/sweepFns.js +323 -0
  128. package/dist/api/brep-operations/sweepFns.js.map +1 -0
  129. package/dist/api/brep-operations/threadFns.d.ts +83 -0
  130. package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
  131. package/dist/api/brep-operations/threadFns.js +138 -0
  132. package/dist/api/brep-operations/threadFns.js.map +1 -0
  133. package/dist/api/brep-operations/topologyFns.d.ts +111 -0
  134. package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
  135. package/dist/api/brep-operations/topologyFns.js +300 -0
  136. package/dist/api/brep-operations/topologyFns.js.map +1 -0
  137. package/dist/api/brep-topology.d.ts +1 -1
  138. package/dist/api/brep-topology.d.ts.map +1 -1
  139. package/dist/api/brep-topology.js +1 -1
  140. package/dist/api/brep-topology.js.map +1 -1
  141. package/dist/api/brepjs-compat/index.d.ts +1 -1
  142. package/dist/api/brepjs-compat/index.js +3 -3
  143. package/dist/api/brepjs-compat/index.js.map +1 -1
  144. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
  145. package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
  146. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
  147. package/dist/api/chamfer.d.ts +5 -4
  148. package/dist/api/chamfer.d.ts.map +1 -1
  149. package/dist/api/chamfer.js +12 -11
  150. package/dist/api/chamfer.js.map +1 -1
  151. package/dist/api/curve-sketch/index.d.ts +235 -0
  152. package/dist/api/curve-sketch/index.d.ts.map +1 -0
  153. package/dist/api/curve-sketch/index.js +493 -0
  154. package/dist/api/curve-sketch/index.js.map +1 -0
  155. package/dist/api/draft.d.ts.map +1 -1
  156. package/dist/api/draft.js +1 -3
  157. package/dist/api/draft.js.map +1 -1
  158. package/dist/api/engrave.d.ts.map +1 -1
  159. package/dist/api/engrave.js +6 -15
  160. package/dist/api/engrave.js.map +1 -1
  161. package/dist/api/export-3mf.d.ts +73 -0
  162. package/dist/api/export-3mf.d.ts.map +1 -0
  163. package/dist/api/export-3mf.js +121 -0
  164. package/dist/api/export-3mf.js.map +1 -0
  165. package/dist/api/export-brep.d.ts +47 -0
  166. package/dist/api/export-brep.d.ts.map +1 -0
  167. package/dist/api/export-brep.js +67 -0
  168. package/dist/api/export-brep.js.map +1 -0
  169. package/dist/api/export-step.d.ts +67 -0
  170. package/dist/api/export-step.d.ts.map +1 -0
  171. package/dist/api/export-step.js +98 -0
  172. package/dist/api/export-step.js.map +1 -0
  173. package/dist/api/export-stl.d.ts +58 -0
  174. package/dist/api/export-stl.d.ts.map +1 -0
  175. package/dist/api/export-stl.js +114 -0
  176. package/dist/api/export-stl.js.map +1 -0
  177. package/dist/api/extrude.d.ts +8 -11
  178. package/dist/api/extrude.d.ts.map +1 -1
  179. package/dist/api/extrude.js +11 -14
  180. package/dist/api/extrude.js.map +1 -1
  181. package/dist/api/feature-repair.d.ts +1 -1
  182. package/dist/api/feature-repair.d.ts.map +1 -1
  183. package/dist/api/feature-repair.js +1 -7
  184. package/dist/api/feature-repair.js.map +1 -1
  185. package/dist/api/fillet-variable.d.ts +2 -2
  186. package/dist/api/fillet-variable.d.ts.map +1 -1
  187. package/dist/api/fillet-variable.js +2 -3
  188. package/dist/api/fillet-variable.js.map +1 -1
  189. package/dist/api/fillet.d.ts +5 -7
  190. package/dist/api/fillet.d.ts.map +1 -1
  191. package/dist/api/fillet.js +5 -8
  192. package/dist/api/fillet.js.map +1 -1
  193. package/dist/api/generated/2d.d.ts +4 -0
  194. package/dist/api/generated/2d.d.ts.map +1 -1
  195. package/dist/api/generated/2d.js +4 -0
  196. package/dist/api/generated/2d.js.map +1 -1
  197. package/dist/api/generated/core.d.ts +4 -0
  198. package/dist/api/generated/core.d.ts.map +1 -1
  199. package/dist/api/generated/core.js +4 -0
  200. package/dist/api/generated/core.js.map +1 -1
  201. package/dist/api/generated/gear.d.ts +4 -0
  202. package/dist/api/generated/gear.d.ts.map +1 -1
  203. package/dist/api/generated/gear.js +4 -0
  204. package/dist/api/generated/gear.js.map +1 -1
  205. package/dist/api/generated/io.d.ts +4 -0
  206. package/dist/api/generated/io.d.ts.map +1 -1
  207. package/dist/api/generated/io.js +4 -0
  208. package/dist/api/generated/io.js.map +1 -1
  209. package/dist/api/generated/kernel.d.ts +4 -0
  210. package/dist/api/generated/kernel.d.ts.map +1 -1
  211. package/dist/api/generated/kernel.js +4 -0
  212. package/dist/api/generated/kernel.js.map +1 -1
  213. package/dist/api/generated/measurement.d.ts +21 -21
  214. package/dist/api/generated/measurement.d.ts.map +1 -1
  215. package/dist/api/generated/measurement.js +25 -21
  216. package/dist/api/generated/measurement.js.map +1 -1
  217. package/dist/api/generated/ns.d.ts +4 -0
  218. package/dist/api/generated/ns.d.ts.map +1 -1
  219. package/dist/api/generated/ns.js +4 -0
  220. package/dist/api/generated/ns.js.map +1 -1
  221. package/dist/api/generated/operations.d.ts +32 -32
  222. package/dist/api/generated/operations.d.ts.map +1 -1
  223. package/dist/api/generated/operations.js +58 -54
  224. package/dist/api/generated/operations.js.map +1 -1
  225. package/dist/api/generated/projection.d.ts +4 -0
  226. package/dist/api/generated/projection.d.ts.map +1 -1
  227. package/dist/api/generated/projection.js +4 -0
  228. package/dist/api/generated/projection.js.map +1 -1
  229. package/dist/api/generated/query.d.ts +4 -0
  230. package/dist/api/generated/query.d.ts.map +1 -1
  231. package/dist/api/generated/query.js +4 -0
  232. package/dist/api/generated/query.js.map +1 -1
  233. package/dist/api/generated/script-face-manifest.d.ts +1 -1
  234. package/dist/api/generated/script-face-manifest.js +3 -3
  235. package/dist/api/generated/script-face-manifest.js.map +1 -1
  236. package/dist/api/generated/script-face.d.ts +1 -1
  237. package/dist/api/generated/script-face.js +1 -1
  238. package/dist/api/generated/script-face.js.map +1 -1
  239. package/dist/api/generated/sketching.d.ts +2 -2
  240. package/dist/api/generated/sketching.d.ts.map +1 -1
  241. package/dist/api/generated/sketching.js +8 -4
  242. package/dist/api/generated/sketching.js.map +1 -1
  243. package/dist/api/generated/text.d.ts +4 -0
  244. package/dist/api/generated/text.d.ts.map +1 -1
  245. package/dist/api/generated/text.js +4 -0
  246. package/dist/api/generated/text.js.map +1 -1
  247. package/dist/api/generated/topology.d.ts +45 -45
  248. package/dist/api/generated/topology.d.ts.map +1 -1
  249. package/dist/api/generated/topology.js +77 -73
  250. package/dist/api/generated/topology.js.map +1 -1
  251. package/dist/api/generated/view.d.ts +4 -0
  252. package/dist/api/generated/view.d.ts.map +1 -1
  253. package/dist/api/generated/view.js +4 -0
  254. package/dist/api/generated/view.js.map +1 -1
  255. package/dist/api/geom-types/constants.d.ts +11 -0
  256. package/dist/api/geom-types/constants.d.ts.map +1 -0
  257. package/dist/api/geom-types/constants.js +11 -0
  258. package/dist/api/geom-types/constants.js.map +1 -0
  259. package/dist/api/geom-types/index.d.ts +21 -0
  260. package/dist/api/geom-types/index.d.ts.map +1 -0
  261. package/dist/api/geom-types/index.js +22 -0
  262. package/dist/api/geom-types/index.js.map +1 -0
  263. package/dist/api/geom-types/planeOps.d.ts +98 -0
  264. package/dist/api/geom-types/planeOps.d.ts.map +1 -0
  265. package/dist/api/geom-types/planeOps.js +170 -0
  266. package/dist/api/geom-types/planeOps.js.map +1 -0
  267. package/dist/api/geom-types/planeTypes.d.ts +24 -0
  268. package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
  269. package/dist/api/geom-types/planeTypes.js +8 -0
  270. package/dist/api/geom-types/planeTypes.js.map +1 -0
  271. package/dist/api/geom-types/types.d.ts +64 -0
  272. package/dist/api/geom-types/types.d.ts.map +1 -0
  273. package/dist/api/geom-types/types.js +48 -0
  274. package/dist/api/geom-types/types.js.map +1 -0
  275. package/dist/api/geom-types/vecOps.d.ts +124 -0
  276. package/dist/api/geom-types/vecOps.d.ts.map +1 -0
  277. package/dist/api/geom-types/vecOps.js +202 -0
  278. package/dist/api/geom-types/vecOps.js.map +1 -0
  279. package/dist/api/geom.d.ts.map +1 -1
  280. package/dist/api/geom.js +6 -5
  281. package/dist/api/geom.js.map +1 -1
  282. package/dist/api/half-space.d.ts +56 -0
  283. package/dist/api/half-space.d.ts.map +1 -0
  284. package/dist/api/half-space.js +82 -0
  285. package/dist/api/half-space.js.map +1 -0
  286. package/dist/api/helix.d.ts +11 -2
  287. package/dist/api/helix.d.ts.map +1 -1
  288. package/dist/api/helix.js +20 -4
  289. package/dist/api/helix.js.map +1 -1
  290. package/dist/api/index.d.ts +19 -7
  291. package/dist/api/index.d.ts.map +1 -1
  292. package/dist/api/index.js +44 -11
  293. package/dist/api/index.js.map +1 -1
  294. package/dist/api/internal/compat-op.d.ts +10 -36
  295. package/dist/api/internal/compat-op.d.ts.map +1 -1
  296. package/dist/api/internal/compat-op.js +17 -51
  297. package/dist/api/internal/compat-op.js.map +1 -1
  298. package/dist/api/internal/compat-projection.d.ts +5 -5
  299. package/dist/api/internal/compat-projection.js +5 -5
  300. package/dist/api/internal/compat-projection.js.map +1 -1
  301. package/dist/api/internal/dual-form-args.d.ts +0 -2
  302. package/dist/api/internal/dual-form-args.d.ts.map +1 -1
  303. package/dist/api/internal/dual-form-args.js +1 -3
  304. package/dist/api/internal/dual-form-args.js.map +1 -1
  305. package/dist/api/internal/export-members.d.ts +80 -0
  306. package/dist/api/internal/export-members.d.ts.map +1 -0
  307. package/dist/api/internal/export-members.js +104 -0
  308. package/dist/api/internal/export-members.js.map +1 -0
  309. package/dist/api/internal/l3-bridge.d.ts +22 -37
  310. package/dist/api/internal/l3-bridge.d.ts.map +1 -1
  311. package/dist/api/internal/l3-bridge.js +30 -77
  312. package/dist/api/internal/l3-bridge.js.map +1 -1
  313. package/dist/api/internal/profile-wire.d.ts +1 -1
  314. package/dist/api/internal/profile-wire.js +1 -1
  315. package/dist/api/internal/profile-wire.js.map +1 -1
  316. package/dist/api/internal/result-unwrap.d.ts +4 -6
  317. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  318. package/dist/api/internal/result-unwrap.js +4 -6
  319. package/dist/api/internal/result-unwrap.js.map +1 -1
  320. package/dist/api/knurl.d.ts.map +1 -1
  321. package/dist/api/knurl.js +5 -3
  322. package/dist/api/knurl.js.map +1 -1
  323. package/dist/api/loft.d.ts +2 -2
  324. package/dist/api/loft.d.ts.map +1 -1
  325. package/dist/api/loft.js +2 -2
  326. package/dist/api/loft.js.map +1 -1
  327. package/dist/api/measure-query/index.d.ts +262 -0
  328. package/dist/api/measure-query/index.d.ts.map +1 -0
  329. package/dist/api/measure-query/index.js +390 -0
  330. package/dist/api/measure-query/index.js.map +1 -0
  331. package/dist/api/measurement/index.d.ts +3 -3
  332. package/dist/api/measurement/index.js +3 -3
  333. package/dist/api/measurement/index.js.map +1 -1
  334. package/dist/api/meta.d.ts +0 -2
  335. package/dist/api/meta.d.ts.map +1 -1
  336. package/dist/api/meta.js +0 -2
  337. package/dist/api/meta.js.map +1 -1
  338. package/dist/api/offset2d.d.ts +49 -0
  339. package/dist/api/offset2d.d.ts.map +1 -0
  340. package/dist/api/offset2d.js +86 -0
  341. package/dist/api/offset2d.js.map +1 -0
  342. package/dist/api/pattern.d.ts.map +1 -1
  343. package/dist/api/pattern.js +3 -6
  344. package/dist/api/pattern.js.map +1 -1
  345. package/dist/api/primitives.d.ts +6 -6
  346. package/dist/api/primitives.d.ts.map +1 -1
  347. package/dist/api/primitives.js +19 -17
  348. package/dist/api/primitives.js.map +1 -1
  349. package/dist/api/profile.d.ts.map +1 -1
  350. package/dist/api/profile.js +0 -1
  351. package/dist/api/profile.js.map +1 -1
  352. package/dist/api/punch-hole.d.ts.map +1 -1
  353. package/dist/api/punch-hole.js +0 -1
  354. package/dist/api/punch-hole.js.map +1 -1
  355. package/dist/api/replicate.d.ts +6 -8
  356. package/dist/api/replicate.d.ts.map +1 -1
  357. package/dist/api/replicate.js +27 -65
  358. package/dist/api/replicate.js.map +1 -1
  359. package/dist/api/result.d.ts +1 -1
  360. package/dist/api/result.js +1 -1
  361. package/dist/api/result.js.map +1 -1
  362. package/dist/api/revolve.d.ts +2 -2
  363. package/dist/api/revolve.js +3 -3
  364. package/dist/api/revolve.js.map +1 -1
  365. package/dist/api/screw.d.ts +1 -1
  366. package/dist/api/screw.d.ts.map +1 -1
  367. package/dist/api/screw.js +5 -4
  368. package/dist/api/screw.js.map +1 -1
  369. package/dist/api/sdf.d.ts.map +1 -1
  370. package/dist/api/sdf.js +3 -2
  371. package/dist/api/sdf.js.map +1 -1
  372. package/dist/api/section-by-plane.d.ts.map +1 -1
  373. package/dist/api/section-by-plane.js +0 -1
  374. package/dist/api/section-by-plane.js.map +1 -1
  375. package/dist/api/shape-type/index.d.ts +141 -0
  376. package/dist/api/shape-type/index.d.ts.map +1 -0
  377. package/dist/api/shape-type/index.js +182 -0
  378. package/dist/api/shape-type/index.js.map +1 -0
  379. package/dist/api/shell.d.ts +2 -2
  380. package/dist/api/shell.d.ts.map +1 -1
  381. package/dist/api/shell.js +12 -3
  382. package/dist/api/shell.js.map +1 -1
  383. package/dist/api/sketch-on-face.d.ts +3 -3
  384. package/dist/api/sketch-on-face.d.ts.map +1 -1
  385. package/dist/api/sketch-on-face.js +6 -4
  386. package/dist/api/sketch-on-face.js.map +1 -1
  387. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  388. package/dist/api/sketch-on-plane.js +0 -1
  389. package/dist/api/sketch-on-plane.js.map +1 -1
  390. package/dist/api/solid-from-faces.d.ts +45 -0
  391. package/dist/api/solid-from-faces.d.ts.map +1 -0
  392. package/dist/api/solid-from-faces.js +72 -0
  393. package/dist/api/solid-from-faces.js.map +1 -0
  394. package/dist/api/solid-offset/index.d.ts +67 -0
  395. package/dist/api/solid-offset/index.d.ts.map +1 -0
  396. package/dist/api/solid-offset/index.js +132 -0
  397. package/dist/api/solid-offset/index.js.map +1 -0
  398. package/dist/api/split-by-plane.d.ts.map +1 -1
  399. package/dist/api/split-by-plane.js +0 -1
  400. package/dist/api/split-by-plane.js.map +1 -1
  401. package/dist/api/split.d.ts +1 -1
  402. package/dist/api/split.js +1 -1
  403. package/dist/api/split.js.map +1 -1
  404. package/dist/api/surface/arg-spec.d.ts +37 -44
  405. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  406. package/dist/api/surface/arg-spec.js +224 -233
  407. package/dist/api/surface/arg-spec.js.map +1 -1
  408. package/dist/api/surface-face/index.d.ts +104 -0
  409. package/dist/api/surface-face/index.d.ts.map +1 -0
  410. package/dist/api/surface-face/index.js +217 -0
  411. package/dist/api/surface-face/index.js.map +1 -0
  412. package/dist/api/surface.d.ts +44 -0
  413. package/dist/api/surface.d.ts.map +1 -0
  414. package/dist/api/surface.js +66 -0
  415. package/dist/api/surface.js.map +1 -0
  416. package/dist/api/sweep.d.ts +71 -9
  417. package/dist/api/sweep.d.ts.map +1 -1
  418. package/dist/api/sweep.js +13 -6
  419. package/dist/api/sweep.js.map +1 -1
  420. package/dist/api/thicken.d.ts +1 -1
  421. package/dist/api/thicken.d.ts.map +1 -1
  422. package/dist/api/thicken.js +12 -3
  423. package/dist/api/thicken.js.map +1 -1
  424. package/dist/api/transform.d.ts +8 -8
  425. package/dist/api/transform.d.ts.map +1 -1
  426. package/dist/api/transform.js +58 -27
  427. package/dist/api/transform.js.map +1 -1
  428. package/dist/api/view/cameraFns.d.ts +1 -1
  429. package/dist/api/view/cameraFns.d.ts.map +1 -1
  430. package/dist/api/view/cameraFns.js +1 -1
  431. package/dist/api/view/cameraFns.js.map +1 -1
  432. package/dist/api/view/index.d.ts +0 -2
  433. package/dist/api/view/index.d.ts.map +1 -1
  434. package/dist/api/view/index.js +0 -2
  435. package/dist/api/view/index.js.map +1 -1
  436. package/dist/api/view/projectionPlanes.d.ts +1 -1
  437. package/dist/api/view/projectionPlanes.d.ts.map +1 -1
  438. package/dist/api/view/projectionPlanes.js.map +1 -1
  439. package/dist/api/view/view-camera.d.ts +7 -9
  440. package/dist/api/view/view-camera.d.ts.map +1 -1
  441. package/dist/api/view/view-camera.js +4 -6
  442. package/dist/api/view/view-camera.js.map +1 -1
  443. package/dist/api/view/view-projection.d.ts +0 -2
  444. package/dist/api/view/view-projection.d.ts.map +1 -1
  445. package/dist/api/view/view-projection.js +0 -2
  446. package/dist/api/view/view-projection.js.map +1 -1
  447. package/dist/api/view/view-sheet.d.ts +0 -2
  448. package/dist/api/view/view-sheet.d.ts.map +1 -1
  449. package/dist/api/view/view-sheet.js +0 -2
  450. package/dist/api/view/view-sheet.js.map +1 -1
  451. package/dist/api/view-export/index.d.ts +97 -0
  452. package/dist/api/view-export/index.d.ts.map +1 -0
  453. package/dist/api/view-export/index.js +118 -0
  454. package/dist/api/view-export/index.js.map +1 -0
  455. package/dist/boolean/index.d.ts +23 -0
  456. package/dist/boolean/index.d.ts.map +1 -0
  457. package/dist/boolean/index.js +27 -0
  458. package/dist/boolean/index.js.map +1 -0
  459. package/dist/brep/brep-chain.d.ts +1 -19
  460. package/dist/brep/brep-chain.d.ts.map +1 -1
  461. package/dist/brep/brep-chain.js +0 -1
  462. package/dist/brep/brep-chain.js.map +1 -1
  463. package/dist/brep/brep-ops.d.ts +93 -2
  464. package/dist/brep/brep-ops.d.ts.map +1 -1
  465. package/dist/brep/brep-ops.js +185 -15
  466. package/dist/brep/brep-ops.js.map +1 -1
  467. package/dist/brep/brep-topology.d.ts +20 -0
  468. package/dist/brep/brep-topology.d.ts.map +1 -1
  469. package/dist/brep/brep-topology.js +46 -0
  470. package/dist/brep/brep-topology.js.map +1 -1
  471. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  472. package/dist/brep/engine/adapters/brep-mock.js +0 -3
  473. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  474. package/dist/brep/engine/adapters/brepkit.d.ts +4 -3
  475. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  476. package/dist/brep/engine/adapters/brepkit.js +4 -98
  477. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  478. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  479. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  480. package/dist/brep/engine/adapters/occt.js +4 -148
  481. package/dist/brep/engine/adapters/occt.js.map +1 -1
  482. package/dist/brep/engine/native-history.d.ts +27 -0
  483. package/dist/brep/engine/native-history.d.ts.map +1 -0
  484. package/dist/brep/engine/native-history.js +54 -0
  485. package/dist/brep/engine/native-history.js.map +1 -0
  486. package/dist/brep/engine/primitives.d.ts +2 -3
  487. package/dist/brep/engine/primitives.d.ts.map +1 -1
  488. package/dist/brep/engine/primitives.js +1 -2
  489. package/dist/brep/engine/primitives.js.map +1 -1
  490. package/dist/brep/engine/registry.d.ts +3 -5
  491. package/dist/brep/engine/registry.d.ts.map +1 -1
  492. package/dist/brep/engine/registry.js +2 -2
  493. package/dist/brep/engine/registry.js.map +1 -1
  494. package/dist/brep/engine/types.d.ts +35 -77
  495. package/dist/brep/engine/types.d.ts.map +1 -1
  496. package/dist/brep/engine/types.js.map +1 -1
  497. package/dist/brep/export/export-model.d.ts +21 -0
  498. package/dist/brep/export/export-model.d.ts.map +1 -1
  499. package/dist/brep/export/export-model.js +171 -73
  500. package/dist/brep/export/export-model.js.map +1 -1
  501. package/dist/brep/export/step.d.ts +17 -1
  502. package/dist/brep/export/step.d.ts.map +1 -1
  503. package/dist/brep/export/step.js +133 -0
  504. package/dist/brep/export/step.js.map +1 -1
  505. package/dist/brep/export/stl.d.ts +22 -1
  506. package/dist/brep/export/stl.d.ts.map +1 -1
  507. package/dist/brep/export/stl.js +58 -10
  508. package/dist/brep/export/stl.js.map +1 -1
  509. package/dist/brep/export/transform12.d.ts +47 -0
  510. package/dist/brep/export/transform12.d.ts.map +1 -0
  511. package/dist/brep/export/transform12.js +87 -0
  512. package/dist/brep/export/transform12.js.map +1 -0
  513. package/dist/brep/face-evolution.d.ts +53 -0
  514. package/dist/brep/face-evolution.d.ts.map +1 -1
  515. package/dist/brep/face-evolution.js +65 -0
  516. package/dist/brep/face-evolution.js.map +1 -1
  517. package/dist/brep/handle-bridge.d.ts +2 -2
  518. package/dist/brep/handle-bridge.js +2 -2
  519. package/dist/brep/handle-bridge.js.map +1 -1
  520. package/dist/brep/index.d.ts +6 -3
  521. package/dist/brep/index.d.ts.map +1 -1
  522. package/dist/brep/index.js +6 -3
  523. package/dist/brep/index.js.map +1 -1
  524. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  525. package/dist/brepkit-kernel/brepkitKernel.js +2 -2
  526. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  527. package/dist/browser-host/index.d.ts +4 -1
  528. package/dist/browser-host/index.d.ts.map +1 -1
  529. package/dist/browser-host/index.js +7 -1
  530. package/dist/browser-host/index.js.map +1 -1
  531. package/dist/browser.d.ts +5 -9
  532. package/dist/browser.d.ts.map +1 -1
  533. package/dist/browser.js +5 -26
  534. package/dist/browser.js.map +1 -1
  535. package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
  536. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  537. package/dist/cad-runtime/admit-compat-lib.js +3 -9
  538. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  539. package/dist/cad-runtime/backend-dispatch.d.ts +13 -58
  540. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  541. package/dist/cad-runtime/backend-dispatch.js +34 -83
  542. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  543. package/dist/cad-runtime/content-key.d.ts +3 -3
  544. package/dist/cad-runtime/content-key.js +3 -3
  545. package/dist/cad-runtime/content-key.js.map +1 -1
  546. package/dist/cad-runtime/direct-executor.d.ts +6 -3
  547. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  548. package/dist/cad-runtime/direct-executor.js +31 -9
  549. package/dist/cad-runtime/direct-executor.js.map +1 -1
  550. package/dist/cad-runtime/interp/env.d.ts +1 -1
  551. package/dist/cad-runtime/interp/env.js.map +1 -1
  552. package/dist/cad-runtime/lib-id.d.ts +0 -2
  553. package/dist/cad-runtime/lib-id.d.ts.map +1 -1
  554. package/dist/cad-runtime/lib-id.js +0 -2
  555. package/dist/cad-runtime/lib-id.js.map +1 -1
  556. package/dist/cad-runtime/live-shapes.d.ts +3 -5
  557. package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
  558. package/dist/cad-runtime/live-shapes.js +8 -10
  559. package/dist/cad-runtime/live-shapes.js.map +1 -1
  560. package/dist/cad-runtime/ports.d.ts +31 -3
  561. package/dist/cad-runtime/ports.d.ts.map +1 -1
  562. package/dist/cad-runtime/ports.js.map +1 -1
  563. package/dist/cad-runtime/runtime.d.ts +54 -19
  564. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  565. package/dist/cad-runtime/runtime.js +89 -54
  566. package/dist/cad-runtime/runtime.js.map +1 -1
  567. package/dist/define-op.d.ts +10 -14
  568. package/dist/define-op.d.ts.map +1 -1
  569. package/dist/define-op.js +5 -22
  570. package/dist/define-op.js.map +1 -1
  571. package/dist/env-agnostic.d.ts +2 -2
  572. package/dist/env-agnostic.d.ts.map +1 -1
  573. package/dist/env-agnostic.js +1 -1
  574. package/dist/env-agnostic.js.map +1 -1
  575. package/dist/geometry2d/bridge/plane.d.ts +1 -1
  576. package/dist/geometry2d/bridge/plane.js +1 -1
  577. package/dist/geometry2d/bridge/plane.js.map +1 -1
  578. package/dist/geometry2d/curve2d.d.ts +1 -1
  579. package/dist/geometry2d/curve2d.js +1 -1
  580. package/dist/geometry2d/curve2d.js.map +1 -1
  581. package/dist/index.d.ts +14 -65
  582. package/dist/index.d.ts.map +1 -1
  583. package/dist/index.js +18 -70
  584. package/dist/index.js.map +1 -1
  585. package/dist/io/fai-zip/container-read.d.ts +16 -0
  586. package/dist/io/fai-zip/container-read.d.ts.map +1 -1
  587. package/dist/io/fai-zip/container-read.js +22 -0
  588. package/dist/io/fai-zip/container-read.js.map +1 -1
  589. package/dist/io/fai-zip/index.d.ts +1 -1
  590. package/dist/io/fai-zip/index.d.ts.map +1 -1
  591. package/dist/io/fai-zip/index.js +1 -1
  592. package/dist/io/fai-zip/index.js.map +1 -1
  593. package/dist/lang/code-to-args.d.ts.map +1 -1
  594. package/dist/lang/code-to-args.js +10 -1
  595. package/dist/lang/code-to-args.js.map +1 -1
  596. package/dist/lang/determinism-scanner.d.ts.map +1 -1
  597. package/dist/lang/determinism-scanner.js +22 -9
  598. package/dist/lang/determinism-scanner.js.map +1 -1
  599. package/dist/lang/metadata-extractor.d.ts +27 -6
  600. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  601. package/dist/lang/metadata-extractor.js +88 -8
  602. package/dist/lang/metadata-extractor.js.map +1 -1
  603. package/dist/lang/parse-error.d.ts +4 -0
  604. package/dist/lang/parse-error.d.ts.map +1 -1
  605. package/dist/lang/parse-error.js.map +1 -1
  606. package/dist/lang/security-scanner.d.ts +27 -2
  607. package/dist/lang/security-scanner.d.ts.map +1 -1
  608. package/dist/lang/security-scanner.js +29 -2
  609. package/dist/lang/security-scanner.js.map +1 -1
  610. package/dist/lang/source-edit.d.ts +2 -2
  611. package/dist/lang/source-edit.js.map +1 -1
  612. package/dist/lang/symbol-table.generated.d.ts +53 -0
  613. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  614. package/dist/lang/symbol-table.generated.js +53 -0
  615. package/dist/lang/symbol-table.generated.js.map +1 -1
  616. package/dist/mesh/import-model.d.ts +94 -0
  617. package/dist/mesh/import-model.d.ts.map +1 -0
  618. package/dist/mesh/import-model.js +15 -0
  619. package/dist/mesh/import-model.js.map +1 -0
  620. package/dist/mesh/index.d.ts +19 -63
  621. package/dist/mesh/index.d.ts.map +1 -1
  622. package/dist/mesh/index.js +19 -72
  623. package/dist/mesh/index.js.map +1 -1
  624. package/dist/mesh/io.d.ts +62 -17
  625. package/dist/mesh/io.d.ts.map +1 -1
  626. package/dist/mesh/io.js +210 -41
  627. package/dist/mesh/io.js.map +1 -1
  628. package/dist/mesh/primitives.js +1 -1
  629. package/dist/mesh/primitives.js.map +1 -1
  630. package/dist/mesh/threemf-bambu.d.ts +12 -1
  631. package/dist/mesh/threemf-bambu.d.ts.map +1 -1
  632. package/dist/mesh/threemf-bambu.js +68 -16
  633. package/dist/mesh/threemf-bambu.js.map +1 -1
  634. package/dist/mesh/threemf-loader.d.ts +52 -5
  635. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  636. package/dist/mesh/threemf-loader.js +139 -41
  637. package/dist/mesh/threemf-loader.js.map +1 -1
  638. package/dist/mesh/transform.d.ts +1 -1
  639. package/dist/mesh/transform.js +1 -1
  640. package/dist/mesh/transform.js.map +1 -1
  641. package/dist/mesh/types.d.ts +35 -5
  642. package/dist/mesh/types.d.ts.map +1 -1
  643. package/dist/mesh/types.js.map +1 -1
  644. package/dist/node-host/cli.d.ts +49 -1
  645. package/dist/node-host/cli.d.ts.map +1 -1
  646. package/dist/node-host/cli.js +125 -19
  647. package/dist/node-host/cli.js.map +1 -1
  648. package/dist/node-host/execute-script.d.ts +56 -0
  649. package/dist/node-host/execute-script.d.ts.map +1 -0
  650. package/dist/node-host/execute-script.js +47 -0
  651. package/dist/node-host/execute-script.js.map +1 -0
  652. package/dist/node-host/index.d.ts +1 -0
  653. package/dist/node-host/index.d.ts.map +1 -1
  654. package/dist/node-host/index.js +4 -0
  655. package/dist/node-host/index.js.map +1 -1
  656. package/dist/node.d.ts +2 -0
  657. package/dist/node.d.ts.map +1 -1
  658. package/dist/node.js +3 -0
  659. package/dist/node.js.map +1 -1
  660. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
  661. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
  662. package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
  663. package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
  664. package/dist/occt-kernel/hullGeometry.d.ts +2 -2
  665. package/dist/occt-kernel/hullGeometry.js +2 -3
  666. package/dist/occt-kernel/hullGeometry.js.map +1 -1
  667. package/dist/occt-kernel/hullOps.d.ts +3 -3
  668. package/dist/occt-kernel/hullOps.js +4 -4
  669. package/dist/occt-kernel/hullOps.js.map +1 -1
  670. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  671. package/dist/occt-kernel/occt-primitives.js +31 -4
  672. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  673. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  674. package/dist/occt-kernel/occtKernel.js +18 -0
  675. package/dist/occt-kernel/occtKernel.js.map +1 -1
  676. package/dist/occt-scan/recognize.d.ts +58 -0
  677. package/dist/occt-scan/recognize.d.ts.map +1 -0
  678. package/dist/occt-scan/recognize.js +216 -0
  679. package/dist/occt-scan/recognize.js.map +1 -0
  680. package/dist/primitives/brep-primitives.js +7 -7
  681. package/dist/primitives/brep-primitives.js.map +1 -1
  682. package/dist/primitives/index.d.ts +19 -0
  683. package/dist/primitives/index.d.ts.map +1 -0
  684. package/dist/primitives/index.js +21 -0
  685. package/dist/primitives/index.js.map +1 -0
  686. package/dist/result/bug.d.ts +1 -1
  687. package/dist/result/bug.js +1 -1
  688. package/dist/result/bug.js.map +1 -1
  689. package/dist/result/errors.d.ts +2 -2
  690. package/dist/result/errors.d.ts.map +1 -1
  691. package/dist/result/errors.js +1 -1
  692. package/dist/result/errors.js.map +1 -1
  693. package/dist/result/vec3.d.ts +1 -1
  694. package/dist/result/vec3.js +1 -1
  695. package/dist/result/vec3.js.map +1 -1
  696. package/dist/runtime-state.d.ts +79 -29
  697. package/dist/runtime-state.d.ts.map +1 -1
  698. package/dist/runtime-state.js +84 -0
  699. package/dist/runtime-state.js.map +1 -1
  700. package/dist/script-globals.d.ts +24 -0
  701. package/dist/script-globals.d.ts.map +1 -0
  702. package/dist/script-globals.js +24 -0
  703. package/dist/script-globals.js.map +1 -0
  704. package/dist/sdf/index.d.ts +12 -0
  705. package/dist/sdf/index.d.ts.map +1 -0
  706. package/dist/sdf/index.js +13 -0
  707. package/dist/sdf/index.js.map +1 -0
  708. package/dist/sdk.d.ts +0 -1
  709. package/dist/sdk.d.ts.map +1 -1
  710. package/dist/sdk.js.map +1 -1
  711. package/dist/shape.d.ts +24 -0
  712. package/dist/shape.d.ts.map +1 -1
  713. package/dist/shape.js +40 -0
  714. package/dist/shape.js.map +1 -1
  715. package/dist/topology/naming/lineage.d.ts +3 -2
  716. package/dist/topology/naming/lineage.d.ts.map +1 -1
  717. package/dist/topology/naming/lineage.js.map +1 -1
  718. package/dist/weapp.d.ts +3 -3
  719. package/dist/weapp.d.ts.map +1 -1
  720. package/dist/weapp.js +2 -2
  721. package/dist/weapp.js.map +1 -1
  722. package/package.json +283 -44
@@ -18,22 +18,20 @@
18
18
  * also build `replica[*]/<inner>` role tables (same treatment as linearPattern,
19
19
  * via the shared buildReplicaRoleTable helper).
20
20
  * - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep
21
- * the input and delegate to the generated compatOp (borrow/adopt/capabilities/
22
- * naming preserved).
21
+ * the input and delegate to the generated compatOp (adopt/engines/naming
22
+ * preserved).
23
23
  *
24
24
  * The generated files stay untouched; overrides win via api-namespace spread
25
25
  * (same precedent as cut / split / linearPattern).
26
26
  *
27
27
  * 平台分层(narrowing plan Phase 5,D11):
28
- * - mirrorJoin / mirror:平台 op(依赖 occt-only `mirrorWithHistory`)→
29
- * `engines: ['occt']`,不声明 capabilities(能力由平台身份本身界定)。
30
- * - circularPattern / gridPattern / rectangularPattern / clone:中立 op(实现
31
- * 只用 L1 核心面)→ capabilities 收窄到真实 L1 名(删除 isNull/iterShapes/
32
- * section/translateWithHistory 等 occt-only 虚名,capability-map 实证实现不依赖)。
28
+ * - mirrorJoin / mirror / circularPattern / gridPattern / rectangularPattern /
29
+ * clone:中立 op(实现只用 L1 核心面)→ 无 engines、无能力声明;
30
+ * 面演化轨由 `hasNativeHistory` 在 mirrorBrep 内部按引擎事实静态分叉。
33
31
  */
34
32
  import { solidToShape } from '../brep/brep-ops.js';
35
33
  import { getBrepApi } from '../brep/handle-bridge.js';
36
- import { getCurrentStmt, keep } from '../runtime-state.js';
34
+ import { getCurrentStmt, keep, keepHidden } from '../runtime-state.js';
37
35
  import { fromBrep, brepOf } from '../shape.js';
38
36
  import { defineOp } from '../sdk.js';
39
37
  import { buildReplicaRoleTable } from './internal/replica-role-table.js';
@@ -121,7 +119,7 @@ function reflectAcrossPlane(p, o, n) {
121
119
  export const circularPattern = defineOp({
122
120
  meshEngines: ['brepkit'],
123
121
  mesh(input, axis, count, fullAngle = 360, center = [0, 0, 0]) {
124
- keep(input);
122
+ keepHidden(input);
125
123
  const entry = meshSolidBasicEntry(input, 'circularPattern');
126
124
  const u = norm(axis);
127
125
  const step = fullAngle / count;
@@ -130,7 +128,7 @@ export const circularPattern = defineOp({
130
128
  return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () => entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count));
131
129
  },
132
130
  brep(input, axis, count, fullAngle = 360, center = [0, 0, 0]) {
133
- keep(input);
131
+ keepHidden(input);
134
132
  const { kernel, solid, outStmt } = prelude(input, 'circularPattern');
135
133
  const u = norm(axis);
136
134
  const step = fullAngle / count;
@@ -154,18 +152,7 @@ export const circularPattern = defineOp({
154
152
  const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt);
155
153
  return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable });
156
154
  },
157
- // 中立 op(D11):capabilities 收窄到实现真实调用的 L1 名(删除 isNull/iterShapes/
158
- // section 等 occt-only 虚名——实现只调 kernel.circularPattern/fuseAll)。
159
- capabilities: [
160
- 'circularPattern',
161
- 'dispose',
162
- 'fuseAll',
163
- 'hashCode',
164
- 'surfaceCenterOfMass',
165
- 'surfaceNormal',
166
- 'surfaceType',
167
- 'uvBounds',
168
- ],
155
+ // 中立 op(D11):实现只用 L1 核心面(kernel.circularPattern/fuseAll)。
169
156
  naming: { kind: 'replicate', k: 0 },
170
157
  });
171
158
  // ── gridPattern ─────────────────────────────────────────────────────────────
@@ -191,7 +178,7 @@ export const circularPattern = defineOp({
191
178
  export const gridPattern = defineOp({
192
179
  meshEngines: ['brepkit'],
193
180
  mesh(input, directionX, directionY, countX, countY, spacingX, spacingY) {
194
- keep(input);
181
+ keepHidden(input);
195
182
  const entry = meshSolidBasicEntry(input, 'gridPattern');
196
183
  const dx = norm(directionX);
197
184
  const dy = norm(directionY);
@@ -211,7 +198,7 @@ export const gridPattern = defineOp({
211
198
  });
212
199
  },
213
200
  brep(input, directionX, directionY, countX, countY, spacingX, spacingY) {
214
- keep(input);
201
+ keepHidden(input);
215
202
  const { kernel, solid, outStmt } = prelude(input, 'gridPattern');
216
203
  const dx = norm(directionX);
217
204
  const dy = norm(directionY);
@@ -235,17 +222,7 @@ export const gridPattern = defineOp({
235
222
  const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt);
236
223
  return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable });
237
224
  },
238
- capabilities: [
239
- 'dispose',
240
- 'fuseAll',
241
- 'gridPattern',
242
- 'hashCode',
243
- 'linearPattern',
244
- 'surfaceCenterOfMass',
245
- 'surfaceNormal',
246
- 'surfaceType',
247
- 'uvBounds',
248
- ],
225
+ // 中立 op(D11):实现只用 L1 核心面(kernel.gridPattern/translate/fuseAll)。
249
226
  naming: { kind: 'replicate', k: 0 },
250
227
  });
251
228
  /**
@@ -265,7 +242,7 @@ export const gridPattern = defineOp({
265
242
  export const rectangularPattern = defineOp({
266
243
  meshEngines: ['brepkit'],
267
244
  mesh(input, options) {
268
- keep(input);
245
+ keepHidden(input);
269
246
  const entry = meshSolidBasicEntry(input, 'rectangularPattern');
270
247
  const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options;
271
248
  const dx = norm(xDir);
@@ -284,13 +261,12 @@ export const rectangularPattern = defineOp({
284
261
  });
285
262
  },
286
263
  brep(input, options) {
287
- keep(input);
264
+ keepHidden(input);
288
265
  const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern');
289
266
  const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options;
290
267
  const dx = norm(xDir);
291
268
  const dy = norm(yDir);
292
- // vendored rectangularPattern 是纯 JS 组合(translate + fuseAll),内核不声明
293
- // 该方法——与 vendored 同口径:逐份 translate 再 fuseAll。
269
+ // 实现为纯 JS 组合:逐份 translate 再 fuseAll,不依赖内核的 rectangularPattern 方法。
294
270
  const copies = [];
295
271
  try {
296
272
  for (let ix = 0; ix < xCount; ix++) {
@@ -324,17 +300,7 @@ export const rectangularPattern = defineOp({
324
300
  kernel.release(c);
325
301
  }
326
302
  },
327
- capabilities: [
328
- 'dispose',
329
- 'fuse',
330
- 'fuseAll',
331
- 'fuseWithHistory',
332
- 'hashCode',
333
- 'surfaceCenterOfMass',
334
- 'surfaceNormal',
335
- 'surfaceType',
336
- 'uvBounds',
337
- ],
303
+ // 中立 op(D11):实现只用 L1 核心面(kernel.translate/fuseAll)。
338
304
  naming: { kind: 'replicate', k: 0 },
339
305
  });
340
306
  /**
@@ -354,7 +320,7 @@ export const rectangularPattern = defineOp({
354
320
  export const mirrorJoin = defineOp({
355
321
  meshEngines: ['brepkit'],
356
322
  mesh(input, options) {
357
- keep(input);
323
+ keepHidden(input);
358
324
  const entry = meshSolidBasicEntry(input, 'mirrorJoin');
359
325
  const n = norm(optionVec(options?.normal, [1, 0, 0]));
360
326
  const o = toBrepVec(optionVec(options?.at, [0, 0, 0]));
@@ -377,15 +343,14 @@ export const mirrorJoin = defineOp({
377
343
  }
378
344
  },
379
345
  brep(input, options) {
380
- keep(input);
346
+ keepHidden(input);
381
347
  const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin');
382
348
  const n = norm(options?.normal ?? [1, 0, 0]);
383
349
  const o = toBrepVec(options?.at ?? [0, 0, 0]);
384
- // 2026-09-26 C 批降级:原实现直调 getOcctKernel().mirrorWithHistory(occt-only history
385
- // 镜像,返回 modified/newFaces 供细粒度 roleTable)。按用户指示「有没有历史 withhistory
386
- // 并不重要」,降级为 L1 kernel.mirror(brepkit 已声明 mirror 能力)——几何结果一致,
387
- // roleTable 仍由 buildReplicaRoleTable 经质心聚类重建(引擎无关),仅丢失 history 级
388
- // modified 面映射(不影响几何与产物有效性)。
350
+ // replicate 的 role table 经质心聚类重建(引擎无关),mirror history 对
351
+ // role table 无增量收益,故走 L1 kernel.mirror(两引擎的 L1 契约面均提供
352
+ // `mirror`;`mirrorWithHistory` 不参与本 op,与引擎身份无关)。
353
+ // 面演化由 mirrorBrep(topologyFns.ts)双轨接入,replicate 不重复消费。
389
354
  const mirrored = kernel.mirror(solid, o, toBrepVec(n));
390
355
  try {
391
356
  const resultSolid = kernel.fuse(solid, mirrored);
@@ -400,9 +365,8 @@ export const mirrorJoin = defineOp({
400
365
  kernel.release(mirrored);
401
366
  }
402
367
  },
403
- // 2026-09-26 C 批:从 engines:[occt] 降级为 capabilities:['mirror','fuse'](L1 中立面,
404
- // brepkit 已声明二者)。history 语义丢失(见上注释),几何不回退。
405
- capabilities: ['mirror', 'fuse'],
368
+ // 中立 op(D11):实现只用 L1 核心面(kernel.mirror/fuse)。replicate 的
369
+ // role table 不消费 mirror history(见上注释),面演化由 mirrorBrep 双轨接入。
406
370
  naming: { kind: 'replicate', k: 2 },
407
371
  });
408
372
  // ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────
@@ -440,10 +404,8 @@ export const mirror = defineOp({
440
404
  keep(input);
441
405
  return (await generatedMirror(input, options));
442
406
  },
443
- // 2026-09-26 B 批:generatedMirror 已降级为 L1 kernel.mirror(brepkit 已声明 mirror
444
- // 能力),薄 override 同步从 engines:[occt] 降级为 capabilities:['mirror']——
445
- // 与 clone 薄 override 同模式(外层门不拦 brepkit,内层 generatedMirror 已按能力路由)。
446
- capabilities: ['mirror'],
407
+ // 薄 override:generatedMirror 走 L1 kernel.mirror,与 clone 薄 override 同模式
408
+ // (无能力门,内层实现自行按引擎事实分叉)。面演化由 mirrorBrep 双轨接入。
447
409
  naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } },
448
410
  });
449
411
  /**
@@ -477,7 +439,7 @@ export const clone = defineOp({
477
439
  keep(input);
478
440
  return (await generatedClone(input));
479
441
  },
480
- capabilities: ['copyShape', 'dispose'],
442
+ // 中立 op(D11):实现只用 L1 核心面(kernel.copyShape)。
481
443
  naming: { kind: 'identity' },
482
444
  });
483
445
  //# sourceMappingURL=replicate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/api/replicate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * replicate — handwritten overrides for the copy-family ops (keep semantics +\n * replica[k] role tables).\n *\n * @platform occt — 本文件 import occt-kernel(mirrorJoin 走 `mirrorWithHistory`\n * 平台面,D3)。文件级标注满足守卫①(平台 import 自证身份);文件内的**中立 op**\n * (circularPattern/gridPattern/rectangularPattern/clone 只用 L1 核心面)不声明\n * engines,运行时不拦截——标注只约束平台 import,不改变函数级中立性\n * (与 face-evolution.ts 同口径)。\n *\n * All 9 copy-like ops must NOT consume their input (same as `copy`): each brep\n * body declares `keep(input)` (function-body keep → KeepRegistry → live-shapes),\n * so the source stays a live terminal in both runtime and UI.\n *\n * Two groups:\n * - Multi-replica patterns (circularPattern / gridPattern / rectangularPattern /\n * mirrorJoin): promoted from generated compatOps to handwritten defineOps that\n * also build `replica[*]/<inner>` role tables (same treatment as linearPattern,\n * via the shared buildReplicaRoleTable helper).\n * - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep\n * the input and delegate to the generated compatOp (borrow/adopt/capabilities/\n * naming preserved).\n *\n * The generated files stay untouched; overrides win via api-namespace spread\n * (same precedent as cut / split / linearPattern).\n *\n * 平台分层(narrowing plan Phase 5,D11):\n * - mirrorJoin / mirror:平台 op(依赖 occt-only `mirrorWithHistory`)→\n * `engines: ['occt']`,不声明 capabilities(能力由平台身份本身界定)。\n * - circularPattern / gridPattern / rectangularPattern / clone:中立 op(实现\n * 只用 L1 核心面)→ capabilities 收窄到真实 L1 名(删除 isNull/iterShapes/\n * section/translateWithHistory 等 occt-only 虚名,capability-map 实证实现不依赖)。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { getCurrentStmt, keep } from '../runtime-state'\nimport { fromBrep, brepOf } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle, BrepVec3 } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { buildReplicaRoleTable, type ReplicaTransform } from './internal/replica-role-table'\nimport {\n meshKernelFailure,\n meshPatternProduct,\n meshSolidBasicEntry,\n meshSolidProduct,\n} from './internal/mesh-solid-op'\n// Generated compatOps (delegation targets for the thin single-copy overrides).\n// NOTE: transformCopy is NOT a script-face op (arg-spec skip: ComposedTransform\n// is not constructible in .fai.js); it stays a TS-library-only re-export.\nimport {\n mirror as generatedMirror,\n clone as generatedClone,\n} from './generated/topology'\n/** 镜像面参数(与 vendored MirrorOptions 同形;G5 去 brepjs 依赖后本地自持)。 */\ninterface MirrorOptions {\n /** 镜像面法向。默认 [0,0,1]。 */\n normal?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** 镜像面过点。默认 [0,0,0]。 */\n at?: readonly [number, number, number] | { x: number; y: number; z: number }\n}\n\n/** Normalize a vector (zero vector → [0,0,1] fallback, same as pattern.ts). */\nfunction norm(v: Vec3): Vec3 {\n const len = Math.hypot(v[0], v[1], v[2])\n if (len < 1e-9) return [0, 0, 1]\n return [v[0] / len, v[1] / len, v[2] / len]\n}\n\nfunction toBrepVec(v: Vec3): BrepVec3 {\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/**\n * `MirrorOptions` 的宽松向量形态(只读元组或 `{x,y,z}`)→ `Vec3`。\n *\n * 生成的 compatOp 自己吃得下这两种形态,网格路径要自己换算,故收在一处。\n *\n * @param v - the loosely typed vector from the op's options.\n * @param fallback - the default vector.\n * @returns the vector as a plain tuple.\n */\nfunction optionVec(\n v: readonly [number, number, number] | { x: number; y: number; z: number } | undefined,\n fallback: Vec3,\n): Vec3 {\n if (!v) return fallback\n if (Array.isArray(v)) return [v[0] as number, v[1] as number, v[2] as number]\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n}\n\n/** Shared prelude: L1 kernel(getBrepApi,D12)+ BREP input handle + output statement id. */\nfunction prelude(input: Shape, tag: string): { kernel: BrepEngineApi; solid: BrepHandle; outStmt: string } {\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error(`[api/${tag}] input is not BREP`)\n return { kernel, solid, outStmt: String(getCurrentStmt()?.id ?? '') }\n}\n\n/** Rotate point p around the axis line (point `center`, unit direction `u`) by theta radians. */\nfunction rotateAroundAxis(p: BrepVec3, center: BrepVec3, u: Vec3, theta: number): BrepVec3 {\n const vx = p.x - center.x\n const vy = p.y - center.y\n const vz = p.z - center.z\n const cos = Math.cos(theta)\n const sin = Math.sin(theta)\n const dot = vx * u[0] + vy * u[1] + vz * u[2]\n // u × v\n const cx = u[1] * vz - u[2] * vy\n const cy = u[2] * vx - u[0] * vz\n const cz = u[0] * vy - u[1] * vx\n return {\n x: center.x + vx * cos + cx * sin + u[0] * dot * (1 - cos),\n y: center.y + vy * cos + cy * sin + u[1] * dot * (1 - cos),\n z: center.z + vz * cos + cz * sin + u[2] * dot * (1 - cos),\n }\n}\n\n/** Reflect point p across the plane (point `o`, unit normal `n`). Self-inverse. */\nfunction reflectAcrossPlane(p: BrepVec3, o: BrepVec3, n: Vec3): BrepVec3 {\n const d = (p.x - o.x) * n[0] + (p.y - o.y) * n[1] + (p.z - o.z) * n[2]\n return { x: p.x - 2 * d * n[0], y: p.y - 2 * d * n[1], z: p.z - 2 * d * n[2] }\n}\n\n// ── circularPattern ─────────────────────────────────────────────────────────\n\n/**\n * 环形阵列:绕 axis 均分 fullAngle(度,缺省 360)复制 count 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name circularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[k]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param axis - 旋转轴方向。type:[x,y,z] required:true\n * @param count - 副本总数(含原位置)。type:number required:true\n * @param fullAngle - 总角度(度,缺省 360)。type:number required:false\n * @param center - 旋转轴上一点(缺省原点)。type:[x,y,z] required:false\n * @example\n * const p = await cad.circularPattern(part0, [0, 0, 1], 6)\n */\nexport const circularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n // 网格链:内核返回 count 份副本(含原位置),融合成一个网格零件;近似拓扑没有\n // role 层,故不产 `replica[k]/<inner>` 命名(如实缺席)。\n return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () =>\n entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count),\n )\n },\n brep(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n const raw = kernel.circularPattern(solid, toBrepVec(center), toBrepVec(u), step, count)\n\n let resultSolid: BrepHandle\n try {\n resultSolid = kernel.fuseAll(raw)\n } finally {\n for (const c of raw) kernel.release(c)\n }\n\n const replicas: ReplicaTransform[] = []\n for (let k = 0; k < count; k++) {\n const theta = (-k * step * Math.PI) / 180\n replicas.push({\n label: `replica[${k}]`,\n inverse: (c) => rotateAroundAxis(c, toBrepVec(center), u, theta),\n })\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):capabilities 收窄到实现真实调用的 L1 名(删除 isNull/iterShapes/\n // section 等 occt-only 虚名——实现只调 kernel.circularPattern/fuseAll)。\n capabilities: [\n 'circularPattern',\n 'dispose',\n 'fuseAll',\n 'hashCode',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── gridPattern ─────────────────────────────────────────────────────────────\n\n/**\n * 二维栅格阵列:沿 directionX × directionY 复制 countX×countY 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name gridPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 全部副本的 compound。\n * @param input - 目标几何。type:Shape required:true\n * @param directionX - 第一方向。type:[x,y,z] required:true\n * @param directionY - 第二方向。type:[x,y,z] required:true\n * @param countX - X 向副本数。type:number required:true\n * @param countY - Y 向副本数。type:number required:true\n * @param spacingX - X 向间距。type:number required:true\n * @param spacingY - Y 向间距。type:number required:true\n * @example\n * const p = await cad.gridPattern(part0, [1, 0, 0], [0, 1, 0], 3, 2, 20, 20)\n */\nexport const gridPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // 网格链走\"逐份平移 + fuseAll\"(与 rectangularPattern 同口径),不用内核的\n // `gridPattern`——那支返回**单个 compound 句柄**,近似拓扑无法把 compound 讲成\n // 一个网格零件;逐份平移则得到与线性/环形阵列同形的单一融合实体。\n return meshPatternProduct(entry, 'gridPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // kernel.gridPattern 返回 compound 单句柄(含全部副本),无需 fuse。\n const resultSolid = kernel.gridPattern(\n solid,\n toBrepVec(dx),\n toBrepVec(dy),\n spacingX,\n spacingY,\n countX,\n countY,\n )\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n capabilities: [\n 'dispose',\n 'fuseAll',\n 'gridPattern',\n 'hashCode',\n 'linearPattern',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── rectangularPattern ──────────────────────────────────────────────────────\n\ninterface RectangularPatternOptions {\n xDir: Vec3\n xCount: number\n xSpacing: number\n yDir: Vec3\n yCount: number\n ySpacing: number\n}\n\n/**\n * 矩形阵列:按 options(xDir/xCount/xSpacing/yDir/yCount/ySpacing)复制并 fuse。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name rectangularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - 阵列参数。type:RectangularPatternOptions required:true\n * @example\n * const p = await cad.rectangularPattern(part0, { xDir: [1,0,0], xCount: 3, xSpacing: 20, yDir: [0,1,0], yCount: 2, ySpacing: 15 })\n */\nexport const rectangularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options: RectangularPatternOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 与 BREP 路径同一手法(逐份 translate 再 fuseAll),只是句柄来自网格后端。\n return meshPatternProduct(entry, 'rectangularPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(input: Shape, options: RectangularPatternOptions) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // vendored rectangularPattern 是纯 JS 组合(translate + fuseAll),内核不声明\n // 该方法——与 vendored 同口径:逐份 translate 再 fuseAll。\n const copies: BrepHandle[] = []\n try {\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(kernel.translate(solid, ox * dx[0] + oy * dy[0], ox * dx[1] + oy * dy[1], ox * dx[2] + oy * dy[2]))\n }\n }\n const resultSolid = kernel.fuseAll(copies)\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n for (const c of copies) kernel.release(c)\n }\n },\n capabilities: [\n 'dispose',\n 'fuse',\n 'fuseAll',\n 'fuseWithHistory',\n 'hashCode',\n 'surfaceCenterOfMass',\n 'surfaceNormal',\n 'surfaceType',\n 'uvBounds',\n ],\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── mirrorJoin ──────────────────────────────────────────────────────────────\n\ninterface MirrorJoinOptions {\n normal?: Vec3\n at?: Vec3\n}\n\n/**\n * 镜像并融合:原物(replica[0])+ 沿平面镜像(replica[1])fuse 成一体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirrorJoin\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[0|1]/<inner>`。\n * @returns Shape fuse 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面法向与面上一点。type:MirrorJoinOptions required:false\n * @example\n * const p = await cad.mirrorJoin(part0, { normal: [1, 0, 0] })\n */\nexport const mirrorJoin = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorJoinOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirrorJoin')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n // 输入句柄**不释放**(keep 语义);只释放本次自造的镜像副本。\n let mirrored: BrepHandle\n try {\n mirrored = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n try {\n return meshSolidProduct(entry, entry.kernel.fuse(entry.solid, mirrored))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', 'fusing the mirrored copy', cause)\n } finally {\n entry.backend.release(mirrored)\n }\n },\n brep(input: Shape, options?: MirrorJoinOptions) {\n keep(input)\n const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin')\n const n = norm(options?.normal ?? [1, 0, 0])\n const o = toBrepVec(options?.at ?? [0, 0, 0])\n // 2026-09-26 C 批降级:原实现直调 getOcctKernel().mirrorWithHistory(occt-only history\n // 镜像,返回 modified/newFaces 供细粒度 roleTable)。按用户指示「有没有历史 withhistory\n // 并不重要」,降级为 L1 kernel.mirror(brepkit 已声明 mirror 能力)——几何结果一致,\n // roleTable 仍由 buildReplicaRoleTable 经质心聚类重建(引擎无关),仅丢失 history 级\n // modified 面映射(不影响几何与产物有效性)。\n const mirrored = kernel.mirror(solid, o, toBrepVec(n))\n try {\n const resultSolid = kernel.fuse(solid, mirrored)\n\n const replicas: ReplicaTransform[] = [\n { label: 'replica[0]', inverse: (c) => ({ x: c.x, y: c.y, z: c.z }) },\n { label: 'replica[1]', inverse: (c) => reflectAcrossPlane(c, o, n) },\n ]\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n kernel.release(mirrored)\n }\n },\n // 2026-09-26 C 批:从 engines:[occt] 降级为 capabilities:['mirror','fuse'](L1 中立面,\n // brepkit 已声明二者)。history 语义丢失(见上注释),几何不回退。\n capabilities: ['mirror', 'fuse'],\n naming: { kind: 'replicate', k: 2 } as Provenance,\n})\n\n// ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────\n\n/**\n * 镜像:返回镜像后的新 Shape(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirror\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 镜像后的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面。type:MirrorOptions required:false\n * @example\n * const p = await cad.mirror(part0, { normal: [1, 0, 0] })\n */\nexport const mirror = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirror')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n let result: BrepHandle\n try {\n result = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirror', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape, options?: MirrorOptions) {\n keep(input)\n return (await generatedMirror(input, options)) as Shape\n },\n // 2026-09-26 B 批:generatedMirror 已降级为 L1 kernel.mirror(brepkit 已声明 mirror\n // 能力),薄 override 同步从 engines:[occt] 降级为 capabilities:['mirror']——\n // 与 clone 薄 override 同模式(外层门不拦 brepkit,内层 generatedMirror 已按能力路由)。\n capabilities: ['mirror'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 深拷贝句柄:返回独立副本(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name clone\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 克隆的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @example\n * const p = await cad.clone(part0)\n */\nexport const clone = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'clone')\n let result: BrepHandle\n try {\n result = entry.kernel.copyShape(entry.solid)\n } catch (cause) {\n throw meshKernelFailure('clone', 'E_CLONE_FAILED', 'copying the mesh solid handle', cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape) {\n keep(input)\n return (await generatedClone(input)) as Shape\n },\n capabilities: ['copyShape', 'dispose'],\n naming: { kind: 'identity' } as Provenance,\n})\n"]}
1
+ {"version":3,"file":"replicate.js","sourceRoot":"","sources":["../../src/api/replicate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * replicate — handwritten overrides for the copy-family ops (keep semantics +\n * replica[k] role tables).\n *\n * @platform occt — 本文件 import occt-kernel(mirrorJoin 走 `mirrorWithHistory`\n * 平台面,D3)。文件级标注满足守卫①(平台 import 自证身份);文件内的**中立 op**\n * (circularPattern/gridPattern/rectangularPattern/clone 只用 L1 核心面)不声明\n * engines,运行时不拦截——标注只约束平台 import,不改变函数级中立性\n * (与 face-evolution.ts 同口径)。\n *\n * All 9 copy-like ops must NOT consume their input (same as `copy`): each brep\n * body declares `keep(input)` (function-body keep → KeepRegistry → live-shapes),\n * so the source stays a live terminal in both runtime and UI.\n *\n * Two groups:\n * - Multi-replica patterns (circularPattern / gridPattern / rectangularPattern /\n * mirrorJoin): promoted from generated compatOps to handwritten defineOps that\n * also build `replica[*]/<inner>` role tables (same treatment as linearPattern,\n * via the shared buildReplicaRoleTable helper).\n * - Single-copy ops (mirror / clone / transformCopy): thin overrides that keep\n * the input and delegate to the generated compatOp (adopt/engines/naming\n * preserved).\n *\n * The generated files stay untouched; overrides win via api-namespace spread\n * (same precedent as cut / split / linearPattern).\n *\n * 平台分层(narrowing plan Phase 5,D11):\n * - mirrorJoin / mirror / circularPattern / gridPattern / rectangularPattern /\n * clone:中立 op(实现只用 L1 核心面)→ 无 engines、无能力声明;\n * 面演化轨由 `hasNativeHistory` 在 mirrorBrep 内部按引擎事实静态分叉。\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { getCurrentStmt, keep, keepHidden } from '../runtime-state'\nimport { fromBrep, brepOf } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport type { BrepHandle, BrepVec3 } from '../brep/engine/types'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport { buildReplicaRoleTable, type ReplicaTransform } from './internal/replica-role-table'\nimport {\n meshKernelFailure,\n meshPatternProduct,\n meshSolidBasicEntry,\n meshSolidProduct,\n} from './internal/mesh-solid-op'\n// Generated compatOps (delegation targets for the thin single-copy overrides).\n// NOTE: transformCopy is NOT a script-face op (arg-spec skip: ComposedTransform\n// is not constructible in .fai.js); it stays a TS-library-only re-export.\nimport {\n mirror as generatedMirror,\n clone as generatedClone,\n} from './generated/topology'\n/** 镜像面参数(与旧 MirrorOptions 同形;G5 去外部依赖后本地自持)。 */\ninterface MirrorOptions {\n /** 镜像面法向。默认 [0,0,1]。 */\n normal?: readonly [number, number, number] | { x: number; y: number; z: number }\n /** 镜像面过点。默认 [0,0,0]。 */\n at?: readonly [number, number, number] | { x: number; y: number; z: number }\n}\n\n/** Normalize a vector (zero vector → [0,0,1] fallback, same as pattern.ts). */\nfunction norm(v: Vec3): Vec3 {\n const len = Math.hypot(v[0], v[1], v[2])\n if (len < 1e-9) return [0, 0, 1]\n return [v[0] / len, v[1] / len, v[2] / len]\n}\n\nfunction toBrepVec(v: Vec3): BrepVec3 {\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/**\n * `MirrorOptions` 的宽松向量形态(只读元组或 `{x,y,z}`)→ `Vec3`。\n *\n * 生成的 compatOp 自己吃得下这两种形态,网格路径要自己换算,故收在一处。\n *\n * @param v - the loosely typed vector from the op's options.\n * @param fallback - the default vector.\n * @returns the vector as a plain tuple.\n */\nfunction optionVec(\n v: readonly [number, number, number] | { x: number; y: number; z: number } | undefined,\n fallback: Vec3,\n): Vec3 {\n if (!v) return fallback\n if (Array.isArray(v)) return [v[0] as number, v[1] as number, v[2] as number]\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n}\n\n/** Shared prelude: L1 kernel(getBrepApi,D12)+ BREP input handle + output statement id. */\nfunction prelude(input: Shape, tag: string): { kernel: BrepEngineApi; solid: BrepHandle; outStmt: string } {\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error(`[api/${tag}] input is not BREP`)\n return { kernel, solid, outStmt: String(getCurrentStmt()?.id ?? '') }\n}\n\n/** Rotate point p around the axis line (point `center`, unit direction `u`) by theta radians. */\nfunction rotateAroundAxis(p: BrepVec3, center: BrepVec3, u: Vec3, theta: number): BrepVec3 {\n const vx = p.x - center.x\n const vy = p.y - center.y\n const vz = p.z - center.z\n const cos = Math.cos(theta)\n const sin = Math.sin(theta)\n const dot = vx * u[0] + vy * u[1] + vz * u[2]\n // u × v\n const cx = u[1] * vz - u[2] * vy\n const cy = u[2] * vx - u[0] * vz\n const cz = u[0] * vy - u[1] * vx\n return {\n x: center.x + vx * cos + cx * sin + u[0] * dot * (1 - cos),\n y: center.y + vy * cos + cy * sin + u[1] * dot * (1 - cos),\n z: center.z + vz * cos + cz * sin + u[2] * dot * (1 - cos),\n }\n}\n\n/** Reflect point p across the plane (point `o`, unit normal `n`). Self-inverse. */\nfunction reflectAcrossPlane(p: BrepVec3, o: BrepVec3, n: Vec3): BrepVec3 {\n const d = (p.x - o.x) * n[0] + (p.y - o.y) * n[1] + (p.z - o.z) * n[2]\n return { x: p.x - 2 * d * n[0], y: p.y - 2 * d * n[1], z: p.z - 2 * d * n[2] }\n}\n\n// ── circularPattern ─────────────────────────────────────────────────────────\n\n/**\n * 环形阵列:绕 axis 均分 fullAngle(度,缺省 360)复制 count 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name circularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[k]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param axis - 旋转轴方向。type:[x,y,z] required:true\n * @param count - 副本总数(含原位置)。type:number required:true\n * @param fullAngle - 总角度(度,缺省 360)。type:number required:false\n * @param center - 旋转轴上一点(缺省原点)。type:[x,y,z] required:false\n * @example\n * const p = await cad.circularPattern(part0, [0, 0, 1], 6)\n */\nexport const circularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n // 网格链:内核返回 count 份副本(含原位置),融合成一个网格零件;近似拓扑没有\n // role 层,故不产 `replica[k]/<inner>` 命名(如实缺席)。\n return meshPatternProduct(entry, 'circularPattern', 'E_PATTERN_FAILED', () =>\n entry.kernel.circularPattern(entry.solid, toBrepVec(center), toBrepVec(u), step, count),\n )\n },\n brep(input: Shape, axis: Vec3, count: number, fullAngle: number = 360, center: Vec3 = [0, 0, 0]) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'circularPattern')\n const u = norm(axis)\n const step = fullAngle / count\n const raw = kernel.circularPattern(solid, toBrepVec(center), toBrepVec(u), step, count)\n\n let resultSolid: BrepHandle\n try {\n resultSolid = kernel.fuseAll(raw)\n } finally {\n for (const c of raw) kernel.release(c)\n }\n\n const replicas: ReplicaTransform[] = []\n for (let k = 0; k < count; k++) {\n const theta = (-k * step * Math.PI) / 180\n replicas.push({\n label: `replica[${k}]`,\n inverse: (c) => rotateAroundAxis(c, toBrepVec(center), u, theta),\n })\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.circularPattern/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── gridPattern ─────────────────────────────────────────────────────────────\n\n/**\n * 二维栅格阵列:沿 directionX × directionY 复制 countX×countY 份(含原位置)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name gridPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 全部副本的 compound。\n * @param input - 目标几何。type:Shape required:true\n * @param directionX - 第一方向。type:[x,y,z] required:true\n * @param directionY - 第二方向。type:[x,y,z] required:true\n * @param countX - X 向副本数。type:number required:true\n * @param countY - Y 向副本数。type:number required:true\n * @param spacingX - X 向间距。type:number required:true\n * @param spacingY - Y 向间距。type:number required:true\n * @example\n * const p = await cad.gridPattern(part0, [1, 0, 0], [0, 1, 0], 3, 2, 20, 20)\n */\nexport const gridPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // 网格链走\"逐份平移 + fuseAll\"(与 rectangularPattern 同口径),不用内核的\n // `gridPattern`——那支返回**单个 compound 句柄**,近似拓扑无法把 compound 讲成\n // 一个网格零件;逐份平移则得到与线性/环形阵列同形的单一融合实体。\n return meshPatternProduct(entry, 'gridPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(\n input: Shape,\n directionX: Vec3,\n directionY: Vec3,\n countX: number,\n countY: number,\n spacingX: number,\n spacingY: number,\n ) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'gridPattern')\n const dx = norm(directionX)\n const dy = norm(directionY)\n // kernel.gridPattern 返回 compound 单句柄(含全部副本),无需 fuse。\n const resultSolid = kernel.gridPattern(\n solid,\n toBrepVec(dx),\n toBrepVec(dy),\n spacingX,\n spacingY,\n countX,\n countY,\n )\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < countX; ix++) {\n for (let iy = 0; iy < countY; iy++) {\n const ox = ix * spacingX\n const oy = iy * spacingY\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.gridPattern/translate/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n// ── rectangularPattern ──────────────────────────────────────────────────────\n\ninterface RectangularPatternOptions {\n xDir: Vec3\n xCount: number\n xSpacing: number\n yDir: Vec3\n yCount: number\n ySpacing: number\n}\n\n/**\n * 矩形阵列:按 options(xDir/xCount/xSpacing/yDir/yCount/ySpacing)复制并 fuse。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name rectangularPattern\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[ix_iy]/<inner>`。\n * @returns Shape 所有副本 fused 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - 阵列参数。type:RectangularPatternOptions required:true\n * @example\n * const p = await cad.rectangularPattern(part0, { xDir: [1,0,0], xCount: 3, xSpacing: 20, yDir: [0,1,0], yCount: 2, ySpacing: 15 })\n */\nexport const rectangularPattern = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options: RectangularPatternOptions) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 与 BREP 路径同一手法(逐份 translate 再 fuseAll),只是句柄来自网格后端。\n return meshPatternProduct(entry, 'rectangularPattern', 'E_PATTERN_FAILED', () => {\n const copies: BrepHandle[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(entry.kernel.translate(\n entry.solid,\n ox * dx[0] + oy * dy[0],\n ox * dx[1] + oy * dy[1],\n ox * dx[2] + oy * dy[2],\n ))\n }\n }\n return copies\n })\n },\n brep(input: Shape, options: RectangularPatternOptions) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'rectangularPattern')\n const { xDir, xCount, xSpacing, yDir, yCount, ySpacing } = options\n const dx = norm(xDir)\n const dy = norm(yDir)\n // 实现为纯 JS 组合:逐份 translate 再 fuseAll,不依赖内核的 rectangularPattern 方法。\n const copies: BrepHandle[] = []\n try {\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n copies.push(kernel.translate(solid, ox * dx[0] + oy * dy[0], ox * dx[1] + oy * dy[1], ox * dx[2] + oy * dy[2]))\n }\n }\n const resultSolid = kernel.fuseAll(copies)\n\n const replicas: ReplicaTransform[] = []\n for (let ix = 0; ix < xCount; ix++) {\n for (let iy = 0; iy < yCount; iy++) {\n const ox = ix * xSpacing\n const oy = iy * ySpacing\n replicas.push({\n label: `replica[${ix}_${iy}]`,\n inverse: (c) => ({\n x: c.x - (ox * dx[0] + oy * dy[0]),\n y: c.y - (ox * dx[1] + oy * dy[1]),\n z: c.z - (ox * dx[2] + oy * dy[2]),\n }),\n })\n }\n }\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n for (const c of copies) kernel.release(c)\n }\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.translate/fuseAll)。\n naming: { kind: 'replicate', k: 0 } as Provenance,\n})\n\n// ── mirrorJoin ──────────────────────────────────────────────────────────────\n\ninterface MirrorJoinOptions {\n normal?: Vec3\n at?: Vec3\n}\n\n/**\n * 镜像并融合:原物(replica[0])+ 沿平面镜像(replica[1])fuse 成一体。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirrorJoin\n * @note BREP-only。keep 语义:不消费输入。结果面回投输入面角色,产出 `replica[0|1]/<inner>`。\n * @returns Shape fuse 后的几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面法向与面上一点。type:MirrorJoinOptions required:false\n * @example\n * const p = await cad.mirrorJoin(part0, { normal: [1, 0, 0] })\n */\nexport const mirrorJoin = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorJoinOptions) {\n keepHidden(input)\n const entry = meshSolidBasicEntry(input, 'mirrorJoin')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n // 输入句柄**不释放**(keep 语义);只释放本次自造的镜像副本。\n let mirrored: BrepHandle\n try {\n mirrored = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n try {\n return meshSolidProduct(entry, entry.kernel.fuse(entry.solid, mirrored))\n } catch (cause) {\n throw meshKernelFailure('mirrorJoin', 'E_MIRROR_FAILED', 'fusing the mirrored copy', cause)\n } finally {\n entry.backend.release(mirrored)\n }\n },\n brep(input: Shape, options?: MirrorJoinOptions) {\n keepHidden(input)\n const { kernel, solid, outStmt } = prelude(input, 'mirrorJoin')\n const n = norm(options?.normal ?? [1, 0, 0])\n const o = toBrepVec(options?.at ?? [0, 0, 0])\n // replicate 的 role table 经质心聚类重建(引擎无关),mirror history 对\n // role table 无增量收益,故走 L1 kernel.mirror(两引擎的 L1 契约面均提供\n // `mirror`;`mirrorWithHistory` 不参与本 op,与引擎身份无关)。\n // 面演化由 mirrorBrep(topologyFns.ts)双轨接入,replicate 不重复消费。\n const mirrored = kernel.mirror(solid, o, toBrepVec(n))\n try {\n const resultSolid = kernel.fuse(solid, mirrored)\n\n const replicas: ReplicaTransform[] = [\n { label: 'replica[0]', inverse: (c) => ({ x: c.x, y: c.y, z: c.z }) },\n { label: 'replica[1]', inverse: (c) => reflectAcrossPlane(c, o, n) },\n ]\n const roleTable = buildReplicaRoleTable(kernel, input, resultSolid, replicas, outStmt)\n return fromBrep(solidToShape(kernel, resultSolid), { solid: resultSolid, roleTable })\n } finally {\n kernel.release(mirrored)\n }\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.mirror/fuse)。replicate 的\n // role table 不消费 mirror history(见上注释),面演化由 mirrorBrep 双轨接入。\n naming: { kind: 'replicate', k: 2 } as Provenance,\n})\n\n// ── single-copy thin overrides(keep + 委托生成 op)─────────────────────────\n\n/**\n * 镜像:返回镜像后的新 Shape(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name mirror\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 镜像后的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @param options - { normal?, at? } 镜像面。type:MirrorOptions required:false\n * @example\n * const p = await cad.mirror(part0, { normal: [1, 0, 0] })\n */\nexport const mirror = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape, options?: MirrorOptions) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'mirror')\n const n = norm(optionVec(options?.normal, [1, 0, 0]))\n const o = toBrepVec(optionVec(options?.at, [0, 0, 0]))\n let result: BrepHandle\n try {\n result = entry.kernel.mirror(entry.solid, o, toBrepVec(n))\n } catch (cause) {\n throw meshKernelFailure('mirror', 'E_MIRROR_FAILED', `mirror across normal [${n.join(', ')}]`, cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape, options?: MirrorOptions) {\n keep(input)\n return (await generatedMirror(input, options)) as Shape\n },\n // 薄 override:generatedMirror 走 L1 kernel.mirror,与 clone 薄 override 同模式\n // (无能力门,内层实现自行按引擎事实分叉)。面演化由 mirrorBrep 双轨接入。\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n\n/**\n * 深拷贝句柄:返回独立副本(源保留)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name clone\n * @note BREP-only。keep 语义:不消费输入(薄 override 委托生成 op,行为不变)。\n * @returns Shape 克隆的新几何。\n * @param input - 目标几何。type:Shape required:true\n * @example\n * const p = await cad.clone(part0)\n */\nexport const clone = defineOp({\n meshEngines: ['brepkit'],\n mesh(input: Shape) {\n keep(input)\n const entry = meshSolidBasicEntry(input, 'clone')\n let result: BrepHandle\n try {\n result = entry.kernel.copyShape(entry.solid)\n } catch (cause) {\n throw meshKernelFailure('clone', 'E_CLONE_FAILED', 'copying the mesh solid handle', cause)\n }\n return meshSolidProduct(entry, result)\n },\n async brep(input: Shape) {\n keep(input)\n return (await generatedClone(input)) as Shape\n },\n // 中立 op(D11):实现只用 L1 核心面(kernel.copyShape)。\n naming: { kind: 'identity' } as Provenance,\n})\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Platform Result face — the first-party Result implementation.
3
3
  *
4
- * 2026-09-25 core-decouple Phase 1:从「vendored 投影」(旧 `export * from
4
+ * 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from
5
5
  * '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`
6
6
  * (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用
7
7
  * (fcstd 等下游按此 import)。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Platform Result face — the first-party Result implementation.
3
3
  *
4
- * 2026-09-25 core-decouple Phase 1:从「vendored 投影」(旧 `export * from
4
+ * 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from
5
5
  * '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`
6
6
  * (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用
7
7
  * (fcstd 等下游按此 import)。
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/api/result.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,kBAAkB,CAAA","sourcesContent":["/**\n * Platform Result face — the first-party Result implementation.\n *\n * 2026-09-25 core-decouple Phase 1:从「vendored 投影」(旧 `export * from\n * '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`\n * (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用\n * (fcstd 等下游按此 import)。\n */\nexport * from '../result/result'\n"]}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/api/result.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,kBAAkB,CAAA","sourcesContent":["/**\n * Platform Result face — the first-party Result implementation.\n *\n * 2026-09-25 core-decouple Phase 1:从「旧投影」(旧 `export * from\n * '@faicad/faijs-brepjs/core/result.js'`)改为 core 第一方模块 `result/result.ts`\n * (同源复制,签名不变)。`@faicad/faijs/api/result` 深路径保持可用\n * (fcstd 等下游按此 import)。\n */\nexport * from '../result/result'\n"]}
@@ -2,7 +2,7 @@
2
2
  * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)
3
3
  *
4
4
  * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由
5
- * vendored brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
5
+ * 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
6
6
  * 下游 `cad.edgeRef` 抛 "nameless shape"(ModelFromV021 缺陷)。
7
7
  *
8
8
  * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住
@@ -23,7 +23,7 @@ import type { Shape } from '../mesh/types.js';
23
23
  * @qual ok
24
24
  * @name revolve
25
25
  * @param face - 平面轮廓。type:Shape required:true
26
- * @param options - 旋转轴/点/角度(透传 vendored 语义)。type:RevolveOptions
26
+ * @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions
27
27
  * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。
28
28
  * @example
29
29
  * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })
@@ -2,7 +2,7 @@
2
2
  * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)
3
3
  *
4
4
  * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由
5
- * vendored brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
5
+ * 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,
6
6
  * 下游 `cad.edgeRef` 抛 "nameless shape"(ModelFromV021 缺陷)。
7
7
  *
8
8
  * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住
@@ -118,14 +118,14 @@ function revolveConstructRoles(kernel, solid, axisOpt) {
118
118
  * @qual ok
119
119
  * @name revolve
120
120
  * @param face - 平面轮廓。type:Shape required:true
121
- * @param options - 旋转轴/点/角度(透传 vendored 语义)。type:RevolveOptions
121
+ * @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions
122
122
  * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。
123
123
  * @example
124
124
  * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })
125
125
  */
126
126
  export const revolve = defineOp({
127
127
  brep: async (face, options) => {
128
- // vendored 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,
128
+ // compat 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,
129
129
  // 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的
130
130
  // 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。
131
131
  const kernel = getBrepApi();
@@ -1 +1 @@
1
- {"version":3,"file":"revolve.js","sourceRoot":"","sources":["../../src/api/revolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)\n *\n * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由\n * vendored brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,\n * 下游 `cad.edgeRef` 抛 \"nameless shape\"(ModelFromV021 缺陷)。\n *\n * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住\n * 投影调用,并在产物登记处建链根 roleTable(origin = 语句 StmtId,与\n * `extrude.ts` / `import-brep.ts` 同源机制)。\n *\n * 词汇表沿用生成 spec 的 construct 声明:`bottom` / `top`(旋转轴两端的平面\n * 端面)+ `wall:<i>`(其余侧面,按枚举序)。判定口径与 extrude 相同——现场\n * 几何是唯一真值:平面法向与轴 |cos| ≈ 1 → 端面,按中心沿轴坐标分 bottom/top;\n * 其余(含圆柱等曲面侧面)→ wall:i。无法分类的面不进表(缺身份是显式状态)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport { getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { runtimeLineage } from '../topology/naming/lineage'\nimport { formatRoleName, semantic, wall } from '../topology/naming/role-name'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * revolve 的 construct 词汇表:`bottom` / `top`(旋转轴两端的平面端面)+ `wall:<i>`。\n * 判定口径见 {@link revolveConstructRoles}。\n */\n\n/** options.axis 的宽松形态(数组或 {x,y,z})。 */\nfunction axisVec(v: unknown): readonly [number, number, number] {\n if (Array.isArray(v) && v.length >= 3 && v.every((n) => typeof n === 'number')) {\n return [v[0]!, v[1]!, v[2]!]\n }\n if (typeof v === 'object' && v !== null && 'x' in (v as object)) {\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n }\n return [0, 0, 1]\n}\n\n/**\n * revolve 的 construct 词汇枚举器(与 `extrudeConstructRoles` 同口径,轴来源不同:\n * extrude 从端面法向对差反推,revolve 直接用调用点声明的旋转轴)。\n *\n * @param kernel - the OCCT kernel.\n * @param solid - the revolved solid.\n * @param axis - the revolution axis (call-site declared; default [0,0,1]).\n * @returns role(线格式串)→ hash 子表。\n */\nfunction revolveConstructRoles(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n axisOpt: unknown,\n): Map<string, number[]> {\n const roles = new Map<string, number[]>()\n const faceHandles = kernel.getSubShapes(solid, 'face')\n try {\n const hashes = kernel.subShapeHashes(solid, 'face', 2147483647)\n const [ax0, ax1, ax2] = axisVec(axisOpt)\n const axLen = Math.hypot(ax0, ax1, ax2)\n if (axLen < 1e-9) return roles\n const ax: readonly [number, number, number] = [ax0 / axLen, ax1 / axLen, ax2 / axLen]\n\n const caps: { idx: number; t: number }[] = []\n const isPlaneCap: boolean[] = faceHandles.map((f) => {\n if (kernel.surfaceType(f) !== 'plane') return false\n const uv = kernel.uvBounds(f)\n const n = kernel.surfaceNormal(f, (uv.uMin + uv.uMax) / 2, (uv.vMin + uv.vMax) / 2)\n const len = Math.hypot(n.x, n.y, n.z) || 1\n const cos = Math.abs(n.x * ax[0]! + n.y * ax[1]! + n.z * ax[2]!) / len\n return cos > 0.999\n })\n for (let i = 0; i < faceHandles.length; i++) {\n if (hashes[i] === undefined) continue\n if (isPlaneCap[i]) {\n const c = kernel.surfaceCenterOfMass(faceHandles[i]!)\n caps.push({ idx: i, t: c.x * ax[0]! + c.y * ax[1]! + c.z * ax[2]! })\n }\n }\n if (caps.length >= 2) {\n // 常规旋转体:轴两端平面端面 = bottom/top,其余面(含曲面侧面)wall:<i>\n let wallIdx = 0\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined || isPlaneCap[i]) continue\n roles.set(formatRoleName(wall(wallIdx)), [hash])\n wallIdx++\n }\n caps.sort((p, q) => p.t - q.t)\n roles.set(formatRoleName(semantic('bottom')), [hashes[caps[0]!.idx]!])\n roles.set(formatRoleName(semantic('top')), [hashes[caps[caps.length - 1]!.idx]!])\n } else {\n // GOTCHA(退化形态,2026-09-23):轮廓面在轴平面内(如 XY 草图绕 Z 转)\n // 时产物的面法向全部 ∥ 轴 → caps 判不出两端。此时退化为按枚举序\n // wall:<i> 命名全部面——身份是能力,退化形态不给名字就会重演 nameless\n // shape 缺陷;枚举序稳定(同 extrude 的 wall 序依据)。\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined) continue\n roles.set(formatRoleName(wall(i)), [hash])\n }\n }\n return roles\n } finally {\n for (const h of faceHandles) {\n try { kernel.release(h) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 旋转成形:把平面轮廓绕轴旋转(兼容生成投影签名)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name revolve\n * @param face - 平面轮廓。type:Shape required:true\n * @param options - 旋转轴/点/角度(透传 vendored 语义)。type:RevolveOptions\n * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。\n * @example\n * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })\n */\nexport const revolve = defineOp({\n brep: async (face: Shape, options?: { axis?: unknown }) => {\n // vendored 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,\n // 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的\n // 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。\n const kernel = getBrepApi()\n const handle = brepOf(face) as BrepHandle\n if (!handle) throw new Error('[revolve] input is not BREP')\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: [number, number, number]\n axis?: [number, number, number]\n angle?: number\n }\n const revolved = kernel.revolveVec(handle, { x: at[0], y: at[1], z: at[2] }, { x: axis[0], y: axis[1], z: axis[2] }, (angle * 180) / Math.PI)\n const s = fromBrep(solidToShape(kernel, revolved), { solid: revolved }) as Shape\n if (!getBrepApi()) return s\n // E3(Q13 路线①):链根建 roleTable,origin = 语句 StmtId(Phase 1.6 口径)。\n // GOTCHA(2026-09-23):不能对 adoptEntity 的产物再走一次 fromBrep——同语句的\n // registeredStmtId 去重会让第二次登记被吞(探针实测:outputTables 里没有本\n // 语句键)。直接经 runtimeLineage.recordOutput 落语句键表;define-op 包装层\n // 会在 impl 返回后把它传播到 part 键权威位(edgeRef 的读口)。\n const origin = String(getCurrentStmt()?.id ?? '')\n const table = new Map([[origin, revolveConstructRoles(kernel, revolved, options?.axis)]])\n // GOTCHA:recordOutput 必须带第 4 参 part——part 键表(outputTablesByPart)\n // 是 op 实现与 edgeRef 解析的权威读口,只落语句键表时 part 键会保持\n // adoptEntity 时登记的空表(探针实测),下游仍报 no role lineage。\n const part = getCurrentStmt()?.outputs?.[0]\n runtimeLineage.recordOutput(origin as never, table, revolved, part as never)\n return s\n },\n naming: {\n kind: 'construct',\n newFaces: {\n via: 'explicit',\n vocab: [\n { kind: 'semantic', name: 'top' },\n { kind: 'semantic', name: 'bottom' },\n { kind: 'wall', index: 0 },\n ],\n },\n } as never,\n})\n"]}
1
+ {"version":3,"file":"revolve.js","sourceRoot":"","sources":["../../src/api/revolve.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * revolve — 手写平台 op(E3 / Q13 路线①的 revolve 实例)\n *\n * 生成投影(`api/generated/operations.ts` 的 revolve)是 compat op:几何由\n * 早期 brepjs 承载,但**没有可挂面命名的代码位置**,产物不带 roleTable,\n * 下游 `cad.edgeRef` 抛 \"nameless shape\"(ModelFromV021 缺陷)。\n *\n * 本文件按 `cut` 覆盖生成投影的同一先例(`api-namespace.ts`),用 defineOp 包住\n * 投影调用,并在产物登记处建链根 roleTable(origin = 语句 StmtId,与\n * `extrude.ts` / `import-brep.ts` 同源机制)。\n *\n * 词汇表沿用生成 spec 的 construct 声明:`bottom` / `top`(旋转轴两端的平面\n * 端面)+ `wall:<i>`(其余侧面,按枚举序)。判定口径与 extrude 相同——现场\n * 几何是唯一真值:平面法向与轴 |cos| ≈ 1 → 端面,按中心沿轴坐标分 bottom/top;\n * 其余(含圆柱等曲面侧面)→ wall:i。无法分类的面不进表(缺身份是显式状态)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { defineOp } from '../sdk'\nimport { getCurrentStmt } from '../runtime-state'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf, fromBrep } from '../shape'\nimport { solidToShape } from '../brep/brep-ops'\nimport { runtimeLineage } from '../topology/naming/lineage'\nimport { formatRoleName, semantic, wall } from '../topology/naming/role-name'\nimport type { BrepEngineApi } from '../brep/engine/primitives'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/**\n * revolve 的 construct 词汇表:`bottom` / `top`(旋转轴两端的平面端面)+ `wall:<i>`。\n * 判定口径见 {@link revolveConstructRoles}。\n */\n\n/** options.axis 的宽松形态(数组或 {x,y,z})。 */\nfunction axisVec(v: unknown): readonly [number, number, number] {\n if (Array.isArray(v) && v.length >= 3 && v.every((n) => typeof n === 'number')) {\n return [v[0]!, v[1]!, v[2]!]\n }\n if (typeof v === 'object' && v !== null && 'x' in (v as object)) {\n const o = v as { x: number; y: number; z: number }\n return [o.x, o.y, o.z]\n }\n return [0, 0, 1]\n}\n\n/**\n * revolve 的 construct 词汇枚举器(与 `extrudeConstructRoles` 同口径,轴来源不同:\n * extrude 从端面法向对差反推,revolve 直接用调用点声明的旋转轴)。\n *\n * @param kernel - the OCCT kernel.\n * @param solid - the revolved solid.\n * @param axis - the revolution axis (call-site declared; default [0,0,1]).\n * @returns role(线格式串)→ hash 子表。\n */\nfunction revolveConstructRoles(\n kernel: BrepEngineApi,\n solid: BrepHandle,\n axisOpt: unknown,\n): Map<string, number[]> {\n const roles = new Map<string, number[]>()\n const faceHandles = kernel.getSubShapes(solid, 'face')\n try {\n const hashes = kernel.subShapeHashes(solid, 'face', 2147483647)\n const [ax0, ax1, ax2] = axisVec(axisOpt)\n const axLen = Math.hypot(ax0, ax1, ax2)\n if (axLen < 1e-9) return roles\n const ax: readonly [number, number, number] = [ax0 / axLen, ax1 / axLen, ax2 / axLen]\n\n const caps: { idx: number; t: number }[] = []\n const isPlaneCap: boolean[] = faceHandles.map((f) => {\n if (kernel.surfaceType(f) !== 'plane') return false\n const uv = kernel.uvBounds(f)\n const n = kernel.surfaceNormal(f, (uv.uMin + uv.uMax) / 2, (uv.vMin + uv.vMax) / 2)\n const len = Math.hypot(n.x, n.y, n.z) || 1\n const cos = Math.abs(n.x * ax[0]! + n.y * ax[1]! + n.z * ax[2]!) / len\n return cos > 0.999\n })\n for (let i = 0; i < faceHandles.length; i++) {\n if (hashes[i] === undefined) continue\n if (isPlaneCap[i]) {\n const c = kernel.surfaceCenterOfMass(faceHandles[i]!)\n caps.push({ idx: i, t: c.x * ax[0]! + c.y * ax[1]! + c.z * ax[2]! })\n }\n }\n if (caps.length >= 2) {\n // 常规旋转体:轴两端平面端面 = bottom/top,其余面(含曲面侧面)wall:<i>\n let wallIdx = 0\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined || isPlaneCap[i]) continue\n roles.set(formatRoleName(wall(wallIdx)), [hash])\n wallIdx++\n }\n caps.sort((p, q) => p.t - q.t)\n roles.set(formatRoleName(semantic('bottom')), [hashes[caps[0]!.idx]!])\n roles.set(formatRoleName(semantic('top')), [hashes[caps[caps.length - 1]!.idx]!])\n } else {\n // GOTCHA(退化形态,2026-09-23):轮廓面在轴平面内(如 XY 草图绕 Z 转)\n // 时产物的面法向全部 ∥ 轴 → caps 判不出两端。此时退化为按枚举序\n // wall:<i> 命名全部面——身份是能力,退化形态不给名字就会重演 nameless\n // shape 缺陷;枚举序稳定(同 extrude 的 wall 序依据)。\n for (let i = 0; i < faceHandles.length; i++) {\n const hash = hashes[i]\n if (hash === undefined) continue\n roles.set(formatRoleName(wall(i)), [hash])\n }\n }\n return roles\n } finally {\n for (const h of faceHandles) {\n try { kernel.release(h) } catch { /* 已释放 */ }\n }\n }\n}\n\n/**\n * 旋转成形:把平面轮廓绕轴旋转(兼容生成投影签名)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name revolve\n * @param face - 平面轮廓。type:Shape required:true\n * @param options - 旋转轴/点/角度(透传 compat 语义)。type:RevolveOptions\n * @returns Shape 旋转体(带链根 roleTable:bottom/top/wall:i)。\n * @example\n * const p1 = await cad.revolve(part0, { axis: [0, 0, 1], at: [0, 0, 0], angle: 6.283185307179586 })\n */\nexport const revolve = defineOp({\n brep: async (face: Shape, options?: { axis?: unknown }) => {\n // compat 语义经 l3-bridge 三步桥接(与 compatOp 的 adapter 相同步骤,\n // 但在这里执行以便在**同一处**收编产物并建链根 roleTable——compatOp 的\n // 自动 adoptOut 会先登记一次,二次 fromBrep 会让 edgeRef 读到残缺表)。\n const kernel = getBrepApi()\n const handle = brepOf(face) as BrepHandle\n if (!handle) throw new Error('[revolve] input is not BREP')\n const { at = [0, 0, 0], axis = [0, 0, 1], angle = 2 * Math.PI } = (options ?? {}) as {\n at?: [number, number, number]\n axis?: [number, number, number]\n angle?: number\n }\n const revolved = kernel.revolveVec(handle, { x: at[0], y: at[1], z: at[2] }, { x: axis[0], y: axis[1], z: axis[2] }, (angle * 180) / Math.PI)\n const s = fromBrep(solidToShape(kernel, revolved), { solid: revolved }) as Shape\n if (!getBrepApi()) return s\n // E3(Q13 路线①):链根建 roleTable,origin = 语句 StmtId(Phase 1.6 口径)。\n // GOTCHA(2026-09-23):不能对 adoptEntity 的产物再走一次 fromBrep——同语句的\n // registeredStmtId 去重会让第二次登记被吞(探针实测:outputTables 里没有本\n // 语句键)。直接经 runtimeLineage.recordOutput 落语句键表;define-op 包装层\n // 会在 impl 返回后把它传播到 part 键权威位(edgeRef 的读口)。\n const origin = String(getCurrentStmt()?.id ?? '')\n const table = new Map([[origin, revolveConstructRoles(kernel, revolved, options?.axis)]])\n // GOTCHA:recordOutput 必须带第 4 参 part——part 键表(outputTablesByPart)\n // 是 op 实现与 edgeRef 解析的权威读口,只落语句键表时 part 键会保持\n // adoptEntity 时登记的空表(探针实测),下游仍报 no role lineage。\n const part = getCurrentStmt()?.outputs?.[0]\n runtimeLineage.recordOutput(origin as never, table, revolved, part as never)\n return s\n },\n naming: {\n kind: 'construct',\n newFaces: {\n via: 'explicit',\n vocab: [\n { kind: 'semantic', name: 'top' },\n { kind: 'semantic', name: 'bottom' },\n { kind: 'wall', index: 0 },\n ],\n },\n } as never,\n})\n"]}
@@ -2,7 +2,7 @@
2
2
  * api screw — 螺丝创建库函数(creator 函数,无输入)
3
3
  *
4
4
  * 平台分层(narrowing plan Phase 5,D11):**平台 op(occt)**——BREP 路径的
5
- * 螺纹经 `threadBrep`(brep-mirror/threadFns.ts)走 occt-only `loft`(D3)→
5
+ * 螺纹经 `threadBrep`(brep-operations/threadFns.ts)走 occt-only `loft`(D3)→
6
6
  * `engines: ['occt']`。mesh 路径(cad.screw)在 auto 模式下正常降级。
7
7
  *
8
8
  * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。
@@ -1 +1 @@
1
- {"version":3,"file":"screw.d.ts","sourceRoot":"","sources":["../../src/api/screw.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AA0H1C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASvE;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,eAAO,MAAM,KAAK;;CAoBhB,CAAA"}
1
+ {"version":3,"file":"screw.d.ts","sourceRoot":"","sources":["../../src/api/screw.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AA2H1C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CASvE;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AACJ,eAAO,MAAM,KAAK;;CAoBhB,CAAA"}
package/dist/api/screw.js CHANGED
@@ -2,14 +2,15 @@
2
2
  * api screw — 螺丝创建库函数(creator 函数,无输入)
3
3
  *
4
4
  * 平台分层(narrowing plan Phase 5,D11):**平台 op(occt)**——BREP 路径的
5
- * 螺纹经 `threadBrep`(brep-mirror/threadFns.ts)走 occt-only `loft`(D3)→
5
+ * 螺纹经 `threadBrep`(brep-operations/threadFns.ts)走 occt-only `loft`(D3)→
6
6
  * `engines: ['occt']`。mesh 路径(cad.screw)在 auto 模式下正常降级。
7
7
  *
8
8
  * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。
9
9
  */
10
- import { cad } from '../mesh/index.js';
10
+ // B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.
11
+ import * as meshPrimitives from '../mesh/primitives.js';
11
12
  import { solidToShape } from '../brep/brep-ops.js';
12
- import { threadBrep } from './brep-mirror/threadFns.js';
13
+ import { threadBrep } from './brep-operations/threadFns.js';
13
14
  import { getScrewSpec, threadToPitchMm, SCREW_HEAD_DIMS } from '../primitives/screw/screw-db.js';
14
15
  import { getBrepApi } from '../brep/handle-bridge.js';
15
16
  import { fromBrep } from '../shape.js';
@@ -145,7 +146,7 @@ export function assertScrewParams(params) {
145
146
  export const screw = defineOp({
146
147
  mesh: async (params) => {
147
148
  assertScrewParams(params);
148
- return cad.screw({
149
+ return meshPrimitives.screw({
149
150
  system: params.system,
150
151
  specIdx: params.specIdx,
151
152
  thread: params.thread,