@faicad/faijs 0.33.1 → 0.35.2

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 (392) hide show
  1. package/dist/api/api-namespace.d.ts +14 -14
  2. package/dist/api/api-namespace.d.ts.map +1 -1
  3. package/dist/api/api-namespace.js +40 -14
  4. package/dist/api/api-namespace.js.map +1 -1
  5. package/dist/api/appearance.d.ts +47 -6
  6. package/dist/api/appearance.d.ts.map +1 -1
  7. package/dist/api/appearance.js.map +1 -1
  8. package/dist/api/assembly/solve-tree.d.ts +1 -0
  9. package/dist/api/assembly/solve-tree.d.ts.map +1 -1
  10. package/dist/api/assembly/solve-tree.js +42 -17
  11. package/dist/api/assembly/solve-tree.js.map +1 -1
  12. package/dist/api/assembly/solve.d.ts +1 -0
  13. package/dist/api/assembly/solve.d.ts.map +1 -1
  14. package/dist/api/assembly/solve.js.map +1 -1
  15. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  16. package/dist/api/assembly/solvers/global-solver.js +130 -23
  17. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  18. package/dist/api/assembly/solvers/pose-from-delta.d.ts +9 -0
  19. package/dist/api/assembly/solvers/pose-from-delta.d.ts.map +1 -1
  20. package/dist/api/assembly/solvers/pose-from-delta.js +23 -0
  21. package/dist/api/assembly/solvers/pose-from-delta.js.map +1 -1
  22. package/dist/api/assembly/solvers/types.d.ts +20 -2
  23. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  24. package/dist/api/assembly/solvers/types.js.map +1 -1
  25. package/dist/api/chamfer.d.ts +7 -4
  26. package/dist/api/chamfer.d.ts.map +1 -1
  27. package/dist/api/chamfer.js +57 -13
  28. package/dist/api/chamfer.js.map +1 -1
  29. package/dist/api/draft.d.ts +7 -4
  30. package/dist/api/draft.d.ts.map +1 -1
  31. package/dist/api/draft.js +11 -6
  32. package/dist/api/draft.js.map +1 -1
  33. package/dist/api/edge-ref.d.ts +4 -4
  34. package/dist/api/edge-ref.js +4 -4
  35. package/dist/api/edge-ref.js.map +1 -1
  36. package/dist/api/extrude.d.ts +10 -6
  37. package/dist/api/extrude.d.ts.map +1 -1
  38. package/dist/api/extrude.js +50 -25
  39. package/dist/api/extrude.js.map +1 -1
  40. package/dist/api/face-ref.d.ts +4 -4
  41. package/dist/api/face-ref.js +4 -4
  42. package/dist/api/face-ref.js.map +1 -1
  43. package/dist/api/feature-repair.d.ts +6 -3
  44. package/dist/api/feature-repair.d.ts.map +1 -1
  45. package/dist/api/feature-repair.js +12 -7
  46. package/dist/api/feature-repair.js.map +1 -1
  47. package/dist/api/fillet-variable.d.ts +6 -2
  48. package/dist/api/fillet-variable.d.ts.map +1 -1
  49. package/dist/api/fillet-variable.js +24 -6
  50. package/dist/api/fillet-variable.js.map +1 -1
  51. package/dist/api/fillet.d.ts +7 -4
  52. package/dist/api/fillet.d.ts.map +1 -1
  53. package/dist/api/fillet.js +45 -12
  54. package/dist/api/fillet.js.map +1 -1
  55. package/dist/api/helix.d.ts +13 -13
  56. package/dist/api/helix.d.ts.map +1 -1
  57. package/dist/api/helix.js +19 -24
  58. package/dist/api/helix.js.map +1 -1
  59. package/dist/api/import-brep.d.ts +10 -18
  60. package/dist/api/import-brep.d.ts.map +1 -1
  61. package/dist/api/import-brep.js +17 -25
  62. package/dist/api/import-brep.js.map +1 -1
  63. package/dist/api/import-step.d.ts +10 -15
  64. package/dist/api/import-step.d.ts.map +1 -1
  65. package/dist/api/import-step.js +24 -29
  66. package/dist/api/import-step.js.map +1 -1
  67. package/dist/api/index.js +2 -2
  68. package/dist/api/index.js.map +1 -1
  69. package/dist/api/internal/export-members.js.map +1 -1
  70. package/dist/api/loft-advanced.d.ts +4 -0
  71. package/dist/api/loft-advanced.d.ts.map +1 -1
  72. package/dist/api/loft-advanced.js +4 -0
  73. package/dist/api/loft-advanced.js.map +1 -1
  74. package/dist/api/loft.d.ts +5 -3
  75. package/dist/api/loft.d.ts.map +1 -1
  76. package/dist/api/loft.js +5 -3
  77. package/dist/api/loft.js.map +1 -1
  78. package/dist/api/meta.d.ts +42 -6
  79. package/dist/api/meta.d.ts.map +1 -1
  80. package/dist/api/meta.js.map +1 -1
  81. package/dist/api/punch-hole.d.ts +5 -2
  82. package/dist/api/punch-hole.d.ts.map +1 -1
  83. package/dist/api/punch-hole.js +4 -1
  84. package/dist/api/punch-hole.js.map +1 -1
  85. package/dist/api/replicate.d.ts +4 -5
  86. package/dist/api/replicate.d.ts.map +1 -1
  87. package/dist/api/replicate.js +4 -5
  88. package/dist/api/replicate.js.map +1 -1
  89. package/dist/api/selectors-to-refs.d.ts +83 -0
  90. package/dist/api/selectors-to-refs.d.ts.map +1 -0
  91. package/dist/api/selectors-to-refs.js +211 -0
  92. package/dist/api/selectors-to-refs.js.map +1 -0
  93. package/dist/api/shell.d.ts +17 -8
  94. package/dist/api/shell.d.ts.map +1 -1
  95. package/dist/api/shell.js +45 -15
  96. package/dist/api/shell.js.map +1 -1
  97. package/dist/api/sketch-on-face.d.ts +12 -6
  98. package/dist/api/sketch-on-face.d.ts.map +1 -1
  99. package/dist/api/sketch-on-face.js +31 -4
  100. package/dist/api/sketch-on-face.js.map +1 -1
  101. package/dist/api/sketch-on-plane.d.ts +3 -0
  102. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  103. package/dist/api/sketch-on-plane.js +3 -0
  104. package/dist/api/sketch-on-plane.js.map +1 -1
  105. package/dist/api/sketch-on-surface.d.ts +4 -1
  106. package/dist/api/sketch-on-surface.d.ts.map +1 -1
  107. package/dist/api/sketch-on-surface.js +4 -1
  108. package/dist/api/sketch-on-surface.js.map +1 -1
  109. package/dist/api/view/view-projection.d.ts.map +1 -1
  110. package/dist/api/view/view-projection.js +9 -2
  111. package/dist/api/view/view-projection.js.map +1 -1
  112. package/dist/brep/brep-chain.js +2 -2
  113. package/dist/brep/brep-chain.js.map +1 -1
  114. package/dist/brep/brep-ops.d.ts +1 -1
  115. package/dist/brep/brep-ops.js +1 -1
  116. package/dist/brep/brep-ops.js.map +1 -1
  117. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  118. package/dist/brep/engine/adapters/brep-mock.js +45 -0
  119. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  120. package/dist/brep/engine/primitives.d.ts +87 -3
  121. package/dist/brep/engine/primitives.d.ts.map +1 -1
  122. package/dist/brep/engine/primitives.js +1 -1
  123. package/dist/brep/engine/primitives.js.map +1 -1
  124. package/dist/brep/engine/registry.d.ts +33 -7
  125. package/dist/brep/engine/registry.d.ts.map +1 -1
  126. package/dist/brep/engine/registry.js +47 -16
  127. package/dist/brep/engine/registry.js.map +1 -1
  128. package/dist/brep/handle-bridge.d.ts +14 -15
  129. package/dist/brep/handle-bridge.d.ts.map +1 -1
  130. package/dist/brep/handle-bridge.js +35 -15
  131. package/dist/brep/handle-bridge.js.map +1 -1
  132. package/dist/brep/primitives-brep.js +2 -2
  133. package/dist/brep/primitives-brep.js.map +1 -1
  134. package/dist/brep/text/text-to-solid.d.ts +40 -3
  135. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  136. package/dist/brep/text/text-to-solid.js +104 -24
  137. package/dist/brep/text/text-to-solid.js.map +1 -1
  138. package/dist/brepkit-kernel/brepkitKernel.d.ts +2 -2
  139. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  140. package/dist/brepkit-kernel/brepkitKernel.js +315 -36
  141. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  142. package/dist/brepkit-kernel/brepkitWasm.js +7 -7
  143. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  144. package/dist/brepkit-kernel/multi-version-test.d.ts +2 -2
  145. package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
  146. package/dist/brepkit-kernel/multi-version-test.js +6 -6
  147. package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
  148. package/dist/browser.d.ts +2 -3
  149. package/dist/browser.d.ts.map +1 -1
  150. package/dist/browser.js +1 -2
  151. package/dist/browser.js.map +1 -1
  152. package/dist/cad-runtime/admit-compat-lib.d.ts +9 -1
  153. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  154. package/dist/cad-runtime/admit-compat-lib.js +11 -1
  155. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  156. package/dist/cad-runtime/browser-lib-loader.d.ts +16 -11
  157. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  158. package/dist/cad-runtime/browser-lib-loader.js +16 -8
  159. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  160. package/dist/cad-runtime/direct-executor.d.ts +62 -5
  161. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  162. package/dist/cad-runtime/direct-executor.js +617 -42
  163. package/dist/cad-runtime/direct-executor.js.map +1 -1
  164. package/dist/cad-runtime/interp/closure.d.ts +3 -2
  165. package/dist/cad-runtime/interp/closure.d.ts.map +1 -1
  166. package/dist/cad-runtime/interp/closure.js.map +1 -1
  167. package/dist/cad-runtime/interp/env.d.ts +9 -6
  168. package/dist/cad-runtime/interp/env.d.ts.map +1 -1
  169. package/dist/cad-runtime/interp/env.js +4 -2
  170. package/dist/cad-runtime/interp/env.js.map +1 -1
  171. package/dist/cad-runtime/lib-decl.d.ts +121 -0
  172. package/dist/cad-runtime/lib-decl.d.ts.map +1 -0
  173. package/dist/cad-runtime/lib-decl.js +100 -0
  174. package/dist/cad-runtime/lib-decl.js.map +1 -0
  175. package/dist/cad-runtime/ports.d.ts +12 -0
  176. package/dist/cad-runtime/ports.d.ts.map +1 -1
  177. package/dist/cad-runtime/ports.js.map +1 -1
  178. package/dist/cad-runtime/runtime.d.ts +59 -5
  179. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  180. package/dist/cad-runtime/runtime.js +237 -18
  181. package/dist/cad-runtime/runtime.js.map +1 -1
  182. package/dist/extra/browser.d.ts +9 -0
  183. package/dist/extra/browser.d.ts.map +1 -0
  184. package/dist/extra/browser.js +9 -0
  185. package/dist/extra/browser.js.map +1 -0
  186. package/dist/extra/editor-ops.d.ts +22 -0
  187. package/dist/extra/editor-ops.d.ts.map +1 -0
  188. package/dist/extra/editor-ops.js +21 -0
  189. package/dist/extra/editor-ops.js.map +1 -0
  190. package/dist/extra/extras/svg-extrude.d.ts +45 -0
  191. package/dist/extra/extras/svg-extrude.d.ts.map +1 -0
  192. package/dist/extra/extras/svg-extrude.js +110 -0
  193. package/dist/extra/extras/svg-extrude.js.map +1 -0
  194. package/dist/extra/extras/text-cjk.d.ts +36 -0
  195. package/dist/extra/extras/text-cjk.d.ts.map +1 -0
  196. package/dist/extra/extras/text-cjk.js +86 -0
  197. package/dist/extra/extras/text-cjk.js.map +1 -0
  198. package/dist/extra/extras/text-geometry.d.ts +69 -0
  199. package/dist/extra/extras/text-geometry.d.ts.map +1 -0
  200. package/dist/extra/extras/text-geometry.js +188 -0
  201. package/dist/extra/extras/text-geometry.js.map +1 -0
  202. package/dist/extra/index.d.ts +40 -0
  203. package/dist/extra/index.d.ts.map +1 -0
  204. package/dist/extra/index.js +40 -0
  205. package/dist/extra/index.js.map +1 -0
  206. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts +94 -0
  207. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts.map +1 -0
  208. package/dist/extra/mesh/drill-hole/DrillHoleCore.js +282 -0
  209. package/dist/extra/mesh/drill-hole/DrillHoleCore.js.map +1 -0
  210. package/dist/extra/mesh/drill-hole/drill-types.d.ts +34 -0
  211. package/dist/extra/mesh/drill-hole/drill-types.d.ts.map +1 -0
  212. package/dist/extra/mesh/drill-hole/drill-types.js +7 -0
  213. package/dist/extra/mesh/drill-hole/drill-types.js.map +1 -0
  214. package/dist/extra/mesh/engrave-decoration.d.ts +42 -0
  215. package/dist/extra/mesh/engrave-decoration.d.ts.map +1 -0
  216. package/dist/extra/mesh/engrave-decoration.js +39 -0
  217. package/dist/extra/mesh/engrave-decoration.js.map +1 -0
  218. package/dist/extra/mesh/fai_drill.d.ts +21 -0
  219. package/dist/extra/mesh/fai_drill.d.ts.map +1 -0
  220. package/dist/extra/mesh/fai_drill.js +89 -0
  221. package/dist/extra/mesh/fai_drill.js.map +1 -0
  222. package/dist/extra/mesh/fai_extrude.d.ts +24 -0
  223. package/dist/extra/mesh/fai_extrude.d.ts.map +1 -0
  224. package/dist/extra/mesh/fai_extrude.js +42 -0
  225. package/dist/extra/mesh/fai_extrude.js.map +1 -0
  226. package/dist/extra/mesh/fai_split.d.ts +164 -0
  227. package/dist/extra/mesh/fai_split.d.ts.map +1 -0
  228. package/dist/extra/mesh/fai_split.js +269 -0
  229. package/dist/extra/mesh/fai_split.js.map +1 -0
  230. package/dist/extra/mesh/primitives.d.ts +29 -0
  231. package/dist/extra/mesh/primitives.d.ts.map +1 -0
  232. package/dist/extra/mesh/primitives.js +41 -0
  233. package/dist/extra/mesh/primitives.js.map +1 -0
  234. package/dist/extra/op-names.d.ts +37 -0
  235. package/dist/extra/op-names.d.ts.map +1 -0
  236. package/dist/extra/op-names.js +46 -0
  237. package/dist/extra/op-names.js.map +1 -0
  238. package/dist/extra/ops/compound.d.ts +140 -0
  239. package/dist/extra/ops/compound.d.ts.map +1 -0
  240. package/dist/extra/ops/compound.js +167 -0
  241. package/dist/extra/ops/compound.js.map +1 -0
  242. package/dist/extra/ops/copy.d.ts +40 -0
  243. package/dist/extra/ops/copy.d.ts.map +1 -0
  244. package/dist/extra/ops/copy.js +83 -0
  245. package/dist/extra/ops/copy.js.map +1 -0
  246. package/dist/extra/ops/fai_drill.d.ts +51 -0
  247. package/dist/extra/ops/fai_drill.d.ts.map +1 -0
  248. package/dist/extra/ops/fai_drill.js +233 -0
  249. package/dist/extra/ops/fai_drill.js.map +1 -0
  250. package/dist/extra/ops/fai_extrude.d.ts +36 -0
  251. package/dist/extra/ops/fai_extrude.d.ts.map +1 -0
  252. package/dist/extra/ops/fai_extrude.js +84 -0
  253. package/dist/extra/ops/fai_extrude.js.map +1 -0
  254. package/dist/extra/ops/fai_split.d.ts +46 -0
  255. package/dist/extra/ops/fai_split.d.ts.map +1 -0
  256. package/dist/extra/ops/fai_split.js +235 -0
  257. package/dist/extra/ops/fai_split.js.map +1 -0
  258. package/dist/extra/ops/load.d.ts +49 -0
  259. package/dist/extra/ops/load.d.ts.map +1 -0
  260. package/dist/extra/ops/load.js +385 -0
  261. package/dist/extra/ops/load.js.map +1 -0
  262. package/dist/extra/ops/svg-extrude.d.ts +32 -0
  263. package/dist/extra/ops/svg-extrude.d.ts.map +1 -0
  264. package/dist/extra/ops/svg-extrude.js +74 -0
  265. package/dist/extra/ops/svg-extrude.js.map +1 -0
  266. package/dist/extra/ops/text.d.ts +34 -0
  267. package/dist/extra/ops/text.d.ts.map +1 -0
  268. package/dist/extra/ops/text.js +100 -0
  269. package/dist/extra/ops/text.js.map +1 -0
  270. package/dist/geometry2d/bridge/lift-on-plane.d.ts +8 -5
  271. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  272. package/dist/geometry2d/bridge/lift-on-plane.js +8 -5
  273. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  274. package/dist/index.d.ts +6 -2
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +8 -2
  277. package/dist/index.js.map +1 -1
  278. package/dist/lang/symbol-table.d.ts +3 -3
  279. package/dist/lang/symbol-table.generated.d.ts +10 -0
  280. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  281. package/dist/lang/symbol-table.generated.js +10 -0
  282. package/dist/lang/symbol-table.generated.js.map +1 -1
  283. package/dist/lang/symbol-table.js +3 -3
  284. package/dist/lang/symbol-table.js.map +1 -1
  285. package/dist/math3d/index.d.ts +1 -1
  286. package/dist/math3d/index.js +1 -1
  287. package/dist/math3d/index.js.map +1 -1
  288. package/dist/mesh/engrave.d.ts +2 -3
  289. package/dist/mesh/engrave.d.ts.map +1 -1
  290. package/dist/mesh/engrave.js +4 -11
  291. package/dist/mesh/engrave.js.map +1 -1
  292. package/dist/mesh/index.d.ts +0 -2
  293. package/dist/mesh/index.d.ts.map +1 -1
  294. package/dist/mesh/index.js +0 -2
  295. package/dist/mesh/index.js.map +1 -1
  296. package/dist/mesh/primitives.d.ts +1 -1
  297. package/dist/mesh/primitives.js +1 -1
  298. package/dist/mesh/primitives.js.map +1 -1
  299. package/dist/node-host/cli.d.ts +20 -4
  300. package/dist/node-host/cli.d.ts.map +1 -1
  301. package/dist/node-host/cli.js +84 -35
  302. package/dist/node-host/cli.js.map +1 -1
  303. package/dist/node-host/execute-script.d.ts.map +1 -1
  304. package/dist/node-host/execute-script.js +3 -4
  305. package/dist/node-host/execute-script.js.map +1 -1
  306. package/dist/node-host/lib-package-json.d.ts +36 -0
  307. package/dist/node-host/lib-package-json.d.ts.map +1 -0
  308. package/dist/node-host/lib-package-json.js +73 -0
  309. package/dist/node-host/lib-package-json.js.map +1 -0
  310. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  311. package/dist/occt-kernel/occt-primitives.js +41 -0
  312. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  313. package/dist/occt-kernel/occtKernel.d.ts +1 -1
  314. package/dist/occt-kernel/occtKernel.js +1 -1
  315. package/dist/occt-kernel/occtKernel.js.map +1 -1
  316. package/dist/runtime-state.d.ts +28 -1
  317. package/dist/runtime-state.d.ts.map +1 -1
  318. package/dist/runtime-state.js +14 -1
  319. package/dist/runtime-state.js.map +1 -1
  320. package/dist/sdk.d.ts +2 -2
  321. package/dist/sdk.d.ts.map +1 -1
  322. package/dist/sdk.js +11 -2
  323. package/dist/sdk.js.map +1 -1
  324. package/dist/sketch/bspline.d.ts +58 -0
  325. package/dist/sketch/bspline.d.ts.map +1 -0
  326. package/dist/sketch/bspline.js +104 -0
  327. package/dist/sketch/bspline.js.map +1 -0
  328. package/dist/sketch/canonical.d.ts +239 -0
  329. package/dist/sketch/canonical.d.ts.map +1 -0
  330. package/dist/sketch/canonical.js +17 -0
  331. package/dist/sketch/canonical.js.map +1 -0
  332. package/dist/sketch/contour.d.ts +43 -0
  333. package/dist/sketch/contour.d.ts.map +1 -0
  334. package/dist/sketch/contour.js +202 -0
  335. package/dist/sketch/contour.js.map +1 -0
  336. package/dist/sketch/dim-spec.d.ts +32 -0
  337. package/dist/sketch/dim-spec.d.ts.map +1 -0
  338. package/dist/sketch/dim-spec.js +112 -0
  339. package/dist/sketch/dim-spec.js.map +1 -0
  340. package/dist/sketch/faces.d.ts +45 -0
  341. package/dist/sketch/faces.d.ts.map +1 -0
  342. package/dist/sketch/faces.js +108 -0
  343. package/dist/sketch/faces.js.map +1 -0
  344. package/dist/sketch/fcstd-types.d.ts +194 -0
  345. package/dist/sketch/fcstd-types.d.ts.map +1 -0
  346. package/dist/sketch/fcstd-types.js +67 -0
  347. package/dist/sketch/fcstd-types.js.map +1 -0
  348. package/dist/sketch/index.d.ts +46 -0
  349. package/dist/sketch/index.d.ts.map +1 -0
  350. package/dist/sketch/index.js +39 -0
  351. package/dist/sketch/index.js.map +1 -0
  352. package/dist/sketch/node.d.ts +14 -0
  353. package/dist/sketch/node.d.ts.map +1 -0
  354. package/dist/sketch/node.js +43 -0
  355. package/dist/sketch/node.js.map +1 -0
  356. package/dist/sketch/op.d.ts +111 -0
  357. package/dist/sketch/op.d.ts.map +1 -0
  358. package/dist/sketch/op.js +185 -0
  359. package/dist/sketch/op.js.map +1 -0
  360. package/dist/sketch/planegcs-backend.d.ts +69 -0
  361. package/dist/sketch/planegcs-backend.d.ts.map +1 -0
  362. package/dist/sketch/planegcs-backend.js +812 -0
  363. package/dist/sketch/planegcs-backend.js.map +1 -0
  364. package/dist/sketch/project.d.ts +176 -0
  365. package/dist/sketch/project.d.ts.map +1 -0
  366. package/dist/sketch/project.js +656 -0
  367. package/dist/sketch/project.js.map +1 -0
  368. package/dist/sketch/shapes.d.ts +370 -0
  369. package/dist/sketch/shapes.d.ts.map +1 -0
  370. package/dist/sketch/shapes.js +959 -0
  371. package/dist/sketch/shapes.js.map +1 -0
  372. package/dist/sketch/solve.d.ts +21 -0
  373. package/dist/sketch/solve.d.ts.map +1 -0
  374. package/dist/sketch/solve.js +144 -0
  375. package/dist/sketch/solve.js.map +1 -0
  376. package/dist/sketch/solver-loader.d.ts +47 -0
  377. package/dist/sketch/solver-loader.d.ts.map +1 -0
  378. package/dist/sketch/solver-loader.js +77 -0
  379. package/dist/sketch/solver-loader.js.map +1 -0
  380. package/dist/sketch/solver.d.ts +63 -0
  381. package/dist/sketch/solver.d.ts.map +1 -0
  382. package/dist/sketch/solver.js +28 -0
  383. package/dist/sketch/solver.js.map +1 -0
  384. package/dist/sketch/verify.d.ts +53 -0
  385. package/dist/sketch/verify.d.ts.map +1 -0
  386. package/dist/sketch/verify.js +71 -0
  387. package/dist/sketch/verify.js.map +1 -0
  388. package/dist/weapp.d.ts +1 -1
  389. package/dist/weapp.d.ts.map +1 -1
  390. package/dist/weapp.js +1 -1
  391. package/dist/weapp.js.map +1 -1
  392. package/package.json +43 -11
