@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,104 @@
1
+ /**
2
+ * api surface-face — 曲面与面构造族(S4,平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 本目录 import occt-kernel:各 op 直调 occt 原生面/曲面构造与查询
5
+ * 方法(`makeFaceOnSurface` / `makeNonPlanarFace` / `makeSolid` / `reverseSurfaceU` /
6
+ * `outerWire`,occt-wasm 原生有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里
7
+ * (L1 只有 `makeFace`(仅平面)与 `getSubShapes` 等子集,见 brep/engine/primitives.ts)
8
+ * ⇒ 全族平台 op:defineOp 声明 `engines: ['occt']`(D11)。
9
+ *
10
+ * 方案落点:docs/plans/2026-10-07-occt-wasm-op-enablement-plan.md §3.4.2。
11
+ * 与既有 op 的边界(§4.5 去重表):
12
+ * - `makeSolid` vs `sewAndSolidify` / `compound`:前者输入是**已闭合的壳**,直接升为
13
+ * 实体;后两者分别走「面 → 缝合 → 固化」链 / 聚合;
14
+ * - `nonPlanarFace` vs L1 `makeFace`:后者只处理平面 wire,前者接受非平面 wire;
15
+ * - `outerWire`(取面外环)vs `offset2d`(偏置):纯查询 vs 几何构造。
16
+ *
17
+ * 产物形态:面/实体经 `fromBrep` 收养;wire(outerWire 产物)经 `fromBrepCurve`
18
+ * 登记为 `kind:'curve'`(同 offset2d 口径)。
19
+ */
20
+ import type { Shape } from '../../mesh/types.js';
21
+ /**
22
+ * 在已有曲面上建面:以宿主面(承载曲面)为底,用曲面上的闭合 wire 圈出新面。
23
+ * @group 创建
24
+ * @inputs 2
25
+ * @async false
26
+ * @qual ok
27
+ * @name faceOnSurface
28
+ * @note 平台 op:仅 occt 引擎(原生 makeFaceOnSurface,L1 契约无对应成员)。
29
+ * 非 occt 引擎执行前报错;brep_mock 不拦截。
30
+ * @returns Shape 新建的面。
31
+ * @param hostFace - 宿主面(承载曲面)。type:Shape required:true
32
+ * @param wire - 曲面上的闭合边界 wire。type:Shape required:true
33
+ * @example
34
+ * const f = cad.faceOnSurface(cylFace, boundaryWire)
35
+ */
36
+ export declare const faceOnSurface: ((hostFace: Shape, wire: Shape) => Promise<Shape>) & {
37
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
38
+ };
39
+ /**
40
+ * 由非平面闭合 wire 构造面(L1 `makeFace` 只处理平面 wire;本 op 补非平面缺口)。
41
+ * @group 创建
42
+ * @inputs 1
43
+ * @async false
44
+ * @qual ok
45
+ * @name nonPlanarFace
46
+ * @note 平台 op:仅 occt 引擎(原生 makeNonPlanarFace)。wire 须闭合。
47
+ * @returns Shape 构造出的面。
48
+ * @param wire - 闭合边界 wire(可非平面)。type:Shape required:true
49
+ * @example
50
+ * const f = cad.nonPlanarFace(curvedBoundaryWire)
51
+ */
52
+ export declare const nonPlanarFace: ((wire: Shape) => Promise<Shape>) & {
53
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
54
+ };
55
+ /**
56
+ * 把已闭合的壳升为实体(输入是壳,不做缝合——缝合链见 `sewAndSolidify`)。
57
+ * @group 创建
58
+ * @inputs 1
59
+ * @async false
60
+ * @qual ok
61
+ * @name makeSolid
62
+ * @note 平台 op:仅 occt 引擎(原生 makeSolid)。输入须为闭合 shell。
63
+ * @returns Shape 实体。
64
+ * @param shell - 已闭合的壳。type:Shape required:true
65
+ * @example
66
+ * const s = cad.makeSolid(closedShell)
67
+ */
68
+ export declare const makeSolid: ((shell: Shape) => Promise<Shape>) & {
69
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
70
+ };
71
+ /**
72
+ * 反转面的 U 参数方向(occt `Geom_Surface::UReverse` 语义):返回新面代理,
73
+ * 其曲面是原曲面的 U 反转版(拓扑不变,UV 求值随之镜像)。
74
+ * @group 查询
75
+ * @inputs 1
76
+ * @async false
77
+ * @qual ok
78
+ * @name reverseSurfaceU
79
+ * @note 平台 op:仅 occt 引擎(原生 reverseSurfaceU)。输入面。
80
+ * @returns Shape U 反转后的面。
81
+ * @param face - 输入面。type:Shape required:true
82
+ * @example
83
+ * const flipped = cad.reverseSurfaceU(f)
84
+ */
85
+ export declare const reverseSurfaceU: ((face: Shape) => Promise<Shape>) & {
86
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
87
+ };
88
+ /**
89
+ * 取面的外环(outer wire):面上边界中最大的闭合 wire,1D 产物。
90
+ * @group 查询
91
+ * @inputs 1
92
+ * @async false
93
+ * @qual ok
94
+ * @name outerWire
95
+ * @note 平台 op:仅 occt 引擎(原生 outerWire)。产物 kind='curve'(1D wire)。
96
+ * @returns Shape 面的外环(kind:'curve')。
97
+ * @param face - 输入面。type:Shape required:true
98
+ * @example
99
+ * const ow = cad.outerWire(face0)
100
+ */
101
+ export declare const outerWire: ((face: Shape) => Promise<Shape>) & {
102
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
103
+ };
104
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/surface-face/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAiC7C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa;;CAUxB,CAAA;AAgBF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa;;CAUxB,CAAA;AAgBF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS;;CAUpB,CAAA;AAgBF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe;;CAU1B,CAAA;AAgBF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,SAAS;;CAUpB,CAAA"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * api surface-face — 曲面与面构造族(S4,平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 本目录 import occt-kernel:各 op 直调 occt 原生面/曲面构造与查询
5
+ * 方法(`makeFaceOnSurface` / `makeNonPlanarFace` / `makeSolid` / `reverseSurfaceU` /
6
+ * `outerWire`,occt-wasm 原生有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里
7
+ * (L1 只有 `makeFace`(仅平面)与 `getSubShapes` 等子集,见 brep/engine/primitives.ts)
8
+ * ⇒ 全族平台 op:defineOp 声明 `engines: ['occt']`(D11)。
9
+ *
10
+ * 方案落点:docs/plans/2026-10-07-occt-wasm-op-enablement-plan.md §3.4.2。
11
+ * 与既有 op 的边界(§4.5 去重表):
12
+ * - `makeSolid` vs `sewAndSolidify` / `compound`:前者输入是**已闭合的壳**,直接升为
13
+ * 实体;后两者分别走「面 → 缝合 → 固化」链 / 聚合;
14
+ * - `nonPlanarFace` vs L1 `makeFace`:后者只处理平面 wire,前者接受非平面 wire;
15
+ * - `outerWire`(取面外环)vs `offset2d`(偏置):纯查询 vs 几何构造。
16
+ *
17
+ * 产物形态:面/实体经 `fromBrep` 收养;wire(outerWire 产物)经 `fromBrepCurve`
18
+ * 登记为 `kind:'curve'`(同 offset2d 口径)。
19
+ */
20
+ import { solidToShape } from '../../brep/brep-ops.js';
21
+ import { getBrepApi } from '../../brep/handle-bridge.js';
22
+ import { brepOf, fromBrep, fromBrepCurve } from '../../shape.js';
23
+ import { defineOp } from '../../sdk.js';
24
+ import { getOcctKernel } from '../../occt-kernel/occtKernel.js';
25
+ /** 输入 Shape → 内核句柄(无 BREP 槁报错)。 */
26
+ function handleOf(shape, op, which) {
27
+ const h = brepOf(shape);
28
+ if (!h) {
29
+ throw new Error(`E_${op.toUpperCase()}_NO_BREP: ${op} requires a BREP handle for ${which} (mesh-only shape has none)`);
30
+ }
31
+ return h;
32
+ }
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+ // faceOnSurface — 在已有面上建面(宿主面 + 曲面上的闭合 wire)
35
+ // ─────────────────────────────────────────────────────────────────────────────
36
+ /** BREP 路径:occt 原生 makeFaceOnSurface。 */
37
+ function faceOnSurfaceBrep(hostFace, wire) {
38
+ if (!hostFace || !wire) {
39
+ throw new Error('E_FACEONSURFACE_MISSING_ARG: faceOnSurface requires a host face and a boundary wire');
40
+ }
41
+ const fh = handleOf(hostFace, 'faceOnSurface', 'host face');
42
+ const wh = handleOf(wire, 'faceOnSurface', 'boundary wire');
43
+ const handle = getOcctKernel().makeFaceOnSurface(fh, wh);
44
+ return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle });
45
+ }
46
+ /**
47
+ * 在已有曲面上建面:以宿主面(承载曲面)为底,用曲面上的闭合 wire 圈出新面。
48
+ * @group 创建
49
+ * @inputs 2
50
+ * @async false
51
+ * @qual ok
52
+ * @name faceOnSurface
53
+ * @note 平台 op:仅 occt 引擎(原生 makeFaceOnSurface,L1 契约无对应成员)。
54
+ * 非 occt 引擎执行前报错;brep_mock 不拦截。
55
+ * @returns Shape 新建的面。
56
+ * @param hostFace - 宿主面(承载曲面)。type:Shape required:true
57
+ * @param wire - 曲面上的闭合边界 wire。type:Shape required:true
58
+ * @example
59
+ * const f = cad.faceOnSurface(cylFace, boundaryWire)
60
+ */
61
+ export const faceOnSurface = defineOp({
62
+ name: 'faceOnSurface',
63
+ brep(hostFace, wire) {
64
+ return faceOnSurfaceBrep(hostFace, wire);
65
+ },
66
+ engines: ['occt'],
67
+ naming: {
68
+ kind: 'unmodeled',
69
+ reason: 'face built on a host surface has no source-derived face role vocabulary',
70
+ },
71
+ });
72
+ // ─────────────────────────────────────────────────────────────────────────────
73
+ // nonPlanarFace — 非平面 wire → 面(L1 makeFace 只处理平面)
74
+ // ─────────────────────────────────────────────────────────────────────────────
75
+ /** BREP 路径:occt 原生 makeNonPlanarFace。 */
76
+ function nonPlanarFaceBrep(wire) {
77
+ if (!wire) {
78
+ throw new Error('E_NONPLANARFACE_NO_WIRE: nonPlanarFace requires a boundary wire');
79
+ }
80
+ const wh = handleOf(wire, 'nonPlanarFace', 'boundary wire');
81
+ const handle = getOcctKernel().makeNonPlanarFace(wh);
82
+ return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle });
83
+ }
84
+ /**
85
+ * 由非平面闭合 wire 构造面(L1 `makeFace` 只处理平面 wire;本 op 补非平面缺口)。
86
+ * @group 创建
87
+ * @inputs 1
88
+ * @async false
89
+ * @qual ok
90
+ * @name nonPlanarFace
91
+ * @note 平台 op:仅 occt 引擎(原生 makeNonPlanarFace)。wire 须闭合。
92
+ * @returns Shape 构造出的面。
93
+ * @param wire - 闭合边界 wire(可非平面)。type:Shape required:true
94
+ * @example
95
+ * const f = cad.nonPlanarFace(curvedBoundaryWire)
96
+ */
97
+ export const nonPlanarFace = defineOp({
98
+ name: 'nonPlanarFace',
99
+ brep(wire) {
100
+ return nonPlanarFaceBrep(wire);
101
+ },
102
+ engines: ['occt'],
103
+ naming: {
104
+ kind: 'unmodeled',
105
+ reason: 'face from arbitrary non-planar wire has no face role vocabulary',
106
+ },
107
+ });
108
+ // ─────────────────────────────────────────────────────────────────────────────
109
+ // makeSolid — 闭合壳 → 实体(方案 §4.2 表列 unmodeled 例)
110
+ // ─────────────────────────────────────────────────────────────────────────────
111
+ /** BREP 路径:occt 原生 makeSolid。 */
112
+ function makeSolidBrep(shell) {
113
+ if (!shell) {
114
+ throw new Error('E_MAKESOLID_NO_SHELL: makeSolid requires a closed shell');
115
+ }
116
+ const sh = handleOf(shell, 'makeSolid', 'closed shell');
117
+ const handle = getOcctKernel().makeSolid(sh);
118
+ return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle });
119
+ }
120
+ /**
121
+ * 把已闭合的壳升为实体(输入是壳,不做缝合——缝合链见 `sewAndSolidify`)。
122
+ * @group 创建
123
+ * @inputs 1
124
+ * @async false
125
+ * @qual ok
126
+ * @name makeSolid
127
+ * @note 平台 op:仅 occt 引擎(原生 makeSolid)。输入须为闭合 shell。
128
+ * @returns Shape 实体。
129
+ * @param shell - 已闭合的壳。type:Shape required:true
130
+ * @example
131
+ * const s = cad.makeSolid(closedShell)
132
+ */
133
+ export const makeSolid = defineOp({
134
+ name: 'makeSolid',
135
+ brep(shell) {
136
+ return makeSolidBrep(shell);
137
+ },
138
+ engines: ['occt'],
139
+ naming: {
140
+ kind: 'unmodeled',
141
+ reason: 'solid promoted from an arbitrary shell has no face role vocabulary',
142
+ },
143
+ });
144
+ // ─────────────────────────────────────────────────────────────────────────────
145
+ // reverseSurfaceU — 反转面的 U 参数方向
146
+ // ─────────────────────────────────────────────────────────────────────────────
147
+ /** BREP 路径:occt 原生 reverseSurfaceU。 */
148
+ function reverseSurfaceUBrep(face) {
149
+ if (!face) {
150
+ throw new Error('E_REVERSESURFACEU_NO_FACE: reverseSurfaceU requires a face');
151
+ }
152
+ const fh = handleOf(face, 'reverseSurfaceU', 'face');
153
+ const handle = getOcctKernel().reverseSurfaceU(fh);
154
+ return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle });
155
+ }
156
+ /**
157
+ * 反转面的 U 参数方向(occt `Geom_Surface::UReverse` 语义):返回新面代理,
158
+ * 其曲面是原曲面的 U 反转版(拓扑不变,UV 求值随之镜像)。
159
+ * @group 查询
160
+ * @inputs 1
161
+ * @async false
162
+ * @qual ok
163
+ * @name reverseSurfaceU
164
+ * @note 平台 op:仅 occt 引擎(原生 reverseSurfaceU)。输入面。
165
+ * @returns Shape U 反转后的面。
166
+ * @param face - 输入面。type:Shape required:true
167
+ * @example
168
+ * const flipped = cad.reverseSurfaceU(f)
169
+ */
170
+ export const reverseSurfaceU = defineOp({
171
+ name: 'reverseSurfaceU',
172
+ brep(face) {
173
+ return reverseSurfaceUBrep(face);
174
+ },
175
+ engines: ['occt'],
176
+ naming: {
177
+ kind: 'unmodeled',
178
+ reason: 'U-reversed face proxy keeps input topology; no new face role vocabulary',
179
+ },
180
+ });
181
+ // ─────────────────────────────────────────────────────────────────────────────
182
+ // outerWire — 取面外环(查询;产物 1D wire)
183
+ // ─────────────────────────────────────────────────────────────────────────────
184
+ /** BREP 路径:occt 原生 outerWire → 1D wire 经 fromBrepCurve 登记。 */
185
+ function outerWireBrep(face) {
186
+ if (!face) {
187
+ throw new Error('E_OUTERWIRE_NO_FACE: outerWire requires a face');
188
+ }
189
+ const fh = handleOf(face, 'outerWire', 'face');
190
+ const handle = getOcctKernel().outerWire(fh);
191
+ return fromBrepCurve(solidToShape(getBrepApi(), handle), { solid: handle });
192
+ }
193
+ /**
194
+ * 取面的外环(outer wire):面上边界中最大的闭合 wire,1D 产物。
195
+ * @group 查询
196
+ * @inputs 1
197
+ * @async false
198
+ * @qual ok
199
+ * @name outerWire
200
+ * @note 平台 op:仅 occt 引擎(原生 outerWire)。产物 kind='curve'(1D wire)。
201
+ * @returns Shape 面的外环(kind:'curve')。
202
+ * @param face - 输入面。type:Shape required:true
203
+ * @example
204
+ * const ow = cad.outerWire(face0)
205
+ */
206
+ export const outerWire = defineOp({
207
+ name: 'outerWire',
208
+ brep(face) {
209
+ return outerWireBrep(face);
210
+ },
211
+ engines: ['occt'],
212
+ naming: {
213
+ kind: 'unmodeled',
214
+ reason: 'extracted sub-wire has no face role vocabulary',
215
+ },
216
+ });
217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/surface-face/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api surface-face — 曲面与面构造族(S4,平台 op engines:['occt'])\n *\n * @platform occt — 本目录 import occt-kernel:各 op 直调 occt 原生面/曲面构造与查询\n * 方法(`makeFaceOnSurface` / `makeNonPlanarFace` / `makeSolid` / `reverseSurfaceU` /\n * `outerWire`,occt-wasm 原生有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里\n * (L1 只有 `makeFace`(仅平面)与 `getSubShapes` 等子集,见 brep/engine/primitives.ts)\n * ⇒ 全族平台 op:defineOp 声明 `engines: ['occt']`(D11)。\n *\n * 方案落点:docs/plans/2026-10-07-occt-wasm-op-enablement-plan.md §3.4.2。\n * 与既有 op 的边界(§4.5 去重表):\n * - `makeSolid` vs `sewAndSolidify` / `compound`:前者输入是**已闭合的壳**,直接升为\n * 实体;后两者分别走「面 → 缝合 → 固化」链 / 聚合;\n * - `nonPlanarFace` vs L1 `makeFace`:后者只处理平面 wire,前者接受非平面 wire;\n * - `outerWire`(取面外环)vs `offset2d`(偏置):纯查询 vs 几何构造。\n *\n * 产物形态:面/实体经 `fromBrep` 收养;wire(outerWire 产物)经 `fromBrepCurve`\n * 登记为 `kind:'curve'`(同 offset2d 口径)。\n */\n\nimport type { Shape } from '../../mesh/types'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { solidToShape } from '../../brep/brep-ops'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { brepOf, fromBrep, fromBrepCurve } from '../../shape'\nimport { defineOp } from '../../sdk'\nimport type { Provenance } from '../../topology/naming/lineage'\nimport { getOcctKernel } from '../../occt-kernel/occtKernel'\n\n/** 输入 Shape → 内核句柄(无 BREP 槁报错)。 */\nfunction handleOf(shape: Shape, op: string, which: string): BrepHandle {\n const h = brepOf(shape) as BrepHandle | undefined\n if (!h) {\n throw new Error(`E_${op.toUpperCase()}_NO_BREP: ${op} requires a BREP handle for ${which} (mesh-only shape has none)`)\n }\n return h\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// faceOnSurface — 在已有面上建面(宿主面 + 曲面上的闭合 wire)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** BREP 路径:occt 原生 makeFaceOnSurface。 */\nfunction faceOnSurfaceBrep(hostFace: Shape, wire: Shape): Shape {\n if (!hostFace || !wire) {\n throw new Error('E_FACEONSURFACE_MISSING_ARG: faceOnSurface requires a host face and a boundary wire')\n }\n const fh = handleOf(hostFace, 'faceOnSurface', 'host face')\n const wh = handleOf(wire, 'faceOnSurface', 'boundary wire')\n const handle = getOcctKernel().makeFaceOnSurface(fh as never, wh as never) as unknown as BrepHandle\n return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle })\n}\n\n/**\n * 在已有曲面上建面:以宿主面(承载曲面)为底,用曲面上的闭合 wire 圈出新面。\n * @group 创建\n * @inputs 2\n * @async false\n * @qual ok\n * @name faceOnSurface\n * @note 平台 op:仅 occt 引擎(原生 makeFaceOnSurface,L1 契约无对应成员)。\n * 非 occt 引擎执行前报错;brep_mock 不拦截。\n * @returns Shape 新建的面。\n * @param hostFace - 宿主面(承载曲面)。type:Shape required:true\n * @param wire - 曲面上的闭合边界 wire。type:Shape required:true\n * @example\n * const f = cad.faceOnSurface(cylFace, boundaryWire)\n */\nexport const faceOnSurface = defineOp({\n name: 'faceOnSurface',\n brep(hostFace: Shape, wire: Shape) {\n return faceOnSurfaceBrep(hostFace, wire)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'face built on a host surface has no source-derived face role vocabulary',\n } as Provenance,\n})\n\n// ─────────────────────────────────────────────────────────────────────────────\n// nonPlanarFace — 非平面 wire → 面(L1 makeFace 只处理平面)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** BREP 路径:occt 原生 makeNonPlanarFace。 */\nfunction nonPlanarFaceBrep(wire: Shape): Shape {\n if (!wire) {\n throw new Error('E_NONPLANARFACE_NO_WIRE: nonPlanarFace requires a boundary wire')\n }\n const wh = handleOf(wire, 'nonPlanarFace', 'boundary wire')\n const handle = getOcctKernel().makeNonPlanarFace(wh as never) as unknown as BrepHandle\n return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle })\n}\n\n/**\n * 由非平面闭合 wire 构造面(L1 `makeFace` 只处理平面 wire;本 op 补非平面缺口)。\n * @group 创建\n * @inputs 1\n * @async false\n * @qual ok\n * @name nonPlanarFace\n * @note 平台 op:仅 occt 引擎(原生 makeNonPlanarFace)。wire 须闭合。\n * @returns Shape 构造出的面。\n * @param wire - 闭合边界 wire(可非平面)。type:Shape required:true\n * @example\n * const f = cad.nonPlanarFace(curvedBoundaryWire)\n */\nexport const nonPlanarFace = defineOp({\n name: 'nonPlanarFace',\n brep(wire: Shape) {\n return nonPlanarFaceBrep(wire)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'face from arbitrary non-planar wire has no face role vocabulary',\n } as Provenance,\n})\n\n// ─────────────────────────────────────────────────────────────────────────────\n// makeSolid — 闭合壳 → 实体(方案 §4.2 表列 unmodeled 例)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** BREP 路径:occt 原生 makeSolid。 */\nfunction makeSolidBrep(shell: Shape): Shape {\n if (!shell) {\n throw new Error('E_MAKESOLID_NO_SHELL: makeSolid requires a closed shell')\n }\n const sh = handleOf(shell, 'makeSolid', 'closed shell')\n const handle = getOcctKernel().makeSolid(sh as never) as unknown as BrepHandle\n return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle })\n}\n\n/**\n * 把已闭合的壳升为实体(输入是壳,不做缝合——缝合链见 `sewAndSolidify`)。\n * @group 创建\n * @inputs 1\n * @async false\n * @qual ok\n * @name makeSolid\n * @note 平台 op:仅 occt 引擎(原生 makeSolid)。输入须为闭合 shell。\n * @returns Shape 实体。\n * @param shell - 已闭合的壳。type:Shape required:true\n * @example\n * const s = cad.makeSolid(closedShell)\n */\nexport const makeSolid = defineOp({\n name: 'makeSolid',\n brep(shell: Shape) {\n return makeSolidBrep(shell)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'solid promoted from an arbitrary shell has no face role vocabulary',\n } as Provenance,\n})\n\n// ─────────────────────────────────────────────────────────────────────────────\n// reverseSurfaceU — 反转面的 U 参数方向\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** BREP 路径:occt 原生 reverseSurfaceU。 */\nfunction reverseSurfaceUBrep(face: Shape): Shape {\n if (!face) {\n throw new Error('E_REVERSESURFACEU_NO_FACE: reverseSurfaceU requires a face')\n }\n const fh = handleOf(face, 'reverseSurfaceU', 'face')\n const handle = getOcctKernel().reverseSurfaceU(fh as never) as unknown as BrepHandle\n return fromBrep(solidToShape(getBrepApi(), handle), { solid: handle })\n}\n\n/**\n * 反转面的 U 参数方向(occt `Geom_Surface::UReverse` 语义):返回新面代理,\n * 其曲面是原曲面的 U 反转版(拓扑不变,UV 求值随之镜像)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name reverseSurfaceU\n * @note 平台 op:仅 occt 引擎(原生 reverseSurfaceU)。输入面。\n * @returns Shape U 反转后的面。\n * @param face - 输入面。type:Shape required:true\n * @example\n * const flipped = cad.reverseSurfaceU(f)\n */\nexport const reverseSurfaceU = defineOp({\n name: 'reverseSurfaceU',\n brep(face: Shape) {\n return reverseSurfaceUBrep(face)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'U-reversed face proxy keeps input topology; no new face role vocabulary',\n } as Provenance,\n})\n\n// ─────────────────────────────────────────────────────────────────────────────\n// outerWire — 取面外环(查询;产物 1D wire)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** BREP 路径:occt 原生 outerWire → 1D wire 经 fromBrepCurve 登记。 */\nfunction outerWireBrep(face: Shape): Shape {\n if (!face) {\n throw new Error('E_OUTERWIRE_NO_FACE: outerWire requires a face')\n }\n const fh = handleOf(face, 'outerWire', 'face')\n const handle = getOcctKernel().outerWire(fh as never) as unknown as BrepHandle\n return fromBrepCurve(solidToShape(getBrepApi(), handle), { solid: handle })\n}\n\n/**\n * 取面的外环(outer wire):面上边界中最大的闭合 wire,1D 产物。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name outerWire\n * @note 平台 op:仅 occt 引擎(原生 outerWire)。产物 kind='curve'(1D wire)。\n * @returns Shape 面的外环(kind:'curve')。\n * @param face - 输入面。type:Shape required:true\n * @example\n * const ow = cad.outerWire(face0)\n */\nexport const outerWire = defineOp({\n name: 'outerWire',\n brep(face: Shape) {\n return outerWireBrep(face)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'extracted sub-wire has no face role vocabulary',\n } as Provenance,\n})\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * api surface — B 样条曲面(控制点阵 → 面),平台 op engines:['occt']
3
+ *
4
+ * @platform occt — 实现走 occt-wasm 原生 `bsplineSurface`(BRepBuilderAPI 网格
5
+ * 控制点建面;L1 契约无对应成员)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
6
+ * 非 occt 引擎(brepkit)执行前报 BrepUnsupportedError(D11-4);brep_mock 受 D11-3
7
+ * 豁免不拦截。
8
+ *
9
+ * 用途:点阵(高度采样网格)→ 精确 B 样条面,是 heightmap 链路的落点。产物是
10
+ * **面**(非实体),沿用 api/profile.ts 的 `fromBrep(solidToShape(...), { solid })`
11
+ * 形态。
12
+ *
13
+ * 与既有 op 的边界:与 `cad.sweep` 的 `surface` 支撑面选项不同——那是扫掠的一个
14
+ * 选项,本 op 是独立的曲面构造能力。
15
+ */
16
+ import type { Shape } from '../mesh/types.js';
17
+ /** `cad.surface` 参数。 */
18
+ export interface SurfaceOptions {
19
+ /** 控制点阵(`rows * cols` 个 `[x, y, z]`,按行优先展开)。 */
20
+ points: readonly (readonly [number, number, number])[];
21
+ /** 控制点行数(整数 >= 2)。 */
22
+ rows: number;
23
+ /** 控制点列数(整数 >= 2)。 */
24
+ cols: number;
25
+ }
26
+ /**
27
+ * 由控制点阵构造 B 样条曲面。
28
+ * @group 创建
29
+ * @inputs 0
30
+ * @async false
31
+ * @qual ok
32
+ * @name surface
33
+ * @note 平台 op:仅 occt 引擎(原生 bsplineSurface)。非 occt 引擎执行前报错;brep_mock 不拦截。
34
+ * @returns Shape 曲面(面产物,可作 thicken/sweep 的输入)。
35
+ * @param points - 控制点阵(`rows * cols` 个 `[x, y, z]`,按行优先展开)。type:Vec3[] required:true
36
+ * @param rows - 控制点行数(整数 >= 2)。type:number required:true
37
+ * @param cols - 控制点列数(整数 >= 2)。type:number required:true
38
+ * @example
39
+ * const s = cad.surface({ points: [[-5,-5,0],[5,-5,0],[-5,5,0],[5,5,0]], rows: 2, cols: 2 })
40
+ */
41
+ export declare const surface: ((opts: SurfaceOptions) => Promise<Shape>) & {
42
+ __faijs__dualOp?: import("../define-op.js").DualOpMeta;
43
+ };
44
+ //# sourceMappingURL=surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.d.ts","sourceRoot":"","sources":["../../src/api/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,wBAAwB;AACxB,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAA;IACtD,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAA;CACb;AA+BD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO;;CAOlB,CAAA"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * api surface — B 样条曲面(控制点阵 → 面),平台 op engines:['occt']
3
+ *
4
+ * @platform occt — 实现走 occt-wasm 原生 `bsplineSurface`(BRepBuilderAPI 网格
5
+ * 控制点建面;L1 契约无对应成员)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
6
+ * 非 occt 引擎(brepkit)执行前报 BrepUnsupportedError(D11-4);brep_mock 受 D11-3
7
+ * 豁免不拦截。
8
+ *
9
+ * 用途:点阵(高度采样网格)→ 精确 B 样条面,是 heightmap 链路的落点。产物是
10
+ * **面**(非实体),沿用 api/profile.ts 的 `fromBrep(solidToShape(...), { solid })`
11
+ * 形态。
12
+ *
13
+ * 与既有 op 的边界:与 `cad.sweep` 的 `surface` 支撑面选项不同——那是扫掠的一个
14
+ * 选项,本 op 是独立的曲面构造能力。
15
+ */
16
+ import { solidToShape } from '../brep/brep-ops.js';
17
+ import { getBrepApi } from '../brep/handle-bridge.js';
18
+ import { fromBrep } from '../shape.js';
19
+ import { defineOp } from '../sdk.js';
20
+ import { getOcctKernel } from '../occt-kernel/occtKernel.js';
21
+ /** BREP 路径:用 occt 原生 bsplineSurface 建面,收养句柄。 */
22
+ function surfaceBrep(opts) {
23
+ const { points, rows, cols } = opts ?? {};
24
+ if (!Array.isArray(points) || points.length === 0) {
25
+ throw new Error('E_SURFACE_NO_POINTS: surface requires a non-empty control-point grid');
26
+ }
27
+ if (!Number.isInteger(rows) || !Number.isInteger(cols) || rows < 2 || cols < 2) {
28
+ throw new Error('E_SURFACE_BAD_SHAPE: surface.rows / surface.cols must be integers >= 2');
29
+ }
30
+ if (points.length !== rows * cols) {
31
+ throw new Error(`E_SURFACE_POINT_COUNT: expected rows*cols = ${rows * cols} control points, got ${points.length}`);
32
+ }
33
+ for (const p of points) {
34
+ if (!Array.isArray(p) || p.length !== 3 || !p.every((v) => typeof v === 'number' && Number.isFinite(v))) {
35
+ throw new Error('E_SURFACE_BAD_POINT: each control point must be a finite [x, y, z] triple');
36
+ }
37
+ }
38
+ const kernel = getBrepApi();
39
+ const occt = getOcctKernel();
40
+ const handle = occt.bsplineSurface(points.map(([x, y, z]) => ({ x, y, z })), rows, cols);
41
+ return fromBrep(solidToShape(kernel, handle), { solid: handle });
42
+ }
43
+ /**
44
+ * 由控制点阵构造 B 样条曲面。
45
+ * @group 创建
46
+ * @inputs 0
47
+ * @async false
48
+ * @qual ok
49
+ * @name surface
50
+ * @note 平台 op:仅 occt 引擎(原生 bsplineSurface)。非 occt 引擎执行前报错;brep_mock 不拦截。
51
+ * @returns Shape 曲面(面产物,可作 thicken/sweep 的输入)。
52
+ * @param points - 控制点阵(`rows * cols` 个 `[x, y, z]`,按行优先展开)。type:Vec3[] required:true
53
+ * @param rows - 控制点行数(整数 >= 2)。type:number required:true
54
+ * @param cols - 控制点列数(整数 >= 2)。type:number required:true
55
+ * @example
56
+ * const s = cad.surface({ points: [[-5,-5,0],[5,-5,0],[-5,5,0],[5,5,0]], rows: 2, cols: 2 })
57
+ */
58
+ export const surface = defineOp({
59
+ name: 'surface',
60
+ brep(opts) {
61
+ return surfaceBrep(opts);
62
+ },
63
+ engines: ['occt'],
64
+ naming: { kind: 'unmodeled', reason: 'bspline-surface face vocabulary not defined' },
65
+ });
66
+ //# sourceMappingURL=surface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface.js","sourceRoot":"","sources":["../../src/api/surface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAYzD,gDAAgD;AAChD,SAAS,WAAW,CAAC,IAAoB;IACvC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAK,EAAqB,CAAA;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;IACzF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;IAC3F,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,+CAA+C,IAAI,GAAG,IAAI,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAClG,CAAA;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAA;QAC9F,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxC,IAAI,EACJ,IAAI,CACoB,CAAA;IAC1B,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAU,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;IAC9B,IAAI,EAAE,SAAS;IACf,IAAI,CAAC,IAAoB;QACvB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,6CAA6C,EAAgB;CACnG,CAAC,CAAA","sourcesContent":["/**\n * api surface — B 样条曲面(控制点阵 → 面),平台 op engines:['occt']\n *\n * @platform occt — 实现走 occt-wasm 原生 `bsplineSurface`(BRepBuilderAPI 网格\n * 控制点建面;L1 契约无对应成员)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。\n * 非 occt 引擎(brepkit)执行前报 BrepUnsupportedError(D11-4);brep_mock 受 D11-3\n * 豁免不拦截。\n *\n * 用途:点阵(高度采样网格)→ 精确 B 样条面,是 heightmap 链路的落点。产物是\n * **面**(非实体),沿用 api/profile.ts 的 `fromBrep(solidToShape(...), { solid })`\n * 形态。\n *\n * 与既有 op 的边界:与 `cad.sweep` 的 `surface` 支撑面选项不同——那是扫掠的一个\n * 选项,本 op 是独立的曲面构造能力。\n */\n\nimport type { Shape } from '../mesh/types'\nimport type { BrepHandle } from '../brep/engine/types'\nimport { solidToShape } from '../brep/brep-ops'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { fromBrep } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\n\n/** `cad.surface` 参数。 */\nexport interface SurfaceOptions {\n /** 控制点阵(`rows * cols` 个 `[x, y, z]`,按行优先展开)。 */\n points: readonly (readonly [number, number, number])[]\n /** 控制点行数(整数 >= 2)。 */\n rows: number\n /** 控制点列数(整数 >= 2)。 */\n cols: number\n}\n\n/** BREP 路径:用 occt 原生 bsplineSurface 建面,收养句柄。 */\nfunction surfaceBrep(opts: SurfaceOptions): Shape {\n const { points, rows, cols } = opts ?? ({} as SurfaceOptions)\n if (!Array.isArray(points) || points.length === 0) {\n throw new Error('E_SURFACE_NO_POINTS: surface requires a non-empty control-point grid')\n }\n if (!Number.isInteger(rows) || !Number.isInteger(cols) || rows < 2 || cols < 2) {\n throw new Error('E_SURFACE_BAD_SHAPE: surface.rows / surface.cols must be integers >= 2')\n }\n if (points.length !== rows * cols) {\n throw new Error(\n `E_SURFACE_POINT_COUNT: expected rows*cols = ${rows * cols} control points, got ${points.length}`,\n )\n }\n for (const p of points) {\n if (!Array.isArray(p) || p.length !== 3 || !p.every((v) => typeof v === 'number' && Number.isFinite(v))) {\n throw new Error('E_SURFACE_BAD_POINT: each control point must be a finite [x, y, z] triple')\n }\n }\n const kernel = getBrepApi()\n const occt = getOcctKernel()\n const handle = occt.bsplineSurface(\n points.map(([x, y, z]) => ({ x, y, z })),\n rows,\n cols,\n ) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, handle), { solid: handle }) as Shape\n}\n\n/**\n * 由控制点阵构造 B 样条曲面。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name surface\n * @note 平台 op:仅 occt 引擎(原生 bsplineSurface)。非 occt 引擎执行前报错;brep_mock 不拦截。\n * @returns Shape 曲面(面产物,可作 thicken/sweep 的输入)。\n * @param points - 控制点阵(`rows * cols` 个 `[x, y, z]`,按行优先展开)。type:Vec3[] required:true\n * @param rows - 控制点行数(整数 >= 2)。type:number required:true\n * @param cols - 控制点列数(整数 >= 2)。type:number required:true\n * @example\n * const s = cad.surface({ points: [[-5,-5,0],[5,-5,0],[-5,5,0],[5,5,0]], rows: 2, cols: 2 })\n */\nexport const surface = defineOp({\n name: 'surface',\n brep(opts: SurfaceOptions) {\n return surfaceBrep(opts)\n },\n engines: ['occt'],\n naming: { kind: 'unmodeled', reason: 'bspline-surface face vocabulary not defined' } as Provenance,\n})\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * api sweep — 扫掠:截面沿脊柱路径生成扫掠体(手写平台 op,Phase 4 → G5 core 直连)
3
3
  *
4
- * @platform occt — 实现走 core 自有 `brep-mirror/sweepFns.ts#sweepBrep`
4
+ * @platform occt — 实现走 core 自有 `brep-operations/sweepFns.ts#sweepBrep`
5
5
  * (occt-wasm simplePipe / sweepPipeShell;engine-method-map 里 `sweep` 为
6
6
  * occt-only)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
7
7
  *
@@ -10,20 +10,75 @@
10
10
  * (`internal/profile-wire.ts` 的唯一步径)。脊柱容忍 face(FCStd 翻译把
11
11
  * 脊柱基对象 sketch 整圈外廓当路径)。
12
12
  *
13
- * core-decouple G5:vendored `sweep`(brepjs)替换为 brep-mirror 自有实现直连,
13
+ * core-decouple G5:旧 `sweep`(brepjs)替换为 brep-operations 自有实现直连,
14
14
  * 产物经 `fromBrep` 收养(替代 l3-bridge adoptEntity)。
15
15
  */
16
16
  import type { Shape } from '../mesh/types.js';
17
- /** 扫掠配置(与 vendored SweepOptions 同形;本文件自持,去 brepjs 依赖)。 */
17
+ /** sweep 的截面朝向模式(映射 occt `SweepMode`)。 */
18
+ export type SweepOrientation = 'fixed' | 'frenet' | 'fixedUp' | 'auxiliary';
19
+ /** sweep 的引导线接触关系(映射 occt `SweepContact`,仅 `orientation:'auxiliary'` 有效)。 */
20
+ export type SweepGuideContact = 'none' | 'contact' | 'contactOnBorder';
21
+ /** sweep 沿脊柱的缩放律(映射 occt `SweepLaw`;`law ≠ 'none'` 时必须给 `lawLength`)。 */
22
+ export type SweepLawKind = 'none' | 'linear' | 'sCurve';
23
+ /**
24
+ * 扫掠配置。
25
+ *
26
+ * 两条路径(S3,方案 §3.4.3「扩 sweep」):
27
+ * - **旧路径**(默认):只给 `frenet` / `mode` / `tolerance` / `transitionMode:'right'` 时,
28
+ * 走 `sweepPipeShell`(`mode:'simple'` → `simplePipe`),行为与 S3 前逐字节一致;
29
+ * - **完整控制面**:给出下列任一 sweepFull 字段时改走 occt 原生 `sweepFull`
30
+ * (occt-wasm 的 `sweepAdvanced` / `sweepOriented` 是其子集,由同一选项对象承载)。
31
+ */
18
32
  export interface SweepOptions {
19
- /** Frenet 参考系(默认 false)。 */
33
+ /** Frenet 参考系(默认 false)。仅旧路径。 */
20
34
  frenet?: boolean;
21
- /** 扫掠模式:'simple'(MakePipe)或 undefined(PipeShell)。 */
35
+ /** 扫掠模式:'simple'(MakePipe)或 undefined(PipeShell)。与 sweepFull 字段互斥。 */
22
36
  mode?: 'simple';
23
- /** 过渡模式:仅支持默认 'right'(selfhost 后限制,见 sweepFns)。 */
24
- transitionMode?: string;
25
- /** 公差等其余 vendored 字段(保留以兼容调用方)。 */
37
+ /**
38
+ * 转角过渡模式:`'right'`(旧别名,等价于内核缺省 Transformed)或
39
+ * `'transformed'` / `'rightCorner'` / `'roundCorner'`(后三者走 sweepFull)。
40
+ */
41
+ transitionMode?: 'right' | 'transformed' | 'rightCorner' | 'roundCorner';
42
+ /** 公差等其余旧字段(保留以兼容调用方)。 */
26
43
  tolerance?: number;
44
+ /** 截面朝向模式(默认内核缺省 Fixed)。 */
45
+ orientation?: SweepOrientation;
46
+ /** `orientation:'fixedUp'` 的恒定 binormal 方向(默认 +Z)。 */
47
+ up?: [number, number, number];
48
+ /** `orientation:'auxiliary'` 的引导线(Shape)。 */
49
+ auxSpine?: Shape;
50
+ /** `orientation:'auxiliary'`:按弧长而非参数匹配脊柱与引导线(默认 false)。 */
51
+ curvilinearEquivalence?: boolean;
52
+ /** `orientation:'auxiliary'`:截面与引导线的关系(默认 'none')。 */
53
+ guideContact?: SweepGuideContact;
54
+ /**
55
+ * 扫掠前把截面平移到与 spine 相切(`MakePipeShell::Add` 的 `WithContact`,
56
+ * 默认 false = 截面停在调用方放置的位置)。
57
+ */
58
+ withContact?: boolean;
59
+ /**
60
+ * 把截面旋转到与 spine 切线正交(`Add` 的 `WithCorrection`,默认 false)。
61
+ * 直脊柱上是空操作。
62
+ */
63
+ withCorrection?: boolean;
64
+ /** 支持面(含 spine 的 shape);给出后取代 `orientation`。 */
65
+ support?: Shape;
66
+ /** 逼近面的最大阶数(缺省 = 内核缺省)。 */
67
+ maxDegree?: number;
68
+ /** 最大段数(缺省 = 内核缺省)。 */
69
+ maxSegments?: number;
70
+ /** 沿脊柱的缩放律(默认 'none')。 */
71
+ law?: SweepLawKind;
72
+ /** law 跨越的参数长度(= 脊柱长度);`law ≠ 'none'` 时必给。 */
73
+ lawLength?: number;
74
+ /** law 末端的截面缩放(1 = 不缩放)。 */
75
+ lawEndFactor?: number;
76
+ /** 3D 逼近公差(绝对量,缺省 = 内核缺省 1e-4)。 */
77
+ tol3d?: number;
78
+ /** 边界公差(绝对量)。 */
79
+ boundTol?: number;
80
+ /** 角度公差(弧度)。 */
81
+ tolAngular?: number;
27
82
  }
28
83
  /**
29
84
  * 扫掠:截面沿脊柱路径生成扫掠体。
@@ -35,10 +90,17 @@ export interface SweepOptions {
35
90
  * @note 平台 op:仅 occt 引擎(BRepOffsetAPI_MakePipeShell / MakePipe)。截面接受
36
91
  * wire 或面(面取其外环);脊柱必须为 wire。非 occt 引擎执行前报错;
37
92
  * brep_mock 不拦截。`shellMode` 不暴露(元组产物跨不过单产物边界)。
93
+ * S3 完整控制面(方案 §3.4.3):给出 `orientation` / `up` / `auxSpine` /
94
+ * `curvilinearEquivalence` / `guideContact` / `transitionMode`(新名)/
95
+ * `withContact` / `withCorrection` / `support` / `maxDegree` / `maxSegments` /
96
+ * `law` / `lawLength` / `lawEndFactor` / `tol3d` / `boundTol` / `tolAngular`
97
+ * 任一,即改走 occt 原生 `sweepFull`(law 驱动扫掠是 twist 类特征的正确路径)。
98
+ * `sweepFull` 的 options 是 `sweepAdvanced` 的**严格超集**,且含
99
+ * `sweepOriented` 的全部字段 ⇒ 三者能力并轨,脚本面只需 `sweep` 一个符号。
38
100
  * @returns Shape 扫掠体。
39
101
  * @param profile - 截面几何(wire 或面;面取其外环)。type:Shape required:true
40
102
  * @param spine - 脊柱路径(wire)。type:Shape required:true
41
- * @param opts - 扫掠配置(frenet / mode / tolerance 等)。type:SweepOptions required:false
103
+ * @param opts - 扫掠配置(旧字段 + sweepFull 完整控制面)。type:SweepOptions required:false
42
104
  * @example
43
105
  * const path = cad.wire([[0, 0, 0], [0, 0, 50]])
44
106
  * const section = cad.profile({ contours: [{ segments: [
@@ -1 +1 @@
1
- {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/api/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAW1C,0DAA0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,qDAAqD;IACrD,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,KAAK;;CAOhB,CAAA"}
1
+ {"version":3,"file":"sweep.d.ts","sourceRoot":"","sources":["../../src/api/sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAW1C,0CAA0C;AAC1C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA;AAC3E,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAAA;AACtE,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEvD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,CAAA;IACxE,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAGlB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,gBAAgB,CAAA;IAC9B,sDAAsD;IACtD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,2DAA2D;IAC3D,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,sDAAsD;IACtD,YAAY,CAAC,EAAE,iBAAiB,CAAA;IAChC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gDAAgD;IAChD,OAAO,CAAC,EAAE,KAAK,CAAA;IACf,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,YAAY,CAAA;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,KAAK;;CAOhB,CAAA"}