@faicad/faijs 0.33.2 → 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 +11 -4
  300. package/dist/node-host/cli.d.ts.map +1 -1
  301. package/dist/node-host/cli.js +53 -28
  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,188 @@
1
+ /**
2
+ * text-geometry — 文字几何创建(mesh 路径)
3
+ *
4
+ * 使用 opentype.js + OpenSans Regular 字体(与 BREP 路径统一)。
5
+ * 字体来源:fontRegistry(通过依赖注入的 FontLoader 加载)。
6
+ *
7
+ * 几何链:opentype Path → Contour[](共享 SVG 语法层折线化 + evenodd 分类,
8
+ * Y-down → Y-up 翻转)→ `extrudeShape`(core 自有,three-free)。
9
+ * 返回 core `Shape`(positions + indices + normals),由使用方自行转为
10
+ * 自己的渲染几何(如 3d_editor 的 BufferGeometry 适配层)。
11
+ */
12
+ import { ensureDefaultFont, getFont as getRegisteredFont } from '../../brep/text/fontRegistry.js';
13
+ import { parsePathToSubpaths, computeBBox, computeSignedArea, classifyNested, } from '../../primitives/svg/svg-path.js';
14
+ import { extrudeShape } from '../../mesh/meshdata/extrude.js';
15
+ // ── Font loading ──
16
+ /**
17
+ * Get the default opentype.js font (OpenSans Regular).
18
+ *
19
+ * Fetched from fontRegistry — the same font used by the BREP path
20
+ * (text-to-solid). The first call triggers a lazy ensureDefaultFont() load.
21
+ *
22
+ * @returns a promise resolving to the default opentype.js Font.
23
+ */
24
+ export async function getOpentypeFont() {
25
+ await ensureDefaultFont();
26
+ const font = getRegisteredFont('default');
27
+ if (!font) {
28
+ throw new Error('[text-geometry] Default font not loaded. ' +
29
+ 'Call setFontLoader() before using text functions.');
30
+ }
31
+ return font;
32
+ }
33
+ // ── opentype Path → Contours ──
34
+ /**
35
+ * 将 opentype.js Path 命令序列化为 SVG path `d` 字符串。
36
+ *
37
+ * opentype.js 的 glyph 轮廓可能不显式发出 `Z`(隐式闭合);SVG 语义中
38
+ * 每个 `M` 都开始新子路径、前一子路径隐式闭合。这里在非首个 `M` 前补 `Z`,
39
+ * 使折线化层获得显式闭合(与 three `Shape` 的隐式闭合语义一致)。
40
+ */
41
+ function pathToSvgD(path) {
42
+ const commands = path.commands;
43
+ const parts = [];
44
+ for (const cmd of commands) {
45
+ switch (cmd.type) {
46
+ case 'M':
47
+ if (parts.length > 0)
48
+ parts.push('Z');
49
+ parts.push(`M ${cmd.x},${cmd.y}`);
50
+ break;
51
+ case 'L':
52
+ parts.push(`L ${cmd.x},${cmd.y}`);
53
+ break;
54
+ case 'C':
55
+ parts.push(`C ${cmd.x1},${cmd.y1} ${cmd.x2},${cmd.y2} ${cmd.x},${cmd.y}`);
56
+ break;
57
+ case 'Q':
58
+ parts.push(`Q ${cmd.x1},${cmd.y1} ${cmd.x},${cmd.y}`);
59
+ break;
60
+ case 'Z':
61
+ parts.push('Z');
62
+ break;
63
+ }
64
+ }
65
+ // opentype.js 的 glyph 轮廓不显式发出 Z(隐式闭合,终点 = 起点):
66
+ // 末尾未闭合的子路径也必须闭合,否则会被折线化层判为开放轮廓而丢弃。
67
+ if (parts.length > 0 && !/Z$/.test(parts[parts.length - 1])) {
68
+ parts.push('Z');
69
+ }
70
+ return parts.join(' ');
71
+ }
72
+ /**
73
+ * 将 opentype.js Path 折线化并分类为 Y-up 平面轮廓(供 `extrudeShape` 消费)。
74
+ *
75
+ * opentype 字形坐标是 Y-down(canvas 惯例),与 SVG 一致;输出翻转至 Y-up,
76
+ * 与 BREP 文本路径(`core/brep/text/text-to-solid.ts`)的世界坐标约定一致。
77
+ *
78
+ * @param path - the opentype.js path to flatten.
79
+ * @param curveSegments - per-curve sampling segments (default 6).
80
+ * @returns the classified contours (Y-up).
81
+ */
82
+ export function opentypePathToContours(path, curveSegments = 6) {
83
+ const d = pathToSvgD(path);
84
+ const subpaths = parsePathToSubpaths(d, curveSegments);
85
+ const all = [];
86
+ for (const sp of subpaths) {
87
+ if (!sp.closed || Math.abs(sp.signedArea) < 1e-9 || sp.points.length < 3)
88
+ continue;
89
+ const flipped = sp.points.map((p) => ({ x: p.x, y: -p.y }));
90
+ all.push({
91
+ points: flipped,
92
+ bbox: computeBBox(flipped),
93
+ signedArea: computeSignedArea(flipped),
94
+ });
95
+ }
96
+ const groups = classifyNested(all);
97
+ return groups.map((g) => ({
98
+ outer: all[g.outerIdx].points,
99
+ holes: g.holes.map((h) => all[h].points),
100
+ }));
101
+ }
102
+ // ── Shape 居中(与既有 three 实现相同的布局语义) ──
103
+ /**
104
+ * X 居中、Y 底部对齐到 0、Z 居中(text 链的旧布局语义)。
105
+ * @param shape - 待居中的 Shape(positions 就地复制,不修改输入)。
106
+ * @returns 平移后的新 Shape(索引/法线不变)。
107
+ */
108
+ export function centerShapeXZBottom(shape) {
109
+ let minX = Infinity, maxX = -Infinity, minY = Infinity, maxZ = -Infinity;
110
+ for (let i = 0; i < shape.positions.length; i += 3) {
111
+ const x = shape.positions[i];
112
+ const y = shape.positions[i + 1];
113
+ const z = shape.positions[i + 2];
114
+ if (x < minX)
115
+ minX = x;
116
+ if (x > maxX)
117
+ maxX = x;
118
+ if (y < minY)
119
+ minY = y;
120
+ if (z > maxZ)
121
+ maxZ = z;
122
+ }
123
+ const cx = (minX + maxX) / 2;
124
+ const cz = maxZ / 2;
125
+ const dx = -cx;
126
+ const dy = -minY;
127
+ const dz = -cz;
128
+ const positions = new Float32Array(shape.positions.length);
129
+ for (let i = 0; i < shape.positions.length; i += 3) {
130
+ positions[i] = shape.positions[i] + dx;
131
+ positions[i + 1] = shape.positions[i + 1] + dy;
132
+ positions[i + 2] = shape.positions[i + 2] + dz;
133
+ }
134
+ return { ...shape, positions };
135
+ }
136
+ // ── Text geometry ──
137
+ /**
138
+ * Create text geometry centered in X/Z, extruded along +Z.
139
+ *
140
+ * Uses opentype.js font.getPath() → Contour[] → extrudeShape, flipping
141
+ * the opentype y-down axis to y-up. This is the same font source and the same
142
+ * axis convention as the BREP path (text-to-solid), ensuring both glyph and
143
+ * orientation consistency between the mesh and BREP paths.
144
+ *
145
+ * @param text Text string to render
146
+ * @param size Font size in mm
147
+ * @param depth Extrusion depth in mm
148
+ * @param font opentype.js Font object (from fontRegistry)
149
+ * @returns a promise resolving to the extruded text shape.
150
+ */
151
+ export async function createTextGeometry(text, size, depth, font) {
152
+ // Check for notdef glyphs (missing characters)
153
+ for (const ch of text) {
154
+ if (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r')
155
+ continue;
156
+ const glyph = font.charToGlyph(ch);
157
+ if (glyph.index === 0) {
158
+ throw new Error(`[text-geometry] Character "${ch}" (U+${ch.codePointAt(0).toString(16).toUpperCase()}) ` +
159
+ `not found in font. If it is a CJK character, a CJK font must be loaded.`);
160
+ }
161
+ }
162
+ const path = font.getPath(text, 0, 0, size);
163
+ const shape = opentypePathToGeometry(path, depth);
164
+ if (!shape) {
165
+ throw new Error(`[text-geometry] Failed to create geometry from text: "${text}"`);
166
+ }
167
+ return shape;
168
+ }
169
+ // ── opentype path → Shape ──
170
+ /**
171
+ * Convert an opentype.js Path to a core Shape.
172
+ *
173
+ * Path commands → Contour[] → extrudeShape. The result is centered in X and Z
174
+ * (bounding box center → origin) with Y aligned to its bottom edge.
175
+ *
176
+ * Exported for reuse by the CJK text path and 3d_editor preview layer.
177
+ *
178
+ * @param path - the opentype.js path to convert.
179
+ * @param depth - extrusion depth in mm.
180
+ * @returns the resulting Shape, or null when the path is empty.
181
+ */
182
+ export function opentypePathToGeometry(path, depth) {
183
+ const contours = opentypePathToContours(path, 6);
184
+ if (contours.length === 0)
185
+ return null;
186
+ return centerShapeXZBottom(extrudeShape(contours, depth));
187
+ }
188
+ //# sourceMappingURL=text-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-geometry.js","sourceRoot":"","sources":["../../../src/extra/extras/text-geometry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,iBAAiB,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,cAAc,GACf,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAK1D,qBAAqB;AAErB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,iBAAiB,EAAE,CAAA;IACzB,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,2CAA2C;YAC3C,mDAAmD,CACpD,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iCAAiC;AAEjC;;;;;;GAMG;AACH,SAAS,UAAU,CAAC,IAAU;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAyB,CAAA;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,GAAG;gBACN,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;gBACjC,MAAK;YACP,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzE,MAAK;YACP,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;gBACrD,MAAK;YACP,KAAK,GAAG;gBACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACf,MAAK;QACT,CAAC;IACH,CAAC;IACD,+CAA+C;IAC/C,oCAAoC;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAU,EAAE,aAAa,GAAG,CAAC;IAClE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;IAEtD,MAAM,GAAG,GAAwF,EAAE,CAAA;IACnG,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,SAAQ;QAClF,MAAM,OAAO,GAAgB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACxE,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;YAC1B,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC;SACvC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAClC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAqC;QAC5D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAqC,CAAC;KACxE,CAAC,CAAC,CAAA;AACL,CAAC;AAED,sCAAsC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY;IAC9C,IAAI,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAA;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAChC,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAA;IACnB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;IACd,MAAM,EAAE,GAAG,CAAC,IAAI,CAAA;IAChB,MAAM,EAAE,GAAG,CAAC,EAAE,CAAA;IACd,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;QACtC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;QAC9C,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAA;AAChC,CAAC;AAED,sBAAsB;AAEtB;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,IAAU;IAEV,+CAA+C;IAC/C,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;YAAE,SAAQ;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,8BAA8B,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI;gBACzF,yEAAyE,CAC1E,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,GAAG,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,8BAA8B;AAE9B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAU,EACV,KAAa;IAEb,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;AAC3D,CAAC","sourcesContent":["/**\n * text-geometry — 文字几何创建(mesh 路径)\n *\n * 使用 opentype.js + OpenSans Regular 字体(与 BREP 路径统一)。\n * 字体来源:fontRegistry(通过依赖注入的 FontLoader 加载)。\n *\n * 几何链:opentype Path → Contour[](共享 SVG 语法层折线化 + evenodd 分类,\n * Y-down → Y-up 翻转)→ `extrudeShape`(core 自有,three-free)。\n * 返回 core `Shape`(positions + indices + normals),由使用方自行转为\n * 自己的渲染几何(如 3d_editor 的 BufferGeometry 适配层)。\n */\n\nimport type { Font, Path, PathCommand } from 'opentype.js'\nimport { ensureDefaultFont, getFont as getRegisteredFont } from '../../brep/text/fontRegistry'\nimport {\n parsePathToSubpaths,\n computeBBox,\n computeSignedArea,\n classifyNested,\n} from '../../primitives/svg/svg-path'\nimport { extrudeShape } from '../../mesh/meshdata/extrude'\nimport type { Contour } from '../../mesh/meshdata/extrude'\nimport type { Shape } from '../../mesh/types'\nimport type { SvgPoint2 } from '../../primitives/svg/svg-path'\n\n// ── Font loading ──\n\n/**\n * Get the default opentype.js font (OpenSans Regular).\n *\n * Fetched from fontRegistry — the same font used by the BREP path\n * (text-to-solid). The first call triggers a lazy ensureDefaultFont() load.\n *\n * @returns a promise resolving to the default opentype.js Font.\n */\nexport async function getOpentypeFont(): Promise<Font> {\n await ensureDefaultFont()\n const font = getRegisteredFont('default')\n if (!font) {\n throw new Error(\n '[text-geometry] Default font not loaded. ' +\n 'Call setFontLoader() before using text functions.',\n )\n }\n return font\n}\n\n// ── opentype Path → Contours ──\n\n/**\n * 将 opentype.js Path 命令序列化为 SVG path `d` 字符串。\n *\n * opentype.js 的 glyph 轮廓可能不显式发出 `Z`(隐式闭合);SVG 语义中\n * 每个 `M` 都开始新子路径、前一子路径隐式闭合。这里在非首个 `M` 前补 `Z`,\n * 使折线化层获得显式闭合(与 three `Shape` 的隐式闭合语义一致)。\n */\nfunction pathToSvgD(path: Path): string {\n const commands = path.commands as PathCommand[]\n const parts: string[] = []\n for (const cmd of commands) {\n switch (cmd.type) {\n case 'M':\n if (parts.length > 0) parts.push('Z')\n parts.push(`M ${cmd.x},${cmd.y}`)\n break\n case 'L':\n parts.push(`L ${cmd.x},${cmd.y}`)\n break\n case 'C':\n parts.push(`C ${cmd.x1},${cmd.y1} ${cmd.x2},${cmd.y2} ${cmd.x},${cmd.y}`)\n break\n case 'Q':\n parts.push(`Q ${cmd.x1},${cmd.y1} ${cmd.x},${cmd.y}`)\n break\n case 'Z':\n parts.push('Z')\n break\n }\n }\n // opentype.js 的 glyph 轮廓不显式发出 Z(隐式闭合,终点 = 起点):\n // 末尾未闭合的子路径也必须闭合,否则会被折线化层判为开放轮廓而丢弃。\n if (parts.length > 0 && !/Z$/.test(parts[parts.length - 1])) {\n parts.push('Z')\n }\n return parts.join(' ')\n}\n\n/**\n * 将 opentype.js Path 折线化并分类为 Y-up 平面轮廓(供 `extrudeShape` 消费)。\n *\n * opentype 字形坐标是 Y-down(canvas 惯例),与 SVG 一致;输出翻转至 Y-up,\n * 与 BREP 文本路径(`core/brep/text/text-to-solid.ts`)的世界坐标约定一致。\n *\n * @param path - the opentype.js path to flatten.\n * @param curveSegments - per-curve sampling segments (default 6).\n * @returns the classified contours (Y-up).\n */\nexport function opentypePathToContours(path: Path, curveSegments = 6): Contour[] {\n const d = pathToSvgD(path)\n const subpaths = parsePathToSubpaths(d, curveSegments)\n\n const all: { points: SvgPoint2[]; bbox: ReturnType<typeof computeBBox>; signedArea: number }[] = []\n for (const sp of subpaths) {\n if (!sp.closed || Math.abs(sp.signedArea) < 1e-9 || sp.points.length < 3) continue\n const flipped: SvgPoint2[] = sp.points.map((p) => ({ x: p.x, y: -p.y }))\n all.push({\n points: flipped,\n bbox: computeBBox(flipped),\n signedArea: computeSignedArea(flipped),\n })\n }\n\n const groups = classifyNested(all)\n return groups.map((g) => ({\n outer: all[g.outerIdx].points as unknown as Contour['outer'],\n holes: g.holes.map((h) => all[h].points as unknown as Contour['outer']),\n }))\n}\n\n// ── Shape 居中(与既有 three 实现相同的布局语义) ──\n\n/**\n * X 居中、Y 底部对齐到 0、Z 居中(text 链的旧布局语义)。\n * @param shape - 待居中的 Shape(positions 就地复制,不修改输入)。\n * @returns 平移后的新 Shape(索引/法线不变)。\n */\nexport function centerShapeXZBottom(shape: Shape): Shape {\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxZ = -Infinity\n for (let i = 0; i < shape.positions.length; i += 3) {\n const x = shape.positions[i]\n const y = shape.positions[i + 1]\n const z = shape.positions[i + 2]\n if (x < minX) minX = x\n if (x > maxX) maxX = x\n if (y < minY) minY = y\n if (z > maxZ) maxZ = z\n }\n const cx = (minX + maxX) / 2\n const cz = maxZ / 2\n const dx = -cx\n const dy = -minY\n const dz = -cz\n const positions = new Float32Array(shape.positions.length)\n for (let i = 0; i < shape.positions.length; i += 3) {\n positions[i] = shape.positions[i] + dx\n positions[i + 1] = shape.positions[i + 1] + dy\n positions[i + 2] = shape.positions[i + 2] + dz\n }\n return { ...shape, positions }\n}\n\n// ── Text geometry ──\n\n/**\n * Create text geometry centered in X/Z, extruded along +Z.\n *\n * Uses opentype.js font.getPath() → Contour[] → extrudeShape, flipping\n * the opentype y-down axis to y-up. This is the same font source and the same\n * axis convention as the BREP path (text-to-solid), ensuring both glyph and\n * orientation consistency between the mesh and BREP paths.\n *\n * @param text Text string to render\n * @param size Font size in mm\n * @param depth Extrusion depth in mm\n * @param font opentype.js Font object (from fontRegistry)\n * @returns a promise resolving to the extruded text shape.\n */\nexport async function createTextGeometry(\n text: string,\n size: number,\n depth: number,\n font: Font,\n): Promise<Shape> {\n // Check for notdef glyphs (missing characters)\n for (const ch of text) {\n if (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') continue\n const glyph = font.charToGlyph(ch)\n if (glyph.index === 0) {\n throw new Error(\n `[text-geometry] Character \"${ch}\" (U+${ch.codePointAt(0)!.toString(16).toUpperCase()}) ` +\n `not found in font. If it is a CJK character, a CJK font must be loaded.`,\n )\n }\n }\n\n const path = font.getPath(text, 0, 0, size)\n const shape = opentypePathToGeometry(path, depth)\n if (!shape) {\n throw new Error(`[text-geometry] Failed to create geometry from text: \"${text}\"`)\n }\n return shape\n}\n\n// ── opentype path → Shape ──\n\n/**\n * Convert an opentype.js Path to a core Shape.\n *\n * Path commands → Contour[] → extrudeShape. The result is centered in X and Z\n * (bounding box center → origin) with Y aligned to its bottom edge.\n *\n * Exported for reuse by the CJK text path and 3d_editor preview layer.\n *\n * @param path - the opentype.js path to convert.\n * @param depth - extrusion depth in mm.\n * @returns the resulting Shape, or null when the path is empty.\n */\nexport function opentypePathToGeometry(\n path: Path,\n depth: number,\n): Shape | null {\n const contours = opentypePathToContours(path, 6)\n if (contours.length === 0) return null\n return centerShapeXZBottom(extrudeShape(contours, depth))\n}\n"]}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @faicad/faijs/extra — editor extension ops for faijs.
3
+ *
4
+ * Carries the ops and preview helpers that serve the editor application but
5
+ * are now part of the cad namespace (fully assembled inside
6
+ * `createApiNamespace()`):
7
+ *
8
+ * - A group (editor ops): `fai_drill` / `fai_extrude` / `fai_split`,
9
+ * `group` / `assembly`, `copy`, `load`.
10
+ * - B group (svg / 3D text): `text`, `svgExtrude` plus the preview helpers
11
+ * `svgToExtrudedGeometry` / `parseSvgShapes` / `extrudeShapes` /
12
+ * `createTextGeometry` / `getOpentypeFont` / `opentypePathToGeometry` /
13
+ * `createMixedTextGeometry`.
14
+ *
15
+ * Hosts no longer need to merge/register these ops — `createRuntime(ports)`
16
+ * provides the full cad namespace. The `editor-ops` sub-entry remains for
17
+ * lightweight bundle closures.
18
+ */
19
+ export { ALL_EDITOR_OPS, CREATOR_OPS, EDITOR_OPS, isEditorOp, type CreatorOpName, type EditorOpName, } from './op-names.js';
20
+ export { fai_drill, assertDrillParams } from './ops/fai_drill.js';
21
+ export { fai_extrude, assertExtrudeParams } from './ops/fai_extrude.js';
22
+ export { fai_split } from './ops/fai_split.js';
23
+ export { group, assembly } from './ops/compound.js';
24
+ export type { GroupParams, AssemblyParams, AssemblyBehavior, AssemblyDecl } from './ops/compound.js';
25
+ export { copy } from './ops/copy.js';
26
+ export { load } from './ops/load.js';
27
+ export type { AssemblyConstraint, FaceMateConstraint, FaceMateFace, EntityRef, FaceRef, EdgeRef, AssemblyVec3, MateConstraint, AlignConstraint, CoincidentConstraint, ConcentricConstraint, DistanceConstraint, AngleConstraint, ParallelConstraint, PerpendicularConstraint, FixedConstraint, StructuralConstraint, } from '../api/assembly/types.js';
28
+ export type { AssemblySolveResult } from '../api/assembly/solve.js';
29
+ export { text, assertTextParams } from './ops/text.js';
30
+ export { svgExtrude, assertSvgExtrudeParams } from './ops/svg-extrude.js';
31
+ export { svgToExtrudedGeometry, parseSvgShapes, extrudeShapes, type SvgExtrudeOptions, } from './extras/svg-extrude.js';
32
+ export { createTextGeometry, getOpentypeFont, opentypePathToGeometry, } from './extras/text-geometry.js';
33
+ export { createMixedTextGeometry } from './extras/text-cjk.js';
34
+ export { createEngraveDecorationProvider } from './mesh/engrave-decoration.js';
35
+ export { split as meshSplit, splitWithParams, dovetailSplit, dowelSplit, tenonSplit, computeBasisFromNormal, } from './mesh/fai_split.js';
36
+ export { drill } from './mesh/fai_drill.js';
37
+ export { extrude as meshExtrude } from './mesh/fai_extrude.js';
38
+ export { text as meshText, svgExtrude as meshSvgExtrude } from './mesh/primitives.js';
39
+ export type { Shape, Vec3, BoundingBox, FaceDescriptor, TextParams, SvgExtrudeParams, DrillParams, ExtrudeParams, SplitPlane, SplitResult, DovetailSplitParams, DowelSplitParams, TenonSplitParams, } from '../mesh/types.js';
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EACnD,KAAK,aAAa,EAAE,KAAK,YAAY,GACtC,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAChD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,YAAY,EACV,kBAAkB,EAAE,kBAAkB,EAAE,YAAY,EACpD,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EACzC,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAC3E,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAChF,eAAe,EAAE,oBAAoB,GACtC,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAGhE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAGtE,OAAO,EACL,qBAAqB,EAAE,cAAc,EAAE,aAAa,EACpD,KAAK,iBAAiB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,GAC5D,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAG3E,OAAO,EACL,KAAK,IAAI,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAC1E,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClF,YAAY,EACV,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EACxC,UAAU,EAAE,gBAAgB,EAC5B,WAAW,EAAE,aAAa,EAC1B,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,GACjF,MAAM,eAAe,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @faicad/faijs/extra — editor extension ops for faijs.
3
+ *
4
+ * Carries the ops and preview helpers that serve the editor application but
5
+ * are now part of the cad namespace (fully assembled inside
6
+ * `createApiNamespace()`):
7
+ *
8
+ * - A group (editor ops): `fai_drill` / `fai_extrude` / `fai_split`,
9
+ * `group` / `assembly`, `copy`, `load`.
10
+ * - B group (svg / 3D text): `text`, `svgExtrude` plus the preview helpers
11
+ * `svgToExtrudedGeometry` / `parseSvgShapes` / `extrudeShapes` /
12
+ * `createTextGeometry` / `getOpentypeFont` / `opentypePathToGeometry` /
13
+ * `createMixedTextGeometry`.
14
+ *
15
+ * Hosts no longer need to merge/register these ops — `createRuntime(ports)`
16
+ * provides the full cad namespace. The `editor-ops` sub-entry remains for
17
+ * lightweight bundle closures.
18
+ */
19
+ export { ALL_EDITOR_OPS, CREATOR_OPS, EDITOR_OPS, isEditorOp, } from './op-names.js';
20
+ // ── A 组:编辑器 op 定义 ──
21
+ export { fai_drill, assertDrillParams } from './ops/fai_drill.js';
22
+ export { fai_extrude, assertExtrudeParams } from './ops/fai_extrude.js';
23
+ export { fai_split } from './ops/fai_split.js';
24
+ export { group, assembly } from './ops/compound.js';
25
+ export { copy } from './ops/copy.js';
26
+ export { load } from './ops/load.js';
27
+ // ── B 组:svg / 3D 文字 op ──
28
+ export { text, assertTextParams } from './ops/text.js';
29
+ export { svgExtrude, assertSvgExtrudeParams } from './ops/svg-extrude.js';
30
+ // ── B 组:预览辅助函数(宿主交互预览用,不提交几何)──
31
+ export { svgToExtrudedGeometry, parseSvgShapes, extrudeShapes, } from './extras/svg-extrude.js';
32
+ export { createTextGeometry, getOpentypeFont, opentypePathToGeometry, } from './extras/text-geometry.js';
33
+ export { createMixedTextGeometry } from './extras/text-cjk.js';
34
+ export { createEngraveDecorationProvider } from './mesh/engrave-decoration.js';
35
+ // ── mesh implementations (editor script face / previews; exported per module, no aggregate) ──
36
+ export { split as meshSplit, splitWithParams, dovetailSplit, dowelSplit, tenonSplit, computeBasisFromNormal, } from './mesh/fai_split.js';
37
+ export { drill } from './mesh/fai_drill.js';
38
+ export { extrude as meshExtrude } from './mesh/fai_extrude.js';
39
+ export { text as meshText, svgExtrude as meshSvgExtrude } from './mesh/primitives.js';
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,GAEpD,MAAM,YAAY,CAAA;AAEnB,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAUjC,2BAA2B;AAC3B,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAEtE,iCAAiC;AACjC,OAAO,EACL,qBAAqB,EAAE,cAAc,EAAE,aAAa,GAErD,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,GAC5D,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAE3E,gGAAgG;AAChG,OAAO,EACL,KAAK,IAAI,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAC1E,sBAAsB,GACvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAA","sourcesContent":["/**\n * @faicad/faijs/extra — editor extension ops for faijs.\n *\n * Carries the ops and preview helpers that serve the editor application but\n * are now part of the cad namespace (fully assembled inside\n * `createApiNamespace()`):\n *\n * - A group (editor ops): `fai_drill` / `fai_extrude` / `fai_split`,\n * `group` / `assembly`, `copy`, `load`.\n * - B group (svg / 3D text): `text`, `svgExtrude` plus the preview helpers\n * `svgToExtrudedGeometry` / `parseSvgShapes` / `extrudeShapes` /\n * `createTextGeometry` / `getOpentypeFont` / `opentypePathToGeometry` /\n * `createMixedTextGeometry`.\n *\n * Hosts no longer need to merge/register these ops — `createRuntime(ports)`\n * provides the full cad namespace. The `editor-ops` sub-entry remains for\n * lightweight bundle closures.\n */\nexport {\n ALL_EDITOR_OPS, CREATOR_OPS, EDITOR_OPS, isEditorOp,\n type CreatorOpName, type EditorOpName,\n} from './op-names'\n\n// ── A 组:编辑器 op 定义 ──\nexport { fai_drill, assertDrillParams } from './ops/fai_drill'\nexport { fai_extrude, assertExtrudeParams } from './ops/fai_extrude'\nexport { fai_split } from './ops/fai_split'\nexport { group, assembly } from './ops/compound'\nexport type { GroupParams, AssemblyParams, AssemblyBehavior, AssemblyDecl } from './ops/compound'\nexport { copy } from './ops/copy'\nexport { load } from './ops/load'\nexport type {\n AssemblyConstraint, FaceMateConstraint, FaceMateFace,\n EntityRef, FaceRef, EdgeRef, AssemblyVec3,\n MateConstraint, AlignConstraint, CoincidentConstraint, ConcentricConstraint,\n DistanceConstraint, AngleConstraint, ParallelConstraint, PerpendicularConstraint,\n FixedConstraint, StructuralConstraint,\n} from '../api/assembly/types'\nexport type { AssemblySolveResult } from '../api/assembly/solve'\n\n// ── B 组:svg / 3D 文字 op ──\nexport { text, assertTextParams } from './ops/text'\nexport { svgExtrude, assertSvgExtrudeParams } from './ops/svg-extrude'\n\n// ── B 组:预览辅助函数(宿主交互预览用,不提交几何)──\nexport {\n svgToExtrudedGeometry, parseSvgShapes, extrudeShapes,\n type SvgExtrudeOptions,\n} from './extras/svg-extrude'\nexport {\n createTextGeometry, getOpentypeFont, opentypePathToGeometry,\n} from './extras/text-geometry'\nexport { createMixedTextGeometry } from './extras/text-cjk'\nexport { createEngraveDecorationProvider } from './mesh/engrave-decoration'\n\n// ── mesh implementations (editor script face / previews; exported per module, no aggregate) ──\nexport {\n split as meshSplit, splitWithParams, dovetailSplit, dowelSplit, tenonSplit,\n computeBasisFromNormal,\n} from './mesh/fai_split'\nexport { drill } from './mesh/fai_drill'\nexport { extrude as meshExtrude } from './mesh/fai_extrude'\nexport { text as meshText, svgExtrude as meshSvgExtrude } from './mesh/primitives'\nexport type {\n Shape, Vec3, BoundingBox, FaceDescriptor,\n TextParams, SvgExtrudeParams,\n DrillParams, ExtrudeParams,\n SplitPlane, SplitResult, DovetailSplitParams, DowelSplitParams, TenonSplitParams,\n} from '../mesh/types'\n"]}
@@ -0,0 +1,94 @@
1
+ import { Vec3, Mat4, Box3 } from '../../../math3d/index.js';
2
+ import type { Shape } from '../../../mesh/types.js';
3
+ import type { DrillDirection, DrillHoleParams } from './drill-types.js';
4
+ /**
5
+ * Build a Z-up hole geometry centered on the origin, with the axial direction
6
+ * along Z.
7
+ *
8
+ * - simple: CylinderGeometry rotated to Z-up
9
+ * - screw: makeScrew() already returns Z-up
10
+ *
11
+ * Tolerance is applied as a radial expansion (tolerance/2 on radius).
12
+ *
13
+ * @param params - drill-hole parameters (type, diameter, screw details, tolerance).
14
+ * @param height - axial length of the hole in millimeters.
15
+ * @returns the hole geometry as a Z-up Shape.
16
+ */
17
+ export declare function buildHoleGeometry(params: DrillHoleParams, height: number): Shape;
18
+ /**
19
+ * Compute the through-hole height by raycasting against the target mesh's
20
+ * bounding box. Returns { height, center } so the cylinder exactly spans the
21
+ * model thickness along the drill direction, without extending outside.
22
+ *
23
+ * @param position - world-space position of the hole entry point.
24
+ * @param direction - the drill direction (normalized internally).
25
+ * @param bbox - world-space bounding box of the target mesh.
26
+ * @returns the height and world-space center of the through hole.
27
+ */
28
+ export declare function computeThroughHoleDimensions(position: Vec3, direction: Vec3, bbox: Box3): {
29
+ height: number;
30
+ center: Vec3;
31
+ };
32
+ /**
33
+ * Compute the blind-hole center: the hole entry is at the click point,
34
+ * the hole extends inward by `depth`. The cylinder center is at
35
+ * position + direction * (depth / 2).
36
+ *
37
+ * @param position - world-space hole entry point.
38
+ * @param direction - the drill direction (normalized internally).
39
+ * @param depth - blind-hole depth in millimeters.
40
+ * @returns the world-space cylinder center.
41
+ */
42
+ export declare function computeBlindHoleCenter(position: Vec3, direction: Vec3, depth: number): Vec3;
43
+ /**
44
+ * Orient and position a Z-up hole geometry (axial along Z) to world space.
45
+ * Returns a new geometry with the transform baked in.
46
+ *
47
+ * @param geo - Z-up hole geometry centered on the origin.
48
+ * @param direction - world-space axis the hole should point along.
49
+ * @param center - world-space position of the hole center.
50
+ * @returns a transformed clone of the input geometry.
51
+ */
52
+ export declare function positionHoleGeometry(geo: Shape, direction: Vec3, center: Vec3): Shape;
53
+ /**
54
+ * Resolve the drill direction based on params.direction and the face normal.
55
+ *
56
+ * - 'normal': inward direction = negated face normal
57
+ * - 'x'/'y'/'z': axis-aligned, flipped to point INTO the material
58
+ * (i.e. opposite to the face normal)
59
+ *
60
+ * @param direction - requested drill-direction reference.
61
+ * @param faceNormal - face normal at the drill position.
62
+ * @returns the resolved unit drill direction.
63
+ */
64
+ export declare function resolveDrillDirection(direction: DrillDirection, faceNormal: Vec3): Vec3;
65
+ /**
66
+ * Drill a hole into a mesh in world space, returning the resulting
67
+ * geometry in the mesh's local space.
68
+ *
69
+ * @param target - the target mesh-like object with geometry and world matrix.
70
+ * @param params - drill-hole parameters.
71
+ * @param position - world-space hole entry point.
72
+ * @param faceNormal - world-space normal of the face at the entry point.
73
+ * @returns the drilled geometry in mesh-local space.
74
+ */
75
+ export declare function executeDrillHole(target: {
76
+ geometry: Shape;
77
+ matrixWorld: Mat4;
78
+ }, params: DrillHoleParams, position: Vec3, faceNormal: Vec3): Promise<Shape>;
79
+ /**
80
+ * Core drill computation that accepts geometry + world matrix directly.
81
+ *
82
+ * This avoids the need to temporarily swap mesh.geometry when the mesh
83
+ * currently has a preview geometry on it. Callers that have the G0 geometry
84
+ * in a separate Shape can use this directly.
85
+ *
86
+ * @param sourceGeometry - the base geometry to drill (mesh-local space).
87
+ * @param worldMatrix - world transform of the source geometry.
88
+ * @param params - drill-hole parameters.
89
+ * @param position - world-space hole entry point.
90
+ * @param faceNormal - world-space face normal at the entry point.
91
+ * @returns the drilled geometry, transformed back into mesh-local space.
92
+ */
93
+ export declare function executeDrillHoleOnGeometry(sourceGeometry: Shape, worldMatrix: Mat4, params: DrillHoleParams, position: Vec3, faceNormal: Vec3): Promise<Shape>;
94
+ //# sourceMappingURL=DrillHoleCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrillHoleCore.d.ts","sourceRoot":"","sources":["../../../../src/extra/mesh/drill-hole/DrillHoleCore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAQ,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAYhD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAKpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,GACb,KAAK,CA8DP;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,IAAI,EAAE,IAAI,GACT;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,CAqDlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,IAAI,EACd,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,MAAM,GACZ,IAAI,CAEN;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,IAAI,EACf,MAAM,EAAE,IAAI,GACX,KAAK,CAWP;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,cAAc,EACzB,UAAU,EAAE,IAAI,GACf,IAAI,CAiBN;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC;IAAC,WAAW,EAAE,IAAI,CAAA;CAAE,EAC9C,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,KAAK,CAAC,CAQhB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,0BAA0B,CAC9C,cAAc,EAAE,KAAK,EACrB,WAAW,EAAE,IAAI,EACjB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,KAAK,CAAC,CA0EhB"}