@faicad/faijs 0.22.2 → 0.29.3

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 (448) hide show
  1. package/LICENSE +202 -28
  2. package/dist/api/api-namespace.d.ts +5 -5
  3. package/dist/api/api-namespace.d.ts.map +1 -1
  4. package/dist/api/api-namespace.js +4 -4
  5. package/dist/api/api-namespace.js.map +1 -1
  6. package/dist/api/assert.d.ts +2 -2
  7. package/dist/api/assert.js +8 -8
  8. package/dist/api/assert.js.map +1 -1
  9. package/dist/api/asset.d.ts +1 -1
  10. package/dist/api/asset.js +2 -2
  11. package/dist/api/asset.js.map +1 -1
  12. package/dist/api/boolean.d.ts +1 -1
  13. package/dist/api/boolean.d.ts.map +1 -1
  14. package/dist/api/boolean.js +128 -16
  15. package/dist/api/boolean.js.map +1 -1
  16. package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
  17. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
  18. package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
  19. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
  20. package/dist/api/cadquery-selectors/edge.d.ts +40 -0
  21. package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
  22. package/dist/api/cadquery-selectors/edge.js +70 -0
  23. package/dist/api/cadquery-selectors/edge.js.map +1 -0
  24. package/dist/api/cadquery-selectors/entity.d.ts +121 -0
  25. package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
  26. package/dist/api/cadquery-selectors/entity.js +167 -0
  27. package/dist/api/cadquery-selectors/entity.js.map +1 -0
  28. package/dist/api/cadquery-selectors/face.d.ts +33 -0
  29. package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
  30. package/dist/api/cadquery-selectors/face.js +353 -0
  31. package/dist/api/cadquery-selectors/face.js.map +1 -0
  32. package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
  33. package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
  34. package/dist/api/cadquery-selectors/grammar.js +345 -0
  35. package/dist/api/cadquery-selectors/grammar.js.map +1 -0
  36. package/dist/api/cadquery-selectors/index.d.ts +18 -0
  37. package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
  38. package/dist/api/cadquery-selectors/index.js +17 -0
  39. package/dist/api/cadquery-selectors/index.js.map +1 -0
  40. package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
  41. package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
  42. package/dist/api/cadquery-selectors/predicates.js +85 -0
  43. package/dist/api/cadquery-selectors/predicates.js.map +1 -0
  44. package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
  45. package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
  46. package/dist/api/cadquery-selectors/resolve.js +243 -0
  47. package/dist/api/cadquery-selectors/resolve.js.map +1 -0
  48. package/dist/api/cadquery-selectors/types.d.ts +96 -0
  49. package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
  50. package/dist/api/cadquery-selectors/types.js +11 -0
  51. package/dist/api/cadquery-selectors/types.js.map +1 -0
  52. package/dist/api/chamfer.d.ts +13 -5
  53. package/dist/api/chamfer.d.ts.map +1 -1
  54. package/dist/api/chamfer.js +63 -7
  55. package/dist/api/chamfer.js.map +1 -1
  56. package/dist/api/compound-geom.d.ts +1 -1
  57. package/dist/api/compound-geom.js +1 -1
  58. package/dist/api/compound-geom.js.map +1 -1
  59. package/dist/api/draft.d.ts +1 -1
  60. package/dist/api/draft.js +1 -1
  61. package/dist/api/draft.js.map +1 -1
  62. package/dist/api/edge-ref.d.ts +1 -1
  63. package/dist/api/edge-ref.d.ts.map +1 -1
  64. package/dist/api/edge-ref.js +11 -3
  65. package/dist/api/edge-ref.js.map +1 -1
  66. package/dist/api/engrave.d.ts +1 -1
  67. package/dist/api/engrave.js +7 -7
  68. package/dist/api/engrave.js.map +1 -1
  69. package/dist/api/extrude.d.ts +6 -1
  70. package/dist/api/extrude.d.ts.map +1 -1
  71. package/dist/api/extrude.js +59 -5
  72. package/dist/api/extrude.js.map +1 -1
  73. package/dist/api/face-ref.d.ts +1 -1
  74. package/dist/api/face-ref.js +1 -1
  75. package/dist/api/face-ref.js.map +1 -1
  76. package/dist/api/feature-repair.d.ts +1 -1
  77. package/dist/api/feature-repair.js +1 -1
  78. package/dist/api/feature-repair.js.map +1 -1
  79. package/dist/api/fillet-variable.d.ts +1 -1
  80. package/dist/api/fillet-variable.js +1 -1
  81. package/dist/api/fillet-variable.js.map +1 -1
  82. package/dist/api/fillet.d.ts +28 -8
  83. package/dist/api/fillet.d.ts.map +1 -1
  84. package/dist/api/fillet.js +64 -9
  85. package/dist/api/fillet.js.map +1 -1
  86. package/dist/api/geom.d.ts +1 -1
  87. package/dist/api/geom.js +1 -1
  88. package/dist/api/geom.js.map +1 -1
  89. package/dist/api/helix.d.ts +1 -1
  90. package/dist/api/helix.js +1 -1
  91. package/dist/api/helix.js.map +1 -1
  92. package/dist/api/import-brep.d.ts +20 -2
  93. package/dist/api/import-brep.d.ts.map +1 -1
  94. package/dist/api/import-brep.js +28 -3
  95. package/dist/api/import-brep.js.map +1 -1
  96. package/dist/api/import-step.d.ts +17 -2
  97. package/dist/api/import-step.d.ts.map +1 -1
  98. package/dist/api/import-step.js +23 -3
  99. package/dist/api/import-step.js.map +1 -1
  100. package/dist/api/index.d.ts +2 -1
  101. package/dist/api/index.d.ts.map +1 -1
  102. package/dist/api/index.js +5 -2
  103. package/dist/api/index.js.map +1 -1
  104. package/dist/api/internal/compat-op.js +1 -1
  105. package/dist/api/internal/compat-op.js.map +1 -1
  106. package/dist/api/internal/mesh-solid-op.d.ts +236 -0
  107. package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
  108. package/dist/api/internal/mesh-solid-op.js +352 -0
  109. package/dist/api/internal/mesh-solid-op.js.map +1 -0
  110. package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
  111. package/dist/api/internal/svg-asset-resolver.js +1 -1
  112. package/dist/api/internal/svg-asset-resolver.js.map +1 -1
  113. package/dist/api/knurl.d.ts +1 -1
  114. package/dist/api/knurl.js +2 -2
  115. package/dist/api/knurl.js.map +1 -1
  116. package/dist/api/loft.d.ts +1 -1
  117. package/dist/api/loft.js +1 -1
  118. package/dist/api/loft.js.map +1 -1
  119. package/dist/api/measurement/index.d.ts +9 -5
  120. package/dist/api/measurement/index.d.ts.map +1 -1
  121. package/dist/api/measurement/index.js +47 -20
  122. package/dist/api/measurement/index.js.map +1 -1
  123. package/dist/api/pattern.d.ts +5 -3
  124. package/dist/api/pattern.d.ts.map +1 -1
  125. package/dist/api/pattern.js +32 -4
  126. package/dist/api/pattern.js.map +1 -1
  127. package/dist/api/place.d.ts +1 -1
  128. package/dist/api/place.js +1 -1
  129. package/dist/api/place.js.map +1 -1
  130. package/dist/api/primitives.d.ts +1 -1
  131. package/dist/api/primitives.js +2 -2
  132. package/dist/api/primitives.js.map +1 -1
  133. package/dist/api/profile.d.ts +39 -12
  134. package/dist/api/profile.d.ts.map +1 -1
  135. package/dist/api/profile.js +4 -4
  136. package/dist/api/profile.js.map +1 -1
  137. package/dist/api/reconcile.d.ts +1 -1
  138. package/dist/api/reconcile.js +1 -1
  139. package/dist/api/reconcile.js.map +1 -1
  140. package/dist/api/replicate.d.ts.map +1 -1
  141. package/dist/api/replicate.js +122 -1
  142. package/dist/api/replicate.js.map +1 -1
  143. package/dist/api/screw.d.ts +1 -1
  144. package/dist/api/screw.js +3 -3
  145. package/dist/api/screw.js.map +1 -1
  146. package/dist/api/sdf.d.ts +1 -1
  147. package/dist/api/sdf.js +2 -2
  148. package/dist/api/sdf.js.map +1 -1
  149. package/dist/api/section-by-plane.d.ts +1 -1
  150. package/dist/api/section-by-plane.d.ts.map +1 -1
  151. package/dist/api/section-by-plane.js +2 -1
  152. package/dist/api/section-by-plane.js.map +1 -1
  153. package/dist/api/shell.d.ts +11 -4
  154. package/dist/api/shell.d.ts.map +1 -1
  155. package/dist/api/shell.js +53 -7
  156. package/dist/api/shell.js.map +1 -1
  157. package/dist/api/sketch-on-face.d.ts +41 -0
  158. package/dist/api/sketch-on-face.d.ts.map +1 -1
  159. package/dist/api/sketch-on-face.js +100 -1
  160. package/dist/api/sketch-on-face.js.map +1 -1
  161. package/dist/api/sketch-on-plane.d.ts +7 -5
  162. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  163. package/dist/api/sketch-on-plane.js +6 -7
  164. package/dist/api/sketch-on-plane.js.map +1 -1
  165. package/dist/api/split-by-plane.d.ts +1 -1
  166. package/dist/api/split-by-plane.d.ts.map +1 -1
  167. package/dist/api/split-by-plane.js +2 -1
  168. package/dist/api/split-by-plane.js.map +1 -1
  169. package/dist/api/split.d.ts +1 -1
  170. package/dist/api/split.js +2 -2
  171. package/dist/api/split.js.map +1 -1
  172. package/dist/api/sweep.d.ts +1 -1
  173. package/dist/api/sweep.js +1 -1
  174. package/dist/api/sweep.js.map +1 -1
  175. package/dist/api/thicken.d.ts +1 -1
  176. package/dist/api/thicken.js +1 -1
  177. package/dist/api/thicken.js.map +1 -1
  178. package/dist/api/topo-resolve.d.ts +74 -1
  179. package/dist/api/topo-resolve.d.ts.map +1 -1
  180. package/dist/api/topo-resolve.js +180 -2
  181. package/dist/api/topo-resolve.js.map +1 -1
  182. package/dist/api/transform.d.ts +5 -1
  183. package/dist/api/transform.d.ts.map +1 -1
  184. package/dist/api/transform.js +62 -11
  185. package/dist/api/transform.js.map +1 -1
  186. package/dist/api/wire.d.ts +1 -1
  187. package/dist/api/wire.js +1 -1
  188. package/dist/api/wire.js.map +1 -1
  189. package/dist/brep/brep-ops.d.ts +9 -7
  190. package/dist/brep/brep-ops.d.ts.map +1 -1
  191. package/dist/brep/brep-ops.js +23 -24
  192. package/dist/brep/brep-ops.js.map +1 -1
  193. package/dist/brep/brep-topology.d.ts +5 -4
  194. package/dist/brep/brep-topology.d.ts.map +1 -1
  195. package/dist/brep/brep-topology.js +6 -5
  196. package/dist/brep/brep-topology.js.map +1 -1
  197. package/dist/brep/effective-deflection.d.ts +35 -0
  198. package/dist/brep/effective-deflection.d.ts.map +1 -0
  199. package/dist/brep/effective-deflection.js +49 -0
  200. package/dist/brep/effective-deflection.js.map +1 -0
  201. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  202. package/dist/brep/engine/adapters/brep-mock.js +27 -0
  203. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  204. package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
  205. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  206. package/dist/brep/engine/adapters/brepkit.js +46 -1
  207. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  208. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  209. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  210. package/dist/brep/engine/adapters/occt.js +3 -1
  211. package/dist/brep/engine/adapters/occt.js.map +1 -1
  212. package/dist/brep/engine/primitives.d.ts +29 -7
  213. package/dist/brep/engine/primitives.d.ts.map +1 -1
  214. package/dist/brep/engine/primitives.js.map +1 -1
  215. package/dist/brep/engine/registry.d.ts +24 -1
  216. package/dist/brep/engine/registry.d.ts.map +1 -1
  217. package/dist/brep/engine/registry.js +24 -0
  218. package/dist/brep/engine/registry.js.map +1 -1
  219. package/dist/brep/engine/types.d.ts +54 -3
  220. package/dist/brep/engine/types.d.ts.map +1 -1
  221. package/dist/brep/engine/types.js +10 -0
  222. package/dist/brep/engine/types.js.map +1 -1
  223. package/dist/brep/export/export-model.d.ts.map +1 -1
  224. package/dist/brep/export/export-model.js +6 -5
  225. package/dist/brep/export/export-model.js.map +1 -1
  226. package/dist/brep/face-evolution.d.ts +1 -1
  227. package/dist/brep/face-evolution.d.ts.map +1 -1
  228. package/dist/brep/face-evolution.js +20 -1
  229. package/dist/brep/face-evolution.js.map +1 -1
  230. package/dist/brep/handle-bridge.d.ts +1 -1
  231. package/dist/brep/handle-bridge.js +1 -1
  232. package/dist/brep/handle-bridge.js.map +1 -1
  233. package/dist/brep/mesh-solid.d.ts +218 -0
  234. package/dist/brep/mesh-solid.d.ts.map +1 -0
  235. package/dist/brep/mesh-solid.js +229 -0
  236. package/dist/brep/mesh-solid.js.map +1 -0
  237. package/dist/brep/text/fontRegistry.d.ts +32 -1
  238. package/dist/brep/text/fontRegistry.d.ts.map +1 -1
  239. package/dist/brep/text/fontRegistry.js +51 -1
  240. package/dist/brep/text/fontRegistry.js.map +1 -1
  241. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  242. package/dist/brep/text/text-to-solid.js +8 -3
  243. package/dist/brep/text/text-to-solid.js.map +1 -1
  244. package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
  245. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  246. package/dist/brepkit-kernel/brepkitKernel.js +449 -123
  247. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  248. package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
  249. package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
  250. package/dist/brepkit-kernel/brepkitWasm.js +10 -0
  251. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  252. package/dist/browser-host/browser-font-provider.d.ts +12 -0
  253. package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
  254. package/dist/browser-host/browser-font-provider.js +25 -0
  255. package/dist/browser-host/browser-font-provider.js.map +1 -1
  256. package/dist/browser.d.ts +6 -3
  257. package/dist/browser.d.ts.map +1 -1
  258. package/dist/browser.js +10 -3
  259. package/dist/browser.js.map +1 -1
  260. package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
  261. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  262. package/dist/cad-runtime/backend-dispatch.js +119 -4
  263. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  264. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  265. package/dist/cad-runtime/direct-executor.d.ts +15 -3
  266. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  267. package/dist/cad-runtime/direct-executor.js +33 -1
  268. package/dist/cad-runtime/direct-executor.js.map +1 -1
  269. package/dist/cad-runtime/ports.d.ts +3 -3
  270. package/dist/cad-runtime/ports.d.ts.map +1 -1
  271. package/dist/cad-runtime/ports.js.map +1 -1
  272. package/dist/cad-runtime/preview-exec.d.ts +4 -4
  273. package/dist/cad-runtime/preview-exec.js +2 -2
  274. package/dist/cad-runtime/preview-exec.js.map +1 -1
  275. package/dist/cad-runtime/runtime.d.ts +42 -7
  276. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  277. package/dist/cad-runtime/runtime.js +68 -5
  278. package/dist/cad-runtime/runtime.js.map +1 -1
  279. package/dist/define-op.d.ts +15 -1
  280. package/dist/define-op.d.ts.map +1 -1
  281. package/dist/define-op.js +10 -1
  282. package/dist/define-op.js.map +1 -1
  283. package/dist/env-agnostic.d.ts +2 -2
  284. package/dist/env-agnostic.d.ts.map +1 -1
  285. package/dist/env-agnostic.js +1 -1
  286. package/dist/env-agnostic.js.map +1 -1
  287. package/dist/geometry2d/adapt.d.ts +39 -4
  288. package/dist/geometry2d/adapt.d.ts.map +1 -1
  289. package/dist/geometry2d/adapt.js +14 -3
  290. package/dist/geometry2d/adapt.js.map +1 -1
  291. package/dist/geometry2d/blueprint.d.ts +2 -2
  292. package/dist/geometry2d/blueprint.js +2 -2
  293. package/dist/geometry2d/blueprint.js.map +1 -1
  294. package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
  295. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  296. package/dist/geometry2d/bridge/lift-on-plane.js +65 -12
  297. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  298. package/dist/geometry2d/bridge/plane.d.ts +17 -0
  299. package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
  300. package/dist/geometry2d/bridge/plane.js +22 -0
  301. package/dist/geometry2d/bridge/plane.js.map +1 -1
  302. package/dist/geometry2d/curve2d.d.ts +25 -0
  303. package/dist/geometry2d/curve2d.d.ts.map +1 -1
  304. package/dist/geometry2d/curve2d.js +41 -5
  305. package/dist/geometry2d/curve2d.js.map +1 -1
  306. package/dist/index.d.ts +6 -2
  307. package/dist/index.d.ts.map +1 -1
  308. package/dist/index.js +10 -3
  309. package/dist/index.js.map +1 -1
  310. package/dist/io/bytes-node.d.ts +11 -0
  311. package/dist/io/bytes-node.d.ts.map +1 -0
  312. package/dist/io/bytes-node.js +28 -0
  313. package/dist/io/bytes-node.js.map +1 -0
  314. package/dist/io/bytes.d.ts +33 -0
  315. package/dist/io/bytes.d.ts.map +1 -0
  316. package/dist/io/bytes.js +41 -0
  317. package/dist/io/bytes.js.map +1 -0
  318. package/dist/io/fai-zip/container-read.d.ts +102 -0
  319. package/dist/io/fai-zip/container-read.d.ts.map +1 -0
  320. package/dist/io/fai-zip/container-read.js +305 -0
  321. package/dist/io/fai-zip/container-read.js.map +1 -0
  322. package/dist/io/fai-zip/container-write.d.ts +70 -0
  323. package/dist/io/fai-zip/container-write.d.ts.map +1 -0
  324. package/dist/io/fai-zip/container-write.js +186 -0
  325. package/dist/io/fai-zip/container-write.js.map +1 -0
  326. package/dist/io/fai-zip/container.d.ts +107 -0
  327. package/dist/io/fai-zip/container.d.ts.map +1 -0
  328. package/dist/io/fai-zip/container.js +89 -0
  329. package/dist/io/fai-zip/container.js.map +1 -0
  330. package/dist/io/fai-zip/index.d.ts +18 -0
  331. package/dist/io/fai-zip/index.d.ts.map +1 -0
  332. package/dist/io/fai-zip/index.js +4 -0
  333. package/dist/io/fai-zip/index.js.map +1 -0
  334. package/dist/io/index.d.ts +10 -0
  335. package/dist/io/index.d.ts.map +1 -0
  336. package/dist/io/index.js +13 -0
  337. package/dist/io/index.js.map +1 -0
  338. package/dist/io/zip.d.ts +68 -0
  339. package/dist/io/zip.d.ts.map +1 -0
  340. package/dist/io/zip.js +147 -0
  341. package/dist/io/zip.js.map +1 -0
  342. package/dist/lang/code-to-args.d.ts +1 -1
  343. package/dist/lang/code-to-args.js +1 -1
  344. package/dist/lang/code-to-args.js.map +1 -1
  345. package/dist/lang/statement-summary.d.ts +1 -1
  346. package/dist/lang/statement-summary.js +1 -1
  347. package/dist/lang/statement-summary.js.map +1 -1
  348. package/dist/lang/types.d.ts +1 -1
  349. package/dist/lang/types.js +1 -1
  350. package/dist/lang/types.js.map +1 -1
  351. package/dist/mesh/index.d.ts +2 -1
  352. package/dist/mesh/index.d.ts.map +1 -1
  353. package/dist/mesh/index.js +2 -1
  354. package/dist/mesh/index.js.map +1 -1
  355. package/dist/mesh/io.d.ts +7 -0
  356. package/dist/mesh/io.d.ts.map +1 -1
  357. package/dist/mesh/io.js +14 -17
  358. package/dist/mesh/io.js.map +1 -1
  359. package/dist/mesh/reconcile.d.ts +1 -1
  360. package/dist/mesh/reconcile.js +1 -1
  361. package/dist/mesh/reconcile.js.map +1 -1
  362. package/dist/mesh/rigid-transform.d.ts +3 -3
  363. package/dist/mesh/rigid-transform.js +3 -3
  364. package/dist/mesh/rigid-transform.js.map +1 -1
  365. package/dist/mesh/stl-unit.d.ts +24 -0
  366. package/dist/mesh/stl-unit.d.ts.map +1 -0
  367. package/dist/mesh/stl-unit.js +17 -0
  368. package/dist/mesh/stl-unit.js.map +1 -0
  369. package/dist/mesh/threemf-bambu.d.ts +142 -0
  370. package/dist/mesh/threemf-bambu.d.ts.map +1 -0
  371. package/dist/mesh/threemf-bambu.js +334 -0
  372. package/dist/mesh/threemf-bambu.js.map +1 -0
  373. package/dist/mesh/threemf-loader.d.ts +42 -7
  374. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  375. package/dist/mesh/threemf-loader.js +565 -100
  376. package/dist/mesh/threemf-loader.js.map +1 -1
  377. package/dist/mesh/threemf-view.d.ts +71 -0
  378. package/dist/mesh/threemf-view.d.ts.map +1 -0
  379. package/dist/mesh/threemf-view.js +100 -0
  380. package/dist/mesh/threemf-view.js.map +1 -0
  381. package/dist/node-host/cli.d.ts +44 -6
  382. package/dist/node-host/cli.d.ts.map +1 -1
  383. package/dist/node-host/cli.js +76 -26
  384. package/dist/node-host/cli.js.map +1 -1
  385. package/dist/node-host/font-family-index.d.ts +93 -0
  386. package/dist/node-host/font-family-index.d.ts.map +1 -0
  387. package/dist/node-host/font-family-index.js +273 -0
  388. package/dist/node-host/font-family-index.js.map +1 -0
  389. package/dist/node-host/fs-asset-resolver.d.ts +8 -3
  390. package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
  391. package/dist/node-host/fs-asset-resolver.js +13 -5
  392. package/dist/node-host/fs-asset-resolver.js.map +1 -1
  393. package/dist/node-host/index.d.ts +8 -0
  394. package/dist/node-host/index.d.ts.map +1 -1
  395. package/dist/node-host/index.js +1 -0
  396. package/dist/node-host/index.js.map +1 -1
  397. package/dist/node-host/node-font-provider.d.ts +28 -0
  398. package/dist/node-host/node-font-provider.d.ts.map +1 -1
  399. package/dist/node-host/node-font-provider.js +49 -0
  400. package/dist/node-host/node-font-provider.js.map +1 -1
  401. package/dist/node.d.ts +1 -0
  402. package/dist/node.d.ts.map +1 -1
  403. package/dist/node.js +1 -0
  404. package/dist/node.js.map +1 -1
  405. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  406. package/dist/occt-kernel/occt-primitives.js +35 -2
  407. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  408. package/dist/occt-kernel/occtKernel.d.ts +18 -13
  409. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  410. package/dist/occt-kernel/occtKernel.js +18 -31
  411. package/dist/occt-kernel/occtKernel.js.map +1 -1
  412. package/dist/occt-kernel/stepColorParser.d.ts +18 -0
  413. package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
  414. package/dist/occt-kernel/stepColorParser.js +38 -0
  415. package/dist/occt-kernel/stepColorParser.js.map +1 -1
  416. package/dist/occt-kernel/topologyExt.d.ts +1 -1
  417. package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
  418. package/dist/occt-kernel/topologyExt.js +4 -5
  419. package/dist/occt-kernel/topologyExt.js.map +1 -1
  420. package/dist/primitives/text/cjk-font.d.ts +2 -15
  421. package/dist/primitives/text/cjk-font.d.ts.map +1 -1
  422. package/dist/primitives/text/cjk-font.js +13 -1
  423. package/dist/primitives/text/cjk-font.js.map +1 -1
  424. package/dist/runtime-state.d.ts +85 -9
  425. package/dist/runtime-state.d.ts.map +1 -1
  426. package/dist/runtime-state.js +72 -2
  427. package/dist/runtime-state.js.map +1 -1
  428. package/dist/sdk.d.ts +3 -3
  429. package/dist/sdk.d.ts.map +1 -1
  430. package/dist/sdk.js +5 -5
  431. package/dist/sdk.js.map +1 -1
  432. package/dist/shape.d.ts +97 -2
  433. package/dist/shape.d.ts.map +1 -1
  434. package/dist/shape.js +126 -1
  435. package/dist/shape.js.map +1 -1
  436. package/dist/topology/naming/lineage.d.ts +6 -0
  437. package/dist/topology/naming/lineage.d.ts.map +1 -1
  438. package/dist/topology/naming/lineage.js +8 -0
  439. package/dist/topology/naming/lineage.js.map +1 -1
  440. package/dist/topology/naming/resolve-edge.d.ts +20 -1
  441. package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
  442. package/dist/topology/naming/resolve-edge.js +54 -20
  443. package/dist/topology/naming/resolve-edge.js.map +1 -1
  444. package/dist/weapp.d.ts +6 -2
  445. package/dist/weapp.d.ts.map +1 -1
  446. package/dist/weapp.js +7 -1
  447. package/dist/weapp.js.map +1 -1
  448. package/package.json +18 -2
