@faicad/faijs 0.33.2 → 0.35.8

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 (429) 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/entities.js +14 -4
  9. package/dist/api/assembly/entities.js.map +1 -1
  10. package/dist/api/assembly/solve-tree.d.ts +1 -0
  11. package/dist/api/assembly/solve-tree.d.ts.map +1 -1
  12. package/dist/api/assembly/solve-tree.js +42 -17
  13. package/dist/api/assembly/solve-tree.js.map +1 -1
  14. package/dist/api/assembly/solve.d.ts +1 -0
  15. package/dist/api/assembly/solve.d.ts.map +1 -1
  16. package/dist/api/assembly/solve.js.map +1 -1
  17. package/dist/api/assembly/solvers/global-solver.d.ts.map +1 -1
  18. package/dist/api/assembly/solvers/global-solver.js +130 -23
  19. package/dist/api/assembly/solvers/global-solver.js.map +1 -1
  20. package/dist/api/assembly/solvers/pose-from-delta.d.ts +9 -0
  21. package/dist/api/assembly/solvers/pose-from-delta.d.ts.map +1 -1
  22. package/dist/api/assembly/solvers/pose-from-delta.js +23 -0
  23. package/dist/api/assembly/solvers/pose-from-delta.js.map +1 -1
  24. package/dist/api/assembly/solvers/types.d.ts +20 -2
  25. package/dist/api/assembly/solvers/types.d.ts.map +1 -1
  26. package/dist/api/assembly/solvers/types.js.map +1 -1
  27. package/dist/api/chamfer.d.ts +7 -4
  28. package/dist/api/chamfer.d.ts.map +1 -1
  29. package/dist/api/chamfer.js +57 -13
  30. package/dist/api/chamfer.js.map +1 -1
  31. package/dist/api/draft.d.ts +7 -4
  32. package/dist/api/draft.d.ts.map +1 -1
  33. package/dist/api/draft.js +11 -6
  34. package/dist/api/draft.js.map +1 -1
  35. package/dist/api/edge-ref.d.ts +4 -4
  36. package/dist/api/edge-ref.js +4 -4
  37. package/dist/api/edge-ref.js.map +1 -1
  38. package/dist/api/extrude.d.ts +10 -6
  39. package/dist/api/extrude.d.ts.map +1 -1
  40. package/dist/api/extrude.js +54 -26
  41. package/dist/api/extrude.js.map +1 -1
  42. package/dist/api/face-ref.d.ts +4 -4
  43. package/dist/api/face-ref.js +4 -4
  44. package/dist/api/face-ref.js.map +1 -1
  45. package/dist/api/feature-repair.d.ts +6 -3
  46. package/dist/api/feature-repair.d.ts.map +1 -1
  47. package/dist/api/feature-repair.js +12 -7
  48. package/dist/api/feature-repair.js.map +1 -1
  49. package/dist/api/fillet-variable.d.ts +6 -2
  50. package/dist/api/fillet-variable.d.ts.map +1 -1
  51. package/dist/api/fillet-variable.js +24 -6
  52. package/dist/api/fillet-variable.js.map +1 -1
  53. package/dist/api/fillet.d.ts +7 -4
  54. package/dist/api/fillet.d.ts.map +1 -1
  55. package/dist/api/fillet.js +92 -12
  56. package/dist/api/fillet.js.map +1 -1
  57. package/dist/api/generated/script-face-manifest.js +1 -1
  58. package/dist/api/generated/script-face-manifest.js.map +1 -1
  59. package/dist/api/generated/topology.js +1 -1
  60. package/dist/api/generated/topology.js.map +1 -1
  61. package/dist/api/helix.d.ts +13 -13
  62. package/dist/api/helix.d.ts.map +1 -1
  63. package/dist/api/helix.js +19 -24
  64. package/dist/api/helix.js.map +1 -1
  65. package/dist/api/import-brep.d.ts +10 -18
  66. package/dist/api/import-brep.d.ts.map +1 -1
  67. package/dist/api/import-brep.js +17 -25
  68. package/dist/api/import-brep.js.map +1 -1
  69. package/dist/api/import-step.d.ts +10 -15
  70. package/dist/api/import-step.d.ts.map +1 -1
  71. package/dist/api/import-step.js +24 -29
  72. package/dist/api/import-step.js.map +1 -1
  73. package/dist/api/index.js +2 -2
  74. package/dist/api/index.js.map +1 -1
  75. package/dist/api/internal/export-members.js.map +1 -1
  76. package/dist/api/loft-advanced.d.ts +4 -0
  77. package/dist/api/loft-advanced.d.ts.map +1 -1
  78. package/dist/api/loft-advanced.js +4 -0
  79. package/dist/api/loft-advanced.js.map +1 -1
  80. package/dist/api/loft.d.ts +5 -3
  81. package/dist/api/loft.d.ts.map +1 -1
  82. package/dist/api/loft.js +5 -3
  83. package/dist/api/loft.js.map +1 -1
  84. package/dist/api/meta.d.ts +42 -6
  85. package/dist/api/meta.d.ts.map +1 -1
  86. package/dist/api/meta.js.map +1 -1
  87. package/dist/api/primitives.d.ts +3 -2
  88. package/dist/api/primitives.d.ts.map +1 -1
  89. package/dist/api/primitives.js +3 -2
  90. package/dist/api/primitives.js.map +1 -1
  91. package/dist/api/punch-hole.d.ts +5 -2
  92. package/dist/api/punch-hole.d.ts.map +1 -1
  93. package/dist/api/punch-hole.js +4 -1
  94. package/dist/api/punch-hole.js.map +1 -1
  95. package/dist/api/replicate.d.ts +4 -5
  96. package/dist/api/replicate.d.ts.map +1 -1
  97. package/dist/api/replicate.js +4 -5
  98. package/dist/api/replicate.js.map +1 -1
  99. package/dist/api/selectors-to-refs.d.ts +83 -0
  100. package/dist/api/selectors-to-refs.d.ts.map +1 -0
  101. package/dist/api/selectors-to-refs.js +211 -0
  102. package/dist/api/selectors-to-refs.js.map +1 -0
  103. package/dist/api/shell.d.ts +17 -8
  104. package/dist/api/shell.d.ts.map +1 -1
  105. package/dist/api/shell.js +45 -15
  106. package/dist/api/shell.js.map +1 -1
  107. package/dist/api/sketch-on-face.d.ts +12 -6
  108. package/dist/api/sketch-on-face.d.ts.map +1 -1
  109. package/dist/api/sketch-on-face.js +31 -4
  110. package/dist/api/sketch-on-face.js.map +1 -1
  111. package/dist/api/sketch-on-plane.d.ts +3 -0
  112. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  113. package/dist/api/sketch-on-plane.js +3 -0
  114. package/dist/api/sketch-on-plane.js.map +1 -1
  115. package/dist/api/sketch-on-surface.d.ts +4 -1
  116. package/dist/api/sketch-on-surface.d.ts.map +1 -1
  117. package/dist/api/sketch-on-surface.js +4 -1
  118. package/dist/api/sketch-on-surface.js.map +1 -1
  119. package/dist/api/surface/arg-spec.d.ts.map +1 -1
  120. package/dist/api/surface/arg-spec.js +5 -6
  121. package/dist/api/surface/arg-spec.js.map +1 -1
  122. package/dist/api/topo-resolve.d.ts.map +1 -1
  123. package/dist/api/topo-resolve.js +24 -5
  124. package/dist/api/topo-resolve.js.map +1 -1
  125. package/dist/api/view/view-projection.d.ts.map +1 -1
  126. package/dist/api/view/view-projection.js +9 -2
  127. package/dist/api/view/view-projection.js.map +1 -1
  128. package/dist/brep/brep-chain.js +2 -2
  129. package/dist/brep/brep-chain.js.map +1 -1
  130. package/dist/brep/brep-ops.d.ts +1 -1
  131. package/dist/brep/brep-ops.js +1 -1
  132. package/dist/brep/brep-ops.js.map +1 -1
  133. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  134. package/dist/brep/engine/adapters/brep-mock.js +45 -0
  135. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  136. package/dist/brep/engine/primitives.d.ts +87 -3
  137. package/dist/brep/engine/primitives.d.ts.map +1 -1
  138. package/dist/brep/engine/primitives.js +1 -1
  139. package/dist/brep/engine/primitives.js.map +1 -1
  140. package/dist/brep/engine/registry.d.ts +33 -7
  141. package/dist/brep/engine/registry.d.ts.map +1 -1
  142. package/dist/brep/engine/registry.js +47 -16
  143. package/dist/brep/engine/registry.js.map +1 -1
  144. package/dist/brep/handle-bridge.d.ts +14 -15
  145. package/dist/brep/handle-bridge.d.ts.map +1 -1
  146. package/dist/brep/handle-bridge.js +35 -15
  147. package/dist/brep/handle-bridge.js.map +1 -1
  148. package/dist/brep/primitives-brep.js +2 -2
  149. package/dist/brep/primitives-brep.js.map +1 -1
  150. package/dist/brep/text/text-to-solid.d.ts +40 -3
  151. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  152. package/dist/brep/text/text-to-solid.js +104 -24
  153. package/dist/brep/text/text-to-solid.js.map +1 -1
  154. package/dist/brepkit-kernel/brepkitKernel.d.ts +2 -2
  155. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  156. package/dist/brepkit-kernel/brepkitKernel.js +328 -38
  157. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  158. package/dist/brepkit-kernel/brepkitWasm.d.ts +3 -1
  159. package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
  160. package/dist/brepkit-kernel/brepkitWasm.js +13 -9
  161. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  162. package/dist/brepkit-kernel/multi-version-test.d.ts +2 -2
  163. package/dist/brepkit-kernel/multi-version-test.d.ts.map +1 -1
  164. package/dist/brepkit-kernel/multi-version-test.js +6 -6
  165. package/dist/brepkit-kernel/multi-version-test.js.map +1 -1
  166. package/dist/browser.d.ts +2 -3
  167. package/dist/browser.d.ts.map +1 -1
  168. package/dist/browser.js +1 -2
  169. package/dist/browser.js.map +1 -1
  170. package/dist/cad-runtime/admit-compat-lib.d.ts +9 -1
  171. package/dist/cad-runtime/admit-compat-lib.d.ts.map +1 -1
  172. package/dist/cad-runtime/admit-compat-lib.js +11 -1
  173. package/dist/cad-runtime/admit-compat-lib.js.map +1 -1
  174. package/dist/cad-runtime/browser-lib-loader.d.ts +16 -11
  175. package/dist/cad-runtime/browser-lib-loader.d.ts.map +1 -1
  176. package/dist/cad-runtime/browser-lib-loader.js +16 -8
  177. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  178. package/dist/cad-runtime/direct-executor.d.ts +62 -5
  179. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  180. package/dist/cad-runtime/direct-executor.js +617 -42
  181. package/dist/cad-runtime/direct-executor.js.map +1 -1
  182. package/dist/cad-runtime/interp/closure.d.ts +3 -2
  183. package/dist/cad-runtime/interp/closure.d.ts.map +1 -1
  184. package/dist/cad-runtime/interp/closure.js.map +1 -1
  185. package/dist/cad-runtime/interp/env.d.ts +9 -6
  186. package/dist/cad-runtime/interp/env.d.ts.map +1 -1
  187. package/dist/cad-runtime/interp/env.js +4 -2
  188. package/dist/cad-runtime/interp/env.js.map +1 -1
  189. package/dist/cad-runtime/lib-decl.d.ts +121 -0
  190. package/dist/cad-runtime/lib-decl.d.ts.map +1 -0
  191. package/dist/cad-runtime/lib-decl.js +100 -0
  192. package/dist/cad-runtime/lib-decl.js.map +1 -0
  193. package/dist/cad-runtime/ports.d.ts +12 -0
  194. package/dist/cad-runtime/ports.d.ts.map +1 -1
  195. package/dist/cad-runtime/ports.js.map +1 -1
  196. package/dist/cad-runtime/runtime.d.ts +59 -5
  197. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  198. package/dist/cad-runtime/runtime.js +252 -20
  199. package/dist/cad-runtime/runtime.js.map +1 -1
  200. package/dist/extra/browser.d.ts +9 -0
  201. package/dist/extra/browser.d.ts.map +1 -0
  202. package/dist/extra/browser.js +9 -0
  203. package/dist/extra/browser.js.map +1 -0
  204. package/dist/extra/editor-ops.d.ts +22 -0
  205. package/dist/extra/editor-ops.d.ts.map +1 -0
  206. package/dist/extra/editor-ops.js +21 -0
  207. package/dist/extra/editor-ops.js.map +1 -0
  208. package/dist/extra/extras/svg-extrude.d.ts +45 -0
  209. package/dist/extra/extras/svg-extrude.d.ts.map +1 -0
  210. package/dist/extra/extras/svg-extrude.js +110 -0
  211. package/dist/extra/extras/svg-extrude.js.map +1 -0
  212. package/dist/extra/extras/text-cjk.d.ts +36 -0
  213. package/dist/extra/extras/text-cjk.d.ts.map +1 -0
  214. package/dist/extra/extras/text-cjk.js +86 -0
  215. package/dist/extra/extras/text-cjk.js.map +1 -0
  216. package/dist/extra/extras/text-geometry.d.ts +69 -0
  217. package/dist/extra/extras/text-geometry.d.ts.map +1 -0
  218. package/dist/extra/extras/text-geometry.js +188 -0
  219. package/dist/extra/extras/text-geometry.js.map +1 -0
  220. package/dist/extra/index.d.ts +40 -0
  221. package/dist/extra/index.d.ts.map +1 -0
  222. package/dist/extra/index.js +40 -0
  223. package/dist/extra/index.js.map +1 -0
  224. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts +94 -0
  225. package/dist/extra/mesh/drill-hole/DrillHoleCore.d.ts.map +1 -0
  226. package/dist/extra/mesh/drill-hole/DrillHoleCore.js +282 -0
  227. package/dist/extra/mesh/drill-hole/DrillHoleCore.js.map +1 -0
  228. package/dist/extra/mesh/drill-hole/drill-types.d.ts +34 -0
  229. package/dist/extra/mesh/drill-hole/drill-types.d.ts.map +1 -0
  230. package/dist/extra/mesh/drill-hole/drill-types.js +7 -0
  231. package/dist/extra/mesh/drill-hole/drill-types.js.map +1 -0
  232. package/dist/extra/mesh/engrave-decoration.d.ts +42 -0
  233. package/dist/extra/mesh/engrave-decoration.d.ts.map +1 -0
  234. package/dist/extra/mesh/engrave-decoration.js +39 -0
  235. package/dist/extra/mesh/engrave-decoration.js.map +1 -0
  236. package/dist/extra/mesh/fai_drill.d.ts +21 -0
  237. package/dist/extra/mesh/fai_drill.d.ts.map +1 -0
  238. package/dist/extra/mesh/fai_drill.js +89 -0
  239. package/dist/extra/mesh/fai_drill.js.map +1 -0
  240. package/dist/extra/mesh/fai_extrude.d.ts +24 -0
  241. package/dist/extra/mesh/fai_extrude.d.ts.map +1 -0
  242. package/dist/extra/mesh/fai_extrude.js +42 -0
  243. package/dist/extra/mesh/fai_extrude.js.map +1 -0
  244. package/dist/extra/mesh/fai_split.d.ts +164 -0
  245. package/dist/extra/mesh/fai_split.d.ts.map +1 -0
  246. package/dist/extra/mesh/fai_split.js +269 -0
  247. package/dist/extra/mesh/fai_split.js.map +1 -0
  248. package/dist/extra/mesh/primitives.d.ts +29 -0
  249. package/dist/extra/mesh/primitives.d.ts.map +1 -0
  250. package/dist/extra/mesh/primitives.js +41 -0
  251. package/dist/extra/mesh/primitives.js.map +1 -0
  252. package/dist/extra/op-names.d.ts +37 -0
  253. package/dist/extra/op-names.d.ts.map +1 -0
  254. package/dist/extra/op-names.js +46 -0
  255. package/dist/extra/op-names.js.map +1 -0
  256. package/dist/extra/ops/compound.d.ts +140 -0
  257. package/dist/extra/ops/compound.d.ts.map +1 -0
  258. package/dist/extra/ops/compound.js +167 -0
  259. package/dist/extra/ops/compound.js.map +1 -0
  260. package/dist/extra/ops/copy.d.ts +40 -0
  261. package/dist/extra/ops/copy.d.ts.map +1 -0
  262. package/dist/extra/ops/copy.js +83 -0
  263. package/dist/extra/ops/copy.js.map +1 -0
  264. package/dist/extra/ops/fai_drill.d.ts +51 -0
  265. package/dist/extra/ops/fai_drill.d.ts.map +1 -0
  266. package/dist/extra/ops/fai_drill.js +233 -0
  267. package/dist/extra/ops/fai_drill.js.map +1 -0
  268. package/dist/extra/ops/fai_extrude.d.ts +36 -0
  269. package/dist/extra/ops/fai_extrude.d.ts.map +1 -0
  270. package/dist/extra/ops/fai_extrude.js +84 -0
  271. package/dist/extra/ops/fai_extrude.js.map +1 -0
  272. package/dist/extra/ops/fai_split.d.ts +46 -0
  273. package/dist/extra/ops/fai_split.d.ts.map +1 -0
  274. package/dist/extra/ops/fai_split.js +235 -0
  275. package/dist/extra/ops/fai_split.js.map +1 -0
  276. package/dist/extra/ops/load.d.ts +49 -0
  277. package/dist/extra/ops/load.d.ts.map +1 -0
  278. package/dist/extra/ops/load.js +423 -0
  279. package/dist/extra/ops/load.js.map +1 -0
  280. package/dist/extra/ops/svg-extrude.d.ts +32 -0
  281. package/dist/extra/ops/svg-extrude.d.ts.map +1 -0
  282. package/dist/extra/ops/svg-extrude.js +74 -0
  283. package/dist/extra/ops/svg-extrude.js.map +1 -0
  284. package/dist/extra/ops/text.d.ts +34 -0
  285. package/dist/extra/ops/text.d.ts.map +1 -0
  286. package/dist/extra/ops/text.js +100 -0
  287. package/dist/extra/ops/text.js.map +1 -0
  288. package/dist/geometry2d/bridge/lift-on-plane.d.ts +8 -5
  289. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  290. package/dist/geometry2d/bridge/lift-on-plane.js +8 -5
  291. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  292. package/dist/index.d.ts +6 -2
  293. package/dist/index.d.ts.map +1 -1
  294. package/dist/index.js +8 -2
  295. package/dist/index.js.map +1 -1
  296. package/dist/lang/symbol-table.d.ts +3 -3
  297. package/dist/lang/symbol-table.generated.d.ts +10 -0
  298. package/dist/lang/symbol-table.generated.d.ts.map +1 -1
  299. package/dist/lang/symbol-table.generated.js +10 -0
  300. package/dist/lang/symbol-table.generated.js.map +1 -1
  301. package/dist/lang/symbol-table.js +3 -3
  302. package/dist/lang/symbol-table.js.map +1 -1
  303. package/dist/math3d/index.d.ts +1 -1
  304. package/dist/math3d/index.js +1 -1
  305. package/dist/math3d/index.js.map +1 -1
  306. package/dist/mesh/engrave.d.ts +2 -3
  307. package/dist/mesh/engrave.d.ts.map +1 -1
  308. package/dist/mesh/engrave.js +4 -11
  309. package/dist/mesh/engrave.js.map +1 -1
  310. package/dist/mesh/index.d.ts +0 -2
  311. package/dist/mesh/index.d.ts.map +1 -1
  312. package/dist/mesh/index.js +0 -2
  313. package/dist/mesh/index.js.map +1 -1
  314. package/dist/mesh/primitives.d.ts +7 -5
  315. package/dist/mesh/primitives.d.ts.map +1 -1
  316. package/dist/mesh/primitives.js +16 -9
  317. package/dist/mesh/primitives.js.map +1 -1
  318. package/dist/mesh/types.d.ts +4 -3
  319. package/dist/mesh/types.d.ts.map +1 -1
  320. package/dist/mesh/types.js.map +1 -1
  321. package/dist/node-host/cli.d.ts +11 -4
  322. package/dist/node-host/cli.d.ts.map +1 -1
  323. package/dist/node-host/cli.js +53 -28
  324. package/dist/node-host/cli.js.map +1 -1
  325. package/dist/node-host/execute-script.d.ts.map +1 -1
  326. package/dist/node-host/execute-script.js +3 -4
  327. package/dist/node-host/execute-script.js.map +1 -1
  328. package/dist/node-host/lib-package-json.d.ts +36 -0
  329. package/dist/node-host/lib-package-json.d.ts.map +1 -0
  330. package/dist/node-host/lib-package-json.js +73 -0
  331. package/dist/node-host/lib-package-json.js.map +1 -0
  332. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  333. package/dist/occt-kernel/occt-primitives.js +41 -0
  334. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  335. package/dist/occt-kernel/occtKernel.d.ts +1 -1
  336. package/dist/occt-kernel/occtKernel.js +1 -1
  337. package/dist/occt-kernel/occtKernel.js.map +1 -1
  338. package/dist/primitives/brep-primitives.d.ts.map +1 -1
  339. package/dist/primitives/brep-primitives.js +39 -12
  340. package/dist/primitives/brep-primitives.js.map +1 -1
  341. package/dist/runtime-state.d.ts +28 -1
  342. package/dist/runtime-state.d.ts.map +1 -1
  343. package/dist/runtime-state.js +14 -1
  344. package/dist/runtime-state.js.map +1 -1
  345. package/dist/sdk.d.ts +2 -2
  346. package/dist/sdk.d.ts.map +1 -1
  347. package/dist/sdk.js +11 -2
  348. package/dist/sdk.js.map +1 -1
  349. package/dist/sketch/bspline.d.ts +58 -0
  350. package/dist/sketch/bspline.d.ts.map +1 -0
  351. package/dist/sketch/bspline.js +104 -0
  352. package/dist/sketch/bspline.js.map +1 -0
  353. package/dist/sketch/canonical.d.ts +239 -0
  354. package/dist/sketch/canonical.d.ts.map +1 -0
  355. package/dist/sketch/canonical.js +17 -0
  356. package/dist/sketch/canonical.js.map +1 -0
  357. package/dist/sketch/contour.d.ts +43 -0
  358. package/dist/sketch/contour.d.ts.map +1 -0
  359. package/dist/sketch/contour.js +202 -0
  360. package/dist/sketch/contour.js.map +1 -0
  361. package/dist/sketch/dim-spec.d.ts +32 -0
  362. package/dist/sketch/dim-spec.d.ts.map +1 -0
  363. package/dist/sketch/dim-spec.js +112 -0
  364. package/dist/sketch/dim-spec.js.map +1 -0
  365. package/dist/sketch/faces.d.ts +45 -0
  366. package/dist/sketch/faces.d.ts.map +1 -0
  367. package/dist/sketch/faces.js +108 -0
  368. package/dist/sketch/faces.js.map +1 -0
  369. package/dist/sketch/fcstd-types.d.ts +194 -0
  370. package/dist/sketch/fcstd-types.d.ts.map +1 -0
  371. package/dist/sketch/fcstd-types.js +67 -0
  372. package/dist/sketch/fcstd-types.js.map +1 -0
  373. package/dist/sketch/index.d.ts +46 -0
  374. package/dist/sketch/index.d.ts.map +1 -0
  375. package/dist/sketch/index.js +39 -0
  376. package/dist/sketch/index.js.map +1 -0
  377. package/dist/sketch/node.d.ts +14 -0
  378. package/dist/sketch/node.d.ts.map +1 -0
  379. package/dist/sketch/node.js +43 -0
  380. package/dist/sketch/node.js.map +1 -0
  381. package/dist/sketch/op.d.ts +111 -0
  382. package/dist/sketch/op.d.ts.map +1 -0
  383. package/dist/sketch/op.js +185 -0
  384. package/dist/sketch/op.js.map +1 -0
  385. package/dist/sketch/planegcs-backend.d.ts +69 -0
  386. package/dist/sketch/planegcs-backend.d.ts.map +1 -0
  387. package/dist/sketch/planegcs-backend.js +812 -0
  388. package/dist/sketch/planegcs-backend.js.map +1 -0
  389. package/dist/sketch/project.d.ts +176 -0
  390. package/dist/sketch/project.d.ts.map +1 -0
  391. package/dist/sketch/project.js +656 -0
  392. package/dist/sketch/project.js.map +1 -0
  393. package/dist/sketch/shapes.d.ts +370 -0
  394. package/dist/sketch/shapes.d.ts.map +1 -0
  395. package/dist/sketch/shapes.js +959 -0
  396. package/dist/sketch/shapes.js.map +1 -0
  397. package/dist/sketch/solve.d.ts +21 -0
  398. package/dist/sketch/solve.d.ts.map +1 -0
  399. package/dist/sketch/solve.js +144 -0
  400. package/dist/sketch/solve.js.map +1 -0
  401. package/dist/sketch/solver-loader.d.ts +47 -0
  402. package/dist/sketch/solver-loader.d.ts.map +1 -0
  403. package/dist/sketch/solver-loader.js +77 -0
  404. package/dist/sketch/solver-loader.js.map +1 -0
  405. package/dist/sketch/solver.d.ts +63 -0
  406. package/dist/sketch/solver.d.ts.map +1 -0
  407. package/dist/sketch/solver.js +28 -0
  408. package/dist/sketch/solver.js.map +1 -0
  409. package/dist/sketch/verify.d.ts +53 -0
  410. package/dist/sketch/verify.d.ts.map +1 -0
  411. package/dist/sketch/verify.js +71 -0
  412. package/dist/sketch/verify.js.map +1 -0
  413. package/dist/topology/naming/geom-hint.d.ts +12 -0
  414. package/dist/topology/naming/geom-hint.d.ts.map +1 -1
  415. package/dist/topology/naming/geom-hint.js +1 -1
  416. package/dist/topology/naming/geom-hint.js.map +1 -1
  417. package/dist/topology/naming/lineage.d.ts +1 -0
  418. package/dist/topology/naming/lineage.d.ts.map +1 -1
  419. package/dist/topology/naming/lineage.js +37 -1
  420. package/dist/topology/naming/lineage.js.map +1 -1
  421. package/dist/topology/naming/resolve-face.d.ts +13 -2
  422. package/dist/topology/naming/resolve-face.d.ts.map +1 -1
  423. package/dist/topology/naming/resolve-face.js +18 -2
  424. package/dist/topology/naming/resolve-face.js.map +1 -1
  425. package/dist/weapp.d.ts +1 -1
  426. package/dist/weapp.d.ts.map +1 -1
  427. package/dist/weapp.js +1 -1
  428. package/dist/weapp.js.map +1 -1
  429. package/package.json +43 -11
