@faicad/faijs 0.29.3 → 0.30.9

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 (614) hide show
  1. package/NOTICE +6 -5
  2. package/dist/api/api-namespace.d.ts +1 -1
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +53 -1
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/appearance.d.ts +136 -0
  7. package/dist/api/appearance.d.ts.map +1 -0
  8. package/dist/api/appearance.js +228 -0
  9. package/dist/api/appearance.js.map +1 -0
  10. package/dist/api/assembly/entities.d.ts +1 -1
  11. package/dist/api/assembly/entities.js +1 -1
  12. package/dist/api/assembly/entities.js.map +1 -1
  13. package/dist/api/assembly/index.d.ts +1 -1
  14. package/dist/api/assembly/index.js +1 -1
  15. package/dist/api/assembly/index.js.map +1 -1
  16. package/dist/api/assembly/joints.d.ts +33 -15
  17. package/dist/api/assembly/joints.d.ts.map +1 -1
  18. package/dist/api/assembly/joints.js +31 -13
  19. package/dist/api/assembly/joints.js.map +1 -1
  20. package/dist/api/assembly/preview.d.ts +1 -1
  21. package/dist/api/assembly/preview.js +1 -1
  22. package/dist/api/assembly/preview.js.map +1 -1
  23. package/dist/api/assembly/solve.d.ts +1 -1
  24. package/dist/api/assembly/solve.js +1 -1
  25. package/dist/api/assembly/solve.js.map +1 -1
  26. package/dist/api/assembly/solvers/assembly-tree.d.ts +1 -1
  27. package/dist/api/assembly/solvers/assembly-tree.js +1 -1
  28. package/dist/api/assembly/solvers/assembly-tree.js.map +1 -1
  29. package/dist/api/assembly/solvers/chain-solver.d.ts +2 -2
  30. package/dist/api/assembly/solvers/chain-solver.js.map +1 -1
  31. package/dist/api/assembly/solvers/global-solver.d.ts +1 -2
  32. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  33. package/dist/api/assembly/solvers/global-solver.js +3 -4
  34. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  35. package/dist/api/assembly/solvers/joints-kinematics.js +1 -1
  36. package/dist/api/assembly/solvers/joints-kinematics.js.map +1 -1
  37. package/dist/api/assembly/solvers/linalg.d.ts +2 -2
  38. package/dist/api/assembly/solvers/linalg.js +2 -2
  39. package/dist/api/assembly/solvers/linalg.js.map +1 -1
  40. package/dist/api/assembly/solvers/types.d.ts +2 -5
  41. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  42. package/dist/api/assembly/solvers/types.js +1 -4
  43. package/dist/api/assembly/solvers/types.js.map +1 -1
  44. package/dist/api/boolean.d.ts.map +1 -1
  45. package/dist/api/boolean.js +7 -6
  46. package/dist/api/boolean.js.map +1 -1
  47. package/dist/api/brep-mirror/booleanFns.d.ts +3 -3
  48. package/dist/api/brep-mirror/booleanFns.js +5 -5
  49. package/dist/api/brep-mirror/booleanFns.js.map +1 -1
  50. package/dist/api/brep-mirror/compoundFns.d.ts +1 -1
  51. package/dist/api/brep-mirror/compoundFns.js +4 -4
  52. package/dist/api/brep-mirror/compoundFns.js.map +1 -1
  53. package/dist/api/brep-mirror/healingFns.d.ts +4 -4
  54. package/dist/api/brep-mirror/healingFns.js +4 -4
  55. package/dist/api/brep-mirror/healingFns.js.map +1 -1
  56. package/dist/api/brep-mirror/hullFns.d.ts +2 -2
  57. package/dist/api/brep-mirror/hullFns.js +2 -2
  58. package/dist/api/brep-mirror/hullFns.js.map +1 -1
  59. package/dist/api/brep-mirror/patternFns.d.ts +5 -5
  60. package/dist/api/brep-mirror/patternFns.js +10 -10
  61. package/dist/api/brep-mirror/patternFns.js.map +1 -1
  62. package/dist/api/brep-mirror/primitiveFns.d.ts +4 -4
  63. package/dist/api/brep-mirror/primitiveFns.js +4 -4
  64. package/dist/api/brep-mirror/primitiveFns.js.map +1 -1
  65. package/dist/api/brep-mirror/roofFns.d.ts +3 -3
  66. package/dist/api/brep-mirror/roofFns.js +7 -7
  67. package/dist/api/brep-mirror/roofFns.js.map +1 -1
  68. package/dist/api/brep-mirror/sweepFns.d.ts +7 -7
  69. package/dist/api/brep-mirror/sweepFns.js +14 -14
  70. package/dist/api/brep-mirror/sweepFns.js.map +1 -1
  71. package/dist/api/brep-mirror/threadFns.d.ts +1 -1
  72. package/dist/api/brep-mirror/threadFns.js +1 -1
  73. package/dist/api/brep-mirror/threadFns.js.map +1 -1
  74. package/dist/api/brep-mirror/topologyFns.d.ts +5 -5
  75. package/dist/api/brep-mirror/topologyFns.js +8 -8
  76. package/dist/api/brep-mirror/topologyFns.js.map +1 -1
  77. package/dist/api/brep-operations/booleanFns.d.ts +40 -0
  78. package/dist/api/brep-operations/booleanFns.d.ts.map +1 -0
  79. package/dist/api/brep-operations/booleanFns.js +104 -0
  80. package/dist/api/brep-operations/booleanFns.js.map +1 -0
  81. package/dist/api/brep-operations/brepHelpers.d.ts +55 -0
  82. package/dist/api/brep-operations/brepHelpers.d.ts.map +1 -0
  83. package/dist/api/brep-operations/brepHelpers.js +131 -0
  84. package/dist/api/brep-operations/brepHelpers.js.map +1 -0
  85. package/dist/api/brep-operations/compoundFns.d.ts +46 -0
  86. package/dist/api/brep-operations/compoundFns.d.ts.map +1 -0
  87. package/dist/api/brep-operations/compoundFns.js +299 -0
  88. package/dist/api/brep-operations/compoundFns.js.map +1 -0
  89. package/dist/api/brep-operations/healingFns.d.ts +78 -0
  90. package/dist/api/brep-operations/healingFns.d.ts.map +1 -0
  91. package/dist/api/brep-operations/healingFns.js +294 -0
  92. package/dist/api/brep-operations/healingFns.js.map +1 -0
  93. package/dist/api/brep-operations/hullFns.d.ts +20 -0
  94. package/dist/api/brep-operations/hullFns.d.ts.map +1 -0
  95. package/dist/api/brep-operations/hullFns.js +46 -0
  96. package/dist/api/brep-operations/hullFns.js.map +1 -0
  97. package/dist/api/brep-operations/joinery-brep.d.ts +172 -0
  98. package/dist/api/brep-operations/joinery-brep.d.ts.map +1 -0
  99. package/dist/api/brep-operations/joinery-brep.js +463 -0
  100. package/dist/api/brep-operations/joinery-brep.js.map +1 -0
  101. package/dist/api/brep-operations/patternFns.d.ts +43 -0
  102. package/dist/api/brep-operations/patternFns.d.ts.map +1 -0
  103. package/dist/api/brep-operations/patternFns.js +178 -0
  104. package/dist/api/brep-operations/patternFns.js.map +1 -0
  105. package/dist/api/brep-operations/primitiveFns.d.ts +42 -0
  106. package/dist/api/brep-operations/primitiveFns.d.ts.map +1 -0
  107. package/dist/api/brep-operations/primitiveFns.js +104 -0
  108. package/dist/api/brep-operations/primitiveFns.js.map +1 -0
  109. package/dist/api/brep-operations/roofFns.d.ts +24 -0
  110. package/dist/api/brep-operations/roofFns.d.ts.map +1 -0
  111. package/dist/api/brep-operations/roofFns.js +229 -0
  112. package/dist/api/brep-operations/roofFns.js.map +1 -0
  113. package/dist/api/brep-operations/straightSkeleton.d.ts +36 -0
  114. package/dist/api/brep-operations/straightSkeleton.d.ts.map +1 -0
  115. package/dist/api/brep-operations/straightSkeleton.js +431 -0
  116. package/dist/api/brep-operations/straightSkeleton.js.map +1 -0
  117. package/dist/api/brep-operations/sweepFns.d.ts +60 -0
  118. package/dist/api/brep-operations/sweepFns.d.ts.map +1 -0
  119. package/dist/api/brep-operations/sweepFns.js +323 -0
  120. package/dist/api/brep-operations/sweepFns.js.map +1 -0
  121. package/dist/api/brep-operations/threadFns.d.ts +83 -0
  122. package/dist/api/brep-operations/threadFns.d.ts.map +1 -0
  123. package/dist/api/brep-operations/threadFns.js +138 -0
  124. package/dist/api/brep-operations/threadFns.js.map +1 -0
  125. package/dist/api/brep-operations/topologyFns.d.ts +90 -0
  126. package/dist/api/brep-operations/topologyFns.d.ts.map +1 -0
  127. package/dist/api/brep-operations/topologyFns.js +276 -0
  128. package/dist/api/brep-operations/topologyFns.js.map +1 -0
  129. package/dist/api/brep-topology.d.ts +1 -1
  130. package/dist/api/brep-topology.d.ts.map +1 -1
  131. package/dist/api/brep-topology.js +1 -1
  132. package/dist/api/brep-topology.js.map +1 -1
  133. package/dist/api/brepjs-compat/index.d.ts +1 -1
  134. package/dist/api/brepjs-compat/index.js +3 -3
  135. package/dist/api/brepjs-compat/index.js.map +1 -1
  136. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -1
  137. package/dist/api/cadquery-selectors/borrow-bridge.js +3 -4
  138. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -1
  139. package/dist/api/curve-sketch/index.d.ts +235 -0
  140. package/dist/api/curve-sketch/index.d.ts.map +1 -0
  141. package/dist/api/curve-sketch/index.js +487 -0
  142. package/dist/api/curve-sketch/index.js.map +1 -0
  143. package/dist/api/engrave.d.ts.map +1 -1
  144. package/dist/api/engrave.js +3 -2
  145. package/dist/api/engrave.js.map +1 -1
  146. package/dist/api/export-brep.d.ts +41 -0
  147. package/dist/api/export-brep.d.ts.map +1 -0
  148. package/dist/api/export-brep.js +58 -0
  149. package/dist/api/export-brep.js.map +1 -0
  150. package/dist/api/export-stl.d.ts +50 -0
  151. package/dist/api/export-stl.d.ts.map +1 -0
  152. package/dist/api/export-stl.js +99 -0
  153. package/dist/api/export-stl.js.map +1 -0
  154. package/dist/api/extrude.d.ts +8 -11
  155. package/dist/api/extrude.d.ts.map +1 -1
  156. package/dist/api/extrude.js +11 -14
  157. package/dist/api/extrude.js.map +1 -1
  158. package/dist/api/fillet-variable.d.ts +2 -2
  159. package/dist/api/fillet-variable.js +2 -2
  160. package/dist/api/fillet-variable.js.map +1 -1
  161. package/dist/api/fillet.d.ts +2 -4
  162. package/dist/api/fillet.d.ts.map +1 -1
  163. package/dist/api/fillet.js +2 -4
  164. package/dist/api/fillet.js.map +1 -1
  165. package/dist/api/generated/2d.d.ts +4 -0
  166. package/dist/api/generated/2d.d.ts.map +1 -1
  167. package/dist/api/generated/2d.js +4 -0
  168. package/dist/api/generated/2d.js.map +1 -1
  169. package/dist/api/generated/core.d.ts +4 -0
  170. package/dist/api/generated/core.d.ts.map +1 -1
  171. package/dist/api/generated/core.js +4 -0
  172. package/dist/api/generated/core.js.map +1 -1
  173. package/dist/api/generated/gear.d.ts +4 -0
  174. package/dist/api/generated/gear.d.ts.map +1 -1
  175. package/dist/api/generated/gear.js +4 -0
  176. package/dist/api/generated/gear.js.map +1 -1
  177. package/dist/api/generated/io.d.ts +4 -0
  178. package/dist/api/generated/io.d.ts.map +1 -1
  179. package/dist/api/generated/io.js +4 -0
  180. package/dist/api/generated/io.js.map +1 -1
  181. package/dist/api/generated/kernel.d.ts +4 -0
  182. package/dist/api/generated/kernel.d.ts.map +1 -1
  183. package/dist/api/generated/kernel.js +4 -0
  184. package/dist/api/generated/kernel.js.map +1 -1
  185. package/dist/api/generated/measurement.d.ts +21 -21
  186. package/dist/api/generated/measurement.d.ts.map +1 -1
  187. package/dist/api/generated/measurement.js +25 -21
  188. package/dist/api/generated/measurement.js.map +1 -1
  189. package/dist/api/generated/ns.d.ts +4 -0
  190. package/dist/api/generated/ns.d.ts.map +1 -1
  191. package/dist/api/generated/ns.js +4 -0
  192. package/dist/api/generated/ns.js.map +1 -1
  193. package/dist/api/generated/operations.d.ts +32 -32
  194. package/dist/api/generated/operations.d.ts.map +1 -1
  195. package/dist/api/generated/operations.js +52 -48
  196. package/dist/api/generated/operations.js.map +1 -1
  197. package/dist/api/generated/projection.d.ts +4 -0
  198. package/dist/api/generated/projection.d.ts.map +1 -1
  199. package/dist/api/generated/projection.js +4 -0
  200. package/dist/api/generated/projection.js.map +1 -1
  201. package/dist/api/generated/query.d.ts +4 -0
  202. package/dist/api/generated/query.d.ts.map +1 -1
  203. package/dist/api/generated/query.js +4 -0
  204. package/dist/api/generated/query.js.map +1 -1
  205. package/dist/api/generated/sketching.d.ts +2 -2
  206. package/dist/api/generated/sketching.d.ts.map +1 -1
  207. package/dist/api/generated/sketching.js +7 -3
  208. package/dist/api/generated/sketching.js.map +1 -1
  209. package/dist/api/generated/text.d.ts +4 -0
  210. package/dist/api/generated/text.d.ts.map +1 -1
  211. package/dist/api/generated/text.js +4 -0
  212. package/dist/api/generated/text.js.map +1 -1
  213. package/dist/api/generated/topology.d.ts +45 -45
  214. package/dist/api/generated/topology.d.ts.map +1 -1
  215. package/dist/api/generated/topology.js +67 -63
  216. package/dist/api/generated/topology.js.map +1 -1
  217. package/dist/api/generated/view.d.ts +4 -0
  218. package/dist/api/generated/view.d.ts.map +1 -1
  219. package/dist/api/generated/view.js +4 -0
  220. package/dist/api/generated/view.js.map +1 -1
  221. package/dist/api/geom-types/constants.d.ts +11 -0
  222. package/dist/api/geom-types/constants.d.ts.map +1 -0
  223. package/dist/api/geom-types/constants.js +11 -0
  224. package/dist/api/geom-types/constants.js.map +1 -0
  225. package/dist/api/geom-types/index.d.ts +21 -0
  226. package/dist/api/geom-types/index.d.ts.map +1 -0
  227. package/dist/api/geom-types/index.js +22 -0
  228. package/dist/api/geom-types/index.js.map +1 -0
  229. package/dist/api/geom-types/planeOps.d.ts +98 -0
  230. package/dist/api/geom-types/planeOps.d.ts.map +1 -0
  231. package/dist/api/geom-types/planeOps.js +170 -0
  232. package/dist/api/geom-types/planeOps.js.map +1 -0
  233. package/dist/api/geom-types/planeTypes.d.ts +24 -0
  234. package/dist/api/geom-types/planeTypes.d.ts.map +1 -0
  235. package/dist/api/geom-types/planeTypes.js +8 -0
  236. package/dist/api/geom-types/planeTypes.js.map +1 -0
  237. package/dist/api/geom-types/types.d.ts +64 -0
  238. package/dist/api/geom-types/types.d.ts.map +1 -0
  239. package/dist/api/geom-types/types.js +48 -0
  240. package/dist/api/geom-types/types.js.map +1 -0
  241. package/dist/api/geom-types/vecOps.d.ts +124 -0
  242. package/dist/api/geom-types/vecOps.d.ts.map +1 -0
  243. package/dist/api/geom-types/vecOps.js +202 -0
  244. package/dist/api/geom-types/vecOps.js.map +1 -0
  245. package/dist/api/geom.d.ts.map +1 -1
  246. package/dist/api/geom.js +6 -5
  247. package/dist/api/geom.js.map +1 -1
  248. package/dist/api/half-space.d.ts +56 -0
  249. package/dist/api/half-space.d.ts.map +1 -0
  250. package/dist/api/half-space.js +82 -0
  251. package/dist/api/half-space.js.map +1 -0
  252. package/dist/api/helix.d.ts +10 -1
  253. package/dist/api/helix.d.ts.map +1 -1
  254. package/dist/api/helix.js +19 -3
  255. package/dist/api/helix.js.map +1 -1
  256. package/dist/api/import-step.d.ts.map +1 -1
  257. package/dist/api/import-step.js +28 -0
  258. package/dist/api/import-step.js.map +1 -1
  259. package/dist/api/index.d.ts +19 -6
  260. package/dist/api/index.d.ts.map +1 -1
  261. package/dist/api/index.js +31 -8
  262. package/dist/api/index.js.map +1 -1
  263. package/dist/api/internal/compat-op.d.ts +4 -30
  264. package/dist/api/internal/compat-op.d.ts.map +1 -1
  265. package/dist/api/internal/compat-op.js +10 -42
  266. package/dist/api/internal/compat-op.js.map +1 -1
  267. package/dist/api/internal/compat-projection.d.ts +5 -5
  268. package/dist/api/internal/compat-projection.js +5 -5
  269. package/dist/api/internal/compat-projection.js.map +1 -1
  270. package/dist/api/internal/dual-form-args.d.ts +0 -2
  271. package/dist/api/internal/dual-form-args.d.ts.map +1 -1
  272. package/dist/api/internal/dual-form-args.js +1 -3
  273. package/dist/api/internal/dual-form-args.js.map +1 -1
  274. package/dist/api/internal/l3-bridge.d.ts +5 -37
  275. package/dist/api/internal/l3-bridge.d.ts.map +1 -1
  276. package/dist/api/internal/l3-bridge.js +7 -76
  277. package/dist/api/internal/l3-bridge.js.map +1 -1
  278. package/dist/api/internal/profile-wire.d.ts +1 -1
  279. package/dist/api/internal/profile-wire.js +1 -1
  280. package/dist/api/internal/profile-wire.js.map +1 -1
  281. package/dist/api/internal/result-unwrap.d.ts +4 -6
  282. package/dist/api/internal/result-unwrap.d.ts.map +1 -1
  283. package/dist/api/internal/result-unwrap.js +4 -6
  284. package/dist/api/internal/result-unwrap.js.map +1 -1
  285. package/dist/api/knurl.d.ts.map +1 -1
  286. package/dist/api/knurl.js +5 -3
  287. package/dist/api/knurl.js.map +1 -1
  288. package/dist/api/loft.d.ts +2 -2
  289. package/dist/api/loft.d.ts.map +1 -1
  290. package/dist/api/loft.js +2 -2
  291. package/dist/api/loft.js.map +1 -1
  292. package/dist/api/measurement/index.d.ts +3 -3
  293. package/dist/api/measurement/index.js +3 -3
  294. package/dist/api/measurement/index.js.map +1 -1
  295. package/dist/api/meta.d.ts +91 -0
  296. package/dist/api/meta.d.ts.map +1 -0
  297. package/dist/api/meta.js +97 -0
  298. package/dist/api/meta.js.map +1 -0
  299. package/dist/api/offset2d.d.ts +49 -0
  300. package/dist/api/offset2d.d.ts.map +1 -0
  301. package/dist/api/offset2d.js +86 -0
  302. package/dist/api/offset2d.js.map +1 -0
  303. package/dist/api/pattern.js +3 -3
  304. package/dist/api/pattern.js.map +1 -1
  305. package/dist/api/primitives.d.ts.map +1 -1
  306. package/dist/api/primitives.js +124 -8
  307. package/dist/api/primitives.js.map +1 -1
  308. package/dist/api/replicate.d.ts +2 -2
  309. package/dist/api/replicate.d.ts.map +1 -1
  310. package/dist/api/replicate.js +12 -12
  311. package/dist/api/replicate.js.map +1 -1
  312. package/dist/api/result.d.ts +1 -1
  313. package/dist/api/result.js +1 -1
  314. package/dist/api/result.js.map +1 -1
  315. package/dist/api/revolve.d.ts +2 -2
  316. package/dist/api/revolve.js +3 -3
  317. package/dist/api/revolve.js.map +1 -1
  318. package/dist/api/screw.d.ts +1 -1
  319. package/dist/api/screw.d.ts.map +1 -1
  320. package/dist/api/screw.js +5 -4
  321. package/dist/api/screw.js.map +1 -1
  322. package/dist/api/sdf.d.ts.map +1 -1
  323. package/dist/api/sdf.js +3 -2
  324. package/dist/api/sdf.js.map +1 -1
  325. package/dist/api/shape-type/index.d.ts +141 -0
  326. package/dist/api/shape-type/index.d.ts.map +1 -0
  327. package/dist/api/shape-type/index.js +182 -0
  328. package/dist/api/shape-type/index.js.map +1 -0
  329. package/dist/api/shell.d.ts +2 -2
  330. package/dist/api/shell.js +2 -2
  331. package/dist/api/shell.js.map +1 -1
  332. package/dist/api/solid-from-faces.d.ts +45 -0
  333. package/dist/api/solid-from-faces.d.ts.map +1 -0
  334. package/dist/api/solid-from-faces.js +72 -0
  335. package/dist/api/solid-from-faces.js.map +1 -0
  336. package/dist/api/solid-offset/index.d.ts +67 -0
  337. package/dist/api/solid-offset/index.d.ts.map +1 -0
  338. package/dist/api/solid-offset/index.js +132 -0
  339. package/dist/api/solid-offset/index.js.map +1 -0
  340. package/dist/api/surface/arg-spec.d.ts +35 -33
  341. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  342. package/dist/api/surface/arg-spec.js +222 -224
  343. package/dist/api/surface/arg-spec.js.map +1 -1
  344. package/dist/api/surface-face/index.d.ts +104 -0
  345. package/dist/api/surface-face/index.d.ts.map +1 -0
  346. package/dist/api/surface-face/index.js +217 -0
  347. package/dist/api/surface-face/index.js.map +1 -0
  348. package/dist/api/surface.d.ts +44 -0
  349. package/dist/api/surface.d.ts.map +1 -0
  350. package/dist/api/surface.js +66 -0
  351. package/dist/api/surface.js.map +1 -0
  352. package/dist/api/sweep.d.ts +59 -9
  353. package/dist/api/sweep.d.ts.map +1 -1
  354. package/dist/api/sweep.js +11 -6
  355. package/dist/api/sweep.js.map +1 -1
  356. package/dist/api/thicken.d.ts +1 -1
  357. package/dist/api/thicken.js +1 -1
  358. package/dist/api/thicken.js.map +1 -1
  359. package/dist/api/transform.d.ts +5 -5
  360. package/dist/api/transform.d.ts.map +1 -1
  361. package/dist/api/transform.js +11 -10
  362. package/dist/api/transform.js.map +1 -1
  363. package/dist/api/view/cameraFns.d.ts +1 -1
  364. package/dist/api/view/cameraFns.d.ts.map +1 -1
  365. package/dist/api/view/cameraFns.js +1 -1
  366. package/dist/api/view/cameraFns.js.map +1 -1
  367. package/dist/api/view/index.d.ts +0 -2
  368. package/dist/api/view/index.d.ts.map +1 -1
  369. package/dist/api/view/index.js +0 -2
  370. package/dist/api/view/index.js.map +1 -1
  371. package/dist/api/view/projectionPlanes.d.ts +1 -1
  372. package/dist/api/view/projectionPlanes.d.ts.map +1 -1
  373. package/dist/api/view/projectionPlanes.js.map +1 -1
  374. package/dist/api/view/view-camera.d.ts +7 -9
  375. package/dist/api/view/view-camera.d.ts.map +1 -1
  376. package/dist/api/view/view-camera.js +4 -6
  377. package/dist/api/view/view-camera.js.map +1 -1
  378. package/dist/api/view/view-projection.d.ts +0 -2
  379. package/dist/api/view/view-projection.d.ts.map +1 -1
  380. package/dist/api/view/view-projection.js +0 -2
  381. package/dist/api/view/view-projection.js.map +1 -1
  382. package/dist/api/view/view-sheet.d.ts +0 -2
  383. package/dist/api/view/view-sheet.d.ts.map +1 -1
  384. package/dist/api/view/view-sheet.js +0 -2
  385. package/dist/api/view/view-sheet.js.map +1 -1
  386. package/dist/api/view-export/index.d.ts +97 -0
  387. package/dist/api/view-export/index.d.ts.map +1 -0
  388. package/dist/api/view-export/index.js +118 -0
  389. package/dist/api/view-export/index.js.map +1 -0
  390. package/dist/brep/brep-ops.d.ts +89 -1
  391. package/dist/brep/brep-ops.d.ts.map +1 -1
  392. package/dist/brep/brep-ops.js +204 -13
  393. package/dist/brep/brep-ops.js.map +1 -1
  394. package/dist/brep/brep-topology.d.ts +20 -0
  395. package/dist/brep/brep-topology.d.ts.map +1 -1
  396. package/dist/brep/brep-topology.js +46 -0
  397. package/dist/brep/brep-topology.js.map +1 -1
  398. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  399. package/dist/brep/engine/adapters/occt.js +8 -8
  400. package/dist/brep/engine/adapters/occt.js.map +1 -1
  401. package/dist/brep/engine/primitives.d.ts +2 -3
  402. package/dist/brep/engine/primitives.d.ts.map +1 -1
  403. package/dist/brep/engine/primitives.js +1 -2
  404. package/dist/brep/engine/primitives.js.map +1 -1
  405. package/dist/brep/engine/registry.d.ts +1 -1
  406. package/dist/brep/engine/registry.js +1 -1
  407. package/dist/brep/engine/registry.js.map +1 -1
  408. package/dist/brep/engine/types.d.ts +2 -2
  409. package/dist/brep/engine/types.js.map +1 -1
  410. package/dist/brep/export/export-model.d.ts +40 -0
  411. package/dist/brep/export/export-model.d.ts.map +1 -1
  412. package/dist/brep/export/export-model.js +268 -25
  413. package/dist/brep/export/export-model.js.map +1 -1
  414. package/dist/brep/export/step-meta-header.d.ts +102 -0
  415. package/dist/brep/export/step-meta-header.d.ts.map +1 -0
  416. package/dist/brep/export/step-meta-header.js +225 -0
  417. package/dist/brep/export/step-meta-header.js.map +1 -0
  418. package/dist/brep/export/step.d.ts +5 -1
  419. package/dist/brep/export/step.d.ts.map +1 -1
  420. package/dist/brep/export/step.js +11 -2
  421. package/dist/brep/export/step.js.map +1 -1
  422. package/dist/brep/handle-bridge.d.ts +2 -2
  423. package/dist/brep/handle-bridge.js +2 -2
  424. package/dist/brep/handle-bridge.js.map +1 -1
  425. package/dist/brep/index.d.ts +6 -3
  426. package/dist/brep/index.d.ts.map +1 -1
  427. package/dist/brep/index.js +6 -3
  428. package/dist/brep/index.js.map +1 -1
  429. package/dist/brepkit-kernel/brepkitKernel.d.ts +1 -1
  430. package/dist/brepkit-kernel/brepkitKernel.js +2 -2
  431. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  432. package/dist/browser.d.ts +2 -2
  433. package/dist/browser.d.ts.map +1 -1
  434. package/dist/browser.js +5 -4
  435. package/dist/browser.js.map +1 -1
  436. package/dist/cad-runtime/admit-compat-lib.d.ts +3 -10
  437. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  438. package/dist/cad-runtime/admit-compat-lib.js +3 -9
  439. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  440. package/dist/cad-runtime/backend-dispatch.js +12 -3
  441. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  442. package/dist/cad-runtime/direct-executor.d.ts +6 -3
  443. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  444. package/dist/cad-runtime/direct-executor.js +31 -9
  445. package/dist/cad-runtime/direct-executor.js.map +1 -1
  446. package/dist/cad-runtime/interp/env.d.ts +1 -1
  447. package/dist/cad-runtime/interp/env.js.map +1 -1
  448. package/dist/cad-runtime/lib-id.d.ts +0 -2
  449. package/dist/cad-runtime/lib-id.d.ts.map +1 -1
  450. package/dist/cad-runtime/lib-id.js +0 -2
  451. package/dist/cad-runtime/lib-id.js.map +1 -1
  452. package/dist/cad-runtime/live-shapes.d.ts +3 -5
  453. package/dist/cad-runtime/live-shapes.d.ts.map +1 -1
  454. package/dist/cad-runtime/live-shapes.js +8 -10
  455. package/dist/cad-runtime/live-shapes.js.map +1 -1
  456. package/dist/cad-runtime/ports.d.ts +3 -3
  457. package/dist/cad-runtime/ports.js.map +1 -1
  458. package/dist/cad-runtime/runtime.d.ts +21 -7
  459. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  460. package/dist/cad-runtime/runtime.js +45 -6
  461. package/dist/cad-runtime/runtime.js.map +1 -1
  462. package/dist/define-op.d.ts +4 -3
  463. package/dist/define-op.d.ts.map +1 -1
  464. package/dist/define-op.js +65 -3
  465. package/dist/define-op.js.map +1 -1
  466. package/dist/geometry2d/bridge/plane.d.ts +1 -1
  467. package/dist/geometry2d/bridge/plane.js +1 -1
  468. package/dist/geometry2d/bridge/plane.js.map +1 -1
  469. package/dist/geometry2d/curve2d.d.ts +1 -1
  470. package/dist/geometry2d/curve2d.js +1 -1
  471. package/dist/geometry2d/curve2d.js.map +1 -1
  472. package/dist/index.d.ts +1 -1
  473. package/dist/index.d.ts.map +1 -1
  474. package/dist/index.js +10 -4
  475. package/dist/index.js.map +1 -1
  476. package/dist/io/fai-zip/container-read.d.ts +16 -0
  477. package/dist/io/fai-zip/container-read.d.ts.map +1 -1
  478. package/dist/io/fai-zip/container-read.js +22 -0
  479. package/dist/io/fai-zip/container-read.js.map +1 -1
  480. package/dist/io/fai-zip/index.d.ts +1 -1
  481. package/dist/io/fai-zip/index.d.ts.map +1 -1
  482. package/dist/io/fai-zip/index.js +1 -1
  483. package/dist/io/fai-zip/index.js.map +1 -1
  484. package/dist/lang/code-to-args.d.ts.map +1 -1
  485. package/dist/lang/code-to-args.js +10 -1
  486. package/dist/lang/code-to-args.js.map +1 -1
  487. package/dist/lang/determinism-scanner.d.ts.map +1 -1
  488. package/dist/lang/determinism-scanner.js +22 -9
  489. package/dist/lang/determinism-scanner.js.map +1 -1
  490. package/dist/lang/metadata-extractor.d.ts +27 -6
  491. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  492. package/dist/lang/metadata-extractor.js +90 -29
  493. package/dist/lang/metadata-extractor.js.map +1 -1
  494. package/dist/lang/parse-error.d.ts +4 -0
  495. package/dist/lang/parse-error.d.ts.map +1 -1
  496. package/dist/lang/parse-error.js.map +1 -1
  497. package/dist/lang/security-scanner.d.ts +27 -2
  498. package/dist/lang/security-scanner.d.ts.map +1 -1
  499. package/dist/lang/security-scanner.js +29 -2
  500. package/dist/lang/security-scanner.js.map +1 -1
  501. package/dist/lang/source-edit.d.ts +2 -2
  502. package/dist/lang/source-edit.js.map +1 -1
  503. package/dist/lang/symbol-table.generated.d.ts +36 -0
  504. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  505. package/dist/lang/symbol-table.generated.js +36 -0
  506. package/dist/lang/symbol-table.generated.js.map +1 -1
  507. package/dist/lang/types.d.ts +5 -6
  508. package/dist/lang/types.d.ts.map +1 -1
  509. package/dist/lang/types.js.map +1 -1
  510. package/dist/mesh/import-model.d.ts +94 -0
  511. package/dist/mesh/import-model.d.ts.map +1 -0
  512. package/dist/mesh/import-model.js +15 -0
  513. package/dist/mesh/import-model.js.map +1 -0
  514. package/dist/mesh/index.d.ts +19 -58
  515. package/dist/mesh/index.d.ts.map +1 -1
  516. package/dist/mesh/index.js +19 -70
  517. package/dist/mesh/index.js.map +1 -1
  518. package/dist/mesh/io.d.ts +39 -16
  519. package/dist/mesh/io.d.ts.map +1 -1
  520. package/dist/mesh/io.js +151 -22
  521. package/dist/mesh/io.js.map +1 -1
  522. package/dist/mesh/primitives.d.ts.map +1 -1
  523. package/dist/mesh/primitives.js +42 -7
  524. package/dist/mesh/primitives.js.map +1 -1
  525. package/dist/mesh/threemf-bambu.d.ts +12 -1
  526. package/dist/mesh/threemf-bambu.d.ts.map +1 -1
  527. package/dist/mesh/threemf-bambu.js +68 -16
  528. package/dist/mesh/threemf-bambu.js.map +1 -1
  529. package/dist/mesh/threemf-loader.d.ts +37 -1
  530. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  531. package/dist/mesh/threemf-loader.js +205 -14
  532. package/dist/mesh/threemf-loader.js.map +1 -1
  533. package/dist/mesh/transform.d.ts +1 -1
  534. package/dist/mesh/transform.js +1 -1
  535. package/dist/mesh/transform.js.map +1 -1
  536. package/dist/mesh/types.d.ts +43 -5
  537. package/dist/mesh/types.d.ts.map +1 -1
  538. package/dist/mesh/types.js.map +1 -1
  539. package/dist/node-host/cli.d.ts +49 -1
  540. package/dist/node-host/cli.d.ts.map +1 -1
  541. package/dist/node-host/cli.js +125 -19
  542. package/dist/node-host/cli.js.map +1 -1
  543. package/dist/node-host/execute-script.d.ts +55 -0
  544. package/dist/node-host/execute-script.d.ts.map +1 -0
  545. package/dist/node-host/execute-script.js +46 -0
  546. package/dist/node-host/execute-script.js.map +1 -0
  547. package/dist/node.d.ts +2 -0
  548. package/dist/node.d.ts.map +1 -1
  549. package/dist/node.js +3 -0
  550. package/dist/node.js.map +1 -1
  551. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts +260 -0
  552. package/dist/occt-kernel/generated/occtPlatform.generated.d.ts.map +1 -0
  553. package/dist/occt-kernel/generated/occtPlatform.generated.js +875 -0
  554. package/dist/occt-kernel/generated/occtPlatform.generated.js.map +1 -0
  555. package/dist/occt-kernel/highLevelApi.d.ts +4 -1
  556. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  557. package/dist/occt-kernel/highLevelApi.js +4 -2
  558. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  559. package/dist/occt-kernel/hullGeometry.d.ts +2 -2
  560. package/dist/occt-kernel/hullGeometry.js +2 -3
  561. package/dist/occt-kernel/hullGeometry.js.map +1 -1
  562. package/dist/occt-kernel/hullOps.d.ts +3 -3
  563. package/dist/occt-kernel/hullOps.js +4 -4
  564. package/dist/occt-kernel/hullOps.js.map +1 -1
  565. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  566. package/dist/occt-kernel/occt-primitives.js +32 -5
  567. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  568. package/dist/occt-kernel/occtKernel.d.ts +1 -1
  569. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  570. package/dist/occt-kernel/occtKernel.js +19 -1
  571. package/dist/occt-kernel/occtKernel.js.map +1 -1
  572. package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
  573. package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
  574. package/dist/occt-kernel/stepMetaParser.js +166 -0
  575. package/dist/occt-kernel/stepMetaParser.js.map +1 -0
  576. package/dist/occt-scan/recognize.d.ts +58 -0
  577. package/dist/occt-scan/recognize.d.ts.map +1 -0
  578. package/dist/occt-scan/recognize.js +216 -0
  579. package/dist/occt-scan/recognize.js.map +1 -0
  580. package/dist/primitives/brep-primitives.js +7 -7
  581. package/dist/primitives/brep-primitives.js.map +1 -1
  582. package/dist/result/bug.d.ts +1 -1
  583. package/dist/result/bug.js +1 -1
  584. package/dist/result/bug.js.map +1 -1
  585. package/dist/result/errors.d.ts +2 -2
  586. package/dist/result/errors.d.ts.map +1 -1
  587. package/dist/result/errors.js +1 -1
  588. package/dist/result/errors.js.map +1 -1
  589. package/dist/result/vec3.d.ts +1 -1
  590. package/dist/result/vec3.js +1 -1
  591. package/dist/result/vec3.js.map +1 -1
  592. package/dist/runtime-state.d.ts +16 -0
  593. package/dist/runtime-state.d.ts.map +1 -1
  594. package/dist/runtime-state.js +27 -0
  595. package/dist/runtime-state.js.map +1 -1
  596. package/dist/script-globals.d.ts +24 -0
  597. package/dist/script-globals.d.ts.map +1 -0
  598. package/dist/script-globals.js +24 -0
  599. package/dist/script-globals.js.map +1 -0
  600. package/dist/shape.d.ts +35 -3
  601. package/dist/shape.d.ts.map +1 -1
  602. package/dist/shape.js +44 -2
  603. package/dist/shape.js.map +1 -1
  604. package/dist/step/stepMetaParser.d.ts +55 -0
  605. package/dist/step/stepMetaParser.d.ts.map +1 -0
  606. package/dist/step/stepMetaParser.js +177 -0
  607. package/dist/step/stepMetaParser.js.map +1 -0
  608. package/dist/topology/naming/lineage.d.ts +3 -2
  609. package/dist/topology/naming/lineage.d.ts.map +1 -1
  610. package/dist/topology/naming/lineage.js.map +1 -1
  611. package/dist/weapp.d.ts +1 -1
  612. package/dist/weapp.js +1 -1
  613. package/dist/weapp.js.map +1 -1
  614. package/package.json +9 -11
