@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-step.d.ts","sourceRoot":"","sources":["../../src/api/export-step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAMxC,2BAA2B;AAC3B,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB;AAqBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAkB5F"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * api exportStep — STEP 导出(脚本面薄壳:宿主门 + 引擎门 + 库面序列化器)
3
+ *
4
+ * §2.6 定式 1「薄壳 + 门禁,不重写格式逻辑」:本体只做四件事——宿主门
5
+ * (`assertHostFor`)→ 引擎门(`assertEngineFor`)→ 把入参转成 `ExportEntry[]`
6
+ * (`brep/export/export-model.ts#ExportEntry`)→ 调库面序列化器
7
+ * `exportModelSync(entries, 'step', { unit })`。因此脚本面与库面**天然逐字节同源**
8
+ * (矩阵 B12),单位声明与坐标刻度的成对不变式(§10.3 规则 3:OCCT 恒写
9
+ * SI_UNIT(.MILLI.,.METRE.),坐标预缩放后声明必须跟上)由库面统一保证,op 里不复刻。
10
+ *
11
+ * **引擎门**:STEP 的装配层级走 XCAF,只有 occt 具备(§2.3),故与
12
+ * `api/export-brep.ts:32` 同构地断言 `assertEngineFor('exportStep', ['occt'])`——
13
+ * 在触碰任何句柄之前报出 `E_BREP_UNSUPPORTED` 并带上当前引擎名,不补桩、不回退。
14
+ * 非 occt 引擎下**不得**让调用落进 `getBrepApi()` / `getOcctKernel()` 的未初始化
15
+ * 异常,也不得把 brepkit 句柄交给 occt 内核(句柄不得跨引擎传递)。
16
+ *
17
+ * **宿主门**:与其余导出命令同轴(§2.5),仅 `'node'` 宿主开放,且宿主门在引擎门
18
+ * 之前。理由:`.fai.js` 可由 AI 生成任意代码、属不受信输入,导出把「往哪写、写几份、
19
+ * 写什么」的决定权交给脚本文本;浏览器 / 小程序里要导出模型必须由宿主入口发起。
20
+ * 断言写在函数体第一行,所以脚本面 `cad.*` 与 TS 直连同一函数都被同一门禁覆盖。
21
+ *
22
+ * **层级入口**:入参是 `Shape` 或 `CompoundShape`(§2.1——`cad.assembly` / `cad.group`
23
+ * 的产物),`cad.exportStep(compound)` 即脚本面的层级导出入口;成员拆解口径见
24
+ * `api/internal/export-members.ts`(对齐 `node-host/cli.ts#writeAssemblyStep`)。
25
+ *
26
+ * **条目按格式分派**(定式 4):step 吃 `solid`(保留精确 BREP 拓扑,缺则库面用
27
+ * `mesh` 重建,`brep/export/step.ts:83`),所以活句柄存在就给 `solid`,没有才给
28
+ * `mesh`——与 `cli.ts#writeOutput`(`:744-758`)同口径。空装配**显式报错**,不落
29
+ * 空文件(对齐 `api/export-stl.ts` 的 `E_EXPORT_STL_EMPTY` 口径)。
30
+ */
31
+ import { brepOf } from '../shape.js';
32
+ import { exportModelSync } from '../brep/export/export-model.js';
33
+ import { exportMembersOf } from './internal/export-members.js';
34
+ import { assertEngineFor, assertHostFor } from './internal/l3-bridge.js';
35
+ /** 一个成员 → step 条目:有活句柄给精确 BREP,没有才退回自带三角载荷。 */
36
+ function stepEntryOf(member) {
37
+ const handle = brepOf(member.shape);
38
+ const positions = member.shape?.positions;
39
+ const indices = member.shape?.indices;
40
+ const hasMesh = !!positions && !!indices && positions.length > 0 && indices.length > 0;
41
+ const payload = handle
42
+ ? { solid: handle }
43
+ : hasMesh
44
+ ? { mesh: { positions, indices } }
45
+ : undefined;
46
+ if (!payload)
47
+ return undefined;
48
+ return {
49
+ ...payload,
50
+ ...(member.name === undefined ? {} : { name: member.name }),
51
+ ...(member.color === undefined ? {} : { color: member.color }),
52
+ };
53
+ }
54
+ /**
55
+ * 导出 STEP 文本(与 `cad.import_step` 成对的导出侧)。
56
+ * @group 导出
57
+ * @inputs 1
58
+ * @async false
59
+ * @qual ok
60
+ * @name exportStep
61
+ * @note 薄壳 op:条目构造后一律交库面 `exportModelSync(entries,'step',{unit})` 序列化,
62
+ * 故同一入参下脚本面文本与库面**逐字节一致**(同一真源,不另起写出通道)。
63
+ * 返回**纯文本**(ISO-10303-21),由宿主写入 `.step` / `.stp` 文件——内核不 import
64
+ * fs。`unit` 只声明单位,坐标换算与声明由库面成对完成(缺省 mm)。
65
+ * 入参可为单件 Shape 或装配 compound(`cad.assembly` / `cad.group` 产物),
66
+ * compound 逐成员导出并带上成员名与 `memberColors`;空装配显式报
67
+ * E_EXPORT_STEP_EMPTY,不落空文件。
68
+ * **双门**:宿主门仅 `'node'`(browser / weapp / 未声明报 E_HOST_UNSUPPORTED),
69
+ * 引擎门仅 `occt`(装配层级走 XCAF;非 occt 报 E_BREP_UNSUPPORTED)。门序固定
70
+ * 为宿主门 → 引擎门 → 实现体,两级都在触碰任何句柄之前。
71
+ * @returns string STEP(ISO-10303-21)文本。
72
+ * @param shape - 目标几何(单件 Shape 或装配 compound)。type:Shape|CompoundShape required:true
73
+ * @param options.unit - 文件里声明的长度单位,缺省 mm(坐标随之换算)。type:UnitName
74
+ * @example
75
+ * const text = cad.exportStep(part0)
76
+ * const asm = cad.exportStep(asm1, { unit: 'inch' })
77
+ */
78
+ export function exportStep(shape, options) {
79
+ // 门序固定:宿主门 → 引擎门(都在读 Shape 槽 / 触碰内核之前)。
80
+ assertHostFor('exportStep', ['node']);
81
+ assertEngineFor('exportStep', ['occt']);
82
+ const entries = [];
83
+ for (const member of exportMembersOf(shape)) {
84
+ const entry = stepEntryOf(member);
85
+ if (entry)
86
+ entries.push(entry);
87
+ }
88
+ if (entries.length === 0) {
89
+ throw new Error('E_EXPORT_STEP_EMPTY: exportStep input has no exportable member (empty assembly or payload-less members)');
90
+ }
91
+ const buffer = exportModelSync(entries, 'step', options?.unit === undefined ? undefined : { unit: options.unit });
92
+ const text = new TextDecoder().decode(new Uint8Array(buffer));
93
+ if (text.length === 0) {
94
+ throw new Error('E_EXPORT_STEP_EMPTY: occt produced no STEP text');
95
+ }
96
+ return text;
97
+ }
98
+ //# sourceMappingURL=export-step.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-step.js","sourceRoot":"","sources":["../../src/api/export-step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,eAAe,EAAoB,MAAM,6BAA6B,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAqB,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAWrE,+CAA+C;AAC/C,SAAS,WAAW,CAAC,MAAoB;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAA2B,CAAA;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,SAAS,CAAA;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAA;IACrC,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IACtF,MAAM,OAAO,GAA4B,MAAM;QAC7C,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;QACnB,CAAC,CAAC,OAAO;YACP,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;YAClC,CAAC,CAAC,SAAS,CAAA;IACf,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAC9B,OAAO;QACL,GAAG,OAAO;QACV,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;KAC/D,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,UAAU,CAAC,KAA4B,EAAE,OAA2B;IAClF,wCAAwC;IACxC,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,eAAe,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACvC,MAAM,OAAO,GAAkB,EAAE,CAAA;IACjC,KAAK,MAAM,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yGAAyG,CAAC,CAAA;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACjH,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["/**\n * api exportStep — STEP 导出(脚本面薄壳:宿主门 + 引擎门 + 库面序列化器)\n *\n * §2.6 定式 1「薄壳 + 门禁,不重写格式逻辑」:本体只做四件事——宿主门\n * (`assertHostFor`)→ 引擎门(`assertEngineFor`)→ 把入参转成 `ExportEntry[]`\n * (`brep/export/export-model.ts#ExportEntry`)→ 调库面序列化器\n * `exportModelSync(entries, 'step', { unit })`。因此脚本面与库面**天然逐字节同源**\n * (矩阵 B12),单位声明与坐标刻度的成对不变式(§10.3 规则 3:OCCT 恒写\n * SI_UNIT(.MILLI.,.METRE.),坐标预缩放后声明必须跟上)由库面统一保证,op 里不复刻。\n *\n * **引擎门**:STEP 的装配层级走 XCAF,只有 occt 具备(§2.3),故与\n * `api/export-brep.ts:32` 同构地断言 `assertEngineFor('exportStep', ['occt'])`——\n * 在触碰任何句柄之前报出 `E_BREP_UNSUPPORTED` 并带上当前引擎名,不补桩、不回退。\n * 非 occt 引擎下**不得**让调用落进 `getBrepApi()` / `getOcctKernel()` 的未初始化\n * 异常,也不得把 brepkit 句柄交给 occt 内核(句柄不得跨引擎传递)。\n *\n * **宿主门**:与其余导出命令同轴(§2.5),仅 `'node'` 宿主开放,且宿主门在引擎门\n * 之前。理由:`.fai.js` 可由 AI 生成任意代码、属不受信输入,导出把「往哪写、写几份、\n * 写什么」的决定权交给脚本文本;浏览器 / 小程序里要导出模型必须由宿主入口发起。\n * 断言写在函数体第一行,所以脚本面 `cad.*` 与 TS 直连同一函数都被同一门禁覆盖。\n *\n * **层级入口**:入参是 `Shape` 或 `CompoundShape`(§2.1——`cad.assembly` / `cad.group`\n * 的产物),`cad.exportStep(compound)` 即脚本面的层级导出入口;成员拆解口径见\n * `api/internal/export-members.ts`(对齐 `node-host/cli.ts#writeAssemblyStep`)。\n *\n * **条目按格式分派**(定式 4):step 吃 `solid`(保留精确 BREP 拓扑,缺则库面用\n * `mesh` 重建,`brep/export/step.ts:83`),所以活句柄存在就给 `solid`,没有才给\n * `mesh`——与 `cli.ts#writeOutput`(`:744-758`)同口径。空装配**显式报错**,不落\n * 空文件(对齐 `api/export-stl.ts` 的 `E_EXPORT_STL_EMPTY` 口径)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport type { CompoundShape } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\nimport type { UnitName } from '../units'\nimport { brepOf } from '../shape'\nimport { exportModelSync, type ExportEntry } from '../brep/export/export-model'\nimport { exportMembersOf, type ExportMember } from './internal/export-members'\nimport { assertEngineFor, assertHostFor } from './internal/l3-bridge'\n\n/** `cad.exportStep` 选项。 */\nexport interface ExportStepOptions {\n /**\n * 文件里声明的长度单位(缺省 `'mm'`)。语义与库面 `ExportOptions.unit` 一致:\n * 实现负责把坐标换算到该刻度,并与声明**成对**写出(`export-model.ts` §10.3)。\n */\n unit?: UnitName\n}\n\n/** 一个成员 → step 条目:有活句柄给精确 BREP,没有才退回自带三角载荷。 */\nfunction stepEntryOf(member: ExportMember): ExportEntry | undefined {\n const handle = brepOf(member.shape) as BrepHandle | undefined\n const positions = member.shape?.positions\n const indices = member.shape?.indices\n const hasMesh = !!positions && !!indices && positions.length > 0 && indices.length > 0\n const payload: ExportEntry | undefined = handle\n ? { solid: handle }\n : hasMesh\n ? { mesh: { positions, indices } }\n : undefined\n if (!payload) return undefined\n return {\n ...payload,\n ...(member.name === undefined ? {} : { name: member.name }),\n ...(member.color === undefined ? {} : { color: member.color }),\n }\n}\n\n/**\n * 导出 STEP 文本(与 `cad.import_step` 成对的导出侧)。\n * @group 导出\n * @inputs 1\n * @async false\n * @qual ok\n * @name exportStep\n * @note 薄壳 op:条目构造后一律交库面 `exportModelSync(entries,'step',{unit})` 序列化,\n * 故同一入参下脚本面文本与库面**逐字节一致**(同一真源,不另起写出通道)。\n * 返回**纯文本**(ISO-10303-21),由宿主写入 `.step` / `.stp` 文件——内核不 import\n * fs。`unit` 只声明单位,坐标换算与声明由库面成对完成(缺省 mm)。\n * 入参可为单件 Shape 或装配 compound(`cad.assembly` / `cad.group` 产物),\n * compound 逐成员导出并带上成员名与 `memberColors`;空装配显式报\n * E_EXPORT_STEP_EMPTY,不落空文件。\n * **双门**:宿主门仅 `'node'`(browser / weapp / 未声明报 E_HOST_UNSUPPORTED),\n * 引擎门仅 `occt`(装配层级走 XCAF;非 occt 报 E_BREP_UNSUPPORTED)。门序固定\n * 为宿主门 → 引擎门 → 实现体,两级都在触碰任何句柄之前。\n * @returns string STEP(ISO-10303-21)文本。\n * @param shape - 目标几何(单件 Shape 或装配 compound)。type:Shape|CompoundShape required:true\n * @param options.unit - 文件里声明的长度单位,缺省 mm(坐标随之换算)。type:UnitName\n * @example\n * const text = cad.exportStep(part0)\n * const asm = cad.exportStep(asm1, { unit: 'inch' })\n */\nexport function exportStep(shape: Shape | CompoundShape, options?: ExportStepOptions): string {\n // 门序固定:宿主门 → 引擎门(都在读 Shape 槽 / 触碰内核之前)。\n assertHostFor('exportStep', ['node'])\n assertEngineFor('exportStep', ['occt'])\n const entries: ExportEntry[] = []\n for (const member of exportMembersOf(shape)) {\n const entry = stepEntryOf(member)\n if (entry) entries.push(entry)\n }\n if (entries.length === 0) {\n throw new Error('E_EXPORT_STEP_EMPTY: exportStep input has no exportable member (empty assembly or payload-less members)')\n }\n const buffer = exportModelSync(entries, 'step', options?.unit === undefined ? undefined : { unit: options.unit })\n const text = new TextDecoder().decode(new Uint8Array(buffer))\n if (text.length === 0) {\n throw new Error('E_EXPORT_STEP_EMPTY: occt produced no STEP text')\n }\n return text\n}\n"]}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * api exportStl — STL 导出(中立 op:纯数据序列化,无内核调用)
3
+ *
4
+ * 中立性的判据(方案 §4.4 决策树):实现**不触达任何引擎** —— 它只读 faijs Shape
5
+ * 自带的三角载荷(`positions` / `indices`),不 import `occt-kernel/*` 或
6
+ * `brepkit-kernel/*`。mesh 链路与 brep 链路的 Shape 都带该载荷(brep 侧由
7
+ * `solidToShape` 即时三角化填好),故两条链路同一份实现,无引擎分支。
8
+ *
9
+ * 为什么不是平台 op:occt-wasm 有原生 `exportStl`,但本仓的 BREP 三角化统一走
10
+ * L1 `meshShape`(`brep/brep-ops.ts` 的 `solidToShape`)——Shape 上的载荷就是当前
11
+ * 用户看到的 mesh(规则 1)。走原生 `exportStl` 会**二次三角化**,产出与显示/拓扑
12
+ * 不一致的第二份 mesh。这里复用现有唯一序列化器
13
+ * `brep/export/stl.ts#buildStlBufferFromMesh`(宿主导出链同一真值来源)。
14
+ *
15
+ * 与既有能力的分工(方案 §4.5 去重表):`import_brep` / `import_step` 是**导入**侧;
16
+ * 本 op 是导出侧,与宿主 `exportModel('stl')` 同一序列化器,脚本面因此首次拿到
17
+ * 「导入 ↔ 导出」成对能力。
18
+ *
19
+ * **宿主门**:本 op 只在 `'node'` 宿主开放。`.fai.js` 可由 AI 生成任意代码、属
20
+ * 不受信输入,导出把「往哪写、写几份、写什么」的决定权交给脚本文本;浏览器 /
21
+ * 小程序里要导出模型必须由宿主入口触发(按钮或库面字节通道)。门禁写在函数体
22
+ * 第一行(`assertHostFor`),因此脚本面与库面直连同一函数都被同一门禁覆盖,
23
+ * 且门在读取 Shape 载荷之前。见 `cad-runtime/ports.ts#HostEnv`。
24
+ */
25
+ import type { Shape } from '../mesh/types.js';
26
+ /** `cad.exportStl` 选项。 */
27
+ export interface ExportStlOptions {
28
+ /**
29
+ * `true` → 返回 **ASCII** STL 文本;缺省/`false` → 返回 **binary** STL 字节
30
+ * (`Uint8Array`,84 + 50×三角形数 字节)。
31
+ */
32
+ ascii?: boolean;
33
+ /** 实体名(ASCII 形态的 `solid <name>` / binary 形态的 80 字节头;缺省 'Faicad STL')。 */
34
+ name?: string;
35
+ }
36
+ /**
37
+ * 导出 STL(二进制 / ASCII 双形态)。
38
+ * @group 导出
39
+ * @inputs 1
40
+ * @async false
41
+ * @qual ok
42
+ * @name exportStl
43
+ * @note 中立 op:只序列化 Shape 自带的三角载荷(brep 与 mesh 链路同一份实现),
44
+ * 不走原生二次三角化,产物与显示 mesh 逐三角形一致。空 mesh(如
45
+ * `cad.halfSpace` 产的无界体)显式报 E_EXPORT_STL_EMPTY,不返回空文件。
46
+ * 返回值是**纯数据**(二进制 `Uint8Array` 或 ASCII 文本),由宿主写入文件。
47
+ * **宿主门**:仅 `'node'` 宿主可执行;browser / weapp / 未声明宿主报
48
+ * E_HOST_UNSUPPORTED(门在读取载荷之前),浏览器与小程序里导出走宿主入口。
49
+ * @returns Uint8Array 二进制 STL 字节;`options.ascii === true` 时返回 ASCII 文本 string。
50
+ * @param shape - 目标几何(brep 或 mesh 链路的 Shape)。type:Shape required:true
51
+ * @param options.ascii - true = ASCII STL 文本,缺省 = 二进制。type:boolean
52
+ * @param options.name - 实体名(缺省 'Faicad STL')。type:string
53
+ * @example
54
+ * const bytes = cad.exportStl(part0)
55
+ * const text = cad.exportStl(part0, { ascii: true, name: 'bracket' })
56
+ */
57
+ export declare function exportStl(shape: Shape, options?: ExportStlOptions): Uint8Array | string;
58
+ //# sourceMappingURL=export-stl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-stl.d.ts","sourceRoot":"","sources":["../../src/api/export-stl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAK1C,0BAA0B;AAC1B,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAqED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAWvF"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * api exportStl — STL 导出(中立 op:纯数据序列化,无内核调用)
3
+ *
4
+ * 中立性的判据(方案 §4.4 决策树):实现**不触达任何引擎** —— 它只读 faijs Shape
5
+ * 自带的三角载荷(`positions` / `indices`),不 import `occt-kernel/*` 或
6
+ * `brepkit-kernel/*`。mesh 链路与 brep 链路的 Shape 都带该载荷(brep 侧由
7
+ * `solidToShape` 即时三角化填好),故两条链路同一份实现,无引擎分支。
8
+ *
9
+ * 为什么不是平台 op:occt-wasm 有原生 `exportStl`,但本仓的 BREP 三角化统一走
10
+ * L1 `meshShape`(`brep/brep-ops.ts` 的 `solidToShape`)——Shape 上的载荷就是当前
11
+ * 用户看到的 mesh(规则 1)。走原生 `exportStl` 会**二次三角化**,产出与显示/拓扑
12
+ * 不一致的第二份 mesh。这里复用现有唯一序列化器
13
+ * `brep/export/stl.ts#buildStlBufferFromMesh`(宿主导出链同一真值来源)。
14
+ *
15
+ * 与既有能力的分工(方案 §4.5 去重表):`import_brep` / `import_step` 是**导入**侧;
16
+ * 本 op 是导出侧,与宿主 `exportModel('stl')` 同一序列化器,脚本面因此首次拿到
17
+ * 「导入 ↔ 导出」成对能力。
18
+ *
19
+ * **宿主门**:本 op 只在 `'node'` 宿主开放。`.fai.js` 可由 AI 生成任意代码、属
20
+ * 不受信输入,导出把「往哪写、写几份、写什么」的决定权交给脚本文本;浏览器 /
21
+ * 小程序里要导出模型必须由宿主入口触发(按钮或库面字节通道)。门禁写在函数体
22
+ * 第一行(`assertHostFor`),因此脚本面与库面直连同一函数都被同一门禁覆盖,
23
+ * 且门在读取 Shape 载荷之前。见 `cad-runtime/ports.ts#HostEnv`。
24
+ */
25
+ import { buildStlBufferFromMesh, bakeMatrix12ToPositions } from '../brep/export/stl.js';
26
+ import { transformToMatrix12 } from '../brep/export/export-model.js';
27
+ import { assertHostFor } from './internal/l3-bridge.js';
28
+ /** 校验输入 Shape 带可用的三角载荷。 */
29
+ function meshOf(shape) {
30
+ const positions = shape?.positions;
31
+ const indices = shape?.indices;
32
+ if (!positions || !indices) {
33
+ throw new Error('E_EXPORT_STL_NO_MESH: exportStl requires a shape carrying mesh payload');
34
+ }
35
+ if (indices.length === 0) {
36
+ throw new Error('E_EXPORT_STL_EMPTY: shape has no triangles to export');
37
+ }
38
+ return { positions, indices };
39
+ }
40
+ /** 单位化叉积法向(退化三角形给 0 向量,与二进制形态同一规则)。 */
41
+ function facetNormal(positions, ia, ib, ic) {
42
+ const ax = positions[ia * 3];
43
+ const ay = positions[ia * 3 + 1];
44
+ const az = positions[ia * 3 + 2];
45
+ const ux = positions[ib * 3] - ax;
46
+ const uy = positions[ib * 3 + 1] - ay;
47
+ const uz = positions[ib * 3 + 2] - az;
48
+ const vx = positions[ic * 3] - ax;
49
+ const vy = positions[ic * 3 + 1] - ay;
50
+ const vz = positions[ic * 3 + 2] - az;
51
+ let nx = uy * vz - uz * vy;
52
+ let ny = uz * vx - ux * vz;
53
+ let nz = ux * vy - uy * vx;
54
+ const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
55
+ if (len > 0) {
56
+ nx /= len;
57
+ ny /= len;
58
+ nz /= len;
59
+ }
60
+ return [nx, ny, nz];
61
+ }
62
+ /** ASCII STL 文本(与二进制形态同一批三角形、同一法向规则;坐标以 mm 写出)。 */
63
+ function asciiStl(positions, indices, name, transform) {
64
+ const pos = transform ? bakeMatrix12ToPositions(positions, transform) : positions;
65
+ const out = [`solid ${name}`];
66
+ for (let i = 0; i < indices.length; i += 3) {
67
+ const ia = indices[i];
68
+ const ib = indices[i + 1];
69
+ const ic = indices[i + 2];
70
+ const [nx, ny, nz] = facetNormal(pos, ia, ib, ic);
71
+ out.push(` facet normal ${nx} ${ny} ${nz}`, ' outer loop');
72
+ for (const v of [ia, ib, ic]) {
73
+ out.push(` vertex ${pos[v * 3]} ${pos[v * 3 + 1]} ${pos[v * 3 + 2]}`);
74
+ }
75
+ out.push(' endloop', ' endfacet');
76
+ }
77
+ out.push(`endsolid ${name}`);
78
+ return out.join('\n');
79
+ }
80
+ /**
81
+ * 导出 STL(二进制 / ASCII 双形态)。
82
+ * @group 导出
83
+ * @inputs 1
84
+ * @async false
85
+ * @qual ok
86
+ * @name exportStl
87
+ * @note 中立 op:只序列化 Shape 自带的三角载荷(brep 与 mesh 链路同一份实现),
88
+ * 不走原生二次三角化,产物与显示 mesh 逐三角形一致。空 mesh(如
89
+ * `cad.halfSpace` 产的无界体)显式报 E_EXPORT_STL_EMPTY,不返回空文件。
90
+ * 返回值是**纯数据**(二进制 `Uint8Array` 或 ASCII 文本),由宿主写入文件。
91
+ * **宿主门**:仅 `'node'` 宿主可执行;browser / weapp / 未声明宿主报
92
+ * E_HOST_UNSUPPORTED(门在读取载荷之前),浏览器与小程序里导出走宿主入口。
93
+ * @returns Uint8Array 二进制 STL 字节;`options.ascii === true` 时返回 ASCII 文本 string。
94
+ * @param shape - 目标几何(brep 或 mesh 链路的 Shape)。type:Shape required:true
95
+ * @param options.ascii - true = ASCII STL 文本,缺省 = 二进制。type:boolean
96
+ * @param options.name - 实体名(缺省 'Faicad STL')。type:string
97
+ * @example
98
+ * const bytes = cad.exportStl(part0)
99
+ * const text = cad.exportStl(part0, { ascii: true, name: 'bracket' })
100
+ */
101
+ export function exportStl(shape, options) {
102
+ // 宿主门在实现体最前:非 node 宿主(browser / weapp / 未声明)一律先报
103
+ // E_HOST_UNSUPPORTED,不读取 Shape 载荷、不产任何字节。
104
+ assertHostFor('exportStl', ['node']);
105
+ const { positions, indices } = meshOf(shape);
106
+ const name = options?.name ?? 'Faicad STL';
107
+ // 顶点烘焙(方案 §2.1 / §5 步骤 5):Shape.transform 写回的位姿在此烘焙进每个顶点。
108
+ // 坐标仍一律以 mm 写出(与宿主 exportModel('stl') 的 unit 语义一致,单位换算在宿主侧完成)。
109
+ const tf = shape.transform ? transformToMatrix12(shape.transform) : null;
110
+ if (options?.ascii === true)
111
+ return asciiStl(positions, indices, name, tf ?? undefined);
112
+ return new Uint8Array(buildStlBufferFromMesh(positions, indices, name, tf ?? undefined));
113
+ }
114
+ //# sourceMappingURL=export-stl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-stl.js","sourceRoot":"","sources":["../../src/api/export-stl.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api exportStl — STL 导出(中立 op:纯数据序列化,无内核调用)\n *\n * 中立性的判据(方案 §4.4 决策树):实现**不触达任何引擎** —— 它只读 faijs Shape\n * 自带的三角载荷(`positions` / `indices`),不 import `occt-kernel/*` 或\n * `brepkit-kernel/*`。mesh 链路与 brep 链路的 Shape 都带该载荷(brep 侧由\n * `solidToShape` 即时三角化填好),故两条链路同一份实现,无引擎分支。\n *\n * 为什么不是平台 op:occt-wasm 有原生 `exportStl`,但本仓的 BREP 三角化统一走\n * L1 `meshShape`(`brep/brep-ops.ts` 的 `solidToShape`)——Shape 上的载荷就是当前\n * 用户看到的 mesh(规则 1)。走原生 `exportStl` 会**二次三角化**,产出与显示/拓扑\n * 不一致的第二份 mesh。这里复用现有唯一序列化器\n * `brep/export/stl.ts#buildStlBufferFromMesh`(宿主导出链同一真值来源)。\n *\n * 与既有能力的分工(方案 §4.5 去重表):`import_brep` / `import_step` 是**导入**侧;\n * 本 op 是导出侧,与宿主 `exportModel('stl')` 同一序列化器,脚本面因此首次拿到\n * 「导入 ↔ 导出」成对能力。\n *\n * **宿主门**:本 op 只在 `'node'` 宿主开放。`.fai.js` 可由 AI 生成任意代码、属\n * 不受信输入,导出把「往哪写、写几份、写什么」的决定权交给脚本文本;浏览器 /\n * 小程序里要导出模型必须由宿主入口触发(按钮或库面字节通道)。门禁写在函数体\n * 第一行(`assertHostFor`),因此脚本面与库面直连同一函数都被同一门禁覆盖,\n * 且门在读取 Shape 载荷之前。见 `cad-runtime/ports.ts#HostEnv`。\n */\n\nimport type { Shape } from '../mesh/types'\nimport { buildStlBufferFromMesh, bakeMatrix12ToPositions } from '../brep/export/stl'\nimport { transformToMatrix12 } from '../brep/export/export-model'\nimport { assertHostFor } from './internal/l3-bridge'\n\n/** `cad.exportStl` 选项。 */\nexport interface ExportStlOptions {\n /**\n * `true` → 返回 **ASCII** STL 文本;缺省/`false` → 返回 **binary** STL 字节\n * (`Uint8Array`,84 + 50×三角形数 字节)。\n */\n ascii?: boolean\n /** 实体名(ASCII 形态的 `solid <name>` / binary 形态的 80 字节头;缺省 'Faicad STL')。 */\n name?: string\n}\n\n/** 校验输入 Shape 带可用的三角载荷。 */\nfunction meshOf(shape: Shape): { positions: Float32Array; indices: Uint32Array } {\n const positions = shape?.positions\n const indices = shape?.indices\n if (!positions || !indices) {\n throw new Error('E_EXPORT_STL_NO_MESH: exportStl requires a shape carrying mesh payload')\n }\n if (indices.length === 0) {\n throw new Error('E_EXPORT_STL_EMPTY: shape has no triangles to export')\n }\n return { positions, indices }\n}\n\n/** 单位化叉积法向(退化三角形给 0 向量,与二进制形态同一规则)。 */\nfunction facetNormal(\n positions: Float32Array,\n ia: number,\n ib: number,\n ic: number,\n): [number, number, number] {\n const ax = positions[ia * 3]!\n const ay = positions[ia * 3 + 1]!\n const az = positions[ia * 3 + 2]!\n const ux = positions[ib * 3]! - ax\n const uy = positions[ib * 3 + 1]! - ay\n const uz = positions[ib * 3 + 2]! - az\n const vx = positions[ic * 3]! - ax\n const vy = positions[ic * 3 + 1]! - ay\n const vz = positions[ic * 3 + 2]! - az\n let nx = uy * vz - uz * vy\n let ny = uz * vx - ux * vz\n let nz = ux * vy - uy * vx\n const len = Math.sqrt(nx * nx + ny * ny + nz * nz)\n if (len > 0) {\n nx /= len\n ny /= len\n nz /= len\n }\n return [nx, ny, nz]\n}\n\n/** ASCII STL 文本(与二进制形态同一批三角形、同一法向规则;坐标以 mm 写出)。 */\nfunction asciiStl(\n positions: Float32Array,\n indices: Uint32Array,\n name: string,\n transform?: number[],\n): string {\n const pos = transform ? bakeMatrix12ToPositions(positions, transform) : positions\n const out: string[] = [`solid ${name}`]\n for (let i = 0; i < indices.length; i += 3) {\n const ia = indices[i]!\n const ib = indices[i + 1]!\n const ic = indices[i + 2]!\n const [nx, ny, nz] = facetNormal(pos, ia, ib, ic)\n out.push(` facet normal ${nx} ${ny} ${nz}`, ' outer loop')\n for (const v of [ia, ib, ic]) {\n out.push(\n ` vertex ${pos[v * 3]!} ${pos[v * 3 + 1]!} ${pos[v * 3 + 2]!}`,\n )\n }\n out.push(' endloop', ' endfacet')\n }\n out.push(`endsolid ${name}`)\n return out.join('\\n')\n}\n\n/**\n * 导出 STL(二进制 / ASCII 双形态)。\n * @group 导出\n * @inputs 1\n * @async false\n * @qual ok\n * @name exportStl\n * @note 中立 op:只序列化 Shape 自带的三角载荷(brep 与 mesh 链路同一份实现),\n * 不走原生二次三角化,产物与显示 mesh 逐三角形一致。空 mesh(如\n * `cad.halfSpace` 产的无界体)显式报 E_EXPORT_STL_EMPTY,不返回空文件。\n * 返回值是**纯数据**(二进制 `Uint8Array` 或 ASCII 文本),由宿主写入文件。\n * **宿主门**:仅 `'node'` 宿主可执行;browser / weapp / 未声明宿主报\n * E_HOST_UNSUPPORTED(门在读取载荷之前),浏览器与小程序里导出走宿主入口。\n * @returns Uint8Array 二进制 STL 字节;`options.ascii === true` 时返回 ASCII 文本 string。\n * @param shape - 目标几何(brep 或 mesh 链路的 Shape)。type:Shape required:true\n * @param options.ascii - true = ASCII STL 文本,缺省 = 二进制。type:boolean\n * @param options.name - 实体名(缺省 'Faicad STL')。type:string\n * @example\n * const bytes = cad.exportStl(part0)\n * const text = cad.exportStl(part0, { ascii: true, name: 'bracket' })\n */\nexport function exportStl(shape: Shape, options?: ExportStlOptions): Uint8Array | string {\n // 宿主门在实现体最前:非 node 宿主(browser / weapp / 未声明)一律先报\n // E_HOST_UNSUPPORTED,不读取 Shape 载荷、不产任何字节。\n assertHostFor('exportStl', ['node'])\n const { positions, indices } = meshOf(shape)\n const name = options?.name ?? 'Faicad STL'\n // 顶点烘焙(方案 §2.1 / §5 步骤 5):Shape.transform 写回的位姿在此烘焙进每个顶点。\n // 坐标仍一律以 mm 写出(与宿主 exportModel('stl') 的 unit 语义一致,单位换算在宿主侧完成)。\n const tf = shape.transform ? transformToMatrix12(shape.transform) : null\n if (options?.ascii === true) return asciiStl(positions, indices, name, tf ?? undefined)\n return new Uint8Array(buildStlBufferFromMesh(positions, indices, name, tf ?? undefined))\n}\n"]}
@@ -2,24 +2,21 @@
2
2
  * api extrude — `cad.extrude`(平台 parity op,BREP-only)