@@ -1 +1 @@
1
- {"version":3,"file":"global-solver.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/global-solver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,uBAAuB,EAAmB,MAAM,SAAS,CAAA;AAClE,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAEL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,UAAU,EACV,OAAO,EACP,GAAG,EACH,GAAG,EACH,iBAAiB,GAClB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA;AAC7B,MAAM,MAAM,GAAG,IAAI,CAAA,CAAC,KAAK;AACzB,MAAM,UAAU,GAAG,IAAI,CAAA;AACvB,MAAM,UAAU,GAAG,IAAI,CAAA;AACvB,MAAM,UAAU,GAAG,KAAK,CAAA;AACxB,MAAM,WAAW,GAAG,KAAK,CAAA;AACzB,MAAM,OAAO,GAAG,KAAK,CAAA,CAAC,oBAAoB;AAC1C,MAAM,aAAa,GAAG,IAAI,CAAA,CAAC,YAAY;AAmBvC,kDAAkD;AAClD,SAAS,aAAa,CAAC,GAAc,EAAE,GAAwB;IAC7D,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzE,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3E,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM;SACP,CAAA;IACH,CAAC;IACD,iDAAiD;IACjD,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACxC,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClD,qFAAqF;YACrF,2FAA2F;YAC3F,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,SAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACxE,CAAA;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClD,gGAAgG;YAChG,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAClE,CAAA;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,CAAe,EAAE,CAAO,EAAE,CAAO;IACpD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC/E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpC,CAAC;AACD,SAAS,SAAS,CAAC,CAAe,EAAE,CAAO;IACzC,mFAAmF;IACnF,yEAAyE;IACzE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED,iCAAiC;AACjC,SAAS,YAAY,CAAC,CAAW,EAAE,EAAwB,EAAE,EAAwB,EAAE,KAAa;IAClG,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACvC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YACxC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YACxC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;gBAAE,OAAO,CAAC,CAAA,CAAC,cAAc;YACpD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,cAAc;QAC3D,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YAChC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;YAChC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,cAAc;YAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,CAAC,cAAc;YACzE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,WAAW;QACrD,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,IAAI;YAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,OAAO;YACvC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,QAAQ;YAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;gBAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,0BAA0B;YACrF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;YACpC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAC,QAAQ;QACrB,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,IAAI;YAC7C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,OAAO;YAC/C,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,MAAM;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACpE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;gBAAE,OAAO,IAAI,CAAA,CAAC,cAAc;YACvD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAC,0BAA0B;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,SAAS,WAAW,CAAC,CAAW;IAC9B,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7E,KAAK,gBAAgB;YACnB,OAAO,CAAC,CAAA;QACV,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AACD,KAAK,WAAW,CAAA,CAAC,+BAA+B;AAEhD;;;;GAIG;AACH,SAAS,cAAc,CAAC,CAAW,EAAE,CAAS;IAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,MAAK;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBACxB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM;oBAAE,SAAQ;gBACpC,8DAA8D;gBAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;gBACvD,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA;gBAC9G,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;gBAClC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;oBACxB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;oBACxB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;oBAChC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;gBAClC,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;oBACxB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;oBACxB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;oBAChC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,KAAK,KAAK,EAAE;YAAE,OAAO,IAAI,CAAA;IAC/B,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAClD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAS,yBAAyB,CAChC,KAAiB,EACjB,KAAa,EACb,CAAS,EACT,CAAW,EACX,OAA0D;IAE1D,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACrB,wBAAwB;IACxB,MAAM,SAAS,GAAG,CAAC,EAAY,EAAY,EAAE;QAC3C,MAAM,CAAC,GAAa,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;YACtE,KAAK,MAAM,CAAC,IAAI,CAAC;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IACD,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IAC7B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA,CAAC,aAAa;IACnC,MAAM,CAAC,GAAa,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;QACpB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACZ,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;QACpB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACZ,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;QACxB,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;QACxB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;YAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACpF,CAAC;IACD,8BAA8B;IAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC1C,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;YAAE,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;QAC1E,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAAE,QAAQ,EAAE,CAAA,CAAC,mBAAmB;IAC3D,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAC5B,MAAM,EAAE,GAAa,CAAC,CAAC,KAAK,EAAE,CAAA;IAC9B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,oBAAoB;QAClE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;YAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACzB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAA,CAAC,wBAAwB;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAChD,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC;QAAE,OAAO,QAAQ,GAAG,CAAC,CAAA,CAAC,WAAW;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,MAAM,CAAA;IACrE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,OAAgB,EAChB,WAAqB,EACrB,WAAiC,EACjC,IAAmB;IAEnB,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,oBAAoB,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IAC1C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,GAAyB,IAAI,CAAA;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,EAAE,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,MAAM,GAAG,GAAwB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAEtF,sBAAsB;IACtB,MAAM,KAAK,GAAe,EAAE,CAAA;IAC5B,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,QAAQ,GAAW,EAAE,CAAA;IAE3B,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACvC,CAAC,CAAA;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,GAAG,IAAI,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAChC,OAAM;QACR,CAAC;QACD,oEAAoE;QACpE,kEAAkE;QAClE,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACtB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YACD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACpD,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC9D,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI;aACxB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACtB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACnE,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YACnE,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;gBAC1D,OAAM;YACR,CAAC;YACD,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAClC,KAAK,CAAC,IAAI,CAAC;gBACT,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACvG,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK;aACzB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC/B,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACpB,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACX,WAAW,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACjE,OAAM;YACR,CAAC;YACD,wCAAwC;YACxC,MAAM,IAAI,GAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACtD,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;oBACnB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;oBAChD,EAAE,EAAE,CAAC,CAAC;oBACN,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;oBACnE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK;iBACzB,CAAC,CAAA;YACJ,CAAC;YACD,OAAM;QACR,CAAC;QACD,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACvF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC/D,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClB,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI;YAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9C,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI;YAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAE9C,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAClC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAEpD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC/C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,wCAAwC,CAAC,CAAA;oBACnE,OAAM;gBACR,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC/G,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBACjF,MAAK;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC1C,MAAK;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC7C,WAAW,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;oBACnE,OAAM;gBACR,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBACjF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBACtH,MAAK;YACP,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;gBAC9D,MAAK;YACP,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBACjG,MAAK;YACP,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBACjF,MAAK;YACP,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC3F,MAAK;YACP,CAAC;YACD;gBACE,WAAW,CAAC,IAAI,CAAC,gCAAiC,CAAuB,CAAC,IAAI,EAAE,CAAC,CAAA;QACrF,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,cAAc;IACd,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACb,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAClB,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,8CAA8C;QAC9C,iDAAiD;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,GAAG,IAAI,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAEpC,gBAAgB;IAChB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;QACrB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;QACrB,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,EAAY,EAAE,CAAS,EAAwB,EAAE;QAChE,mDAAmD;QACnD,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QAChD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;QAC3D,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA;QAC1B,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;SACjD,CAAA;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,CAAC,EAAY,EAAY,EAAE;QAC1C,MAAM,CAAC,GAAa,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;YACtE,KAAK,MAAM,CAAC,IAAI,CAAC;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9B,CAAC;QACD,gDAAgD;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;YAC5C,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;YAChD,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAA;YAChD,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACtC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACtC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IAED,cAAc;IACd,IAAI,MAAM,GAAG,UAAU,CAAA;IACvB,IAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzB,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAErC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;QACxB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;YAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;YACpB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACZ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;YACvB,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;YACvB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;gBAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACpF,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjC,+BAA+B;QAC/B,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;YACvB,MAAK;QACP,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,SAAS,GAAG,GAAG,CAAA;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,YAAY,GAAoB,IAAI,CAAA;QACxC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;YACtD,IAAI,CAAC,IAAI;gBAAE,MAAK;YAChB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC3B,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACpC,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1C,OAAO,GAAG,IAAI,CAAA;gBACd,GAAG,GAAG,MAAM,CAAA;gBACZ,QAAQ,GAAG,IAAI,CAAA;gBACf,YAAY,GAAG,IAAI,CAAA;gBACnB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,CAAA;YACb,CAAC;QACH,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,MAAK;QAEpB,0CAA0C;QAC1C,IAAI,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;YACxE,MAAK;QACP,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC9E,MAAK;QACP,CAAC;IACH,CAAC;IAED,aAAa;IACb,MAAM,UAAU,GAAwB,EAAE,CAAA;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,CAAC,GAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACtD,MAAM,CAAC,GAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC1D,MAAM,IAAI,GAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/E,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,YAAY;IACZ,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IACD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,IAAI,CAAC,GAAG,aAAa,GAAG,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,aAAa,GAAG,KAAK,GAAG,CAAC,CAAA;IAChI,CAAC,CAAC,CAAA;IAEF,gDAAgD;IAChD,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IAEjF,OAAO;QACL,UAAU;QACV,GAAG,EAAE,CAAC;QACN,sDAAsD;QACtD,eAAe,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS;QACjF,SAAS,EAAE,IAAI;QACf,WAAW;QACX,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACrD,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB,EAAE,GAAW,EAAE,EAAU,EAAE,EAAgB,EAAE,EAAU,EAAE,EAAgB;IAChH,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACpG,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5F,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACjF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxH,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC/F,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3F,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACjF,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACnF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAiB,EACjB,GAAW,EACX,EAAU,EACV,EAAgB,EAChB,EAAU,EACV,EAAgB,EAChB,GAAW,EACX,WAAqB;IAErB,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChF,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjG,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzF,CAAC;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrH,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,IAAI,CAAC,yEAAyE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IACjH,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,GAAG,GAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChD,MAAM,GAAG,GAAS,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAA;IACnD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAChC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,GAAG,CAAC,CAAW,EAAE,CAAW;IACnC,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,OAAO,CAAC,CAAA;AACV,CAAC;AACD,SAAS,MAAM,CAAC,CAAW;IACzB,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,MAAM,CAAC,IAAI,CAAC;QAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,OAAO,CAAC,CAAA;AACV,CAAC","sourcesContent":["/**\n * api/assembly/solvers/global-solver — 纯 TS global 装配求解器(P1)\n *\n * 复刻 CadQuery `cadquery/occ_impl/solver.py` 的**语义**(全局 NLP、模长参数化旋转、\n * 9 类代价、Axis 缺省反平行、Plane=Axis(π)+Point(0)、包围盒对角长缩放),\n * 以 Levenberg-Marquardt 替代 IPOPT,**零原生/WASM 依赖**(裁定 1–6)。\n *\n * 关键裁定(写进代码,不在别处手算):\n * - 裁定 1/2:faijs Shape 不携带 placement → 初值 T0=R0=0,world 系==本地系;\n * 两侧 marker 经 `resolveFaceGeometryOfRef`/`resolveSolverEntity` 直接取本地系,无不对称。\n * - 裁定 3:残差取 CQ 代价的「平方前内层量」(非对代价开方)。\n * - 裁定 4:线性求解自实现(linalg.ts)。\n * - 裁定 5:旋转 pivot 恒 [0,0,0](CQ 的 Rotate(v,R)+T 绕世界原点)。\n * - 裁定 6:锚定用 CQ B4(assembly.py:455-490):Fixed / name==self.name 锁定;\n * 否则第一个不在 unary 里的 binary object;否则实体 0。锁定成员冻结为 identity。\n *\n * 失败模式(§4.6):唯一抛错路径 = 约束类型无法映射为代价;其余以 warnings 透明化,\n * 不抛错(LM 终止即 converged=true)。\n */\n\nimport type { Shape } from '../../../mesh/types'\nimport type { BrepEngineApi } from '../../../brep/engine/primitives'\nimport { getBrepApi } from '../../../brep/handle-bridge'\nimport type { AssemblyTransform } from '../../../runtime-state'\nimport type { AssemblyConstraint, EntityRef } from '../types'\nimport { normalizeConstraint } from '../normalize'\nimport { poseToAssemblyTransform, type SolverPose } from '../pose'\nimport {\n resolveFaceGeometryOfRef,\n resolveSolverEntity,\n type EntityResolutionEnv,\n} from '../entities'\nimport { type SolveOptions, type GlobalMarker, type GlobalSolveResult } from './types'\nimport {\n type Vec3,\n vadd,\n vsub,\n vdot,\n vscale,\n vnormalize,\n vsumsqr,\n ata,\n atb,\n solveDampedNormal,\n} from './linalg'\nimport { rotateByR, quatFromR } from './pose-from-delta'\n\nconst DEG2RAD = Math.PI / 180\nconst R_INIT = 1e-2 // B3\nconst LM_LAMBDA0 = 1e-3\nconst LM_MAXITER = 2000\nconst LM_TOL_OBJ = 1e-12\nconst LM_TOL_STEP = 1e-10\nconst PENALTY = 1e-16 // B1,等价 sqrt = 1e-8\nconst RESIDUAL_WARN = 1e-6 // §4.6 阈值系数\n\ntype CostFn = 'point' | 'axis' | 'point_in_plane' | 'point_on_line'\n\ninterface CostTerm {\n cid: number\n fn: CostFn\n /** 点侧成员下标(point_in_plane/point_on_line 的点;axis 的 dir 侧)。 */\n ia: number\n ma: GlobalMarker\n /** 平面/线侧成员下标(point_in_plane/point_on_line 的平面/线;axis 的 dir 侧)。 */\n ib: number\n mb: GlobalMarker\n /** point=距离(mm);axis=夹角(rad);point_in_plane/point_on_line=val。 */\n val: number\n /** 是否除以 scale(CQ scaling 字典:point 类 true,axis 类 false)。 */\n scaleFlag: boolean\n}\n\n/** 把一条 EntityRef 解析为本地系 GlobalMarker(无坐标系不对称)。 */\nfunction resolveMarker(ref: EntityRef, env: EntityResolutionEnv): GlobalMarker {\n if ('point' in ref) {\n return { type: 'point', p: [ref.point[0], ref.point[1], ref.point[2]] }\n }\n if ('face' in ref) {\n const geom = resolveFaceGeometryOfRef(ref, env)\n const normal = vnormalize([geom.normal[0], geom.normal[1], geom.normal[2]])\n return {\n type: 'plane',\n center: [geom.center[0], geom.center[1], geom.center[2]],\n normal,\n }\n }\n // edge / faceIndex → 走 resolveSolverEntity(统一抽取)\n const se = resolveSolverEntity(ref, env)\n if (se.type === 'axis') {\n return {\n type: 'axis',\n origin: [se.origin[0], se.origin[1], se.origin[2]],\n // `direction` is optional in the brepjs SolverEntity type but always present for the\n // axis branch produced by resolveSolverEntity (cylinder/cone face, or edge axis snapshot).\n dir: vnormalize([se.direction![0], se.direction![1], se.direction![2]]),\n }\n }\n if (se.type === 'plane') {\n return {\n type: 'plane',\n center: [se.origin[0], se.origin[1], se.origin[2]],\n // `normal` is optional in the brepjs SolverEntity type but always present for the plane branch.\n normal: vnormalize([se.normal![0], se.normal![1], se.normal![2]]),\n }\n }\n return { type: 'point', p: [se.origin[0], se.origin[1], se.origin[2]] }\n}\n\nfunction markerPoint(m: GlobalMarker, R: Vec3, T: Vec3): Vec3 {\n const base = m.type === 'point' ? m.p : m.type === 'axis' ? m.origin : m.center\n return vadd(rotateByR(base, R), T)\n}\nfunction markerDir(m: GlobalMarker, R: Vec3): Vec3 {\n // point markers never reach here (axis cost / plane normal / line direction only);\n // narrow to axis/plane and fall back to the point for type-completeness.\n const base = m.type === 'axis' ? m.dir : m.type === 'plane' ? m.normal : m.p\n return rotateByR(base, R)\n}\n\n/** 计算单条代价项的残差向量(平方前内层量,裁定 3)。 */\nfunction termResidual(t: CostTerm, sa: { T: Vec3; R: Vec3 }, sb: { T: Vec3; R: Vec3 }, scale: number): number[] {\n const inv = t.scaleFlag ? 1 / scale : 1\n switch (t.fn) {\n case 'point': {\n const pa = markerPoint(t.ma, sa.R, sa.T)\n const pb = markerPoint(t.mb, sb.R, sb.T)\n const d = vscale(vsub(pa, pb), inv)\n if (Math.abs(t.val) < 1e-12) return d // 3-vec,val=0\n return [vsumsqr(d) - (t.val / scale) ** 2] // 1-vec,val≠0\n }\n case 'axis': {\n const d1 = markerDir(t.ma, sa.R)\n const d2 = markerDir(t.mb, sb.R)\n if (Math.abs(t.val) < 1e-12) return vsub(d1, d2) // 3-vec,val=0\n if (Math.abs(t.val - Math.PI) < 1e-12) return vadd(d1, d2) // 3-vec,val=π\n return [vdot(d1, d2) - Math.cos(t.val)] // 1-vec,其他\n }\n case 'point_in_plane': {\n const p1 = markerPoint(t.ma, sa.R, sa.T) // 点\n const n = markerDir(t.mb, sb.R) // 平面法向\n let c = markerPoint(t.mb, sb.R, sb.T) // 平面上一点\n if (Math.abs(t.val) > 1e-12) c = vadd(c, vscale(n, t.val)) // 沿法向平移 val(CQ m2_pnt 偏移)\n const d = vdot(n, vsub(c, p1)) * inv\n return [d] // 1-vec\n }\n case 'point_on_line': {\n const p1 = markerPoint(t.ma, sa.R, sa.T) // 点\n const o = markerPoint(t.mb, sb.R, sb.T) // 线上一点\n const dln = markerDir(t.mb, sb.R) // 线方向\n const delta = vsub(p1, o)\n const perp = vscale(vsub(delta, vscale(dln, vdot(delta, dln))), inv)\n if (Math.abs(t.val) < 1e-12) return perp // 3-vec,val=0\n return [vsumsqr(perp) - t.val] // 1-vec,val≠0(注意 val 不缩放)\n }\n }\n}\n\n/** 单条代价项的残差维数(与 termResidual 的分支表一一对应;诊断参考)。 */\nfunction residualDim(t: CostTerm): number {\n switch (t.fn) {\n case 'point':\n return Math.abs(t.val) < 1e-12 ? 3 : 1\n case 'axis':\n return Math.abs(t.val) < 1e-12 || Math.abs(t.val - Math.PI) < 1e-12 ? 3 : 1\n case 'point_in_plane':\n return 1\n case 'point_on_line':\n return Math.abs(t.val) < 1e-12 ? 3 : 1\n }\n}\nvoid residualDim // P7/D1-1:诊断参考表(秩判定走列归一特征值,见下)\n\n/**\n * 对称 n×n 矩阵的特征值(循环 Jacobi 旋转)。\n *\n * @returns 特征值数组(无序);扫掠不收敛返回 null(调用方走保守 fallback)。\n */\nfunction symEigenvalues(A: number[], n: number): number[] | null {\n const a = A.slice()\n for (let sweep = 0; sweep < 60; sweep++) {\n let off = 0\n for (let p = 0; p < n; p++) {\n for (let q = p + 1; q < n; q++) off += a[p * n + q] * a[p * n + q]\n }\n if (off <= 1e-30 * Math.max(1, Math.abs(a[0]))) break\n for (let p = 0; p < n - 1; p++) {\n for (let q = p + 1; q < n; q++) {\n const apq = a[p * n + q]\n if (Math.abs(apq) < 1e-300) continue\n // Numerical Recipes 经典公式(θ=0 时 t=1,即 45° 旋转;sign(0)=0 的变体是错的)\n const theta = (a[q * n + q] - a[p * n + p]) / (2 * apq)\n const t = theta >= 0 ? 1 / (theta + Math.sqrt(1 + theta * theta)) : 1 / (theta - Math.sqrt(1 + theta * theta))\n const c = 1 / Math.sqrt(t * t + 1)\n const s = t * c\n for (let k = 0; k < n; k++) {\n const akp = a[k * n + p]\n const akq = a[k * n + q]\n a[k * n + p] = c * akp - s * akq\n a[k * n + q] = s * akp + c * akq\n }\n for (let k = 0; k < n; k++) {\n const apk = a[p * n + k]\n const aqk = a[q * n + k]\n a[p * n + k] = c * apk - s * aqk\n a[q * n + k] = s * apk + c * aqk\n }\n }\n }\n if (sweep === 59) return null\n }\n const out: number[] = []\n for (let i = 0; i < n; i++) out.push(a[i * n + i])\n return out\n}\n\n/**\n * P7/D1-2:收敛后的欠定自由度诊断。\n *\n * 关键细节一:LM 的残差行含 PENALTY 正则行(1e-8·x)——正则化不是约束,却让 JᵀJ\n * 技术上满秩;秩判定必须剔除 penalty 行。\n *\n * 关键细节二(为何要列归一):`computeScale` 只收集 fixedPoint 的 marker 点,\n * unary 场景(fixedAxis-only + 单点 fixedPoint)scale 可能退化到 1e-6,T 块\n * (1/scale² ~1e12)与 R 块(~1)的特征值量级悬殊,全局阈值会把 R 块整列误杀。\n * 做法是对 J 做列范数归一(J·D⁻¹,D = diag(列范数);可逆对角重参数化保秩不变),\n * 再对归一后的 JᵀJ 做特征分解,rank = #{λ > λmax·1e-8},dof = n − rank。\n * 欠定方向在归一后是精确零列(零特征值),与 λmax 差无穷量级,阈值余量充足。\n * 零范数列(约束完全摸不到的方向)直接计入自由。\n *\n * @returns 剩余自由度(0 = 适定);特征分解不收敛时保守报 0(不阻塞消费方)。\n */\nfunction computeUnderdeterminedDof(\n terms: CostTerm[],\n scale: number,\n n: number,\n x: number[],\n stateOf: (xx: number[], i: number) => { T: Vec3; R: Vec3 },\n): number {\n if (n === 0) return 0\n // 仅约束残差(剔除 penalty 正则行)\n const residualC = (xx: number[]): number[] => {\n const r: number[] = []\n for (const t of terms) {\n const e = termResidual(t, stateOf(xx, t.ia), stateOf(xx, t.ib), scale)\n for (const v of e) r.push(v)\n }\n return r\n }\n const m = residualC(x).length\n if (m === 0) return n // 无任何约束:全部自由\n const J: number[] = new Array(m * n).fill(0)\n for (let col = 0; col < n; col++) {\n const h = col % 6 < 3 ? 1e-7 * scale : 1e-7\n const xp = x.slice()\n xp[col] += h\n const xm = x.slice()\n xm[col] -= h\n const rp = residualC(xp)\n const rm = residualC(xm)\n for (let row = 0; row < m; row++) J[row * n + col] = (rp[row] - rm[row]) / (2 * h)\n }\n // 列范数归一(欠定方向 → 精确零列;可逆对角缩放保秩)\n const norms = new Array<number>(n).fill(0)\n let freeCols = 0\n for (let col = 0; col < n; col++) {\n let s = 0\n for (let row = 0; row < m; row++) s += J[row * n + col] * J[row * n + col]\n norms[col] = Math.sqrt(s)\n if (!(norms[col] > 1e-12)) freeCols++ // 约束完全摸不到的列 → 直接自由\n }\n if (freeCols === n) return n\n const Jn: number[] = J.slice()\n for (let col = 0; col < n; col++) {\n const d = norms[col] > 1e-12 ? norms[col] : 1 // 零列归一因子取 1(已被计为自由)\n for (let row = 0; row < m; row++) Jn[row * n + col] /= d\n }\n const JtJ = ata(Jn, m, n)\n const eig = symEigenvalues(JtJ, n)\n if (!eig) return 0 // 保守 fallback(适定假设,不阻塞)\n const lambdaMax = Math.max(...eig.map(Math.abs))\n if (!(lambdaMax > 1e-300)) return freeCols + n // 理论不可达;防御\n const rank = eig.filter((v) => Math.abs(v) > lambdaMax * 1e-8).length\n return Math.max(0, n - rank)\n}\n\n/**\n * 纯 TS global 求解器入口。\n *\n * @param members - member shapes(与 memberNames 对齐)。\n * @param memberNames - 成员变量名(约束以名引用,空名会抛错)。\n * @param constraints - 规范化前的原始约束。\n * @param opts - 求解选项(solver 已在外层判定为 'global',此处 name 用于 B4 锚定)。\n * @returns 与 `AssemblySolveResult` 对齐的结果。\n */\nexport function solveGlobal(\n members: Shape[],\n memberNames: string[],\n constraints: AssemblyConstraint[],\n opts?: SolveOptions,\n): GlobalSolveResult {\n memberNames.forEach((name, i) => {\n if (!name) {\n throw new Error(`[assembly:global] member at index ${i} has an empty name`)\n }\n })\n\n const memberMap = new Map<string, Shape>()\n members.forEach((m, i) => {\n const name = memberNames[i]\n if (name && !memberMap.has(name)) memberMap.set(name, m)\n })\n\n let kernel: BrepEngineApi | null = null\n try {\n kernel = getBrepApi()\n } catch {\n /* mesh/primitive 行快照路径:快照引用仍可解 */\n }\n const env: EntityResolutionEnv = { kernel, memberOf: (p: string) => memberMap.get(p) }\n\n // ── 建立代价项、锁定集、尺度点 ──\n const terms: CostTerm[] = []\n const unsupported: string[] = []\n const lockedSet = new Set<number>()\n const order: string[] = []\n const binaryOrder: string[] = []\n const unarySet = new Set<string>()\n const scalePts: Vec3[] = []\n\n constraints.forEach((raw, cid) => {\n const c = normalizeConstraint(raw)\n const register = (p: string) => {\n if (!order.includes(p)) order.push(p)\n }\n if (c.type === 'fixed') {\n register(c.part)\n unarySet.add(c.part)\n const idx = memberNames.indexOf(c.part)\n if (idx >= 0) lockedSet.add(idx)\n return\n }\n // 世界锚定 unary(fixedPoint/fixedAxis/fixedRotation):入 unarySet 但**不**入\n // lockedSet——只靠代价项约束,不冻结整件(CQ unary 语义,见 solver.py fixed_*_cost)。\n if (c.type === 'fixedPoint') {\n register(c.a.part)\n unarySet.add(c.a.part)\n const ia = memberNames.indexOf(c.a.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.a.part}`)\n return\n }\n const mA = resolveMarker(c.a, env)\n scalePts.push(markerPoint(mA, [0, 0, 0], [0, 0, 0]))\n terms.push({\n cid, fn: 'point', ia, ma: mA, ib: -1,\n mb: { type: 'point', p: [c.world[0], c.world[1], c.world[2]] },\n val: 0, scaleFlag: true,\n })\n return\n }\n if (c.type === 'fixedAxis') {\n register(c.a.part)\n unarySet.add(c.a.part)\n const ia = memberNames.indexOf(c.a.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.a.part}`)\n return\n }\n const len = Math.hypot(c.worldDir[0], c.worldDir[1], c.worldDir[2])\n if (!(len > 1e-12)) {\n unsupported.push('fixedAxis requires a non-zero worldDir')\n return\n }\n const mA = resolveMarker(c.a, env)\n terms.push({\n cid, fn: 'axis', ia, ma: mA, ib: -1,\n mb: { type: 'axis', origin: [0, 0, 0], dir: vnormalize([c.worldDir[0], c.worldDir[1], c.worldDir[2]]) },\n val: 0, scaleFlag: false,\n })\n return\n }\n if (c.type === 'fixedRotation') {\n register(c.part)\n unarySet.add(c.part)\n const ia = memberNames.indexOf(c.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.part}`)\n return\n }\n // 成员本地 X/Y/Z 轴分别钉到世界 X/Y/Z(恒等朝向);平移保持自由\n const axes: Vec3[] = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]\n for (const ax of axes) {\n terms.push({\n cid, fn: 'axis', ia,\n ma: { type: 'axis', origin: [0, 0, 0], dir: ax },\n ib: -1,\n mb: { type: 'axis', origin: [0, 0, 0], dir: [ax[0], ax[1], ax[2]] },\n val: 0, scaleFlag: false,\n })\n }\n return\n }\n const ia = memberNames.indexOf(c.a.part)\n const ib = memberNames.indexOf(c.b.part)\n if (ia < 0 || ib < 0) {\n unsupported.push(`constraint references unknown part: ${ia < 0 ? c.a.part : c.b.part}`)\n return\n }\n if (!binaryOrder.includes(c.a.part)) binaryOrder.push(c.a.part)\n register(c.a.part)\n register(c.b.part)\n if (c.a.part === opts?.name) lockedSet.add(ia)\n if (c.b.part === opts?.name) lockedSet.add(ib)\n\n const mA = resolveMarker(c.a, env)\n const mB = resolveMarker(c.b, env)\n scalePts.push(markerPoint(mA, [0, 0, 0], [0, 0, 0]))\n scalePts.push(markerPoint(mB, [0, 0, 0], [0, 0, 0]))\n\n switch (c.type) {\n case 'mate':\n case 'align': {\n if (mA.type !== 'plane' || mB.type !== 'plane') {\n unsupported.push(`${c.type} requires plane entities on both sides`)\n return\n }\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: c.type === 'mate' ? Math.PI : 0, scaleFlag: false })\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n break\n }\n case 'coincident': {\n pushCoincident(terms, cid, ia, mA, ib, mB)\n break\n }\n case 'concentric': {\n if (mA.type !== 'axis' || mB.type !== 'axis') {\n unsupported.push('concentric requires axis entities on both sides')\n return\n }\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val: 0, scaleFlag: true })\n break\n }\n case 'distance': {\n pushDistance(terms, cid, ia, mA, ib, mB, c.value, unsupported)\n break\n }\n case 'angle': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: c.value * DEG2RAD, scaleFlag: false })\n break\n }\n case 'parallel': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n break\n }\n case 'perpendicular': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: Math.PI / 2, scaleFlag: false })\n break\n }\n default:\n unsupported.push(`unsupported constraint type: ${(c as { type?: string }).type}`)\n }\n })\n\n // ── B4 锚定 ──\n if (lockedSet.size === 0) {\n for (const b of binaryOrder) {\n if (!unarySet.has(b)) {\n const idx = memberNames.indexOf(b)\n if (idx >= 0) {\n lockedSet.add(idx)\n break\n }\n }\n }\n }\n if (lockedSet.size === 0 && order.length > 0) {\n // 兜底锚定不得选「世界锚定 unary」成员——锁死它会让其 anchor 代价无法满足\n // (全 unary 场景:无 binary 参考可锚,宁可全部自由交 LM 求解,也不误锁)。\n const candidate = order.find((p) => !unarySet.has(p))\n if (candidate !== undefined) {\n const idx = memberNames.indexOf(candidate)\n if (idx >= 0) lockedSet.add(idx)\n }\n }\n\n // ── scale = 所有 marker 点的包围盒对角长(CQ B5;marker 近似几何 bbox) ──\n const scale = computeScale(scalePts)\n\n // ── 自由成员与变量 ──\n const freeIdx: number[] = []\n const blockMap = new Map<number, number>()\n memberNames.forEach((_, i) => {\n if (!lockedSet.has(i)) {\n blockMap.set(i, freeIdx.length)\n freeIdx.push(i)\n }\n })\n const n = freeIdx.length * 6\n const x = new Array(n).fill(0)\n for (let k = 0; k < freeIdx.length; k++) {\n x[6 * k + 3] = R_INIT\n x[6 * k + 4] = R_INIT\n x[6 * k + 5] = R_INIT\n }\n\n const stateOf = (xx: number[], i: number): { T: Vec3; R: Vec3 } => {\n // 世界哨兵 i = -1:identity(世界系 marker 已存字面坐标,不再施加成员变换)\n if (i < 0) return { T: [0, 0, 0], R: [0, 0, 0] }\n if (lockedSet.has(i)) return { T: [0, 0, 0], R: [0, 0, 0] }\n const k = blockMap.get(i)!\n return {\n T: [xx[6 * k], xx[6 * k + 1], xx[6 * k + 2]],\n R: [xx[6 * k + 3], xx[6 * k + 4], xx[6 * k + 5]],\n }\n }\n\n const residual = (xx: number[]): number[] => {\n const r: number[] = []\n for (const t of terms) {\n const e = termResidual(t, stateOf(xx, t.ia), stateOf(xx, t.ib), scale)\n for (const v of e) r.push(v)\n }\n // penalty 1e-16(B1):sqrt 后 1e-8,T/scale 缩小、R 直接\n for (let k = 0; k < freeIdx.length; k++) {\n r.push(PENALTY ** 0.5 * (xx[6 * k] / scale))\n r.push(PENALTY ** 0.5 * (xx[6 * k + 1] / scale))\n r.push(PENALTY ** 0.5 * (xx[6 * k + 2] / scale))\n r.push(PENALTY ** 0.5 * xx[6 * k + 3])\n r.push(PENALTY ** 0.5 * xx[6 * k + 4])\n r.push(PENALTY ** 0.5 * xx[6 * k + 5])\n }\n return r\n }\n\n // ── LM 迭代 ──\n let lambda = LM_LAMBDA0\n let current = residual(x)\n let obj = 0.5 * dot(current, current)\n\n for (let iter = 0; iter < LM_MAXITER; iter++) {\n const m = current.length\n const J = new Array(m * n).fill(0)\n for (let col = 0; col < n; col++) {\n const h = col % 6 < 3 ? 1e-7 * scale : 1e-7\n const xp = x.slice()\n const xm = x.slice()\n xp[col] += h\n xm[col] -= h\n const rp = residual(xp)\n const rm = residual(xm)\n for (let row = 0; row < m; row++) J[row * n + col] = (rp[row] - rm[row]) / (2 * h)\n }\n const JtJ = ata(J, m, n)\n const Jtr = atb(J, current, m, n)\n\n // 梯度范数收敛(与步长早停互补,避免 λ 放大时误判收敛)\n if (maxAbs(Jtr) < 1e-8) {\n break\n }\n\n const negJtr = Jtr.map((v) => -v)\n const objBefore = obj\n let improved = false\n let acceptedStep: number[] | null = null\n for (let attempt = 0; attempt < 12 && !improved; attempt++) {\n const step = solveDampedNormal(JtJ, negJtr, n, lambda)\n if (!step) break\n const xTry = x.slice()\n for (let j = 0; j < n; j++) xTry[j] += step[j]\n const rTry = residual(xTry)\n const objTry = 0.5 * dot(rTry, rTry)\n if (objTry <= obj) {\n for (let j = 0; j < n; j++) x[j] = xTry[j]\n current = rTry\n obj = objTry\n improved = true\n acceptedStep = step\n lambda = Math.max(lambda / 3, 1e-15)\n } else {\n lambda *= 2\n }\n }\n if (!improved) break\n\n // 步长收敛仅在信任域健康(λ 小)时认定——λ 大时的微小步长只是阻尼,非真收敛\n if (acceptedStep && maxAbs(acceptedStep) < LM_TOL_STEP && lambda < 1e-2) {\n break\n }\n if (Math.abs(objBefore - obj) < LM_TOL_OBJ * Math.max(1, Math.abs(objBefore))) {\n break\n }\n }\n\n // ── 组装结果 ──\n const transforms: AssemblyTransform[] = []\n for (let k = 0; k < freeIdx.length; k++) {\n const i = freeIdx[k]\n const T: Vec3 = [x[6 * k], x[6 * k + 1], x[6 * k + 2]]\n const R: Vec3 = [x[6 * k + 3], x[6 * k + 4], x[6 * k + 5]]\n const pose: SolverPose = { position: T, rotation: quatFromR(R[0], R[1], R[2]) }\n transforms.push(poseToAssemblyTransform(pose, [0, 0, 0], i))\n }\n\n // 逐约束残差(诊断)\n const residuals: number[] = []\n const warnings: string[] = []\n const byCid = new Map<number, number>()\n for (const t of terms) {\n const e = termResidual(t, stateOf(x, t.ia), stateOf(x, t.ib), scale)\n const s = e.reduce((acc, v) => acc + v * v, 0)\n byCid.set(t.cid, (byCid.get(t.cid) ?? 0) + s)\n }\n constraints.forEach((_, cid) => {\n const r = byCid.get(cid) ?? 0\n residuals.push(r)\n if (r > RESIDUAL_WARN * scale) warnings.push(`constraint #${cid} residual=${r.toExponential(3)} (> ${RESIDUAL_WARN * scale})`)\n })\n\n // P7/D1-2:欠定自由度诊断(剔除 penalty 正则行后按 JᵀJc 特征值秩判定)\n const underdeterminedDof = computeUnderdeterminedDof(terms, scale, n, x, stateOf)\n\n return {\n transforms,\n dof: 0,\n // P7/D1-3:旧 `dof` 字段语义不变(unsupported 合计的占位),欠定信息走新字段。\n underdetermined: underdeterminedDof > 0 ? { dof: underdeterminedDof } : undefined,\n converged: true,\n unsupported,\n residuals,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n}\n\nfunction pushCoincident(terms: CostTerm[], cid: number, ia: number, mA: GlobalMarker, ib: number, mB: GlobalMarker): void {\n if (mA.type === 'point' && mB.type === 'point') {\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'plane' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_in_plane', ia: ib, ma: mB, ib: ia, mb: mA, val: 0, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'plane') {\n terms.push({ cid, fn: 'point_in_plane', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'axis') {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_on_line', ia: ib, ma: mB, ib, mb: mA, val: 0, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'axis') {\n terms.push({ cid, fn: 'point_on_line', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else {\n // 两面 coincident:按 align 语义(平行 + 中心重合)\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n }\n}\n\nfunction pushDistance(\n terms: CostTerm[],\n cid: number,\n ia: number,\n mA: GlobalMarker,\n ib: number,\n mB: GlobalMarker,\n val: number,\n unsupported: string[],\n): void {\n if (mA.type === 'point' && mB.type === 'point') {\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val, scaleFlag: true })\n } else if (mA.type === 'plane' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_in_plane', ia: ib, ma: mB, ib: ia, mb: mA, val, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'plane') {\n terms.push({ cid, fn: 'point_in_plane', ia, ma: mA, ib, mb: mB, val, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'axis') {\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val, scaleFlag: true })\n } else {\n unsupported.push(`distance requires point-point / plane-point / axis-axis entities, got ${mA.type}-${mB.type}`)\n }\n}\n\nfunction computeScale(pts: Vec3[]): number {\n if (pts.length === 0) return 1\n const min: Vec3 = [Infinity, Infinity, Infinity]\n const max: Vec3 = [-Infinity, -Infinity, -Infinity]\n for (const p of pts) {\n for (let i = 0; i < 3; i++) {\n if (p[i] < min[i]) min[i] = p[i]\n if (p[i] > max[i]) max[i] = p[i]\n }\n }\n const diag = Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2])\n return Math.max(diag, 1e-6)\n}\n\nfunction dot(a: number[], b: number[]): number {\n let s = 0\n for (let i = 0; i < a.length; i++) s += a[i] * b[i]\n return s\n}\nfunction maxAbs(a: number[]): number {\n let m = 0\n for (const v of a) m = Math.max(m, Math.abs(v))\n return m\n}\n"]}
1
+ {"version":3,"file":"global-solver.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/global-solver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api/assembly/solvers/global-solver — 纯 TS global 装配求解器(P1)\n *\n * 复刻 CadQuery `cadquery/occ_impl/solver.py` 的**语义**(全局 NLP、模长参数化旋转、\n * 9 类代价、Axis 缺省反平行、Plane=Axis(π)+Point(0)、包围盒对角长缩放),\n * 以 Levenberg-Marquardt 替代 IPOPT,**零原生/WASM 依赖**(裁定 1–6)。\n *\n * 关键裁定(写进代码,不在别处手算):\n * - 裁定 1/2:faijs Shape 不携带 placement → 初值 T0=R0=0,world 系==本地系;\n * 两侧 marker 经 `resolveFaceGeometryOfRef`/`resolveSolverEntity` 直接取本地系,无不对称。\n * - 裁定 3:残差取 CQ 代价的「平方前内层量」(非对代价开方)。\n * - 裁定 4:线性求解自实现(linalg.ts)。\n * - 裁定 5:旋转 pivot 恒 [0,0,0](CQ 的 Rotate(v,R)+T 绕世界原点)。\n * - 裁定 6:锚定用 CQ B4(assembly.py:455-490):Fixed / name==self.name 锁定;\n * 否则第一个不在 unary 里的 binary object;否则实体 0。锁定成员冻结为 identity。\n *\n * 失败模式(§4.6):唯一抛错路径 = 约束类型无法映射为代价;其余以 warnings 透明化,\n * 不抛错(LM 终止即 converged=true)。\n */\n\nimport type { Shape } from '../../../mesh/types'\nimport type { BrepEngineApi } from '../../../brep/engine/primitives'\nimport { getBrepApi } from '../../../brep/handle-bridge'\nimport type { AssemblyTransform } from '../../../runtime-state'\nimport type { AssemblyConstraint, EntityRef } from '../types'\nimport { normalizeConstraint } from '../normalize'\nimport { poseToAssemblyTransform, type SolverPose } from '../pose'\nimport {\n resolveFaceGeometryOfRef,\n resolveSolverEntity,\n type EntityResolutionEnv,\n} from '../entities'\nimport { type SolveOptions, type GlobalMarker, type GlobalSolveResult } from './types'\nimport {\n type Vec3,\n vadd,\n vsub,\n vdot,\n vscale,\n vnormalize,\n vsumsqr,\n ata,\n atb,\n solveDampedNormal,\n} from './linalg'\nimport { rotateByR, quatFromR, quatToRvec } from './pose-from-delta'\nimport { quatMultiply, quatRotate } from './quat'\n\nconst DEG2RAD = Math.PI / 180\nconst R_INIT = 1e-2 // B3\nconst LM_LAMBDA0 = 1e-3\nconst LM_MAXITER = 2000\nconst LM_TOL_OBJ = 1e-12\nconst LM_TOL_STEP = 1e-10\nconst PENALTY = 1e-16 // B1,等价 sqrt = 1e-8\nconst RESIDUAL_WARN = 1e-6 // §4.6 阈值系数\n\ntype CostFn = 'point' | 'axis' | 'point_in_plane' | 'point_on_line'\n\ninterface CostTerm {\n cid: number\n fn: CostFn\n /** 点侧成员下标(point_in_plane/point_on_line 的点;axis 的 dir 侧)。 */\n ia: number\n ma: GlobalMarker\n /** 平面/线侧成员下标(point_in_plane/point_on_line 的平面/线;axis 的 dir 侧)。 */\n ib: number\n mb: GlobalMarker\n /** point=距离(mm);axis=夹角(rad);point_in_plane/point_on_line=val。 */\n val: number\n /** 是否除以 scale(CQ scaling 字典:point 类 true,axis 类 false)。 */\n scaleFlag: boolean\n}\n\n/** 把一条 EntityRef 解析为本地系 GlobalMarker(无坐标系不对称)。 */\nfunction resolveMarker(ref: EntityRef, env: EntityResolutionEnv): GlobalMarker {\n if ('point' in ref) {\n return { type: 'point', p: [ref.point[0], ref.point[1], ref.point[2]] }\n }\n if ('face' in ref) {\n const geom = resolveFaceGeometryOfRef(ref, env)\n const normal = vnormalize([geom.normal[0], geom.normal[1], geom.normal[2]])\n return {\n type: 'plane',\n center: [geom.center[0], geom.center[1], geom.center[2]],\n normal,\n }\n }\n // edge / faceIndex → 走 resolveSolverEntity(统一抽取)\n const se = resolveSolverEntity(ref, env)\n if (se.type === 'axis') {\n return {\n type: 'axis',\n origin: [se.origin[0], se.origin[1], se.origin[2]],\n // `direction` is optional in the brepjs SolverEntity type but always present for the\n // axis branch produced by resolveSolverEntity (cylinder/cone face, or edge axis snapshot).\n dir: vnormalize([se.direction![0], se.direction![1], se.direction![2]]),\n }\n }\n if (se.type === 'plane') {\n return {\n type: 'plane',\n center: [se.origin[0], se.origin[1], se.origin[2]],\n // `normal` is optional in the brepjs SolverEntity type but always present for the plane branch.\n normal: vnormalize([se.normal![0], se.normal![1], se.normal![2]]),\n }\n }\n return { type: 'point', p: [se.origin[0], se.origin[1], se.origin[2]] }\n}\n\nfunction markerPoint(m: GlobalMarker, R: Vec3, T: Vec3): Vec3 {\n const base = m.type === 'point' ? m.p : m.type === 'axis' ? m.origin : m.center\n return vadd(rotateByR(base, R), T)\n}\nfunction markerDir(m: GlobalMarker, R: Vec3): Vec3 {\n // point markers never reach here (axis cost / plane normal / line direction only);\n // narrow to axis/plane and fall back to the point for type-completeness.\n const base = m.type === 'axis' ? m.dir : m.type === 'plane' ? m.normal : m.p\n return rotateByR(base, R)\n}\n\n/** 计算单条代价项的残差向量(平方前内层量,裁定 3)。 */\nfunction termResidual(t: CostTerm, sa: { T: Vec3; R: Vec3 }, sb: { T: Vec3; R: Vec3 }, scale: number): number[] {\n const inv = t.scaleFlag ? 1 / scale : 1\n switch (t.fn) {\n case 'point': {\n const pa = markerPoint(t.ma, sa.R, sa.T)\n const pb = markerPoint(t.mb, sb.R, sb.T)\n const d = vscale(vsub(pa, pb), inv)\n if (Math.abs(t.val) < 1e-12) return d // 3-vec,val=0\n return [vsumsqr(d) - (t.val * inv) ** 2] // 1-vec,val≠0(目标值与残差同除 scale)\n }\n case 'axis': {\n const d1 = markerDir(t.ma, sa.R)\n const d2 = markerDir(t.mb, sb.R)\n if (Math.abs(t.val) < 1e-12) return vsub(d1, d2) // 3-vec,val=0\n if (Math.abs(t.val - Math.PI) < 1e-12) return vadd(d1, d2) // 3-vec,val=π\n return [vdot(d1, d2) - Math.cos(t.val)] // 1-vec,其他\n }\n case 'point_in_plane': {\n const p1 = markerPoint(t.ma, sa.R, sa.T) // 点\n const n = markerDir(t.mb, sb.R) // 平面法向\n let c = markerPoint(t.mb, sb.R, sb.T) // 平面上一点\n if (Math.abs(t.val) > 1e-12) c = vadd(c, vscale(n, t.val)) // 沿法向平移 val(CQ m2_pnt 偏移)\n const d = vdot(n, vsub(c, p1)) * inv\n return [d] // 1-vec\n }\n case 'point_on_line': {\n const p1 = markerPoint(t.ma, sa.R, sa.T) // 点\n const o = markerPoint(t.mb, sb.R, sb.T) // 线上一点\n const dln = markerDir(t.mb, sb.R) // 线方向\n const delta = vsub(p1, o)\n const perp = vscale(vsub(delta, vscale(dln, vdot(delta, dln))), inv)\n if (Math.abs(t.val) < 1e-12) return perp // 3-vec,val=0\n // 1-vec,val≠0:perp 已除 scale → vsumsqr(perp) = (dist/scale)²;\n // 目标值必须同尺度(t.val·inv)²,否则实际满足 dist = scale·√val。\n // (历史缺陷:此处曾写 `vsumsqr(perp) - t.val`,val 不缩放——金丝雀见\n // planetary-static.test.ts distance 用例,修复后该断言已翻转为 ORBIT_R。)\n return [vsumsqr(perp) - (t.val * inv) ** 2]\n }\n }\n}\n\n/** 单条代价项的残差维数(与 termResidual 的分支表一一对应;诊断参考)。 */\nfunction residualDim(t: CostTerm): number {\n switch (t.fn) {\n case 'point':\n return Math.abs(t.val) < 1e-12 ? 3 : 1\n case 'axis':\n return Math.abs(t.val) < 1e-12 || Math.abs(t.val - Math.PI) < 1e-12 ? 3 : 1\n case 'point_in_plane':\n return 1\n case 'point_on_line':\n return Math.abs(t.val) < 1e-12 ? 3 : 1\n }\n}\nvoid residualDim // P7/D1-1:诊断参考表(秩判定走列归一特征值,见下)\n\n/**\n * 对称 n×n 矩阵的特征分解(循环 Jacobi 旋转)。\n *\n * @param A 行主 n×n 对称矩阵(会被复制,不修改原矩阵)。\n * @param n 阶数。\n * @param outVec 可选输出:n×n 行主特征向量矩阵 V(列 v[:,i] 是 outVec[i] 对应的\n * 特征向量)。传 `V`(单位矩阵)时原地累积旋转。\n * @returns 特征值数组(无序);扫掠不收敛返回 null(调用方走保守 fallback)。\n */\nfunction symEigenvalues(A: number[], n: number, outVec?: number[]): number[] | null {\n const a = A.slice()\n if (outVec) for (let i = 0; i < n * n; i++) outVec[i] = 0\n if (outVec) for (let i = 0; i < n; i++) outVec[i * n + i] = 1\n for (let sweep = 0; sweep < 60; sweep++) {\n let off = 0\n for (let p = 0; p < n; p++) {\n for (let q = p + 1; q < n; q++) off += a[p * n + q] * a[p * n + q]\n }\n if (off <= 1e-30 * Math.max(1, Math.abs(a[0]))) break\n for (let p = 0; p < n - 1; p++) {\n for (let q = p + 1; q < n; q++) {\n const apq = a[p * n + q]\n if (Math.abs(apq) < 1e-300) continue\n // Numerical Recipes 经典公式(θ=0 时 t=1,即 45° 旋转;sign(0)=0 的变体是错的)\n const theta = (a[q * n + q] - a[p * n + p]) / (2 * apq)\n const t = theta >= 0 ? 1 / (theta + Math.sqrt(1 + theta * theta)) : 1 / (theta - Math.sqrt(1 + theta * theta))\n const c = 1 / Math.sqrt(t * t + 1)\n const s = t * c\n for (let k = 0; k < n; k++) {\n const akp = a[k * n + p]\n const akq = a[k * n + q]\n a[k * n + p] = c * akp - s * akq\n a[k * n + q] = s * akp + c * akq\n }\n for (let k = 0; k < n; k++) {\n const apk = a[p * n + k]\n const aqk = a[q * n + k]\n a[p * n + k] = c * apk - s * aqk\n a[q * n + k] = s * apk + c * aqk\n }\n if (outVec) {\n for (let k = 0; k < n; k++) {\n const vkp = outVec[k * n + p]\n const vkq = outVec[k * n + q]\n outVec[k * n + p] = c * vkp - s * vkq\n outVec[k * n + q] = s * vkp + c * vkq\n }\n }\n }\n }\n if (sweep === 59) return null\n }\n const out: number[] = []\n for (let i = 0; i < n; i++) out.push(a[i * n + i])\n return out\n}\n\n/**\n * P7/D1-2:收敛后的欠定自由度诊断。\n *\n * 关键细节一:LM 的残差行含 PENALTY 正则行(1e-8·x)——正则化不是约束,却让 JᵀJ\n * 技术上满秩;秩判定必须剔除 penalty 行。\n *\n * 关键细节二(为何要列归一):`computeScale` 只收集 fixedPoint 的 marker 点,\n * unary 场景(fixedAxis-only + 单点 fixedPoint)scale 可能退化到 1e-6,T 块\n * (1/scale² ~1e12)与 R 块(~1)的特征值量级悬殊,全局阈值会把 R 块整列误杀。\n * 做法是对 J 做列范数归一(J·D⁻¹,D = diag(列范数);可逆对角重参数化保秩不变),\n * 再对归一后的 JᵀJ 做特征分解,rank = #{λ > λmax·1e-8},dof = n − rank。\n * 欠定方向在归一后是精确零列(零特征值),与 λmax 差无穷量级,阈值余量充足。\n * 零范数列(约束完全摸不到的方向)直接计入自由。\n *\n * @returns 剩余自由度(0 = 适定);特征分解不收敛时保守报 0(不阻塞消费方)。\n */\nfunction computeUnderdeterminedDof(\n terms: CostTerm[],\n scale: number,\n n: number,\n x: number[],\n stateOf: (xx: number[], i: number) => { T: Vec3; R: Vec3 },\n outFreeDirs?: number[][],\n): number {\n if (n === 0) return 0\n // 仅约束残差(剔除 penalty 正则行)\n const residualC = (xx: number[]): number[] => {\n const r: number[] = []\n for (const t of terms) {\n const e = termResidual(t, stateOf(xx, t.ia), stateOf(xx, t.ib), scale)\n for (const v of e) r.push(v)\n }\n return r\n }\n const m = residualC(x).length\n if (m === 0) return n // 无任何约束:全部自由\n const J: number[] = new Array(m * n).fill(0)\n for (let col = 0; col < n; col++) {\n const h = col % 6 < 3 ? 1e-7 * scale : 1e-7\n const xp = x.slice()\n xp[col] += h\n const xm = x.slice()\n xm[col] -= h\n const rp = residualC(xp)\n const rm = residualC(xm)\n for (let row = 0; row < m; row++) J[row * n + col] = (rp[row] - rm[row]) / (2 * h)\n }\n // 列范数归一(欠定方向 → 精确零列;可逆对角缩放保秩)\n const norms = new Array<number>(n).fill(0)\n let freeCols = 0\n for (let col = 0; col < n; col++) {\n let s = 0\n for (let row = 0; row < m; row++) s += J[row * n + col] * J[row * n + col]\n norms[col] = Math.sqrt(s)\n if (!(norms[col] > 1e-12)) freeCols++ // 约束完全摸不到的列 → 直接自由\n }\n if (freeCols === n) return n\n const Jn: number[] = J.slice()\n for (let col = 0; col < n; col++) {\n const d = norms[col] > 1e-12 ? norms[col] : 1 // 零列归一因子取 1(已被计为自由)\n for (let row = 0; row < m; row++) Jn[row * n + col] /= d\n }\n const JtJ = ata(Jn, m, n)\n const V: number[] = new Array(n * n).fill(0)\n const eig = symEigenvalues(JtJ, n, V)\n if (!eig) return 0 // 保守 fallback(适定假设,不阻塞)\n const lambdaMax = Math.max(...eig.map(Math.abs))\n if (!(lambdaMax > 1e-300)) return freeCols + n // 理论不可达;防御\n const rank = eig.filter((v) => Math.abs(v) > lambdaMax * 1e-8).length\n const dof = Math.max(0, n - rank)\n // P7/D1-4:零空间特征向量(λ < λmax·1e-8 的列)= 欠定自由方向(变量系:\n // 每成员 6 维 [tx,ty,tz,rx,ry,rz],列范数已归一)。旋转分量为主的方向对\n // 位姿判等有意义;调用方按需解释。\n if (outFreeDirs && dof > 0) {\n for (let i = 0; i < n; i++) {\n if (Math.abs(eig[i]) > lambdaMax * 1e-8) continue\n const v: number[] = new Array(n)\n for (let r = 0; r < n; r++) v[r] = V[r * n + i]\n outFreeDirs.push(v)\n }\n // 零范数列(约束摸不到的坐标轴方向)也是自由方向,补在后面\n for (let col = 0; col < n; col++) {\n if (norms[col] > 1e-12) continue\n const v = new Array(n).fill(0)\n v[col] = 1\n outFreeDirs.push(v)\n }\n }\n return dof\n}\n\n/**\n * 纯 TS global 求解器入口。\n *\n * @param members - member shapes(与 memberNames 对齐)。\n * @param memberNames - 成员变量名(约束以名引用,空名会抛错)。\n * @param constraints - 规范化前的原始约束。\n * @param opts - 求解选项(solver 已在外层判定为 'global',此处 name 用于 B4 锚定)。\n * @returns 与 `AssemblySolveResult` 对齐的结果。\n */\nexport function solveGlobal(\n members: Shape[],\n memberNames: string[],\n constraints: AssemblyConstraint[],\n opts?: SolveOptions,\n): GlobalSolveResult {\n memberNames.forEach((name, i) => {\n if (!name) {\n throw new Error(`[assembly:global] member at index ${i} has an empty name`)\n }\n })\n\n const memberMap = new Map<string, Shape>()\n members.forEach((m, i) => {\n const name = memberNames[i]\n if (name && !memberMap.has(name)) memberMap.set(name, m)\n })\n\n let kernel: BrepEngineApi | null = null\n try {\n kernel = getBrepApi()\n } catch {\n /* mesh/primitive 行快照路径:快照引用仍可解 */\n }\n const env: EntityResolutionEnv = { kernel, memberOf: (p: string) => memberMap.get(p) }\n\n // ── 建立代价项、锁定集、尺度点 ──\n const terms: CostTerm[] = []\n const unsupported: string[] = []\n const lockedSet = new Set<number>()\n const order: string[] = []\n const binaryOrder: string[] = []\n const unarySet = new Set<string>()\n const scalePts: Vec3[] = []\n\n constraints.forEach((raw, cid) => {\n const c = normalizeConstraint(raw)\n const register = (p: string) => {\n if (!order.includes(p)) order.push(p)\n }\n if (c.type === 'fixed') {\n register(c.part)\n unarySet.add(c.part)\n const idx = memberNames.indexOf(c.part)\n if (idx >= 0) lockedSet.add(idx)\n return\n }\n // 世界锚定 unary(fixedPoint/fixedAxis/fixedRotation):入 unarySet 但**不**入\n // lockedSet——只靠代价项约束,不冻结整件(CQ unary 语义,见 solver.py fixed_*_cost)。\n if (c.type === 'fixedPoint') {\n register(c.a.part)\n unarySet.add(c.a.part)\n const ia = memberNames.indexOf(c.a.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.a.part}`)\n return\n }\n const mA = resolveMarker(c.a, env)\n scalePts.push(markerPoint(mA, [0, 0, 0], [0, 0, 0]))\n terms.push({\n cid, fn: 'point', ia, ma: mA, ib: -1,\n mb: { type: 'point', p: [c.world[0], c.world[1], c.world[2]] },\n val: 0, scaleFlag: true,\n })\n return\n }\n if (c.type === 'fixedAxis') {\n register(c.a.part)\n unarySet.add(c.a.part)\n const ia = memberNames.indexOf(c.a.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.a.part}`)\n return\n }\n const len = Math.hypot(c.worldDir[0], c.worldDir[1], c.worldDir[2])\n if (!(len > 1e-12)) {\n unsupported.push('fixedAxis requires a non-zero worldDir')\n return\n }\n const mA = resolveMarker(c.a, env)\n terms.push({\n cid, fn: 'axis', ia, ma: mA, ib: -1,\n mb: { type: 'axis', origin: [0, 0, 0], dir: vnormalize([c.worldDir[0], c.worldDir[1], c.worldDir[2]]) },\n val: 0, scaleFlag: false,\n })\n return\n }\n if (c.type === 'fixedRotation') {\n register(c.part)\n unarySet.add(c.part)\n const ia = memberNames.indexOf(c.part)\n if (ia < 0) {\n unsupported.push(`constraint references unknown part: ${c.part}`)\n return\n }\n // 成员本地 X/Y/Z 轴分别钉到世界 X/Y/Z(恒等朝向);平移保持自由\n const axes: Vec3[] = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]\n for (const ax of axes) {\n terms.push({\n cid, fn: 'axis', ia,\n ma: { type: 'axis', origin: [0, 0, 0], dir: ax },\n ib: -1,\n mb: { type: 'axis', origin: [0, 0, 0], dir: [ax[0], ax[1], ax[2]] },\n val: 0, scaleFlag: false,\n })\n }\n return\n }\n const ia = memberNames.indexOf(c.a.part)\n const ib = memberNames.indexOf(c.b.part)\n if (ia < 0 || ib < 0) {\n unsupported.push(`constraint references unknown part: ${ia < 0 ? c.a.part : c.b.part}`)\n return\n }\n if (!binaryOrder.includes(c.a.part)) binaryOrder.push(c.a.part)\n register(c.a.part)\n register(c.b.part)\n if (c.a.part === opts?.name) lockedSet.add(ia)\n if (c.b.part === opts?.name) lockedSet.add(ib)\n\n const mA = resolveMarker(c.a, env)\n const mB = resolveMarker(c.b, env)\n scalePts.push(markerPoint(mA, [0, 0, 0], [0, 0, 0]))\n scalePts.push(markerPoint(mB, [0, 0, 0], [0, 0, 0]))\n\n switch (c.type) {\n case 'mate':\n case 'align': {\n if (mA.type !== 'plane' || mB.type !== 'plane') {\n unsupported.push(`${c.type} requires plane entities on both sides`)\n return\n }\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: c.type === 'mate' ? Math.PI : 0, scaleFlag: false })\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n break\n }\n case 'coincident': {\n pushCoincident(terms, cid, ia, mA, ib, mB)\n break\n }\n case 'concentric': {\n if (mA.type !== 'axis' || mB.type !== 'axis') {\n unsupported.push('concentric requires axis entities on both sides')\n return\n }\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val: 0, scaleFlag: true })\n break\n }\n case 'distance': {\n pushDistance(terms, cid, ia, mA, ib, mB, c.value, unsupported)\n break\n }\n case 'angle': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: c.value * DEG2RAD, scaleFlag: false })\n break\n }\n case 'parallel': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n break\n }\n case 'perpendicular': {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: Math.PI / 2, scaleFlag: false })\n break\n }\n default:\n unsupported.push(`unsupported constraint type: ${(c as { type?: string }).type}`)\n }\n })\n\n // ── B4 锚定 ──\n if (lockedSet.size === 0) {\n for (const b of binaryOrder) {\n if (!unarySet.has(b)) {\n const idx = memberNames.indexOf(b)\n if (idx >= 0) {\n lockedSet.add(idx)\n break\n }\n }\n }\n }\n if (lockedSet.size === 0 && order.length > 0) {\n // 兜底锚定不得选「世界锚定 unary」成员——锁死它会让其 anchor 代价无法满足\n // (全 unary 场景:无 binary 参考可锚,宁可全部自由交 LM 求解,也不误锁)。\n const candidate = order.find((p) => !unarySet.has(p))\n if (candidate !== undefined) {\n const idx = memberNames.indexOf(candidate)\n if (idx >= 0) lockedSet.add(idx)\n }\n }\n\n // ── scale = 所有 marker 点的包围盒对角长(CQ B5;marker 近似几何 bbox) ──\n const scale = computeScale(scalePts)\n\n // ── 自由成员与变量 ──\n // P8 刚体分组:同组成员共享一个 6 维状态块(子装配在 CQ 语义里是刚体)。\n // freeIdx 每项是一个块的\"代表成员\"下标;blockOf 把每个自由成员映射到其块位置 k\n // (代表自身与跟随者都映射到同一 k——stateOf 按成员直接查块,无需二次 rep 解析)。\n const freeIdx: number[] = []\n const blockOf = new Map<number, number>()\n const groupOf = new Map<number, number>() // member idx -> 代表成员 idx\n if (opts?.rigidGroups) {\n for (const g of opts.rigidGroups) {\n for (const m of g) groupOf.set(m, g[0])\n }\n }\n memberNames.forEach((_, i) => {\n if (lockedSet.has(i)) return\n const rep = groupOf.get(i) ?? i\n // 组代表被锁:整组随锁(跟随者也不进自由集)。\n if (lockedSet.has(rep)) return\n let k = freeIdx.indexOf(rep)\n if (k < 0) {\n k = freeIdx.length\n freeIdx.push(rep)\n }\n blockOf.set(i, k)\n })\n const n = freeIdx.length * 6\n const x = new Array(n).fill(0)\n for (let k = 0; k < freeIdx.length; k++) {\n x[6 * k + 3] = R_INIT\n x[6 * k + 4] = R_INIT\n x[6 * k + 5] = R_INIT\n }\n\n // P8 方案 A(CQ sublocs 语义):成员建模坐标是装配前本地系,约束 marker 取自\n // 该本地系;求解器状态是 delta,绝对位姿 = initialPose ∘ delta(penalty 拉\n // delta→0 = 倾向保持初 loc)。未传 initialPoses 时初位姿为恒等——与旧 delta\n // 语义完全一致(回归零影响)。\n // 关键:init 按【成员下标】存,delta 按块共享——刚体组成员初位各不同\n // (nested_assy:b2 初 (0,4,0)、b3 初 (0,8,0)),同一 delta 下绝对位姿各异;\n // 若 init 按块存,跟随者会错拿代表的初位(实测 b2 错落 (2,0,0.75),ref (2,−4,0.75))。\n const initT = new Map<number, Vec3>()\n const initQ = new Map<number, [number, number, number, number]>()\n if (opts?.initialPoses) {\n opts.initialPoses.forEach((ip, i) => {\n if (!ip) return\n initT.set(i, [ip.translation[0], ip.translation[1], ip.translation[2]])\n initQ.set(i, [ip.rotation[0], ip.rotation[1], ip.rotation[2], ip.rotation[3]])\n })\n }\n\n const stateOf = (xx: number[], i: number): { T: Vec3; R: Vec3 } => {\n // 世界哨兵 i = -1:identity(世界系 marker 已存字面坐标,不再施加成员变换)\n if (i < 0) return { T: [0, 0, 0], R: [0, 0, 0] }\n if (lockedSet.has(i)) return { T: [0, 0, 0], R: [0, 0, 0] }\n const k = blockOf.get(i)\n if (k === undefined) return { T: [0, 0, 0], R: [0, 0, 0] }\n const dT: Vec3 = [xx[6 * k], xx[6 * k + 1], xx[6 * k + 2]]\n const dR: Vec3 = [xx[6 * k + 3], xx[6 * k + 4], xx[6 * k + 5]]\n const it = initT.get(i)\n const iq = initQ.get(i)\n if (!it || !iq) return { T: dT, R: dR }\n // absolute = initial ∘ delta:先转 delta 再平移初 loc。\n const qd = quatFromR(dR[0], dR[1], dR[2])\n const at = vadd(it, quatRotate(iq, dT))\n const aq = quatMultiply(iq, qd)\n // 绝对四元数 → 旋转向量(pose-from-delta 的 R 约定),供 markerPoint 复用。\n const Rm = quatToRvec(aq)\n return { T: at, R: Rm }\n }\n\n const residual = (xx: number[]): number[] => {\n const r: number[] = []\n for (const t of terms) {\n const e = termResidual(t, stateOf(xx, t.ia), stateOf(xx, t.ib), scale)\n for (const v of e) r.push(v)\n }\n // penalty 1e-16(B1):sqrt 后 1e-8,T/scale 缩小、R 直接\n for (let k = 0; k < freeIdx.length; k++) {\n r.push(PENALTY ** 0.5 * (xx[6 * k] / scale))\n r.push(PENALTY ** 0.5 * (xx[6 * k + 1] / scale))\n r.push(PENALTY ** 0.5 * (xx[6 * k + 2] / scale))\n r.push(PENALTY ** 0.5 * xx[6 * k + 3])\n r.push(PENALTY ** 0.5 * xx[6 * k + 4])\n r.push(PENALTY ** 0.5 * xx[6 * k + 5])\n }\n return r\n }\n\n // ── LM 迭代 ──\n let lambda = LM_LAMBDA0\n let current = residual(x)\n let obj = 0.5 * dot(current, current)\n\n for (let iter = 0; iter < LM_MAXITER; iter++) {\n const m = current.length\n const J = new Array(m * n).fill(0)\n for (let col = 0; col < n; col++) {\n const h = col % 6 < 3 ? 1e-7 * scale : 1e-7\n const xp = x.slice()\n const xm = x.slice()\n xp[col] += h\n xm[col] -= h\n const rp = residual(xp)\n const rm = residual(xm)\n for (let row = 0; row < m; row++) J[row * n + col] = (rp[row] - rm[row]) / (2 * h)\n }\n const JtJ = ata(J, m, n)\n const Jtr = atb(J, current, m, n)\n\n // 梯度范数收敛(与步长早停互补,避免 λ 放大时误判收敛)\n if (maxAbs(Jtr) < 1e-8) {\n break\n }\n\n const negJtr = Jtr.map((v) => -v)\n const objBefore = obj\n let improved = false\n let acceptedStep: number[] | null = null\n for (let attempt = 0; attempt < 12 && !improved; attempt++) {\n const step = solveDampedNormal(JtJ, negJtr, n, lambda)\n if (!step) break\n const xTry = x.slice()\n for (let j = 0; j < n; j++) xTry[j] += step[j]\n const rTry = residual(xTry)\n const objTry = 0.5 * dot(rTry, rTry)\n if (objTry <= obj) {\n for (let j = 0; j < n; j++) x[j] = xTry[j]\n current = rTry\n obj = objTry\n improved = true\n acceptedStep = step\n lambda = Math.max(lambda / 3, 1e-15)\n } else {\n lambda *= 2\n }\n }\n if (!improved) break\n\n // 步长收敛仅在信任域健康(λ 小)时认定——λ 大时的微小步长只是阻尼,非真收敛\n if (acceptedStep && maxAbs(acceptedStep) < LM_TOL_STEP && lambda < 1e-2) {\n break\n }\n if (Math.abs(objBefore - obj) < LM_TOL_OBJ * Math.max(1, Math.abs(objBefore))) {\n break\n }\n }\n\n // ── 组装结果 ──\n const transforms: AssemblyTransform[] = []\n // P8 方案 A:发射绝对位姿 = initial ∘ delta(stateOf 终态),不再裸发 delta。\n for (let k = 0; k < freeIdx.length; k++) {\n const i = freeIdx[k]\n const st = stateOf(x, i)\n const pose: SolverPose = { position: st.T, rotation: quatFromR(st.R[0], st.R[1], st.R[2]) }\n transforms.push(poseToAssemblyTransform(pose, [0, 0, 0], i))\n }\n // P8 刚体分组:跟随成员与组代表共享同一刚体位姿——为每个跟随者补一条\n // 同 pose 的 transform(index=跟随者),否则 solve-tree 的 recompose 拿不到\n // 组员的变换(nested_assy 的 b3 叶会缺条目)。\n for (const [member, rep] of groupOf) {\n if (member === rep) continue\n if (lockedSet.has(member)) continue\n const st = stateOf(x, rep)\n const pose: SolverPose = { position: st.T, rotation: quatFromR(st.R[0], st.R[1], st.R[2]) }\n transforms.push(poseToAssemblyTransform(pose, [0, 0, 0], member))\n }\n\n // 逐约束残差(诊断)\n const residuals: number[] = []\n const warnings: string[] = []\n const byCid = new Map<number, number>()\n for (const t of terms) {\n const e = termResidual(t, stateOf(x, t.ia), stateOf(x, t.ib), scale)\n const s = e.reduce((acc, v) => acc + v * v, 0)\n byCid.set(t.cid, (byCid.get(t.cid) ?? 0) + s)\n }\n constraints.forEach((_, cid) => {\n const r = byCid.get(cid) ?? 0\n residuals.push(r)\n if (r > RESIDUAL_WARN * scale) warnings.push(`constraint #${cid} residual=${r.toExponential(3)} (> ${RESIDUAL_WARN * scale})`)\n })\n\n // P7/D1-2/D1-4:欠定自由度诊断 + 零空间自由方向(变量系 6 维块 [tx,ty,tz,rx,ry,rz])\n const freeDirs: number[][] = []\n const underdeterminedDof = computeUnderdeterminedDof(terms, scale, n, x, stateOf, freeDirs)\n\n return {\n transforms,\n dof: 0,\n // P7/D1-3:旧 `dof` 字段语义不变(unsupported 合计的占位),欠定信息走新字段。\n underdetermined:\n underdeterminedDof > 0\n ? { dof: underdeterminedDof, freeDirs: freeDirs.map((v) => v.map((c) => Math.abs(c) < 1e-12 ? 0 : +c.toFixed(12))) }\n : undefined,\n converged: true,\n unsupported,\n residuals,\n warnings: warnings.length > 0 ? warnings : undefined,\n }\n}\n\nfunction pushCoincident(terms: CostTerm[], cid: number, ia: number, mA: GlobalMarker, ib: number, mB: GlobalMarker): void {\n if (mA.type === 'point' && mB.type === 'point') {\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'plane' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_in_plane', ia: ib, ma: mB, ib: ia, mb: mA, val: 0, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'plane') {\n terms.push({ cid, fn: 'point_in_plane', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'axis') {\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val: 0, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_on_line', ia: ib, ma: mB, ib, mb: mA, val: 0, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'axis') {\n terms.push({ cid, fn: 'point_on_line', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n } else {\n // 两面 coincident:按 align 语义(平行 + 中心重合)\n terms.push({ cid, fn: 'axis', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: false })\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val: 0, scaleFlag: true })\n }\n}\n\nfunction pushDistance(\n terms: CostTerm[],\n cid: number,\n ia: number,\n mA: GlobalMarker,\n ib: number,\n mB: GlobalMarker,\n val: number,\n unsupported: string[],\n): void {\n if (mA.type === 'point' && mB.type === 'point') {\n terms.push({ cid, fn: 'point', ia, ma: mA, ib, mb: mB, val, scaleFlag: true })\n } else if (mA.type === 'plane' && mB.type === 'point') {\n terms.push({ cid, fn: 'point_in_plane', ia: ib, ma: mB, ib: ia, mb: mA, val, scaleFlag: true })\n } else if (mA.type === 'point' && mB.type === 'plane') {\n terms.push({ cid, fn: 'point_in_plane', ia, ma: mA, ib, mb: mB, val, scaleFlag: true })\n } else if (mA.type === 'axis' && mB.type === 'axis') {\n terms.push({ cid, fn: 'point_on_line', ia, ma: { type: 'point', p: mA.origin }, ib, mb: mB, val, scaleFlag: true })\n } else {\n unsupported.push(`distance requires point-point / plane-point / axis-axis entities, got ${mA.type}-${mB.type}`)\n }\n}\n\nfunction computeScale(pts: Vec3[]): number {\n if (pts.length === 0) return 1\n const min: Vec3 = [Infinity, Infinity, Infinity]\n const max: Vec3 = [-Infinity, -Infinity, -Infinity]\n for (const p of pts) {\n for (let i = 0; i < 3; i++) {\n if (p[i] < min[i]) min[i] = p[i]\n if (p[i] > max[i]) max[i] = p[i]\n }\n }\n const diag = Math.hypot(max[0] - min[0], max[1] - min[1], max[2] - min[2])\n return Math.max(diag, 1e-6)\n}\n\nfunction dot(a: number[], b: number[]): number {\n let s = 0\n for (let i = 0; i < a.length; i++) s += a[i] * b[i]\n return s\n}\nfunction maxAbs(a: number[]): number {\n let m = 0\n for (const v of a) m = Math.max(m, Math.abs(v))\n return m\n}\n"]}
@@ -40,4 +40,13 @@ export declare function rotateByR(v: Vec3, r: Vec3): Vec3;
40
40
  * @returns the quaternion as `[w, x, y, z]` (brepjs order).