@@ -1 +1 @@
1
- {"version":3,"file":"threemf-loader.js","sourceRoot":"","sources":["../../src/mesh/threemf-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * threemf-loader — headless 3MF (ZIP/OPC) geometry loader.\n *\n * 3MF is a ZIP container whose geometry lives in `3D/3dmodel.model`, an XML\n * document. Design requirement (unit-system §2.4/§5): the unit MUST be read\n * from the real (inflated) XML, NOT from the raw bytes — `3D/3dmodel.model` is\n * deflate-compressed inside the ZIP, so scanning the raw buffer cannot find\n * `<model unit=\"…\">` (the 3d_editor precedent returned 'millimeter' for real\n * files). We unzip the entry first, then parse the XML.\n *\n * Coordinate conversion: every coordinate is multiplied by `UNIT_SCALE[unit]`\n * to land in the faijs base length unit (mm).\n *\n * Per-object transform: `<item transform=\"a b c d e f g h i p q r\">` is an\n * ST_Matrix3D stored **column-major** whose last three tokens are the\n * translation `(p,q,r)`. Applied as:\n * x' = a*x + d*y + g*z + p\n * y' = b*x + e*y + h*z + q\n * z' = c*x + f*y + i*z + r\n * so object-local mesh coords bake into world-space positions (the op contract\n * is world-space; `planeDistance` must line up with baked positions).\n */\nimport { unzipSync, strFromU8 } from 'fflate'\nimport { parseXmlDocument } from '../api/xml-dom'\nimport { UNIT_SCALE, type UnitName } from '../units'\n\n/** Map a 3MF unit string to a faijs length unit name. */\nfunction threemfUnitToFaijs(unit: string): UnitName | null {\n switch (unit) {\n case 'micron': return 'micron'\n case 'millimeter': return 'mm'\n case 'centimeter': return 'cm'\n case 'inch': return 'inch'\n case 'foot': return 'foot'\n case 'meter': return 'm'\n default: return null\n }\n}\n\n/** A parsed 3MF solid: triangle soup in mm base (already unit-scaled). */\nexport interface ThreemfMesh {\n positions: Float32Array\n indices: Uint32Array\n /** The declared `<model unit>` (raw, e.g. \"millimeter\"). */\n sourceUnit: string\n}\n\n/** Extract the declared unit from an already-parsed `<model>` document. */\nfunction modelUnit(doc: Document): string {\n const model = doc.documentElement\n if (model && model.getAttribute('unit')) {\n return model.getAttribute('unit')!\n }\n // Default per 3MF spec is millimeter.\n return 'millimeter'\n}\n\n/** Parse the `3D/3dmodel.model` XML and produce an index+position mesh. */\nasync function parseModelXml(xml: string): Promise<{ positions: Float32Array; indices: Uint32Array; unit: string }> {\n const doc = await parseXmlDocument(xml)\n const unit = modelUnit(doc)\n const faijsUnit = threemfUnitToFaijs(unit)\n if (faijsUnit === null) {\n throw new Error(`[mesh/threemf] unsupported <model unit>: ${JSON.stringify(unit)}`)\n }\n const scale = UNIT_SCALE[faijsUnit]\n\n // resources → object → mesh → vertices / triangles\n const resources = doc.documentElement.getElementsByTagName('resources')[0]\n const objects = resources ? resources.getElementsByTagName('object') : []\n const byObjectId = new Map<number, { positions: Float32Array; indices: Uint32Array }>()\n\n for (let i = 0; i < objects.length; i++) {\n const obj = objects[i]\n const id = Number(obj.getAttribute('id'))\n if (!Number.isInteger(id)) continue\n const meshEl = obj.getElementsByTagName('mesh')[0]\n if (!meshEl) continue\n const verticesEl = meshEl.getElementsByTagName('vertices')[0]\n const trianglesEl = meshEl.getElementsByTagName('triangles')[0]\n if (!verticesEl || !trianglesEl) continue\n\n const vertexEls = verticesEl.getElementsByTagName('vertex')\n const pos = new Float32Array(vertexEls.length * 3)\n for (let v = 0; v < vertexEls.length; v++) {\n const el = vertexEls[v]\n pos[v * 3] = Number(el.getAttribute('x')) * scale\n pos[v * 3 + 1] = Number(el.getAttribute('y')) * scale\n pos[v * 3 + 2] = Number(el.getAttribute('z')) * scale\n }\n\n const triEls = trianglesEl.getElementsByTagName('triangle')\n const idx = new Uint32Array(triEls.length * 3)\n for (let t = 0; t < triEls.length; t++) {\n const el = triEls[t]\n idx[t * 3] = Number(el && el.getAttribute('v1'))\n idx[t * 3 + 1] = Number(el && el.getAttribute('v2'))\n idx[t * 3 + 2] = Number(el && el.getAttribute('v3'))\n }\n byObjectId.set(id, { positions: pos, indices: idx })\n }\n\n // build → item → per-instance transforms (ST_3D, column-major, translation last 3).\n const build = doc.documentElement.getElementsByTagName('build')[0]\n const itemEls = build ? build.getElementsByTagName('item') : []\n const allPos: number[] = []\n const allIdx: number[] = []\n\n for (let i = 0; i < itemEls.length; i++) {\n const item = itemEls[i]\n const objId = Number(item.getAttribute('objectid'))\n const src = byObjectId.get(objId)\n if (!src) continue\n const mat = item.getAttribute('transform')\n const [a, b, c, d, e, f, g, h, iz, p, q, r] = mat\n ? mat.trim().split(/\\s+/).map(Number)\n : [1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0]\n\n const base = allPos.length / 3\n for (let v = 0; v < src.positions.length; v += 3) {\n const x = src.positions[v]\n const y = src.positions[v + 1]\n const z = src.positions[v + 2]\n allPos.push(\n a * x + d * y + g * z + p,\n b * x + e * y + h * z + q,\n c * x + f * y + iz * z + r,\n )\n }\n for (let t = 0; t < src.indices.length; t++) {\n allIdx.push(src.indices[t] + base)\n }\n }\n\n // Fallback: if the build list is empty (some exporters omit <build>), emit\n // every object's mesh directly.\n if (itemEls.length === 0) {\n for (const [, src] of byObjectId) {\n const base = allPos.length / 3\n for (let v = 0; v < src.positions.length; v++) allPos.push(src.positions[v])\n for (let t = 0; t < src.indices.length; t++) allIdx.push(src.indices[t] + base)\n }\n }\n\n if (allPos.length === 0) {\n throw new Error('[mesh/threemf] no buildable geometry found in 3dmodel.model')\n }\n\n return {\n positions: new Float32Array(allPos),\n indices: new Uint32Array(allIdx),\n unit,\n }\n}\n\n/**\n * Parse 3MF bytes into a mm-base mesh.\n * @param buffer - the raw .3mf (ZIP) bytes.\n * @returns the parsed mesh plus the declared source unit.\n * @throws when the buffer is not a 3MF/ZIP archive or the unit is invalid.\n */\nexport async function parseThreemf(buffer: ArrayBuffer): Promise<ThreemfMesh> {\n let entries: Record<string, Uint8Array>\n try {\n entries = unzipSync(new Uint8Array(buffer))\n } catch {\n throw new Error('[mesh/threemf] not a valid 3MF ZIP archive')\n }\n const modelKey = Object.keys(entries).find((k) => k.toLowerCase() === '3d/3dmodel.model')\n if (!modelKey) {\n throw new Error('[mesh/threemf] missing 3D/3dmodel.model entry')\n }\n const raw = entries[modelKey]!\n const xml = strFromU8(raw)\n const parsed = await parseModelXml(xml)\n return {\n positions: parsed.positions,\n indices: parsed.indices,\n sourceUnit: parsed.unit,\n }\n}"]}
1
+ {"version":3,"file":"threemf-loader.js","sourceRoot":"","sources":["../../src/mesh/threemf-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * threemf-loader — headless 3MF (ZIP/OPC) geometry loader.\n *\n * 3MF is a ZIP container whose geometry lives in `3D/3dmodel.model`, an XML\n * document. Design requirements (unit-system §2.4/§5): the unit MUST be read\n * from the real (inflated) XML, NOT from the raw bytes — `3D/3dmodel.model` is\n * deflate-compressed inside the ZIP, so scanning the raw buffer cannot find\n * `<model unit=\"…\">` (the 3d_editor precedent returned 'millimeter' for real\n * files). We unzip the entry first, then parse the XML.\n *\n * Coordinate conversion: every coordinate is multiplied by `UNIT_SCALE[unit]`\n * to land in the faijs base length unit (mm).\n *\n * Per-object transform: `<item transform=\"a b c d e f g h i p q r\">` is an\n * ST_Matrix3D stored **column-major** whose last three tokens are the\n * translation `(p,q,r)`. Applied as:\n * x' = a*x + d*y + g*z + p\n * y' = b*x + e*y + h*z + q\n * z' = c*x + f*y + i*z + r\n * so object-local mesh coords bake into world-space positions.\n *\n * Return: an `ThreemfArchive` — per-instance objects (one per `<build><item>`,\n * transform baked, or per-`<resources>` object when `<build>` has no items at\n * all), plus every non-model archive entry surfaced as `extraEntries` so the\n * host can reach Bambu's private `model_settings.config` / thumbnails through\n * the *same unzipped map* (single unzip, two consumer chains).\n */\nimport { readZipEntries } from '../io/zip'\nimport { UNIT_SCALE, type UnitName } from '../units'\n\n/** Map a 3MF unit string to a faijs length unit name. */\nfunction threemfUnitToFaijs(unit: string): UnitName | null {\n switch (unit) {\n case 'micron': return 'micron'\n case 'millimeter': return 'mm'\n case 'centimeter': return 'cm'\n case 'inch': return 'inch'\n case 'foot': return 'foot'\n case 'meter': return 'm'\n default: return null\n }\n}\n\n/** `#RRGGBB` → sRGB components in 0..1 (leading `#` required, alpha ignored). */\nfunction hexToRgb(hex: string): readonly [number, number, number] | null {\n const m = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(hex)\n if (!m) return null\n return [parseInt(m[1], 16) / 255, parseInt(m[2], 16) / 255, parseInt(m[3], 16) / 255]\n}\n\n/** Per-triangle material properties (3MF `pid`/`p1`/`p2`/`p3`). */\ninterface TriMaterialProps {\n pid?: string\n p1?: number\n p2?: number\n p3?: number\n}\n\n/** One `<component>` reference inside an object's `<components>` list. */\ninterface ObjectComponent {\n objectId: number\n /** ST_Matrix3D tokens (12 or validated 16 → first 12); null = malformed → identity. */\n transform: readonly number[] | null\n}\n\n/** Object-level geometry + material metadata collected during resources scan. */\ninterface ObjectMeshMeta {\n id: number\n name?: string\n /** Object-level `pid` (applies to every triangle without its own `pid`). */\n pid?: string\n /** Object-level `pindex` (default base/color index when a triangle omits p1..p3). */\n pindex?: number\n /**\n * Present when the object carries a `<mesh>`; a pure component container\n * (no mesh, only `<components>`) has neither positions nor indices.\n */\n positions?: Float32Array\n indices?: Uint32Array\n /** Per-triangle material props; undefined when the object uses none. */\n triProps?: TriMaterialProps[]\n /** `<components>` children (Bambu builds plates/assemblies this way). */\n components?: ObjectComponent[]\n}\n\n/** Bake a column-major ST_Matrix3D (translation = last three tokens) into positions. */\nfunction bakeTransform(positions: Float32Array, m: readonly number[]): Float32Array {\n const [a, b, c, d, e, f, g, h, iz, p, q, r] = m\n const out = new Float32Array(positions.length)\n for (let v = 0; v < positions.length; v += 3) {\n const x = positions[v]\n const y = positions[v + 1]\n const z = positions[v + 2]\n out[v] = a * x + d * y + g * z + p\n out[v + 1] = b * x + e * y + h * z + q\n out[v + 2] = c * x + f * y + iz * z + r\n }\n return out\n}\n\n/**\n * Compose two ST_Matrix3D column-major transforms (12 tokens each, same\n * layout as `bakeTransform`: `[a b c, d e f, g h i, p q r]`, translation last).\n *\n * Semantics: the child transform is applied first, then the parent —\n * `M = parent · child` (the child lives in the parent's space, exactly like\n * three.js `clone.applyMatrix4(parent).applyMatrix4(child)`).\n */\nfunction composeTransform(parent: readonly number[], child: readonly number[]): number[] {\n const [a1, b1, c1, d1, e1, f1, g1, h1, i1, p1, q1, r1] = parent\n const [a2, b2, c2, d2, e2, f2, g2, h2, i2, p2, q2, r2] = child\n return [\n a1 * a2 + d1 * b2 + g1 * c2,\n b1 * a2 + e1 * b2 + h1 * c2,\n c1 * a2 + f1 * b2 + i1 * c2,\n a1 * d2 + d1 * e2 + g1 * f2,\n b1 * d2 + e1 * e2 + h1 * f2,\n c1 * d2 + f1 * e2 + i1 * f2,\n a1 * g2 + d1 * h2 + g1 * i2,\n b1 * g2 + e1 * h2 + h1 * i2,\n c1 * g2 + f1 * h2 + i1 * i2,\n a1 * p2 + d1 * q2 + g1 * r2 + p1,\n b1 * p2 + e1 * q2 + h1 * r2 + q1,\n c1 * p2 + f1 * q2 + i1 * r2 + r1,\n ]\n}\n\n/**\n * Parse an ST_Matrix3D attribute (12 or 16 tokens with trailing \"0 0 0 1\").\n * Returns the first 12 tokens when valid, `null` when malformed (caller\n * ignores the transform instead of baking NaN — mirrors the host tolerance\n * contract).\n */\nfunction parseTransformAttr(raw: string | null): readonly number[] | null {\n if (!raw) return null\n const t = raw.trim().split(/\\s+/).map(Number)\n const valid =\n t.length === 12 ||\n (t.length === 16 && t[12] === 0 && t[13] === 0 && t[14] === 0 && t[15] === 1)\n if (!valid || !t.every((n) => Number.isFinite(n))) return null\n return t.length === 12 ? t : t.slice(0, 12)\n}\n\n/** One parsed 3MF object instance: triangle soup in mm base (unit-scaled). */\nexport interface ThreemfObject {\n /** The `<object id>` this instance instantiates. */\n id: number\n /** The object's `<object name>` (Bambu exports a human label here). */\n name?: string\n positions: Float32Array\n indices: Uint32Array\n /**\n * Basematerials display color, `[r, g, b]` in 0..1 (sRGB components as\n * written in the file, matching the host's `setStyle(…, SRGBColorSpace)`).\n * Set when every triangle of the object references the *same* base index;\n * multi-base objects cannot be expressed by a single color → undefined\n * (host falls back to the default material).\n */\n baseColor?: readonly [number, number, number]\n /**\n * Colorgroup vertex colors, one RGB triple per emitted vertex — the geometry\n * is *expanded* (each triangle owns 3 independent vertices, indices are\n * sequential) whenever a colorgroup is referenced, so per-triangle\n * p1/p2/p3 colors survive without shared-vertex conflicts. Length equals\n * `positions.length`.\n */\n vertexColors?: Float32Array\n}\n\n/** Structured 3MF parse result. */\nexport interface ThreemfArchive {\n /** The declared `<model unit>` mapped to a faijs UnitName. */\n unit: UnitName\n /** One object per build `<item>` (transform baked), or per `<resources>` object. */\n objects: ThreemfObject[]\n /** Every non-model archive entry (key → raw bytes) for downstream consumers. */\n extraEntries: Map<string, Uint8Array>\n}\n\n/** Detect triangle-level material attributes (fast-3mf port). */\nconst TRI_MATERIAL_ATTR_RE = /(?:^|\\s)(?:p1|p2|p3|pid)=\"/\n\n/**\n * Loose vertex re-parse: extracts x/y/z independently, tolerating attribute\n * reordering or newlines inside a vertex tag. Slow path — only used when the\n * strict regex scan reports a count mismatch (fast-3mf port).\n */\nfunction parseVerticesLoose(vertSec: string): Float32Array | null {\n const vRe = /<vertex\\s+([^>]*?)\\/?>/g\n const positions: number[] = []\n let vm: RegExpExecArray | null\n while ((vm = vRe.exec(vertSec)) !== null) {\n const a = vm[1]\n const x = /(?:^|\\s)x=\"(-?[\\d.eE+-]+)\"/.exec(a)?.[1]\n const y = /(?:^|\\s)y=\"(-?[\\d.eE+-]+)\"/.exec(a)?.[1]\n const z = /(?:^|\\s)z=\"(-?[\\d.eE+-]+)\"/.exec(a)?.[1]\n if (x === undefined || y === undefined || z === undefined) return null\n positions.push(+x, +y, +z)\n }\n return new Float32Array(positions)\n}\n\n/**\n * Loose triangle re-parse: extracts v1/v2/v3 (and pid/p1/p2/p3 when needed)\n * per attribute, tolerating attribute reordering (fast-3mf port). Slow path —\n * only used when the strict regex scan reports a count mismatch.\n */\nfunction parseTrianglesLoose(\n triSec: string,\n withProps: boolean,\n): { index: Uint32Array; props: TriMaterialProps[] | null } | null {\n const tFullRe = /<triangle\\s+([^>]*?)\\/?>/g\n const idx: number[] = []\n const props: TriMaterialProps[] = []\n let tm: RegExpExecArray | null\n while ((tm = tFullRe.exec(triSec)) !== null) {\n const a = tm[1]\n const v1 = /(?:^|\\s)v1=\"(\\d+)\"/.exec(a)?.[1]\n const v2 = /(?:^|\\s)v2=\"(\\d+)\"/.exec(a)?.[1]\n const v3 = /(?:^|\\s)v3=\"(\\d+)\"/.exec(a)?.[1]\n if (v1 === undefined || v2 === undefined || v3 === undefined) return null\n idx.push(+v1, +v2, +v3)\n if (withProps) {\n const p: TriMaterialProps = {}\n const pid = /(?:^|\\s)pid=\"([^\"]*)\"/.exec(a)?.[1]\n if (pid !== undefined) p.pid = pid\n const p1 = /(?:^|\\s)p1=\"([^\"]*)\"/.exec(a)?.[1]\n if (p1 !== undefined) p.p1 = +p1\n const p2 = /(?:^|\\s)p2=\"([^\"]*)\"/.exec(a)?.[1]\n if (p2 !== undefined) p.p2 = +p2\n const p3 = /(?:^|\\s)p3=\"([^\"]*)\"/.exec(a)?.[1]\n if (p3 !== undefined) p.p3 = +p3\n props.push(p)\n }\n }\n return { index: new Uint32Array(idx), props: withProps ? props : null }\n}\n\n/**\n * Stream-scan one model XML document for `<resources>` material libraries and\n * `<object>` entries, merging into the shared maps (caller keeps sub-models\n * first / root last so the root wins id collisions).\n *\n * Text-scanner (no DOM) — ported from the host's retired fast-3mf parser, so\n * very large model documents (Bambu exports reach ~140 MB of XML, where a full\n * DOM parse exhausts the heap) stay linear in memory. Attribute extraction\n * keeps fast-3mf's tolerance: attribute reordering / newline variance falls\n * back to a loose re-parse; namespace-prefixed attributes (`p:objectid`,\n * `p:transform`) match through substring.\n */\nfunction scanResources(\n xml: string,\n scale: number,\n basematerialsById: Map<string, { name?: string; displaycolor?: string }[]>,\n colorgroupsById: Map<string, Float32Array>,\n byObjectId: Map<number, ObjectMeshMeta>,\n): void {\n const resourcesStart = xml.indexOf('<resources>')\n if (resourcesStart < 0) return\n const resourcesEnd = xml.indexOf('</resources>', resourcesStart)\n const resBody = resourcesEnd >= 0\n ? xml.slice(resourcesStart, resourcesEnd)\n : xml.slice(resourcesStart)\n\n // basematerials: id + base list (name/displaycolor).\n const bmRe = /<basematerials\\s+([^>]*)>([\\s\\S]*?)<\\/basematerials>/g\n let m: RegExpExecArray | null\n while ((m = bmRe.exec(resBody)) !== null) {\n const id = /(?:^|\\s)id=\"([^\"]+)\"/.exec(m[1])?.[1]\n if (id === undefined) continue\n const bases: { name?: string; displaycolor?: string }[] = []\n const baseRe = /<base\\s+([^>]*?)\\/?>/g\n let bm2: RegExpExecArray | null\n while ((bm2 = baseRe.exec(m[2])) !== null) {\n bases.push({\n name: /(?:^|\\s)name=\"([^\"]*)\"/.exec(bm2[1])?.[1],\n displaycolor: /(?:^|\\s)displaycolor=\"([^\"]*)\"/.exec(bm2[1])?.[1],\n })\n }\n basematerialsById.set(id, bases)\n }\n\n // colorgroup: id + color list (hex → sRGB components).\n const cgRe = /<colorgroup\\s+([^>]*)>([\\s\\S]*?)<\\/colorgroup>/g\n while ((m = cgRe.exec(resBody)) !== null) {\n const id = /(?:^|\\s)id=\"([^\"]+)\"/.exec(m[1])?.[1]\n if (id === undefined) continue\n const colors: number[] = []\n const colorRe = /<color\\s+([^>]*?)\\/?>/g\n let cm: RegExpExecArray | null\n while ((cm = colorRe.exec(m[2])) !== null) {\n const hex = /(?:^|\\s)color=\"([^\"]*)\"/.exec(cm[1])?.[1]?.slice(0, 7) ?? '#000000'\n const rgb = hexToRgb(hex) ?? [0, 0, 0]\n colors.push(rgb[0], rgb[1], rgb[2])\n }\n colorgroupsById.set(id, new Float32Array(colors))\n }\n\n // objects — scanned across the whole document (not just `<resources>`) so\n // out-of-resources `<object>` placements still load (external-data tolerance).\n const objRe = /<object\\s+([^>]*)>([\\s\\S]*?)<\\/object>/g\n while ((m = objRe.exec(xml)) !== null) {\n const attrs = m[1]\n const body = m[2]\n const idRaw = /(?:^|\\s)id=\"([^\"]+)\"/.exec(attrs)?.[1]\n if (idRaw === undefined) continue\n const id = Number(idRaw)\n if (!Number.isInteger(id)) continue\n const name = /(?:^|\\s)name=\"([^\"]*)\"/.exec(attrs)?.[1]\n const objPid = /(?:^|\\s)pid=\"([^\"]*)\"/.exec(attrs)?.[1]\n const objPindexRaw = /(?:^|\\s)pindex=\"([^\"]*)\"/.exec(attrs)?.[1]\n const objPindex = objPindexRaw !== undefined && objPindexRaw !== '' ? Number(objPindexRaw) : undefined\n\n let meta: ObjectMeshMeta = { id, name, pid: objPid, pindex: objPindex }\n\n // mesh: vertices + triangles (fast-3mf port — strict regex scan with a\n // loose attribute-order fallback; missing sub-sections are tolerated and\n // the object still registers, matching the retired host behavior).\n const meshStart = body.indexOf('<mesh>')\n const meshEnd = body.indexOf('</mesh>')\n if (meshStart >= 0 && meshEnd > meshStart) {\n const meshBody = body.slice(meshStart, meshEnd)\n\n // vertices\n const vertStart = meshBody.indexOf('<vertices>')\n const vertEnd = meshBody.indexOf('</vertices>')\n if (vertStart >= 0 && vertEnd > vertStart) {\n const vertSec = meshBody.slice(vertStart, vertEnd)\n let vc = 0\n let p = 0\n while ((p = vertSec.indexOf('<vertex ', p)) !== -1) { vc++; p += 8 }\n const vRe = /x=\"(-?[\\d.eE+-]+)\"\\s+y=\"(-?[\\d.eE+-]+)\"\\s+z=\"(-?[\\d.eE+-]+)\"/g\n let positions = new Float32Array(vc * 3)\n let vm: RegExpExecArray | null\n let vi = 0\n while ((vm = vRe.exec(vertSec)) !== null) {\n positions[vi] = +vm[1] * scale\n positions[vi + 1] = +vm[2] * scale\n positions[vi + 2] = +vm[3] * scale\n vi += 3\n }\n // XML attributes are unordered (spec XSD) — if any vertex failed to\n // match (different attribute order / newline after tag), re-scan each\n // attribute independently instead of giving up.\n if (vc > 0 && vi !== vc * 3) {\n const loose = parseVerticesLoose(vertSec)\n if (!loose) {\n throw new Error(`[mesh/threemf] cannot parse <vertices> in object ${id}`)\n }\n positions = new Float32Array(loose.length)\n for (let i = 0; i < loose.length; i++) positions[i] = loose[i] * scale\n }\n meta = { ...meta, positions }\n }\n\n // triangles\n const triStart = meshBody.indexOf('<triangles>')\n const triEnd = meshBody.indexOf('</triangles>')\n if (triStart >= 0 && triEnd > triStart) {\n const triSec = meshBody.slice(triStart, triEnd)\n let tc = 0\n let p = 0\n while ((p = triSec.indexOf('<triangle ', p)) !== -1) { tc++; p += 10 }\n const idx = new Uint32Array(tc * 3)\n const hasMatAttrs = TRI_MATERIAL_ATTR_RE.test(triSec)\n // Object-level pid without per-triangle material attrs: synthesize\n // triangle properties so every triangle still routes through the\n // resource (object pindex default) — fast-3mf semantics.\n const needsProps = hasMatAttrs || objPid !== undefined\n const triProps: TriMaterialProps[] | undefined = needsProps ? [] : undefined\n const tRe = /v1=\"(\\d+)\"\\s+v2=\"(\\d+)\"\\s+v3=\"(\\d+)\"/g\n let tm: RegExpExecArray | null\n let ti = 0\n while ((tm = tRe.exec(triSec)) !== null) {\n idx[ti] = +tm[1]\n idx[ti + 1] = +tm[2]\n idx[ti + 2] = +tm[3]\n ti += 3\n }\n if (tc > 0 && ti !== tc * 3) {\n // Attribute order / newline variance → re-scan each attribute\n // independently (slow path, rare).\n const loose = parseTrianglesLoose(triSec, needsProps)\n if (!loose) {\n throw new Error(`[mesh/threemf] cannot parse <triangles> in object ${id}`)\n }\n idx.set(loose.index)\n if (loose.props) {\n triProps!.length = 0\n triProps!.push(...loose.props)\n }\n } else if (needsProps) {\n if (hasMatAttrs) {\n const tFullRe = /<triangle\\s+([^>]*?)\\/?>/g\n let tfm: RegExpExecArray | null\n while ((tfm = tFullRe.exec(triSec)) !== null) {\n const a = tfm[1]\n const tv = /v1=\"(\\d+)\"\\s+v2=\"(\\d+)\"\\s+v3=\"(\\d+)\"/.exec(a)\n if (!tv) continue\n const prop: TriMaterialProps = {}\n const p1 = /\\bp1=\"([^\"]*)\"/.exec(a)?.[1]\n if (p1 !== undefined) prop.p1 = +p1\n const p2 = /\\bp2=\"([^\"]*)\"/.exec(a)?.[1]\n if (p2 !== undefined) prop.p2 = +p2\n const p3 = /\\bp3=\"([^\"]*)\"/.exec(a)?.[1]\n if (p3 !== undefined) prop.p3 = +p3\n const pidm = /\\bpid=\"([^\"]*)\"/.exec(a)?.[1]\n if (pidm !== undefined) prop.pid = pidm\n triProps!.push(prop)\n }\n } else {\n // Object-level pid only → synthesized props (no per-triangle\n // material attrs) so materializeMesh's per-triangle lookups fall\n // through to the object-level defaults.\n for (let i = 0; i < tc; i++) triProps!.push({})\n }\n }\n meta = { ...meta, indices: idx, triProps }\n }\n }\n\n // `<components>` children — Bambu builds plates/assemblies this way.\n // A pure component container has no mesh; it still registers in byObjectId\n // so build items referencing it expand recursively (component instances).\n const compStart = body.indexOf('<components>')\n if (compStart >= 0) {\n const compEnd = body.indexOf('</components>', compStart)\n const compSec = compEnd >= 0\n ? body.slice(compStart + '<components>'.length, compEnd)\n : body.slice(compStart + '<components>'.length)\n const comps: ObjectComponent[] = []\n const compRe = /<component\\s+([^>]*?)\\/?>/g\n let cpm: RegExpExecArray | null\n while ((cpm = compRe.exec(compSec)) !== null) {\n const oid = Number(/objectid=\"([^\"]+)\"/.exec(cpm[1])?.[1])\n if (!Number.isInteger(oid)) continue\n comps.push({\n objectId: oid,\n transform: parseTransformAttr(/\\btransform=\"([^\"]*)\"/.exec(cpm[1])?.[1] ?? null),\n })\n }\n if (comps.length > 0) meta = { ...meta, components: comps }\n }\n\n if (!meta.positions && !meta.components) continue\n byObjectId.set(id, meta)\n }\n}\n\n/**\n * Parse the 3MF model XML documents (root + sub-models) into archive objects.\n *\n * Bambu exports are multi-file: `3D/3dmodel.model` holds only thin `<object>`\n * skeletons (component containers) plus the `<build>`, while the actual mesh\n * geometry lives in per-object files `3D/Objects/object_*.model` referenced\n * through `p:path` (production extension) — which we ignore in favor of\n * merging every model document's `<resources>` by object id (mirrors the\n * host's fast-3mf collection order: sub-models first, root model last, root\n * wins on id collisions).\n *\n * `unit` is read from the ROOT model document (the file the build items\n * belong to); all documents share the same declared unit in practice.\n */\nfunction parseModelXml(docTexts: string[]): {\n unitName: UnitName\n objects: ThreemfObject[]\n} {\n // Last document = root model (caller appends it last).\n const rootDoc = docTexts[docTexts.length - 1]\n const unitMatch = /<model\\b[^>]*\\bunit=\"([^\"]+)\"/.exec(rootDoc)\n const unit = unitMatch ? unitMatch[1] : 'millimeter'\n const unitName = threemfUnitToFaijs(unit)\n if (unitName === null) {\n throw new Error(`[mesh/threemf] unsupported <model unit>: ${JSON.stringify(unit)}`)\n }\n const scale = UNIT_SCALE[unitName]\n\n // resources → material libraries (basematerials / colorgroup) + objects,\n // merged across every model document (sub-models first, root last).\n const basematerialsById = new Map<string, { name?: string; displaycolor?: string }[]>()\n const colorgroupsById = new Map<string, Float32Array>()\n const byObjectId = new Map<number, ObjectMeshMeta>()\n\n for (const text of docTexts) {\n scanResources(text, scale, basematerialsById, colorgroupsById, byObjectId)\n }\n // (scanResources above handles basematerials / colorgroup / objects)\n // (mesh/components + registration handled by scanResources)\n\n /**\n * Materialize object instances: a mesh object yields ONE ThreemfObject with\n * the transform baked in and base/vertex colors resolved; a component\n * container recursively expands each child (composing transforms, child\n * applied first), one ThreemfObject per leaf mesh instance — mirroring the\n * host's clone-and-apply semantics without shared geometry. `path` guards\n * reference cycles (a self-referencing component chain terminates).\n */\n function materialize(\n src: ObjectMeshMeta,\n mat: readonly number[] | undefined,\n path: Set<number>,\n ): ThreemfObject[] {\n if (src.positions && src.indices) {\n return [materializeMesh(src, mat)]\n }\n if (src.components && src.components.length > 0) {\n const out: ThreemfObject[] = []\n for (const comp of src.components) {\n if (path.has(comp.objectId)) continue\n const ref = byObjectId.get(comp.objectId)\n if (!ref) continue\n const next = comp.transform\n ? (mat ? composeTransform(mat, comp.transform) : comp.transform)\n : mat\n const nextPath = new Set(path)\n nextPath.add(comp.objectId)\n out.push(...materialize(ref, next, nextPath))\n }\n return out\n }\n return []\n }\n\n /**\n * Materialize a single mesh object instance: bake the optional build\n * transform and resolve base/vertex colors. `vertexColors` expands the\n * geometry (each triangle owns 3 independent vertices) so per-triangle\n * p1/p2/p3 survive; `baseColor` keeps the compact form and applies only\n * when every triangle references the same base index (multi-base objects\n * fall back to the default material, matching the host contract).\n */\n function materializeMesh(src: ObjectMeshMeta, mat?: readonly number[]): ThreemfObject {\n const positions = src.positions!\n const indices = src.indices!\n let pid: string | undefined\n if (src.triProps) {\n for (const p of src.triProps) {\n const eff = p.pid ?? src.pid\n if (eff !== undefined) { pid = eff; break }\n }\n } else {\n pid = src.pid\n }\n\n const cg = pid !== undefined ? colorgroupsById.get(pid) : undefined\n if (cg) {\n const triCount = indices.length / 3\n const outPos = new Float32Array(triCount * 9)\n const outCol = new Float32Array(triCount * 9)\n const outIdx = new Uint32Array(triCount * 3)\n const objectPindex = src.pindex\n for (let t = 0; t < triCount; t++) {\n const v1 = indices[t * 3]\n const v2 = indices[t * 3 + 1]\n const v3 = indices[t * 3 + 2]\n const tp = src.triProps ? src.triProps[t] : undefined\n const p1 = tp?.p1 ?? objectPindex ?? 0\n const p2 = tp?.p2 ?? p1\n const p3 = tp?.p3 ?? p1\n // vertex-contiguous layout (x1 y1 z1 x2 y2 z2 x3 y3 z3 / R1 G1 B1 …):\n // each emitted vertex owns 3 consecutive components.\n const vs = [v1, v2, v3]\n const ps = [p1, p2, p3]\n for (let k = 0; k < 3; k++) {\n const sv = vs[k]\n const sp = ps[k]\n outPos[t * 9 + k * 3] = positions[sv * 3]\n outPos[t * 9 + k * 3 + 1] = positions[sv * 3 + 1]\n outPos[t * 9 + k * 3 + 2] = positions[sv * 3 + 2]\n outCol[t * 9 + k * 3] = cg[sp * 3]\n outCol[t * 9 + k * 3 + 1] = cg[sp * 3 + 1]\n outCol[t * 9 + k * 3 + 2] = cg[sp * 3 + 2]\n }\n outIdx[t * 3] = t * 3\n outIdx[t * 3 + 1] = t * 3 + 1\n outIdx[t * 3 + 2] = t * 3 + 2\n }\n return {\n id: src.id,\n name: src.name,\n positions: mat ? bakeTransform(outPos, mat) : outPos,\n indices: outIdx,\n vertexColors: outCol,\n }\n }\n\n const bases = pid !== undefined ? basematerialsById.get(pid) : undefined\n if (bases && bases.length > 0) {\n const idx0 = src.triProps ? (src.triProps[0]?.p1 ?? src.pindex ?? 0) : (src.pindex ?? 0)\n let same = true\n if (src.triProps) {\n for (let t = 1; t < src.triProps.length; t++) {\n if ((src.triProps[t]?.p1 ?? src.pindex ?? 0) !== idx0) { same = false; break }\n }\n }\n const base = bases[idx0]\n const baseColor = same && base?.displaycolor\n ? hexToRgb(base.displaycolor.slice(0, 7))\n : undefined\n return {\n id: src.id,\n name: src.name,\n positions: mat ? bakeTransform(positions, mat) : positions,\n indices,\n baseColor: baseColor ?? undefined,\n }\n }\n\n return {\n id: src.id,\n name: src.name,\n positions: mat ? bakeTransform(positions, mat) : positions,\n indices,\n }\n }\n\n // build → item → per-instance transforms baked to world space.\n // `<build>` lives in the ROOT model document only.\n const buildMatch = /<build\\b[^>]*>/.exec(rootDoc)\n let buildSec = ''\n if (buildMatch) {\n const buildStart = buildMatch.index\n const buildEnd = rootDoc.indexOf('</build>', buildStart)\n buildSec = buildEnd >= 0 ? rootDoc.slice(buildStart, buildEnd) : rootDoc.slice(buildStart)\n }\n const itemRe = /<item\\b[^>]*>/g\n const out: ThreemfObject[] = []\n let itemCount = 0\n let im: RegExpExecArray | null\n while ((im = itemRe.exec(buildSec)) !== null) {\n itemCount++\n const attrs = im[0]\n const objId = Number(/(?:^|\\s)objectid=\"([^\"]+)\"/.exec(attrs)?.[1])\n const src = byObjectId.get(objId)\n if (!src) continue\n // ST_Matrix3D: 4×3 (12) or 4×4 (16) whose trailing row is \"0 0 0 1\";\n // malformed transforms are IGNORED (identity) — never bake NaN into\n // geometry (mirrors the host's fast-3mf tolerance contract).\n const tokens = parseTransformAttr(/\\btransform=\"([^\"]*)\"/.exec(attrs)?.[1] ?? null)\n out.push(...materialize(src, tokens ?? undefined, new Set([objId])))\n }\n if (itemCount === 0) {\n // No build items: emit every `<resources>` object directly (¶ the empty\n // `<build>` contract — NOT a fallback; see plan §8 decision 8).\n for (const src of byObjectId.values()) {\n out.push(...materialize(src, undefined, new Set([src.id])))\n }\n }\n\n if (out.length === 0) {\n throw new Error('[mesh/threemf] no buildable geometry found in 3dmodel.model')\n }\n return { unitName, objects: out }\n}\n\n/**\n * Parse 3MF bytes into a structured archive.\n *\n * Supports Bambu's multi-file layout: `3D/3dmodel.model` (root, holds the\n * `<build>` and component-container skeletons) plus per-object sub-models\n * `3D/Objects/*.model` whose `<resources>` are merged by object id\n * (sub-models first, root last — root wins collisions).\n *\n * @param buffer - the raw .3mf (ZIP) bytes.\n * @returns an `ThreemfArchive` with mm-base per-instance objects, the declared\n * source unit, and every non-model archive entry.\n * @throws when the buffer is not a 3MF/ZIP archive or the unit is invalid.\n */\nexport async function parseThreemf(buffer: ArrayBuffer): Promise<ThreemfArchive> {\n let entries: Map<string, Uint8Array>\n try {\n entries = readZipEntries(new Uint8Array(buffer))\n } catch {\n throw new Error('[mesh/threemf] not a valid 3MF ZIP archive')\n }\n const rootKey = [...entries.keys()].find((k) => k.toLowerCase() === '3d/3dmodel.model')\n if (!rootKey) {\n throw new Error('[mesh/threemf] missing 3D/3dmodel.model entry')\n }\n\n // Sub-model documents first (fast-3mf collection order), root model last.\n const docKeys: string[] = []\n for (const k of entries.keys()) {\n if (k.toLowerCase() === rootKey.toLowerCase()) continue\n if (/^3d\\/.+\\/[^/]+\\.model$/i.test(k)) docKeys.push(k)\n }\n docKeys.push(rootKey)\n const docTexts = docKeys.map((k) => new TextDecoder().decode(entries.get(k)!))\n const parsed = parseModelXml(docTexts)\n\n // `extraEntries` = everything that is NOT a model document — Bambu's\n // `Metadata/model_settings.config`, `Metadata/project_settings.config`,\n // `Metadata/thumbnail.png`, etc.\n const extraEntries = new Map<string, Uint8Array>()\n for (const [k, v] of entries) {\n if (/\\.model$/i.test(k)) continue\n extraEntries.set(k, v)\n }\n\n return { unit: parsed.unitName, objects: parsed.objects, extraEntries }\n}"]}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * threemf-view — Bambu view-mode deltas (moved up from 3d_editor's
3
+ * `viewTransforms.ts`, plan §8 decision 2).
4
+ *
5
+ * Bambu stores per-object transforms for three view modes:
6
+ * print — the build `<item transform>` (pose on the plate).
7
+ * assembly — an extra `<assemble_item transform>` + offset (assembled pose).
8
+ * import — a per-part 4×4 `matrix` in `model_settings.config` (import pose).
9
+ *
10
+ * To carry a mesh that already has M_build baked in (from `parseThreemf`) to the
11
+ * target pose we need
12
+ * delta = M_target × M_build⁻¹ (component-level transforms cancel).
13
+ *
14
+ * Matrices are `THREE.Matrix4` — core already depends on three as a peer dep
15
+ * (io.ts imports THREE.BufferAttribute, brep imports occt-wasm) and the host
16
+ * resolves it. This module is only reachable from the web display path
17
+ * (`@faicad/faijs/mesh/threemf-view`); the weapp bundle never imports it.
18
+ */
19
+ import * as THREE from 'three';
20
+ import type { Bambu3mfMetadata } from './threemf-bambu.js';
21
+ /** Bambu view layout: the pose a part carries on the plate / assembled / import. */
22
+ export type ViewMode = 'print' | 'assembly' | 'import';
23
+ /** Narrowed part identity the view layer keys on (host passes its PartInfo). */
24
+ export interface ViewPartInfo {
25
+ objectId?: string;
26
+ scopedId?: string;
27
+ }
28
+ type ViewMetadata = Pick<Bambu3mfMetadata, 'buildItems' | 'assembleTransforms' | 'importTransforms'>;
29
+ /** Convert a 12-value 4×3 column-major transform (3MF §3.5.1) to THREE.Matrix4.
30
+ *
31
+ * Per 3MF spec (Section 3.5.1) the 12 values are column-major:
32
+ * Col 0: [v0,v1,v2], Col 1: [v3,v4,v5], Col 2: [v6,v7,v8],
33
+ * Col 3: [v9,v10,v11] (translation).
34
+ * THREE.Matrix4.set() takes row-major args, so we transpose.
35
+ *
36
+ * @param v - the 12 column-major transform values (3MF §3.5.1).
37
+ * @returns the equivalent column-major 4×4 THREE.Matrix4.
38
+ */
39
+ export declare function mat4From12Values(v: number[]): THREE.Matrix4;
40
+ /** Convert a 16-value 4×4 row-major array to THREE.Matrix4.
41
+ *
42
+ * @param v - the 16 row-major matrix values.
43
+ * @returns the equivalent THREE.Matrix4.
44
+ */
45
+ export declare function mat4From16Values(v: number[]): THREE.Matrix4;
46
+ /** Create a translation-only matrix.
47
+ *
48
+ * @param t - the translation [x, y, z].
49
+ * @returns the 4×4 translation matrix.
50
+ */
51
+ export declare function makeTranslationMatrix(t: [number, number, number]): THREE.Matrix4;
52
+ /**
53
+ * Compute the delta matrix to transform a mesh from print-view to the target
54
+ * view: delta = M_target × M_build⁻¹. Returns null when the target view has no
55
+ * data for this object (the caller leaves the mesh as-is).
56
+ *
57
+ * @param viewMode - the target view ('print' | 'assembly' | 'import').
58
+ * @param bambuMeta - Bambu build/assemble/import transform lookups.
59
+ * @param partInfo - the part's objectId/scopedId used to key into `bambuMeta`.
60
+ * @returns the delta matrix, or null when the target view has no data for the part.
61
+ */
62
+ export declare function computeViewDelta(viewMode: ViewMode, bambuMeta: ViewMetadata, partInfo: ViewPartInfo): THREE.Matrix4 | null;
63
+ /** Whether a view mode is available for a given bambu metadata object.
64
+ *
65
+ * @param viewMode - the target view ('print' | 'assembly' | 'import').
66
+ * @param bambuMeta - Bambu assemble/import transform lookups.
67
+ * @returns true when `viewMode` has data available (print always does).
68
+ */
69
+ export declare function hasViewData(viewMode: ViewMode, bambuMeta: Pick<Bambu3mfMetadata, 'assembleTransforms' | 'importTransforms'>): boolean;
70
+ export {};
71
+ //# sourceMappingURL=threemf-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threemf-view.d.ts","sourceRoot":"","sources":["../../src/mesh/threemf-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEtD,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,KAAK,YAAY,GAAG,IAAI,CACtB,gBAAgB,EAChB,YAAY,GAAG,oBAAoB,GAAG,kBAAkB,CACzD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAO3D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAO3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAEhF;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,YAAY,GACrB,KAAK,CAAC,OAAO,GAAG,IAAI,CAyBtB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,GAC3E,OAAO,CAKT"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * threemf-view — Bambu view-mode deltas (moved up from 3d_editor's
3
+ * `viewTransforms.ts`, plan §8 decision 2).
4
+ *
5
+ * Bambu stores per-object transforms for three view modes:
6
+ * print — the build `<item transform>` (pose on the plate).
7
+ * assembly — an extra `<assemble_item transform>` + offset (assembled pose).
8
+ * import — a per-part 4×4 `matrix` in `model_settings.config` (import pose).
9
+ *
10
+ * To carry a mesh that already has M_build baked in (from `parseThreemf`) to the
11
+ * target pose we need
12
+ * delta = M_target × M_build⁻¹ (component-level transforms cancel).
13
+ *
14
+ * Matrices are `THREE.Matrix4` — core already depends on three as a peer dep
15
+ * (io.ts imports THREE.BufferAttribute, brep imports occt-wasm) and the host
16
+ * resolves it. This module is only reachable from the web display path
17
+ * (`@faicad/faijs/mesh/threemf-view`); the weapp bundle never imports it.
18
+ */
19
+ import * as THREE from 'three';
20
+ /** Convert a 12-value 4×3 column-major transform (3MF §3.5.1) to THREE.Matrix4.
21
+ *
22
+ * Per 3MF spec (Section 3.5.1) the 12 values are column-major:
23
+ * Col 0: [v0,v1,v2], Col 1: [v3,v4,v5], Col 2: [v6,v7,v8],
24
+ * Col 3: [v9,v10,v11] (translation).
25
+ * THREE.Matrix4.set() takes row-major args, so we transpose.
26
+ *
27
+ * @param v - the 12 column-major transform values (3MF §3.5.1).
28
+ * @returns the equivalent column-major 4×4 THREE.Matrix4.
29
+ */
30
+ export function mat4From12Values(v) {
31
+ return new THREE.Matrix4().set(v[0], v[3], v[6], v[9], v[1], v[4], v[7], v[10], v[2], v[5], v[8], v[11], 0, 0, 0, 1);
32
+ }
33
+ /** Convert a 16-value 4×4 row-major array to THREE.Matrix4.
34
+ *
35
+ * @param v - the 16 row-major matrix values.
36
+ * @returns the equivalent THREE.Matrix4.
37
+ */
38
+ export function mat4From16Values(v) {
39
+ return new THREE.Matrix4().set(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]);
40
+ }
41
+ /** Create a translation-only matrix.
42
+ *
43
+ * @param t - the translation [x, y, z].
44
+ * @returns the 4×4 translation matrix.
45
+ */
46
+ export function makeTranslationMatrix(t) {
47
+ return new THREE.Matrix4().makeTranslation(t[0], t[1], t[2]);
48
+ }
49
+ /**
50
+ * Compute the delta matrix to transform a mesh from print-view to the target
51
+ * view: delta = M_target × M_build⁻¹. Returns null when the target view has no
52
+ * data for this object (the caller leaves the mesh as-is).
53
+ *
54
+ * @param viewMode - the target view ('print' | 'assembly' | 'import').
55
+ * @param bambuMeta - Bambu build/assemble/import transform lookups.
56
+ * @param partInfo - the part's objectId/scopedId used to key into `bambuMeta`.
57
+ * @returns the delta matrix, or null when the target view has no data for the part.
58
+ */
59
+ export function computeViewDelta(viewMode, bambuMeta, partInfo) {
60
+ const objectId = partInfo.objectId;
61
+ if (!objectId)
62
+ return null;
63
+ const buildItem = bambuMeta.buildItems?.find(b => b.objectId === objectId);
64
+ if (!buildItem?.transform)
65
+ return null;
66
+ const buildMatrix = mat4From12Values(buildItem.transform);
67
+ if (viewMode === 'assembly') {
68
+ const assembleItem = bambuMeta.assembleTransforms?.get(objectId);
69
+ if (!assembleItem)
70
+ return null;
71
+ const assembleMatrix = mat4From12Values(assembleItem.transform);
72
+ return assembleMatrix.multiply(buildMatrix.clone().invert());
73
+ }
74
+ if (viewMode === 'import') {
75
+ const scopedId = partInfo.scopedId ?? '0';
76
+ const importItem = bambuMeta.importTransforms?.get(`${objectId}:${scopedId}`);
77
+ if (!importItem)
78
+ return null;
79
+ const importMatrix = mat4From16Values(importItem.matrix);
80
+ importMatrix.multiply(makeTranslationMatrix(importItem.sourceOffset));
81
+ return importMatrix.multiply(buildMatrix.clone().invert());
82
+ }
83
+ return null;
84
+ }
85
+ /** Whether a view mode is available for a given bambu metadata object.
86
+ *
87
+ * @param viewMode - the target view ('print' | 'assembly' | 'import').
88
+ * @param bambuMeta - Bambu assemble/import transform lookups.
89
+ * @returns true when `viewMode` has data available (print always does).
90
+ */
91
+ export function hasViewData(viewMode, bambuMeta) {
92
+ if (viewMode === 'print')
93
+ return true;
94
+ if (viewMode === 'assembly')
95
+ return (bambuMeta.assembleTransforms?.size ?? 0) > 0;
96
+ if (viewMode === 'import')
97
+ return (bambuMeta.importTransforms?.size ?? 0) > 0;
98
+ return false;
99
+ }
100
+ //# sourceMappingURL=threemf-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threemf-view.js","sourceRoot":"","sources":["../../src/mesh/threemf-view.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * threemf-view — Bambu view-mode deltas (moved up from 3d_editor's\n * `viewTransforms.ts`, plan §8 decision 2).\n *\n * Bambu stores per-object transforms for three view modes:\n * print — the build `<item transform>` (pose on the plate).\n * assembly — an extra `<assemble_item transform>` + offset (assembled pose).\n * import — a per-part 4×4 `matrix` in `model_settings.config` (import pose).\n *\n * To carry a mesh that already has M_build baked in (from `parseThreemf`) to the\n * target pose we need\n * delta = M_target × M_build⁻¹ (component-level transforms cancel).\n *\n * Matrices are `THREE.Matrix4` — core already depends on three as a peer dep\n * (io.ts imports THREE.BufferAttribute, brep imports occt-wasm) and the host\n * resolves it. This module is only reachable from the web display path\n * (`@faicad/faijs/mesh/threemf-view`); the weapp bundle never imports it.\n */\nimport * as THREE from 'three'\nimport type { Bambu3mfMetadata } from './threemf-bambu'\n\n/** Bambu view layout: the pose a part carries on the plate / assembled / import. */\nexport type ViewMode = 'print' | 'assembly' | 'import'\n\n/** Narrowed part identity the view layer keys on (host passes its PartInfo). */\nexport interface ViewPartInfo {\n objectId?: string\n scopedId?: string\n}\n\ntype ViewMetadata = Pick<\n Bambu3mfMetadata,\n 'buildItems' | 'assembleTransforms' | 'importTransforms'\n>\n\n/** Convert a 12-value 4×3 column-major transform (3MF §3.5.1) to THREE.Matrix4.\n *\n * Per 3MF spec (Section 3.5.1) the 12 values are column-major:\n * Col 0: [v0,v1,v2], Col 1: [v3,v4,v5], Col 2: [v6,v7,v8],\n * Col 3: [v9,v10,v11] (translation).\n * THREE.Matrix4.set() takes row-major args, so we transpose.\n *\n * @param v - the 12 column-major transform values (3MF §3.5.1).\n * @returns the equivalent column-major 4×4 THREE.Matrix4.\n */\nexport function mat4From12Values(v: number[]): THREE.Matrix4 {\n return new THREE.Matrix4().set(\n v[0], v[3], v[6], v[9],\n v[1], v[4], v[7], v[10],\n v[2], v[5], v[8], v[11],\n 0, 0, 0, 1,\n )\n}\n\n/** Convert a 16-value 4×4 row-major array to THREE.Matrix4.\n *\n * @param v - the 16 row-major matrix values.\n * @returns the equivalent THREE.Matrix4.\n */\nexport function mat4From16Values(v: number[]): THREE.Matrix4 {\n return new THREE.Matrix4().set(\n v[0], v[1], v[2], v[3],\n v[4], v[5], v[6], v[7],\n v[8], v[9], v[10], v[11],\n v[12], v[13], v[14], v[15],\n )\n}\n\n/** Create a translation-only matrix.\n *\n * @param t - the translation [x, y, z].\n * @returns the 4×4 translation matrix.\n */\nexport function makeTranslationMatrix(t: [number, number, number]): THREE.Matrix4 {\n return new THREE.Matrix4().makeTranslation(t[0], t[1], t[2])\n}\n\n/**\n * Compute the delta matrix to transform a mesh from print-view to the target\n * view: delta = M_target × M_build⁻¹. Returns null when the target view has no\n * data for this object (the caller leaves the mesh as-is).\n *\n * @param viewMode - the target view ('print' | 'assembly' | 'import').\n * @param bambuMeta - Bambu build/assemble/import transform lookups.\n * @param partInfo - the part's objectId/scopedId used to key into `bambuMeta`.\n * @returns the delta matrix, or null when the target view has no data for the part.\n */\nexport function computeViewDelta(\n viewMode: ViewMode,\n bambuMeta: ViewMetadata,\n partInfo: ViewPartInfo,\n): THREE.Matrix4 | null {\n const objectId = partInfo.objectId\n if (!objectId) return null\n\n const buildItem = bambuMeta.buildItems?.find(b => b.objectId === objectId)\n if (!buildItem?.transform) return null\n const buildMatrix = mat4From12Values(buildItem.transform)\n\n if (viewMode === 'assembly') {\n const assembleItem = bambuMeta.assembleTransforms?.get(objectId)\n if (!assembleItem) return null\n const assembleMatrix = mat4From12Values(assembleItem.transform)\n return assembleMatrix.multiply(buildMatrix.clone().invert())\n }\n\n if (viewMode === 'import') {\n const scopedId = partInfo.scopedId ?? '0'\n const importItem = bambuMeta.importTransforms?.get(`${objectId}:${scopedId}`)\n if (!importItem) return null\n const importMatrix = mat4From16Values(importItem.matrix)\n importMatrix.multiply(makeTranslationMatrix(importItem.sourceOffset))\n return importMatrix.multiply(buildMatrix.clone().invert())\n }\n\n return null\n}\n\n/** Whether a view mode is available for a given bambu metadata object.\n *\n * @param viewMode - the target view ('print' | 'assembly' | 'import').\n * @param bambuMeta - Bambu assemble/import transform lookups.\n * @returns true when `viewMode` has data available (print always does).\n */\nexport function hasViewData(\n viewMode: ViewMode,\n bambuMeta: Pick<Bambu3mfMetadata, 'assembleTransforms' | 'importTransforms'>,\n): boolean {\n if (viewMode === 'print') return true\n if (viewMode === 'assembly') return (bambuMeta.assembleTransforms?.size ?? 0) > 0\n if (viewMode === 'import') return (bambuMeta.importTransforms?.size ?? 0) > 0\n return false\n}"]}
@@ -17,7 +17,7 @@
17
17
  * — (view) 单视图方向(默认 front)