3
3
  *
4
4
  * 归属(分层红线):`cad.extrude` 是「面 → 棱柱」的**平台** op,FCStd Pad/Pocket
5
- * 链路与 TS 面共用它(docs/plans/2026-09-15-fcstd-to-faijs-port-plan.md M4.6:
6
- * 「原 `cad.fai_extrude` 路线废弃」)。up-to(拉伸到面 / 到支持体端面)属
5
+ * 链路与 TS 面共用它(原 `cad.fai_extrude` 路线废弃)。up-to(拉伸到面 / 到支持体端面)属
7
6
  * CadQuery `until=` 同族语义,因此落在**本 op**;`fai_extrude`(`fai_` 前缀的
8
7
  * faijs 扩展 op,与 fai_drill / fai_split 同族)不得承载它。
9
8
  *
10
- * 为什么是手写 op 而不是继续用生成投影:生成投影
11
- * `compatOp(projectBrepOp('extrude', ['face','height'], 'A', vendoredExtrude))`
12
- * 有两个硬约束——
9
+ * 为什么是手写 op 而不是继续用生成投影:生成投影是一条 1:1 转发通道
10
+ * (`defineOp({ brep: __own_* })` 直连 api/brep-operations/ 的源函数),有两个硬约束——
13
11
  * ① 参数表只有位置形参;D11 归一化只在「单 plain-object 形态」下按 params 表