41
41
  */
42
42
  export declare function quatFromR(a: number, b: number, c: number): [number, number, number, number];
43
+ /**
44
+ * `quatFromR` 的逆映射:单位四元数 [w,x,y,z] → 模长参数化 ΔR=(a,b,c)。
45
+ * 由 s=(1-m)/(1+m)、u=2R/(1+m) 反解:R = u/(1+s)。
46
+ * 用于 P8 方案 A:绝对位姿(初 loc ∘ delta)合成后的四元数折回 R 约定,
47
+ * 供 termResidual/markerPoint 的 rotateByR 复用。
48
+ * @param q - unit quaternion [w, x, y, z].
49
+ * @returns the magnitude-parameterized rotation (a, b, c).
50
+ */
51
+ export declare function quatToRvec(q: readonly [number, number, number, number]): Vec3;
43
52
  //# sourceMappingURL=pose-from-delta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pose-from-delta.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/pose-from-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAGpC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAOtF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAUhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI3F"}
1
+ {"version":3,"file":"pose-from-delta.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/pose-from-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAGpC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,IAAI,CAAA;CAAE,CAOtF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAUhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI3F;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAc7E"}
@@ -58,4 +58,27 @@ export function quatFromR(a, b, c) {
58
58
  const denom = 1 + m;
59
59
  return [(1 - m) / denom, 2 * a / denom, 2 * b / denom, 2 * c / denom];
60
60
  }