18
18
  * --sheet <front,top,right,iso> — (view) 多视图图纸(projectSheet;与 --view 互斥)
19
19
  */
20
- import type { StdlibNamespace } from '../runtime-state.js';
20
+ import type { LibNamespace } from '../runtime-state.js';
21
21
  import type { ExecutionMode } from '../cad-runtime/ports.js';
22
22
  import type { ViewSpec } from '../api/view/view-camera.js';
23
23
  /** Options accepted by the `check` command. */
@@ -26,6 +26,19 @@ export interface CliCheckOptions {
26
26
  assetsDir?: string;
27
27
  /** Extra fonts directory used by the node ports. */
28
28
  fontsDir?: string;
29
+ /**
30
+ * Extra cad-namespace entries the host merges at run time (`cad.sketch`
31
+ * from @faicad/faijs-sketch).
32
+ *
33
+ * I-group (2026-10-03): the unknown-op guard compares the script's callees
34
+ * against `symbolTableNames()`, which knows only the STATIC table. A host
35
+ * that merges those libraries and passes them to {@link cliRun} therefore
36
+ * got `unknown op: cad.sketch is not in the cad namespace` from every check
37
+ * of a perfectly runnable script — `rebased-sweep.ts` reported it for every
38
+ * product in a corpus sweep. Check and run must see the same namespace, so
39
+ * the caller states its merged entries here.
40
+ */
41
+ libs?: Record<string, unknown>;
29
42
  }