14
12
  * 映射(api/internal/dual-form-args.ts),`(face, { upTo })` 属位置形态 →
15
- * 原样喂给 vendored extrude → 报错,无法表达对象形态;
16
- * ② compatOp 的入参先经 `borrowDeep` 借成 brepjs 视图(api/internal/compat-op.ts),
17
- * 在那一层 `brepOf()` 取不到 → 依赖 faceRef / brepOf / 内核直调的 up-to 实现
18
- * 必然走空(同 AGENTS.md 记录的「compatOp 自动提升边界」)。
13
+ * 原样喂给 compat extrude → 报错,无法表达对象形态;
14
+ * ② 生成投影没有 faijs 侧入参解析挂点,只把实参原样转发给源函数 → 依赖 faceRef 解析 /
15
+ * 内核直调(extrudeUpToSolid)的 up-to 实现无法在生成投影里承载,落回本手写模块。
19
16
  * 先例:arg-spec 的 `fillet` 条目(faijs 侧由手写 dual-op 覆盖,生成模块符号为
20
17
  * 孤儿 by design)。
21
18
  *
22
- * 长度形态**委托给生成投影**(`projectedExtrude`):vendored 仍是唯一拉伸引擎,
19
+ * 长度形态**委托给生成投影**(`projectedExtrude`):compat 投影仍是唯一拉伸引擎,
23
20
  * 既有 `cad.extrude(face, [x,y,z])` 语义零漂移。