61
+ /**
62
+ * `quatFromR` 的逆映射:单位四元数 [w,x,y,z] → 模长参数化 ΔR=(a,b,c)。
63
+ * 由 s=(1-m)/(1+m)、u=2R/(1+m) 反解:R = u/(1+s)。
64
+ * 用于 P8 方案 A:绝对位姿(初 loc ∘ delta)合成后的四元数折回 R 约定,
65
+ * 供 termResidual/markerPoint 的 rotateByR 复用。
66
+ * @param q - unit quaternion [w, x, y, z].
67
+ * @returns the magnitude-parameterized rotation (a, b, c).
68
+ */
69
+ export function quatToRvec(q) {
70
+ const w = q[0];
71
+ const x = q[1];
72
+ const y = q[2];
73
+ const z = q[3];
74
+ // 180° 附近 s→−1 分母趋 0;delta 参数化本就不表达 180°(CQ 同限制),
75
+ // 返回近似轴角大模长即可(数值上 clamp,避免除零)。
76
+ const denom = 1 + w;
77
+ if (Math.abs(denom) < 1e-12) {
78
+ const n = Math.hypot(x, y, z) || 1;
79
+ const big = 1e6;
80
+ return [(x / n) * big, (y / n) * big, (z / n) * big];
81
+ }
82
+ return [x / denom, y / denom, z / denom];
83
+ }
61
84
  //# sourceMappingURL=pose-from-delta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pose-from-delta.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/pose-from-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAEvC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,OAAO;QACL,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;QAClB,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACjD,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,CAAO,EAAE,CAAO;IACxC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACrB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACrB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1B,OAAO;QACL,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACtD,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACtD,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;KACvD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACvD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAA;IACnB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AACvE,CAAC","sourcesContent":["/**\n * api/assembly/solvers/pose-from-delta — 模长参数化旋转(P1,对齐 B2 / solver.py:309-328)\n *\n * 复刻 CadQuery `solver.py` 的旋转参数化:旋转用 3 维 ΔR=(a,b,c)(模长参数化),\n * 不直接用四元数。与 CQ 逐字一致:\n *\n * m = a²+b²+c²\n * u = 2R/(1+m) // 虚部\n * s = (1-m)/(1+m) // 实部\n * Rotate(v,R) = 2⟨u,v⟩u + (s²−⟨u,u⟩)v + 2s(u×v)\n *\n * 该公式对 (s,u) 单位四元数即标准旋转(s²+⟨u,u⟩=1 ⇒ s²−⟨u,u⟩ = 1−2⟨u,u⟩)。\n * 初值 R=(1e-2,1e-2,1e-2)(B3)。\n */\n\nimport type { Vec3 } from './linalg'\nimport { vcross, vdot } from './linalg'\n\n/**\n * 由 ΔR=(a,b,c) 计算四元数分量(实部 s、虚部 u)。\n * @param a - first magnitude-parameterized rotation component.\n * @param b - second magnitude-parameterized rotation component.\n * @param c - third magnitude-parameterized rotation component.\n * @returns the quaternion parts: scalar part `s` and imaginary part `u` (Vec3).\n */\nexport function quatPartsFromR(a: number, b: number, c: number): { s: number; u: Vec3 } {\n const m = a * a + b * b + c * c\n const denom = 1 + m\n return {\n s: (1 - m) / denom,\n u: [2 * a / denom, 2 * b / denom, 2 * c / denom],\n }\n}\n\n/**\n * 用 ΔR 旋转向量 v(CQ `Rotate`,逐字实现)。\n * @param v - 待旋转向量(本地系)。\n * @param r - ΔR=(a,b,c)。\n * @returns 旋转后的向量。\n */\nexport function rotateByR(v: Vec3, r: Vec3): Vec3 {\n const { s, u } = quatPartsFromR(r[0], r[1], r[2])\n const uv = vdot(u, v)\n const uu = vdot(u, u)\n const cross = vcross(u, v)\n return [\n 2 * uv * u[0] + (s * s - uu) * v[0] + 2 * s * cross[0],\n 2 * uv * u[1] + (s * s - uu) * v[1] + 2 * s * cross[1],\n 2 * uv * u[2] + (s * s - uu) * v[2] + 2 * s * cross[2],\n ]\n}\n\n/**\n * 由 ΔR 生成 brepjs 序四元数 [w,x,y,z](即 CQ 的 (s,u))。\n * 供 `poseToAssemblyTransform` 的 SolverPose.rotation 使用。\n * @param a - first magnitude-parameterized rotation component.\n * @param b - second magnitude-parameterized rotation component.\n * @param c - third magnitude-parameterized rotation component.\n * @returns the quaternion as `[w, x, y, z]` (brepjs order).\n */\nexport function quatFromR(a: number, b: number, c: number): [number, number, number, number] {\n const m = a * a + b * b + c * c\n const denom = 1 + m\n return [(1 - m) / denom, 2 * a / denom, 2 * b / denom, 2 * c / denom]\n}\n"]}