@@ -0,0 +1,100 @@
1
+ /**
2
+ * faijs-extra text — 文字创建库函数(text)
3
+ *
4
+ *
5
+ * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。
6
+ */
7
+ import { text as meshText } from '../mesh/primitives.js';
8
+ import { solidToShape } from '../../brep/brep-ops.js';
9
+ import { getBrepApi } from '../../brep/handle-bridge.js';
10
+ import { textToSolid } from '../../brep/text/text-to-solid.js';
11
+ import { ensureDefaultFont } from '../../brep/text/fontRegistry.js';
12
+ import { getSolidBoundingBox } from '../../brep/brep-utils.js';
13
+ import { containsCjk, loadSystemCjkFont } from '../../primitives/text/cjk-font.js';
14
+ import { fromBrep } from '../../shape.js';
15
+ import { defineOp } from '../../sdk.js';
16
+ import { assertPositiveNumber } from '../../api/assert.js';
17
+ /**
18
+ * Validate text parameters: `text` must be a non-empty string, and `size` and
19
+ * `depth` must be positive numbers.
20
+ * @param params - the raw text operation parameters.
21
+ */
22
+ export function assertTextParams(params) {
23
+ if (typeof params.text !== 'string' || params.text.trim() === '') {
24
+ throw new Error(`[extra/text] text must be a non-empty string, got ${JSON.stringify(params.text)}`);
25
+ }
26
+ assertPositiveNumber(params.size, 'text.size');
27
+ assertPositiveNumber(params.depth, 'text.depth');
28
+ }
29
+ /**
30
+ * BREP 路径:opentype.js → OCCT wire/face → extrude → center + fromBrep 登记。
31
+ *
32
+ * 与 mesh 路径一样,当文本包含 CJK 字符但没有 CJK 字体时,
33
+ * 将 CJK 字符替换为 '?' 以实现优雅降级。
34
+ */
35
+ async function textBrep(params) {
36
+ const kernel = getBrepApi();
37
+ await ensureDefaultFont();
38
+ const text = params.text;
39
+ const size = params.size;
40
+ const depth = params.depth;
41
+ // 如果文本包含 CJK 字符,检查是否有 CJK 字体
42
+ let renderText = text;
43
+ if (containsCjk(text)) {
44
+ const cjkResult = await loadSystemCjkFont();
45
+ if (!cjkResult) {
46
+ // 无 CJK 字体:将 CJK 字符替换为 '?' 以实现优雅降级
47
+ renderText = text.replace(/[\u4E00-\u9FFF\u3400-\u4DBF\u2F800-\u2FA1F\u3000-\u303F\uFF00-\uFFEF]/g, '?');
48
+ }
49
+ }
50
+ // 将文字转换为 OCCT solid
51
+ const rawSolid = textToSolid(kernel, renderText, {
52
+ fontSize: size,
53
+ depth,
54
+ });
55
+ // Center the solid to match mesh path behavior:
56
+ // X/Z centered at origin, Y bottom aligned to 0
57
+ const bbox = getSolidBoundingBox(kernel, rawSolid);
58
+ const cx = (bbox.min[0] + bbox.max[0]) / 2;
59
+ const cz = (bbox.min[2] + bbox.max[2]) / 2;
60
+ const centeredSolid = kernel.translate(rawSolid, -cx, -bbox.min[1], -cz);
61
+ kernel.release(rawSolid);
62
+ return fromBrep(solidToShape(kernel, centeredSolid), { solid: centeredSolid });
63
+ }
64
+ /** 兼容两种调用形态:`cad.text({ text, size, depth })`(创建类)与
65
+ * `cad.text(part0, { text, size, depth })`(历史 fixture 带输入参数,输入被忽略)。 */
66
+ function textParamsOf(inputOrParams, maybeParams) {
67
+ return (maybeParams ?? inputOrParams ?? {});
68
+ }
69
+ /**
70
+ * 生成文字零件(文字轮廓挤出,X/Z 居中、Y 底部对齐原点)。
71
+ * @group 创建
72
+ * @inputs 0
73
+ * @async true
74
+ * @qual warn
75
+ * @name text
76
+ * @returns Shape 文字几何,生成独立零件。
77
+ * @param maybeParams - 兼容形态的补充参数(正常不传)。type:Record<string, unknown> required:false
78
+ * @param inputOrParams.text - 要生成的文字。type:string required:true
79
+ * @param inputOrParams.size - 字号(mm)。type:number required:true
80
+ * @param inputOrParams.depth - 挤出深度(mm)。type:number required:true
81
+ * @param inputOrParams.font - 字体。type:string 默认 默认字体
82
+ * @note font 语义未定(当前只有默认字体),⚠️ 暂不要传。兼容 `cad.text(part0, {...})` 带输入形态(输入被忽略),正常写 `cad.text({...})` 即可。
83
+ * @example
84
+ * const t = await cad.text({ text: 'Hello', size: 20, depth: 5 })
85
+ */
86
+ export const text = defineOp({
87
+ mesh: async (inputOrParams, maybeParams) => {
88
+ const params = textParamsOf(inputOrParams, maybeParams);
89
+ assertTextParams(params);
90
+ return meshText({ text: params.text, size: params.size, depth: params.depth });
91
+ },
92
+ brep: async (inputOrParams, maybeParams) => {
93
+ const params = textParamsOf(inputOrParams, maybeParams);
94
+ assertTextParams(params);
95
+ return textBrep(params);
96
+ },
97
+ naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [] } },
98
+ paramDims: { inputOrParams: 'plain', maybeParams: 'plain' },
99
+ });
100
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/extra/ops/text.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * faijs-extra text — 文字创建库函数(text)\n *\n *\n * dispatchPath 静态判定 brep/mesh,产物经 solid()/fromBrep() 构造器创建。\n */\n\nimport type { Shape } from '../../mesh/types'\nimport { text as meshText } from '../mesh/primitives'\nimport { solidToShape } from '../../brep/brep-ops'\nimport { getBrepApi } from '../../brep/handle-bridge'\nimport { textToSolid } from '../../brep/text/text-to-solid'\nimport { ensureDefaultFont } from '../../brep/text/fontRegistry'\nimport { getSolidBoundingBox } from '../../brep/brep-utils'\nimport { containsCjk, loadSystemCjkFont } from '../../primitives/text/cjk-font'\nimport { fromBrep } from '../../shape'\nimport { defineOp } from '../../sdk'\nimport type { Provenance } from '../../topology/naming/lineage'\nimport { assertPositiveNumber } from '../../api/assert'\n\n/**\n * Validate text parameters: `text` must be a non-empty string, and `size` and\n * `depth` must be positive numbers.\n * @param params - the raw text operation parameters.\n */\nexport function assertTextParams(params: Record<string, unknown>): void {\n if (typeof params.text !== 'string' || params.text.trim() === '') {\n throw new Error(`[extra/text] text must be a non-empty string, got ${JSON.stringify(params.text)}`)\n }\n assertPositiveNumber(params.size, 'text.size')\n assertPositiveNumber(params.depth, 'text.depth')\n}\n\n/**\n * BREP 路径:opentype.js → OCCT wire/face → extrude → center + fromBrep 登记。\n *\n * 与 mesh 路径一样,当文本包含 CJK 字符但没有 CJK 字体时,\n * 将 CJK 字符替换为 '?' 以实现优雅降级。\n */\nasync function textBrep(params: Record<string, unknown>): Promise<Shape> {\n const kernel = getBrepApi()\n\n await ensureDefaultFont()\n\n const text = params.text as string\n const size = params.size as number\n const depth = params.depth as number\n\n // 如果文本包含 CJK 字符,检查是否有 CJK 字体\n let renderText = text\n if (containsCjk(text)) {\n const cjkResult = await loadSystemCjkFont()\n if (!cjkResult) {\n // 无 CJK 字体:将 CJK 字符替换为 '?' 以实现优雅降级\n renderText = text.replace(/[\\u4E00-\\u9FFF\\u3400-\\u4DBF\\u2F800-\\u2FA1F\\u3000-\\u303F\\uFF00-\\uFFEF]/g, '?')\n }\n }\n\n // 将文字转换为 OCCT solid\n const rawSolid = textToSolid(kernel, renderText, {\n fontSize: size,\n depth,\n })\n\n // Center the solid to match mesh path behavior:\n // X/Z centered at origin, Y bottom aligned to 0\n const bbox = getSolidBoundingBox(kernel, rawSolid)\n const cx = (bbox.min[0] + bbox.max[0]) / 2\n const cz = (bbox.min[2] + bbox.max[2]) / 2\n const centeredSolid = kernel.translate(rawSolid, -cx, -bbox.min[1], -cz)\n kernel.release(rawSolid)\n\n return fromBrep(solidToShape(kernel, centeredSolid), { solid: centeredSolid })\n}\n\n/** 兼容两种调用形态:`cad.text({ text, size, depth })`(创建类)与\n * `cad.text(part0, { text, size, depth })`(历史 fixture 带输入参数,输入被忽略)。 */\nfunction textParamsOf(inputOrParams: unknown, maybeParams?: Record<string, unknown>): Record<string, unknown> {\n return (maybeParams ?? inputOrParams ?? {}) as Record<string, unknown>\n}\n\n/**\n * 生成文字零件(文字轮廓挤出,X/Z 居中、Y 底部对齐原点)。\n * @group 创建\n * @inputs 0\n * @async true\n * @qual warn\n * @name text\n * @returns Shape 文字几何,生成独立零件。\n * @param maybeParams - 兼容形态的补充参数(正常不传)。type:Record<string, unknown> required:false\n * @param inputOrParams.text - 要生成的文字。type:string required:true\n * @param inputOrParams.size - 字号(mm)。type:number required:true\n * @param inputOrParams.depth - 挤出深度(mm)。type:number required:true\n * @param inputOrParams.font - 字体。type:string 默认 默认字体\n * @note font 语义未定(当前只有默认字体),⚠️ 暂不要传。兼容 `cad.text(part0, {...})` 带输入形态(输入被忽略),正常写 `cad.text({...})` 即可。\n * @example\n * const t = await cad.text({ text: 'Hello', size: 20, depth: 5 })\n */\nexport const text = defineOp({\n mesh: async (inputOrParams: unknown, maybeParams?: Record<string, unknown>) => {\n const params = textParamsOf(inputOrParams, maybeParams)\n assertTextParams(params)\n return meshText({ text: params.text as string, size: params.size as number, depth: params.depth as number })\n },\n brep: async (inputOrParams: unknown, maybeParams?: Record<string, unknown>) => {\n const params = textParamsOf(inputOrParams, maybeParams)\n assertTextParams(params)\n return textBrep(params)\n },\n naming: { kind: 'construct', newFaces: { via: 'explicit', vocab: [] } } as Provenance,\n\n paramDims: { inputOrParams: 'plain', maybeParams: 'plain' },\n})\n"]}
@@ -27,11 +27,14 @@ export type PlaneWireKernel = Pick<BrepEngineApi, 'makeLineEdge' | 'makeArcEdge'
27
27
  * lift points; ellipse falls back to a dense sampled polyline (no exact
28
28
  * ellipse-edge primitive on the contract yet).
29
29
  *
30
- * GOTCHA (brepkit, 2026-09-30 实证): a closed wire built from exactly TWO
31
- * half-arcs (`makeArcEdge`) makes brepkit's `makeFaceFromWire` produce a face
32
- * covering only 1/3 of the disc (measured extrude volume 523.6 vs πr²·5 = 1570.8),
33
- * while 3- or 4-arc wires and a single closed `makeCircleEdge` are exact. The
34
- * full-circle case therefore emits one `makeCircleEdge` rather than two arcs.
30
+ * Full-circle handling: the lift always emits ONE closed kernel circle edge
31
+ * (`makeCircleEdge`) for a whole circle, never two half-arcs. This started as a
32
+ * workaround for a brepkit limitation (2026-09-30 实证: a closed wire built from
33
+ * exactly TWO `makeArcEdge` halves made `makeFaceFromWire` cover only 1/3 of the
34
+ * disc — measured extrude volume 523.6 vs πr²·5 = 1570.8 — while 3-/4-arc wires
35
+ * and one `makeCircleEdge` were exact). That limitation has since been fixed by
36
+ * brepkit (2026-10-13 实测: the two-half-arc wire is exact), but the single-edge
37
+ * lift is kept: one edge, one seam, no endpoint concatenation.
35
38
  * @param kernel - the kernel edge primitives.
36
39
  * @param plane - the target plane frame.
37
40
  * @param c - the ordered 2D curve to lift.
@@ -1 +1 @@
1
- {"version":3,"file":"lift-on-plane.d.ts","sourceRoot":"","sources":["../../../src/geometry2d/bridge/lift-on-plane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAA;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAgC,KAAK,KAAK,EAAa,MAAM,SAAS,CAAA;AAE7E;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,aAAa,EACX,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,iBAAiB,GACjB,UAAU,CACb,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CA0CrG;AA8CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAIvH;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,UAAU,CAG5G;AAED,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACvF,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"lift-on-plane.d.ts","sourceRoot":"","sources":["../../../src/geometry2d/bridge/lift-on-plane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,YAAY,CAAA;AAEvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAgC,KAAK,KAAK,EAAa,MAAM,SAAS,CAAA;AAE7E;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,aAAa,EACX,cAAc,GACd,aAAa,GACb,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,iBAAiB,GACjB,UAAU,CACb,CAAA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CA0CrG;AA8CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAIvH;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,GAAG,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,UAAU,CAG5G;AAED,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACvF,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
@@ -7,11 +7,14 @@ import { namedPlane, liftPointToPlane } from './plane.js';
7
7
  * lift points; ellipse falls back to a dense sampled polyline (no exact
8
8
  * ellipse-edge primitive on the contract yet).
9
9
  *
10
- * GOTCHA (brepkit, 2026-09-30 实证): a closed wire built from exactly TWO
11
- * half-arcs (`makeArcEdge`) makes brepkit's `makeFaceFromWire` produce a face
12
- * covering only 1/3 of the disc (measured extrude volume 523.6 vs πr²·5 = 1570.8),
13
- * while 3- or 4-arc wires and a single closed `makeCircleEdge` are exact. The
14
- * full-circle case therefore emits one `makeCircleEdge` rather than two arcs.
10
+ * Full-circle handling: the lift always emits ONE closed kernel circle edge
11
+ * (`makeCircleEdge`) for a whole circle, never two half-arcs. This started as a
12
+ * workaround for a brepkit limitation (2026-09-30 实证: a closed wire built from
13
+ * exactly TWO `makeArcEdge` halves made `makeFaceFromWire` cover only 1/3 of the
14
+ * disc — measured extrude volume 523.6 vs πr²·5 = 1570.8 — while 3-/4-arc wires
15
+ * and one `makeCircleEdge` were exact). That limitation has since been fixed by
16
+ * brepkit (2026-10-13 实测: the two-half-arc wire is exact), but the single-edge
17
+ * lift is kept: one edge, one seam, no endpoint concatenation.
15
18
  * @param kernel - the kernel edge primitives.
16
19
  * @param plane - the target plane frame.
17
20
  * @param c - the ordered 2D curve to lift.
@@ -1 +1 @@
1
- {"version":3,"file":"lift-on-plane.js","sourceRoot":"","sources":["../../../src/geometry2d/bridge/lift-on-plane.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 2D curve → 3D plane placement primitives (E2, occt-only bridge layer).\n *\n * This is the \"lift\" half of `sketchOnPlane`: it maps a pure-2D `Curve2dObj[]`\n * (or `Blueprint`) onto an arbitrary plane and assembles the resulting 3D edges\n * into a wire. `curvesAsEdgesOnPlane` / `assembleWire` mirror the plan's E2 work\n * items. The kernel edge/wire primitives are accepted as `Pick<BrepEngineApi, …>`\n * (the bridge may import the kernel contract, only `api/` is off-limits) so\n * callers pass `getBrepApi()` directly with no casts.\n * @module\n */\nimport type { BrepEngineApi } from '../../brep/engine/primitives'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { Curve2dObj, BSpline2d } from '../curve2d'\nimport { evaluateCurve2d } from '../curve2d'\nimport type { Blueprint } from '../blueprint'\nimport { namedPlane, liftPointToPlane, type Plane, type Vec3 } from './plane'\n\n/**\n * Minimal kernel edge/wire surface needed for planar placement (plus the\n * NURBS/curve primitives the spline segments need: an exact parametric edge\n * cannot be built or trimmed without them).\n */\nexport type PlaneWireKernel = Pick<\n BrepEngineApi,\n | 'makeLineEdge'\n | 'makeArcEdge'\n | 'makeBezierEdge'\n | 'makeBSplineEdge'\n | 'makeCircleEdge'\n | 'curveSplit'\n | 'curveParameters'\n | 'makeWire'\n>\n\n/**\n * Build the 3D edge(s) for a single 2D curve lifted onto a plane. Line, bezier\n * and bspline build exact analytic edges; a full circle becomes one closed\n * kernel circle edge and a trimmed circle a true arc edge from three on-plane\n * lift points; ellipse falls back to a dense sampled polyline (no exact\n * ellipse-edge primitive on the contract yet).\n *\n * GOTCHA (brepkit, 2026-09-30 实证): a closed wire built from exactly TWO\n * half-arcs (`makeArcEdge`) makes brepkit's `makeFaceFromWire` produce a face\n * covering only 1/3 of the disc (measured extrude volume 523.6 vs πr²·5 = 1570.8),\n * while 3- or 4-arc wires and a single closed `makeCircleEdge` are exact. The\n * full-circle case therefore emits one `makeCircleEdge` rather than two arcs.\n * @param kernel - the kernel edge primitives.\n * @param plane - the target plane frame.\n * @param c - the ordered 2D curve to lift.\n * @returns the lifted 3D edge handle(s), in curve order.\n */\nexport function liftCurve2dToPlane(kernel: PlaneWireKernel, plane: Plane, c: Curve2dObj): BrepHandle[] {\n const on = (c2: Curve2dObj, t: number): Vec3 => liftPointToPlane(plane, ...evaluateCurve2d(c2, t))\n switch (c.kind2d) {\n case 'line':\n // P2 (2026-09-28, ArchDetail class): a fully-trimmed sketch can carry a\n // ZERO-LENGTH line; makeLineEdge(start, start) is rejected by the OCCT\n // kernel and killed the whole sketchOnPlane call. A zero-length segment\n // contributes nothing to the wire — skip it.\n if (c.len === 0) return []\n return [\n kernel.makeLineEdge(\n liftPointToPlane(plane, c.ox, c.oy),\n liftPointToPlane(plane, c.ox + c.dx * c.len, c.oy + c.dy * c.len),\n ),\n ]\n case 'bezier':\n return [kernel.makeBezierEdge(c.poles.map(([x, y]) => liftPointToPlane(plane, x, y)))]\n case 'bspline':\n return [buildBSplineEdge(kernel, plane, c)]\n case 'circle': {\n // Whole circle → one closed kernel circle edge. The winding sense picks\n // the axis sign so the seam/parametrisation follows the 2D curve.\n const normal = c.sense ? plane.zDir : { x: -plane.zDir.x, y: -plane.zDir.y, z: -plane.zDir.z }\n return [kernel.makeCircleEdge(liftPointToPlane(plane, c.cx, c.cy), normal, c.radius)]\n }\n case 'trimmed': {\n if (c.basis.kind2d === 'circle') return [kernel.makeArcEdge(on(c, 0), on(c, 0.5), on(c, 1))]\n // A trimmed spline is built WHOLE and then cut by the kernel, so the\n // sub-curve is the kernel's own exact subdivision rather than a\n // re-derived control polygon here.\n const full =\n c.basis.kind2d === 'bspline'\n ? buildBSplineEdge(kernel, plane, c.basis)\n : c.basis.kind2d === 'bezier'\n ? kernel.makeBezierEdge(c.basis.poles.map(([x, y]) => liftPointToPlane(plane, x, y)))\n : undefined\n if (full !== undefined) return [trimEdge(kernel, full, c.tStart, c.tEnd)]\n return sampledEdges(kernel, plane, c)\n }\n default:\n return sampledEdges(kernel, plane, c)\n }\n}\n\n/** Lift a 2D B-spline onto the plane as one exact NURBS edge (rational included). */\nfunction buildBSplineEdge(kernel: PlaneWireKernel, plane: Plane, c: BSpline2d): BrepHandle {\n const poles: number[] = []\n for (const [x, y] of c.poles) {\n const v = liftPointToPlane(plane, x, y)\n poles.push(v.x, v.y, v.z)\n }\n return kernel.makeBSplineEdge(poles, c.weights ? [...c.weights] : [], c.knots, c.multiplicities, c.degree, c.isPeriodic)\n}\n\n/**\n * Cut an edge down to `[first, last]` on its own parameter axis.\n *\n * `curveSplit` requires a STRICTLY interior parameter and rejects a domain end\n * (`curveSplit: parameter out of range`), so each side is only cut when it is\n * actually trimmed — an edge trimmed on one side alone would otherwise throw.\n *\n * @param kernel - the kernel edge primitives.\n * @param edge - the whole basis edge.\n * @param first - trim start on the edge's parameter axis.\n * @param last - trim end on the edge's parameter axis.\n * @returns the sub-edge (the same handle when no trim applies).\n */\nfunction trimEdge(kernel: PlaneWireKernel, edge: BrepHandle, first: number, last: number): BrepHandle {\n const b = kernel.curveParameters(edge)\n const eps = 1e-9 * Math.max(1, Math.abs(b.last - b.first))\n let cur = edge\n if (last < b.last - eps) cur = kernel.curveSplit(cur, last)[0]\n const b2 = kernel.curveParameters(cur)\n if (first > b2.first + eps) cur = kernel.curveSplit(cur, first)[1]\n return cur\n}\n\n/** Sample a non-analytic curve into a polyline of `makeLineEdge`s on the plane. */\nfunction sampledEdges(kernel: PlaneWireKernel, plane: Plane, c: Curve2dObj): BrepHandle[] {\n const out: BrepHandle[] = []\n for (let k = 0; k < 32; k++) {\n const t0 = k / 32\n const t1 = (k + 1) / 32\n out.push(kernel.makeLineEdge(liftPointToPlane(plane, ...evaluateCurve2d(c, t0)), liftPointToPlane(plane, ...evaluateCurve2d(c, t1))))\n }\n return out\n}\n\n/**\n * Lift an ordered list of 2D curves to edges on a plane frame.\n * @param kernel - the kernel edge/wire primitives.\n * @param plane - the target plane.\n * @param curves - the ordered 2D curves (a closed loop stays closed).\n * @returns the lifted 3D edge handles in the same order.\n */\nexport function curvesAsEdgesOnPlane(kernel: PlaneWireKernel, plane: Plane, curves: readonly Curve2dObj[]): BrepHandle[] {\n const out: BrepHandle[] = []\n for (const c of curves) out.push(...liftCurve2dToPlane(kernel, plane, c))\n return out\n}\n\n/**\n * Assemble a Blueprint's curves into a 3D wire on a plane — the shared placement\n * step for all of the profile / draw / sketch sources.\n * @param kernel - the curve kernel/wire primitives.\n * @param planeOrName - a plane frame or a named plane string (`'XY'` / `'XZ'` / …).\n * @param bp - the blueprint whose ordered curves become the wire.\n * @returns the assembled 3D wire.\n */\nexport function assembleWire(kernel: PlaneWireKernel, planeOrName: Plane | string, bp: Blueprint): BrepHandle {\n const plane = typeof planeOrName === 'string' ? namedPlane(planeOrName) : planeOrName\n return kernel.makeWire(curvesAsEdgesOnPlane(kernel, plane, bp.curves))\n}\n\nexport { liftPointToPlane, worldToPlane, namedPlane, makePlane, toVec3 } from './plane'\nexport type { Plane, Vec3, Vec3Input } from './plane'\n"]}
1
+ {"version":3,"file":"lift-on-plane.js","sourceRoot":"","sources":["../../../src/geometry2d/bridge/lift-on-plane.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 2D curve → 3D plane placement primitives (E2, occt-only bridge layer).\n *\n * This is the \"lift\" half of `sketchOnPlane`: it maps a pure-2D `Curve2dObj[]`\n * (or `Blueprint`) onto an arbitrary plane and assembles the resulting 3D edges\n * into a wire. `curvesAsEdgesOnPlane` / `assembleWire` mirror the plan's E2 work\n * items. The kernel edge/wire primitives are accepted as `Pick<BrepEngineApi, …>`\n * (the bridge may import the kernel contract, only `api/` is off-limits) so\n * callers pass `getBrepApi()` directly with no casts.\n * @module\n */\nimport type { BrepEngineApi } from '../../brep/engine/primitives'\nimport type { BrepHandle } from '../../brep/engine/types'\nimport type { Curve2dObj, BSpline2d } from '../curve2d'\nimport { evaluateCurve2d } from '../curve2d'\nimport type { Blueprint } from '../blueprint'\nimport { namedPlane, liftPointToPlane, type Plane, type Vec3 } from './plane'\n\n/**\n * Minimal kernel edge/wire surface needed for planar placement (plus the\n * NURBS/curve primitives the spline segments need: an exact parametric edge\n * cannot be built or trimmed without them).\n */\nexport type PlaneWireKernel = Pick<\n BrepEngineApi,\n | 'makeLineEdge'\n | 'makeArcEdge'\n | 'makeBezierEdge'\n | 'makeBSplineEdge'\n | 'makeCircleEdge'\n | 'curveSplit'\n | 'curveParameters'\n | 'makeWire'\n>\n\n/**\n * Build the 3D edge(s) for a single 2D curve lifted onto a plane. Line, bezier\n * and bspline build exact analytic edges; a full circle becomes one closed\n * kernel circle edge and a trimmed circle a true arc edge from three on-plane\n * lift points; ellipse falls back to a dense sampled polyline (no exact\n * ellipse-edge primitive on the contract yet).\n *\n * Full-circle handling: the lift always emits ONE closed kernel circle edge\n * (`makeCircleEdge`) for a whole circle, never two half-arcs. This started as a\n * workaround for a brepkit limitation (2026-09-30 实证: a closed wire built from\n * exactly TWO `makeArcEdge` halves made `makeFaceFromWire` cover only 1/3 of the\n * disc — measured extrude volume 523.6 vs πr²·5 = 1570.8 — while 3-/4-arc wires\n * and one `makeCircleEdge` were exact). That limitation has since been fixed by\n * brepkit (2026-10-13 实测: the two-half-arc wire is exact), but the single-edge\n * lift is kept: one edge, one seam, no endpoint concatenation.\n * @param kernel - the kernel edge primitives.\n * @param plane - the target plane frame.\n * @param c - the ordered 2D curve to lift.\n * @returns the lifted 3D edge handle(s), in curve order.\n */\nexport function liftCurve2dToPlane(kernel: PlaneWireKernel, plane: Plane, c: Curve2dObj): BrepHandle[] {\n const on = (c2: Curve2dObj, t: number): Vec3 => liftPointToPlane(plane, ...evaluateCurve2d(c2, t))\n switch (c.kind2d) {\n case 'line':\n // P2 (2026-09-28, ArchDetail class): a fully-trimmed sketch can carry a\n // ZERO-LENGTH line; makeLineEdge(start, start) is rejected by the OCCT\n // kernel and killed the whole sketchOnPlane call. A zero-length segment\n // contributes nothing to the wire — skip it.\n if (c.len === 0) return []\n return [\n kernel.makeLineEdge(\n liftPointToPlane(plane, c.ox, c.oy),\n liftPointToPlane(plane, c.ox + c.dx * c.len, c.oy + c.dy * c.len),\n ),\n ]\n case 'bezier':\n return [kernel.makeBezierEdge(c.poles.map(([x, y]) => liftPointToPlane(plane, x, y)))]\n case 'bspline':\n return [buildBSplineEdge(kernel, plane, c)]\n case 'circle': {\n // Whole circle → one closed kernel circle edge. The winding sense picks\n // the axis sign so the seam/parametrisation follows the 2D curve.\n const normal = c.sense ? plane.zDir : { x: -plane.zDir.x, y: -plane.zDir.y, z: -plane.zDir.z }\n return [kernel.makeCircleEdge(liftPointToPlane(plane, c.cx, c.cy), normal, c.radius)]\n }\n case 'trimmed': {\n if (c.basis.kind2d === 'circle') return [kernel.makeArcEdge(on(c, 0), on(c, 0.5), on(c, 1))]\n // A trimmed spline is built WHOLE and then cut by the kernel, so the\n // sub-curve is the kernel's own exact subdivision rather than a\n // re-derived control polygon here.\n const full =\n c.basis.kind2d === 'bspline'\n ? buildBSplineEdge(kernel, plane, c.basis)\n : c.basis.kind2d === 'bezier'\n ? kernel.makeBezierEdge(c.basis.poles.map(([x, y]) => liftPointToPlane(plane, x, y)))\n : undefined\n if (full !== undefined) return [trimEdge(kernel, full, c.tStart, c.tEnd)]\n return sampledEdges(kernel, plane, c)\n }\n default:\n return sampledEdges(kernel, plane, c)\n }\n}\n\n/** Lift a 2D B-spline onto the plane as one exact NURBS edge (rational included). */\nfunction buildBSplineEdge(kernel: PlaneWireKernel, plane: Plane, c: BSpline2d): BrepHandle {\n const poles: number[] = []\n for (const [x, y] of c.poles) {\n const v = liftPointToPlane(plane, x, y)\n poles.push(v.x, v.y, v.z)\n }\n return kernel.makeBSplineEdge(poles, c.weights ? [...c.weights] : [], c.knots, c.multiplicities, c.degree, c.isPeriodic)\n}\n\n/**\n * Cut an edge down to `[first, last]` on its own parameter axis.\n *\n * `curveSplit` requires a STRICTLY interior parameter and rejects a domain end\n * (`curveSplit: parameter out of range`), so each side is only cut when it is\n * actually trimmed — an edge trimmed on one side alone would otherwise throw.\n *\n * @param kernel - the kernel edge primitives.\n * @param edge - the whole basis edge.\n * @param first - trim start on the edge's parameter axis.\n * @param last - trim end on the edge's parameter axis.\n * @returns the sub-edge (the same handle when no trim applies).\n */\nfunction trimEdge(kernel: PlaneWireKernel, edge: BrepHandle, first: number, last: number): BrepHandle {\n const b = kernel.curveParameters(edge)\n const eps = 1e-9 * Math.max(1, Math.abs(b.last - b.first))\n let cur = edge\n if (last < b.last - eps) cur = kernel.curveSplit(cur, last)[0]\n const b2 = kernel.curveParameters(cur)\n if (first > b2.first + eps) cur = kernel.curveSplit(cur, first)[1]\n return cur\n}\n\n/** Sample a non-analytic curve into a polyline of `makeLineEdge`s on the plane. */\nfunction sampledEdges(kernel: PlaneWireKernel, plane: Plane, c: Curve2dObj): BrepHandle[] {\n const out: BrepHandle[] = []\n for (let k = 0; k < 32; k++) {\n const t0 = k / 32\n const t1 = (k + 1) / 32\n out.push(kernel.makeLineEdge(liftPointToPlane(plane, ...evaluateCurve2d(c, t0)), liftPointToPlane(plane, ...evaluateCurve2d(c, t1))))\n }\n return out\n}\n\n/**\n * Lift an ordered list of 2D curves to edges on a plane frame.\n * @param kernel - the kernel edge/wire primitives.\n * @param plane - the target plane.\n * @param curves - the ordered 2D curves (a closed loop stays closed).\n * @returns the lifted 3D edge handles in the same order.\n */\nexport function curvesAsEdgesOnPlane(kernel: PlaneWireKernel, plane: Plane, curves: readonly Curve2dObj[]): BrepHandle[] {\n const out: BrepHandle[] = []\n for (const c of curves) out.push(...liftCurve2dToPlane(kernel, plane, c))\n return out\n}\n\n/**\n * Assemble a Blueprint's curves into a 3D wire on a plane — the shared placement\n * step for all of the profile / draw / sketch sources.\n * @param kernel - the curve kernel/wire primitives.\n * @param planeOrName - a plane frame or a named plane string (`'XY'` / `'XZ'` / …).\n * @param bp - the blueprint whose ordered curves become the wire.\n * @returns the assembled 3D wire.\n */\nexport function assembleWire(kernel: PlaneWireKernel, planeOrName: Plane | string, bp: Blueprint): BrepHandle {\n const plane = typeof planeOrName === 'string' ? namedPlane(planeOrName) : planeOrName\n return kernel.makeWire(curvesAsEdgesOnPlane(kernel, plane, bp.curves))\n}\n\nexport { liftPointToPlane, worldToPlane, namedPlane, makePlane, toVec3 } from './plane'\nexport type { Plane, Vec3, Vec3Input } from './plane'\n"]}
package/dist/index.d.ts CHANGED
@@ -24,7 +24,9 @@ export { createPreviewExec } from './cad-runtime/preview-exec.js';
24
24
  export type { PreviewExec } from './cad-runtime/preview-exec.js';
25
25
  export type { ExecutionResult, ExecuteOptions, CheckResult, CheckError, CadRuntimeOptions, PartTopology, TopologySource } from './cad-runtime/runtime.js';
26
26
  export type { HostPorts, CsgBackend, SdfBackend, FontProvider, TextureSampler, AssetResolver, EventSink, ExecutionMode, HostEnv, MeshData, PlaneParams, SplitResult as CsgSplitResult, DovetailGrooveParams as PortDovetailGrooveParams, DowelSplitParams as PortDowelSplitParams, StraightTenonSplitParams as PortStraightTenonSplitParams, LibLoader, ProjectLoader, } from './cad-runtime/ports.js';
27
- export { initOcctWasm, getKernel, disposeOcctWasm, setOcctWasmInitFn, computeEffectiveDeflection, importStepToMesh, importBrepToMesh, meshesToStep, releaseShape, importAssemblyFromStep, releaseAssemblyTree, collectLeafParts, } from './occt-kernel/occtKernel.js';
27
+ export { LIB_ROLES, assertLibDecl, resolveFunctionEngines } from './cad-runtime/lib-decl.js';
28
+ export type { LibRole, LibDecl, LibMeta, LibFunctionView, LibDescription, LibCallableView, LibRejectedView, LibsUnderEngine, } from './cad-runtime/lib-decl.js';
29
+ export { initOcctWasm, getOcctKernel, disposeOcctWasm, setOcctWasmInitFn, computeEffectiveDeflection, importStepToMesh, importBrepToMesh, meshesToStep, releaseShape, importAssemblyFromStep, releaseAssemblyTree, collectLeafParts, } from './occt-kernel/occtKernel.js';
28
30
  export type { WasmTessellatedMesh, WasmImportResult, AssemblyPartNode, MeshDeflectionOptions, ShapeHandle, OcctKernel, Mesh, EdgeData, SurfaceKind, CurveKind, } from './occt-kernel/occtKernel.js';
29
31
  export { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct.js';
30
32
  export { exportStepFromSolidsHighLevel } from './occt-kernel/highLevelApi.js';
@@ -35,7 +37,9 @@ export { registerBrepMockEngine, BREP_MOCK_ENGINE_ID, createBrepMockApi } from '
35
37
  export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit.js';
36
38
  export { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit.js';
37
39
  export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
38
- export { registerBrepEngine, getBrepEngine, hasBrepEngine, getActiveBrepEngineId, registerMeshEngine, getMeshEngine, getActiveMeshEngineId, freezeEngineRegistries, isMeshEngineRegistered, getMeshSolidBackend, } from './brep/engine/registry.js';
40
+ export type { BrepKitKernel } from './brepkit-kernel/brepkitWasm.js';
41
+ export { getBrepKitKernel } from './brepkit-kernel/brepkitKernel.js';
42
+ export { registerBrepEngine, getBrepEngine, getActiveBrepEngine, hasBrepEngine, getActiveBrepEngineId, registerMeshEngine, getMeshEngine, getActiveMeshEngine, getActiveMeshEngineId, freezeEngineRegistries, isMeshEngineRegistered, getMeshSolidBackend, } from './brep/engine/registry.js';
39
43
  export type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry.js';
40
44
  export { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid.js';
41
45
  export type { MeshSolidBackend, MeshSolidResult, MeshSolidKernelOps, MeshSolidInput, MeshSolidNormalizeOptions, } from './brep/mesh-solid.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -28,8 +28,11 @@ export * from './topology/naming/index.js';
28
28
  // 2026-10-08). Use createBareRuntime for a pure engine without cad.
29
29
  export { CadRuntime, createRuntime, createBareRuntime, computeContentKey, AppendPrefixError } from './cad-runtime/runtime.js';
30
30
  export { createPreviewExec } from './cad-runtime/preview-exec.js';
31
+ // 两级声明契约(2026-10-14 §3.3):库级定位属性(`faijs.lib`)+ 函数级实现事实
32
+ // (`fn.engines`)。`LibLoader.libMetaFor` / `registerLib({ lib, peers })` 的声明形状。
33
+ export { LIB_ROLES, assertLibDecl, resolveFunctionEngines } from './cad-runtime/lib-decl.js';
31
34
  // ── OCCT Kernel ──
32
- export { initOcctWasm, getKernel, disposeOcctWasm, setOcctWasmInitFn, computeEffectiveDeflection, importStepToMesh, importBrepToMesh, meshesToStep, releaseShape, importAssemblyFromStep, releaseAssemblyTree, collectLeafParts, } from './occt-kernel/occtKernel.js';
35
+ export { initOcctWasm, getOcctKernel, disposeOcctWasm, setOcctWasmInitFn, computeEffectiveDeflection, importStepToMesh, importBrepToMesh, meshesToStep, releaseShape, importAssemblyFromStep, releaseAssemblyTree, collectLeafParts, } from './occt-kernel/occtKernel.js';
33
36
  // ── OCCT Mesh Reconstruct ──
34
37
  export { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct.js';
35
38
  // ── OCCT 高层导出(多实体、零 fuse) ──
@@ -46,7 +49,10 @@ export { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefault
46
49
  // 的 STL/3MF 路径才产出「网格实体 + 近似拓扑」;不装则维持裸网格的历史行为。
47
50
  export { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit.js';
48
51
  export { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm.js';
49
- export { registerBrepEngine, getBrepEngine, hasBrepEngine, getActiveBrepEngineId, registerMeshEngine, getMeshEngine, getActiveMeshEngineId, freezeEngineRegistries, isMeshEngineRegistered, getMeshSolidBackend, } from './brep/engine/registry.js';
52
+ // brepkit 平台面(D3):平台特定代码访问 brepkit 独有能力的唯一出口——与 occt 侧
53
+ // `getOcctKernel()` 对称。库代码 import 它即声明「这段代码只跑在 brepkit 引擎下」。
54
+ export { getBrepKitKernel } from './brepkit-kernel/brepkitKernel.js';
55
+ export { registerBrepEngine, getBrepEngine, getActiveBrepEngine, hasBrepEngine, getActiveBrepEngineId, registerMeshEngine, getMeshEngine, getActiveMeshEngine, getActiveMeshEngineId, freezeEngineRegistries, isMeshEngineRegistered, getMeshSolidBackend, } from './brep/engine/registry.js';
50
56
  // 网格实体(近似拓扑的载体):端口 + 注册表 + 驱动。
51
57
  export { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid.js';
52
58
  // 槽位互斥不变量(分派前置校验;缺陷即报错)
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @faicad/faijs — Faicad CAD execution engine\n *\n * Public API umbrella entry. All exports are re-exports (no new signatures).\n * Organized by architecture layer (L0–L3); each layer consumes `export *` from\n * its sub-module index.ts, with explicit disambiguation for same-name types.\n */\n\n// ── 共享面(env-agnostic:identity + runtime-state + lang/*)──\nexport * from './env-agnostic'\n\n// ── L1 Mesh(types + knurl + decoration + manifold-loader + query + import-model)──\nexport * from './mesh'\n\n// ── L1 BREP(ops + chain + utils + export)──\nexport * from './brep'\nexport { buildStlBufferFromMesh } from './brep/export/stl'\nexport { exportStepFromSolid, exportStepFromSolids } from './brep/export/step'\nexport type { StepExportEntry } from './brep/export/step'\n\n// ── L1 Boolean/CSG ──\nexport * from './boolean'\n\n// ── L1 Primitives ──\nexport * from './primitives'\n\n// ── L1 SDF ──\nexport * from './sdf'\n\n// ── L1 Topology ──\nexport { TOPOLOGY_FACE_ID_NONE, buildFaceIdsForPart } from './topology/build-face-ids'\nexport {\n buildSelectorRuntime, buildSelectorRuntimeData, buildSelectorRuntimeMaps,\n} from './topology/build-selector-runtime'\nexport type { SelectorRuntimeData } from './topology/build-selector-runtime'\nexport type {\n SelectorRuntime, SelectorBundle, SelectorManifest, SelectorBuffers,\n FaceRow, EdgeRow, Reference,\n BufferViewDescriptor, SelectorProxy,\n} from './topology/types'\nexport * from './topology/naming'\n\n// ── L2 编排层 ──\n// createRuntime auto-registers the built-in cad namespace (D1, facade-refactor\n// 2026-10-08). Use createBareRuntime for a pure engine without cad.\nexport { CadRuntime, createRuntime, createBareRuntime, computeContentKey, AppendPrefixError } from './cad-runtime/runtime'\nexport { createPreviewExec } from './cad-runtime/preview-exec'\nexport type { PreviewExec } from './cad-runtime/preview-exec'\nexport type { ExecutionResult, ExecuteOptions, CheckResult, CheckError, CadRuntimeOptions, PartTopology, TopologySource } from './cad-runtime/runtime'\nexport type {\n HostPorts, CsgBackend, SdfBackend, FontProvider, TextureSampler,\n AssetResolver, EventSink, ExecutionMode, HostEnv,\n MeshData, PlaneParams, SplitResult as CsgSplitResult,\n DovetailGrooveParams as PortDovetailGrooveParams,\n DowelSplitParams as PortDowelSplitParams,\n StraightTenonSplitParams as PortStraightTenonSplitParams,\n LibLoader, ProjectLoader,\n} from './cad-runtime/ports'\n\n// ── OCCT Kernel ──\nexport {\n initOcctWasm, getKernel, disposeOcctWasm, setOcctWasmInitFn,\n computeEffectiveDeflection, importStepToMesh, importBrepToMesh,\n meshesToStep, releaseShape,\n importAssemblyFromStep, releaseAssemblyTree, collectLeafParts,\n} from './occt-kernel/occtKernel'\nexport type {\n WasmTessellatedMesh, WasmImportResult, AssemblyPartNode,\n MeshDeflectionOptions, ShapeHandle, OcctKernel,\n Mesh, EdgeData, SurfaceKind, CurveKind,\n} from './occt-kernel/occtKernel'\n\n// ── OCCT Mesh Reconstruct ──\nexport { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct'\n\n// ── OCCT 高层导出(多实体、零 fuse) ──\nexport { exportStepFromSolidsHighLevel } from './occt-kernel/highLevelApi'\n\n// ── OCCT Topology Extension ──\nexport { buildSelectorManifest, buildAssemblySelectorManifest, buildTopologyAdjacency } from './occt-kernel/topologyExt'\nexport type { SelectorManifestInput, PartTopologyInput, AssemblyTopologyResult, TopologyAdjacency } from './occt-kernel/topologyExt'\n\n// ── BREP 引擎注册(宿主装配;引擎可切换——occt 只是默认实现) ──\nexport { registerOcctBrepEngine, OCCT_BREP_ENGINE_ID } from './brep/engine/adapters/occt'\nexport { registerBrepMockEngine, BREP_MOCK_ENGINE_ID, createBrepMockApi } from './brep/engine/adapters/brep-mock'\n// brepkit 端侧 BREP 引擎(微信小程序等无 OCCT 环境):由宿主注入 wasm init 并抢先注册,\n// 使 ensureBrepChain 不回退 OCCT。setBrepkitWasmInitFn 注入自定义初始化(如 WXWebAssembly 实例化)。\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\n// brepkit 网格实体后端(网格语义路径;与 BREP 槽独立注册)。装了它,`cad.load`\n// 的 STL/3MF 路径才产出「网格实体 + 近似拓扑」;不装则维持裸网格的历史行为。\nexport { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit'\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\nexport {\n registerBrepEngine, getBrepEngine, hasBrepEngine, getActiveBrepEngineId,\n registerMeshEngine, getMeshEngine, getActiveMeshEngineId, freezeEngineRegistries,\n isMeshEngineRegistered, getMeshSolidBackend,\n} from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry'\n// 网格实体(近似拓扑的载体):端口 + 注册表 + 驱动。\nexport { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid'\nexport type {\n MeshSolidBackend, MeshSolidResult, MeshSolidKernelOps, MeshSolidInput, MeshSolidNormalizeOptions,\n} from './brep/mesh-solid'\n// 槽位互斥不变量(分派前置校验;缺陷即报错)\nexport { assertShapeSlotExclusive } from './cad-runtime/backend-dispatch'\nexport type { BrepEngineApi } from './brep/engine/primitives'\nexport type {\n BrepHandle, BrepMeshResult, BrepBoundingBox, BrepVec3, BrepEvolutionKind,\n BrepEvolutionData, BrepXcafDocument,\n} from './brep/engine/types'\n\n// ── BREP Topology ──\nexport { buildSolidTopologyRuntime } from './brep/brep-topology'\nexport type { SolidTopologyResult } from './brep/brep-topology'\n\n// ── Font Registry (for browser host injection) ──\nexport { setFontLoader, getFontLoader, loadFont, ensureDefaultFont, ensureFont, getFont, clearFonts } from './brep/text/fontRegistry'\nexport type { FontLoader } from './brep/text/fontRegistry'\n\n// ── L3 Browser Host ──\nexport { createBrowserPorts } from './browser-host'\nexport type { CreateBrowserPortsOptions } from './browser-host'\nexport { createBrowserLibLoader, DEFAULT_CDN_BASE } from './cad-runtime/browser-lib-loader'\nexport type {\n BrowserLibLoader, BrowserLibMeta, CreateBrowserLibLoaderOptions,\n} from './cad-runtime/browser-lib-loader'\nexport { BrowserEventSink } from './browser-host/browser-event-sink'\nexport { BrowserFontProvider } from './browser-host/browser-font-provider'\nexport type { BrowserFontProviderOptions } from './browser-host/browser-font-provider'\nexport { FetchAssetResolver } from './browser-host/fetch-asset-resolver'\nexport type { FetchAssetResolverOptions } from './browser-host/fetch-asset-resolver'\n\n// ── L3 API 面(api/ 层)──\nexport * from './api'\nexport { createApiNamespace } from './api/api-namespace'\n\n// ── Units ──\nexport {\n MM, CM, M, MICRON, INCH, FOOT, YARD,\n DEGREE, RADIAN,\n SCRIPT_UNIT_NAMES,\n} from './units'\nexport type { DimName, DimDecl, DimSpec, BaseDimension, UnitName } from './units'\n\n// ── 重名消歧:Vec3 双源(lang/types vs mesh/types),显式指定 lang 版 ──\nexport type { Vec3 } from './lang/types'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @faicad/faijs — Faicad CAD execution engine\n *\n * Public API umbrella entry. All exports are re-exports (no new signatures).\n * Organized by architecture layer (L0–L3); each layer consumes `export *` from\n * its sub-module index.ts, with explicit disambiguation for same-name types.\n */\n\n// ── 共享面(env-agnostic:identity + runtime-state + lang/*)──\nexport * from './env-agnostic'\n\n// ── L1 Mesh(types + knurl + decoration + manifold-loader + query + import-model)──\nexport * from './mesh'\n\n// ── L1 BREP(ops + chain + utils + export)──\nexport * from './brep'\nexport { buildStlBufferFromMesh } from './brep/export/stl'\nexport { exportStepFromSolid, exportStepFromSolids } from './brep/export/step'\nexport type { StepExportEntry } from './brep/export/step'\n\n// ── L1 Boolean/CSG ──\nexport * from './boolean'\n\n// ── L1 Primitives ──\nexport * from './primitives'\n\n// ── L1 SDF ──\nexport * from './sdf'\n\n// ── L1 Topology ──\nexport { TOPOLOGY_FACE_ID_NONE, buildFaceIdsForPart } from './topology/build-face-ids'\nexport {\n buildSelectorRuntime, buildSelectorRuntimeData, buildSelectorRuntimeMaps,\n} from './topology/build-selector-runtime'\nexport type { SelectorRuntimeData } from './topology/build-selector-runtime'\nexport type {\n SelectorRuntime, SelectorBundle, SelectorManifest, SelectorBuffers,\n FaceRow, EdgeRow, Reference,\n BufferViewDescriptor, SelectorProxy,\n} from './topology/types'\nexport * from './topology/naming'\n\n// ── L2 编排层 ──\n// createRuntime auto-registers the built-in cad namespace (D1, facade-refactor\n// 2026-10-08). Use createBareRuntime for a pure engine without cad.\nexport { CadRuntime, createRuntime, createBareRuntime, computeContentKey, AppendPrefixError } from './cad-runtime/runtime'\nexport { createPreviewExec } from './cad-runtime/preview-exec'\nexport type { PreviewExec } from './cad-runtime/preview-exec'\nexport type { ExecutionResult, ExecuteOptions, CheckResult, CheckError, CadRuntimeOptions, PartTopology, TopologySource } from './cad-runtime/runtime'\nexport type {\n HostPorts, CsgBackend, SdfBackend, FontProvider, TextureSampler,\n AssetResolver, EventSink, ExecutionMode, HostEnv,\n MeshData, PlaneParams, SplitResult as CsgSplitResult,\n DovetailGrooveParams as PortDovetailGrooveParams,\n DowelSplitParams as PortDowelSplitParams,\n StraightTenonSplitParams as PortStraightTenonSplitParams,\n LibLoader, ProjectLoader,\n} from './cad-runtime/ports'\n// 两级声明契约(2026-10-14 §3.3):库级定位属性(`faijs.lib`)+ 函数级实现事实\n// (`fn.engines`)。`LibLoader.libMetaFor` / `registerLib({ lib, peers })` 的声明形状。\nexport { LIB_ROLES, assertLibDecl, resolveFunctionEngines } from './cad-runtime/lib-decl'\nexport type {\n LibRole, LibDecl, LibMeta,\n LibFunctionView, LibDescription, LibCallableView, LibRejectedView, LibsUnderEngine,\n} from './cad-runtime/lib-decl'\n\n// ── OCCT Kernel ──\nexport {\n initOcctWasm, getOcctKernel, disposeOcctWasm, setOcctWasmInitFn,\n computeEffectiveDeflection, importStepToMesh, importBrepToMesh,\n meshesToStep, releaseShape,\n importAssemblyFromStep, releaseAssemblyTree, collectLeafParts,\n} from './occt-kernel/occtKernel'\nexport type {\n WasmTessellatedMesh, WasmImportResult, AssemblyPartNode,\n MeshDeflectionOptions, ShapeHandle, OcctKernel,\n Mesh, EdgeData, SurfaceKind, CurveKind,\n} from './occt-kernel/occtKernel'\n\n// ── OCCT Mesh Reconstruct ──\nexport { reconstructSolidFromMesh, meshToAsciiStl, cadShapeIsValid, meshToStepBrep } from './occt-kernel/meshReconstruct'\n\n// ── OCCT 高层导出(多实体、零 fuse) ──\nexport { exportStepFromSolidsHighLevel } from './occt-kernel/highLevelApi'\n\n// ── OCCT Topology Extension ──\nexport { buildSelectorManifest, buildAssemblySelectorManifest, buildTopologyAdjacency } from './occt-kernel/topologyExt'\nexport type { SelectorManifestInput, PartTopologyInput, AssemblyTopologyResult, TopologyAdjacency } from './occt-kernel/topologyExt'\n\n// ── BREP 引擎注册(宿主装配;引擎可切换——occt 只是默认实现) ──\nexport { registerOcctBrepEngine, OCCT_BREP_ENGINE_ID } from './brep/engine/adapters/occt'\nexport { registerBrepMockEngine, BREP_MOCK_ENGINE_ID, createBrepMockApi } from './brep/engine/adapters/brep-mock'\n// brepkit 端侧 BREP 引擎(微信小程序等无 OCCT 环境):由宿主注入 wasm init 并抢先注册,\n// 使 ensureBrepChain 不回退 OCCT。setBrepkitWasmInitFn 注入自定义初始化(如 WXWebAssembly 实例化)。\nexport { registerBrepkitBrepEngine, BREPKIT_BREP_ENGINE_ID, ensureBrepkitDefaultEngine } from './brep/engine/adapters/brepkit'\n// brepkit 网格实体后端(网格语义路径;与 BREP 槽独立注册)。装了它,`cad.load`\n// 的 STL/3MF 路径才产出「网格实体 + 近似拓扑」;不装则维持裸网格的历史行为。\nexport { registerBrepkitMeshEngine, BREPKIT_MESH_ENGINE_ID, ensureBrepkitMeshBackend } from './brep/engine/adapters/brepkit'\nexport { setBrepkitWasmInitFn, initBrepkitWasm, isBrepkitInitialized } from './brepkit-kernel/brepkitWasm'\nexport type { BrepKitKernel } from './brepkit-kernel/brepkitWasm'\n// brepkit 平台面(D3):平台特定代码访问 brepkit 独有能力的唯一出口——与 occt 侧\n// `getOcctKernel()` 对称。库代码 import 它即声明「这段代码只跑在 brepkit 引擎下」。\nexport { getBrepKitKernel } from './brepkit-kernel/brepkitKernel'\nexport {\n registerBrepEngine, getBrepEngine, getActiveBrepEngine, hasBrepEngine, getActiveBrepEngineId,\n registerMeshEngine, getMeshEngine, getActiveMeshEngine, getActiveMeshEngineId, freezeEngineRegistries,\n isMeshEngineRegistered, getMeshSolidBackend,\n} from './brep/engine/registry'\nexport type { BrepEngine, BrepEngineProvider, MeshEngine } from './brep/engine/registry'\n// 网格实体(近似拓扑的载体):端口 + 注册表 + 驱动。\nexport { MeshSolidRegistry, normalizeMeshSolid, describeMeshSolid, buildMeshSolidTopology, weldToleranceFor } from './brep/mesh-solid'\nexport type {\n MeshSolidBackend, MeshSolidResult, MeshSolidKernelOps, MeshSolidInput, MeshSolidNormalizeOptions,\n} from './brep/mesh-solid'\n// 槽位互斥不变量(分派前置校验;缺陷即报错)\nexport { assertShapeSlotExclusive } from './cad-runtime/backend-dispatch'\nexport type { BrepEngineApi } from './brep/engine/primitives'\nexport type {\n BrepHandle, BrepMeshResult, BrepBoundingBox, BrepVec3, BrepEvolutionKind,\n BrepEvolutionData, BrepXcafDocument,\n} from './brep/engine/types'\n\n// ── BREP Topology ──\nexport { buildSolidTopologyRuntime } from './brep/brep-topology'\nexport type { SolidTopologyResult } from './brep/brep-topology'\n\n// ── Font Registry (for browser host injection) ──\nexport { setFontLoader, getFontLoader, loadFont, ensureDefaultFont, ensureFont, getFont, clearFonts } from './brep/text/fontRegistry'\nexport type { FontLoader } from './brep/text/fontRegistry'\n\n// ── L3 Browser Host ──\nexport { createBrowserPorts } from './browser-host'\nexport type { CreateBrowserPortsOptions } from './browser-host'\nexport { createBrowserLibLoader, DEFAULT_CDN_BASE } from './cad-runtime/browser-lib-loader'\nexport type {\n BrowserLibLoader, BrowserLibMeta, CreateBrowserLibLoaderOptions,\n} from './cad-runtime/browser-lib-loader'\nexport { BrowserEventSink } from './browser-host/browser-event-sink'\nexport { BrowserFontProvider } from './browser-host/browser-font-provider'\nexport type { BrowserFontProviderOptions } from './browser-host/browser-font-provider'\nexport { FetchAssetResolver } from './browser-host/fetch-asset-resolver'\nexport type { FetchAssetResolverOptions } from './browser-host/fetch-asset-resolver'\n\n// ── L3 API 面(api/ 层)──\nexport * from './api'\nexport { createApiNamespace } from './api/api-namespace'\n\n// ── Units ──\nexport {\n MM, CM, M, MICRON, INCH, FOOT, YARD,\n DEGREE, RADIAN,\n SCRIPT_UNIT_NAMES,\n} from './units'\nexport type { DimName, DimDecl, DimSpec, BaseDimension, UnitName } from './units'\n\n// ── 重名消歧:Vec3 双源(lang/types vs mesh/types),显式指定 lang 版 ──\nexport type { Vec3 } from './lang/types'\n"]}
@@ -12,9 +12,9 @@
12
12
  * 生成文件:src/lang/symbol-table.generated.ts(由 scripts/gen-symbol-table.ts 生成,禁手改)。
13
13
  *
14
14
  * P5(2026-09-23 扩展库拆分):符号表额外接受**宿主注册的扩展条目**
15
- * (`registerSymbolTableEntries`)。扩展库(如 `@faicad/faijs-extra`)的 op 不在
16
- * 生成表里——生成表的唯一来源是 core 的 `createApiNamespace()` 平台面;扩展库由
17
- * 宿主在装配时注入名字清单,使静态分析同样能查到 `cad.fai_drill`。
15
+ * (`registerSymbolTableEntries`)。扩展库(如 `core/src/extra`)的 op 现已
16
+ * 在生成表里——生成表的来源是 core 的 `createApiNamespace()` 完整 cad 面(平台 +
17
+ * sketch + extra);静态分析可直接查到 `cad.fai_drill` 等全部 op。
18
18
  * 扩展条目**不得**覆盖平台函数(真重名即抛错,不静默覆盖)。
19
19
  */
20
20
  /** 符号表条目(keep-syntax P1 后为空对象占位,仅承载键存在性)。 */
@@ -115,6 +115,16 @@ declare const _default: {
115
115
  import_step: {};
116
116
  compound: {};
117
117
  place: {};
118
+ sketch: {};
119
+ fai_drill: {};
120
+ fai_extrude: {};
121
+ fai_split: {};
122
+ group: {};
123
+ assembly: {};
124
+ copy: {};
125
+ load: {};
126
+ text: {};
127
+ svgExtrude: {};
118
128
  cut: {};
119
129
  split: {};
120
130
  linearPattern: {};
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAwJC"}
1
+ {"version":3,"file":"symbol-table.generated.d.ts","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAkKC"}
@@ -115,6 +115,16 @@ export default {
115
115
  "import_step": {},
116
116
  "compound": {},
117
117
  "place": {},
118
+ "sketch": {},
119
+ "fai_drill": {},
120
+ "fai_extrude": {},
121
+ "fai_split": {},
122
+ "group": {},
123
+ "assembly": {},
124
+ "copy": {},
125
+ "load": {},
126
+ "text": {},
127
+ "svgExtrude": {},
118
128
  "cut": {},
119
129
  "split": {},
120
130
  "linearPattern": {},
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.generated.js","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * symbol-table 生成文件 — 禁手改。\n * 由 scripts/gen-symbol-table.ts 从 api-namespace 的 cad 命名空间生成(键存在性)。\n * keep-syntax P1 后符号表只承载 check() 符号检查(\"函数不存在\"判定);\n * 保留语义由 keep 声明表达,不再有 readonly 标注。\n */\nexport default {\n \"box\": {},\n \"sphere\": {},\n \"cylinder\": {},\n \"cone\": {},\n \"wedge\": {},\n \"screw\": {},\n \"profile\": {},\n \"sketchOnPlane\": {},\n \"sketchOnFace\": {},\n \"sketchOnSurface\": {},\n \"punchHole\": {},\n \"wire\": {},\n \"helix\": {},\n \"sdf\": {},\n \"translate\": {},\n \"rotate_euler\": {},\n \"scale\": {},\n \"scale3d\": {},\n \"engrave\": {},\n \"chamfer\": {},\n \"fillet\": {},\n \"knurl\": {},\n \"shell\": {},\n \"draft\": {},\n \"thicken\": {},\n \"filletVariable\": {},\n \"splitByPlane\": {},\n \"sectionByPlane\": {},\n \"defeature\": {},\n \"reverseShape\": {},\n \"unifySameDomain\": {},\n \"sew\": {},\n \"sewAndSolidify\": {},\n \"removeHolesFromFace\": {},\n \"union\": {},\n \"subtract\": {},\n \"intersect\": {},\n \"extrude\": {},\n \"revolve\": {},\n \"sweep\": {},\n \"sweepAdvanced\": {},\n \"loft\": {},\n \"loftAdvanced\": {},\n \"surface\": {},\n \"offset2d\": {},\n \"solidFromFaces\": {},\n \"halfSpace\": {},\n \"exportStl\": {},\n \"exportBrep\": {},\n \"exportStep\": {},\n \"export3mf\": {},\n \"isEdge\": {},\n \"isFace\": {},\n \"isShell\": {},\n \"isVertex\": {},\n \"isWire\": {},\n \"isCompound\": {},\n \"isCompSolid\": {},\n \"isEqual\": {},\n \"toSVG\": {},\n \"toMultiviewSVG\": {},\n \"toPNG\": {},\n \"toMultiviewPNG\": {},\n \"edge\": {},\n \"circleArc\": {},\n \"ellipseEdge\": {},\n \"ellipseArc\": {},\n \"tangentArc\": {},\n \"approximatePoints\": {},\n \"interpolateWithTangents\": {},\n \"curveDegreeElevate\": {},\n \"curveKnotInsert\": {},\n \"curveKnotRemove\": {},\n \"curveIsPeriodic\": {},\n \"faceOnSurface\": {},\n \"nonPlanarFace\": {},\n \"makeSolid\": {},\n \"reverseSurfaceU\": {},\n \"outerWire\": {},\n \"draftPrism\": {},\n \"pipe\": {},\n \"containsPoint\": {},\n \"distanceBetween\": {},\n \"inertia\": {},\n \"linearCenterOfMass\": {},\n \"projectPointOnEdge\": {},\n \"projectPointOnFace\": {},\n \"classifyPointOnFace\": {},\n \"uvFromPoint\": {},\n \"vertexPosition\": {},\n \"subShapeCount\": {},\n \"iterShapes\": {},\n \"liftCurve2d\": {},\n \"commonCells\": {},\n \"boolean\": {},\n \"alignTo\": {},\n \"faceNormal\": {},\n \"bboxCenter\": {},\n \"bboxMin\": {},\n \"bboxMax\": {},\n \"edgeRef\": {},\n \"faceRef\": {},\n \"jointTrajectory\": {},\n \"inverseKinematics\": {},\n \"mechanismDOF\": {},\n \"asset\": {},\n \"import_brep\": {},\n \"import_step\": {},\n \"compound\": {},\n \"place\": {},\n \"cut\": {},\n \"split\": {},\n \"linearPattern\": {},\n \"circularPattern\": {},\n \"gridPattern\": {},\n \"rectangularPattern\": {},\n \"mirrorJoin\": {},\n \"mirror\": {},\n \"clone\": {},\n \"torus\": {},\n \"fuse\": {},\n \"inspectMassProps\": {},\n \"area\": {},\n \"length\": {},\n \"volume\": {},\n \"centerOfMass\": {},\n \"viewCamera\": {},\n \"projectView\": {},\n \"projectSheet\": {},\n \"complexExtrude\": {},\n \"twistExtrude\": {},\n \"roof\": {},\n \"drill\": {},\n \"pocket\": {},\n \"boss\": {},\n \"thread\": {},\n \"convexHull\": {},\n \"makeBaseBox\": {},\n \"ellipsoid\": {},\n \"rotate\": {},\n \"applyMatrix\": {},\n \"locate\": {},\n \"offset\": {},\n \"heal\": {},\n \"simplify\": {},\n \"isValid\": {},\n \"isSameShape\": {},\n \"autoHeal\": {},\n \"fixShape\": {},\n \"healSolid\": {},\n \"fixSelfIntersection\": {}\n}\n"]}
1
+ {"version":3,"file":"symbol-table.generated.js","sourceRoot":"","sources":["../../src/lang/symbol-table.generated.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * symbol-table 生成文件 — 禁手改。\n * 由 scripts/gen-symbol-table.ts 从 api-namespace 的 cad 命名空间生成(键存在性)。\n * keep-syntax P1 后符号表只承载 check() 符号检查(\"函数不存在\"判定);\n * 保留语义由 keep 声明表达,不再有 readonly 标注。\n */\nexport default {\n \"box\": {},\n \"sphere\": {},\n \"cylinder\": {},\n \"cone\": {},\n \"wedge\": {},\n \"screw\": {},\n \"profile\": {},\n \"sketchOnPlane\": {},\n \"sketchOnFace\": {},\n \"sketchOnSurface\": {},\n \"punchHole\": {},\n \"wire\": {},\n \"helix\": {},\n \"sdf\": {},\n \"translate\": {},\n \"rotate_euler\": {},\n \"scale\": {},\n \"scale3d\": {},\n \"engrave\": {},\n \"chamfer\": {},\n \"fillet\": {},\n \"knurl\": {},\n \"shell\": {},\n \"draft\": {},\n \"thicken\": {},\n \"filletVariable\": {},\n \"splitByPlane\": {},\n \"sectionByPlane\": {},\n \"defeature\": {},\n \"reverseShape\": {},\n \"unifySameDomain\": {},\n \"sew\": {},\n \"sewAndSolidify\": {},\n \"removeHolesFromFace\": {},\n \"union\": {},\n \"subtract\": {},\n \"intersect\": {},\n \"extrude\": {},\n \"revolve\": {},\n \"sweep\": {},\n \"sweepAdvanced\": {},\n \"loft\": {},\n \"loftAdvanced\": {},\n \"surface\": {},\n \"offset2d\": {},\n \"solidFromFaces\": {},\n \"halfSpace\": {},\n \"exportStl\": {},\n \"exportBrep\": {},\n \"exportStep\": {},\n \"export3mf\": {},\n \"isEdge\": {},\n \"isFace\": {},\n \"isShell\": {},\n \"isVertex\": {},\n \"isWire\": {},\n \"isCompound\": {},\n \"isCompSolid\": {},\n \"isEqual\": {},\n \"toSVG\": {},\n \"toMultiviewSVG\": {},\n \"toPNG\": {},\n \"toMultiviewPNG\": {},\n \"edge\": {},\n \"circleArc\": {},\n \"ellipseEdge\": {},\n \"ellipseArc\": {},\n \"tangentArc\": {},\n \"approximatePoints\": {},\n \"interpolateWithTangents\": {},\n \"curveDegreeElevate\": {},\n \"curveKnotInsert\": {},\n \"curveKnotRemove\": {},\n \"curveIsPeriodic\": {},\n \"faceOnSurface\": {},\n \"nonPlanarFace\": {},\n \"makeSolid\": {},\n \"reverseSurfaceU\": {},\n \"outerWire\": {},\n \"draftPrism\": {},\n \"pipe\": {},\n \"containsPoint\": {},\n \"distanceBetween\": {},\n \"inertia\": {},\n \"linearCenterOfMass\": {},\n \"projectPointOnEdge\": {},\n \"projectPointOnFace\": {},\n \"classifyPointOnFace\": {},\n \"uvFromPoint\": {},\n \"vertexPosition\": {},\n \"subShapeCount\": {},\n \"iterShapes\": {},\n \"liftCurve2d\": {},\n \"commonCells\": {},\n \"boolean\": {},\n \"alignTo\": {},\n \"faceNormal\": {},\n \"bboxCenter\": {},\n \"bboxMin\": {},\n \"bboxMax\": {},\n \"edgeRef\": {},\n \"faceRef\": {},\n \"jointTrajectory\": {},\n \"inverseKinematics\": {},\n \"mechanismDOF\": {},\n \"asset\": {},\n \"import_brep\": {},\n \"import_step\": {},\n \"compound\": {},\n \"place\": {},\n \"sketch\": {},\n \"fai_drill\": {},\n \"fai_extrude\": {},\n \"fai_split\": {},\n \"group\": {},\n \"assembly\": {},\n \"copy\": {},\n \"load\": {},\n \"text\": {},\n \"svgExtrude\": {},\n \"cut\": {},\n \"split\": {},\n \"linearPattern\": {},\n \"circularPattern\": {},\n \"gridPattern\": {},\n \"rectangularPattern\": {},\n \"mirrorJoin\": {},\n \"mirror\": {},\n \"clone\": {},\n \"torus\": {},\n \"fuse\": {},\n \"inspectMassProps\": {},\n \"area\": {},\n \"length\": {},\n \"volume\": {},\n \"centerOfMass\": {},\n \"viewCamera\": {},\n \"projectView\": {},\n \"projectSheet\": {},\n \"complexExtrude\": {},\n \"twistExtrude\": {},\n \"roof\": {},\n \"drill\": {},\n \"pocket\": {},\n \"boss\": {},\n \"thread\": {},\n \"convexHull\": {},\n \"makeBaseBox\": {},\n \"ellipsoid\": {},\n \"rotate\": {},\n \"applyMatrix\": {},\n \"locate\": {},\n \"offset\": {},\n \"heal\": {},\n \"simplify\": {},\n \"isValid\": {},\n \"isSameShape\": {},\n \"autoHeal\": {},\n \"fixShape\": {},\n \"healSolid\": {},\n \"fixSelfIntersection\": {}\n}\n"]}
@@ -12,9 +12,9 @@
12
12
  * 生成文件:src/lang/symbol-table.generated.ts(由 scripts/gen-symbol-table.ts 生成,禁手改)。
13
13
  *
14
14
  * P5(2026-09-23 扩展库拆分):符号表额外接受**宿主注册的扩展条目**
15
- * (`registerSymbolTableEntries`)。扩展库(如 `@faicad/faijs-extra`)的 op 不在
16
- * 生成表里——生成表的唯一来源是 core 的 `createApiNamespace()` 平台面;扩展库由
17
- * 宿主在装配时注入名字清单,使静态分析同样能查到 `cad.fai_drill`。
15
+ * (`registerSymbolTableEntries`)。扩展库(如 `core/src/extra`)的 op 现已
16
+ * 在生成表里——生成表的来源是 core 的 `createApiNamespace()` 完整 cad 面(平台 +
17
+ * sketch + extra);静态分析可直接查到 `cad.fai_drill` 等全部 op。
18
18
  * 扩展条目**不得**覆盖平台函数(真重名即抛错,不静默覆盖)。
19
19
  */
20
20
  import symbolTable from './symbol-table.generated.js';
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-table.js","sourceRoot":"","sources":["../../src/lang/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAQlD,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAgB,WAA0B,CAAA;AAEnE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA0B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAwB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,GAAG,CAAC,CAAA;QACzF,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAwB;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC","sourcesContent":["/**\n * symbol-table — 标准库符号表类型与消费入口(L0 零依赖)\n *\n *\n * 符号表是\"标准库符号表\"(正常语言编译器认识 prelude 的同款机制),\n * 机器生成、均匀查询。keep-syntax P1 之后它只承载一个职责:\n * check() 符号检查判定 callee 是否存在(\"函数不存在\"诊断)。\n * 保留语义(readonlyPositions/readonlyPaths)已删除——保留由 keep 声明\n * (调用点 keep / 函数体 exec.keep)显式表达,不再靠类型标注提取(R7)。\n * 未知第三方函数不在表中时,check() 报\"函数不存在\",其它机制不受影响。\n *\n * 生成文件:src/lang/symbol-table.generated.ts(由 scripts/gen-symbol-table.ts 生成,禁手改)。\n *\n * P5(2026-09-23 扩展库拆分):符号表额外接受**宿主注册的扩展条目**\n * (`registerSymbolTableEntries`)。扩展库(如 `@faicad/faijs-extra`)的 op 不在\n * 生成表里——生成表的唯一来源是 core 的 `createApiNamespace()` 平台面;扩展库由\n * 宿主在装配时注入名字清单,使静态分析同样能查到 `cad.fai_drill`。\n * 扩展条目**不得**覆盖平台函数(真重名即抛错,不静默覆盖)。\n */\n\nimport symbolTable from './symbol-table.generated'\n\n/** 符号表条目(keep-syntax P1 后为空对象占位,仅承载键存在性)。 */\nexport type FunctionSymbol = Record<string, never>\n\n/** 标准库符号表:callee → 条目。均匀数据,无 per-函数代码。 */\nexport type SymbolTable = Record<string, FunctionSymbol>\n\n/** 生成的符号表(禁手改,由 scripts/gen-symbol-table.ts 生成) */\nexport const SYMBOL_TABLE: SymbolTable = symbolTable as SymbolTable\n\n/**\n * Host-registered extension entries (library namespaces outside core's platform\n * surface). Kept apart from `SYMBOL_TABLE` so \"platform surface\" stays\n * machine-derivable from the generated table alone.\n */\nconst extensionEntries = new Map<string, FunctionSymbol>()\n\n/**\n * Register library function names in the symbol table (P5).\n *\n * Idempotent for names already registered as extensions; throws when a name\n * collides with a platform function, because a silent override would let a\n * library shadow the platform surface in static analysis.\n *\n * @param names - the library's function names (`cad.<name>`).\n * @throws when a name is already a platform function of the generated table.\n */\nexport function registerSymbolTableEntries(names: readonly string[]): void {\n for (const name of names) {\n if (Object.prototype.hasOwnProperty.call(SYMBOL_TABLE, name)) {\n throw new Error(`[faijs] symbol-table extension redefines platform function \"${name}\"`)\n }\n extensionEntries.set(name, {})\n }\n}\n\n/**\n * Remove previously registered extension entries (host unloads a library).\n * Unknown names are ignored.\n *\n * @param names - the function names to unregister.\n */\nexport function unregisterSymbolTableEntries(names: readonly string[]): void {\n for (const name of names) extensionEntries.delete(name)\n}\n\n/**\n * All callee names known to the symbol table: the generated platform table plus\n * the registered extension entries.\n *\n * @returns the union of platform and extension names, platform first.\n */\nexport function symbolTableNames(): string[] {\n return [...new Set([...Object.keys(SYMBOL_TABLE), ...extensionEntries.keys()])]\n}\n\n/**\n * Look up a callee in the standard-library symbol table. Unknown functions\n * (absent from the table) return undefined, which check() reports as\n * \"function does not exist\".\n * @param callee - the callee name to look up.\n * @returns the matching symbol-table entry, or undefined when unknown.\n */\nexport function getFunctionSymbol(callee: string): FunctionSymbol | undefined {\n return SYMBOL_TABLE[callee] ?? extensionEntries.get(callee)\n}\n"]}
1
+ {"version":3,"file":"symbol-table.js","sourceRoot":"","sources":["../../src/lang/symbol-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAQlD,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAgB,WAA0B,CAAA;AAEnE;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA0B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAwB;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,GAAG,CAAC,CAAA;QACzF,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAAwB;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC","sourcesContent":["/**\n * symbol-table — 标准库符号表类型与消费入口(L0 零依赖)\n *\n *\n * 符号表是\"标准库符号表\"(正常语言编译器认识 prelude 的同款机制),\n * 机器生成、均匀查询。keep-syntax P1 之后它只承载一个职责:\n * check() 符号检查判定 callee 是否存在(\"函数不存在\"诊断)。\n * 保留语义(readonlyPositions/readonlyPaths)已删除——保留由 keep 声明\n * (调用点 keep / 函数体 exec.keep)显式表达,不再靠类型标注提取(R7)。\n * 未知第三方函数不在表中时,check() 报\"函数不存在\",其它机制不受影响。\n *\n * 生成文件:src/lang/symbol-table.generated.ts(由 scripts/gen-symbol-table.ts 生成,禁手改)。\n *\n * P5(2026-09-23 扩展库拆分):符号表额外接受**宿主注册的扩展条目**\n * (`registerSymbolTableEntries`)。扩展库(如 `core/src/extra`)的 op 现已\n * 在生成表里——生成表的来源是 core 的 `createApiNamespace()` 完整 cad 面(平台 +\n * sketch + extra);静态分析可直接查到 `cad.fai_drill` 等全部 op。\n * 扩展条目**不得**覆盖平台函数(真重名即抛错,不静默覆盖)。\n */\n\nimport symbolTable from './symbol-table.generated'\n\n/** 符号表条目(keep-syntax P1 后为空对象占位,仅承载键存在性)。 */\nexport type FunctionSymbol = Record<string, never>\n\n/** 标准库符号表:callee → 条目。均匀数据,无 per-函数代码。 */\nexport type SymbolTable = Record<string, FunctionSymbol>\n\n/** 生成的符号表(禁手改,由 scripts/gen-symbol-table.ts 生成) */\nexport const SYMBOL_TABLE: SymbolTable = symbolTable as SymbolTable\n\n/**\n * Host-registered extension entries (library namespaces outside core's platform\n * surface). Kept apart from `SYMBOL_TABLE` so \"platform surface\" stays\n * machine-derivable from the generated table alone.\n */\nconst extensionEntries = new Map<string, FunctionSymbol>()\n\n/**\n * Register library function names in the symbol table (P5).\n *\n * Idempotent for names already registered as extensions; throws when a name\n * collides with a platform function, because a silent override would let a\n * library shadow the platform surface in static analysis.\n *\n * @param names - the library's function names (`cad.<name>`).\n * @throws when a name is already a platform function of the generated table.\n */\nexport function registerSymbolTableEntries(names: readonly string[]): void {\n for (const name of names) {\n if (Object.prototype.hasOwnProperty.call(SYMBOL_TABLE, name)) {\n throw new Error(`[faijs] symbol-table extension redefines platform function \"${name}\"`)\n }\n extensionEntries.set(name, {})\n }\n}\n\n/**\n * Remove previously registered extension entries (host unloads a library).\n * Unknown names are ignored.\n *\n * @param names - the function names to unregister.\n */\nexport function unregisterSymbolTableEntries(names: readonly string[]): void {\n for (const name of names) extensionEntries.delete(name)\n}\n\n/**\n * All callee names known to the symbol table: the generated platform table plus\n * the registered extension entries.\n *\n * @returns the union of platform and extension names, platform first.\n */\nexport function symbolTableNames(): string[] {\n return [...new Set([...Object.keys(SYMBOL_TABLE), ...extensionEntries.keys()])]\n}\n\n/**\n * Look up a callee in the standard-library symbol table. Unknown functions\n * (absent from the table) return undefined, which check() reports as\n * \"function does not exist\".\n * @param callee - the callee name to look up.\n * @returns the matching symbol-table entry, or undefined when unknown.\n */\nexport function getFunctionSymbol(callee: string): FunctionSymbol | undefined {\n return SYMBOL_TABLE[callee] ?? extensionEntries.get(callee)\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * math3d — three.js math 子集的零依赖移植层(L0 数学层)。
3
3
  *
4
- * 用途:替换 core / `@faicad/faijs-extra` 对 three.js `Vector2` / `Vector3` /
4
+ * 用途:替换 core / `core/src/extra` 对 three.js `Vector2` / `Vector3` /
5
5
  * `Matrix4` / `Quaternion` / `Euler` / `Plane` / `Box3` 的依赖。所有类的公式与
6
6
  * 运算顺序逐行移植自 three r162(MIT License, © 2010-2024 three.js authors),
7
7
  * 由 `test/math3d/three-parity.test.ts` 逐位对照钉死。
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * math3d — three.js math 子集的零依赖移植层(L0 数学层)。
3
3
  *
4
- * 用途:替换 core / `@faicad/faijs-extra` 对 three.js `Vector2` / `Vector3` /
4
+ * 用途:替换 core / `core/src/extra` 对 three.js `Vector2` / `Vector3` /
5
5
  * `Matrix4` / `Quaternion` / `Euler` / `Plane` / `Box3` 的依赖。所有类的公式与
6
6
  * 运算顺序逐行移植自 three r162(MIT License, © 2010-2024 three.js authors),
7
7
  * 由 `test/math3d/three-parity.test.ts` 逐位对照钉死。
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/math3d/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAmB,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA","sourcesContent":["/**\n * math3d — three.js math 子集的零依赖移植层(L0 数学层)。\n *\n * 用途:替换 core / `@faicad/faijs-extra` 对 three.js `Vector2` / `Vector3` /\n * `Matrix4` / `Quaternion` / `Euler` / `Plane` / `Box3` 的依赖。所有类的公式与\n * 运算顺序逐行移植自 three r162(MIT License, © 2010-2024 three.js authors),\n * 由 `test/math3d/three-parity.test.ts` 逐位对照钉死。\n *\n * 与 `api/geom-types/vecOps.ts`(compat 面 tuple 纯函数,面向库开发者)职责分离:\n * 本层是 core 内部的 three 替换,不进入包级公开 API 面。\n */\n\nexport { Vec3 } from './Vec3'\nexport { Vec2 } from './Vec2'\nexport { Quat } from './Quat'\nexport { Mat4, type MatrixLike } from './Mat4'\nexport { Euler, type EulerOrder } from './Euler'\nexport { Plane } from './Plane'\nexport { Box3 } from './Box3'"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/math3d/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAmB,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAmB,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA","sourcesContent":["/**\n * math3d — three.js math 子集的零依赖移植层(L0 数学层)。\n *\n * 用途:替换 core / `core/src/extra` 对 three.js `Vector2` / `Vector3` /\n * `Matrix4` / `Quaternion` / `Euler` / `Plane` / `Box3` 的依赖。所有类的公式与\n * 运算顺序逐行移植自 three r162(MIT License, © 2010-2024 three.js authors),\n * 由 `test/math3d/three-parity.test.ts` 逐位对照钉死。\n *\n * 与 `api/geom-types/vecOps.ts`(compat 面 tuple 纯函数,面向库开发者)职责分离:\n * 本层是 core 内部的 three 替换,不进入包级公开 API 面。\n */\n\nexport { Vec3 } from './Vec3'\nexport { Vec2 } from './Vec2'\nexport { Quat } from './Quat'\nexport { Mat4, type MatrixLike } from './Mat4'\nexport { Euler, type EulerOrder } from './Euler'\nexport { Plane } from './Plane'\nexport { Box3 } from './Box3'"]}
@@ -17,9 +17,8 @@ import type { Shape, EngraveParams, KnurlParams } from './types.js';
17
17
  * position it onto a face, then run a boolean union (convex) or subtract
18
18
  * (concave).
19
19
  *
20
- * The decoration geometry itself comes from the host-installed provider
21
- * (`setEngraveDecorationProvider`) — three's `Shape`/`ExtrudeGeometry`/`SVGLoader`
22
- * chain belongs to `@faicad/faijs-extra`, not to the platform surface.
20
+ * The decoration geometry itself is produced internally (the text/SVG geometry
21
+ * chain was absorbed into core as `extra/mesh/engrave-decoration`).
23
22
  *
24
23
  * @param shape - the world-space target shape.
25
24
  * @param params - engrave parameters (text/svg, depth, face, mode).
@@ -1 +1 @@
1
- {"version":3,"file":"engrave.d.ts","sourceRoot":"","sources":["../../src/mesh/engrave.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CA0DjF;AAED;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CA4E7E"}
1
+ {"version":3,"file":"engrave.d.ts","sourceRoot":"","sources":["../../src/mesh/engrave.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAkDjF;AAED;;;;;;;;;GASG;AACH,wBAAsB,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CA4E7E"}