24
21
  */
25
22
  import type { Shape, Vec3 } from '../mesh/types.js';
@@ -54,7 +51,7 @@ export interface ExtrudeOptions {
54
51
  * 沿 normal 拉伸几何(面 → 棱柱)。
55
52
  *
56
53
  * up-to 模式(`upTo`)与长度模式(`length`)二选一;长度模式委托生成投影
57
- * (vendored extrude 为唯一引擎),up-to 模式走半空间组合。
54
+ * (brepjs extrude 为唯一引擎),up-to 模式走半空间组合。
58
55
  *
59
56
  * **网格链**(`meshEngines: ['brepkit']`,方案 2026-10-01 §4 Phase 3):输入是
60
57
  * `cad.sketchOnFace` 在网格实体识别面上铺出的网格链面时,本 op 沿同一份方向语义
@@ -1 +1 @@
1
- {"version":3,"file":"extrude.d.ts","sourceRoot":"","sources":["../../src/api/extrude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAeH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA2IrD,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,CAAA;IACX,gDAAgD;IAChD,MAAM,EAAE,IAAI,CAAA;CACb;AAED,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,CAAA;AAEnF,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,MAAM,CAAC,EAAE,IAAI,CAAA;IACb,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IAC7B,kCAAkC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAmSD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,OAAO;;CAwElB,CAAA"}
1
+ {"version":3,"file":"extrude.d.ts","sourceRoot":"","sources":["../../src/api/extrude.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AA2IrD,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,CAAA;IACX,gDAAgD;IAChD,MAAM,EAAE,IAAI,CAAA;CACb;AAED,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,CAAA;AAEnF,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,MAAM,CAAC,EAAE,IAAI,CAAA;IACb,uDAAuD;IACvD,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IAC7B,kCAAkC;IAClC,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,gDAAgD;IAChD,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAmSD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,OAAO;;CAwElB,CAAA"}
@@ -2,24 +2,21 @@
2
2
  * api extrude — `cad.extrude`(平台 parity op,BREP-only)
3
3
  *
4
4
  * 归属(分层红线):`cad.extrude` 是「面 → 棱柱」的**平台** op,FCStd Pad/Pocket
5
- * 链路与 TS 面共用它(docs/plans/2026-09-15-fcstd-to-faijs-port-plan.md M4.6:
6
- * 「原 `cad.fai_extrude` 路线废弃」)。up-to(拉伸到面 / 到支持体端面)属
5
+ * 链路与 TS 面共用它(原 `cad.fai_extrude` 路线废弃)。up-to(拉伸到面 / 到支持体端面)属
7
6
  * CadQuery `until=` 同族语义,因此落在**本 op**;`fai_extrude`(`fai_` 前缀的
8
7
  * faijs 扩展 op,与 fai_drill / fai_split 同族)不得承载它。
9
8
  *
10
- * 为什么是手写 op 而不是继续用生成投影:生成投影
11
- * `compatOp(projectBrepOp('extrude', ['face','height'], 'A', vendoredExtrude))`
12
- * 有两个硬约束——
9
+ * 为什么是手写 op 而不是继续用生成投影:生成投影是一条 1:1 转发通道
10
+ * (`defineOp({ brep: __own_* })` 直连 api/brep-operations/ 的源函数),有两个硬约束——
13
11
  * ① 参数表只有位置形参;D11 归一化只在「单 plain-object 形态」下按 params 表
14
12
  * 映射(api/internal/dual-form-args.ts),`(face, { upTo })` 属位置形态 →
15
- * 原样喂给 vendored extrude → 报错,无法表达对象形态;
16
- * ② compatOp 的入参先经 `borrowDeep` 借成 brepjs 视图(api/internal/compat-op.ts),
17
- * 在那一层 `brepOf()` 取不到 → 依赖 faceRef / brepOf / 内核直调的 up-to 实现
18
- * 必然走空(同 AGENTS.md 记录的「compatOp 自动提升边界」)。
13
+ * 原样喂给 compat extrude → 报错,无法表达对象形态;
14
+ * ② 生成投影没有 faijs 侧入参解析挂点,只把实参原样转发给源函数 → 依赖 faceRef 解析 /
15
+ * 内核直调(extrudeUpToSolid)的 up-to 实现无法在生成投影里承载,落回本手写模块。
19
16
  * 先例:arg-spec 的 `fillet` 条目(faijs 侧由手写 dual-op 覆盖,生成模块符号为
20
17
  * 孤儿 by design)。
21
18
  *
22
- * 长度形态**委托给生成投影**(`projectedExtrude`):vendored 仍是唯一拉伸引擎,
19
+ * 长度形态**委托给生成投影**(`projectedExtrude`):compat 投影仍是唯一拉伸引擎,
23
20
  * 既有 `cad.extrude(face, [x,y,z])` 语义零漂移。
24
21
  */
25
22
  import { extrude as projectedExtrude } from './generated/operations.js';
@@ -445,7 +442,7 @@ function extrudeMeshChain(input, params) {
445
442
  * 沿 normal 拉伸几何(面 → 棱柱)。
446
443
  *
447
444
  * up-to 模式(`upTo`)与长度模式(`length`)二选一;长度模式委托生成投影
448
- * (vendored extrude 为唯一引擎),up-to 模式走半空间组合。
445
+ * (brepjs extrude 为唯一引擎),up-to 模式走半空间组合。
449
446
  *
450
447
  * **网格链**(`meshEngines: ['brepkit']`,方案 2026-10-01 §4 Phase 3):输入是
451
448
  * `cad.sketchOnFace` 在网格实体识别面上铺出的网格链面时,本 op 沿同一份方向语义
@@ -506,13 +503,13 @@ export const extrude = defineOp({
506
503
  roleTable: new Map([[origin, extrudeConstructRoles(kernel, clipped, normal.toArray())]]),
507
504
  });
508
505
  }
509
- // 长度形态:委托生成投影(生成投影自带借入 / Result 翻转 / 收养)
506
+ // 长度形态:委托生成投影(生成投影自带 Result 翻转 / adopt 收养)
510
507
  const sign = o.mode === 'backward' ? -1 : 1;
511
508
  const v = [normal.x * o.length * sign, normal.y * o.length * sign, normal.z * o.length * sign];
512
509
  let result;
513
- // GOTCHA:projectedExtrude 是 occt-gated 的 compat op(vendored brepjs 借入),
510
+ // GOTCHA:projectedExtrude 是 occt-gated 的生成投影 op,
514
511
  // 在 brepkit 引擎下执行前即抛 E_BREP_UNSUPPORTED。brepkit 有原生 L1 extrude
515
- // (face→solid),直接走 kernel.extrude——与 revolve.ts 同路径(不经过 vendored 借入)。
512
+ // (face→solid),直接走 kernel.extrude——与 revolve.ts 同路径(不经生成投影)。
516
513
  // occt 路径保持 projectedExtrude 不变,不回退既有几何/命名行为。
517
514
  if (getBackends().config.brepEngineId === 'brepkit') {
518
515
  const kernel = getBrepApi();