1
+ {"version":3,"file":"pose-from-delta.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/pose-from-delta.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * api/assembly/solvers/pose-from-delta — 模长参数化旋转(P1,对齐 B2 / solver.py:309-328)\n *\n * 复刻 CadQuery `solver.py` 的旋转参数化:旋转用 3 维 ΔR=(a,b,c)(模长参数化),\n * 不直接用四元数。与 CQ 逐字一致:\n *\n * m = a²+b²+c²\n * u = 2R/(1+m) // 虚部\n * s = (1-m)/(1+m) // 实部\n * Rotate(v,R) = 2⟨u,v⟩u + (s²−⟨u,u⟩)v + 2s(u×v)\n *\n * 该公式对 (s,u) 单位四元数即标准旋转(s²+⟨u,u⟩=1 ⇒ s²−⟨u,u⟩ = 1−2⟨u,u⟩)。\n * 初值 R=(1e-2,1e-2,1e-2)(B3)。\n */\n\nimport type { Vec3 } from './linalg'\nimport { vcross, vdot } from './linalg'\n\n/**\n * 由 ΔR=(a,b,c) 计算四元数分量(实部 s、虚部 u)。\n * @param a - first magnitude-parameterized rotation component.\n * @param b - second magnitude-parameterized rotation component.\n * @param c - third magnitude-parameterized rotation component.\n * @returns the quaternion parts: scalar part `s` and imaginary part `u` (Vec3).\n */\nexport function quatPartsFromR(a: number, b: number, c: number): { s: number; u: Vec3 } {\n const m = a * a + b * b + c * c\n const denom = 1 + m\n return {\n s: (1 - m) / denom,\n u: [2 * a / denom, 2 * b / denom, 2 * c / denom],\n }\n}\n\n/**\n * 用 ΔR 旋转向量 v(CQ `Rotate`,逐字实现)。\n * @param v - 待旋转向量(本地系)。\n * @param r - ΔR=(a,b,c)。\n * @returns 旋转后的向量。\n */\nexport function rotateByR(v: Vec3, r: Vec3): Vec3 {\n const { s, u } = quatPartsFromR(r[0], r[1], r[2])\n const uv = vdot(u, v)\n const uu = vdot(u, u)\n const cross = vcross(u, v)\n return [\n 2 * uv * u[0] + (s * s - uu) * v[0] + 2 * s * cross[0],\n 2 * uv * u[1] + (s * s - uu) * v[1] + 2 * s * cross[1],\n 2 * uv * u[2] + (s * s - uu) * v[2] + 2 * s * cross[2],\n ]\n}\n\n/**\n * 由 ΔR 生成 brepjs 序四元数 [w,x,y,z](即 CQ 的 (s,u))。\n * 供 `poseToAssemblyTransform` 的 SolverPose.rotation 使用。\n * @param a - first magnitude-parameterized rotation component.\n * @param b - second magnitude-parameterized rotation component.\n * @param c - third magnitude-parameterized rotation component.\n * @returns the quaternion as `[w, x, y, z]` (brepjs order).\n */\nexport function quatFromR(a: number, b: number, c: number): [number, number, number, number] {\n const m = a * a + b * b + c * c\n const denom = 1 + m\n return [(1 - m) / denom, 2 * a / denom, 2 * b / denom, 2 * c / denom]\n}\n\n/**\n * `quatFromR` 的逆映射:单位四元数 [w,x,y,z] → 模长参数化 ΔR=(a,b,c)。\n * 由 s=(1-m)/(1+m)、u=2R/(1+m) 反解:R = u/(1+s)。\n * 用于 P8 方案 A:绝对位姿(初 loc ∘ delta)合成后的四元数折回 R 约定,\n * 供 termResidual/markerPoint 的 rotateByR 复用。\n * @param q - unit quaternion [w, x, y, z].\n * @returns the magnitude-parameterized rotation (a, b, c).\n */\nexport function quatToRvec(q: readonly [number, number, number, number]): Vec3 {\n const w = q[0]\n const x = q[1]\n const y = q[2]\n const z = q[3]\n // 180° 附近 s→−1 分母趋 0;delta 参数化本就不表达 180°(CQ 同限制),\n // 返回近似轴角大模长即可(数值上 clamp,避免除零)。\n const denom = 1 + w\n if (Math.abs(denom) < 1e-12) {\n const n = Math.hypot(x, y, z) || 1\n const big = 1e6\n return [(x / n) * big, (y / n) * big, (z / n) * big]\n }\n return [x / denom, y / denom, z / denom]\n}\n"]}
@@ -16,6 +16,22 @@ export interface SolveOptions {
16
16
  solver?: SolverStyle;
17
17
  /** 装配名(B4 锚定用;cq-compat 的 buildAssembly 注入)。 */
18
18
  name?: string;
19
+ /**
20
+ * P8:刚体分组(成员下标分组,如 [[0],[1,2],[3]])。同组成员在求解变量系中
21
+ * 共享一个 6 维状态块——子装配在 CQ 语义里是刚体(其成员相对位姿恒定),
22
+ * 拆成独立自由成员会让未约束成员漂移(nested_assy 实测:b2 恒等漂离 ref)。
23
+ */
24
+ rigidGroups?: number[][];
25
+ /**
26
+ * P8 方案 A:成员初始位姿(下标 → 平移 + 四元数 [x,y,z,w])。语义 = CQ sublocs:
27
+ * 成员建模坐标是「装配前的本地系」,约束 marker 取自该本地系;求解器状态是
28
+ * delta(初 loc 之上的增量),绝对位姿 = initialPose ∘ delta,penalty 拉 delta→0
29
+ * 即倾向保持初 loc。solve-tree flatten 时把每叶的累积 parentPose 传入。
30
+ */
31
+ initialPoses?: {
32
+ translation: [number, number, number];
33
+ rotation: [number, number, number, number];
34
+ }[];
19
35
  }
