@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 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/sketch/project.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * project — single-point conversion between the canonical sketch model and the\n * two downstream projection dialects (§4.5).\n *\n * canonical ⇄ FCStd (`fcstd-types`, integer ConstraintType + PointPos)\n * canonical ⇄ CadQuery (tag + string constraint names, 0..1 positions)\n *\n * One implementation, two projections: the FCStd side feeds the planegcs solve\n * pipeline; the CadQuery side feeds `cq-compat-sketch`. Constraints with no\n * counterpart in a target dialect raise an explicit `E_SKETCHC_*` — never a\n * silent downgrade.\n */\nimport { PointPos, GeoId, CONSTRAINT_NAMES, ConstraintType, type FcstdGeoRef, type FcstdSketchGeom, type FcstdSketchCon } from './fcstd-types.js'\nimport type { At, Ref, SketchConstraint, SketchConstraintKind, SketchGeom } from './canonical.js'\nimport { evalBSpline } from './bspline.js'\n\n/** Projection error with a stable `E_SKETCHC_*` code. */\nexport class SketchProjectionError extends Error {\n constructor(public readonly code: string, message: string) {\n super(`${code}: ${message}`)\n this.name = 'SketchProjectionError'\n }\n}\n\n// ── at / Ref resolution ──\n\n/**\n * Map a canonical `At` to an FCStd `PointPos`. Throws `E_SKETCHC_UNMAPPED` when there is no counterpart.\n *\n * @param at - the canonical position.\n * @returns the FCStd `PointPos` integer.\n */\nexport function atToFreeCad(at: At | undefined): number {\n if (at === undefined) return PointPos.none\n if (at === 'start') return PointPos.start\n if (at === 'end') return PointPos.end\n if (at === 'center') return PointPos.mid\n if (at === 'mid') {\n throw new SketchProjectionError('E_SKETCHC_UNMAPPED', 'at \"mid\" (arc/line midpoint) has no FCStd PointPos')\n }\n if (typeof at === 'number') {\n if (at === 0) return PointPos.start\n if (at === 1) return PointPos.end\n throw new SketchProjectionError('E_SKETCHC_UNMAPPED', `parametric at ${at} has no FCStd PointPos`)\n }\n throw new SketchProjectionError('E_SKETCHC_UNMAPPED', `unsupported at ${String(at)}`)\n}\n\n/**\n * Map an FCStd `PointPos` to a canonical `At` (`mid` FCStd means the centre).\n *\n * @param pos - the FCStd `PointPos` integer.\n * @returns the canonical position, or `undefined` for `none`.\n */\nexport function atFromFreeCad(pos: number): At | undefined {\n switch (pos) {\n case PointPos.none: return undefined\n case PointPos.start: return 'start'\n case PointPos.end: return 'end'\n case PointPos.mid: return 'center'\n default: return undefined\n }\n}\n\n/**\n * Map a canonical `At` to a CadQuery 0..1 parameter (`null` = the arc-centre `None` argument).\n *\n * @param at - the canonical position.\n * @returns the CadQuery 0..1 parameter, or `null` for centre.\n */\nexport function atToCadQuery(at: At | undefined): number | null {\n if (at === undefined) return null\n if (at === 'start') return 0\n if (at === 'end') return 1\n if (at === 'mid') return 0.5\n if (at === 'center') return null\n return at\n}\n\n/**\n * Map a CadQuery 0..1 parameter to a canonical `At`.\n *\n * @param v - the CadQuery parameter, or `null`/`undefined` for centre.\n * @returns the canonical position, or `undefined` for `null`/`undefined`.\n */\nexport function atFromCadQuery(v: number | null | undefined): At | undefined {\n if (v === null || v === undefined) return undefined\n if (v === 0) return 'start'\n if (v === 1) return 'end'\n if (v === 0.5) return 'mid'\n return v\n}\n\n/**\n * Build the tag → index lookup for a geometry list in one pass.\n *\n * @param geoms - canonical geometry list.\n * @returns tag → geometry index.\n */\nexport function buildTagIndex(geoms: SketchGeom[]): Map<string, number> {\n const index = new Map<string, number>()\n geoms.forEach((g, i) => {\n if (g.tag !== undefined) index.set(g.tag, i)\n })\n return index\n}\n\n/**\n * Resolve a canonical `Ref` to an FCStd `(geoId, pos)` pair.\n *\n * @param ref - the canonical reference (tag or index + at).\n * @param tagIndex - tag → index map (from {@link buildTagIndex}).\n * @param geoms - the geometry array (for bounds checking of index refs).\n * @returns the FCStd `(geoId, pos)` pair.\n * @throws SketchProjectionError `E_SKETCHC_BAD_REF` for unknown tag or out-of-range index.\n */\nexport function refToFreeCad(ref: Ref, tagIndex: Map<string, number>, geoms: SketchGeom[]): FcstdGeoRef {\n let geoId: number\n if ('tag' in ref) {\n const found = tagIndex.get(ref.tag)\n if (found === undefined) {\n throw new SketchProjectionError('E_SKETCHC_BAD_REF', `unknown tag \"${ref.tag}\"`)\n }\n geoId = found\n } else if (ref.index === -1 || ref.index === -2) {\n // AXIS ANCHORS (IRON RULE patch, 2026-10-04): canonical Refs may carry the\n // X axis (-1) / Y axis (-2) verbatim so FCStd axis refs round-trip through\n // canonical. The planegcs backend resolves them (`pt()`: -1 → root point,\n // -2 → VAxis point); anything else negative stays invalid.\n geoId = ref.index\n } else if (ref.index <= -3 && ref.index > -2000) {\n // EXTERNAL ANCHORS (IRON RULE patch, 2026-10-04): canonical Refs may carry\n // the external-geometry geoId verbatim; the emitted `cad.sketch` carries\n // the resolved fixed polylines as its `external` param and the backend\n // (`pt()` + `externalLines`) resolves every ref statically.\n geoId = ref.index\n } else {\n if (!Number.isInteger(ref.index) || ref.index < 0 || ref.index >= geoms.length) {\n throw new SketchProjectionError('E_SKETCHC_BAD_REF', `index ${ref.index} out of range [0, ${geoms.length})`)\n }\n geoId = ref.index\n }\n return { geoId, pos: atToFreeCad(ref.at) }\n}\n\n// ── geometry projection ──\n\n/**\n * Spread the `construction` flag when present so reference geometry round-trips\n * through the FCStd projection (canonical ⇄ FCStd). Returns an empty object when\n * the flag is absent, so spreading is a no-op for ordinary geometry.\n */\nfunction con<T extends { construction?: boolean }>(g: T): { construction?: boolean } {\n return g.construction ? { construction: true } : {}\n}\n\n/**\n * Project canonical geometry to the FCStd shape consumed by the solver.\n *\n * @param geoms - canonical geometry.\n * @returns FCStd geometry records (same order/index).\n * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_GEOM` for reserved kinds.\n */\nexport function toFreeCadGeoms(geoms: SketchGeom[]): FcstdSketchGeom[] {\n return geoms.map((g, index): FcstdSketchGeom => {\n switch (g.kind) {\n case 'line':\n return { kind: 'line', index, x1: g.x1, y1: g.y1, z1: 0, x2: g.x2, y2: g.y2, z2: 0, ...con(g) }\n case 'circle':\n return { kind: 'circle', index, cx: g.cx, cy: g.cy, cz: 0, radius: g.r, ...con(g) }\n case 'arc': {\n // Pass the canonical signed span (a0, a1) through unchanged. planegcs builds\n // the arc from the pinned start/end endpoints *and* the signed start/end\n // angles, so a CW arc (a1 < a0) is drawn as the short clockwise arc.\n // Normalising a1 into a CCW span would instead produce the long arc through\n // those same endpoints. Arc orientation is carried back to the caller via\n // solveSketch (input ccw preserved), not recovered here.\n const a0 = g.a0\n const a1 = g.a1\n return {\n kind: 'arc', index, cx: g.cx, cy: g.cy, cz: 0, radius: g.r,\n startAngle: a0, endAngle: a1,\n x1: g.cx + g.r * Math.cos(a0), y1: g.cy + g.r * Math.sin(a0), z1: 0,\n x2: g.cx + g.r * Math.cos(a1), y2: g.cy + g.r * Math.sin(a1), z2: 0,\n ...con(g),\n }\n }\n case 'point':\n // Reopened 2026-09-28: planegcs-backend pushes standalone points and\n // pulls them back; contour extraction skips them (no profile use).\n return { kind: 'point', index, x: g.x, y: g.y, z: 0, ...con(g) }\n case 'bspline': {\n // Reopened 2026-09-29 (fcstd-port A2): the entry used to reject this\n // with E_SKETCHC_UNSUPPORTED_GEOM even though the whole downstream\n // chain already consumed it — planegcs-backend.ts:233 pushes the exact\n // endpoints as a line proxy (so coincident/dimension constraints on the\n // curve ends still solve), planegcs-backend.ts:700 pulls them back,\n // contour.ts:57 de Boor-samples the interior, and verify.ts:30 anchors\n // on the endpoints. Rejecting here was entry-schema narrowness, not a\n // solver capability gap.\n //\n // Endpoints are evaluated at the clamped domain ends rather than read\n // off poles[0]/poles[last]: a periodic or non-clamped knot vector has\n // poles that are NOT on the curve, and evalBSpline already clamps its\n // argument into [knots[degree], knots[n]] (bspline.ts:39-40).\n const d = { poles: g.poles, knots: g.knots, degree: g.degree, periodic: g.periodic ?? false }\n const lo = d.knots[d.degree] ?? 0\n const hi = d.knots[d.knots.length - d.degree - 1] ?? lo\n const s = d.poles.length > 0 ? evalBSpline(d, lo) : { x: 0, y: 0 }\n const e = d.poles.length > 0 ? evalBSpline(d, hi) : { x: 0, y: 0 }\n return {\n kind: 'bspline', index,\n poles: g.poles, knots: g.knots, degree: g.degree, periodic: d.periodic,\n x1: s.x, y1: s.y, z1: 0, x2: e.x, y2: e.y, z2: 0,\n ...con(g),\n }\n }\n case 'ellipse': {\n // rx/ry ARE the major/minor radii (fromFreeCadGeoms maps them back\n // positionally), `angle` is the major-axis rotation in radians — the\n // same unit contour.ts and planegcs consume for angleXU.\n const major = g.rx\n const minor = g.ry\n const angleXU = g.angle ?? 0\n // first focus pair (computed, mirroring FreeCAD's stored foci)\n const c = Math.sqrt(Math.max(major * major - minor * minor, 0))\n const ca = Math.cos(angleXU)\n const sa = Math.sin(angleXU)\n return {\n kind: 'ellipse', index,\n cx: g.cx, cy: g.cy, cz: 0,\n majorRadius: major, minorRadius: minor, angleXU,\n fx1: g.cx - c * ca, fy1: g.cy - c * sa,\n fx2: g.cx + c * ca, fy2: g.cy + c * sa,\n ...con(g),\n }\n }\n }\n })\n}\n\n/**\n * Project FCStd geometry back to the canonical model (reserved kinds are reported).\n *\n * @param geoms - FCStd geometry records from the solver.\n * @returns canonical geometry (same order/index).\n */\nexport function fromFreeCadGeoms(geoms: FcstdSketchGeom[]): SketchGeom[] {\n return geoms.map((g): SketchGeom => {\n switch (g.kind) {\n case 'line':\n return { kind: 'line', x1: g.x1, y1: g.y1, x2: g.x2, y2: g.y2, ...con(g) }\n case 'circle':\n return { kind: 'circle', cx: g.cx, cy: g.cy, r: g.radius, ...con(g) }\n case 'arc': {\n const ccw = normalizeArcCcw(g.startAngle, g.endAngle)\n return { kind: 'arc', cx: g.cx, cy: g.cy, r: g.radius, a0: g.startAngle, a1: g.endAngle, ccw, ...con(g) }\n }\n case 'point':\n return { kind: 'point', x: g.x, y: g.y, ...con(g) }\n case 'ellipse':\n return { kind: 'ellipse', cx: g.cx, cy: g.cy, rx: g.majorRadius, ry: g.minorRadius, angle: g.angleXU, ...con(g) }\n case 'bspline':\n return { kind: 'bspline', poles: g.poles, knots: g.knots, degree: g.degree, periodic: g.periodic, ...con(g) }\n }\n })\n}\n\n/** True when the arc span is counter-clockwise as stored. */\nfunction normalizeArcCcw(startAngle: number, endAngle: number): boolean {\n let sweep = endAngle - startAngle\n while (sweep <= 0) sweep += 2 * Math.PI\n while (sweep > 2 * Math.PI) sweep -= 2 * Math.PI\n return sweep > 0\n}\n\n// ── constraint projection ──\n\n/** FCStd constraint shape produced by one canonical constraint. */\ninterface FcstdConstraintShape {\n type: number\n refs: FcstdGeoRef[]\n value?: number\n}\n\n/** `'noop'`: no FCStd constraint is needed (the implicit fixed frame covers it). */\ntype Mapped = FcstdConstraintShape | 'noop'\n\nfunction mapConstraint(c: SketchConstraint, tagIndex: Map<string, number>, geoms: SketchGeom[]): Mapped {\n const ref = (r: Ref): FcstdGeoRef => refToFreeCad(r, tagIndex, geoms)\n switch (c.kind) {\n case 'fixed':\n // FCStd has no explicit fixed constraint — the implicit fixed frame\n // (RtPnt + H/V axes) absorbs the rigid-body DoF (§4.5).\n return 'noop'\n case 'coincident':\n return { type: ConstraintType.Coincident, refs: [ref(c.a), ref(c.b)] }\n case 'horizontal':\n return { type: ConstraintType.Horizontal, refs: [ref(c.of)] }\n case 'vertical':\n return { type: ConstraintType.Vertical, refs: [ref(c.of)] }\n case 'parallel':\n return { type: ConstraintType.Parallel, refs: [ref(c.a), ref(c.b)] }\n case 'perpendicular':\n return { type: ConstraintType.Perpendicular, refs: [ref(c.a), ref(c.b)] }\n case 'tangent':\n return { type: ConstraintType.Tangent, refs: [ref(c.a), ref(c.b)] }\n case 'distance':\n return { type: ConstraintType.Distance, refs: [ref(c.a), ref(c.b)], value: c.value }\n case 'distanceX':\n return { type: ConstraintType.DistanceX, refs: [ref(c.a), ref(c.b)], value: c.value }\n case 'distanceY':\n return { type: ConstraintType.DistanceY, refs: [ref(c.a), ref(c.b)], value: c.value }\n case 'length': {\n // Length is expressed as a point-to-point Distance over the element ends.\n const base = ref(c.of)\n const start = { geoId: base.geoId, pos: PointPos.start }\n const end = { geoId: base.geoId, pos: PointPos.end }\n return { type: ConstraintType.Distance, refs: [start, end], value: c.value }\n }\n case 'angle':\n return { type: ConstraintType.Angle, refs: [ref(c.a), ref(c.b)], value: c.value }\n case 'orientation':\n // Reverse of the 1-ref Angle projection: emit a single-reference FCStd\n // Angle (absolute line orientation, radians). The planegcs backend lowers a\n // 1-ref Angle to `p2p_angle` on the line's own endpoints.\n return { type: ConstraintType.Angle, refs: [ref(c.of)], value: Math.atan2(c.dir[1], c.dir[0]) }\n case 'radius':\n return { type: ConstraintType.Radius, refs: [ref(c.of)], value: c.value }\n case 'diameter':\n return { type: ConstraintType.Diameter, refs: [ref(c.of)], value: c.value }\n case 'arcAngle':\n throw new SketchProjectionError('E_SKETCHC_UNMAPPED', 'constraint \"arcAngle\" has no FCStd counterpart')\n case 'equal':\n return { type: ConstraintType.Equal, refs: [ref(c.a), ref(c.b)] }\n case 'pointOnObject':\n return { type: ConstraintType.PointOnObject, refs: [ref(c.p), ref(c.on)] }\n case 'symmetric':\n return { type: ConstraintType.Symmetric, refs: [ref(c.p1), ref(c.p2), ref(c.about)] }\n }\n}\n\n/** Result of projecting canonical constraints to FCStd. */\nexport interface ProjectedConstraints {\n /** FCStd constraints (index matches the canonical constraint order for kept items). */\n constraints: FcstdSketchCon[]\n /** canonical constraint indices mapped to a deliberate no-op (fixed). */\n noops: number[]\n}\n\n/**\n * Project canonical constraints to the FCStd shape the solver consumes.\n *\n * @param constraints - canonical constraints.\n * @param geoms - canonical geometry (for tag/index resolution).\n * @returns FCStd constraints plus the no-op (`fixed`) indices.\n */\nexport function toFreeCadConstraints(constraints: SketchConstraint[], geoms: SketchGeom[]): ProjectedConstraints {\n const tagIndex = buildTagIndex(geoms)\n const out: FcstdSketchCon[] = []\n const noops: number[] = []\n constraints.forEach((c, index) => {\n const mapped = mapConstraint(c, tagIndex, geoms)\n if (mapped === 'noop') {\n noops.push(index)\n return\n }\n out.push({ index, type: mapped.type, refs: mapped.refs, value: mapped.value ?? 0, isDriving: true, name: '' })\n })\n return { constraints: out, noops }\n}\n\n// ── FCStd → canonical constraint projection (reverse) ──\n\n/** One FCStd constraint that has no canonical counterpart (kept for the fidelity ledger). */\nexport interface UnmappedConstraint {\n /** index in the input FCStd constraint array */\n index: number\n /** raw ConstraintType integer */\n type: number\n /** human-readable type name (debugging) */\n typeName: string\n /** why it could not be projected */\n reason: 'unsupported-type' | 'external-or-axis-ref' | 'reference-driven' | 'ambiguous-refs'\n}\n\n/** Result of projecting FCStd constraints back to canonical form. */\nexport interface FromFreeCadConstraints {\n /** canonical constraints, in input order for all projected items */\n constraints: SketchConstraint[]\n /** input indices of constraints that could NOT be projected, with reasons */\n unmapped: UnmappedConstraint[]\n}\n\n/**\n * Minimum number of refs each FCStd constraint type must carry before\n * {@link fromFreeCadConstraints} can express it.\n *\n * GOTCHA (2026-09-28, `Bathroom_cabinet_sink.FCStd` Sketch259): FreeCAD stores\n * an implicit axis/origin as GeoUndef, so a \"vertical distance from the X axis\"\n * arrives as a **1-ref** `DistanceY`. `two()`/`ref()` then dereferenced the\n * absent second ref and threw `Cannot read properties of undefined (reading\n * 'pos')`, which the converter reports as `solver-throw` and which failed\n * 436/900 corpus files. Only types the projection switch actually handles are\n * listed here: anything absent (InternalAlignment, Block, Weight …) keeps\n * flowing to the `default:` branch and is still reported as `unsupported-type`.\n */\nconst REFS_REQUIRED: Partial<Record<number, number>> = {\n [ConstraintType.Horizontal]: 1,\n [ConstraintType.Vertical]: 1,\n [ConstraintType.Distance]: 1, // 1-ref Distance is a length (see the case below)\n [ConstraintType.Angle]: 1, // the case below flags a 1-ref Angle as ambiguous\n [ConstraintType.Radius]: 1,\n [ConstraintType.Diameter]: 1,\n [ConstraintType.Coincident]: 2,\n [ConstraintType.Parallel]: 2,\n [ConstraintType.Tangent]: 2,\n [ConstraintType.DistanceX]: 1,\n [ConstraintType.DistanceY]: 1,\n [ConstraintType.Perpendicular]: 2,\n [ConstraintType.Equal]: 2,\n [ConstraintType.PointOnObject]: 2,\n [ConstraintType.Symmetric]: 3,\n}\n\n/**\n * Project FCStd sketch constraints back to the canonical model — the reverse of\n * {@link toFreeCadConstraints} / `mapConstraint`. This is the bridge the fcstd\n * converter uses to emit `cad.sketch({ geoms, constraints })` from a parsed\n * `Sketcher::SketchObject` (2026-09-28 plan A1).\n *\n * Mapping notes / GOTCHAs (validated against `mapConstraint` + the planegcs\n * backend):\n * - `length` is stored FCStd-side as a point-to-point Distance over the line's\n * own start/end — a 1-ref Distance projects back to `length` (GOTCHA: a\n * genuine 2-ref Distance between two distinct points is NOT a length).\n * - `fixed` has no FCStd counterpart (the implicit frame absorbs it), so it can\n * never appear in FCStd input — nothing to project back.\n * - Angle values pass through UNCHANGED in both directions: FreeCAD serializes\n * Angle constraint `Value` in radians in the XML, and the planegcs backend\n * forwards it verbatim. Consumers wanting canonical degrees must convert at\n * the boundary that knows the file unit (GOTCHA 2026-09-28: forward\n * projection also passes through, so roundtrips are unit-consistent).\n * - Constraints referencing the axes (geoId -1/-2) or external geometry\n * (geoId <= -3) have no canonical Ref (canonical refs are own-geometry\n * indices only) — reported in `unmapped` with reason\n * `external-or-axis-ref` instead of being silently dropped.\n * - `isDriving === false` (reference/driven) constraints carry no solve\n * information — reported with reason `reference-driven`.\n * - A constraint with fewer refs than its type requires (e.g. a 1-ref\n * `DistanceY`, which FreeCAD writes when the axis is implicit) is reported\n * with reason `ambiguous-refs`; see `REFS_REQUIRED`. This projection never\n * throws on such input.\n *\n * @param cons - FCStd constraints (e.g. from `parseSketchObject`).\n * @param _geoms - unused; kept for signature symmetry with the projection pipeline.\n * @returns canonical constraints plus the unmapped ledger.\n */\nexport function fromFreeCadConstraints(cons: FcstdSketchCon[], _geoms: SketchGeom[]): FromFreeCadConstraints {\n const ref = (r: FcstdGeoRef): Ref => {\n const at = atFromFreeCad(r.pos)\n return (at === undefined ? { index: r.geoId } : { index: r.geoId, at }) as Ref\n }\n const constraints: SketchConstraint[] = []\n const unmapped: UnmappedConstraint[] = []\n const pushUnmapped = (index: number, type: number, reason: UnmappedConstraint['reason']): void => {\n unmapped.push({ index, type, typeName: CONSTRAINT_NAMES[type] ?? `type#${type}`, reason })\n }\n\n cons.forEach((c, index) => {\n if (!c.isDriving) {\n // Reference/driven constraint carries no solve information — canonical has\n // no field for it. Drop it silently instead of reporting a gap.\n return\n }\n // External geometry refs (geoId <= -3, down to just above GeoUndef) ride\n // into canonical as negative Ref indices verbatim — the converter resolves\n // the referenced external geometry to fixed polylines at convert time and\n // the emitted `cad.sketch` carries them as its `external` param, so the\n // planegcs backend (`pt()` + `externalLines`) resolves every ref\n // statically (IRON RULE patch, 2026-10-04: no run-time attempt — a ref the\n // converter could NOT resolve never enters sketchInputs).\n // GOTCHA (2026-10-04, taperedballnose): old-format constraint triples pad\n // unused slots with GeoUndef = -2000 (sketch-parse.ts skips them when\n // building externalGeoIds for the same reason) — a real axis/external ref\n // never reaches -2000. The old `geoId < 0` blanket check here used to\n // reject ~every constraint in such files (20 of 21 in the sample) as\n // `external-or-axis-ref`, mass-gapping otherwise-clean sketches.\n // Ref-count guard (see REFS_REQUIRED) — runs BEFORE any ref dereference so\n // an under-specified constraint is recorded rather than thrown out of the\n // whole projection. Types the switch does not handle (InternalAlignment,\n // Block, Weight …) are absent from the map and stay on the `default:` path,\n // so they keep reporting `unsupported-type`.\n const required = REFS_REQUIRED[c.type]\n if (required !== undefined && c.refs.length < required) {\n pushUnmapped(index, c.type, 'ambiguous-refs')\n return\n }\n const two = (): [Ref, Ref] => [ref(c.refs[0]!), ref(c.refs[1]!)]\n switch (c.type) {\n case ConstraintType.Coincident: {\n const [a, b] = two()\n constraints.push({ kind: 'coincident', a, b })\n break\n }\n case ConstraintType.Horizontal:\n // GOTCHA (IRON RULE patch, 2026-10-04, Chair Sketch255): FreeCAD's\n // Horizontal has a TWO-POINT form (refs[1] may be an external point):\n // \"these two points are level\". The canonical `horizontal` kind only\n // takes one line ref — projecting the 2-ref form to it SILENTLY DROPPED\n // the second point and changed the constraint set (solver DoF mismatch\n // → E_SKETCHC_CONFLICTING at run time). Static equivalent instead:\n // two points level ⟺ distanceY(a, b, 0).\n if (c.refs.length >= 2 && c.refs[1]!.pos !== PointPos.none && c.refs[1]!.geoId !== c.refs[0]!.geoId) {\n constraints.push({ kind: 'distanceY', a: ref(c.refs[0]!), b: ref(c.refs[1]!), value: 0 })\n } else {\n constraints.push({ kind: 'horizontal', of: ref(c.refs[0]!) })\n }\n break\n case ConstraintType.Vertical:\n // symmetric case to Horizontal: two points aligned ⟺ distanceX(a, b, 0)\n if (c.refs.length >= 2 && c.refs[1]!.pos !== PointPos.none && c.refs[1]!.geoId !== c.refs[0]!.geoId) {\n constraints.push({ kind: 'distanceX', a: ref(c.refs[0]!), b: ref(c.refs[1]!), value: 0 })\n } else {\n constraints.push({ kind: 'vertical', of: ref(c.refs[0]!) })\n }\n break\n case ConstraintType.Parallel: {\n const [a, b] = two()\n constraints.push({ kind: 'parallel', a, b })\n break\n }\n case ConstraintType.Perpendicular: {\n const [a, b] = two()\n constraints.push({ kind: 'perpendicular', a, b })\n break\n }\n case ConstraintType.Tangent: {\n const [a, b] = two()\n constraints.push({ kind: 'tangent', a, b })\n break\n }\n case ConstraintType.Distance:\n if (\n c.refs.length >= 2 &&\n // GOTCHA: mapConstraint encodes canonical `length` as a Distance over\n // the SAME geometry's start/end points — a same-geoId start/end pair\n // is a length, not a genuine point-to-point distance.\n !(c.refs[0]!.geoId === c.refs[1]!.geoId && c.refs[0]!.pos === PointPos.start && c.refs[1]!.pos === PointPos.end)\n ) {\n const [a, b] = two()\n constraints.push({ kind: 'distance', a, b, value: c.value })\n } else {\n // point-to-point Distance over one element's own ends = length\n // (canonical `length` refs the whole element, no `at`)\n constraints.push({ kind: 'length', of: { index: c.refs[0]!.geoId }, value: c.value })\n }\n break\n case ConstraintType.DistanceX: {\n if (c.refs.length >= 2) {\n const [a, b] = two()\n constraints.push({ kind: 'distanceX', a, b, value: c.value })\n } else {\n // 1-ref DistanceX = absolute X coordinate of the point/line w.r.t. the\n // Y-axis (VAxis, geoId -2). The planegcs backend special-cases an\n // axis-edge second ref as `coordinate_x` (absolute, not a difference),\n // matching FreeCAD's single-reference DistanceX semantics.\n constraints.push({ kind: 'distanceX', a: ref(c.refs[0]!), b: { index: GeoId.VAxis }, value: c.value })\n }\n break\n }\n case ConstraintType.DistanceY: {\n if (c.refs.length >= 2) {\n const [a, b] = two()\n constraints.push({ kind: 'distanceY', a, b, value: c.value })\n } else {\n // 1-ref DistanceY = absolute Y coordinate w.r.t. the X-axis (HAxis=-1).\n constraints.push({ kind: 'distanceY', a: ref(c.refs[0]!), b: { index: GeoId.HAxis }, value: c.value })\n }\n break\n }\n case ConstraintType.Angle:\n if (c.refs.length >= 2) {\n const [a, b] = two()\n constraints.push({ kind: 'angle', a, b, value: c.value })\n } else {\n // 1-ref Angle = absolute orientation of a single line w.r.t. the X-axis.\n // Canonical models this as `orientation` (dir = [cos, sin]); the\n // planegcs backend lowers a 1-ref FCStd Angle to `p2p_angle` on the\n // line's own endpoints, and `mapConstraint` re-emits it as a 1-ref\n // Angle on the reverse path.\n constraints.push({ kind: 'orientation', of: ref(c.refs[0]!), dir: [Math.cos(c.value), Math.sin(c.value)] })\n }\n break\n case ConstraintType.Radius:\n constraints.push({ kind: 'radius', of: ref(c.refs[0]!), value: c.value })\n break\n case ConstraintType.Diameter:\n constraints.push({ kind: 'diameter', of: ref(c.refs[0]!), value: c.value })\n break\n case ConstraintType.Equal: {\n const [a, b] = two()\n constraints.push({ kind: 'equal', a, b })\n break\n }\n case ConstraintType.PointOnObject:\n constraints.push({ kind: 'pointOnObject', p: ref(c.refs[0]!), on: ref(c.refs[1]!) })\n break\n case ConstraintType.Symmetric:\n constraints.push({\n kind: 'symmetric',\n p1: ref(c.refs[0]!),\n p2: ref(c.refs[1]!),\n about: ref(c.refs[2]!),\n })\n break\n case ConstraintType.Weight:\n // Weight is a solver soft-penalty hint, not a geometric constraint —\n // canonical has no field for it. Drop it (no gap, no constraint).\n break\n case ConstraintType.Block: {\n // Block freezes its referenced geometry. Canonical `fixed` is the closest\n // existing kind; `mapConstraint` lowers `fixed` to a no-op because the\n // implicit fixed frame already pins the rigid body.\n for (const r of c.refs) constraints.push({ kind: 'fixed', of: ref(r) })\n break\n }\n default:\n // InternalAlignment / SnellsLaw / Group / Text / …\n pushUnmapped(index, c.type, 'unsupported-type')\n }\n })\n return { constraints, unmapped }\n}\n\n// ── CadQuery projection (constraint type names) ──\n\n/** CadQuery constraint names for the canonical kinds it supports (the other 8). */\nexport const CONSTRAINT_KIND_TO_CADQUERY: Partial<Record<SketchConstraintKind, string>> = {\n fixed: 'FixedPoint',\n coincident: 'Coincident',\n angle: 'Angle',\n length: 'Length',\n distance: 'Distance',\n radius: 'Radius',\n orientation: 'Orientation',\n arcAngle: 'ArcAngle',\n}\n\n/**\n * CadQuery constraint name → canonical kind.\n *\n * Beyond the one-name-per-kind reverse of {@link CONSTRAINT_KIND_TO_CADQUERY},\n * CadQuery spells the fixed constraint **two** ways — `Fixed` (whole entity) and\n * `FixedPoint` (a point) — and both mean canonical `fixed` here. The forward\n * direction emits `FixedPoint`; the reverse direction must accept either, or a\n * caller that reads upstream CadQuery scripts (`s.constrain(f, \"Fixed\")`) gets\n * `E_SKETCHC_UNSUPPORTED_CONSTRAINT` on a name upstream accepts.\n */\nexport const CADQUERY_TO_CONSTRAINT_KIND: Record<string, SketchConstraintKind> = {\n ...Object.fromEntries(\n Object.entries(CONSTRAINT_KIND_TO_CADQUERY).map(([kind, name]) => [name, kind as SketchConstraintKind]),\n ),\n Fixed: 'fixed',\n}\n\n/**\n * Map a canonical constraint kind to its CadQuery name.\n *\n * @param kind - canonical constraint kind.\n * @returns the CadQuery constraint name.\n * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_BY_CQ` when CQ has no counterpart.\n */\nexport function constraintKindToCadQuery(kind: SketchConstraintKind): string {\n const name = CONSTRAINT_KIND_TO_CADQUERY[kind]\n if (!name) {\n throw new SketchProjectionError('E_SKETCHC_UNSUPPORTED_BY_CQ', `constraint \"${kind}\" is not supported by CadQuery`)\n }\n return name\n}\n\n/**\n * Map a CadQuery constraint name to its canonical kind.\n *\n * @param name - CadQuery constraint name.\n * @returns the canonical kind.\n * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_CONSTRAINT` for unknown names.\n */\nexport function constraintKindFromCadQuery(name: string): SketchConstraintKind {\n const kind = CADQUERY_TO_CONSTRAINT_KIND[name]\n if (!kind) {\n throw new SketchProjectionError('E_SKETCHC_UNSUPPORTED_CONSTRAINT', `unknown CadQuery constraint \"${name}\"`)\n }\n return kind\n}"]}
@@ -0,0 +1,370 @@
1
+ /**
2
+ * shapes — `cad.sketch` 的**语义图元面**(脚本面)。
3
+ *
4
+ * 一条规则:**形状语义只在这里实现一次**。
5
+ * - 正向(求解前):`expandShapes` 语义图元 → canonical 几何 + 形状自带约束;
6
+ * - 反向(交互写回):`shapeHandles` 给出可拖手柄,`dragShapeHandle` 把"拖到哪"写回形状
7
+ * 参数,`handleForGeomControl` 负责"派生几何上的某个控制点 → 哪个手柄"的翻译。
8
+ * 宿主不认识任何形状数学,只做 tag 查表 + 调这三个函数。
9
+ *
10
+ * 宿主(3d_editor 等)只负责鼠标/吸附/命中这类交互,**禁止再自持一份展开逻辑**:
11
+ * 草稿以 shapes 为真源,派生几何一律由本模块算出来。
12
+ *
13
+ * ── 角度规则的唯一实现:`arcSweep` ────────────────────────────────────────
14
+ * 弧的有符号扫掠跨度这条规则,全仓库只应有一处实现(本模块的 `arcSweep`):
15
+ * core `geometry2d/adapt.ts#profileSegToCurve` 建弧、宿主采样折线、faijs-cadquery
16
+ * 三点弧取点,三处必须同解——否则"编辑期看到的弧"与"内核建的弧"不是同一条,
17
+ * 仓库里已踩过 `sketch-arc-ccw-gotcha`(CW 短弧被当 CCW 补角长弧,revolve 退化、
18
+ * BRepMesh 挂死)。宿主要算扫角就 import 它,**不要抄**。
19
+ *
20
+ * ── 单位 ──────────────────────────────────────────────────────────────────
21
+ * 长度 mm;**所有角度一律弧度**(与 `canonical.ts` 同一条约定:arc 的 `a0/a1`、
22
+ * `ellipse.angle`、`polygon.angle`、`trapezoid.a1/a2`、约束里的 `angle.value`)。
23
+ * CadQuery 的度制在 `faijs-cadquery` 边界换算,不进入本层。
24
+ *
25
+ * ── tag 规则(唯一一条,两边共用)─────────────────────────────────────────
26
+ * - 画笔图元(line / arc / bspline / point)的 tag **就是它自己那个 geom** 的 tag;
27
+ * - 罐头形状(rect / roundedRect / circle / ellipse / polygon / slot / trapezoid)的
28
+ * tag 是**形状名**,派生 geom 的 tag 为 `<形状名>.0`、`<形状名>.1`……下标顺序固定
29
+ * (见各形状的展开注释,UI 与测试都依赖这个顺序);
30
+ * - 形状没给 tag 时自动分配 `g<N>`(只占一个编号,派生 geom 仍是 `g<N>.k`)。
31
+ * N 取所有既有 `g<N>`(含 `.k` 形式)的最大值 +1,**不复用已删除的编号**——
32
+ * 复用会让"删了 g2 再画一个"拿到同一个名字,而旧约束可能还引用着它。
33
+ *
34
+ * ── 模式(mode)────────────────────────────────────────────────────────────
35
+ * - `'a'`(缺省):并入轮廓;
36
+ * - `'s'`:该形状的轮廓**应作为内环(孔)**。孔的身份由轮廓包含关系决定
37
+ * (core `organiseBlueprints` + `addHolesInFace`),本层只记下"哪些 geom 声明了
38
+ * 内环语义",供 op 侧校验(`subtractRanges`);
39
+ * - `'c'`:构造几何(= `construction: true`),参与求解但不进轮廓;
40
+ * - `'i'` / `'r'`:第一版**不支持**,显式报 `E_SKETCHC_UNSUPPORTED_MODE`——
41
+ * 面级布尔/按 tag 替换属第二版,绝不做静默降级。
42
+ */
43
+ import type { SketchConstraint, SketchGeom } from './canonical.js';
44
+ /** 平面内二维点(草图局部坐标,mm)。 */
45
+ export type Pt2 = [number, number];
46
+ /** 形状区域语义(CadQuery 的 a/s/i/c/r)。 */
47
+ export type SketchMode = 'a' | 's' | 'i' | 'c' | 'r';
48
+ /** 形状展开/写回失败。`code` 前缀在 message 里,宿主按既有习惯用正则匹配。 */
49
+ export declare class SketchShapeError extends Error {
50
+ /** `E_SKETCHC_*` 错误码。 */
51
+ readonly code: string;
52
+ constructor(
53
+ /** `E_SKETCHC_*` 错误码。 */
54
+ code: string, detail: string);
55
+ }
56
+ /** 所有形状共有字段。 */
57
+ export interface ShapeBase {
58
+ /** 形状名;罐头形状的派生 geom tag 为 `<tag>.k`。缺省时自动分配 `g<N>`。 */
59
+ tag?: string;
60
+ /** 区域语义;缺省 `'a'`。 */
61
+ mode?: SketchMode;
62
+ /** 构造几何(等价 `mode:'c'`):参与求解、但不进轮廓。 */
63
+ construction?: boolean;
64
+ }
65
+ /**
66
+ * 语义图元。罐头形状的 `cx`/`cy` 缺省 0(形状中心),`angle` 是**弧度**。
67
+ *
68
+ * axis 对齐的四个罐头(rect / roundedRect / slot / trapezoid)刻意**没有 angle**:
69
+ * 它们靠 `horizontal`/`vertical` 形状约束保持轴对齐,给个 angle 会让约束与初值互斗
70
+ * (求解器把形状转回去)。要摆角度就把草图放在带朝向的平面上。
71
+ */
72
+ export type SketchShape = (ShapeBase & {
73
+ kind: 'rect';
74
+ w: number;
75
+ d: number;
76
+ cx?: number;
77
+ cy?: number;
78
+ }) | (ShapeBase & {
79
+ kind: 'roundedRect';
80
+ w: number;
81
+ d: number;
82
+ r: number;
83
+ cx?: number;
84
+ cy?: number;
85
+ }) | (ShapeBase & {
86
+ kind: 'circle';
87
+ r: number;
88
+ cx?: number;
89
+ cy?: number;
90
+ }) | (ShapeBase & {
91
+ kind: 'ellipse';
92
+ rx: number;
93
+ ry: number;
94
+ cx?: number;
95
+ cy?: number;
96
+ angle?: number;
97
+ }) | (ShapeBase & {
98
+ kind: 'polygon';
99
+ n: number;
100
+ r: number;
101
+ cx?: number;
102
+ cy?: number;
103
+ angle?: number;
104
+ }) | (ShapeBase & {
105
+ kind: 'slot';
106
+ w: number;
107
+ d: number;
108
+ cx?: number;
109
+ cy?: number;
110
+ }) | (ShapeBase & {
111
+ kind: 'trapezoid';
112
+ w: number;
113
+ h: number;
114
+ a1: number;
115
+ a2?: number;
116
+ cx?: number;
117
+ cy?: number;
118
+ }) | (ShapeBase & {
119
+ kind: 'line';
120
+ from: Pt2;
121
+ to: Pt2;
122
+ }) | (ShapeBase & {
123
+ kind: 'arc';
124
+ cx: number;
125
+ cy: number;
126
+ r: number;
127
+ a0: number;
128
+ a1: number;
129
+ ccw?: boolean;
130
+ }) | (ShapeBase & {
131
+ kind: 'bspline';
132
+ pts: Pt2[];
133
+ degree?: number;
134
+ }) | (ShapeBase & {
135
+ kind: 'point';
136
+ x: number;
137
+ y: number;
138
+ }) | {
139
+ kind: 'close';
140
+ ref?: string;
141
+ };
142
+ /** 形状展开后的一份记录(宿主用它把派生 geom 映射回形状)。 */
143
+ export interface ShapeSpan {
144
+ /** 输入 `shapes` 里的下标。 */
145
+ index: number;
146
+ /** 形状 kind(`close` 也在内)。 */
147
+ kind: SketchShape['kind'];
148
+ /** 形状名(自动分配时是本层生成的 `g<N>`)。 */
149
+ tag: string;
150
+ /** 该形状产出的第一个 geom 在 `geoms` 里的下标。 */
151
+ start: number;
152
+ /** 产出的 geom 条数(`close` 已是闭环时是 0)。 */
153
+ count: number;
154
+ }
155
+ /** `expandShapes` 的产物。 */
156
+ export interface ExpandedShapes {
157
+ /** 展开后的 canonical 几何。 */
158
+ geoms: SketchGeom[];
159
+ /** **形状自带**的约束(不含调用方自己写的约束)。 */
160
+ constraints: SketchConstraint[];
161
+ /** 每个输入形状一段(与 `shapes` 同序同长)。 */
162
+ spans: ShapeSpan[];
163
+ /** geom 下标 → 产出它的形状下标(与 `spans` 的 `index` 对齐)。 */
164
+ owners: number[];
165
+ /** 声明了内环(`mode:'s'`)语义的形状所产出的 geom 区间,供 op 校验。 */
166
+ subtractRanges: Array<{
167
+ index: number;
168
+ start: number;
169
+ count: number;
170
+ }>;
171
+ /** 展开之后下一个可用的 `g<N>` 编号(供宿主给新形状命名)。 */
172
+ nextTag: number;
173
+ }
174
+ /**
175
+ * 给一个新形状分配名字:`g<N>`,N = 既有最大编号 + 1(不复用已删除的编号)。
176
+ *
177
+ * @param shapes - 当前草稿里的全部形状(含 auto 分配过的名字)。
178
+ * @returns 未被占用的 `g<N>`。
179
+ */
180
+ export declare function nextShapeTag(shapes: readonly SketchShape[]): string;
181
+ /**
182
+ * 矩形的四个角点(局部 + 中心平移后),顺序 `bottom-left → bottom-right →
183
+ * top-right → top-left`(与 3d_editor 既有矩形命令的边顺序一致)。
184
+ *
185
+ * @param w - 宽(沿 +X)。
186
+ * @param d - 高(沿 +Y)。
187
+ * @param cx - 中心 x(缺省 0)。
188
+ * @param cy - 中心 y(缺省 0)。
189
+ * @returns 四个角点。
190
+ */
191
+ export declare function rectCorners(w: number, d: number, cx?: number, cy?: number): [Pt2, Pt2, Pt2, Pt2];
192
+ /**
193
+ * 正多边形顶点。**第一个顶点在 `angle` 方向**,随后逆时针均匀分布。
194
+ *
195
+ * 宿主约定由调用方给:`expandShapes` 用 (angle, ccw=true);CadQuery 的
196
+ * `regularPolygon` 是"首顶点在 +Y、顺时针",它自己传 `(π/2, false)`——
197
+ * 公式只在这里写一次,约定由调用方显式声明。
198
+ *
199
+ * @param r - 外接圆半径。
200
+ * @param n - 边数(≥3)。
201
+ * @param angle - 首顶点极角(弧度)。
202
+ * @param ccw - 是否逆时针排列(缺省 true)。
203
+ * @returns n 个顶点(不重复首点)。
204
+ */
205
+ export declare function regularPolygonVertices(r: number, n: number, angle?: number, ccw?: boolean): Pt2[];
206
+ /**
207
+ * 长圆槽(stadium):两条直边在 `y = ±d/2` 上、沿 X 跨 `w`,两端各一个半径
208
+ * `d/2` 的半圆,圆心在 `(±w/2, 0)`。**总长 = w + d,总高 = d**(CadQuery
209
+ * `Sketch.slot(w, h)` 的语义,`d` 即它的 `h`)。
210
+ *
211
+ * @param w - 直边长度(两圆心距)。
212
+ * @param d - 槽宽(= 端部半圆直径)。
213
+ * @param cx - 中心 x。
214
+ * @param cy - 中心 y。
215
+ * @returns 两条直边(左→右 的底边、右→左 的顶边)与两个半圆(圆心、半径、起止角)。
216
+ */
217
+ export declare function slotOutline(w: number, d: number, cx?: number, cy?: number): {
218
+ bottom: [Pt2, Pt2];
219
+ top: [Pt2, Pt2];
220
+ rightArc: {
221
+ c: Pt2;
222
+ r: number;
223
+ a0: number;
224
+ a1: number;
225
+ };
226
+ leftArc: {
227
+ c: Pt2;
228
+ r: number;
229
+ a0: number;
230
+ a1: number;
231
+ };
232
+ };
233
+ /**
234
+ * 梯形四角(底边在下、居中):底宽 `w`、高 `h`,左右底角 `a1`/`a2`(**弧度**)。
235
+ *
236
+ * 与 CadQuery `Sketch.trapezoid(w, h, a1, a2)` 同几何(它在边界把度换成弧度):
237
+ * 顶点按 `bottom-left → bottom-right → top-right → top-left` 排列(逆时针)。
238
+ *
239
+ * @param w - 底宽。
240
+ * @param h - 高。
241
+ * @param a1 - 左下底角(弧度)。
242
+ * @param a2 - 右下底角(弧度)。
243
+ * @param cx - 中心 x。
244
+ * @param cy - 中心 y。
245
+ * @returns 四个角点。
246
+ */
247
+ export declare function trapezoidCorners(w: number, h: number, a1: number, a2: number, cx?: number, cy?: number): [Pt2, Pt2, Pt2, Pt2];
248
+ /**
249
+ * 钳位均匀节点向量:两端各重复 `degree+1` 次(clamped),内部节点均匀。
250
+ *
251
+ * `pts` 是**控制点**(不是插值点)——canonical 的 bspline 存的就是 poles/knots/degree,
252
+ * 本层负责把一个"可手写的点列"变成合法的样条载荷。
253
+ *
254
+ * @param poleCount - 控制点个数。
255
+ * @param degree - 次数。
256
+ * @returns 长度 `poleCount + degree + 1` 的节点向量。
257
+ */
258
+ export declare function clampedUniformKnots(poleCount: number, degree: number): number[];
259
+ /**
260
+ * 展开语义图元清单。
261
+ *
262
+ * 正向规则见文件头。`close` 会把它前面那一段**连续的画笔形状**(line/arc/bspline)
263
+ * 收口:链尾到链首补一条直线;链首尾本来就重合(≤1e-7)时不补。链不存在、
264
+ * 或 `ref` 指向的不是链上的画笔形状,都显式报错。
265
+ *
266
+ * @param shapes - 语义图元清单(顺序即链序)。
267
+ * @returns 展开结果(几何、形状自带约束、tag 映射、内环区间、下一个可用编号)。
268
+ * @throws SketchShapeError 参数非法 / 模式不支持 / close 无链。
269
+ */
270
+ export declare function expandShapes(shapes: readonly SketchShape[]): ExpandedShapes;
271
+ /** 手柄语义(渲染与拖拽共用同一份定义,宿主不许再算一套)。 */
272
+ export type ShapeHandleKind = 'corner' | 'edge' | 'center' | 'radius' | 'start' | 'end' | 'mid' | 'vertex';
273
+ /** 一个可拖拽手柄:位置 + 语义(拖它意味着改什么)。 */
274
+ export interface ShapeHandle {
275
+ point: Pt2;
276
+ kind: ShapeHandleKind;
277
+ }
278
+ /**
279
+ * 圆弧的有符号扫掠跨度(弧度)。**这条规则的全仓库唯一实现。**
280
+ *
281
+ * 规则**必须与 core 的 `geometry2d/adapt.ts#profileSegToCurve` 完全一致**,否则
282
+ * 编辑期预览画的弧与执行后内核建的弧不是同一条——那正是仓库里踩过的
283
+ * `sketch-arc-ccw-gotcha`(CW 短弧被当成 CCW 补角长弧,revolve 退化、BRepMesh 挂死):
284
+ *
285
+ * - **方向由 `ccw` 决定,不由 `a1 - a0` 的符号决定**;`ccw` 缺省时按 `a1 > a0` 推断
286
+ * (canonical 的既有约定:`cq-compat` 产 `ccw: da > 0`)。
287
+ * - 扫角用 `while` 平移到 (0, 2π],**不能用 `%`**——整圆恰为 2π 时 `x % x === 0`
288
+ * 会把它消成退化线段。
289
+ * - `a0 === a1` 视为整圆(扫角 2π)。
290
+ *
291
+ * 消费方:本模块的 `arcMidAngle` / `arcPoints`;宿主(3d_editor)的弧采样与吸附
292
+ * (原先自己抄了一份 `arcSpan`,2026-10-03 收归到这里);faijs-cadquery 的三点弧。
293
+ *
294
+ * @param a0 - 起始角(弧度)。
295
+ * @param a1 - 终止角(弧度)。
296
+ * @param ccw - 逆时针为正;缺省按 `a1 > a0` 推断。
297
+ * @returns 有符号扫角:`ccw` 为正、顺为负,绝对值落在 (0, 2π]。
298
+ */
299
+ export declare function arcSweep(a0: number, a1: number, ccw: boolean | undefined): number;
300
+ /**
301
+ * 圆弧的三个关键点(三点弧构造的唯一实现:`start → mid → end`,`mid` 一定在弧上)。
302
+ *
303
+ * 消费方:`shapeHandles` 的弧手柄;faijs-cadquery 的 `slot()` 与 `arc(c,r,a,da)`
304
+ * 重载(OCCT `makeArcEdge` / CadQuery 都是三点弧签名)。反向遍历同一条弧只需交换
305
+ * `start` / `end`(`mid` 不变——同一段弧反向走,半程点是同一个点)。
306
+ *
307
+ * @param c - 圆心。
308
+ * @param r - 半径。
309
+ * @param a0 - 起始角(弧度)。
310
+ * @param a1 - 终止角(弧度)。
311
+ * @param ccw - 方向(缺省按 `a1 > a0` 推)。
312
+ * @returns 三点(草图局部坐标)。
313
+ */
314
+ export declare function arcPoints(c: Pt2, r: number, a0: number, a1: number, ccw?: boolean): {
315
+ start: Pt2;
316
+ mid: Pt2;
317
+ end: Pt2;
318
+ };
319
+ /**
320
+ * 形状的可拖拽手柄清单(下标即 `dragShapeHandle` / `handleForGeomControl` 的 handle 参数)。
321
+ *
322
+ * 布局(顺序固定,测试与宿主都依赖):
323
+ * - `rect`:`[角0, 角1, 角2, 角3, 边0中, 边1中, 边2中, 边3中, 中心]`(角顺序同展开:左下起逆时针)
324
+ * - `circle`:`[中心, 半径]`;`ellipse`:`[中心, rx, ry]`;`polygon`:`[中心, 顶点0..n-1]`
325
+ * - `line`:`[起点, 终点, 中点]`;`arc`:`[圆心, 起点, 终点, 中点]`;`point`:`[点]`
326
+ * - `bspline`:`[控制点0..n-1]`
327
+ * - `slot` / `roundedRect` / `trapezoid`:**只有中心**(v1 支持整体平移)
328
+ *
329
+ * @param shape - 语义图元。
330
+ * @returns 手柄清单(可能为空,如 `close`)。
331
+ */
332
+ export declare function shapeHandles(shape: SketchShape): ShapeHandle[];
333
+ /**
334
+ * 拖动形状的某个手柄,返回**新的形状参数**(拖拽写回的唯一入口)。
335
+ *
336
+ * 语义:形状保持自己的形状语义——拖矩形的角,得到"对角不动、这一角跟手"的矩形;
337
+ * 拖矩形某条边,得到"那条边移动"的矩形;拖中心,整体平移。宿主不需要任何形状数学。
338
+ *
339
+ * @param shape - 原形状。
340
+ * @param handle - `shapeHandles(shape)` 的下标。
341
+ * @param to - 目标点(草图局部坐标,已含吸附结果)。
342
+ * @returns 写回后的形状。
343
+ * @throws SketchShapeError 手柄越界 / 该形状不支持这种拖拽 / 拖成退化几何。
344
+ */
345
+ export declare function dragShapeHandle(shape: SketchShape, handle: number, to: Pt2): SketchShape;
346
+ /** 宿主 UI 的「派生几何控制点」语义(与 3d_editor `sketch-draft.ts#ControlPointKind` 对齐)。 */
347
+ export type GeomControl = 'start' | 'end' | 'mid' | 'center' | 'radius';
348
+ /**
349
+ * 把「派生几何上的某个控制点」翻译成形状手柄下标——宿主不知道任何形状数学,
350
+ * 只做 `tag → 形状 + 形状内几何下标` 的查表。
351
+ *
352
+ * 罐头形状的派生几何顺序与展开一致(见 `expandShapes` 注释):
353
+ * - `rect` / `roundedRect` 的线:第 k 条线 = 角 k → 角 k+1(`start`/`end`/`mid` 一一对应);
354
+ * - 其余罐头形状的切线点/圆心等控制点与形状定义参数不是一一对应(拖它意味着改哪个
355
+ * 参数并不唯一),本版本显式报不支持——宁可拖不动,也不静默变形。
356
+ *
357
+ * @param shape - 该几何所属的形状。
358
+ * @param geomIndexInShape - 该几何在形状展开结果里的下标。
359
+ * @param control - 控制点语义。
360
+ * @returns `shapeHandles(shape)` 的下标。
361
+ * @throws SketchShapeError 该组合不支持拖拽。
362
+ */
363
+ export declare function handleForGeomControl(shape: SketchShape, geomIndexInShape: number, control: GeomControl): number;
364
+ /**
365
+ * 形状的自带约束里引用了哪些 tag(宿主删形状时用来级联清理自己的约束)。
366
+ * @param constraint - 待提取引用的约束。type:SketchConstraint required:true
367
+ * @returns string[] 约束值里出现的全部 tag(可能为空数组)。
368
+ */
369
+ export declare function refsOfConstraint(constraint: SketchConstraint): string[];
370
+ //# sourceMappingURL=shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/sketch/shapes.ts"],"names":[],"mappings":"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"}