@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,124 @@
1
+ /**
2
+ * Pure vector operations on Vec3 tuples.
3
+ *
4
+ * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs
5
+ * `src/core/vecOps.ts`(同源复制,签名不变);import 来源改为 compat 面
6
+ * 第一方 `types.ts`。
7
+ */
8
+ import type { Vec3 } from './types.js';
9
+ /** Add two 3D vectors component-wise.
10
+ *
11
+ * @param a - First vector.
12
+ * @param b - Second vector.
13
+ * @returns The component-wise sum `a + b`.
14
+ */
15
+ export declare function vecAdd(a: Vec3, b: Vec3): Vec3;
16
+ /** Subtract vector `b` from vector `a` component-wise.
17
+ *
18
+ * @param a - Vector to subtract from.
19
+ * @param b - Vector to subtract.
20
+ * @returns The component-wise difference `a - b`.
21
+ */
22
+ export declare function vecSub(a: Vec3, b: Vec3): Vec3;
23
+ /** Multiply each component of a 3D vector by a scalar.
24
+ *
25
+ * @param v - Vector to scale.
26
+ * @param s - Scalar multiplier.
27
+ * @returns The scaled vector.
28
+ */
29
+ export declare function vecScale(v: Vec3, s: number): Vec3;
30
+ /** Negate all components of a 3D vector.
31
+ *
32
+ * @param v - Vector to negate.
33
+ * @returns The negated vector `-v`.
34
+ */
35
+ export declare function vecNegate(v: Vec3): Vec3;
36
+ /** Compute the dot product of two 3D vectors.
37
+ *
38
+ * @param a - First vector.
39
+ * @param b - Second vector.
40
+ * @returns The scalar dot product `a · b`.
41
+ */
42
+ export declare function vecDot(a: Vec3, b: Vec3): number;
43
+ /** Compute the cross product of two 3D vectors.
44
+ *
45
+ * @param a - First vector.
46
+ * @param b - Second vector.
47
+ * @returns The cross product `a × b`.
48
+ */
49
+ export declare function vecCross(a: Vec3, b: Vec3): Vec3;
50
+ /** Compute the Euclidean length of a 3D vector.
51
+ *
52
+ * @param v - Vector to measure.
53
+ * @returns The Euclidean length of `v`.
54
+ */
55
+ export declare function vecLength(v: Vec3): number;
56
+ /** Compute the squared length of a 3D vector (avoids a sqrt).
57
+ *
58
+ * @param v - Vector to measure.
59
+ * @returns The squared Euclidean length of `v`.
60
+ */
61
+ export declare function vecLengthSq(v: Vec3): number;
62
+ /** Compute the Euclidean distance between two 3D points.
63
+ *
64
+ * @param a - First point.
65
+ * @param b - Second point.
66
+ * @returns The distance `|a - b|`.
67
+ */
68
+ export declare function vecDistance(a: Vec3, b: Vec3): number;
69
+ /** Return a unit-length vector in the same direction, or `[0,0,0]` for near-zero input.
70
+ *
71
+ * @param v - Vector to normalize.
72
+ * @returns A unit-length vector in the same direction, or `[0,0,0]`.
73
+ */
74
+ export declare function vecNormalize(v: Vec3): Vec3;
75
+ /**
76
+ * Test whether two 3D vectors are approximately equal.
77
+ *
78
+ * @param a - First vector.
79
+ * @param b - Second vector.
80
+ * @param tolerance - Per-component absolute tolerance.
81
+ * @returns True if the vectors are approximately equal.
82
+ * @default tolerance `1e-5`
83
+ */
84
+ export declare function vecEquals(a: Vec3, b: Vec3, tolerance?: number): boolean;
85
+ /**
86
+ * Test whether a 3D vector is approximately zero-length.
87
+ *
88
+ * @param v - Vector to test.
89
+ * @param tolerance - Length threshold below which the vector is considered zero.
90
+ * @returns True if the vector is approximately zero-length.
91
+ * @default tolerance `1e-10`
92
+ */
93
+ export declare function vecIsZero(v: Vec3, tolerance?: number): boolean;
94
+ /**
95
+ * Compute the unsigned angle between two 3D vectors in **radians**.
96
+ *
97
+ * @param a - First vector.
98
+ * @param b - Second vector.
99
+ * @returns Angle in `[0, PI]`, or `0` if either vector is zero-length.
100
+ */
101
+ export declare function vecAngle(a: Vec3, b: Vec3): number;
102
+ /** Project vector onto plane defined by its normal
103
+ *
104
+ * @param v - Vector to project.
105
+ * @param planeOrigin - A point on the plane.
106
+ * @param planeNormal - Plane normal (need not be unit length).
107
+ * @returns The projection of `v` onto the plane.
108
+ */
109
+ export declare function vecProjectToPlane(v: Vec3, planeOrigin: Vec3, planeNormal: Vec3): Vec3;
110
+ /** Rotate vector around an axis by angle (radians)
111
+ *
112
+ * @param v - Vector to rotate.
113
+ * @param axis - Rotation axis (need not be unit length).
114
+ * @param angleRad - Rotation angle in radians.
115
+ * @returns The rotated vector.
116
+ */
117
+ export declare function vecRotate(v: Vec3, axis: Vec3, angleRad: number): Vec3;
118
+ /** Format a Vec3 as a human-readable string rounded to 3 decimal places.
119
+ *
120
+ * @param v - Vector to format.
121
+ * @returns A human-readable representation of `v`.
122
+ */
123
+ export declare function vecRepr(v: Vec3): string;
124
+ //# sourceMappingURL=vecOps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vecOps.d.ts","sourceRoot":"","sources":["../../../src/api/geom-types/vecOps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAMpC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAEvC;AAMD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAE/C;AAMD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAE3C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAEpD;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAI1C;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,SAAO,GAAG,OAAO,CAMrE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,SAAQ,GAAG,OAAO,CAE7D;AAMD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAOjD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,IAAI,CAMrF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAYrE;AAQD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAEvC"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Pure vector operations on Vec3 tuples.
3
+ *
4
+ * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs
5
+ * `src/core/vecOps.ts`(同源复制,签名不变);import 来源改为 compat 面
6
+ * 第一方 `types.ts`。
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Arithmetic
10
+ // ---------------------------------------------------------------------------
11
+ /** Add two 3D vectors component-wise.
12
+ *
13
+ * @param a - First vector.
14
+ * @param b - Second vector.
15
+ * @returns The component-wise sum `a + b`.
16
+ */
17
+ export function vecAdd(a, b) {
18
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
19
+ }
20
+ /** Subtract vector `b` from vector `a` component-wise.
21
+ *
22
+ * @param a - Vector to subtract from.
23
+ * @param b - Vector to subtract.
24
+ * @returns The component-wise difference `a - b`.
25
+ */
26
+ export function vecSub(a, b) {
27
+ return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
28
+ }
29
+ /** Multiply each component of a 3D vector by a scalar.
30
+ *
31
+ * @param v - Vector to scale.
32
+ * @param s - Scalar multiplier.
33
+ * @returns The scaled vector.
34
+ */
35
+ export function vecScale(v, s) {
36
+ return [v[0] * s, v[1] * s, v[2] * s];
37
+ }
38
+ /** Negate all components of a 3D vector.
39
+ *
40
+ * @param v - Vector to negate.
41
+ * @returns The negated vector `-v`.
42
+ */
43
+ export function vecNegate(v) {
44
+ return [-v[0], -v[1], -v[2]];
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // Products
48
+ // ---------------------------------------------------------------------------
49
+ /** Compute the dot product of two 3D vectors.
50
+ *
51
+ * @param a - First vector.
52
+ * @param b - Second vector.
53
+ * @returns The scalar dot product `a · b`.
54
+ */
55
+ export function vecDot(a, b) {
56
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
57
+ }
58
+ /** Compute the cross product of two 3D vectors.
59
+ *
60
+ * @param a - First vector.
61
+ * @param b - Second vector.
62
+ * @returns The cross product `a × b`.
63
+ */
64
+ export function vecCross(a, b) {
65
+ return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Length / distance
69
+ // ---------------------------------------------------------------------------
70
+ /** Compute the Euclidean length of a 3D vector.
71
+ *
72
+ * @param v - Vector to measure.
73
+ * @returns The Euclidean length of `v`.
74
+ */
75
+ export function vecLength(v) {
76
+ return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
77
+ }
78
+ /** Compute the squared length of a 3D vector (avoids a sqrt).
79
+ *
80
+ * @param v - Vector to measure.
81
+ * @returns The squared Euclidean length of `v`.
82
+ */
83
+ export function vecLengthSq(v) {
84
+ return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
85
+ }
86
+ /** Compute the Euclidean distance between two 3D points.
87
+ *
88
+ * @param a - First point.
89
+ * @param b - Second point.
90
+ * @returns The distance `|a - b|`.
91
+ */
92
+ export function vecDistance(a, b) {
93
+ return vecLength(vecSub(a, b));
94
+ }
95
+ // ---------------------------------------------------------------------------
96
+ // Normalization
97
+ // ---------------------------------------------------------------------------
98
+ /** Return a unit-length vector in the same direction, or `[0,0,0]` for near-zero input.
99
+ *
100
+ * @param v - Vector to normalize.
101
+ * @returns A unit-length vector in the same direction, or `[0,0,0]`.
102
+ */
103
+ export function vecNormalize(v) {
104
+ const len = vecLength(v);
105
+ if (len < 1e-10)
106
+ return [0, 0, 0];
107
+ return [v[0] / len, v[1] / len, v[2] / len];
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Comparison
111
+ // ---------------------------------------------------------------------------
112
+ /**
113
+ * Test whether two 3D vectors are approximately equal.
114
+ *
115
+ * @param a - First vector.
116
+ * @param b - Second vector.
117
+ * @param tolerance - Per-component absolute tolerance.
118
+ * @returns True if the vectors are approximately equal.
119
+ * @default tolerance `1e-5`
120
+ */
121
+ export function vecEquals(a, b, tolerance = 1e-5) {
122
+ return (Math.abs(a[0] - b[0]) < tolerance &&
123
+ Math.abs(a[1] - b[1]) < tolerance &&
124
+ Math.abs(a[2] - b[2]) < tolerance);
125
+ }
126
+ /**
127
+ * Test whether a 3D vector is approximately zero-length.
128
+ *
129
+ * @param v - Vector to test.
130
+ * @param tolerance - Length threshold below which the vector is considered zero.
131
+ * @returns True if the vector is approximately zero-length.
132
+ * @default tolerance `1e-10`
133
+ */
134
+ export function vecIsZero(v, tolerance = 1e-10) {
135
+ return vecLengthSq(v) < tolerance * tolerance;
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Geometry
139
+ // ---------------------------------------------------------------------------
140
+ /**
141
+ * Compute the unsigned angle between two 3D vectors in **radians**.
142
+ *
143
+ * @param a - First vector.
144
+ * @param b - Second vector.
145
+ * @returns Angle in `[0, PI]`, or `0` if either vector is zero-length.
146
+ */
147
+ export function vecAngle(a, b) {
148
+ const dot = vecDot(a, b);
149
+ const lenA = vecLength(a);
150
+ const lenB = vecLength(b);
151
+ if (lenA < 1e-10 || lenB < 1e-10)
152
+ return 0;
153
+ const cosAngle = Math.max(-1, Math.min(1, dot / (lenA * lenB)));
154
+ return Math.acos(cosAngle);
155
+ }
156
+ /** Project vector onto plane defined by its normal
157
+ *
158
+ * @param v - Vector to project.
159
+ * @param planeOrigin - A point on the plane.
160
+ * @param planeNormal - Plane normal (need not be unit length).
161
+ * @returns The projection of `v` onto the plane.
162
+ */
163
+ export function vecProjectToPlane(v, planeOrigin, planeNormal) {
164
+ const relative = vecSub(v, planeOrigin);
165
+ const normalLen = vecLengthSq(planeNormal);
166
+ if (normalLen < 1e-20)
167
+ return v;
168
+ const projection = vecScale(planeNormal, vecDot(relative, planeNormal) / normalLen);
169
+ return vecSub(v, projection);
170
+ }
171
+ /** Rotate vector around an axis by angle (radians)
172
+ *
173
+ * @param v - Vector to rotate.
174
+ * @param axis - Rotation axis (need not be unit length).
175
+ * @param angleRad - Rotation angle in radians.
176
+ * @returns The rotated vector.
177
+ */
178
+ export function vecRotate(v, axis, angleRad) {
179
+ const n = vecNormalize(axis);
180
+ const cos = Math.cos(angleRad);
181
+ const sin = Math.sin(angleRad);
182
+ const dot = vecDot(v, n);
183
+ const cross = vecCross(n, v);
184
+ return [
185
+ v[0] * cos + cross[0] * sin + n[0] * dot * (1 - cos),
186
+ v[1] * cos + cross[1] * sin + n[1] * dot * (1 - cos),
187
+ v[2] * cos + cross[2] * sin + n[2] * dot * (1 - cos),
188
+ ];
189
+ }
190
+ // ---------------------------------------------------------------------------
191
+ // Formatting
192
+ // ---------------------------------------------------------------------------
193
+ const round3 = (v) => Math.round(v * 1000) / 1000;
194
+ /** Format a Vec3 as a human-readable string rounded to 3 decimal places.
195
+ *
196
+ * @param v - Vector to format.
197
+ * @returns A human-readable representation of `v`.
198
+ */
199
+ export function vecRepr(v) {
200
+ return `x: ${round3(v[0])}, y: ${round3(v[1])}, z: ${round3(v[2])}`;
201
+ }
202
+ //# sourceMappingURL=vecOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vecOps.js","sourceRoot":"","sources":["../../../src/api/geom-types/vecOps.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pure vector operations on Vec3 tuples.\n *\n * 第一方模块(2026-09-25 core-decouple Phase 1):复制自 brepjs\n * `src/core/vecOps.ts`(同源复制,签名不变);import 来源改为 compat 面\n * 第一方 `types.ts`。\n */\n\nimport type { Vec3 } from './types';\n\n// ---------------------------------------------------------------------------\n// Arithmetic\n// ---------------------------------------------------------------------------\n\n/** Add two 3D vectors component-wise.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The component-wise sum `a + b`.\n */\nexport function vecAdd(a: Vec3, b: Vec3): Vec3 {\n return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];\n}\n\n/** Subtract vector `b` from vector `a` component-wise.\n *\n * @param a - Vector to subtract from.\n * @param b - Vector to subtract.\n * @returns The component-wise difference `a - b`.\n */\nexport function vecSub(a: Vec3, b: Vec3): Vec3 {\n return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];\n}\n\n/** Multiply each component of a 3D vector by a scalar.\n *\n * @param v - Vector to scale.\n * @param s - Scalar multiplier.\n * @returns The scaled vector.\n */\nexport function vecScale(v: Vec3, s: number): Vec3 {\n return [v[0] * s, v[1] * s, v[2] * s];\n}\n\n/** Negate all components of a 3D vector.\n *\n * @param v - Vector to negate.\n * @returns The negated vector `-v`.\n */\nexport function vecNegate(v: Vec3): Vec3 {\n return [-v[0], -v[1], -v[2]];\n}\n\n// ---------------------------------------------------------------------------\n// Products\n// ---------------------------------------------------------------------------\n\n/** Compute the dot product of two 3D vectors.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The scalar dot product `a · b`.\n */\nexport function vecDot(a: Vec3, b: Vec3): number {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\n/** Compute the cross product of two 3D vectors.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns The cross product `a × b`.\n */\nexport function vecCross(a: Vec3, b: Vec3): Vec3 {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// ---------------------------------------------------------------------------\n// Length / distance\n// ---------------------------------------------------------------------------\n\n/** Compute the Euclidean length of a 3D vector.\n *\n * @param v - Vector to measure.\n * @returns The Euclidean length of `v`.\n */\nexport function vecLength(v: Vec3): number {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n}\n\n/** Compute the squared length of a 3D vector (avoids a sqrt).\n *\n * @param v - Vector to measure.\n * @returns The squared Euclidean length of `v`.\n */\nexport function vecLengthSq(v: Vec3): number {\n return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];\n}\n\n/** Compute the Euclidean distance between two 3D points.\n *\n * @param a - First point.\n * @param b - Second point.\n * @returns The distance `|a - b|`.\n */\nexport function vecDistance(a: Vec3, b: Vec3): number {\n return vecLength(vecSub(a, b));\n}\n\n// ---------------------------------------------------------------------------\n// Normalization\n// ---------------------------------------------------------------------------\n\n/** Return a unit-length vector in the same direction, or `[0,0,0]` for near-zero input.\n *\n * @param v - Vector to normalize.\n * @returns A unit-length vector in the same direction, or `[0,0,0]`.\n */\nexport function vecNormalize(v: Vec3): Vec3 {\n const len = vecLength(v);\n if (len < 1e-10) return [0, 0, 0];\n return [v[0] / len, v[1] / len, v[2] / len];\n}\n\n// ---------------------------------------------------------------------------\n// Comparison\n// ---------------------------------------------------------------------------\n\n/**\n * Test whether two 3D vectors are approximately equal.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @param tolerance - Per-component absolute tolerance.\n * @returns True if the vectors are approximately equal.\n * @default tolerance `1e-5`\n */\nexport function vecEquals(a: Vec3, b: Vec3, tolerance = 1e-5): boolean {\n return (\n Math.abs(a[0] - b[0]) < tolerance &&\n Math.abs(a[1] - b[1]) < tolerance &&\n Math.abs(a[2] - b[2]) < tolerance\n );\n}\n\n/**\n * Test whether a 3D vector is approximately zero-length.\n *\n * @param v - Vector to test.\n * @param tolerance - Length threshold below which the vector is considered zero.\n * @returns True if the vector is approximately zero-length.\n * @default tolerance `1e-10`\n */\nexport function vecIsZero(v: Vec3, tolerance = 1e-10): boolean {\n return vecLengthSq(v) < tolerance * tolerance;\n}\n\n// ---------------------------------------------------------------------------\n// Geometry\n// ---------------------------------------------------------------------------\n\n/**\n * Compute the unsigned angle between two 3D vectors in **radians**.\n *\n * @param a - First vector.\n * @param b - Second vector.\n * @returns Angle in `[0, PI]`, or `0` if either vector is zero-length.\n */\nexport function vecAngle(a: Vec3, b: Vec3): number {\n const dot = vecDot(a, b);\n const lenA = vecLength(a);\n const lenB = vecLength(b);\n if (lenA < 1e-10 || lenB < 1e-10) return 0;\n const cosAngle = Math.max(-1, Math.min(1, dot / (lenA * lenB)));\n return Math.acos(cosAngle);\n}\n\n/** Project vector onto plane defined by its normal\n *\n * @param v - Vector to project.\n * @param planeOrigin - A point on the plane.\n * @param planeNormal - Plane normal (need not be unit length).\n * @returns The projection of `v` onto the plane.\n */\nexport function vecProjectToPlane(v: Vec3, planeOrigin: Vec3, planeNormal: Vec3): Vec3 {\n const relative = vecSub(v, planeOrigin);\n const normalLen = vecLengthSq(planeNormal);\n if (normalLen < 1e-20) return v;\n const projection = vecScale(planeNormal, vecDot(relative, planeNormal) / normalLen);\n return vecSub(v, projection);\n}\n\n/** Rotate vector around an axis by angle (radians)\n *\n * @param v - Vector to rotate.\n * @param axis - Rotation axis (need not be unit length).\n * @param angleRad - Rotation angle in radians.\n * @returns The rotated vector.\n */\nexport function vecRotate(v: Vec3, axis: Vec3, angleRad: number): Vec3 {\n const n = vecNormalize(axis);\n const cos = Math.cos(angleRad);\n const sin = Math.sin(angleRad);\n const dot = vecDot(v, n);\n const cross = vecCross(n, v);\n\n return [\n v[0] * cos + cross[0] * sin + n[0] * dot * (1 - cos),\n v[1] * cos + cross[1] * sin + n[1] * dot * (1 - cos),\n v[2] * cos + cross[2] * sin + n[2] * dot * (1 - cos),\n ];\n}\n\n// ---------------------------------------------------------------------------\n// Formatting\n// ---------------------------------------------------------------------------\n\nconst round3 = (v: number): number => Math.round(v * 1000) / 1000;\n\n/** Format a Vec3 as a human-readable string rounded to 3 decimal places.\n *\n * @param v - Vector to format.\n * @returns A human-readable representation of `v`.\n */\nexport function vecRepr(v: Vec3): string {\n return `x: ${round3(v[0])}, y: ${round3(v[1])}, z: ${round3(v[2])}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"geom.d.ts","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAsDhD;;;;;;;;;;;;;IAaI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC"}
1
+ {"version":3,"file":"geom.d.ts","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAuDhD;;;;;;;;;;;;;IAaI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAE1C;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC;AAED;;;;;;;;;;;IAWI;AACJ,wBAAgB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,CAEvC"}
package/dist/api/geom.js CHANGED
@@ -8,7 +8,8 @@
8
8
  * 优先 → anchor 几何反查(兜底)→ 报错
9
9
  * - bboxCenter/bboxMin/bboxMax:mesh 包围盒查询
10
10
  */
11
- import { cad } from '../mesh/index.js';
11
+ // B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.
12
+ import * as meshQuery from '../mesh/query.js';
12
13
  import { getBrepApi } from '../brep/handle-bridge.js';
13
14
  import { brepOf } from '../shape.js';
14
15
  /** 内部实现:faceNormal 专用——faceOrdinal+BREP 优先 → anchor 反查 → 报错(逻辑迁移自 resolveGeomRef)。 */
@@ -51,7 +52,7 @@ function geomQuery(of, anchor, faceOrdinal) {
51
52
  if (!anchor) {
52
53
  throw new Error('[GeomRef] faceNormal requires anchor or faceOrdinal');
53
54
  }
54
- const face = cad.faceAt(of, { point: anchor });
55
+ const face = meshQuery.faceAt(of, { point: anchor });
55
56
  if (!face) {
56
57
  throw new Error(`[GeomRef] faceAt failed for anchor at ${anchor}`);
57
58
  }
@@ -87,7 +88,7 @@ export function faceNormal(of, anchor, ordinal) {
87
88
  * const c = cad.bboxCenter(part0)
88
89
  */
89
90
  export function bboxCenter(of) {
90
- return cad.bboxCenter(of);
91
+ return meshQuery.bboxCenter(of);
91
92
  }
92
93
  /**
93
94
  * 查询几何包围盒最小角点。
@@ -102,7 +103,7 @@ export function bboxCenter(of) {
102
103
  * const mn = cad.bboxMin(part0)
103
104
  */
104
105
  export function bboxMin(of) {
105
- return cad.boundingBox(of).min;
106
+ return meshQuery.boundingBox(of).min;
106
107
  }
107
108
  /**
108
109
  * 查询几何包围盒最大角点。
@@ -117,6 +118,6 @@ export function bboxMin(of) {
117
118
  * const mx = cad.bboxMax(part0)
118
119
  */
119
120
  export function bboxMax(of) {
120
- return cad.boundingBox(of).max;
121
+ return meshQuery.boundingBox(of).max;
121
122
  }
122
123
  //# sourceMappingURL=geom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"geom.js","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api geom — $geom 查询函数族(有形签名)\n *\n *\n * `cad.<feature>(of, anchor?, ordinal?)`:\n * - of 是 Shape(编译产物 `ctx.<var>` 引用),非变量名\n * - faceNormal:faceOrdinal + brepOf(of) + kernel(拓扑引用)\n * 优先 → anchor 几何反查(兜底)→ 报错\n * - bboxCenter/bboxMin/bboxMax:mesh 包围盒查询\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\nimport { cad } from '../mesh'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 内部实现:faceNormal 专用——faceOrdinal+BREP 优先 → anchor 反查 → 报错(逻辑迁移自 resolveGeomRef)。 */\nfunction geomQuery(\n of: Shape,\n anchor: Vec3 | undefined,\n faceOrdinal: number | undefined,\n): Vec3 {\n // 优先路径:faceOrdinal 拓扑引用(BREP 路径)\n if (faceOrdinal !== undefined) {\n const solid = brepOf(of) as BrepHandle | undefined\n const kernel = getBrepApi()\n if (solid && kernel) {\n try {\n const faces = kernel.getSubShapes(solid, 'face')\n if (faceOrdinal < faces.length) {\n const face = faces[faceOrdinal]\n // 面法向:用 surfaceNormal 在 (0.5, 0.5) 处取\n let normal: Vec3 = [0, 0, 1]\n try {\n const n = kernel.surfaceNormal(face, 0.5, 0.5)\n normal = [n.x, n.y, n.z]\n } catch {\n // surfaceNormal 可能对某些面失败,用默认法向\n }\n kernel.release(face)\n for (let i = 0; i < faces.length; i++) {\n if (i !== faceOrdinal) kernel.release(faces[i])\n }\n return normal\n }\n // ordinal 越界 → 释放并降级到 anchor\n for (const f of faces) kernel.release(f)\n } catch {\n // BREP 取面失败 → 降级到 anchor\n }\n }\n }\n\n // 兜底路径:anchor 几何反查\n if (!anchor) {\n throw new Error('[GeomRef] faceNormal requires anchor or faceOrdinal')\n }\n const face = cad.faceAt(of, { point: anchor })\n if (!face) {\n throw new Error(`[GeomRef] faceAt failed for anchor at ${anchor}`)\n }\n return face.normal\n}\n\n/**\n * 查询面上某点(锚点)的法向。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name faceNormal\n * @returns Vec3 面上锚点处的法向 [x,y,z]。\n * @param of - 目标几何(编译产物 ctx.<var> 引用)。type:Shape required:true\n * @param anchor - 锚点(几何反查兜底)。type:[x,y,z]\n * @param ordinal - 面序号(BREP 拓扑引用优先)。type:number\n * @example\n * const n = cad.faceNormal(part0, [0, 0, 5])\n */\nexport function faceNormal(of: Shape, anchor?: Vec3, ordinal?: number): Vec3 {\n return geomQuery(of, anchor, ordinal)\n}\n\n/**\n * 查询几何包围盒中心。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxCenter\n * @returns Vec3 包围盒中心 [x,y,z]。交互式可编辑(参数量引用)。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const c = cad.bboxCenter(part0)\n */\nexport function bboxCenter(of: Shape): Vec3 {\n return cad.bboxCenter(of)\n}\n\n/**\n * 查询几何包围盒最小角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMin\n * @returns Vec3 包围盒最小角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mn = cad.bboxMin(part0)\n */\nexport function bboxMin(of: Shape): Vec3 {\n return cad.boundingBox(of).min\n}\n\n/**\n * 查询几何包围盒最大角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMax\n * @returns Vec3 包围盒最大角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mx = cad.bboxMax(part0)\n */\nexport function bboxMax(of: Shape): Vec3 {\n return cad.boundingBox(of).max\n}\n"]}
1
+ {"version":3,"file":"geom.js","sourceRoot":"","sources":["../../src/api/geom.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api geom — $geom 查询函数族(有形签名)\n *\n *\n * `cad.<feature>(of, anchor?, ordinal?)`:\n * - of 是 Shape(编译产物 `ctx.<var>` 引用),非变量名\n * - faceNormal:faceOrdinal + brepOf(of) + kernel(拓扑引用)\n * 优先 → anchor 几何反查(兜底)→ 报错\n * - bboxCenter/bboxMin/bboxMax:mesh 包围盒查询\n */\n\nimport type { Shape, Vec3 } from '../mesh/types'\n// B3 correction (2026-10-06): no library-face cad aggregate — import the impl from its own module.\nimport * as meshQuery from '../mesh/query'\nimport { getBrepApi } from '../brep/handle-bridge'\nimport { brepOf } from '../shape'\nimport type { BrepHandle } from '../brep/engine/types'\n\n/** 内部实现:faceNormal 专用——faceOrdinal+BREP 优先 → anchor 反查 → 报错(逻辑迁移自 resolveGeomRef)。 */\nfunction geomQuery(\n of: Shape,\n anchor: Vec3 | undefined,\n faceOrdinal: number | undefined,\n): Vec3 {\n // 优先路径:faceOrdinal 拓扑引用(BREP 路径)\n if (faceOrdinal !== undefined) {\n const solid = brepOf(of) as BrepHandle | undefined\n const kernel = getBrepApi()\n if (solid && kernel) {\n try {\n const faces = kernel.getSubShapes(solid, 'face')\n if (faceOrdinal < faces.length) {\n const face = faces[faceOrdinal]\n // 面法向:用 surfaceNormal 在 (0.5, 0.5) 处取\n let normal: Vec3 = [0, 0, 1]\n try {\n const n = kernel.surfaceNormal(face, 0.5, 0.5)\n normal = [n.x, n.y, n.z]\n } catch {\n // surfaceNormal 可能对某些面失败,用默认法向\n }\n kernel.release(face)\n for (let i = 0; i < faces.length; i++) {\n if (i !== faceOrdinal) kernel.release(faces[i])\n }\n return normal\n }\n // ordinal 越界 → 释放并降级到 anchor\n for (const f of faces) kernel.release(f)\n } catch {\n // BREP 取面失败 → 降级到 anchor\n }\n }\n }\n\n // 兜底路径:anchor 几何反查\n if (!anchor) {\n throw new Error('[GeomRef] faceNormal requires anchor or faceOrdinal')\n }\n const face = meshQuery.faceAt(of, { point: anchor })\n if (!face) {\n throw new Error(`[GeomRef] faceAt failed for anchor at ${anchor}`)\n }\n return face.normal\n}\n\n/**\n * 查询面上某点(锚点)的法向。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name faceNormal\n * @returns Vec3 面上锚点处的法向 [x,y,z]。\n * @param of - 目标几何(编译产物 ctx.<var> 引用)。type:Shape required:true\n * @param anchor - 锚点(几何反查兜底)。type:[x,y,z]\n * @param ordinal - 面序号(BREP 拓扑引用优先)。type:number\n * @example\n * const n = cad.faceNormal(part0, [0, 0, 5])\n */\nexport function faceNormal(of: Shape, anchor?: Vec3, ordinal?: number): Vec3 {\n return geomQuery(of, anchor, ordinal)\n}\n\n/**\n * 查询几何包围盒中心。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxCenter\n * @returns Vec3 包围盒中心 [x,y,z]。交互式可编辑(参数量引用)。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const c = cad.bboxCenter(part0)\n */\nexport function bboxCenter(of: Shape): Vec3 {\n return meshQuery.bboxCenter(of)\n}\n\n/**\n * 查询几何包围盒最小角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMin\n * @returns Vec3 包围盒最小角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mn = cad.bboxMin(part0)\n */\nexport function bboxMin(of: Shape): Vec3 {\n return meshQuery.boundingBox(of).min\n}\n\n/**\n * 查询几何包围盒最大角点。\n * @group 查询\n * @inputs 1\n * @async false\n * @qual ok\n * @name bboxMax\n * @returns Vec3 包围盒最大角点 [x,y,z]。\n * @param of - 目标几何。type:Shape required:true\n * @example\n * const mx = cad.bboxMax(part0)\n */\nexport function bboxMax(of: Shape): Vec3 {\n return meshQuery.boundingBox(of).max\n}\n"]}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * api halfSpace — 无限半空间实体(平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,
5
+ * L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明
6
+ * `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方
7
+ * op 声明 `engines` 由守卫 ② 校验。
8
+ *
9
+ * 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):
10
+ * 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化
11
+ * 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。
12
+ * 它唯一的用途是**作无界布尔工具**:
13
+ * `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。
14
+ *
15
+ * 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。
16
+ * 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。
17
+ *
18
+ * 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason
19
+ * (方案 §4.2 表列此项)。
20
+ *
21
+ * 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面
22
+ * 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——
23
+ * `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。
24
+ */
25
+ import type { Shape } from '../mesh/types.js';
26
+ type Vec3 = [number, number, number];
27
+ /** `cad.halfSpace` 参数。 */
28
+ export interface HalfSpaceParams {
29
+ /** 边界平面上的一点 `[x, y, z]`(mm)。半空间从该平面沿 `normal` 方向张开。 */
30
+ origin: Vec3;
31
+ /** 边界平面法向 `[x, y, z]`(不必单位化;零向量非法)。保留侧 = 法向所指一侧。 */
32
+ normal: Vec3;
33
+ }
34
+ /**
35
+ * 构造无限半空间实体(无界布尔工具)。
36
+ * @group 创建
37
+ * @inputs 0
38
+ * @async false
39
+ * @qual ok
40
+ * @name halfSpace
41
+ * @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎
42
+ * 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可
43
+ * 离散),单独渲染无意义,用法是喂给布尔 op 作工具
44
+ * (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。
45
+ * @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。
46
+ * @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true
47
+ * @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true
48
+ * @example
49
+ * const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })
50
+ * const lower = cad.cut(part0, half)
51
+ */
52
+ export declare const halfSpace: ((params: HalfSpaceParams) => Promise<Shape>) & {
53
+ __faijs__dualOp?: import("../define-op.js").DualOpMeta;
54
+ };
55
+ export {};
56
+ //# sourceMappingURL=half-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"half-space.d.ts","sourceRoot":"","sources":["../../src/api/half-space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAEpC,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,MAAM,EAAE,IAAI,CAAA;IACZ,oDAAoD;IACpD,MAAM,EAAE,IAAI,CAAA;CACb;AA4BD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS;;CAWpB,CAAA"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * api halfSpace — 无限半空间实体(平台 op engines:['occt'])
3
+ *
4
+ * @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,
5
+ * L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明
6
+ * `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方
7
+ * op 声明 `engines` 由守卫 ② 校验。
8
+ *
9
+ * 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):
10
+ * 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化
11
+ * 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。
12
+ * 它唯一的用途是**作无界布尔工具**:
13
+ * `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。
14
+ *
15
+ * 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。
16
+ * 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。
17
+ *
18
+ * 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason
19
+ * (方案 §4.2 表列此项)。
20
+ *
21
+ * 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面
22
+ * 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——
23
+ * `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。
24
+ */
25
+ import { solidToShape } from '../brep/brep-ops.js';
26
+ import { getBrepApi } from '../brep/handle-bridge.js';
27
+ import { fromBrep } from '../shape.js';
28
+ import { defineOp } from '../sdk.js';
29
+ import { getOcctKernel } from '../occt-kernel/occtKernel.js';
30
+ /** 元组 → BrepVec3 对象(同 sectionByPlane:L1/原生向量形参是 {x,y,z} 对象)。 */
31
+ function toVec3(v, which) {
32
+ if (!Array.isArray(v) ||
33
+ v.length !== 3 ||
34
+ v.some((n) => typeof n !== 'number' || !Number.isFinite(n))) {
35
+ throw new Error(`E_HALF_SPACE_BAD_${which.toUpperCase()}: ${which} must be [x,y,z] finite numbers`);
36
+ }
37
+ if (which === 'normal' && v[0] === 0 && v[1] === 0 && v[2] === 0) {
38
+ throw new Error('E_HALF_SPACE_BAD_NORMAL: normal must be a non-zero vector (it defines the plane)');
39
+ }
40
+ return { x: v[0], y: v[1], z: v[2] };
41
+ }
42
+ /** BREP 路径:occt 原生 halfSpace → 无界实体(空 mesh)经 fromBrep 收养句柄。 */
43
+ function halfSpaceBrep(params) {
44
+ const { origin, normal } = params ?? {};
45
+ const o = toVec3(origin, 'origin');
46
+ const n = toVec3(normal, 'normal');
47
+ const kernel = getBrepApi();
48
+ // 实测(探针 A):无限半空间可被 `meshShape` 三角化,不抛错,产出空面载荷。
49
+ const handle = getOcctKernel().halfSpace(o, n);
50
+ return fromBrep(solidToShape(kernel, handle), { solid: handle });
51
+ }
52
+ /**
53
+ * 构造无限半空间实体(无界布尔工具)。
54
+ * @group 创建
55
+ * @inputs 0
56
+ * @async false
57
+ * @qual ok
58
+ * @name halfSpace
59
+ * @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎
60
+ * 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可
61
+ * 离散),单独渲染无意义,用法是喂给布尔 op 作工具
62
+ * (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。
63
+ * @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。
64
+ * @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true
65
+ * @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true
66
+ * @example
67
+ * const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })
68
+ * const lower = cad.cut(part0, half)
69
+ */
70
+ export const halfSpace = defineOp({
71
+ name: 'halfSpace',
72
+ paramDims: { 'params.origin': 'length', 'params.normal': 'length' },
73
+ brep(params) {
74
+ return halfSpaceBrep(params);
75
+ },
76
+ engines: ['occt'],
77
+ naming: {
78
+ kind: 'unmodeled',
79
+ reason: 'unbounded half-space has no source-derived face role vocabulary',
80
+ },
81
+ });
82
+ //# sourceMappingURL=half-space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"half-space.js","sourceRoot":"","sources":["../../src/api/half-space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;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,gEAAgE;AAChE,SAAS,MAAM,CAAC,CAAO,EAAE,KAA0B;IACjD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,iCAAiC,CAAC,CAAA;IACrG,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAA;IACrG,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACtC,CAAC;AAED,+DAA+D;AAC/D,SAAS,aAAa,CAAC,MAAuB;IAC5C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAK,EAAsB,CAAA;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,+CAA+C;IAC/C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAA0B,CAAA;IACvE,OAAO,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAU,CAAA;AAC3E,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC;IAChC,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE;IACnE,IAAI,CAAC,MAAuB;QAC1B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,iEAAiE;KAC5D;CAChB,CAAC,CAAA","sourcesContent":["/**\n * api halfSpace — 无限半空间实体(平台 op engines:['occt'])\n *\n * @platform occt — 实现直调 occt 原生 `halfSpace(origin, normal)`(occt-wasm 有,\n * L1 契约 `brep/engine/primitives.ts` 无对应成员)⇒ 平台 op:defineOp 声明\n * `engines: ['occt']`(D11)。守卫 ① 要求平台 import 自证身份(本头注);调用方\n * op 声明 `engines` 由守卫 ② 校验。\n *\n * 产物形态(实测,见 `test/api/occt-s3-capability-probes.test.ts` 的 A/B/C 三例):\n * 半空间是**无界实体**——它有有限的面(一张平面)+ 无界的「其余边界」,三角化\n * 后**面载荷为空**(`positions.length === 0`),这是该几何的真值,不是失败。\n * 它唯一的用途是**作无界布尔工具**:\n * `kernel.cut(makeBox(10,10,10), halfSpace({z:5},{z:1}))` → 体积 500、z ∈ [0,5]。\n *\n * 因此在脚本面它是「布尔工具发生器」:`cad.cut(part0, cad.halfSpace(...))`。\n * 单独渲染它没有意义(空 mesh),单独导出 STEP 会得到无界体。\n *\n * 血缘:半空间没有面角色词汇(其面不来自任何输入面)⇒ `naming: unmodeled` + reason\n * (方案 §4.2 表列此项)。\n *\n * 与既有 op 的边界(方案 §4.5 去重表):`sectionByPlane` / `splitByPlane` 是**以平面\n * 切割/求交**的中立 op;`halfSpace` 产**实体**、不作切割动作,二者不可互替——\n * `halfSpace` 可喂给 `cut` / `common` / `split` 的任意工具位(包含 split 工具位)。\n */\n\nimport type { Shape } from '../mesh/types'\nimport type { BrepHandle, BrepVec3 } 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\ntype Vec3 = [number, number, number]\n\n/** `cad.halfSpace` 参数。 */\nexport interface HalfSpaceParams {\n /** 边界平面上的一点 `[x, y, z]`(mm)。半空间从该平面沿 `normal` 方向张开。 */\n origin: Vec3\n /** 边界平面法向 `[x, y, z]`(不必单位化;零向量非法)。保留侧 = 法向所指一侧。 */\n normal: Vec3\n}\n\n/** 元组 → BrepVec3 对象(同 sectionByPlane:L1/原生向量形参是 {x,y,z} 对象)。 */\nfunction toVec3(v: Vec3, which: 'origin' | 'normal'): BrepVec3 {\n if (\n !Array.isArray(v) ||\n v.length !== 3 ||\n v.some((n) => typeof n !== 'number' || !Number.isFinite(n))\n ) {\n throw new Error(`E_HALF_SPACE_BAD_${which.toUpperCase()}: ${which} must be [x,y,z] finite numbers`)\n }\n if (which === 'normal' && v[0] === 0 && v[1] === 0 && v[2] === 0) {\n throw new Error('E_HALF_SPACE_BAD_NORMAL: normal must be a non-zero vector (it defines the plane)')\n }\n return { x: v[0], y: v[1], z: v[2] }\n}\n\n/** BREP 路径:occt 原生 halfSpace → 无界实体(空 mesh)经 fromBrep 收养句柄。 */\nfunction halfSpaceBrep(params: HalfSpaceParams): Shape {\n const { origin, normal } = params ?? ({} as HalfSpaceParams)\n const o = toVec3(origin, 'origin')\n const n = toVec3(normal, 'normal')\n const kernel = getBrepApi()\n // 实测(探针 A):无限半空间可被 `meshShape` 三角化,不抛错,产出空面载荷。\n const handle = getOcctKernel().halfSpace(o, n) as unknown as BrepHandle\n return fromBrep(solidToShape(kernel, handle), { solid: handle }) as Shape\n}\n\n/**\n * 构造无限半空间实体(无界布尔工具)。\n * @group 创建\n * @inputs 0\n * @async false\n * @qual ok\n * @name halfSpace\n * @note 平台 op:仅 occt 引擎(原生 halfSpace,L1 契约无对应成员)。非 occt 引擎\n * 执行前报错;brep_mock 不拦截。产物是**无界实体**:面载荷为空(无有限面可\n * 离散),单独渲染无意义,用法是喂给布尔 op 作工具\n * (`cad.cut(part0, cad.halfSpace({ origin: [0,0,5], normal: [0,0,1] }))` 切出 z<=5 的一半)。\n * @returns Shape 无限半空间实体(brep 句柄有效、mesh 为空)。\n * @param params.origin - 边界平面上一点 [x,y,z](mm)。type:Vec3 required:true\n * @param params.normal - 边界平面法向 [x,y,z](非零;保留侧 = 法向所指侧)。type:Vec3 required:true\n * @example\n * const half = cad.halfSpace({ origin: [0, 0, 5], normal: [0, 0, 1] })\n * const lower = cad.cut(part0, half)\n */\nexport const halfSpace = defineOp({\n name: 'halfSpace',\n paramDims: { 'params.origin': 'length', 'params.normal': 'length' },\n brep(params: HalfSpaceParams) {\n return halfSpaceBrep(params)\n },\n engines: ['occt'],\n naming: {\n kind: 'unmodeled',\n reason: 'unbounded half-space has no source-derived face role vocabulary',\n } as Provenance,\n})\n"]}
@@ -15,6 +15,8 @@
15
15
  * 豁免不拦截(且 getOcctKernel 为全局 occt 实例,brep_mock 下仍可真实出线)。
16
16
  */
17
17
  import type { Shape } from '../mesh/types.js';
18
+ /** 螺旋手性:`'right'`(右手,逆时针上旋)或 `'left'`(左手,顺时针上旋)。 */
19
+ export type HelixHanded = 'right' | 'left';
18
20
  /** `cad.helix` 参数。 */
19
21
  export interface HelixOptions {
20
22
  /** 螺旋半径(mm,>0)。 */
@@ -27,6 +29,11 @@ export interface HelixOptions {
27
29
  axis?: [number, number, number];
28
30
  /** 起点(默认原点)。 */
29
31
  origin?: [number, number, number];
32
+ /**
33
+ * 手性(默认 `'right'`)。同 pitch/height/radius 下左右旋互为镜像。
34
+ * `'right'` 走 `makeHelixWire`,`'left'` 走 `makeHelixWireHanded(..., true)`。
35
+ */
36
+ handed?: HelixHanded;
30
37
  }
31
38
  /**
32
39
  * 构造螺旋线(1D 曲线)。
@@ -35,15 +42,17 @@ export interface HelixOptions {
35
42
  * @async false
36
43
  * @qual ok
37
44
  * @name helix
38
- * @note 平台 op:仅 occt 引擎(原生 makeHelixWire)。非 occt 引擎执行前报错;brep_mock 不拦截。
45
+ * @note 平台 op:仅 occt 引擎(原生 makeHelixWire / makeHelixWireHanded)。非 occt 引擎执行前报错;brep_mock 不拦截。
39
46
  * @returns Shape 1D 螺旋线(kind:'curve')。
40
47
  * @param options.radius - 螺旋半径(mm,>0)。type:number required:true
41
48
  * @param options.pitch - 螺距(mm,≠0)。type:number required:true
42
49
  * @param options.turns - 圈数(>0)。type:number required:true
43
50
  * @param options.axis - 螺旋轴方向(默认 +Z)。type:Vec3 required:false
44
51
  * @param options.origin - 起点(默认原点)。type:Vec3 required:false
52
+ * @param options.handed - 手性:'right'(默认)或 'left'。type:HelixHanded required:false
45
53
  * @example
46
54
  * const h = cad.helix({ radius: 5, pitch: 2, turns: 3 })
55
+ * const lh = cad.helix({ radius: 5, pitch: 2, turns: 3, handed: 'left' })
47
56
  */
48
57
  export declare const helix: ((opts: HelixOptions) => Promise<Shape>) & {
49
58
  __faijs__dualOp?: import("../define-op.js").DualOpMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"helix.d.ts","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAClC;AAuBD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,KAAK;;CAMhB,CAAA"}
1
+ {"version":3,"file":"helix.d.ts","sourceRoot":"","sources":["../../src/api/helix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAS1C,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAA;AAE1C,sBAAsB;AACtB,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB;IACzB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,gBAAgB;IAChB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AA4BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,KAAK;;CAWhB,CAAA"}