@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 @@
1
+ {"version":3,"file":"planegcs-backend.js","sourceRoot":"","sources":["../../src/sketch/planegcs-backend.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * M3.2/M3.3/M3.4 — planegcs WASM backend for the SketchSolver interface.\n *\n * M3.3: geometry → GCS primitives, including the implicit fixed RtPnt/HAxis/\n * VAxis (geoId -1/-2, plan §5.4). External geometry (geoId <= -3) is rejected\n * upstream (D4: whole sketch downgrades to L2).\n * M3.4: constraints → GCS primitives for the P0 set (plan §7 M3.4).\n * M3.5 helper: solved params are pulled back and geometry rebuilt, so the\n * caller can compare against on-disk coordinates (D2).\n */\nimport { GcsWrapper, init_planegcs_module, Algorithm } from '@salusoft89/planegcs';\nimport { ok, type Result } from '../api/result';\nimport type { FcstdSketchGeom, FcstdSketchCon } from './fcstd-types.js';\nimport { ConstraintType, PointPos } from './fcstd-types.js';\nimport type { FcstdSolveOutcome, SketchSolver } from './solver.js';\nimport { SUPPORTED_CONSTRAINT_TYPES } from './solver.js';\n/** Options for instantiating the planegcs WASM solver. */\nexport interface PlanegcsSolverOptions {\n /** Absolute filesystem path or fetchable URL of `planegcs.wasm`; the module reads the bytes itself. */\n wasmPath?: string\n /** Raw wasm bytes, for hosts that already hold the binary. */\n wasmBytes?: Uint8Array | ArrayBuffer\n /**\n * Code-package path that only the **platform's own wasm loader** can turn into\n * a module (WeChat mini program: `WXWebAssembly.instantiate(path, imports)`).\n *\n * Unlike `wasmPath`, faijs never fetches this path — the host must have\n * installed an adapter routing `WebAssembly.instantiate` to the platform\n * loader, which is what actually compiles those bytes.\n */\n wasmLoaderPath?: string\n}\n\n/**\n * Placeholder `wasmBinary` for {@link PlanegcsSolverOptions.wasmLoaderPath}.\n *\n * The emscripten glue only takes its \"use the bytes I was handed\" branch when\n * `wasmBinary` is set — in an environment that is neither Node nor\n * window/importScripts there is no other branch, so it aborts with\n * \"both async and sync fetching of the wasm failed\". The host's loader ignores\n * these bytes (it compiles the code-package path instead), so a zero-length\n * array is the honest stand-in: it asserts \"there is nothing here to fetch\".\n */\nconst PLATFORM_LOADER_WASM_BINARY = new Uint8Array(0);\n\n/**\n * Initialize the planegcs emscripten module and wrap it as a `GcsWrapper`.\n *\n * @param moduleArgs - emscripten module arguments (`locateFile` / `wasmBinary`).\n * @returns the wrapper the solver drives.\n */\nasync function initGcsWrapper(moduleArgs?: Record<string, unknown>): Promise<GcsWrapper> {\n const mod = await init_planegcs_module(moduleArgs);\n return new GcsWrapper(new mod.GcsSystem(), mod);\n}\n\n/**\n * Instantiate the planegcs WASM solver.\n *\n * The host declares the wasm source; exactly one of the three options must be\n * given — the choice is a static fact about the host, never a runtime fallback:\n * - `wasmPath`: Node / browser hosts where the module can read a path or fetch a URL;\n * - `wasmBytes`: hosts that already hold the binary;\n * - `wasmLoaderPath`: platforms that can only instantiate from a code-package\n * path (WeChat mini program) — see the option's own docs.\n *\n * @param options - the single wasm source for this host.\n * @returns a `SketchSolver` backed by the planegcs WASM module.\n * @throws when no source, or more than one source, is supplied.\n */\nexport async function createPlanegcsSolver(options: PlanegcsSolverOptions): Promise<SketchSolver> {\n const { wasmPath, wasmBytes, wasmLoaderPath } = options;\n const given = [wasmPath, wasmBytes, wasmLoaderPath].filter((v) => v !== undefined);\n if (given.length === 0) {\n throw new Error('E_SKETCHC_NO_WASM: createPlanegcsSolver needs wasmPath, wasmBytes or wasmLoaderPath');\n }\n if (given.length > 1) {\n throw new Error(\n 'E_SKETCHC_BAD_WASM: createPlanegcsSolver takes exactly one wasm source (wasmPath / wasmBytes / wasmLoaderPath)',\n );\n }\n if (wasmLoaderPath !== undefined) {\n return new PlanegcsSolver(\n await initGcsWrapper({\n wasmBinary: PLATFORM_LOADER_WASM_BINARY,\n locateFile: () => wasmLoaderPath,\n }),\n );\n }\n if (wasmBytes !== undefined) {\n // Bytes must go through emscripten's `wasmBinary`: `make_gcs_wrapper()` routes\n // its argument to `locateFile`, which only accepts a path/URL string.\n return new PlanegcsSolver(await initGcsWrapper({ wasmBinary: toUint8Array(wasmBytes) }));\n }\n return new PlanegcsSolver(await initGcsWrapper({ locateFile: () => wasmPath as string }));\n}\n\n/**\n * Normalize a host-supplied byte source for emscripten's `wasmBinary`.\n *\n * @param bytes - raw wasm bytes as a typed array or a buffer.\n * @returns the same bytes as a `Uint8Array`.\n */\nfunction toUint8Array(bytes: Uint8Array | ArrayBuffer): Uint8Array {\n return bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n}\n\n\n/** Internal identity for a GCS point owned by a geometry element. */\ntype PtKey = string;\n\nconst P = (geoId: number, pos: number): PtKey => `g${geoId}p${pos}`;\n\n/**\n * planegcs WASM implementation of the `SketchSolver` interface (M3.2–M3.4):\n * pushes geometry/constraints into the GCS, solves, and pulls the solved\n * parameters back into `FcstdSketchGeom` values.\n */\nexport class PlanegcsSolver implements SketchSolver {\n constructor(private wrapper: GcsWrapper) {}\n\n async solve(\n geoms: FcstdSketchGeom[],\n constraints: FcstdSketchCon[],\n external?: import('./solver.js').ExternalFixedSeg[],\n ): Promise<Result<FcstdSolveOutcome, never>> {\n const externalMap = new Map<number, import('./solver.js').ExternalFixedSeg>(\n (external ?? []).map((e) => [e.geoId, e]),\n );\n // a constraint referencing an unresolvable external geoId is dropped\n const unresolvableExternal = new Set<number>();\n for (const c of constraints) {\n for (const r of c.refs) {\n if (r.geoId <= -3 && r.geoId > -2000 && !externalMap.has(r.geoId)) {\n unresolvableExternal.add(c.index);\n }\n }\n }\n const usableConstraints = constraints.filter((c) => !unresolvableExternal.has(c.index));\n\n // P3-2 (2026-09-24): constraint types that do NOT affect the solved\n // geometry are dropped-and-recorded instead of failing the whole sketch\n // (previously any of these baked the sketch as unsupported-constraint):\n // - 15 InternalAlignment: alignment bookkeeping between element pairs;\n // the aligned geometry itself is already in <Geometry> — the alignment\n // constraint adds no independent DoF removal for our solving purpose.\n // - 17 Block: freezes a geometry's current position — the stored\n // geometry IS that position, so dropping it changes nothing.\n // - 19 Weight: B-Spline control-point weight — we do not solve splines.\n const ignorable = constraints.filter(\n (c) => c.type === 15 || c.type === 17 || c.type === 19,\n ).map((c) => c.index);\n const ignorableSet = new Set(ignorable);\n\n const unsupported = usableConstraints.find(\n (c) => !SUPPORTED_CONSTRAINT_TYPES.has(c.type) && !ignorableSet.has(c.index),\n );\n if (unsupported) {\n return ok({\n geoms,\n converged: false,\n reason: 'unsupported-constraint',\n problemConstraints: [unsupported.index],\n droppedConstraints: [...unresolvableExternal, ...ignorable],\n });\n }\n\n const w = this.wrapper;\n w.clear_data();\n\n // --- M3.3: implicit fixed frame (root point + H/V axes) ---\n w.push_primitive({ type: 'point', id: P(-1, 1), x: 0, y: 0, fixed: true });\n // GOTCHA (probe-sym-min.ts / probe-l1-ablation.ts): FreeCAD models HAxis/\n // VAxis as real Line entries in Geoms (geoId -1/-2), so constraints may\n // reference axis points (pos 1/2) or the axis edge (pos 0) — e.g.\n // DistanceX(line-point, VAxis) fixes an x coordinate. planegcs has no\n // implicit axes, so we materialize both axes as fixed point+line pairs\n // and register them in `lines` (below) so all constraint shapes see them.\n w.push_primitive({ type: 'point', id: P(-1, 2), x: 1, y: 0, fixed: true });\n w.push_primitive({ type: 'point', id: P(-2, 1), x: 0, y: 0, fixed: true });\n w.push_primitive({ type: 'point', id: P(-2, 2), x: 0, y: 1, fixed: true });\n w.push_primitive({ type: 'line', id: 'L-1', p1_id: P(-1, 1), p2_id: P(-1, 2) });\n w.push_primitive({ type: 'line', id: 'L-2', p1_id: P(-2, 1), p2_id: P(-2, 2) });\n\n // --- M6.3: external fixed geometry (geoId -3, -4, ... in link order) ---\n // Every sampled polyline point is pinned as a fixed primitive P(geoId, i+1),\n // which is exactly how a constraint ref ({geoId, pos}) addresses it — for a\n // 2-point edge (pos 1/2 = the endpoints) and for a `VertexN` link (a\n // 1-point polyline: pos 1 = the vertex) alike. `externalLines` additionally\n // registers the edge-level line X<geoId> for pos-0 (on-edge) refs.\n const externalLines = new Map<number, { p1: PtKey; p2: PtKey }>();\n const externalPointCount = new Map<number, number>();\n for (const ext of external ?? []) {\n const pts = ext.polyline;\n pts.forEach((pt, i) => {\n w.push_primitive({\n type: 'point', id: P(ext.geoId, i + 1), x: pt[0], y: pt[1], fixed: true,\n });\n });\n externalPointCount.set(ext.geoId, pts.length);\n if (pts.length === 2) {\n const p1 = P(ext.geoId, 1);\n const p2 = P(ext.geoId, 2);\n w.push_primitive({ type: 'line', id: `X${ext.geoId}`, p1_id: p1, p2_id: p2 });\n externalLines.set(ext.geoId, { p1, p2 });\n }\n }\n\n // --- M3.3: geometry → primitives ---\n // Track which point keys exist as standalone points vs derived from lines.\n const lines = new Map<number, { p1: PtKey; p2: PtKey }>();\n const arcs = new Map<number, { center: PtKey; start: PtKey; end: PtKey }>();\n const circles = new Map<number, { center: PtKey }>();\n const ellipses = new Map<number, { center: PtKey; focus1: PtKey }>();\n const standalone = new Map<number, PtKey>();\n // implicit axes are first-class lines for constraint resolution (see\n // the GOTCHA block above): geoId -1 = HAxis, -2 = VAxis\n lines.set(-1, { p1: P(-1, 1), p2: P(-1, 2) });\n lines.set(-2, { p1: P(-2, 1), p2: P(-2, 2) });\n\n // pass 1: standalone points that are constraint anchors\n const anchorNeedsStandalone = new Set<string>();\n for (const c of constraints) {\n for (const r of c.refs) {\n if (r.geoId >= 0 && r.pos !== PointPos.none) anchorNeedsStandalone.add(P(r.geoId, r.pos));\n }\n }\n for (const g of geoms) {\n switch (g.kind) {\n case 'point': {\n const id = P(g.index, 1);\n standalone.set(g.index, id);\n w.push_primitive({ type: 'point', id, x: g.x, y: g.y, fixed: false });\n break;\n }\n default:\n break;\n }\n }\n // pass 2: curves; create endpoint points for lines/arcs, center points\n for (const g of geoms) {\n switch (g.kind) {\n case 'line': {\n const p1 = anchorNeedsStandalone.has(P(g.index, 1)) ? P(g.index, 1) : P(g.index, 1);\n const p2 = P(g.index, 2);\n // create endpoint points as real GCS points, then a line over them\n for (const [id, x, y] of [\n [p1, g.x1, g.y1],\n [p2, g.x2, g.y2],\n ] as const) {\n w.push_primitive({ type: 'point', id, x, y, fixed: false });\n }\n w.push_primitive({ type: 'line', id: `L${g.index}`, p1_id: p1, p2_id: p2 });\n lines.set(g.index, { p1, p2 });\n break;\n }\n case 'circle': {\n const c = P(g.index, 3);\n w.push_primitive({ type: 'point', id: c, x: g.cx, y: g.cy, fixed: false });\n w.push_primitive({ type: 'circle', id: `C${g.index}`, c_id: c, radius: g.radius });\n circles.set(g.index, { center: c });\n break;\n }\n case 'arc': {\n const c = P(g.index, 3);\n const s = P(g.index, 1);\n const e = P(g.index, 2);\n for (const [id, x, y] of [\n [c, g.cx, g.cy],\n [s, g.x1, g.y1],\n [e, g.x2, g.y2],\n ] as const) {\n w.push_primitive({ type: 'point', id, x, y, fixed: false });\n }\n w.push_primitive({\n type: 'arc', id: `A${g.index}`, c_id: c, start_id: s, end_id: e,\n start_angle: g.startAngle, end_angle: g.endAngle, radius: g.radius,\n });\n // GOTCHA (2026-10-03, measured — see `shapes-solve.test.ts`):这里**没有**\n // push `arc_rules`(GCS 的 ConstraintArcRules:|start−centre| = |end−centre| =\n // radius)。后果是圆弧的 `radius` / `start_angle` / `end_angle` 是只写参数:\n // • `radius`(ConstraintType.Radius)在弧上**不生效**——`arc_radius` 改的是\n // 这个没人读的参数,而回读半径是按首尾点算的 |start − centre|(实测:\n // arc r=5 + `{kind:'radius', value:2}` → 解完 r 仍是 5);\n // • 弧的首尾点可以漂到离圆心不同的距离,回读时尾点又被\"按 r 投影\"回去\n // —— 静默改几何(实测:slot 弧心挪 2mm 后两端的半径差 2.03mm)。\n //\n // 补上 arc_rules 能同时修掉这两点,**但会引入假冲突**:形状自带约束 + 调用方\n // 约束的组合(如 slot + 一条 length)会被 GCS 判成 conflicting(solver 自己\n // 打印 RedundantSolving-LevenbergMarquardt),而该系统明明有解。实测矩阵:\n // slot(4 重合+2H+2 radius) 扰动 → conflicting;去掉 H 或去掉 radius 均 ok;\n // rect / roundedRect / trapezoid / polygon + length → 全 ok。\n // 所以先不 push,缺口如实登记在 `shapes.ts` 的 slot/roundedRect 注释与测试里。\n arcs.set(g.index, { center: c, start: s, end: e });\n break;\n }\n case 'ellipse': {\n const c = P(g.index, 3);\n const f1 = P(g.index, 1);\n for (const [id, x, y] of [\n [c, g.cx, g.cy],\n [f1, g.fx1, g.fy1],\n ] as const) {\n w.push_primitive({ type: 'point', id, x, y, fixed: false });\n }\n w.push_primitive({\n type: 'ellipse', id: `E${g.index}`, c_id: c, focus1_id: f1, radmin: g.minorRadius,\n });\n ellipses.set(g.index, { center: c, focus1: f1 });\n break;\n }\n case 'bspline': {\n // P4: the spline itself is not pushed to GCS (planegcs has no b-spline\n // primitive); its exact endpoints participate as a line proxy so\n // coincident/dimension constraints on the curve ends still solve.\n // Interior shape is preserved at contour extraction (de Boor sampling).\n const p1 = P(g.index, 1);\n const p2 = P(g.index, 2);\n for (const [id, x, y] of [\n [p1, g.x1, g.y1],\n [p2, g.x2, g.y2],\n ] as const) {\n w.push_primitive({ type: 'point', id, x, y, fixed: false });\n }\n w.push_primitive({ type: 'line', id: `L${g.index}`, p1_id: p1, p2_id: p2 });\n lines.set(g.index, { p1, p2 });\n break;\n }\n case 'point':\n break; // handled in pass 1\n }\n }\n\n // --- M3.4: constraints → primitives ---\n // A constraint whose GCS shape cannot be pushed is dropped and recorded\n // (D3: no silent loss — surfaced via droppedConstraints).\n const droppedConstraints: number[] = [...unresolvableExternal, ...ignorable];\n for (const c of usableConstraints) {\n // P3-2: ignorable types (15/17/19) were recorded above; never pushed.\n if (ignorableSet.has(c.index)) continue;\n let prims: Record<string, unknown>[];\n try {\n prims = this.constraintToPrimitives(c, { lines, arcs, circles, ellipses, standalone, externalLines, externalPointCount });\n } catch {\n droppedConstraints.push(c.index);\n continue;\n }\n try {\n for (const p of prims) w.push_primitive(p as never);\n } catch {\n droppedConstraints.push(c.index);\n continue;\n }\n }\n\n // --- solve (D2: initial values = on-disk coordinates) ---\n const status = w.solve(Algorithm.LevenbergMarquardt);\n const conflicting = w.has_gcs_conflicting_constraints();\n const redundant = w.has_gcs_redundant_constraints();\n\n if (conflicting) {\n const problemConstraints = w.get_gcs_conflicting_constraints()\n .map((s) => Number(s.replace(/^c/, '')))\n .filter((n) => Number.isFinite(n));\n // D3 (2026-09-27): a conflicting over-constraint is allowed, not an\n // error — surface the best-effort geometry. planegcs refuses to move\n // the parameters when it detects a conflict, so the pull-back returns\n // the declared initial coordinates (which close the contour); the\n // caller still sees `converged: false` + the conflicting-constraint\n // list as diagnostics.\n w.apply_solution();\n const solved = this.pullBack(geoms, { lines, arcs, circles, ellipses, standalone });\n return ok({\n geoms: solved,\n converged: false,\n reason: 'conflicting',\n problemConstraints,\n droppedConstraints,\n });\n }\n\n if (redundant) {\n // D3: redundant constraints are dropped internally by planegcs's\n // redundant-solving mode; the best-effort solution is still valid.\n w.apply_solution();\n const solved = this.pullBack(geoms, { lines, arcs, circles, ellipses, standalone });\n const problemConstraints = w.get_gcs_redundant_constraints()\n .map((s) => Number(s.replace(/^c/, '')))\n .filter((n) => Number.isFinite(n));\n return ok({\n geoms: solved,\n converged: true,\n reason: 'redundant',\n problemConstraints,\n droppedConstraints: [...droppedConstraints, ...problemConstraints],\n });\n }\n\n if (status !== 0) {\n return ok({\n geoms,\n converged: false,\n reason: 'failed',\n problemConstraints: [],\n droppedConstraints,\n });\n }\n\n w.apply_solution();\n\n // --- pull back solved coordinates and rebuild geometry ---\n const solved = this.pullBack(geoms, { lines, arcs, circles, ellipses, standalone });\n return ok({ geoms: solved, converged: true, problemConstraints: [], droppedConstraints });\n }\n\n /**\n * Remaining degrees of freedom after a successful solve (-1 if unavailable).\n *\n * @returns the DoF count, or -1 if the backend does not report it.\n */\n getDof(): number {\n try {\n const v = this.wrapper.gcs.dof();\n return typeof v === 'number' && Number.isFinite(v) ? v : -1;\n } catch {\n return -1;\n }\n }\n\n private constraintToPrimitives(\n c: FcstdSketchCon,\n ctx: {\n lines: Map<number, { p1: PtKey; p2: PtKey }>;\n arcs: Map<number, { center: PtKey; start: PtKey; end: PtKey }>;\n circles: Map<number, { center: PtKey }>;\n ellipses: Map<number, { center: PtKey; focus1: PtKey }>;\n standalone: Map<number, PtKey>;\n externalLines: Map<number, { p1: PtKey; p2: PtKey }>;\n externalPointCount: Map<number, number>;\n },\n ): Record<string, unknown>[] {\n const out: Record<string, unknown>[] = [];\n const id = `c${c.index}`;\n const r = c.refs;\n // guards: old-format fallback may yield < 2 refs for pair constraints\n if (r.length < 1) return out;\n const pt = (ref: { geoId: number; pos: number } | undefined): PtKey | undefined => {\n if (!ref) return undefined;\n if (ref.geoId === -1) return P(-1, 1); // root point\n if (ref.geoId === -2) return P(-2, ref.pos === 0 ? 1 : ref.pos); // VAxis point\n if (ref.geoId <= -3 && ref.geoId > -2000) {\n // M6.3 external geometry. Only two shapes are addressable by a ref:\n // - a straight edge (2-point polyline) registered as a line, whose\n // pos 1 / pos 2 are its two endpoints;\n // - a `VertexN` link (1-point polyline), whose pos 1 is the vertex.\n // GOTCHA (2026-09-28): resolving only through `externalLines` left every\n // `VertexN` ref undefined, so Coincident/DistanceY constraints onto an\n // external vertex were compiled away with no failure record (the sketch\n // silently solved to the wrong geometry, then flagged L1 by delta).\n //\n // GOTCHA (2026-09-28, second pass): the fix must NOT be widened to\n // \"pos indexes the sampled polyline\". `pos` is a PointPos on the\n // ORIGINAL curve — 1/2 = its start/end, 3 = its CENTRE — so on a\n // discretized ARC (630 samples) sample #2 is not \"the end\" and sample\n // #3 is not \"the centre\". Pinning those turned satisfiable sketches\n // into `failed` solves (FAULHABER Sketch026/043, arc externals\n // referenced with pos 3). Multi-point samples stay unresolvable here;\n // an arc centre would need the source curve, not the polyline.\n const ext = ctx.externalLines.get(ref.geoId);\n if (ext) {\n if (ref.pos === 1) return ext.p1;\n if (ref.pos === 2) return ext.p2;\n return undefined; // pos 0 (edge itself) / 3 (centre): other paths\n }\n if (ctx.externalPointCount.get(ref.geoId) === 1 && ref.pos === 1) return P(ref.geoId, 1);\n return undefined;\n }\n if (ref.geoId >= 0) return P(ref.geoId, ref.pos);\n return undefined;\n };\n\n switch (c.type) {\n case ConstraintType.Coincident: {\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) out.push({ type: 'p2p_coincident', id, p1_id: p1, p2_id: p2 });\n break;\n }\n case ConstraintType.Horizontal: {\n // Horizontal with pos=0 refs is the HAxis case: line horizontal\n if (r[0]!.pos === PointPos.none || r.length >= 1 && r[0]!.pos !== PointPos.mid) {\n if (r.length === 1) {\n // horizontal via axis: geoId is the line itself\n const line = ctx.lines.get(r[0]!.geoId);\n if (line) out.push({ type: 'horizontal_l', id, l_id: line ? `L${r[0]!.geoId}` : '' });\n } else {\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) out.push({ type: 'horizontal_pp', id, p1_id: p1, p2_id: p2 });\n }\n }\n break;\n }\n case ConstraintType.Vertical: {\n if (r.length === 1) {\n const gid = `L${r[0]!.geoId}`;\n if (ctx.lines.has(r[0]!.geoId)) out.push({ type: 'vertical_l', id, l_id: gid });\n } else {\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) out.push({ type: 'vertical_pp', id, p1_id: p1, p2_id: p2 });\n }\n break;\n }\n case ConstraintType.Parallel: {\n if (r.length === 2 && ctx.lines.has(r[0]!.geoId) && ctx.lines.has(r[1]!.geoId)) {\n out.push({\n type: 'parallel', id,\n l1_id: `L${r[0]!.geoId}`, l2_id: `L${r[1]!.geoId}`,\n internalalignment: 0,\n });\n }\n break;\n }\n case ConstraintType.Perpendicular: {\n if (r.length === 2 && ctx.lines.has(r[0]!.geoId) && ctx.lines.has(r[1]!.geoId)) {\n out.push({ type: 'perpendicular_ll', id, l1_id: `L${r[0]!.geoId}`, l2_id: `L${r[1]!.geoId}` });\n }\n break;\n }\n case ConstraintType.Distance: {\n // p2p / p2l / p2c / c2c variants by ref shapes.\n // GOTCHA (probe-l1-ablation.ts): a second ref that is an AXIS EDGE\n // (geoId -1/-2, pos=0) is a point-to-LINE distance against the axis\n // (FreeCAD Sketch.cpp addDistanceConstraint(point, line)) — e.g.\n // Distance(p, HAxis) = |y|. Resolving the axis edge to the root point\n // and emitting p2p_distance instead drags the point onto a circle\n // around the origin (taperedballnose collapse, delta 2.3e1).\n const p1 = pt(r[0]!);\n const axisEdgeDist = r.length >= 2 && r[1]!.pos === PointPos.none && (r[1]!.geoId === -1 || r[1]!.geoId === -2);\n if (axisEdgeDist && p1) {\n out.push({ type: 'p2l_distance', id, p_id: p1, l_id: `L${r[1]!.geoId}`, distance: c.value });\n } else if (p1 && r[1] && r[1].pos === PointPos.none && ctx.lines.has(r[1].geoId)) {\n out.push({ type: 'p2l_distance', id, p_id: p1, l_id: `L${r[1]!.geoId}`, distance: c.value });\n } else if (p1 && r[1]) {\n const p2 = pt(r[1]);\n if (p2) out.push({ type: 'p2p_distance', id, p1_id: p1, p2_id: p2, distance: c.value });\n }\n break;\n }\n case ConstraintType.DistanceX: {\n // planegcs 'difference' semantics: param2 - param1 = difference\n // (verified empirically). FCStd DistanceX value = second.x - first.x.\n // GOTCHA (probe-l1-ablation.ts, Sketch.cpp:2053): when the second ref\n // is an AXIS EDGE (geoId -1/-2, pos=0) FreeCAD treats it as GeoUndef —\n // an ABSOLUTE coordinate constraint (coordinate_x), not a difference\n // against the axis point. Mapping it to 'difference' forces x = -value\n // and produced the taperedballnose wrong solution (delta 2.3e1).\n const axisEdge = r.length >= 2 && r[1]!.pos === PointPos.none && (r[1]!.geoId === -1 || r[1]!.geoId === -2);\n const firstIsPoint = r[0]!.pos !== PointPos.none || r[0]!.geoId < 0;\n if (axisEdge && firstIsPoint) {\n const p = pt(r[0]!);\n if (p) out.push({ type: 'coordinate_x', id, p_id: p, x: c.value });\n break;\n }\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) {\n out.push({\n type: 'difference',\n id,\n param1: { o_id: p1, prop: 'x' },\n param2: { o_id: p2, prop: 'x' },\n difference: c.value,\n });\n }\n break;\n }\n case ConstraintType.DistanceY: {\n // symmetric case to DistanceX: axis-edge second ref → absolute y\n const axisEdge = r.length >= 2 && r[1]!.pos === PointPos.none && (r[1]!.geoId === -1 || r[1]!.geoId === -2);\n const firstIsPoint = r[0]!.pos !== PointPos.none || r[0]!.geoId < 0;\n if (axisEdge && firstIsPoint) {\n const p = pt(r[0]!);\n if (p) out.push({ type: 'coordinate_y', id, p_id: p, y: c.value });\n break;\n }\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) {\n out.push({\n type: 'difference',\n id,\n param1: { o_id: p1, prop: 'y' },\n param2: { o_id: p2, prop: 'y' },\n difference: c.value,\n });\n }\n break;\n }\n case ConstraintType.Angle: {\n // FreeCAD Sketch.cpp case Angle — 4 shapes by ref count/pos:\n // ① Third != GeoUndef → angle-via-point (not needed by corpus P0 set;\n // dropped explicitly below if encountered)\n // ② SecondPos != none → l2l_angle_pppp (lines with explicit start points:\n // pos==start keeps direction, pos==end swaps the point pair)\n // ③ Second set, both pos none → l2l_angle_ll (line-level)\n // ④ only First → p2p_angle on the line's own points (orientation)\n // refs may carry a Third = -2000 (GeoUndef sentinel) — filter it.\n const refs = r.filter((x) => x.geoId !== -2000);\n if (refs.length >= 3) {\n // ① via-point angle: not in the P0 mapping set — record as dropped\n break;\n }\n if (refs.length === 2) {\n const [a, b] = refs as [{ geoId: number; pos: number }, { geoId: number; pos: number }];\n const lineA = ctx.lines.has(a.geoId);\n const lineB = ctx.lines.has(b.geoId);\n if (lineA && lineB && a.pos !== PointPos.none && b.pos !== PointPos.none) {\n // ② explicit start points; pos=end reverses that line's direction\n const a1 = a.pos === PointPos.start ? P(a.geoId, 1) : P(a.geoId, 2);\n const a2 = a.pos === PointPos.start ? P(a.geoId, 2) : P(a.geoId, 1);\n const b1 = b.pos === PointPos.start ? P(b.geoId, 1) : P(b.geoId, 2);\n const b2 = b.pos === PointPos.start ? P(b.geoId, 2) : P(b.geoId, 1);\n out.push({ type: 'l2l_angle_pppp', id, l1p1_id: a1, l1p2_id: a2, l2p1_id: b1, l2p2_id: b2, angle: c.value });\n } else if (lineA && lineB) {\n // ③ line-level angle\n out.push({\n type: 'l2l_angle_ll', id,\n l1_id: `L${a.geoId}`, l2_id: `L${b.geoId}`,\n angle: c.value,\n internalalignment: 0,\n });\n }\n } else if (refs.length === 1 && ctx.lines.has(refs[0]!.geoId)) {\n // ④ orientation angle of a single line (p2p_angle on its points)\n out.push({ type: 'p2p_angle', id, p1_id: P(refs[0]!.geoId, 1), p2_id: P(refs[0]!.geoId, 2), angle: c.value });\n }\n break;\n }\n case ConstraintType.Radius: {\n if (ctx.circles.has(r[0]!.geoId)) {\n out.push({ type: 'circle_radius', id, c_id: `C${r[0]!.geoId}`, radius: c.value });\n } else if (ctx.arcs.has(r[0]!.geoId)) {\n out.push({ type: 'arc_radius', id, a_id: `A${r[0]!.geoId}`, radius: c.value });\n }\n break;\n }\n case ConstraintType.Diameter: {\n if (ctx.circles.has(r[0]!.geoId)) {\n out.push({ type: 'circle_diameter', id, c_id: `C${r[0]!.geoId}`, diameter: c.value });\n } else if (ctx.arcs.has(r[0]!.geoId)) {\n out.push({ type: 'arc_diameter', id, a_id: `A${r[0]!.geoId}`, diameter: c.value });\n }\n break;\n }\n case ConstraintType.Equal: {\n // equal_length for line pairs; equal_radii for circle/arc pairs\n if (r.length === 2) {\n const g0 = r[0]!.geoId;\n const g1 = r[1]!.geoId;\n if (ctx.lines.has(g0) && ctx.lines.has(g1)) {\n out.push({ type: 'equal_length', id, l1_id: `L${g0}`, l2_id: `L${g1}` });\n } else if ((ctx.circles.has(g0) || ctx.arcs.has(g0)) && (ctx.circles.has(g1) || ctx.arcs.has(g1))) {\n // arcs use their own primitive id (A{n}); circles use C{n}\n const id0 = ctx.circles.has(g0) ? `C${g0}` : `A${g0}`;\n const id1 = ctx.circles.has(g1) ? `C${g1}` : `A${g1}`;\n out.push({ type: 'equal_radius_cc', id, c1_id: id0, c2_id: id1 });\n } else if (ctx.ellipses.has(g0) && ctx.ellipses.has(g1)) {\n out.push({ type: 'equal_radii_ee', id, e1_id: `E${g0}`, e2_id: `E${g1}` });\n }\n }\n break;\n }\n case ConstraintType.PointOnObject: {\n const p = pt(r[0]!);\n if (p && r[1]!.pos === PointPos.none) {\n const onGeoId = r[1]!.geoId;\n if (onGeoId === -1 || onGeoId === -2) {\n // AXIS ref (IRON RULE patch, 2026-10-04): the wrapper already\n // registers the H/V axis lines as L-1/L-2 (fixed primitives), so\n // point-on-axis resolves statically — silently dropping it here\n // (the old behavior, ctx.lines has no negative keys) would\n // release the constraint's DoF with no failure record.\n out.push({ type: 'point_on_line_pl', id, p_id: p, l_id: `L${onGeoId}` });\n } else if (ctx.lines.has(onGeoId)) {\n out.push({ type: 'point_on_line_pl', id, p_id: p, l_id: `L${onGeoId}` });\n } else if (ctx.externalLines.has(onGeoId)) {\n // M6.3: point-on-external-edge → point_on_line against the fixed line\n out.push({ type: 'point_on_line_pl', id, p_id: p, l_id: `X${onGeoId}` });\n } else if (ctx.circles.has(onGeoId)) {\n out.push({ type: 'point_on_circle', id, p_id: p, c_id: `C${onGeoId}` });\n } else if (ctx.arcs.has(onGeoId)) {\n out.push({ type: 'point_on_arc', id, p_id: p, a_id: `A${onGeoId}` });\n }\n }\n break;\n }\n case ConstraintType.Symmetric: {\n // Symmetric(p1, p2, line) or Symmetric(p1, p2, p3)\n const p1 = pt(r[0]!);\n const p2 = pt(r[1]!);\n if (p1 && p2) {\n if (r.length >= 3 && r[2]!.pos === PointPos.none &&\n (ctx.lines.has(r[2]!.geoId) || r[2]!.geoId === -1 || r[2]!.geoId === -2)) {\n // GOTCHA (IRON RULE patch, 2026-10-04, Chair Sketch022): a\n // symmetric-ABOUT-AXIS ref (geoId -1/-2) must resolve to the\n // mirror LINE L-1/L-2. ctx.lines has no negative keys, so the old\n // code fell through to p3 = pt(axis point) — compiling\n // \"symmetric about the axis LINE\" into \"symmetric about the\n // origin POINT\", a different constraint that conflicts with the\n // rest of the set (E_SKETCHC_CONFLICTING).\n out.push({ type: 'p2p_symmetric_ppl', id, p1_id: p1, p2_id: p2, l_id: `L${r[2]!.geoId}` });\n } else {\n const p3 = pt(r[2]!);\n if (p3) out.push({ type: 'p2p_symmetric_ppp', id, p1_id: p1, p2_id: p2, p_id: p3 });\n }\n }\n break;\n }\n case ConstraintType.Tangent: {\n // line-circle / circle-circle / line-arc / arc-arc (edge-level, pos=0)\n const a = r[0]!;\n const b = r[1]!;\n if (!a || !b) break;\n const lineA = ctx.lines.has(a.geoId);\n const circA = ctx.circles.has(a.geoId);\n const arcA = ctx.arcs.has(a.geoId);\n const lineB = ctx.lines.has(b.geoId);\n const circB = ctx.circles.has(b.geoId);\n const arcB = ctx.arcs.has(b.geoId);\n if (lineA && circB) out.push({ type: 'tangent_lc', id, l_id: `L${a.geoId}`, c_id: `C${b.geoId}`, internalalignment: 0 });\n else if (circA && lineB) out.push({ type: 'tangent_lc', id, l_id: `L${b.geoId}`, c_id: `C${a.geoId}`, internalalignment: 0 });\n else if (circA && circB) out.push({ type: 'tangent_cc', id, c1_id: `C${a.geoId}`, c2_id: `C${b.geoId}`, internalalignment: 0 });\n else if (lineA && arcB) out.push({ type: 'tangent_la', id, l_id: `L${a.geoId}`, a_id: `A${b.geoId}`, internalalignment: 0 });\n else if (arcA && lineB) out.push({ type: 'tangent_la', id, l_id: `L${b.geoId}`, a_id: `A${a.geoId}`, internalalignment: 0 });\n else if (arcA && arcB) out.push({ type: 'tangent_aa', id, a1_id: `A${a.geoId}`, a2_id: `A${b.geoId}`, internalalignment: 0 });\n break;\n }\n default:\n break; // unsupported types never reach here (guard in solve())\n }\n return out;\n }\n\n private pullBack(\n geoms: FcstdSketchGeom[],\n ctx: {\n lines: Map<number, { p1: PtKey; p2: PtKey }>;\n arcs: Map<number, { center: PtKey; start: PtKey; end: PtKey }>;\n circles: Map<number, { center: PtKey }>;\n ellipses: Map<number, { center: PtKey; focus1: PtKey }>;\n standalone: Map<number, PtKey>;\n },\n ): FcstdSketchGeom[] {\n // After apply_solution, re-derive geometry from the wrapper's primitive\n // state via pull through the wrapper's sketch index.\n const out: FcstdSketchGeom[] = [];\n for (const g of geoms) {\n switch (g.kind) {\n case 'point': {\n const key = ctx.standalone.get(g.index);\n const pt = key ? this.readPoint(key) : undefined;\n out.push(pt ? { ...g, x: pt.x, y: pt.y } : g);\n break;\n }\n case 'line': {\n const l = ctx.lines.get(g.index)!;\n const p1 = this.readPoint(l.p1);\n const p2 = this.readPoint(l.p2);\n out.push(p1 && p2 ? { ...g, x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y } : g);\n break;\n }\n case 'circle': {\n const cc = ctx.circles.get(g.index)!.center;\n const c = this.readPoint(cc);\n const rad = this.readCircleRadius(g.index);\n out.push(c && rad !== undefined ? { ...g, cx: c.x, cy: c.y, radius: rad } : g);\n break;\n }\n case 'arc': {\n const a = ctx.arcs.get(g.index)!;\n const c = this.readPoint(a.center);\n const s = this.readPoint(a.start);\n const e = this.readPoint(a.end);\n if (c && s && e) {\n const r = Math.hypot(s.x - c.x, s.y - c.y);\n const startAngle = Math.atan2(s.y - c.y, s.x - c.x);\n const endAngle = Math.atan2(e.y - c.y, e.x - c.x);\n out.push({ ...g, cx: c.x, cy: c.y, radius: r, startAngle, endAngle, x1: s.x, y1: s.y, x2: e.x, y2: e.y });\n } else out.push(g);\n break;\n }\n case 'bspline': {\n // P4: spline endpoints ride the line proxy; pull their solved coords.\n const l = ctx.lines.get(g.index)!;\n const p1 = this.readPoint(l.p1);\n const p2 = this.readPoint(l.p2);\n out.push(p1 && p2 ? { ...g, x1: p1.x, y1: p1.y, x2: p2.x, y2: p2.y } : g);\n break;\n }\n case 'ellipse': {\n const el = ctx.ellipses.get(g.index)!;\n const c = this.readPoint(el.center);\n const f1 = this.readPoint(el.focus1);\n if (c && f1) {\n // The GCS ellipse primitive is (centre, focus1, radmin): the major\n // radius is DERIVED, a = √(c_focal² + b²) where c_focal = |focus1 −\n // centre| — that is how the push side is read back by GCS itself.\n // Reporting `c_focal` as `majorRadius` (the previous behaviour)\n // silently shrank every ellipse: rx=10/ry=5 came back as 8.66\n // (√75 = √(10²−5²)) — measured 2026-10-03, pinned by\n // `shapes-solve.test.ts` (\"初值即解\" / ellipse).\n const focal = Math.hypot(f1.x - c.x, f1.y - c.y);\n const major = Math.sqrt(focal * focal + g.minorRadius * g.minorRadius);\n const angleXU = Math.atan2(f1.y - c.y, f1.x - c.x);\n // minor radius is a parameter on the ellipse primitive; the pull\n // side is not exposed — keep the stored minor (M3 scope).\n out.push({ ...g, cx: c.x, cy: c.y, majorRadius: major, angleXU });\n } else out.push(g);\n break;\n }\n }\n }\n return out;\n }\n\n /** Read a point's solved coordinates from the sketch index.\n * apply_solution() already pulled every primitive's solved values back into\n * sketch_index (gcs_wrapper.js:104-108), so get_primitive is authoritative. */\n private readPoint(key: PtKey): { x: number; y: number } | undefined {\n const p = this.wrapper.sketch_index.get_primitive(key) as { x?: number; y?: number } | undefined;\n if (!p || typeof p.x !== 'number' || typeof p.y !== 'number') return undefined;\n return { x: p.x, y: p.y };\n }\n\n private readCircleRadius(geoIndex: number): number | undefined {\n const c = this.wrapper.sketch_index.get_primitive(`C${geoIndex}`) as { radius?: number } | undefined;\n return typeof c?.radius === 'number' ? c.radius : undefined;\n }\n}\n"]}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * project — single-point conversion between the canonical sketch model and the
3
+ * two downstream projection dialects (§4.5).
4
+ *
5
+ * canonical ⇄ FCStd (`fcstd-types`, integer ConstraintType + PointPos)
6
+ * canonical ⇄ CadQuery (tag + string constraint names, 0..1 positions)
7
+ *
8
+ * One implementation, two projections: the FCStd side feeds the planegcs solve
9
+ * pipeline; the CadQuery side feeds `cq-compat-sketch`. Constraints with no
10
+ * counterpart in a target dialect raise an explicit `E_SKETCHC_*` — never a
11
+ * silent downgrade.
12
+ */
13
+ import { type FcstdGeoRef, type FcstdSketchGeom, type FcstdSketchCon } from './fcstd-types.js';
14
+ import type { At, Ref, SketchConstraint, SketchConstraintKind, SketchGeom } from './canonical.js';
15
+ /** Projection error with a stable `E_SKETCHC_*` code. */
16
+ export declare class SketchProjectionError extends Error {
17
+ readonly code: string;
18
+ constructor(code: string, message: string);
19
+ }
20
+ /**
21
+ * Map a canonical `At` to an FCStd `PointPos`. Throws `E_SKETCHC_UNMAPPED` when there is no counterpart.
22
+ *
23
+ * @param at - the canonical position.
24
+ * @returns the FCStd `PointPos` integer.
25
+ */
26
+ export declare function atToFreeCad(at: At | undefined): number;
27
+ /**
28
+ * Map an FCStd `PointPos` to a canonical `At` (`mid` FCStd means the centre).
29
+ *
30
+ * @param pos - the FCStd `PointPos` integer.
31
+ * @returns the canonical position, or `undefined` for `none`.
32
+ */
33
+ export declare function atFromFreeCad(pos: number): At | undefined;
34
+ /**
35
+ * Map a canonical `At` to a CadQuery 0..1 parameter (`null` = the arc-centre `None` argument).
36
+ *
37
+ * @param at - the canonical position.
38
+ * @returns the CadQuery 0..1 parameter, or `null` for centre.
39
+ */
40
+ export declare function atToCadQuery(at: At | undefined): number | null;
41
+ /**
42
+ * Map a CadQuery 0..1 parameter to a canonical `At`.
43
+ *
44
+ * @param v - the CadQuery parameter, or `null`/`undefined` for centre.
45
+ * @returns the canonical position, or `undefined` for `null`/`undefined`.
46
+ */
47
+ export declare function atFromCadQuery(v: number | null | undefined): At | undefined;
48
+ /**
49
+ * Build the tag → index lookup for a geometry list in one pass.
50
+ *
51
+ * @param geoms - canonical geometry list.
52
+ * @returns tag → geometry index.
53
+ */
54
+ export declare function buildTagIndex(geoms: SketchGeom[]): Map<string, number>;
55
+ /**
56
+ * Resolve a canonical `Ref` to an FCStd `(geoId, pos)` pair.
57
+ *
58
+ * @param ref - the canonical reference (tag or index + at).
59
+ * @param tagIndex - tag → index map (from {@link buildTagIndex}).
60
+ * @param geoms - the geometry array (for bounds checking of index refs).
61
+ * @returns the FCStd `(geoId, pos)` pair.
62
+ * @throws SketchProjectionError `E_SKETCHC_BAD_REF` for unknown tag or out-of-range index.
63
+ */
64
+ export declare function refToFreeCad(ref: Ref, tagIndex: Map<string, number>, geoms: SketchGeom[]): FcstdGeoRef;
65
+ /**
66
+ * Project canonical geometry to the FCStd shape consumed by the solver.
67
+ *
68
+ * @param geoms - canonical geometry.
69
+ * @returns FCStd geometry records (same order/index).
70
+ * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_GEOM` for reserved kinds.
71
+ */
72
+ export declare function toFreeCadGeoms(geoms: SketchGeom[]): FcstdSketchGeom[];
73
+ /**
74
+ * Project FCStd geometry back to the canonical model (reserved kinds are reported).
75
+ *
76
+ * @param geoms - FCStd geometry records from the solver.
77
+ * @returns canonical geometry (same order/index).
78
+ */
79
+ export declare function fromFreeCadGeoms(geoms: FcstdSketchGeom[]): SketchGeom[];
80
+ /** Result of projecting canonical constraints to FCStd. */
81
+ export interface ProjectedConstraints {
82
+ /** FCStd constraints (index matches the canonical constraint order for kept items). */
83
+ constraints: FcstdSketchCon[];
84
+ /** canonical constraint indices mapped to a deliberate no-op (fixed). */
85
+ noops: number[];
86
+ }
87
+ /**
88
+ * Project canonical constraints to the FCStd shape the solver consumes.
89
+ *
90
+ * @param constraints - canonical constraints.
91
+ * @param geoms - canonical geometry (for tag/index resolution).
92
+ * @returns FCStd constraints plus the no-op (`fixed`) indices.
93
+ */
94
+ export declare function toFreeCadConstraints(constraints: SketchConstraint[], geoms: SketchGeom[]): ProjectedConstraints;
95
+ /** One FCStd constraint that has no canonical counterpart (kept for the fidelity ledger). */
96
+ export interface UnmappedConstraint {
97
+ /** index in the input FCStd constraint array */
98
+ index: number;
99
+ /** raw ConstraintType integer */
100
+ type: number;
101
+ /** human-readable type name (debugging) */
102
+ typeName: string;
103
+ /** why it could not be projected */
104
+ reason: 'unsupported-type' | 'external-or-axis-ref' | 'reference-driven' | 'ambiguous-refs';
105
+ }
106
+ /** Result of projecting FCStd constraints back to canonical form. */
107
+ export interface FromFreeCadConstraints {
108
+ /** canonical constraints, in input order for all projected items */
109
+ constraints: SketchConstraint[];
110
+ /** input indices of constraints that could NOT be projected, with reasons */
111
+ unmapped: UnmappedConstraint[];
112
+ }
113
+ /**
114
+ * Project FCStd sketch constraints back to the canonical model — the reverse of
115
+ * {@link toFreeCadConstraints} / `mapConstraint`. This is the bridge the fcstd
116
+ * converter uses to emit `cad.sketch({ geoms, constraints })` from a parsed
117
+ * `Sketcher::SketchObject` (2026-09-28 plan A1).
118
+ *
119
+ * Mapping notes / GOTCHAs (validated against `mapConstraint` + the planegcs
120
+ * backend):
121
+ * - `length` is stored FCStd-side as a point-to-point Distance over the line's
122
+ * own start/end — a 1-ref Distance projects back to `length` (GOTCHA: a
123
+ * genuine 2-ref Distance between two distinct points is NOT a length).
124
+ * - `fixed` has no FCStd counterpart (the implicit frame absorbs it), so it can
125
+ * never appear in FCStd input — nothing to project back.
126
+ * - Angle values pass through UNCHANGED in both directions: FreeCAD serializes
127
+ * Angle constraint `Value` in radians in the XML, and the planegcs backend
128
+ * forwards it verbatim. Consumers wanting canonical degrees must convert at
129
+ * the boundary that knows the file unit (GOTCHA 2026-09-28: forward
130
+ * projection also passes through, so roundtrips are unit-consistent).
131
+ * - Constraints referencing the axes (geoId -1/-2) or external geometry
132
+ * (geoId <= -3) have no canonical Ref (canonical refs are own-geometry
133
+ * indices only) — reported in `unmapped` with reason
134
+ * `external-or-axis-ref` instead of being silently dropped.
135
+ * - `isDriving === false` (reference/driven) constraints carry no solve
136
+ * information — reported with reason `reference-driven`.
137
+ * - A constraint with fewer refs than its type requires (e.g. a 1-ref
138
+ * `DistanceY`, which FreeCAD writes when the axis is implicit) is reported
139
+ * with reason `ambiguous-refs`; see `REFS_REQUIRED`. This projection never
140
+ * throws on such input.
141
+ *
142
+ * @param cons - FCStd constraints (e.g. from `parseSketchObject`).
143
+ * @param _geoms - unused; kept for signature symmetry with the projection pipeline.
144
+ * @returns canonical constraints plus the unmapped ledger.
145
+ */
146
+ export declare function fromFreeCadConstraints(cons: FcstdSketchCon[], _geoms: SketchGeom[]): FromFreeCadConstraints;
147
+ /** CadQuery constraint names for the canonical kinds it supports (the other 8). */
148
+ export declare const CONSTRAINT_KIND_TO_CADQUERY: Partial<Record<SketchConstraintKind, string>>;
149
+ /**
150
+ * CadQuery constraint name → canonical kind.
151
+ *
152
+ * Beyond the one-name-per-kind reverse of {@link CONSTRAINT_KIND_TO_CADQUERY},
153
+ * CadQuery spells the fixed constraint **two** ways — `Fixed` (whole entity) and
154
+ * `FixedPoint` (a point) — and both mean canonical `fixed` here. The forward
155
+ * direction emits `FixedPoint`; the reverse direction must accept either, or a
156
+ * caller that reads upstream CadQuery scripts (`s.constrain(f, "Fixed")`) gets
157
+ * `E_SKETCHC_UNSUPPORTED_CONSTRAINT` on a name upstream accepts.
158
+ */
159
+ export declare const CADQUERY_TO_CONSTRAINT_KIND: Record<string, SketchConstraintKind>;
160
+ /**
161
+ * Map a canonical constraint kind to its CadQuery name.
162
+ *
163
+ * @param kind - canonical constraint kind.
164
+ * @returns the CadQuery constraint name.
165
+ * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_BY_CQ` when CQ has no counterpart.
166
+ */
167
+ export declare function constraintKindToCadQuery(kind: SketchConstraintKind): string;
168
+ /**
169
+ * Map a CadQuery constraint name to its canonical kind.
170
+ *
171
+ * @param name - CadQuery constraint name.
172
+ * @returns the canonical kind.
173
+ * @throws SketchProjectionError `E_SKETCHC_UNSUPPORTED_CONSTRAINT` for unknown names.
174
+ */
175
+ export declare function constraintKindFromCadQuery(name: string): SketchConstraintKind;
176
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/sketch/project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAqD,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjJ,OAAO,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGjG,yDAAyD;AACzD,qBAAa,qBAAsB,SAAQ,KAAK;aAClB,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAI1D;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,GAAG,MAAM,CActD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,GAAG,SAAS,CAQzD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAMtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,WAAW,CA2BtG;AAaD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CA4ErE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAmBvE;AA4ED,2DAA2D;AAC3D,MAAM,WAAW,oBAAoB;IACnC,uFAAuF;IACvF,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,yEAAyE;IACzE,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAa/G;AAID,6FAA6F;AAC7F,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;CAC5F;AAED,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,6EAA6E;IAC7E,QAAQ,EAAE,kBAAkB,EAAE,CAAA;CAC/B;AAiCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,sBAAsB,CA+K3G;AAID,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CASrF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAK5E,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAM3E;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAM7E"}