20
36
  /**
21
37
  * global 求解器内部的本地系标记(local-frame marker)。
@@ -46,12 +62,14 @@ export interface GlobalSolveResult {
46
62
  /** 恒 0(数值求解不做 DOF 分析,保留字段避免 undefined)。 */
47
63
  dof: number;
48
64
  /**
49
- * P7/D1-3:欠定自由度诊断(仅 global 路径)。dof > 0 = 约束集欠定,终态位姿
65
+ * P7/D1-3/D1-4:欠定自由度诊断(仅 global 路径)。dof > 0 = 约束集欠定,终态位姿
50
66
  * 依赖优化器轨迹、无唯一「正确解」——判等方应走规范判等通道而非逐位比对。
51
- * dof === 0 时字段缺省(undefined)。
67
+ * freeDirs = 零空间自由方向(变量系:每成员 6 维块 [tx,ty,tz,rx,ry,rz],
68
+ * 欧氏范数 1;D1-4),供判等方直接构造 canonical 扫描的轴/枢轴。
52
69
  */
53
70
  underdetermined?: {
54
71
  dof: number;
72
+ freeDirs?: number[][];
55
73
  };
56
74
  /** LM 终止即 true(无论残差大小;裁定 4.6)。 */
57
75
  converged: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;AAE5C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAEzF,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,8CAA8C;IAC9C,UAAU,EAAE,iBAAiB,EAAE,CAAA;IAC/B,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAA;IACX;;;;OAIG;IACH,eAAe,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACjC,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,uBAAuB;IACvB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,4BAA4B;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAKD,6CAA6C;AAC7C,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAE1D,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAA;IAClE,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAA;IAChD,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,mFAAmF;AACnF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAA;IAC7F,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,OAAO,CAAA;IAClB,iFAAiF;IACjF,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * api/assembly/solvers/types — 纯 TS global 求解器的类型与契约(P1)\n *\n * 本模块是 pure-type / 轻量数据层,不依赖任何 brepjs 或运行时单例,\n * 供 solve.ts、global-solver.ts、compound.ts 共享。\n */\n\nimport type { AssemblyTransform } from '../../../runtime-state'\n\n/** 求解风格:'chain'(链式拓扑解析,默认)/ 'global'(CadQuery 兼容全局最小二乘)。 */\nexport type SolverStyle = 'chain' | 'global'\n\n/**\n * 求解选项(P1):透传自 `cad.assembly({ solver })` / `AssemblyBehavior.solver`。\n * `name` 用于 B4 锚定(assembly.py:465 `name == self.name` 锁定)→ 从 behavior.name 注入。\n */\nexport interface SolveOptions {\n /** 默认 'chain',向后零兼容。 */\n solver?: SolverStyle\n /** 装配名(B4 锚定用;cq-compat 的 buildAssembly 注入)。 */\n name?: string\n}\n\n/**\n * global 求解器内部的本地系标记(local-frame marker)。\n *\n * 与 CQ solver.py 的 marker 同义:\n * - point:装配实体的局部坐标点;\n * - axis:轴上一点 + 单位方向(边/圆柱面法线);\n * - plane:面中心 + 单位法向(face_mate / align / angle 用)。\n *\n * 所有坐标取自成员 Shape 的本地系(faijs Shape 不携带 placement → 本地系 == 建模系)。\n */\nexport type GlobalMarker =\n | { type: 'point'; p: [number, number, number] }\n | { type: 'axis'; origin: [number, number, number]; dir: [number, number, number] }\n | { type: 'plane'; center: [number, number, number]; normal: [number, number, number] }\n\n/** global 求解结果(与 `AssemblySolveResult` 对齐的字段集,但新增 residuals)。 */\nexport interface GlobalSolveResult {\n /** 每个被定位成员一条终态变换(pivot 恒 [0,0,0];恒等位姿不输出)。 */\n transforms: AssemblyTransform[]\n /** 恒 0(数值求解不做 DOF 分析,保留字段避免 undefined)。 */\n dof: number\n /**\n * P7/D1-3:欠定自由度诊断(仅 global 路径)。dof > 0 = 约束集欠定,终态位姿\n * 依赖优化器轨迹、无唯一「正确解」——判等方应走规范判等通道而非逐位比对。\n * dof === 0 时字段缺省(undefined)。\n */\n underdetermined?: { dof: number }\n /** LM 终止即 true(无论残差大小;裁定 4.6)。 */\n converged: boolean\n /** 仅约束类型无法映射为代价时填充。 */\n unsupported: string[]\n /** 逐约束最终残差(诊断,满足「绝不静默」)。 */\n residuals: number[]\n /** 残差超阈值(>1e-6·scale)的约束逐条写入(折中可见)。 */\n warnings?: string[]\n}\n\n\n// ── §5.6.1:chain 求解器类型迁入(原 brepjs kernel/solverAdapter.ts,已内化为第一方代码) ──\n\n/** 3D vector(chain 求解器本地别名,与 quat.ts 同构)。 */\nexport type SolverVec3 = readonly [number, number, number]\n\n/** A geometric entity (plane, axis, or point) referenced by a chain-solver constraint. */\nexport interface SolverEntity {\n type: 'plane' | 'axis' | 'point'\n origin: SolverVec3\n normal?: SolverVec3\n direction?: SolverVec3\n}\n\n/** A chain-solver constraint between two entities, with an optional scalar value. */\nexport interface SolverConstraint {\n type: 'coincident' | 'concentric' | 'distance' | 'angle' | 'fixed'\n entityA?: { node: string; entity: SolverEntity }\n entityB?: { node: string; entity: SolverEntity }\n value?: number\n}\n\n/** Result of the chain solver: per-node transforms, DOF count, and convergence. */\nexport interface SolverResult {\n transforms: Map<string, { position: SolverVec3; rotation: [number, number, number, number] }>\n dof: number\n converged: boolean\n /** Constraint types that were passed in but not solved (not yet implemented). */\n unsupported: string[]\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/api/assembly/solvers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * api/assembly/solvers/types — 纯 TS global 求解器的类型与契约(P1)\n *\n * 本模块是 pure-type / 轻量数据层,不依赖任何 brepjs 或运行时单例,\n * 供 solve.ts、global-solver.ts、compound.ts 共享。\n */\n\nimport type { AssemblyTransform } from '../../../runtime-state'\n\n/** 求解风格:'chain'(链式拓扑解析,默认)/ 'global'(CadQuery 兼容全局最小二乘)。 */\nexport type SolverStyle = 'chain' | 'global'\n\n/**\n * 求解选项(P1):透传自 `cad.assembly({ solver })` / `AssemblyBehavior.solver`。\n * `name` 用于 B4 锚定(assembly.py:465 `name == self.name` 锁定)→ 从 behavior.name 注入。\n */\nexport interface SolveOptions {\n /** 默认 'chain',向后零兼容。 */\n solver?: SolverStyle\n /** 装配名(B4 锚定用;cq-compat 的 buildAssembly 注入)。 */\n name?: string\n /**\n * P8:刚体分组(成员下标分组,如 [[0],[1,2],[3]])。同组成员在求解变量系中\n * 共享一个 6 维状态块——子装配在 CQ 语义里是刚体(其成员相对位姿恒定),\n * 拆成独立自由成员会让未约束成员漂移(nested_assy 实测:b2 恒等漂离 ref)。\n */\n rigidGroups?: number[][]\n /**\n * P8 方案 A:成员初始位姿(下标 → 平移 + 四元数 [x,y,z,w])。语义 = CQ sublocs:\n * 成员建模坐标是「装配前的本地系」,约束 marker 取自该本地系;求解器状态是\n * delta(初 loc 之上的增量),绝对位姿 = initialPose ∘ delta,penalty 拉 delta→0\n * 即倾向保持初 loc。solve-tree flatten 时把每叶的累积 parentPose 传入。\n */\n initialPoses?: { translation: [number, number, number]; rotation: [number, number, number, number] }[]\n}\n\n/**\n * global 求解器内部的本地系标记(local-frame marker)。\n *\n * 与 CQ solver.py 的 marker 同义:\n * - point:装配实体的局部坐标点;\n * - axis:轴上一点 + 单位方向(边/圆柱面法线);\n * - plane:面中心 + 单位法向(face_mate / align / angle 用)。\n *\n * 所有坐标取自成员 Shape 的本地系(faijs Shape 不携带 placement → 本地系 == 建模系)。\n */\nexport type GlobalMarker =\n | { type: 'point'; p: [number, number, number] }\n | { type: 'axis'; origin: [number, number, number]; dir: [number, number, number] }\n | { type: 'plane'; center: [number, number, number]; normal: [number, number, number] }\n\n/** global 求解结果(与 `AssemblySolveResult` 对齐的字段集,但新增 residuals)。 */\nexport interface GlobalSolveResult {\n /** 每个被定位成员一条终态变换(pivot 恒 [0,0,0];恒等位姿不输出)。 */\n transforms: AssemblyTransform[]\n /** 恒 0(数值求解不做 DOF 分析,保留字段避免 undefined)。 */\n dof: number\n /**\n * P7/D1-3/D1-4:欠定自由度诊断(仅 global 路径)。dof > 0 = 约束集欠定,终态位姿\n * 依赖优化器轨迹、无唯一「正确解」——判等方应走规范判等通道而非逐位比对。\n * freeDirs = 零空间自由方向(变量系:每成员 6 维块 [tx,ty,tz,rx,ry,rz],\n * 欧氏范数 1;D1-4),供判等方直接构造 canonical 扫描的轴/枢轴。\n */\n underdetermined?: { dof: number; freeDirs?: number[][] }\n /** LM 终止即 true(无论残差大小;裁定 4.6)。 */\n converged: boolean\n /** 仅约束类型无法映射为代价时填充。 */\n unsupported: string[]\n /** 逐约束最终残差(诊断,满足「绝不静默」)。 */\n residuals: number[]\n /** 残差超阈值(>1e-6·scale)的约束逐条写入(折中可见)。 */\n warnings?: string[]\n}\n\n\n// ── §5.6.1:chain 求解器类型迁入(原 brepjs kernel/solverAdapter.ts,已内化为第一方代码) ──\n\n/** 3D vector(chain 求解器本地别名,与 quat.ts 同构)。 */\nexport type SolverVec3 = readonly [number, number, number]\n\n/** A geometric entity (plane, axis, or point) referenced by a chain-solver constraint. */\nexport interface SolverEntity {\n type: 'plane' | 'axis' | 'point'\n origin: SolverVec3\n normal?: SolverVec3\n direction?: SolverVec3\n}\n\n/** A chain-solver constraint between two entities, with an optional scalar value. */\nexport interface SolverConstraint {\n type: 'coincident' | 'concentric' | 'distance' | 'angle' | 'fixed'\n entityA?: { node: string; entity: SolverEntity }\n entityB?: { node: string; entity: SolverEntity }\n value?: number\n}\n\n/** Result of the chain solver: per-node transforms, DOF count, and convergence. */\nexport interface SolverResult {\n transforms: Map<string, { position: SolverVec3; rotation: [number, number, number, number] }>\n dof: number\n converged: boolean\n /** Constraint types that were passed in but not solved (not yet implemented). */\n unsupported: string[]\n}\n"]}