@@ -0,0 +1,141 @@
1
+ /**
2
+ * api shape-type — 类型判定谓词族(平台 op engines:['occt'],普通函数形态)
3
+ *
4
+ * @platform occt — 8 个布尔谓词(isEdge / isFace / isShell / isVertex / isWire /
5
+ * isCompound / isCompSolid / isEqual)直调 occt 原生 `isEdge`/`isFace`/…(occt-wasm
6
+ * 有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里(L1 只有 `isSolid` 与
7
+ * `getSubShapes`/`subShapeHashes`,见 brep/engine/primitives.ts)——因此它们不能走
8
+ * 中立路径,必须声明 `engines: ['occt']` 直调 occt(方案 §3.4.6 校正注)。
9
+ *
10
+ * 为什么不是 `defineOp`:本族返回**布尔**(非 Shape)。`defineOp` 的 brep 包装
11
+ * (define-op.ts#wrapBrepOne)把返回值一律收养为 Shape,装不下布尔。数据型平台 op
12
+ * 走普通函数,是 `api/export-brep.ts` 的既定口径(先例:projectView 返回 SVG 字符串)。
13
+ *
14
+ * 引擎身份**不能**靠 dispatchPath 门控(普通函数不走那条路)⇒ 按
15
+ * `api/internal/l3-bridge.ts#assertEngineFor` 的既定做法:函数体第一行断言当前引擎,
16
+ * 触碰内核之前报出与 D11-4 同构的 `E_BREP_UNSUPPORTED`,不补桩、不回退。
17
+ * (与 dispatchPath 的差异:`assertEngineFor` **不含** D11-3 的 `brep_mock` 豁免——
18
+ * mock 句柄不是 occt 句柄,放行只会拿到错形状,故这里如实拦截。)
19
+ *
20
+ * 注册:api/api-namespace.ts 手动 import + 进 createApiNamespace 对象;覆盖率扫描器
21
+ * scan-occt-op-coverage.ts 的 PLAN_C2_EXTRA 补 8 个方法名(普通函数不在 defineOp
22
+ * 全集口径内,collectOps 看不见)。
23
+ *
24
+ * §9.5 降级路径(记录在案):一旦 brepkit 的 wasm 面把 isEdge/isFace/… 接进 L1 契约
25
+ * 且两侧适配器同时落地,这些函数删掉 assertEngineFor 并改走 `getBrepApi()`,对应方法
26
+ * 即从 C2 转入 C1。
27
+ */
28
+ import type { Shape } from '../../mesh/types.js';
29
+ /**
30
+ * 形状是否为边(edge)。
31
+ * @group 查询
32
+ * @inputs 1
33
+ * @async false
34
+ * @qual ok
35
+ * @name isEdge
36
+ * @note 平台 op:仅 occt 引擎(原生 isEdge)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
37
+ * @returns boolean 是否为边。
38
+ * @param shape - 被判别的形状。type:Shape required:true
39
+ * @example
40
+ * const e = cad.makeLineEdge([0,0,0],[1,0,0])
41
+ * const yes = cad.isEdge(e)
42
+ */
43
+ export declare function isEdge(shape: Shape): boolean;
44
+ /**
45
+ * 形状是否为面(face)。
46
+ * @group 查询
47
+ * @inputs 1
48
+ * @async false
49
+ * @qual ok
50
+ * @name isFace
51
+ * @note 平台 op:仅 occt 引擎(原生 isFace)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
52
+ * @returns boolean 是否为面。
53
+ * @param shape - 被判别的形状。type:Shape required:true
54
+ * @example
55
+ * const f = cad.makeFace(wire)
56
+ * const yes = cad.isFace(f)
57
+ */
58
+ export declare function isFace(shape: Shape): boolean;
59
+ /**
60
+ * 形状是否为壳(shell)。
61
+ * @group 查询
62
+ * @inputs 1
63
+ * @async false
64
+ * @qual ok
65
+ * @name isShell
66
+ * @note 平台 op:仅 occt 引擎(原生 isShell)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
67
+ * @returns boolean 是否为壳。
68
+ * @param shape - 被判别的形状。type:Shape required:true
69
+ */
70
+ export declare function isShell(shape: Shape): boolean;
71
+ /**
72
+ * 形状是否为顶点(vertex)。
73
+ * @group 查询
74
+ * @inputs 1
75
+ * @async false
76
+ * @qual ok
77
+ * @name isVertex
78
+ * @note 平台 op:仅 occt 引擎(原生 isVertex)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
79
+ * @returns boolean 是否为顶点。
80
+ * @param shape - 被判别的形状。type:Shape required:true
81
+ */
82
+ export declare function isVertex(shape: Shape): boolean;
83
+ /**
84
+ * 形状是否为线(wire)。
85
+ * @group 查询
86
+ * @inputs 1
87
+ * @async false
88
+ * @qual ok
89
+ * @name isWire
90
+ * @note 平台 op:仅 occt 引擎(原生 isWire)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
91
+ * @returns boolean 是否为线。
92
+ * @param shape - 被判别的形状。type:Shape required:true
93
+ */
94
+ export declare function isWire(shape: Shape): boolean;
95
+ /**
96
+ * 形状是否为复合体(compound)。
97
+ * @group 查询
98
+ * @inputs 1
99
+ * @async false
100
+ * @qual ok
101
+ * @name isCompound
102
+ * @note 平台 op:仅 occt 引擎(原生 isCompound)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
103
+ * @returns boolean 是否为复合体。
104
+ * @param shape - 被判别的形状。type:Shape required:true
105
+ */
106
+ export declare function isCompound(shape: Shape): boolean;
107
+ /**
108
+ * 形状是否为组合实体(comp-solid)。
109
+ * @group 查询
110
+ * @inputs 1
111
+ * @async false
112
+ * @qual ok
113
+ * @name isCompSolid
114
+ * @note 平台 op:仅 occt 引擎(原生 isCompSolid)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
115
+ * @returns boolean 是否为组合实体。
116
+ * @param shape - 被判别的形状。type:Shape required:true
117
+ */
118
+ export declare function isCompSolid(shape: Shape): boolean;
119
+ /**
120
+ * 两个形状是否为同一几何实体(occt 原生 `isEqual` 语义)。
121
+ *
122
+ * occt 的 `IsEqual` 当且仅当两形状共享同一 `TShape` 且 `Location`/`Orientation`
123
+ * 相同时返回 true——即「同一几何实体」,不是「几何内容相同但独立构造」。因此两个
124
+ * 几何相同但各自 `makeBox` 出来的形状会返回 false;要比较「内容相同」需另走几何
125
+ * 比较(非本 op 职责)。区别于 `isSame`(同一句柄引用)。
126
+ * @group 查询
127
+ * @inputs 2
128
+ * @async false
129
+ * @qual ok
130
+ * @name isEqual
131
+ * @note 平台 op:仅 occt 引擎(原生 isEqual,L1 无对应成员)。非 occt 引擎执行前报
132
+ * E_BREP_UNSUPPORTED。
133
+ * @returns boolean 是否为同一几何实体。
134
+ * @param a - 第一个形状。type:Shape required:true
135
+ * @param b - 第二个形状。type:Shape required:true
136
+ * @example
137
+ * const same = cad.isEqual(part0, part0) // true(同一手柄)
138
+ * const diff = cad.isEqual(part0, part1) // 独立构造的相同几何 → false
139
+ */
140
+ export declare function isEqual(a: Shape, b: Shape): boolean;
141
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/shape-type/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AA+B7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAE5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEjD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,OAAO,CAMnD"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * api shape-type — 类型判定谓词族(平台 op engines:['occt'],普通函数形态)
3
+ *
4
+ * @platform occt — 8 个布尔谓词(isEdge / isFace / isShell / isVertex / isWire /
5
+ * isCompound / isCompSolid / isEqual)直调 occt 原生 `isEdge`/`isFace`/…(occt-wasm
6
+ * 有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里(L1 只有 `isSolid` 与
7
+ * `getSubShapes`/`subShapeHashes`,见 brep/engine/primitives.ts)——因此它们不能走
8
+ * 中立路径,必须声明 `engines: ['occt']` 直调 occt(方案 §3.4.6 校正注)。
9
+ *
10
+ * 为什么不是 `defineOp`:本族返回**布尔**(非 Shape)。`defineOp` 的 brep 包装
11
+ * (define-op.ts#wrapBrepOne)把返回值一律收养为 Shape,装不下布尔。数据型平台 op
12
+ * 走普通函数,是 `api/export-brep.ts` 的既定口径(先例:projectView 返回 SVG 字符串)。
13
+ *
14
+ * 引擎身份**不能**靠 dispatchPath 门控(普通函数不走那条路)⇒ 按
15
+ * `api/internal/l3-bridge.ts#assertEngineFor` 的既定做法:函数体第一行断言当前引擎,
16
+ * 触碰内核之前报出与 D11-4 同构的 `E_BREP_UNSUPPORTED`,不补桩、不回退。
17
+ * (与 dispatchPath 的差异:`assertEngineFor` **不含** D11-3 的 `brep_mock` 豁免——
18
+ * mock 句柄不是 occt 句柄,放行只会拿到错形状,故这里如实拦截。)
19
+ *
20
+ * 注册:api/api-namespace.ts 手动 import + 进 createApiNamespace 对象;覆盖率扫描器
21
+ * scan-occt-op-coverage.ts 的 PLAN_C2_EXTRA 补 8 个方法名(普通函数不在 defineOp
22
+ * 全集口径内,collectOps 看不见)。
23
+ *
24
+ * §9.5 降级路径(记录在案):一旦 brepkit 的 wasm 面把 isEdge/isFace/… 接进 L1 契约
25
+ * 且两侧适配器同时落地,这些函数删掉 assertEngineFor 并改走 `getBrepApi()`,对应方法
26
+ * 即从 C2 转入 C1。
27
+ */
28
+ import { brepOf } from '../../shape.js';
29
+ import { getOcctKernel } from '../../occt-kernel/occtKernel.js';
30
+ import { assertEngineFor } from '../internal/l3-bridge.js';
31
+ /** 借出形状的内核句柄;无 BREP 槽(mesh-only)报错。 */
32
+ function occtHandleOf(shape, op) {
33
+ const h = brepOf(shape);
34
+ if (!h) {
35
+ throw new Error(`E_SHAPE_TYPE_NO_BREP: ${op} requires a BREP handle (mesh-only shape has none)`);
36
+ }
37
+ return h;
38
+ }
39
+ /**
40
+ * 单参数类型判定:先断言引擎身份 → 借出句柄 → occt 原生 is* 直调。
41
+ * @param method - occt 原生方法名(op 名与之相同)。
42
+ * @param shape - 被判别的形状。
43
+ * @returns 该形状是否为对应拓扑类型。
44
+ */
45
+ function shapePredicate(method, shape) {
46
+ assertEngineFor(method, ['occt']);
47
+ const kernel = getOcctKernel();
48
+ return kernel[method](occtHandleOf(shape, method));
49
+ }
50
+ /**
51
+ * 形状是否为边(edge)。
52
+ * @group 查询
53
+ * @inputs 1
54
+ * @async false
55
+ * @qual ok
56
+ * @name isEdge
57
+ * @note 平台 op:仅 occt 引擎(原生 isEdge)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
58
+ * @returns boolean 是否为边。
59
+ * @param shape - 被判别的形状。type:Shape required:true
60
+ * @example
61
+ * const e = cad.makeLineEdge([0,0,0],[1,0,0])
62
+ * const yes = cad.isEdge(e)
63
+ */
64
+ export function isEdge(shape) {
65
+ return shapePredicate('isEdge', shape);
66
+ }
67
+ /**
68
+ * 形状是否为面(face)。
69
+ * @group 查询
70
+ * @inputs 1
71
+ * @async false
72
+ * @qual ok
73
+ * @name isFace
74
+ * @note 平台 op:仅 occt 引擎(原生 isFace)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
75
+ * @returns boolean 是否为面。
76
+ * @param shape - 被判别的形状。type:Shape required:true
77
+ * @example
78
+ * const f = cad.makeFace(wire)
79
+ * const yes = cad.isFace(f)
80
+ */
81
+ export function isFace(shape) {
82
+ return shapePredicate('isFace', shape);
83
+ }
84
+ /**
85
+ * 形状是否为壳(shell)。
86
+ * @group 查询
87
+ * @inputs 1
88
+ * @async false
89
+ * @qual ok
90
+ * @name isShell
91
+ * @note 平台 op:仅 occt 引擎(原生 isShell)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
92
+ * @returns boolean 是否为壳。
93
+ * @param shape - 被判别的形状。type:Shape required:true
94
+ */
95
+ export function isShell(shape) {
96
+ return shapePredicate('isShell', shape);
97
+ }
98
+ /**
99
+ * 形状是否为顶点(vertex)。
100
+ * @group 查询
101
+ * @inputs 1
102
+ * @async false
103
+ * @qual ok
104
+ * @name isVertex
105
+ * @note 平台 op:仅 occt 引擎(原生 isVertex)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
106
+ * @returns boolean 是否为顶点。
107
+ * @param shape - 被判别的形状。type:Shape required:true
108
+ */
109
+ export function isVertex(shape) {
110
+ return shapePredicate('isVertex', shape);
111
+ }
112
+ /**
113
+ * 形状是否为线(wire)。
114
+ * @group 查询
115
+ * @inputs 1
116
+ * @async false
117
+ * @qual ok
118
+ * @name isWire
119
+ * @note 平台 op:仅 occt 引擎(原生 isWire)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
120
+ * @returns boolean 是否为线。
121
+ * @param shape - 被判别的形状。type:Shape required:true
122
+ */
123
+ export function isWire(shape) {
124
+ return shapePredicate('isWire', shape);
125
+ }
126
+ /**
127
+ * 形状是否为复合体(compound)。
128
+ * @group 查询
129
+ * @inputs 1
130
+ * @async false
131
+ * @qual ok
132
+ * @name isCompound
133
+ * @note 平台 op:仅 occt 引擎(原生 isCompound)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
134
+ * @returns boolean 是否为复合体。
135
+ * @param shape - 被判别的形状。type:Shape required:true
136
+ */
137
+ export function isCompound(shape) {
138
+ return shapePredicate('isCompound', shape);
139
+ }
140
+ /**
141
+ * 形状是否为组合实体(comp-solid)。
142
+ * @group 查询
143
+ * @inputs 1
144
+ * @async false
145
+ * @qual ok
146
+ * @name isCompSolid
147
+ * @note 平台 op:仅 occt 引擎(原生 isCompSolid)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。
148
+ * @returns boolean 是否为组合实体。
149
+ * @param shape - 被判别的形状。type:Shape required:true
150
+ */
151
+ export function isCompSolid(shape) {
152
+ return shapePredicate('isCompSolid', shape);
153
+ }
154
+ /**
155
+ * 两个形状是否为同一几何实体(occt 原生 `isEqual` 语义)。
156
+ *
157
+ * occt 的 `IsEqual` 当且仅当两形状共享同一 `TShape` 且 `Location`/`Orientation`
158
+ * 相同时返回 true——即「同一几何实体」,不是「几何内容相同但独立构造」。因此两个
159
+ * 几何相同但各自 `makeBox` 出来的形状会返回 false;要比较「内容相同」需另走几何
160
+ * 比较(非本 op 职责)。区别于 `isSame`(同一句柄引用)。
161
+ * @group 查询
162
+ * @inputs 2
163
+ * @async false
164
+ * @qual ok
165
+ * @name isEqual
166
+ * @note 平台 op:仅 occt 引擎(原生 isEqual,L1 无对应成员)。非 occt 引擎执行前报
167
+ * E_BREP_UNSUPPORTED。
168
+ * @returns boolean 是否为同一几何实体。
169
+ * @param a - 第一个形状。type:Shape required:true
170
+ * @param b - 第二个形状。type:Shape required:true
171
+ * @example
172
+ * const same = cad.isEqual(part0, part0) // true(同一手柄)
173
+ * const diff = cad.isEqual(part0, part1) // 独立构造的相同几何 → false
174
+ */
175
+ export function isEqual(a, b) {
176
+ assertEngineFor('isEqual', ['occt']);
177
+ const ka = occtHandleOf(a, 'isEqual');
178
+ const kb = occtHandleOf(b, 'isEqual');
179
+ const kernel = getOcctKernel();
180
+ return kernel.isEqual(ka, kb);
181
+ }
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/shape-type/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAMvD,uCAAuC;AACvC,SAAS,YAAY,CAAC,KAAY,EAAE,EAAU;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAA2B,CAAA;IACjD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,oDAAoD,CAAC,CAAA;IAClG,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAyB,EAAE,KAAY;IAC7D,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,aAAa,EAAmE,CAAA;IAC/F,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AACpD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,MAAM,CAAC,KAAY;IACjC,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,MAAM,CAAC,KAAY;IACjC,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,KAAY;IAClC,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM,CAAC,KAAY;IACjC,OAAO,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAY;IACrC,OAAO,cAAc,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,cAAc,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,OAAO,CAAC,CAAQ,EAAE,CAAQ;IACxC,eAAe,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACpC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACrC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,aAAa,EAA8D,CAAA;IAC1F,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;AAC/B,CAAC","sourcesContent":["/**\n * api shape-type — 类型判定谓词族(平台 op engines:['occt'],普通函数形态)\n *\n * @platform occt — 8 个布尔谓词(isEdge / isFace / isShell / isVertex / isWire /\n * isCompound / isCompSolid / isEqual)直调 occt 原生 `isEdge`/`isFace`/…(occt-wasm\n * 有)。这些原生方法**不在** L1 契约 `BrepEngineApi` 里(L1 只有 `isSolid` 与\n * `getSubShapes`/`subShapeHashes`,见 brep/engine/primitives.ts)——因此它们不能走\n * 中立路径,必须声明 `engines: ['occt']` 直调 occt(方案 §3.4.6 校正注)。\n *\n * 为什么不是 `defineOp`:本族返回**布尔**(非 Shape)。`defineOp` 的 brep 包装\n * (define-op.ts#wrapBrepOne)把返回值一律收养为 Shape,装不下布尔。数据型平台 op\n * 走普通函数,是 `api/export-brep.ts` 的既定口径(先例:projectView 返回 SVG 字符串)。\n *\n * 引擎身份**不能**靠 dispatchPath 门控(普通函数不走那条路)⇒ 按\n * `api/internal/l3-bridge.ts#assertEngineFor` 的既定做法:函数体第一行断言当前引擎,\n * 触碰内核之前报出与 D11-4 同构的 `E_BREP_UNSUPPORTED`,不补桩、不回退。\n * (与 dispatchPath 的差异:`assertEngineFor` **不含** D11-3 的 `brep_mock` 豁免——\n * mock 句柄不是 occt 句柄,放行只会拿到错形状,故这里如实拦截。)\n *\n * 注册:api/api-namespace.ts 手动 import + 进 createApiNamespace 对象;覆盖率扫描器\n * scan-occt-op-coverage.ts 的 PLAN_C2_EXTRA 补 8 个方法名(普通函数不在 defineOp\n * 全集口径内,collectOps 看不见)。\n *\n * §9.5 降级路径(记录在案):一旦 brepkit 的 wasm 面把 isEdge/isFace/… 接进 L1 契约\n * 且两侧适配器同时落地,这些函数删掉 assertEngineFor 并改走 `getBrepApi()`,对应方法\n * 即从 C2 转入 C1。\n */\n\nimport type { Shape } from '../../mesh/types'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport { brepOf } from '../../shape'\nimport { getOcctKernel } from '../../occt-kernel/occtKernel'\nimport { assertEngineFor } from '../internal/l3-bridge'\n\n/** occt 原生类型判定方法名(与 OcctKernel 导出一一对应)。 */\ntype OcctTypePredicate =\n | 'isEdge' | 'isFace' | 'isShell' | 'isVertex' | 'isWire' | 'isCompound' | 'isCompSolid'\n\n/** 借出形状的内核句柄;无 BREP 槽(mesh-only)报错。 */\nfunction occtHandleOf(shape: Shape, op: string): BrepHandle {\n const h = brepOf(shape) as BrepHandle | undefined\n if (!h) {\n throw new Error(`E_SHAPE_TYPE_NO_BREP: ${op} requires a BREP handle (mesh-only shape has none)`)\n }\n return h\n}\n\n/**\n * 单参数类型判定:先断言引擎身份 → 借出句柄 → occt 原生 is* 直调。\n * @param method - occt 原生方法名(op 名与之相同)。\n * @param shape - 被判别的形状。\n * @returns 该形状是否为对应拓扑类型。\n */\nfunction shapePredicate(method: OcctTypePredicate, shape: Shape): boolean {\n assertEngineFor(method, ['occt'])\n const kernel = getOcctKernel() as unknown as Record<OcctTypePredicate, (h: unknown) => boolean>\n return kernel[method](occtHandleOf(shape, method))\n}\n\n/**\n * 形状是否为边(edge)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isEdge\n * @note 平台 op:仅 occt 引擎(原生 isEdge)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为边。\n * @param shape - 被判别的形状。type:Shape required:true\n * @example\n * const e = cad.makeLineEdge([0,0,0],[1,0,0])\n * const yes = cad.isEdge(e)\n */\nexport function isEdge(shape: Shape): boolean {\n return shapePredicate('isEdge', shape)\n}\n\n/**\n * 形状是否为面(face)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isFace\n * @note 平台 op:仅 occt 引擎(原生 isFace)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为面。\n * @param shape - 被判别的形状。type:Shape required:true\n * @example\n * const f = cad.makeFace(wire)\n * const yes = cad.isFace(f)\n */\nexport function isFace(shape: Shape): boolean {\n return shapePredicate('isFace', shape)\n}\n\n/**\n * 形状是否为壳(shell)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isShell\n * @note 平台 op:仅 occt 引擎(原生 isShell)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为壳。\n * @param shape - 被判别的形状。type:Shape required:true\n */\nexport function isShell(shape: Shape): boolean {\n return shapePredicate('isShell', shape)\n}\n\n/**\n * 形状是否为顶点(vertex)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isVertex\n * @note 平台 op:仅 occt 引擎(原生 isVertex)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为顶点。\n * @param shape - 被判别的形状。type:Shape required:true\n */\nexport function isVertex(shape: Shape): boolean {\n return shapePredicate('isVertex', shape)\n}\n\n/**\n * 形状是否为线(wire)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isWire\n * @note 平台 op:仅 occt 引擎(原生 isWire)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为线。\n * @param shape - 被判别的形状。type:Shape required:true\n */\nexport function isWire(shape: Shape): boolean {\n return shapePredicate('isWire', shape)\n}\n\n/**\n * 形状是否为复合体(compound)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isCompound\n * @note 平台 op:仅 occt 引擎(原生 isCompound)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为复合体。\n * @param shape - 被判别的形状。type:Shape required:true\n */\nexport function isCompound(shape: Shape): boolean {\n return shapePredicate('isCompound', shape)\n}\n\n/**\n * 形状是否为组合实体(comp-solid)。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name isCompSolid\n * @note 平台 op:仅 occt 引擎(原生 isCompSolid)。非 occt 引擎执行前报 E_BREP_UNSUPPORTED。\n * @returns boolean 是否为组合实体。\n * @param shape - 被判别的形状。type:Shape required:true\n */\nexport function isCompSolid(shape: Shape): boolean {\n return shapePredicate('isCompSolid', shape)\n}\n\n/**\n * 两个形状是否为同一几何实体(occt 原生 `isEqual` 语义)。\n *\n * occt 的 `IsEqual` 当且仅当两形状共享同一 `TShape` 且 `Location`/`Orientation`\n * 相同时返回 true——即「同一几何实体」,不是「几何内容相同但独立构造」。因此两个\n * 几何相同但各自 `makeBox` 出来的形状会返回 false;要比较「内容相同」需另走几何\n * 比较(非本 op 职责)。区别于 `isSame`(同一句柄引用)。\n * @group 查询\n * @inputs 2\n * @async false\n * @qual ok\n * @name isEqual\n * @note 平台 op:仅 occt 引擎(原生 isEqual,L1 无对应成员)。非 occt 引擎执行前报\n * E_BREP_UNSUPPORTED。\n * @returns boolean 是否为同一几何实体。\n * @param a - 第一个形状。type:Shape required:true\n * @param b - 第二个形状。type:Shape required:true\n * @example\n * const same = cad.isEqual(part0, part0) // true(同一手柄)\n * const diff = cad.isEqual(part0, part1) // 独立构造的相同几何 → false\n */\nexport function isEqual(a: Shape, b: Shape): boolean {\n assertEngineFor('isEqual', ['occt'])\n const ka = occtHandleOf(a, 'isEqual')\n const kb = occtHandleOf(b, 'isEqual')\n const kernel = getOcctKernel() as unknown as { isEqual(h: unknown, h2: unknown): boolean }\n return kernel.isEqual(ka, kb)\n}\n"]}
@@ -4,10 +4,10 @@
4
4
  * 中立 op:L1 `shell(solid, facesToRemove, thickness, tolerance)` 在 occt 与
5
5
  * brepkit 两侧均有真实现(engine-method-map 实测 `dialect`)⇒ 走 `getBrepApi()`
6
6
  * (D12),不声明 engines(中立 op:实现只经 L1 契约面)。相对现状是
7
- * 能力升级——vendored 版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。
7
+ * 能力升级——旧版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。
8
8
  *
9
9
  * 选面口径(设计原则 4):`openFaces: FaceTopoRef[]`(`cad.faceRef` 产物),
10
- * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻 vendored 的
10
+ * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻旧
11
11
  * `Face[]` 句柄入参。解析在 op 内一处完成(`buildEdgeResolutionContext` 现场枚举
12
12
  * + `resolveTopoRef`)。
13
13
  *
package/dist/api/shell.js CHANGED
@@ -4,10 +4,10 @@
4
4
  * 中立 op:L1 `shell(solid, facesToRemove, thickness, tolerance)` 在 occt 与
5
5
  * brepkit 两侧均有真实现(engine-method-map 实测 `dialect`)⇒ 走 `getBrepApi()`
6
6
  * (D12),不声明 engines(中立 op:实现只经 L1 契约面)。相对现状是
7
- * 能力升级——vendored 版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。
7
+ * 能力升级——旧版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。
8
8
  *
9
9
  * 选面口径(设计原则 4):`openFaces: FaceTopoRef[]`(`cad.faceRef` 产物),
10
- * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻 vendored 的
10
+ * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻旧
11
11
  * `Face[]` 句柄入参。解析在 op 内一处完成(`buildEdgeResolutionContext` 现场枚举
12
12
  * + `resolveTopoRef`)。
13
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/api/shell.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api shell — 抽壳:按面移除生成等厚薄壁(手写中立 op,Phase 5)\n *\n * 中立 op:L1 `shell(solid, facesToRemove, thickness, tolerance)` 在 occt 与\n * brepkit 两侧均有真实现(engine-method-map 实测 `dialect`)⇒ 走 `getBrepApi()`\n * (D12),不声明 engines(中立 op:实现只经 L1 契约面)。相对现状是\n * 能力升级——vendored 版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。\n *\n * 选面口径(设计原则 4):`openFaces: FaceTopoRef[]`(`cad.faceRef` 产物),\n * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻 vendored 的\n * `Face[]` 句柄入参。解析在 op 内一处完成(`buildEdgeResolutionContext` 现场枚举\n * + `resolveTopoRef`)。\n *\n * 网格链(方案 2026-10-01 §4 Phase 4 / B3 批):`mesh:` 实现走网格后端,面按\n * **序号或 FaceTopoRef** 解析(近似拓扑没有 role 层),产物是新的网格零件。\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 } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { FaceTopoRef } from '../topology/naming'\nimport { resolveTopoRef, TopoRefError } from '../topology/naming'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { buildEdgeResolutionContext } from './topo-resolve'\nimport { meshKernelFailure, meshSolidBasicEntry, meshSolidProduct, resolveMeshFaces } from './internal/mesh-solid-op'\n\n/** 抽壳时移除的面选择器:精度链用 `FaceTopoRef`;网格链也可用 1 起序号。 */\nexport type ShellFaceSelector = number | FaceTopoRef\n\n/** `cad.shell` 参数。 */\nexport interface ShellParams {\n /** 抽壳时移除的面(FaceTopoRef[],`cad.faceRef` 产物;空数组 = 全封闭薄壁)。 */\n openFaces: ShellFaceSelector[]\n /** 壁厚(mm,>0,向内偏置)。 */\n thickness: number\n /** 容差(mm,可选;默认走内核约定值)。 */\n tolerance?: number\n}\n\n/** 参数共校验(两条路径共用;`openFaces` 为空数组合法 = 全封闭薄壁)。 */\nfunction assertShellParams(params: ShellParams): void {\n const { openFaces, thickness } = params ?? ({} as ShellParams)\n if (!Array.isArray(openFaces)) {\n throw new Error('E_SHELL_BAD_OPEN_FACES: shell.openFaces must be an array of FaceTopoRef or ordinals')\n }\n if (typeof thickness !== 'number' || !Number.isFinite(thickness) || thickness <= 0) {\n throw new Error('E_SHELL_BAD_THICKNESS: shell.thickness must be a positive number')\n }\n}\n\n/** BREP 路径:解析面引用 → L1 shell → 收养。 */\nfunction shellBrep(input: Shape, params: ShellParams): Shape {\n const { openFaces, thickness, tolerance } = params\n assertShellParams(params)\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error('E_SHELL_NO_BREP: shell input is not BREP')\n\n const ctx = buildEdgeResolutionContext(kernel, input as object)\n if (!ctx) throw new TopoRefError('E_TOPO_NOT_FOUND', 'face', 'shell: input has no BREP naming context')\n const faceHandles = openFaces.map((ref) => {\n // 精度链不开序号口子:BREP 的面身份是 `(origin, role)`,序号只是本次枚举序。\n if (typeof ref === 'number') {\n throw new Error(\n 'E_SHELL_BAD_OPEN_FACES: an ordinal face selector is only available on the mesh chain — ' +\n 'a precision-chain face is identified by its role line (cad.faceRef)',\n )\n }\n if (!ref || (ref as { kind?: unknown }).kind !== 'face') {\n throw new Error('E_SHELL_BAD_OPEN_FACES: every openFaces entry must be a FaceTopoRef (cad.faceRef)')\n }\n const r = resolveTopoRef(ref, ctx)\n if (r.handle === undefined) {\n throw new TopoRefError('E_TOPO_NOT_FOUND', 'face', `shell: face resolved without handle (${ref.origin}/${ref.role})`)\n }\n return r.handle as BrepHandle\n })\n\n const result = kernel.shell(solid, faceHandles, thickness, tolerance ?? 1e-6)\n return fromBrep(solidToShape(kernel, result), { solid: result })\n}\n\n/**\n * 网格实体路径:按序号或几何选出要开口的面,交网格后端抽壳。\n *\n * 与 BREP 路径同一条 L1 契约面(`shell(solid, faces, thickness, tolerance)`),\n * 差别只在选面方式:近似拓扑没有 role 层,面靠**序号**(拓扑 `faces` 数组下标 + 1)\n * 或 `FaceTopoRef` 的几何匹配(法向/中心/面积)指认。产物是新网格零件,\n * 近似拓扑由 `meshSolidProduct` 重建。\n *\n * @param input - the mesh-solid input.\n * @param params - the shell parameters.\n * @returns the shelled mesh solid as a new mesh part.\n */\nfunction shellMeshSolid(input: Shape, params: ShellParams): Shape {\n const { openFaces, thickness, tolerance } = params\n assertShellParams(params)\n const entry = meshSolidBasicEntry(input, 'shell')\n const faceHandles = resolveMeshFaces(entry.kernel, input, openFaces, 'shell')\n\n let result: BrepHandle\n try {\n result = entry.kernel.shell(entry.solid, faceHandles, thickness, tolerance ?? 1e-6)\n } catch (cause) {\n throw meshKernelFailure(\n 'shell',\n 'E_SHELL_FAILED',\n `shell(thickness=${thickness}) removing ${faceHandles.length} face(s)`,\n cause,\n )\n }\n return meshSolidProduct(entry, result)\n}\n\n/**\n * 抽壳:移除指定面并把余下面偏置成等厚薄壁。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name shell\n * @note 中立 op:L1 shell 两引擎同实现。`openFaces` 为空数组时生成全封闭薄壁。\n * 精度链按 role 线路选面(`cad.faceRef`);网格链按序号或几何选面——网格零件\n * 没有 role 层,序号是唯一无歧义的指认方式。\n * @returns Shape 抽壳后的薄壁体。\n * @param input - 目标几何。type:Shape required:true\n * @param params.openFaces - 要移除的面(FaceTopoRef[],cad.faceRef 产物;网格链可用 1 起序号)。type:FaceTopoRef[] required:true\n * @param params.thickness - 壁厚(mm,>0)。type:number required:true\n * @param params.tolerance - 容差(mm)。type:number required:false\n * @example\n * const sh = await cad.shell(part0, { openFaces: [cad.faceRef(part0, 1)], thickness: 2 })\n * const sm = await cad.shell(meshPart, { openFaces: [4], thickness: 2 })\n */\nexport const shell = defineOp({\n capabilities: ['directEdit'],\n meshEngines: ['brepkit'],\n mesh(input: Shape, params: ShellParams) {\n return shellMeshSolid(input, params)\n },\n brep(input: Shape, params: ShellParams) {\n return shellBrep(input, params)\n },\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n"]}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/api/shell.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAerH,gDAAgD;AAChD,SAAS,iBAAiB,CAAC,MAAmB;IAC5C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,IAAK,EAAkB,CAAA;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAA;IACxG,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;IACrF,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,SAAS,SAAS,CAAC,KAAY,EAAE,MAAmB;IAClD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAClD,iBAAiB,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAA2B,CAAA;IACrD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAEvE,MAAM,GAAG,GAAG,0BAA0B,CAAC,MAAM,EAAE,KAAe,CAAC,CAAA;IAC/D,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,MAAM,EAAE,yCAAyC,CAAC,CAAA;IACvG,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACxC,mDAAmD;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,yFAAyF;gBACzF,qEAAqE,CACtE,CAAA;QACH,CAAC;QACD,IAAI,CAAC,GAAG,IAAK,GAA0B,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAA;QACtG,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,MAAM,EAAE,wCAAwC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;QACvH,CAAC;QACD,OAAO,CAAC,CAAC,MAAoB,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,CAAA;IAC7E,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,cAAc,CAAC,KAAY,EAAE,MAAmB;IACvD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAClD,iBAAiB,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IAE7E,IAAI,MAAkB,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,CAAA;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,iBAAiB,CACrB,OAAO,EACP,gBAAgB,EAChB,mBAAmB,SAAS,cAAc,WAAW,CAAC,MAAM,UAAU,EACtE,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC5B,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,WAAW,EAAE,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,KAAY,EAAE,MAAmB;QACpC,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACtC,CAAC;IACD,IAAI,CAAC,KAAY,EAAE,MAAmB;QACpC,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;IACD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAgB;CAC3E,CAAC,CAAA","sourcesContent":["/**\n * api shell — 抽壳:按面移除生成等厚薄壁(手写中立 op,Phase 5)\n *\n * 中立 op:L1 `shell(solid, facesToRemove, thickness, tolerance)` 在 occt 与\n * brepkit 两侧均有真实现(engine-method-map 实测 `dialect`)⇒ 走 `getBrepApi()`\n * (D12),不声明 engines(中立 op:实现只经 L1 契约面)。相对现状是\n * 能力升级——旧版是 occt 平台 op(arg-spec `engines:['occt']`,skip)。\n *\n * 选面口径(设计原则 4):`openFaces: FaceTopoRef[]`(`cad.faceRef` 产物),\n * 与 `fillet` 的 `EdgeTopoRef[]` / `extrude` 的 `upTo` 同族;不复刻旧\n * `Face[]` 句柄入参。解析在 op 内一处完成(`buildEdgeResolutionContext` 现场枚举\n * + `resolveTopoRef`)。\n *\n * 网格链(方案 2026-10-01 §4 Phase 4 / B3 批):`mesh:` 实现走网格后端,面按\n * **序号或 FaceTopoRef** 解析(近似拓扑没有 role 层),产物是新的网格零件。\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 } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { FaceTopoRef } from '../topology/naming'\nimport { resolveTopoRef, TopoRefError } from '../topology/naming'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { buildEdgeResolutionContext } from './topo-resolve'\nimport { meshKernelFailure, meshSolidBasicEntry, meshSolidProduct, resolveMeshFaces } from './internal/mesh-solid-op'\n\n/** 抽壳时移除的面选择器:精度链用 `FaceTopoRef`;网格链也可用 1 起序号。 */\nexport type ShellFaceSelector = number | FaceTopoRef\n\n/** `cad.shell` 参数。 */\nexport interface ShellParams {\n /** 抽壳时移除的面(FaceTopoRef[],`cad.faceRef` 产物;空数组 = 全封闭薄壁)。 */\n openFaces: ShellFaceSelector[]\n /** 壁厚(mm,>0,向内偏置)。 */\n thickness: number\n /** 容差(mm,可选;默认走内核约定值)。 */\n tolerance?: number\n}\n\n/** 参数共校验(两条路径共用;`openFaces` 为空数组合法 = 全封闭薄壁)。 */\nfunction assertShellParams(params: ShellParams): void {\n const { openFaces, thickness } = params ?? ({} as ShellParams)\n if (!Array.isArray(openFaces)) {\n throw new Error('E_SHELL_BAD_OPEN_FACES: shell.openFaces must be an array of FaceTopoRef or ordinals')\n }\n if (typeof thickness !== 'number' || !Number.isFinite(thickness) || thickness <= 0) {\n throw new Error('E_SHELL_BAD_THICKNESS: shell.thickness must be a positive number')\n }\n}\n\n/** BREP 路径:解析面引用 → L1 shell → 收养。 */\nfunction shellBrep(input: Shape, params: ShellParams): Shape {\n const { openFaces, thickness, tolerance } = params\n assertShellParams(params)\n const kernel = getBrepApi()\n const solid = brepOf(input) as BrepHandle | undefined\n if (!solid) throw new Error('E_SHELL_NO_BREP: shell input is not BREP')\n\n const ctx = buildEdgeResolutionContext(kernel, input as object)\n if (!ctx) throw new TopoRefError('E_TOPO_NOT_FOUND', 'face', 'shell: input has no BREP naming context')\n const faceHandles = openFaces.map((ref) => {\n // 精度链不开序号口子:BREP 的面身份是 `(origin, role)`,序号只是本次枚举序。\n if (typeof ref === 'number') {\n throw new Error(\n 'E_SHELL_BAD_OPEN_FACES: an ordinal face selector is only available on the mesh chain — ' +\n 'a precision-chain face is identified by its role line (cad.faceRef)',\n )\n }\n if (!ref || (ref as { kind?: unknown }).kind !== 'face') {\n throw new Error('E_SHELL_BAD_OPEN_FACES: every openFaces entry must be a FaceTopoRef (cad.faceRef)')\n }\n const r = resolveTopoRef(ref, ctx)\n if (r.handle === undefined) {\n throw new TopoRefError('E_TOPO_NOT_FOUND', 'face', `shell: face resolved without handle (${ref.origin}/${ref.role})`)\n }\n return r.handle as BrepHandle\n })\n\n const result = kernel.shell(solid, faceHandles, thickness, tolerance ?? 1e-6)\n return fromBrep(solidToShape(kernel, result), { solid: result })\n}\n\n/**\n * 网格实体路径:按序号或几何选出要开口的面,交网格后端抽壳。\n *\n * 与 BREP 路径同一条 L1 契约面(`shell(solid, faces, thickness, tolerance)`),\n * 差别只在选面方式:近似拓扑没有 role 层,面靠**序号**(拓扑 `faces` 数组下标 + 1)\n * 或 `FaceTopoRef` 的几何匹配(法向/中心/面积)指认。产物是新网格零件,\n * 近似拓扑由 `meshSolidProduct` 重建。\n *\n * @param input - the mesh-solid input.\n * @param params - the shell parameters.\n * @returns the shelled mesh solid as a new mesh part.\n */\nfunction shellMeshSolid(input: Shape, params: ShellParams): Shape {\n const { openFaces, thickness, tolerance } = params\n assertShellParams(params)\n const entry = meshSolidBasicEntry(input, 'shell')\n const faceHandles = resolveMeshFaces(entry.kernel, input, openFaces, 'shell')\n\n let result: BrepHandle\n try {\n result = entry.kernel.shell(entry.solid, faceHandles, thickness, tolerance ?? 1e-6)\n } catch (cause) {\n throw meshKernelFailure(\n 'shell',\n 'E_SHELL_FAILED',\n `shell(thickness=${thickness}) removing ${faceHandles.length} face(s)`,\n cause,\n )\n }\n return meshSolidProduct(entry, result)\n}\n\n/**\n * 抽壳:移除指定面并把余下面偏置成等厚薄壁。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name shell\n * @note 中立 op:L1 shell 两引擎同实现。`openFaces` 为空数组时生成全封闭薄壁。\n * 精度链按 role 线路选面(`cad.faceRef`);网格链按序号或几何选面——网格零件\n * 没有 role 层,序号是唯一无歧义的指认方式。\n * @returns Shape 抽壳后的薄壁体。\n * @param input - 目标几何。type:Shape required:true\n * @param params.openFaces - 要移除的面(FaceTopoRef[],cad.faceRef 产物;网格链可用 1 起序号)。type:FaceTopoRef[] required:true\n * @param params.thickness - 壁厚(mm,>0)。type:number required:true\n * @param params.tolerance - 容差(mm)。type:number required:false\n * @example\n * const sh = await cad.shell(part0, { openFaces: [cad.faceRef(part0, 1)], thickness: 2 })\n * const sm = await cad.shell(meshPart, { openFaces: [4], thickness: 2 })\n */\nexport const shell = defineOp({\n capabilities: ['directEdit'],\n meshEngines: ['brepkit'],\n mesh(input: Shape, params: ShellParams) {\n return shellMeshSolid(input, params)\n },\n brep(input: Shape, params: ShellParams) {\n return shellBrep(input, params)\n },\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n"]}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * api solidFromFaces — 面集一次成型为实体(手写平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 本文件 import occt-kernel(`getOcctKernel().buildSolidFromFaces`):
5
+ * 该原生方法在 L1 契约 `brep/engine/primitives.ts` 里**没有对应成员**(L1 只有
6
+ * `sewAndSolidify`),故 op 声明 `engines: ['occt']`(D11)。守卫 ① 要求平台
7
+ * import 自证身份(本头注);调用方 op 声明 `engines` 由守卫 ② 校验。
8
+ *
9
+ * 与 `sewAndSolidify` / `sew` 的分工(方案 §4.5 去重表):
10
+ * - `sewAndSolidify(faces, {tolerance})` — **中立** op,走 L1 契约的
11
+ * 「面 → 缝合 → 固化」两步链,两引擎(occt / brepkit)同实现;
12
+ * - `solidFromFaces(faces, {tolerance})` — **平台** op,直调 occt 原生一次性
13
+ * 构造器 `buildSolidFromFaces`(`BRepBuilderAPI_*` 单次成型,自带缝合容差)。
14
+ *
15
+ * 二者并存不是双轨:一个是引擎中立的可切换路径,一个是 occt 原生的一次成型
16
+ * 入口(真值来源是 occt-wasm 的两个不同内核方法)。新增 op 前已对照 §4.5 表。
17
+ *
18
+ * 产物形态:实体(solid),经 `fromBrep` 收养;面演化由内核给出 ⇒
19
+ * `naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } }`(同 sew 族口径)。
20
+ */
21
+ import type { Shape } from '../mesh/types.js';
22
+ /** `cad.solidFromFaces` 参数。 */
23
+ export interface SolidFromFacesParams {
24
+ /** 缝合容差(mm,可选;缺省 = occt 原生默认 1e-6)。 */
25
+ tolerance?: number;
26
+ }
27
+ /**
28
+ * 面集一次成型为实体:把一组共享边界的面缝合成一个实体(occt 原生一次构造)。
29
+ * @group 特征
30
+ * @inputs 1
31
+ * @async true
32
+ * @qual ok
33
+ * @name solidFromFaces
34
+ * @note 平台 op:仅 occt 引擎(原生 buildSolidFromFaces,L1 契约无对应成员)。
35
+ * 非 occt 引擎执行前报错;brep_mock 不拦截。中立路径见 `sewAndSolidify`。
36
+ * @returns Shape 缝合固化后的实体。
37
+ * @param faces - 面集合(共享边界、构成闭合壳)。type:Shape[] required:true
38
+ * @param params.tolerance - 缝合容差(mm,默认 occt 1e-6)。type:number required:false
39
+ * @example
40
+ * const solid = await cad.solidFromFaces([f0, f1, f2, f3, f4, f5])
41
+ */
42
+ export declare const solidFromFaces: ((faces: Shape[], params?: SolidFromFacesParams | undefined) => Promise<Shape>) & {
43
+ __faijs__dualOp?: import("../define-op.js").DualOpMeta;
44
+ };
45
+ //# sourceMappingURL=solid-from-faces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-from-faces.d.ts","sourceRoot":"","sources":["../../src/api/solid-from-faces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,+BAA+B;AAC/B,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA0BD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc;;CAQzB,CAAA"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * api solidFromFaces — 面集一次成型为实体(手写平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 本文件 import occt-kernel(`getOcctKernel().buildSolidFromFaces`):
5
+ * 该原生方法在 L1 契约 `brep/engine/primitives.ts` 里**没有对应成员**(L1 只有
6
+ * `sewAndSolidify`),故 op 声明 `engines: ['occt']`(D11)。守卫 ① 要求平台
7
+ * import 自证身份(本头注);调用方 op 声明 `engines` 由守卫 ② 校验。
8
+ *
9
+ * 与 `sewAndSolidify` / `sew` 的分工(方案 §4.5 去重表):
10
+ * - `sewAndSolidify(faces, {tolerance})` — **中立** op,走 L1 契约的
11
+ * 「面 → 缝合 → 固化」两步链,两引擎(occt / brepkit)同实现;
12
+ * - `solidFromFaces(faces, {tolerance})` — **平台** op,直调 occt 原生一次性
13
+ * 构造器 `buildSolidFromFaces`(`BRepBuilderAPI_*` 单次成型,自带缝合容差)。
14
+ *
15
+ * 二者并存不是双轨:一个是引擎中立的可切换路径,一个是 occt 原生的一次成型
16
+ * 入口(真值来源是 occt-wasm 的两个不同内核方法)。新增 op 前已对照 §4.5 表。
17
+ *
18
+ * 产物形态:实体(solid),经 `fromBrep` 收养;面演化由内核给出 ⇒
19
+ * `naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } }`(同 sew 族口径)。
20
+ */
21
+ import { solidToShape } from '../brep/brep-ops.js';
22
+ import { getBrepApi } from '../brep/handle-bridge.js';
23
+ import { brepOf, fromBrep } from '../shape.js';
24
+ import { defineOp } from '../sdk.js';
25
+ import { getOcctKernel } from '../occt-kernel/occtKernel.js';
26
+ /** BREP 路径:借入面句柄 → occt 原生 buildSolidFromFaces(一次成型)→ fromBrep 收养。 */
27
+ function solidFromFacesBrep(faces, params) {
28
+ if (!Array.isArray(faces) || faces.length === 0) {
29
+ throw new Error('E_SOLID_FROM_FACES_NO_FACES: solidFromFaces requires a non-empty array of faces');
30
+ }
31
+ const tolerance = params?.tolerance;
32
+ if (tolerance !== undefined && (typeof tolerance !== 'number' || !(tolerance > 0))) {
33
+ throw new Error('E_SOLID_FROM_FACES_BAD_TOLERANCE: tolerance must be a positive number');
34
+ }
35
+ const handles = faces.map((s) => {
36
+ const h = brepOf(s);
37
+ if (!h)
38
+ throw new Error('E_SOLID_FROM_FACES_NO_BREP: solidFromFaces input shape is not BREP');
39
+ return h;
40
+ });
41
+ const kernel = getBrepApi();
42
+ const occt = getOcctKernel();
43
+ const handle = (tolerance === undefined
44
+ ? occt.buildSolidFromFaces(handles)
45
+ : occt.buildSolidFromFaces(handles, tolerance));
46
+ return fromBrep(solidToShape(kernel, handle), { solid: handle });
47
+ }
48
+ /**
49
+ * 面集一次成型为实体:把一组共享边界的面缝合成一个实体(occt 原生一次构造)。
50
+ * @group 特征
51
+ * @inputs 1
52
+ * @async true
53
+ * @qual ok
54
+ * @name solidFromFaces
55
+ * @note 平台 op:仅 occt 引擎(原生 buildSolidFromFaces,L1 契约无对应成员)。
56
+ * 非 occt 引擎执行前报错;brep_mock 不拦截。中立路径见 `sewAndSolidify`。
57
+ * @returns Shape 缝合固化后的实体。
58
+ * @param faces - 面集合(共享边界、构成闭合壳)。type:Shape[] required:true
59
+ * @param params.tolerance - 缝合容差(mm,默认 occt 1e-6)。type:number required:false
60
+ * @example
61
+ * const solid = await cad.solidFromFaces([f0, f1, f2, f3, f4, f5])
62
+ */
63
+ export const solidFromFaces = defineOp({
64
+ name: 'solidFromFaces',
65
+ paramDims: { 'params.tolerance': 'length' },
66
+ brep(faces, params) {
67
+ return solidFromFacesBrep(faces, params);
68
+ },
69
+ engines: ['occt'],
70
+ naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } },
71
+ });
72
+ //# sourceMappingURL=solid-from-faces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-from-faces.js","sourceRoot":"","sources":["../../src/api/solid-from-faces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAQzD,sEAAsE;AACtE,SAAS,kBAAkB,CAAC,KAAc,EAAE,MAA6B;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;IACpG,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,CAAA;IACnC,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAA2B,CAAA;QAC7C,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QAC7F,OAAO,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,CACb,SAAS,KAAK,SAAS;QACrB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAgB,CAAC;QAC5C,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAgB,EAAE,SAAS,CAAC,CACjC,CAAA;IAC1B,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,gBAAgB;IACtB,SAAS,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE;IAC3C,IAAI,CAAC,KAAc,EAAE,MAA6B;QAChD,OAAO,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAgB;CAC3E,CAAC,CAAA","sourcesContent":["/**\n * api solidFromFaces — 面集一次成型为实体(手写平台 op engines:['occt'])\n *\n * @platform occt — 本文件 import occt-kernel(`getOcctKernel().buildSolidFromFaces`):\n * 该原生方法在 L1 契约 `brep/engine/primitives.ts` 里**没有对应成员**(L1 只有\n * `sewAndSolidify`),故 op 声明 `engines: ['occt']`(D11)。守卫 ① 要求平台\n * import 自证身份(本头注);调用方 op 声明 `engines` 由守卫 ② 校验。\n *\n * 与 `sewAndSolidify` / `sew` 的分工(方案 §4.5 去重表):\n * - `sewAndSolidify(faces, {tolerance})` — **中立** op,走 L1 契约的\n * 「面 → 缝合 → 固化」两步链,两引擎(occt / brepkit)同实现;\n * - `solidFromFaces(faces, {tolerance})` — **平台** op,直调 occt 原生一次性\n * 构造器 `buildSolidFromFaces`(`BRepBuilderAPI_*` 单次成型,自带缝合容差)。\n *\n * 二者并存不是双轨:一个是引擎中立的可切换路径,一个是 occt 原生的一次成型\n * 入口(真值来源是 occt-wasm 的两个不同内核方法)。新增 op 前已对照 §4.5 表。\n *\n * 产物形态:实体(solid),经 `fromBrep` 收养;面演化由内核给出 ⇒\n * `naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } }`(同 sew 族口径)。\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 } from '../shape'\nimport { defineOp } from '../sdk'\nimport type { Provenance } from '../topology/naming/lineage'\nimport { getOcctKernel } from '../occt-kernel/occtKernel'\n\n/** `cad.solidFromFaces` 参数。 */\nexport interface SolidFromFacesParams {\n /** 缝合容差(mm,可选;缺省 = occt 原生默认 1e-6)。 */\n tolerance?: number\n}\n\n/** BREP 路径:借入面句柄 → occt 原生 buildSolidFromFaces(一次成型)→ fromBrep 收养。 */\nfunction solidFromFacesBrep(faces: Shape[], params?: SolidFromFacesParams): Shape {\n if (!Array.isArray(faces) || faces.length === 0) {\n throw new Error('E_SOLID_FROM_FACES_NO_FACES: solidFromFaces requires a non-empty array of faces')\n }\n const tolerance = params?.tolerance\n if (tolerance !== undefined && (typeof tolerance !== 'number' || !(tolerance > 0))) {\n throw new Error('E_SOLID_FROM_FACES_BAD_TOLERANCE: tolerance must be a positive number')\n }\n const handles = faces.map((s) => {\n const h = brepOf(s) as BrepHandle | undefined\n if (!h) throw new Error('E_SOLID_FROM_FACES_NO_BREP: solidFromFaces input shape is not BREP')\n return h\n })\n const kernel = getBrepApi()\n const occt = getOcctKernel()\n const handle = (\n tolerance === undefined\n ? occt.buildSolidFromFaces(handles as never)\n : occt.buildSolidFromFaces(handles as never, tolerance)\n ) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, handle), { solid: handle })\n}\n\n/**\n * 面集一次成型为实体:把一组共享边界的面缝合成一个实体(occt 原生一次构造)。\n * @group 特征\n * @inputs 1\n * @async true\n * @qual ok\n * @name solidFromFaces\n * @note 平台 op:仅 occt 引擎(原生 buildSolidFromFaces,L1 契约无对应成员)。\n * 非 occt 引擎执行前报错;brep_mock 不拦截。中立路径见 `sewAndSolidify`。\n * @returns Shape 缝合固化后的实体。\n * @param faces - 面集合(共享边界、构成闭合壳)。type:Shape[] required:true\n * @param params.tolerance - 缝合容差(mm,默认 occt 1e-6)。type:number required:false\n * @example\n * const solid = await cad.solidFromFaces([f0, f1, f2, f3, f4, f5])\n */\nexport const solidFromFaces = defineOp({\n name: 'solidFromFaces',\n paramDims: { 'params.tolerance': 'length' },\n brep(faces: Shape[], params?: SolidFromFacesParams) {\n return solidFromFacesBrep(faces, params)\n },\n engines: ['occt'],\n naming: { kind: 'kernel', newFaces: { via: 'byAdjacency' } } as Provenance,\n})\n"]}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * api solid-offset — 实体与偏置族(S4 剩余:draftPrism / pipe,平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 本目录 import occt-kernel:`draftPrism`(拔模棱柱)与 `pipe`
5
+ * (沿脊柱的管)直调 occt 原生(occt-wasm 原生有)。这两个原生方法**不在** L1 契约
6
+ * `BrepEngineApi` 里(L1 只有 `offset` / `sweepPipeShell` 等,见
7
+ * brep/engine/primitives.ts)⇒ 平台 op:defineOp 声明 `engines: ['occt']`(D11)。
8
+ *
9
+ * 方案落点:docs/plans/2026-10-07-occt-wasm-op-enablement-plan.md §3.4.4
10
+ * (该族 5 项中 `offsetWire2d` / `buildSolidFromFaces` / `halfSpace` 已由 S3 落地)。
11
+ * 与既有 op 的边界(§4.5 去重表):
12
+ * - `pipe` vs `sweep`:pipe = `BRepOffsetAPI_MakePipe`(沿脊柱的管,单截面裸管线);
13
+ * sweep = `sweepPipeShell` / `simplePipe`(截面扫掠,带 Frenet/平滑选项);
14
+ * - `draftPrism` vs `extrude`:前者带拔模角(上下截面渐变),后者平行拔出;
15
+ * - `draftPrism` vs `draft`:draft 对已有实体面加拔模斜度;draftPrism 是拔模挤出。
16
+ *
17
+ * 角度约定(实测钉住,见 test/api/occt-s4-solid-offset.test.ts):occt 原生
18
+ * `draftPrism` 的形参名即 `angleDeg`(**度**,facade 内部自行换算弧度)——脚本面
19
+ * 直传度,不做二次换算。
20
+ */
21
+ import type { Shape } from '../../mesh/types.js';
22
+ type Vec3 = [number, number, number];
23
+ /**
24
+ * 拔模棱柱:把平面基底(face 或 wire)沿方向挤出,并施加拔模角(上下截面渐变)。
25
+ * @group 创建
26
+ * @inputs 0
27
+ * @async false
28
+ * @qual ok
29
+ * @name draftPrism
30
+ * @note 平台 op:仅 occt 引擎(原生 draftPrism,形参即 angleDeg——角度单位是**度**,
31
+ * 原生内部换算)。角度为 0 时等价普通挤出。
32
+ * @returns Shape 拔模挤出体。
33
+ * @param base - 平面基底(face 或闭合 wire)。type:Shape required:true
34
+ * @param direction - 挤出方向 [dx,dy,dz](非零;长度即挤出距离)。type:Vec3 required:true
35
+ * @param angleDeg - 拔模角(度)。type:number required:true
36
+ * @example
37
+ * const s = cad.draftPrism(squareFace, [0, 0, 10], 5)
38
+ */
39
+ export declare const draftPrism: ((base: Shape, direction: Vec3, angleDeg: number) => Promise<Shape>) & {
40
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
41
+ };
42
+ /**
43
+ * 沿脊柱扫出管:把截面沿脊柱 wire 扫掠(`BRepOffsetAPI_MakePipe` 裸管线;
44
+ * 带过渡/方向控制的扫掠见 `sweep`)。
45
+ *
46
+ * 产物类型随截面类型(实测钉住,test/api/occt-s4-solid-offset.test.ts A3/A4):
47
+ * **截面 face → 实体;截面 wire/edge → 壳(管面,体积无意义)**。要实体管,
48
+ * 喂面截面(如 `cad.profile` 的圆盘轮廓)。
49
+ * @group 创建
50
+ * @inputs 2
51
+ * @async false
52
+ * @qual ok
53
+ * @name pipe
54
+ * @note 平台 op:仅 occt 引擎(原生 pipe,L1 契约无对应成员)。脊柱须为 wire。
55
+ * 非 occt 引擎执行前报错;brep_mock 不拦截。
56
+ * @returns Shape 扫出的管(截面 face → 实体;wire/edge → 壳)。
57
+ * @param profile - 截面(face → 实体;wire/edge → 壳)。
58
+ * type:Shape required:true
59
+ * @param spine - 脊柱 wire。type:Shape required:true
60
+ * @example
61
+ * const tube = cad.pipe(diskFace, spineWire)
62
+ */
63
+ export declare const pipe: ((profile: Shape, spine: Shape) => Promise<Shape>) & {
64
+ __faijs__dualOp?: import("../../define-op.js").DualOpMeta;
65
+ };
66
+ export {};
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/solid-offset/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAS7C,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAsCpC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU;;CAWrB,CAAA;AAuBF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,IAAI;;CAUf,CAAA"}