30
43
  /** Options accepted by the `run` command. */
31
44
  export interface CliRunOptions {
@@ -37,13 +50,19 @@ export interface CliRunOptions {
37
50
  fontsDir?: string;
38
51
  /** Default font path used by the node ports. */
39
52
  defaultFontPath?: string;
40
- /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createInternalStdlib; core does not assemble it by default). */
41
- libs?: Record<string, StdlibNamespace>;
53
+ /** Host-injected library namespace (includes cad — the CLI entry faijs-cli.ts passes createApiNamespace; core does not assemble it by default). */
54
+ libs?: Record<string, LibNamespace>;
42
55
  /**
43
56
  * 项目根(多文件 §4.5):相对 import 的解析基准,moduleKey = 相对它的路径。
44
57
  * 缺省由入口文件向上找最近的 package.json。
45
58
  */
46
59
  projectRoot?: string;
60
+ /**
61
+ * 连带导出隐藏终端(默认 false)。keep / keepHidden 保留的源几何默认不产出
62
+ * (隐藏的语义即"保留但不出现在产物里");置 true 恢复旧行为,把 hidden 终端
63
+ * 也一并写盘(多为诊断用途)。
64
+ */
65
+ includeHidden?: boolean;
47
66
  }
48
67
  /** Result of the `check` (dry-run validation) command. */