@@ -27,9 +27,10 @@ import type { BrepEngineApi } from '../brep/engine/primitives.js';
27
27
  import type { ResolutionContext } from '../topology/naming/index.js';
28
28
  /**
29
29
  * Validate chamfer parameters: `edges` must be a non-empty array of EdgeTopoRef,
30
- * each with kind key "edge" and a two-entry faces pair — or of 1-based ordinals
31
- * when `opts.allowOrdinals` (the mesh chain, which has no role layer to match
32
- * edges against).
30
+ * each with kind key "edge" and a two-entry faces pair — or of selector strings
31
+ * (`"|Z"` etc., precision chain) — or of 1-based ordinals when
32
+ * `opts.allowOrdinals` (the mesh chain, which has no role layer to match
33
+ * edges against). A top-level selector string is also accepted.
33
34
  * @param params the raw chamfer operation parameters.
34
35
  * @param opts the selector-form options (mesh chain allows ordinals).
35
36
  */
@@ -65,7 +66,7 @@ export declare function twoDistParams(kernel: BrepEngineApi, ctx: ResolutionCont
65
66
  * `width1` 沿 faces[0] 侧、`width2` 沿 faces[1] 侧(BREP 路径)。
66
67
  * @returns Shape 倒角后的几何。
67
68
  * @param input - 目标几何。type:Shape required:true
68
- * @param params.edges - 参与倒角的边(EdgeTopoRef[],条目为相邻两面的 role 线路)。type:EdgeTopoRef[] required:true
69
+ * @param params.edges - 参与倒角的边:CadQuery 边选择器字符串(如 "|Z",AI 生成)或相邻两面的 role 线路(EdgeTopoRef[],UI 拾取产物)。type:EdgeTopoRef[]|string required:true
69
70
  * @param params.type - 倒角类型(equal | twoDistances | distanceAngle)。type:string required:true
70
71
  * @param params.width - type=equal: 倒角宽度(mm)。type:number 默认 1
71
72
  * @param params.width1 - type=twoDistances: 沿 faces[0] 侧距离(mm)。type:number
@@ -73,6 +74,8 @@ export declare function twoDistParams(kernel: BrepEngineApi, ctx: ResolutionCont
73
74
  * @param params.angle - type=distanceAngle: 与参考面夹角(度,(0,90))。type:number
74
75
  * @example
75
76
  * const p = await cad.chamfer(part0, { edges: [{ kind:'edge', faces:[{ origin:'box', role:'box:top' }, { origin:'box', role:'box:front' }], hint:{ kind:'edge' } }], type:'equal', width:1 })
77
+ * // AI 生成可写 CadQuery 边选择器字符串
78
+ * const p2 = await cad.chamfer(part0, { edges: "|Z", type:'equal', width:1 })
76
79
  * const q = await cad.chamfer(meshPart, { edges: [3], type:'equal', width:1 })
77
80
  */
78
81
  export declare const chamfer: ((input: Shape, params: Record<string, unknown>) => Promise<Shape>) & {
@@ -1 +1 @@
1
- {"version":3,"file":"chamfer.d.ts","sourceRoot":"","sources":["../../src/api/chamfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAQ1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAUxE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1C,IAAI,CA6CN;AAyCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBxC;AAsKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,OAAO;;CAgBlB,CAAA"}
1
+ {"version":3,"file":"chamfer.d.ts","sourceRoot":"","sources":["../../src/api/chamfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAQ1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE9D,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAWxE;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1C,IAAI,CAoDN;AAyCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgBxC;AAiMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,OAAO;;CA0BlB,CAAA"}