49
68
  export interface CliCheckResult {
@@ -88,7 +107,7 @@ export interface CliViewOptions {
88
107
  /** Default font path used by the node ports. */
89
108
  defaultFontPath?: string;
90
109
  /** Host-injected library namespace (includes cad). */
91
- libs?: Record<string, StdlibNamespace>;
110
+ libs?: Record<string, LibNamespace>;
92
111
  /** Project root for relative .fai.js imports. */
93
112
  projectRoot?: string;
94
113
  /** Shape variable name to project; default resolves terminals like `run`. */
@@ -126,6 +145,24 @@ export declare function cliCheck(filePath: string, _opts?: CliCheckOptions): Cli
126
145
  * @returns the run result describing success or failure
127
146
  */
128
147
  export declare function cliRun(filePath: string, outPath: string, opts?: CliRunOptions): Promise<CliRunResult>;
148
+ /**
149
+ * 选出「可导出」的终端:默认剔除 hidden。
150
+ *
151
+ * 隐藏终端 = 「保留但不产出」(`keep` / `keepHidden` 语义,R5)。导出层必须默认跳过,
152
+ * 否则布尔运算保留的源几何会对每个 hidden 终端各写一个 `out.step_<i>_<name>` 产物,
153
+ * 让一个逻辑形状看起来像 N 个(FCStd port 的 `solids 1vsN` 失配即由此而来)。
154
+ * 需要旧行为(连同隐藏源一起写出,多用于诊断)时显式传 `includeHidden=true`。
155
+ *
156
+ * @param terminals - 存活终端集合(含 `hidden` 标记)
157
+ * @param includeHidden - 是否连同隐藏终端一起导出,缺省 false
158
+ * @returns `exportable`(可导出终端)与 `hiddenCount`(被剔除的隐藏终端数)
159
+ */
160
+ export declare function selectExportableTerminals<T extends {
161
+ hidden?: boolean;
162
+ }>(terminals: readonly T[], includeHidden?: boolean): {
163
+ exportable: T[];
164
+ hiddenCount: number;
165
+ };
129
166
  /**
130
167
  * Execute the `view` command: execute a .fai.js file and write view SVG(s).
131
168
  *
@@ -156,13 +193,14 @@ export declare function parseArgs(argv: string[]): {
156
193
  view?: string;
157
194
  sheet?: string;
158
195
  part?: string;
196
+ includeHidden?: boolean;
159
197
  };
160
198
  /**
161
199
  * CLI main entry point (called by scripts/faijs-cli.ts).
162
200
  *
163
201
  * @param argv - the raw process argument list
164
- * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createInternalStdlib; core does not assemble it by default)
202
+ * @param libs - host-injected library namespace (includes cad — faijs-cli.ts passes createApiNamespace; core does not assemble it by default)
165
203
  * @returns the process exit code (0 on success, non-zero on failure)
166
204
  */
167
- export declare function cliMain(argv: string[], libs?: Record<string, StdlibNamespace>): Promise<number>;
205
+ export declare function cliMain(argv: string[], libs?: Record<string, LibNamespace>): Promise<number>;
168
206
  //# sourceMappingURL=cli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node-host/cli.ts"],"names":[],"mappings":"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"}