@faicad/faijs 0.22.2 → 0.29.5

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 (488) 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/appearance.d.ts +138 -0
  7. package/dist/api/appearance.d.ts.map +1 -0
  8. package/dist/api/appearance.js +230 -0
  9. package/dist/api/appearance.js.map +1 -0
  10. package/dist/api/assert.d.ts +2 -2
  11. package/dist/api/assert.js +8 -8
  12. package/dist/api/assert.js.map +1 -1
  13. package/dist/api/asset.d.ts +1 -1
  14. package/dist/api/asset.js +2 -2
  15. package/dist/api/asset.js.map +1 -1
  16. package/dist/api/boolean.d.ts +1 -1
  17. package/dist/api/boolean.d.ts.map +1 -1
  18. package/dist/api/boolean.js +128 -16
  19. package/dist/api/boolean.js.map +1 -1
  20. package/dist/api/cadquery-selectors/borrow-bridge.d.ts +14 -0
  21. package/dist/api/cadquery-selectors/borrow-bridge.d.ts.map +1 -0
  22. package/dist/api/cadquery-selectors/borrow-bridge.js +52 -0
  23. package/dist/api/cadquery-selectors/borrow-bridge.js.map +1 -0
  24. package/dist/api/cadquery-selectors/edge.d.ts +40 -0
  25. package/dist/api/cadquery-selectors/edge.d.ts.map +1 -0
  26. package/dist/api/cadquery-selectors/edge.js +70 -0
  27. package/dist/api/cadquery-selectors/edge.js.map +1 -0
  28. package/dist/api/cadquery-selectors/entity.d.ts +121 -0
  29. package/dist/api/cadquery-selectors/entity.d.ts.map +1 -0
  30. package/dist/api/cadquery-selectors/entity.js +167 -0
  31. package/dist/api/cadquery-selectors/entity.js.map +1 -0
  32. package/dist/api/cadquery-selectors/face.d.ts +33 -0
  33. package/dist/api/cadquery-selectors/face.d.ts.map +1 -0
  34. package/dist/api/cadquery-selectors/face.js +353 -0
  35. package/dist/api/cadquery-selectors/face.js.map +1 -0
  36. package/dist/api/cadquery-selectors/grammar.d.ts +50 -0
  37. package/dist/api/cadquery-selectors/grammar.d.ts.map +1 -0
  38. package/dist/api/cadquery-selectors/grammar.js +345 -0
  39. package/dist/api/cadquery-selectors/grammar.js.map +1 -0
  40. package/dist/api/cadquery-selectors/index.d.ts +18 -0
  41. package/dist/api/cadquery-selectors/index.d.ts.map +1 -0
  42. package/dist/api/cadquery-selectors/index.js +17 -0
  43. package/dist/api/cadquery-selectors/index.js.map +1 -0
  44. package/dist/api/cadquery-selectors/predicates.d.ts +76 -0
  45. package/dist/api/cadquery-selectors/predicates.d.ts.map +1 -0
  46. package/dist/api/cadquery-selectors/predicates.js +85 -0
  47. package/dist/api/cadquery-selectors/predicates.js.map +1 -0
  48. package/dist/api/cadquery-selectors/resolve.d.ts +41 -0
  49. package/dist/api/cadquery-selectors/resolve.d.ts.map +1 -0
  50. package/dist/api/cadquery-selectors/resolve.js +243 -0
  51. package/dist/api/cadquery-selectors/resolve.js.map +1 -0
  52. package/dist/api/cadquery-selectors/types.d.ts +96 -0
  53. package/dist/api/cadquery-selectors/types.d.ts.map +1 -0
  54. package/dist/api/cadquery-selectors/types.js +11 -0
  55. package/dist/api/cadquery-selectors/types.js.map +1 -0
  56. package/dist/api/chamfer.d.ts +13 -5
  57. package/dist/api/chamfer.d.ts.map +1 -1
  58. package/dist/api/chamfer.js +63 -7
  59. package/dist/api/chamfer.js.map +1 -1
  60. package/dist/api/compound-geom.d.ts +1 -1
  61. package/dist/api/compound-geom.js +1 -1
  62. package/dist/api/compound-geom.js.map +1 -1
  63. package/dist/api/draft.d.ts +1 -1
  64. package/dist/api/draft.js +1 -1
  65. package/dist/api/draft.js.map +1 -1
  66. package/dist/api/edge-ref.d.ts +1 -1
  67. package/dist/api/edge-ref.d.ts.map +1 -1
  68. package/dist/api/edge-ref.js +11 -3
  69. package/dist/api/edge-ref.js.map +1 -1
  70. package/dist/api/engrave.d.ts +1 -1
  71. package/dist/api/engrave.js +7 -7
  72. package/dist/api/engrave.js.map +1 -1
  73. package/dist/api/extrude.d.ts +6 -1
  74. package/dist/api/extrude.d.ts.map +1 -1
  75. package/dist/api/extrude.js +59 -5
  76. package/dist/api/extrude.js.map +1 -1
  77. package/dist/api/face-ref.d.ts +1 -1
  78. package/dist/api/face-ref.js +1 -1
  79. package/dist/api/face-ref.js.map +1 -1
  80. package/dist/api/feature-repair.d.ts +1 -1
  81. package/dist/api/feature-repair.js +1 -1
  82. package/dist/api/feature-repair.js.map +1 -1
  83. package/dist/api/fillet-variable.d.ts +1 -1
  84. package/dist/api/fillet-variable.js +1 -1
  85. package/dist/api/fillet-variable.js.map +1 -1
  86. package/dist/api/fillet.d.ts +28 -8
  87. package/dist/api/fillet.d.ts.map +1 -1
  88. package/dist/api/fillet.js +64 -9
  89. package/dist/api/fillet.js.map +1 -1
  90. package/dist/api/geom.d.ts +1 -1
  91. package/dist/api/geom.js +1 -1
  92. package/dist/api/geom.js.map +1 -1
  93. package/dist/api/helix.d.ts +1 -1
  94. package/dist/api/helix.js +1 -1
  95. package/dist/api/helix.js.map +1 -1
  96. package/dist/api/import-brep.d.ts +20 -2
  97. package/dist/api/import-brep.d.ts.map +1 -1
  98. package/dist/api/import-brep.js +28 -3
  99. package/dist/api/import-brep.js.map +1 -1
  100. package/dist/api/import-step.d.ts +17 -2
  101. package/dist/api/import-step.d.ts.map +1 -1
  102. package/dist/api/import-step.js +51 -3
  103. package/dist/api/import-step.js.map +1 -1
  104. package/dist/api/index.d.ts +6 -1
  105. package/dist/api/index.d.ts.map +1 -1
  106. package/dist/api/index.js +7 -2
  107. package/dist/api/index.js.map +1 -1
  108. package/dist/api/internal/compat-op.js +1 -1
  109. package/dist/api/internal/compat-op.js.map +1 -1
  110. package/dist/api/internal/mesh-solid-op.d.ts +236 -0
  111. package/dist/api/internal/mesh-solid-op.d.ts.map +1 -0
  112. package/dist/api/internal/mesh-solid-op.js +352 -0
  113. package/dist/api/internal/mesh-solid-op.js.map +1 -0
  114. package/dist/api/internal/svg-asset-resolver.d.ts +1 -1
  115. package/dist/api/internal/svg-asset-resolver.js +1 -1
  116. package/dist/api/internal/svg-asset-resolver.js.map +1 -1
  117. package/dist/api/knurl.d.ts +1 -1
  118. package/dist/api/knurl.js +2 -2
  119. package/dist/api/knurl.js.map +1 -1
  120. package/dist/api/loft.d.ts +1 -1
  121. package/dist/api/loft.js +1 -1
  122. package/dist/api/loft.js.map +1 -1
  123. package/dist/api/measurement/index.d.ts +9 -5
  124. package/dist/api/measurement/index.d.ts.map +1 -1
  125. package/dist/api/measurement/index.js +47 -20
  126. package/dist/api/measurement/index.js.map +1 -1
  127. package/dist/api/meta.d.ts +93 -0
  128. package/dist/api/meta.d.ts.map +1 -0
  129. package/dist/api/meta.js +99 -0
  130. package/dist/api/meta.js.map +1 -0
  131. package/dist/api/pattern.d.ts +5 -3
  132. package/dist/api/pattern.d.ts.map +1 -1
  133. package/dist/api/pattern.js +32 -4
  134. package/dist/api/pattern.js.map +1 -1
  135. package/dist/api/place.d.ts +1 -1
  136. package/dist/api/place.js +1 -1
  137. package/dist/api/place.js.map +1 -1
  138. package/dist/api/primitives.d.ts +1 -1
  139. package/dist/api/primitives.d.ts.map +1 -1
  140. package/dist/api/primitives.js +119 -4
  141. package/dist/api/primitives.js.map +1 -1
  142. package/dist/api/profile.d.ts +39 -12
  143. package/dist/api/profile.d.ts.map +1 -1
  144. package/dist/api/profile.js +4 -4
  145. package/dist/api/profile.js.map +1 -1
  146. package/dist/api/reconcile.d.ts +1 -1
  147. package/dist/api/reconcile.js +1 -1
  148. package/dist/api/reconcile.js.map +1 -1
  149. package/dist/api/replicate.d.ts.map +1 -1
  150. package/dist/api/replicate.js +122 -1
  151. package/dist/api/replicate.js.map +1 -1
  152. package/dist/api/screw.d.ts +1 -1
  153. package/dist/api/screw.js +3 -3
  154. package/dist/api/screw.js.map +1 -1
  155. package/dist/api/sdf.d.ts +1 -1
  156. package/dist/api/sdf.js +2 -2
  157. package/dist/api/sdf.js.map +1 -1
  158. package/dist/api/section-by-plane.d.ts +1 -1
  159. package/dist/api/section-by-plane.d.ts.map +1 -1
  160. package/dist/api/section-by-plane.js +2 -1
  161. package/dist/api/section-by-plane.js.map +1 -1
  162. package/dist/api/shell.d.ts +11 -4
  163. package/dist/api/shell.d.ts.map +1 -1
  164. package/dist/api/shell.js +53 -7
  165. package/dist/api/shell.js.map +1 -1
  166. package/dist/api/sketch-on-face.d.ts +41 -0
  167. package/dist/api/sketch-on-face.d.ts.map +1 -1
  168. package/dist/api/sketch-on-face.js +100 -1
  169. package/dist/api/sketch-on-face.js.map +1 -1
  170. package/dist/api/sketch-on-plane.d.ts +7 -5
  171. package/dist/api/sketch-on-plane.d.ts.map +1 -1
  172. package/dist/api/sketch-on-plane.js +6 -7
  173. package/dist/api/sketch-on-plane.js.map +1 -1
  174. package/dist/api/split-by-plane.d.ts +1 -1
  175. package/dist/api/split-by-plane.d.ts.map +1 -1
  176. package/dist/api/split-by-plane.js +2 -1
  177. package/dist/api/split-by-plane.js.map +1 -1
  178. package/dist/api/split.d.ts +1 -1
  179. package/dist/api/split.js +2 -2
  180. package/dist/api/split.js.map +1 -1
  181. package/dist/api/sweep.d.ts +1 -1
  182. package/dist/api/sweep.js +1 -1
  183. package/dist/api/sweep.js.map +1 -1
  184. package/dist/api/thicken.d.ts +1 -1
  185. package/dist/api/thicken.js +1 -1
  186. package/dist/api/thicken.js.map +1 -1
  187. package/dist/api/topo-resolve.d.ts +74 -1
  188. package/dist/api/topo-resolve.d.ts.map +1 -1
  189. package/dist/api/topo-resolve.js +180 -2
  190. package/dist/api/topo-resolve.js.map +1 -1
  191. package/dist/api/transform.d.ts +5 -1
  192. package/dist/api/transform.d.ts.map +1 -1
  193. package/dist/api/transform.js +62 -11
  194. package/dist/api/transform.js.map +1 -1
  195. package/dist/api/wire.d.ts +1 -1
  196. package/dist/api/wire.js +1 -1
  197. package/dist/api/wire.js.map +1 -1
  198. package/dist/brep/brep-ops.d.ts +9 -7
  199. package/dist/brep/brep-ops.d.ts.map +1 -1
  200. package/dist/brep/brep-ops.js +50 -26
  201. package/dist/brep/brep-ops.js.map +1 -1
  202. package/dist/brep/brep-topology.d.ts +5 -4
  203. package/dist/brep/brep-topology.d.ts.map +1 -1
  204. package/dist/brep/brep-topology.js +6 -5
  205. package/dist/brep/brep-topology.js.map +1 -1
  206. package/dist/brep/effective-deflection.d.ts +35 -0
  207. package/dist/brep/effective-deflection.d.ts.map +1 -0
  208. package/dist/brep/effective-deflection.js +49 -0
  209. package/dist/brep/effective-deflection.js.map +1 -0
  210. package/dist/brep/engine/adapters/brep-mock.d.ts.map +1 -1
  211. package/dist/brep/engine/adapters/brep-mock.js +27 -0
  212. package/dist/brep/engine/adapters/brep-mock.js.map +1 -1
  213. package/dist/brep/engine/adapters/brepkit.d.ts +18 -0
  214. package/dist/brep/engine/adapters/brepkit.d.ts.map +1 -1
  215. package/dist/brep/engine/adapters/brepkit.js +46 -1
  216. package/dist/brep/engine/adapters/brepkit.js.map +1 -1
  217. package/dist/brep/engine/adapters/occt.d.ts +1 -1
  218. package/dist/brep/engine/adapters/occt.d.ts.map +1 -1
  219. package/dist/brep/engine/adapters/occt.js +4 -2
  220. package/dist/brep/engine/adapters/occt.js.map +1 -1
  221. package/dist/brep/engine/primitives.d.ts +29 -7
  222. package/dist/brep/engine/primitives.d.ts.map +1 -1
  223. package/dist/brep/engine/primitives.js.map +1 -1
  224. package/dist/brep/engine/registry.d.ts +24 -1
  225. package/dist/brep/engine/registry.d.ts.map +1 -1
  226. package/dist/brep/engine/registry.js +24 -0
  227. package/dist/brep/engine/registry.js.map +1 -1
  228. package/dist/brep/engine/types.d.ts +54 -3
  229. package/dist/brep/engine/types.d.ts.map +1 -1
  230. package/dist/brep/engine/types.js +10 -0
  231. package/dist/brep/engine/types.js.map +1 -1
  232. package/dist/brep/export/export-model.d.ts +40 -0
  233. package/dist/brep/export/export-model.d.ts.map +1 -1
  234. package/dist/brep/export/export-model.js +274 -30
  235. package/dist/brep/export/export-model.js.map +1 -1
  236. package/dist/brep/export/step-meta-header.d.ts +102 -0
  237. package/dist/brep/export/step-meta-header.d.ts.map +1 -0
  238. package/dist/brep/export/step-meta-header.js +225 -0
  239. package/dist/brep/export/step-meta-header.js.map +1 -0
  240. package/dist/brep/export/step.d.ts +5 -1
  241. package/dist/brep/export/step.d.ts.map +1 -1
  242. package/dist/brep/export/step.js +11 -2
  243. package/dist/brep/export/step.js.map +1 -1
  244. package/dist/brep/face-evolution.d.ts +1 -1
  245. package/dist/brep/face-evolution.d.ts.map +1 -1
  246. package/dist/brep/face-evolution.js +20 -1
  247. package/dist/brep/face-evolution.js.map +1 -1
  248. package/dist/brep/handle-bridge.d.ts +1 -1
  249. package/dist/brep/handle-bridge.js +1 -1
  250. package/dist/brep/handle-bridge.js.map +1 -1
  251. package/dist/brep/mesh-solid.d.ts +218 -0
  252. package/dist/brep/mesh-solid.d.ts.map +1 -0
  253. package/dist/brep/mesh-solid.js +229 -0
  254. package/dist/brep/mesh-solid.js.map +1 -0
  255. package/dist/brep/text/fontRegistry.d.ts +32 -1
  256. package/dist/brep/text/fontRegistry.d.ts.map +1 -1
  257. package/dist/brep/text/fontRegistry.js +51 -1
  258. package/dist/brep/text/fontRegistry.js.map +1 -1
  259. package/dist/brep/text/text-to-solid.d.ts.map +1 -1
  260. package/dist/brep/text/text-to-solid.js +8 -3
  261. package/dist/brep/text/text-to-solid.js.map +1 -1
  262. package/dist/brepkit-kernel/brepkitKernel.d.ts +18 -2
  263. package/dist/brepkit-kernel/brepkitKernel.d.ts.map +1 -1
  264. package/dist/brepkit-kernel/brepkitKernel.js +449 -123
  265. package/dist/brepkit-kernel/brepkitKernel.js.map +1 -1
  266. package/dist/brepkit-kernel/brepkitWasm.d.ts +8 -0
  267. package/dist/brepkit-kernel/brepkitWasm.d.ts.map +1 -1
  268. package/dist/brepkit-kernel/brepkitWasm.js +10 -0
  269. package/dist/brepkit-kernel/brepkitWasm.js.map +1 -1
  270. package/dist/browser-host/browser-font-provider.d.ts +12 -0
  271. package/dist/browser-host/browser-font-provider.d.ts.map +1 -1
  272. package/dist/browser-host/browser-font-provider.js +25 -0
  273. package/dist/browser-host/browser-font-provider.js.map +1 -1
  274. package/dist/browser.d.ts +6 -3
  275. package/dist/browser.d.ts.map +1 -1
  276. package/dist/browser.js +10 -3
  277. package/dist/browser.js.map +1 -1
  278. package/dist/cad-runtime/backend-dispatch.d.ts +28 -3
  279. package/dist/cad-runtime/backend-dispatch.d.ts.map +1 -1
  280. package/dist/cad-runtime/backend-dispatch.js +119 -4
  281. package/dist/cad-runtime/backend-dispatch.js.map +1 -1
  282. package/dist/cad-runtime/browser-lib-loader.js.map +1 -1
  283. package/dist/cad-runtime/direct-executor.d.ts +15 -3
  284. package/dist/cad-runtime/direct-executor.d.ts.map +1 -1
  285. package/dist/cad-runtime/direct-executor.js +33 -1
  286. package/dist/cad-runtime/direct-executor.js.map +1 -1
  287. package/dist/cad-runtime/ports.d.ts +3 -3
  288. package/dist/cad-runtime/ports.d.ts.map +1 -1
  289. package/dist/cad-runtime/ports.js.map +1 -1
  290. package/dist/cad-runtime/preview-exec.d.ts +4 -4
  291. package/dist/cad-runtime/preview-exec.js +2 -2
  292. package/dist/cad-runtime/preview-exec.js.map +1 -1
  293. package/dist/cad-runtime/runtime.d.ts +42 -7
  294. package/dist/cad-runtime/runtime.d.ts.map +1 -1
  295. package/dist/cad-runtime/runtime.js +68 -5
  296. package/dist/cad-runtime/runtime.js.map +1 -1
  297. package/dist/define-op.d.ts +15 -1
  298. package/dist/define-op.d.ts.map +1 -1
  299. package/dist/define-op.js +73 -2
  300. package/dist/define-op.js.map +1 -1
  301. package/dist/env-agnostic.d.ts +2 -2
  302. package/dist/env-agnostic.d.ts.map +1 -1
  303. package/dist/env-agnostic.js +1 -1
  304. package/dist/env-agnostic.js.map +1 -1
  305. package/dist/geometry2d/adapt.d.ts +39 -4
  306. package/dist/geometry2d/adapt.d.ts.map +1 -1
  307. package/dist/geometry2d/adapt.js +14 -3
  308. package/dist/geometry2d/adapt.js.map +1 -1
  309. package/dist/geometry2d/blueprint.d.ts +2 -2
  310. package/dist/geometry2d/blueprint.js +2 -2
  311. package/dist/geometry2d/blueprint.js.map +1 -1
  312. package/dist/geometry2d/bridge/lift-on-plane.d.ts +18 -8
  313. package/dist/geometry2d/bridge/lift-on-plane.d.ts.map +1 -1
  314. package/dist/geometry2d/bridge/lift-on-plane.js +65 -12
  315. package/dist/geometry2d/bridge/lift-on-plane.js.map +1 -1
  316. package/dist/geometry2d/bridge/plane.d.ts +17 -0
  317. package/dist/geometry2d/bridge/plane.d.ts.map +1 -1
  318. package/dist/geometry2d/bridge/plane.js +22 -0
  319. package/dist/geometry2d/bridge/plane.js.map +1 -1
  320. package/dist/geometry2d/curve2d.d.ts +25 -0
  321. package/dist/geometry2d/curve2d.d.ts.map +1 -1
  322. package/dist/geometry2d/curve2d.js +41 -5
  323. package/dist/geometry2d/curve2d.js.map +1 -1
  324. package/dist/index.d.ts +6 -2
  325. package/dist/index.d.ts.map +1 -1
  326. package/dist/index.js +10 -3
  327. package/dist/index.js.map +1 -1
  328. package/dist/io/bytes-node.d.ts +11 -0
  329. package/dist/io/bytes-node.d.ts.map +1 -0
  330. package/dist/io/bytes-node.js +28 -0
  331. package/dist/io/bytes-node.js.map +1 -0
  332. package/dist/io/bytes.d.ts +33 -0
  333. package/dist/io/bytes.d.ts.map +1 -0
  334. package/dist/io/bytes.js +41 -0
  335. package/dist/io/bytes.js.map +1 -0
  336. package/dist/io/fai-zip/container-read.d.ts +102 -0
  337. package/dist/io/fai-zip/container-read.d.ts.map +1 -0
  338. package/dist/io/fai-zip/container-read.js +305 -0
  339. package/dist/io/fai-zip/container-read.js.map +1 -0
  340. package/dist/io/fai-zip/container-write.d.ts +70 -0
  341. package/dist/io/fai-zip/container-write.d.ts.map +1 -0
  342. package/dist/io/fai-zip/container-write.js +186 -0
  343. package/dist/io/fai-zip/container-write.js.map +1 -0
  344. package/dist/io/fai-zip/container.d.ts +107 -0
  345. package/dist/io/fai-zip/container.d.ts.map +1 -0
  346. package/dist/io/fai-zip/container.js +89 -0
  347. package/dist/io/fai-zip/container.js.map +1 -0
  348. package/dist/io/fai-zip/index.d.ts +18 -0
  349. package/dist/io/fai-zip/index.d.ts.map +1 -0
  350. package/dist/io/fai-zip/index.js +4 -0
  351. package/dist/io/fai-zip/index.js.map +1 -0
  352. package/dist/io/index.d.ts +10 -0
  353. package/dist/io/index.d.ts.map +1 -0
  354. package/dist/io/index.js +13 -0
  355. package/dist/io/index.js.map +1 -0
  356. package/dist/io/zip.d.ts +68 -0
  357. package/dist/io/zip.d.ts.map +1 -0
  358. package/dist/io/zip.js +147 -0
  359. package/dist/io/zip.js.map +1 -0
  360. package/dist/lang/code-to-args.d.ts +1 -1
  361. package/dist/lang/code-to-args.js +1 -1
  362. package/dist/lang/code-to-args.js.map +1 -1
  363. package/dist/lang/metadata-extractor.d.ts.map +1 -1
  364. package/dist/lang/metadata-extractor.js +2 -21
  365. package/dist/lang/metadata-extractor.js.map +1 -1
  366. package/dist/lang/statement-summary.d.ts +1 -1
  367. package/dist/lang/statement-summary.js +1 -1
  368. package/dist/lang/statement-summary.js.map +1 -1
  369. package/dist/lang/types.d.ts +6 -7
  370. package/dist/lang/types.d.ts.map +1 -1
  371. package/dist/lang/types.js +1 -1
  372. package/dist/lang/types.js.map +1 -1
  373. package/dist/mesh/index.d.ts +2 -1
  374. package/dist/mesh/index.d.ts.map +1 -1
  375. package/dist/mesh/index.js +2 -1
  376. package/dist/mesh/index.js.map +1 -1
  377. package/dist/mesh/io.d.ts +13 -0
  378. package/dist/mesh/io.d.ts.map +1 -1
  379. package/dist/mesh/io.js +38 -17
  380. package/dist/mesh/io.js.map +1 -1
  381. package/dist/mesh/primitives.d.ts.map +1 -1
  382. package/dist/mesh/primitives.js +41 -6
  383. package/dist/mesh/primitives.js.map +1 -1
  384. package/dist/mesh/reconcile.d.ts +1 -1
  385. package/dist/mesh/reconcile.js +1 -1
  386. package/dist/mesh/reconcile.js.map +1 -1
  387. package/dist/mesh/rigid-transform.d.ts +3 -3
  388. package/dist/mesh/rigid-transform.js +3 -3
  389. package/dist/mesh/rigid-transform.js.map +1 -1
  390. package/dist/mesh/stl-unit.d.ts +24 -0
  391. package/dist/mesh/stl-unit.d.ts.map +1 -0
  392. package/dist/mesh/stl-unit.js +17 -0
  393. package/dist/mesh/stl-unit.js.map +1 -0
  394. package/dist/mesh/threemf-bambu.d.ts +142 -0
  395. package/dist/mesh/threemf-bambu.d.ts.map +1 -0
  396. package/dist/mesh/threemf-bambu.js +334 -0
  397. package/dist/mesh/threemf-bambu.js.map +1 -0
  398. package/dist/mesh/threemf-loader.d.ts +65 -7
  399. package/dist/mesh/threemf-loader.d.ts.map +1 -1
  400. package/dist/mesh/threemf-loader.js +738 -99
  401. package/dist/mesh/threemf-loader.js.map +1 -1
  402. package/dist/mesh/threemf-view.d.ts +71 -0
  403. package/dist/mesh/threemf-view.d.ts.map +1 -0
  404. package/dist/mesh/threemf-view.js +100 -0
  405. package/dist/mesh/threemf-view.js.map +1 -0
  406. package/dist/mesh/types.d.ts +38 -0
  407. package/dist/mesh/types.d.ts.map +1 -1
  408. package/dist/mesh/types.js.map +1 -1
  409. package/dist/node-host/cli.d.ts +44 -6
  410. package/dist/node-host/cli.d.ts.map +1 -1
  411. package/dist/node-host/cli.js +76 -26
  412. package/dist/node-host/cli.js.map +1 -1
  413. package/dist/node-host/font-family-index.d.ts +93 -0
  414. package/dist/node-host/font-family-index.d.ts.map +1 -0
  415. package/dist/node-host/font-family-index.js +273 -0
  416. package/dist/node-host/font-family-index.js.map +1 -0
  417. package/dist/node-host/fs-asset-resolver.d.ts +8 -3
  418. package/dist/node-host/fs-asset-resolver.d.ts.map +1 -1
  419. package/dist/node-host/fs-asset-resolver.js +13 -5
  420. package/dist/node-host/fs-asset-resolver.js.map +1 -1
  421. package/dist/node-host/index.d.ts +8 -0
  422. package/dist/node-host/index.d.ts.map +1 -1
  423. package/dist/node-host/index.js +1 -0
  424. package/dist/node-host/index.js.map +1 -1
  425. package/dist/node-host/node-font-provider.d.ts +28 -0
  426. package/dist/node-host/node-font-provider.d.ts.map +1 -1
  427. package/dist/node-host/node-font-provider.js +49 -0
  428. package/dist/node-host/node-font-provider.js.map +1 -1
  429. package/dist/node.d.ts +1 -0
  430. package/dist/node.d.ts.map +1 -1
  431. package/dist/node.js +1 -0
  432. package/dist/node.js.map +1 -1
  433. package/dist/occt-kernel/highLevelApi.d.ts +4 -1
  434. package/dist/occt-kernel/highLevelApi.d.ts.map +1 -1
  435. package/dist/occt-kernel/highLevelApi.js +4 -2
  436. package/dist/occt-kernel/highLevelApi.js.map +1 -1
  437. package/dist/occt-kernel/occt-primitives.d.ts.map +1 -1
  438. package/dist/occt-kernel/occt-primitives.js +36 -3
  439. package/dist/occt-kernel/occt-primitives.js.map +1 -1
  440. package/dist/occt-kernel/occtKernel.d.ts +19 -14
  441. package/dist/occt-kernel/occtKernel.d.ts.map +1 -1
  442. package/dist/occt-kernel/occtKernel.js +19 -32
  443. package/dist/occt-kernel/occtKernel.js.map +1 -1
  444. package/dist/occt-kernel/stepColorParser.d.ts +18 -0
  445. package/dist/occt-kernel/stepColorParser.d.ts.map +1 -1
  446. package/dist/occt-kernel/stepColorParser.js +38 -0
  447. package/dist/occt-kernel/stepColorParser.js.map +1 -1
  448. package/dist/occt-kernel/stepMetaParser.d.ts +44 -0
  449. package/dist/occt-kernel/stepMetaParser.d.ts.map +1 -0
  450. package/dist/occt-kernel/stepMetaParser.js +166 -0
  451. package/dist/occt-kernel/stepMetaParser.js.map +1 -0
  452. package/dist/occt-kernel/topologyExt.d.ts +1 -1
  453. package/dist/occt-kernel/topologyExt.d.ts.map +1 -1
  454. package/dist/occt-kernel/topologyExt.js +4 -5
  455. package/dist/occt-kernel/topologyExt.js.map +1 -1
  456. package/dist/primitives/text/cjk-font.d.ts +2 -15
  457. package/dist/primitives/text/cjk-font.d.ts.map +1 -1
  458. package/dist/primitives/text/cjk-font.js +13 -1
  459. package/dist/primitives/text/cjk-font.js.map +1 -1
  460. package/dist/runtime-state.d.ts +85 -9
  461. package/dist/runtime-state.d.ts.map +1 -1
  462. package/dist/runtime-state.js +72 -2
  463. package/dist/runtime-state.js.map +1 -1
  464. package/dist/sdk.d.ts +3 -3
  465. package/dist/sdk.d.ts.map +1 -1
  466. package/dist/sdk.js +5 -5
  467. package/dist/sdk.js.map +1 -1
  468. package/dist/shape.d.ts +108 -5
  469. package/dist/shape.d.ts.map +1 -1
  470. package/dist/shape.js +130 -3
  471. package/dist/shape.js.map +1 -1
  472. package/dist/step/stepMetaParser.d.ts +55 -0
  473. package/dist/step/stepMetaParser.d.ts.map +1 -0
  474. package/dist/step/stepMetaParser.js +177 -0
  475. package/dist/step/stepMetaParser.js.map +1 -0
  476. package/dist/topology/naming/lineage.d.ts +6 -0
  477. package/dist/topology/naming/lineage.d.ts.map +1 -1
  478. package/dist/topology/naming/lineage.js +8 -0
  479. package/dist/topology/naming/lineage.js.map +1 -1
  480. package/dist/topology/naming/resolve-edge.d.ts +20 -1
  481. package/dist/topology/naming/resolve-edge.d.ts.map +1 -1
  482. package/dist/topology/naming/resolve-edge.js +54 -20
  483. package/dist/topology/naming/resolve-edge.js.map +1 -1
  484. package/dist/weapp.d.ts +6 -2
  485. package/dist/weapp.d.ts.map +1 -1
  486. package/dist/weapp.js +7 -1
  487. package/dist/weapp.js.map +1 -1
  488. package/package.json +19 -3
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/mesh/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * reconcile — BREP 三角汤归约为合法 2-manifold 网格(P0-1c)\n *\n *\n * 职责:把 OCCT 逐面三角化(`kernel.meshShape` 产物:共享边顶点重复、\n * 可能带朝向/退化问题)归约为 manifold-3d 可接受的合法 2-manifold 网格。\n * weld(顶点焊接)只是其中一步,故文件名为 reconcile 而非 weld。\n *\n * 纯数据、无 wasm 依赖、可单测。四步按顺序执行,每步可独立断言:\n * 1. 顶点焊接(复用 csg-core 的 weldPositionsWorker,1e-6 mm 量化,推原始坐标无精度损失)\n * 2. 退化剔除(零面积三角形)\n * 3. 朝向统一(连通分量内面法向传播,翻转不一致者)\n * 4. 2-manifold 断言(每条边恰好被 2 个三角形共享;不满足即显式报错,不静默、不 try-catch 回退)\n *\n * 红线(AGENTS.md):这是输入数据规整,不是运行时回退——调用方(stdlib 各 op 的\n * mesh 路径)在 dispatchPath 静态判定为 'mesh' 之后、进入 manifold 之前调用。\n */\n\nimport { weldPositionsWorker } from '../boolean/csg-core'\n\n/**\n * Result of one reconciliation step: the reduced vertex buffer and the index\n * buffer of triangles referencing it.\n */\nexport interface ReconcileResult {\n positions: Float32Array\n indices: Uint32Array\n}\n\n// ── 步骤 1:顶点焊接 ──\n\n/**\n * Weld duplicated vertices shared across triangle edges (reuses the single\n * csg-core weld implementation). Input coordinates are preserved — the 1e-6\n * quantization is only used as a map key and is never written back — so there\n * is no precision loss.\n * @param positions - flat XYZ vertex buffer, length 3 * vertexCount.\n * @param indices - triangle index buffer, length 3 * triangleCount.\n * @returns the welded mesh as a new ReconcileResult.\n */\nexport function weldVertices(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const welded = weldPositionsWorker(positions, indices, indices.length)\n return { positions: welded.positions, indices: welded.indices }\n}\n\n// ── 步骤 2:退化剔除 ──\n\n/** 计算包围盒对角线长度(数值尺度参考)。 */\nfunction bboxDiagonal(positions: Float32Array): number {\n let minX = Infinity, minY = Infinity, minZ = Infinity\n let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity\n for (let i = 0; i < positions.length; i += 3) {\n const x = positions[i], y = positions[i + 1], z = positions[i + 2]\n if (x < minX) minX = x\n if (y < minY) minY = y\n if (z < minZ) minZ = z\n if (x > maxX) maxX = x\n if (y > maxY) maxY = y\n if (z > maxZ) maxZ = z\n }\n const dx = maxX - minX, dy = maxY - minY, dz = maxZ - minZ\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n}\n\n/**\n * Drop zero-area triangles and compact the surviving indices, also squeezing\n * out vertices that are no longer referenced. A triangle is degenerate when\n * its area is below the relative threshold (diagonal * 1e-9)².\n * @param positions - flat XYZ vertex buffer, length 3 * vertexCount.\n * @param indices - triangle index buffer, length 3 * triangleCount.\n * @returns the cleaned mesh as a new ReconcileResult.\n */\nexport function removeDegenerate(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const triCount = indices.length / 3\n if (triCount === 0) return { positions, indices }\n\n const diag = bboxDiagonal(positions)\n const areaEps = diag * 1e-9\n const areaEpsSq = areaEps * areaEps\n\n const keep = new Uint8Array(triCount)\n let keptCount = 0\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n const x0 = positions[i0 * 3], y0 = positions[i0 * 3 + 1], z0 = positions[i0 * 3 + 2]\n const x1 = positions[i1 * 3], y1 = positions[i1 * 3 + 1], z1 = positions[i1 * 3 + 2]\n const x2 = positions[i2 * 3], y2 = positions[i2 * 3 + 1], z2 = positions[i2 * 3 + 2]\n\n // cross(u, v) 长度平方:u = v1 - v0, v = v2 - v0\n const ux = x1 - x0, uy = y1 - y0, uz = z1 - z0\n const vx = x2 - x0, vy = y2 - y0, vz = z2 - z0\n const cx = uy * vz - uz * vy\n const cy = uz * vx - ux * vz\n const cz = ux * vy - uy * vx\n const crossLenSq = cx * cx + cy * cy + cz * cz\n\n if (crossLenSq > areaEpsSq) {\n keep[t] = 1\n keptCount++\n }\n }\n\n if (keptCount === triCount) return { positions, indices }\n\n const newIndices = new Uint32Array(keptCount * 3)\n const remap = new Map<number, number>()\n const newPosArr: number[] = []\n\n let out = 0\n for (let t = 0; t < triCount; t++) {\n if (!keep[t]) continue\n for (let k = 0; k < 3; k++) {\n const vi = indices[t * 3 + k]\n let ni = remap.get(vi)\n if (ni === undefined) {\n ni = newPosArr.length / 3\n remap.set(vi, ni)\n newPosArr.push(positions[vi * 3], positions[vi * 3 + 1], positions[vi * 3 + 2])\n }\n newIndices[out++] = ni\n }\n }\n\n return { positions: new Float32Array(newPosArr), indices: newIndices }\n}\n\n// ── 步骤 3:朝向统一 ──\n\ninterface EdgeRef {\n /** 三角形序号(indices / 3) */\n tri: number\n /** 该三角形沿排序后边的遍历方向:+1 = a→b,-1 = b→a */\n dir: 1 | -1\n}\n\n/**\n * Propagate face winding across each connected component: adjacent triangles\n * sharing an edge must traverse it in opposite directions (manifold winding\n * consistency). Triangles that violate this are flipped (v1/v2 swapped).\n *\n * BFS propagates a flip state f ∈ {+1, -1} per connected component:\n * f(neighbor) = -f(cur) * baseDir(cur, e) * baseDir(neighbor, e)\n * A conflict (one triangle demanded to flip by two different paths) means the\n * mesh is not orientable — the first assignment is kept and step 4's\n * 2-manifold assertion reports the error explicitly.\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n * @returns the orientation-unified mesh as a new ReconcileResult.\n */\nexport function unifyOrientation(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const triCount = indices.length / 3\n if (triCount === 0) return { positions, indices }\n\n // 无向边 → 共享它的 (tri, dir) 列表\n const edgeMap = new Map<number, Map<number, EdgeRef[]>>()\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n addEdgeRef(i0, i1, t)\n addEdgeRef(i1, i2, t)\n addEdgeRef(i2, i0, t)\n }\n\n function addEdgeRef(a: number, b: number, tri: number): void {\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n let inner = edgeMap.get(lo)\n if (!inner) {\n inner = new Map()\n edgeMap.set(lo, inner)\n }\n let refs = inner.get(hi)\n if (!refs) {\n refs = []\n inner.set(hi, refs)\n }\n refs.push({ tri, dir: a < b ? 1 : -1 })\n }\n\n // 0 = 未访问,1 = 原朝向,2 = 需翻转\n const flip = new Uint8Array(triCount)\n const queue: number[] = []\n\n for (let seed = 0; seed < triCount; seed++) {\n if (flip[seed] !== 0) continue\n flip[seed] = 1\n queue.length = 0\n queue.push(seed)\n\n while (queue.length > 0) {\n const cur = queue.pop()!\n const curFlip = flip[cur] === 2 ? -1 : 1\n\n for (let k = 0; k < 3; k++) {\n const a = indices[cur * 3 + k]\n const b = indices[cur * 3 + (k + 1) % 3]\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n const refs = edgeMap.get(lo)?.get(hi)\n if (!refs) continue\n\n const baseDirCur: 1 | -1 = a < b ? 1 : -1\n for (const ref of refs) {\n if (ref.tri === cur) continue\n if (flip[ref.tri] !== 0) continue\n // f(n) = -f(c) × dir(c) × dir(n)\n const needFlip = curFlip * baseDirCur * ref.dir === 1 ? 2 : 1\n flip[ref.tri] = needFlip\n queue.push(ref.tri)\n }\n }\n }\n }\n\n // 应用翻转:交换每个三角形 v1/v2\n const out = new Uint32Array(indices)\n for (let t = 0; t < triCount; t++) {\n if (flip[t] === 2) {\n const tmp = out[t * 3 + 1]\n out[t * 3 + 1] = out[t * 3 + 2]\n out[t * 3 + 2] = tmp\n }\n }\n\n return { positions, indices: out }\n}\n\n// ── 步骤 4:2-manifold 断言 ──\n\n/**\n * Assert the mesh is 2-manifold: every undirected edge is shared by exactly\n * two triangles. A violation throws immediately (no silent handling, no\n * try-catch fallback).\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n */\nexport function assertManifold(positions: Float32Array, indices: Uint32Array): void {\n const triCount = indices.length / 3\n const edgeCount = new Map<number, Map<number, number>>()\n\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n bump(i0, i1)\n bump(i1, i2)\n bump(i2, i0)\n }\n\n function bump(a: number, b: number): void {\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n let inner = edgeCount.get(lo)\n if (!inner) {\n inner = new Map()\n edgeCount.set(lo, inner)\n }\n inner.set(hi, (inner.get(hi) ?? 0) + 1)\n }\n\n for (const [lo, inner] of edgeCount) {\n for (const [hi, count] of inner) {\n if (count !== 2) {\n throw new Error(\n `[reconcile] not 2-manifold: edge (${lo},${hi}) shared by ${count} triangles (expected 2)`,\n )\n }\n }\n }\n}\n\n// ── 四步归约(默认入口) ──\n\n/**\n * Tuning knobs for the full reconciliation pass.\n */\nexport interface ReconcileOptions {\n /** Whether to run the 2-manifold assertion (default true). */\n assertManifold?: boolean\n}\n\n/**\n * Full reconciliation: weld → degenerate removal → orientation unification →\n * 2-manifold assertion. An empty mesh is returned untouched.\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n * @param opts - optional tuning knobs, e.g. to skip the manifold assertion.\n * @returns the reconciled mesh as a new ReconcileResult.\n */\nexport function reconcileMesh(\n positions: Float32Array,\n indices: Uint32Array,\n opts?: ReconcileOptions,\n): ReconcileResult {\n if (indices.length === 0 || indices.length % 3 !== 0) {\n if (indices.length === 0) return { positions, indices }\n throw new Error(`[reconcile] indices length must be a multiple of 3, got ${indices.length}`)\n }\n\n let result = weldVertices(positions, indices)\n result = removeDegenerate(result.positions, result.indices)\n result = unifyOrientation(result.positions, result.indices)\n\n if (opts?.assertManifold !== false) {\n assertManifold(result.positions, result.indices)\n }\n return result\n}\n"]}
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/mesh/reconcile.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * reconcile — BREP 三角汤归约为合法 2-manifold 网格(P0-1c)\n *\n *\n * 职责:把 OCCT 逐面三角化(`kernel.meshShape` 产物:共享边顶点重复、\n * 可能带朝向/退化问题)归约为 manifold-3d 可接受的合法 2-manifold 网格。\n * weld(顶点焊接)只是其中一步,故文件名为 reconcile 而非 weld。\n *\n * 纯数据、无 wasm 依赖、可单测。四步按顺序执行,每步可独立断言:\n * 1. 顶点焊接(复用 csg-core 的 weldPositionsWorker,1e-6 mm 量化,推原始坐标无精度损失)\n * 2. 退化剔除(零面积三角形)\n * 3. 朝向统一(连通分量内面法向传播,翻转不一致者)\n * 4. 2-manifold 断言(每条边恰好被 2 个三角形共享;不满足即显式报错,不静默、不 try-catch 回退)\n *\n * 红线(AGENTS.md):这是输入数据规整,不是运行时回退——调用方(api 各 op 的\n * mesh 路径)在 dispatchPath 静态判定为 'mesh' 之后、进入 manifold 之前调用。\n */\n\nimport { weldPositionsWorker } from '../boolean/csg-core'\n\n/**\n * Result of one reconciliation step: the reduced vertex buffer and the index\n * buffer of triangles referencing it.\n */\nexport interface ReconcileResult {\n positions: Float32Array\n indices: Uint32Array\n}\n\n// ── 步骤 1:顶点焊接 ──\n\n/**\n * Weld duplicated vertices shared across triangle edges (reuses the single\n * csg-core weld implementation). Input coordinates are preserved — the 1e-6\n * quantization is only used as a map key and is never written back — so there\n * is no precision loss.\n * @param positions - flat XYZ vertex buffer, length 3 * vertexCount.\n * @param indices - triangle index buffer, length 3 * triangleCount.\n * @returns the welded mesh as a new ReconcileResult.\n */\nexport function weldVertices(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const welded = weldPositionsWorker(positions, indices, indices.length)\n return { positions: welded.positions, indices: welded.indices }\n}\n\n// ── 步骤 2:退化剔除 ──\n\n/** 计算包围盒对角线长度(数值尺度参考)。 */\nfunction bboxDiagonal(positions: Float32Array): number {\n let minX = Infinity, minY = Infinity, minZ = Infinity\n let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity\n for (let i = 0; i < positions.length; i += 3) {\n const x = positions[i], y = positions[i + 1], z = positions[i + 2]\n if (x < minX) minX = x\n if (y < minY) minY = y\n if (z < minZ) minZ = z\n if (x > maxX) maxX = x\n if (y > maxY) maxY = y\n if (z > maxZ) maxZ = z\n }\n const dx = maxX - minX, dy = maxY - minY, dz = maxZ - minZ\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n}\n\n/**\n * Drop zero-area triangles and compact the surviving indices, also squeezing\n * out vertices that are no longer referenced. A triangle is degenerate when\n * its area is below the relative threshold (diagonal * 1e-9)².\n * @param positions - flat XYZ vertex buffer, length 3 * vertexCount.\n * @param indices - triangle index buffer, length 3 * triangleCount.\n * @returns the cleaned mesh as a new ReconcileResult.\n */\nexport function removeDegenerate(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const triCount = indices.length / 3\n if (triCount === 0) return { positions, indices }\n\n const diag = bboxDiagonal(positions)\n const areaEps = diag * 1e-9\n const areaEpsSq = areaEps * areaEps\n\n const keep = new Uint8Array(triCount)\n let keptCount = 0\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n const x0 = positions[i0 * 3], y0 = positions[i0 * 3 + 1], z0 = positions[i0 * 3 + 2]\n const x1 = positions[i1 * 3], y1 = positions[i1 * 3 + 1], z1 = positions[i1 * 3 + 2]\n const x2 = positions[i2 * 3], y2 = positions[i2 * 3 + 1], z2 = positions[i2 * 3 + 2]\n\n // cross(u, v) 长度平方:u = v1 - v0, v = v2 - v0\n const ux = x1 - x0, uy = y1 - y0, uz = z1 - z0\n const vx = x2 - x0, vy = y2 - y0, vz = z2 - z0\n const cx = uy * vz - uz * vy\n const cy = uz * vx - ux * vz\n const cz = ux * vy - uy * vx\n const crossLenSq = cx * cx + cy * cy + cz * cz\n\n if (crossLenSq > areaEpsSq) {\n keep[t] = 1\n keptCount++\n }\n }\n\n if (keptCount === triCount) return { positions, indices }\n\n const newIndices = new Uint32Array(keptCount * 3)\n const remap = new Map<number, number>()\n const newPosArr: number[] = []\n\n let out = 0\n for (let t = 0; t < triCount; t++) {\n if (!keep[t]) continue\n for (let k = 0; k < 3; k++) {\n const vi = indices[t * 3 + k]\n let ni = remap.get(vi)\n if (ni === undefined) {\n ni = newPosArr.length / 3\n remap.set(vi, ni)\n newPosArr.push(positions[vi * 3], positions[vi * 3 + 1], positions[vi * 3 + 2])\n }\n newIndices[out++] = ni\n }\n }\n\n return { positions: new Float32Array(newPosArr), indices: newIndices }\n}\n\n// ── 步骤 3:朝向统一 ──\n\ninterface EdgeRef {\n /** 三角形序号(indices / 3) */\n tri: number\n /** 该三角形沿排序后边的遍历方向:+1 = a→b,-1 = b→a */\n dir: 1 | -1\n}\n\n/**\n * Propagate face winding across each connected component: adjacent triangles\n * sharing an edge must traverse it in opposite directions (manifold winding\n * consistency). Triangles that violate this are flipped (v1/v2 swapped).\n *\n * BFS propagates a flip state f ∈ {+1, -1} per connected component:\n * f(neighbor) = -f(cur) * baseDir(cur, e) * baseDir(neighbor, e)\n * A conflict (one triangle demanded to flip by two different paths) means the\n * mesh is not orientable — the first assignment is kept and step 4's\n * 2-manifold assertion reports the error explicitly.\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n * @returns the orientation-unified mesh as a new ReconcileResult.\n */\nexport function unifyOrientation(\n positions: Float32Array,\n indices: Uint32Array,\n): ReconcileResult {\n const triCount = indices.length / 3\n if (triCount === 0) return { positions, indices }\n\n // 无向边 → 共享它的 (tri, dir) 列表\n const edgeMap = new Map<number, Map<number, EdgeRef[]>>()\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n addEdgeRef(i0, i1, t)\n addEdgeRef(i1, i2, t)\n addEdgeRef(i2, i0, t)\n }\n\n function addEdgeRef(a: number, b: number, tri: number): void {\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n let inner = edgeMap.get(lo)\n if (!inner) {\n inner = new Map()\n edgeMap.set(lo, inner)\n }\n let refs = inner.get(hi)\n if (!refs) {\n refs = []\n inner.set(hi, refs)\n }\n refs.push({ tri, dir: a < b ? 1 : -1 })\n }\n\n // 0 = 未访问,1 = 原朝向,2 = 需翻转\n const flip = new Uint8Array(triCount)\n const queue: number[] = []\n\n for (let seed = 0; seed < triCount; seed++) {\n if (flip[seed] !== 0) continue\n flip[seed] = 1\n queue.length = 0\n queue.push(seed)\n\n while (queue.length > 0) {\n const cur = queue.pop()!\n const curFlip = flip[cur] === 2 ? -1 : 1\n\n for (let k = 0; k < 3; k++) {\n const a = indices[cur * 3 + k]\n const b = indices[cur * 3 + (k + 1) % 3]\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n const refs = edgeMap.get(lo)?.get(hi)\n if (!refs) continue\n\n const baseDirCur: 1 | -1 = a < b ? 1 : -1\n for (const ref of refs) {\n if (ref.tri === cur) continue\n if (flip[ref.tri] !== 0) continue\n // f(n) = -f(c) × dir(c) × dir(n)\n const needFlip = curFlip * baseDirCur * ref.dir === 1 ? 2 : 1\n flip[ref.tri] = needFlip\n queue.push(ref.tri)\n }\n }\n }\n }\n\n // 应用翻转:交换每个三角形 v1/v2\n const out = new Uint32Array(indices)\n for (let t = 0; t < triCount; t++) {\n if (flip[t] === 2) {\n const tmp = out[t * 3 + 1]\n out[t * 3 + 1] = out[t * 3 + 2]\n out[t * 3 + 2] = tmp\n }\n }\n\n return { positions, indices: out }\n}\n\n// ── 步骤 4:2-manifold 断言 ──\n\n/**\n * Assert the mesh is 2-manifold: every undirected edge is shared by exactly\n * two triangles. A violation throws immediately (no silent handling, no\n * try-catch fallback).\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n */\nexport function assertManifold(positions: Float32Array, indices: Uint32Array): void {\n const triCount = indices.length / 3\n const edgeCount = new Map<number, Map<number, number>>()\n\n for (let t = 0; t < triCount; t++) {\n const i0 = indices[t * 3]\n const i1 = indices[t * 3 + 1]\n const i2 = indices[t * 3 + 2]\n bump(i0, i1)\n bump(i1, i2)\n bump(i2, i0)\n }\n\n function bump(a: number, b: number): void {\n const lo = a < b ? a : b\n const hi = a < b ? b : a\n let inner = edgeCount.get(lo)\n if (!inner) {\n inner = new Map()\n edgeCount.set(lo, inner)\n }\n inner.set(hi, (inner.get(hi) ?? 0) + 1)\n }\n\n for (const [lo, inner] of edgeCount) {\n for (const [hi, count] of inner) {\n if (count !== 2) {\n throw new Error(\n `[reconcile] not 2-manifold: edge (${lo},${hi}) shared by ${count} triangles (expected 2)`,\n )\n }\n }\n }\n}\n\n// ── 四步归约(默认入口) ──\n\n/**\n * Tuning knobs for the full reconciliation pass.\n */\nexport interface ReconcileOptions {\n /** Whether to run the 2-manifold assertion (default true). */\n assertManifold?: boolean\n}\n\n/**\n * Full reconciliation: weld → degenerate removal → orientation unification →\n * 2-manifold assertion. An empty mesh is returned untouched.\n * @param positions - flat XYZ vertex buffer.\n * @param indices - triangle index buffer.\n * @param opts - optional tuning knobs, e.g. to skip the manifold assertion.\n * @returns the reconciled mesh as a new ReconcileResult.\n */\nexport function reconcileMesh(\n positions: Float32Array,\n indices: Uint32Array,\n opts?: ReconcileOptions,\n): ReconcileResult {\n if (indices.length === 0 || indices.length % 3 !== 0) {\n if (indices.length === 0) return { positions, indices }\n throw new Error(`[reconcile] indices length must be a multiple of 3, got ${indices.length}`)\n }\n\n let result = weldVertices(positions, indices)\n result = removeDegenerate(result.positions, result.indices)\n result = unifyOrientation(result.positions, result.indices)\n\n if (opts?.assertManifold !== false) {\n assertManifold(result.positions, result.indices)\n }\n return result\n}\n"]}
@@ -2,15 +2,15 @@
2
2
  * Rigid transform application (engine-side, P6).
3
3
  *
4
4
  * Applies a face_mate assembly transform to mesh vertices (bake).
5
- * Math is identical to stdlib/compound.applyTransform and brep/brep-ops
5
+ * Math is identical to api/compound.applyTransform and brep/brep-ops
6
6
  * applyTransformBrep (p' = R·(p − pivot) + pivot + translation).
7
7
  *
8
8
  * Ownership (engine-library-contract.md §10.1): constraint solving lives in the
9
9
  * library (api/assembly); applying the solved transform to member geometry is
10
10
  * done by the engine during replay (F2: libraries must not query/mutate the DAG).
11
11
  * This module is the engine-side vertex transform — it must not depend on any
12
- * stdlib module (E-b: engine must not import stdlib/compound).
13
- * Public API is unchanged: stdlib/compound still re-exports applyTransform.
12
+ * api module (E-b: engine must not import api/compound).
13
+ * Public API is unchanged: api/compound still re-exports applyTransform.
14
14
  */
15
15
  import type { Shape } from './types.js';
16
16
  /**
@@ -2,15 +2,15 @@
2
2
  * Rigid transform application (engine-side, P6).
3
3
  *
4
4
  * Applies a face_mate assembly transform to mesh vertices (bake).
5
- * Math is identical to stdlib/compound.applyTransform and brep/brep-ops
5
+ * Math is identical to api/compound.applyTransform and brep/brep-ops
6
6
  * applyTransformBrep (p' = R·(p − pivot) + pivot + translation).
7
7
  *
8
8
  * Ownership (engine-library-contract.md §10.1): constraint solving lives in the
9
9
  * library (api/assembly); applying the solved transform to member geometry is
10
10
  * done by the engine during replay (F2: libraries must not query/mutate the DAG).
11
11
  * This module is the engine-side vertex transform — it must not depend on any
12
- * stdlib module (E-b: engine must not import stdlib/compound).
13
- * Public API is unchanged: stdlib/compound still re-exports applyTransform.
12
+ * api module (E-b: engine must not import api/compound).
13
+ * Public API is unchanged: api/compound still re-exports applyTransform.
14
14
  */
15
15
  /** Matrix × vector (3x3 * 3). */
16
16
  function mat3MulVec(m, v) {
@@ -1 +1 @@
1
- {"version":3,"file":"rigid-transform.js","sourceRoot":"","sources":["../../src/mesh/rigid-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,iCAAiC;AACjC,SAAS,UAAU,CAAC,CAAW,EAAE,CAA2B;IAC1D,OAAO;QACL,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACxC,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAY,EACZ,UAA4C,EAC5C,KAA+B,EAC/B,WAAqC,EACrC,cAAwB;IAExB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IACjC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAExD,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QACxD,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5D,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC","sourcesContent":["/**\n * Rigid transform application (engine-side, P6).\n *\n * Applies a face_mate assembly transform to mesh vertices (bake).\n * Math is identical to stdlib/compound.applyTransform and brep/brep-ops\n * applyTransformBrep (p' = R·(p − pivot) + pivot + translation).\n *\n * Ownership (engine-library-contract.md §10.1): constraint solving lives in the\n * library (api/assembly); applying the solved transform to member geometry is\n * done by the engine during replay (F2: libraries must not query/mutate the DAG).\n * This module is the engine-side vertex transform — it must not depend on any\n * stdlib module (E-b: engine must not import stdlib/compound).\n * Public API is unchanged: stdlib/compound still re-exports applyTransform.\n */\n\nimport type { Shape } from './types'\n\n/** Matrix × vector (3x3 * 3). */\nfunction mat3MulVec(m: number[], v: [number, number, number]): [number, number, number] {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n ]\n}\n\n/**\n * Apply an assembly transform to a mesh shape: rotate the vertices about the\n * pivot, then translate. The rotation is applied via the precomputed 3x3\n * rotation matrix; the quaternion is carried along for source fidelity.\n * @param shape - the mesh shape to transform.\n * @param quaternion - source rotation as an (x, y, z, w) quaternion (informational).\n * @param pivot - rotation pivot point in mm.\n * @param translation - translation applied after rotation, in mm.\n * @param rotationMatrix - 3x3 rotation matrix as 9 row-major entries.\n * @returns a new shape sharing the same indices with transformed positions.\n */\nexport function applyTransform(\n shape: Shape,\n quaternion: [number, number, number, number],\n pivot: [number, number, number],\n translation: [number, number, number],\n rotationMatrix: number[],\n): Shape {\n const positions = shape.positions\n const newPositions = new Float32Array(positions.length)\n\n for (let i = 0; i < positions.length; i += 3) {\n const px = positions[i] - pivot[0]\n const py = positions[i + 1] - pivot[1]\n const pz = positions[i + 2] - pivot[2]\n\n const rotated = mat3MulVec(rotationMatrix, [px, py, pz])\n\n newPositions[i] = rotated[0] + pivot[0] + translation[0]\n newPositions[i + 1] = rotated[1] + pivot[1] + translation[1]\n newPositions[i + 2] = rotated[2] + pivot[2] + translation[2]\n }\n\n return {\n positions: newPositions,\n indices: shape.indices,\n }\n}\n"]}
1
+ {"version":3,"file":"rigid-transform.js","sourceRoot":"","sources":["../../src/mesh/rigid-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,iCAAiC;AACjC,SAAS,UAAU,CAAC,CAAW,EAAE,CAA2B;IAC1D,OAAO;QACL,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACxC,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAY,EACZ,UAA4C,EAC5C,KAA+B,EAC/B,WAAqC,EACrC,cAAwB;IAExB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IACjC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAEtC,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAExD,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QACxD,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5D,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC","sourcesContent":["/**\n * Rigid transform application (engine-side, P6).\n *\n * Applies a face_mate assembly transform to mesh vertices (bake).\n * Math is identical to api/compound.applyTransform and brep/brep-ops\n * applyTransformBrep (p' = R·(p − pivot) + pivot + translation).\n *\n * Ownership (engine-library-contract.md §10.1): constraint solving lives in the\n * library (api/assembly); applying the solved transform to member geometry is\n * done by the engine during replay (F2: libraries must not query/mutate the DAG).\n * This module is the engine-side vertex transform — it must not depend on any\n * api module (E-b: engine must not import api/compound).\n * Public API is unchanged: api/compound still re-exports applyTransform.\n */\n\nimport type { Shape } from './types'\n\n/** Matrix × vector (3x3 * 3). */\nfunction mat3MulVec(m: number[], v: [number, number, number]): [number, number, number] {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n ]\n}\n\n/**\n * Apply an assembly transform to a mesh shape: rotate the vertices about the\n * pivot, then translate. The rotation is applied via the precomputed 3x3\n * rotation matrix; the quaternion is carried along for source fidelity.\n * @param shape - the mesh shape to transform.\n * @param quaternion - source rotation as an (x, y, z, w) quaternion (informational).\n * @param pivot - rotation pivot point in mm.\n * @param translation - translation applied after rotation, in mm.\n * @param rotationMatrix - 3x3 rotation matrix as 9 row-major entries.\n * @returns a new shape sharing the same indices with transformed positions.\n */\nexport function applyTransform(\n shape: Shape,\n quaternion: [number, number, number, number],\n pivot: [number, number, number],\n translation: [number, number, number],\n rotationMatrix: number[],\n): Shape {\n const positions = shape.positions\n const newPositions = new Float32Array(positions.length)\n\n for (let i = 0; i < positions.length; i += 3) {\n const px = positions[i] - pivot[0]\n const py = positions[i + 1] - pivot[1]\n const pz = positions[i + 2] - pivot[2]\n\n const rotated = mat3MulVec(rotationMatrix, [px, py, pz])\n\n newPositions[i] = rotated[0] + pivot[0] + translation[0]\n newPositions[i + 1] = rotated[1] + pivot[1] + translation[1]\n newPositions[i + 2] = rotated[2] + pivot[2] + translation[2]\n }\n\n return {\n positions: newPositions,\n indices: shape.indices,\n }\n}\n"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * stl-unit — STL unit guessing (moved up from 3d_editor per plan §8 decision 5).
3
+ *
4
+ * STL carries no unit metadata, so the host seeds `cad.load`'s `unit` from a
5
+ * bounding-box volume heuristic. The heuristic itself now lives here (single
6
+ * source of truth in faijs); the host keeps the "visible + correctable + locked
7
+ * by regression test" constraints, but does not re-implement the guess.
8
+ *
9
+ * The thresholds mirror the historical 3d_editor behaviour:
10
+ * volume < 0.008 m³ → 'm' (cube root ≈ 0.2 → likely meters)
11
+ * volume < 8.0 mm³ → 'inch' (cube root ≈ 2.0 → likely inches)
12
+ * otherwise → 'mm'
13
+ *
14
+ * Input is a world-space axis-aligned bounding box. Returns a faijs `UnitName`.
15
+ */
16
+ import type { BoundingBox } from './types.js';
17
+ import type { UnitName } from '../units.js';
18
+ /** Guess the STL source unit from a bounding box volume.
19
+ *
20
+ * @param bbox - the world-space axis-aligned bounding box of the mesh.
21
+ * @returns the guessed faijs `UnitName` ('m' | 'inch' | 'mm').
22
+ */
23
+ export declare function guessStlUnit(bbox: BoundingBox): UnitName;
24
+ //# sourceMappingURL=stl-unit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-unit.d.ts","sourceRoot":"","sources":["../../src/mesh/stl-unit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CASxD"}
@@ -0,0 +1,17 @@
1
+ /** Guess the STL source unit from a bounding box volume.
2
+ *
3
+ * @param bbox - the world-space axis-aligned bounding box of the mesh.
4
+ * @returns the guessed faijs `UnitName` ('m' | 'inch' | 'mm').
5
+ */
6
+ export function guessStlUnit(bbox) {
7
+ const w = bbox.max[0] - bbox.min[0];
8
+ const h = bbox.max[1] - bbox.min[1];
9
+ const d = bbox.max[2] - bbox.min[2];
10
+ const volume = w * h * d;
11
+ if (volume > 0 && volume < 0.008)
12
+ return 'm'; // cube root ≈ 0.2 → meters
13
+ if (volume > 0 && volume < 8.0)
14
+ return 'inch'; // cube root ≈ 2.0 → inches
15
+ return 'mm';
16
+ }
17
+ //# sourceMappingURL=stl-unit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-unit.js","sourceRoot":"","sources":["../../src/mesh/stl-unit.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAExB,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,KAAK;QAAE,OAAO,GAAG,CAAA,CAAG,2BAA2B;IAC1E,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG;QAAG,OAAO,MAAM,CAAA,CAAC,2BAA2B;IAC1E,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["/**\n * stl-unit — STL unit guessing (moved up from 3d_editor per plan §8 decision 5).\n *\n * STL carries no unit metadata, so the host seeds `cad.load`'s `unit` from a\n * bounding-box volume heuristic. The heuristic itself now lives here (single\n * source of truth in faijs); the host keeps the \"visible + correctable + locked\n * by regression test\" constraints, but does not re-implement the guess.\n *\n * The thresholds mirror the historical 3d_editor behaviour:\n * volume < 0.008 m³ → 'm' (cube root ≈ 0.2 → likely meters)\n * volume < 8.0 mm³ → 'inch' (cube root ≈ 2.0 → likely inches)\n * otherwise → 'mm'\n *\n * Input is a world-space axis-aligned bounding box. Returns a faijs `UnitName`.\n */\nimport type { BoundingBox } from './types'\nimport type { UnitName } from '../units'\n\n/** Guess the STL source unit from a bounding box volume.\n *\n * @param bbox - the world-space axis-aligned bounding box of the mesh.\n * @returns the guessed faijs `UnitName` ('m' | 'inch' | 'mm').\n */\nexport function guessStlUnit(bbox: BoundingBox): UnitName {\n const w = bbox.max[0] - bbox.min[0]\n const h = bbox.max[1] - bbox.min[1]\n const d = bbox.max[2] - bbox.min[2]\n const volume = w * h * d\n\n if (volume > 0 && volume < 0.008) return 'm' // cube root ≈ 0.2 → meters\n if (volume > 0 && volume < 8.0) return 'inch' // cube root ≈ 2.0 → inches\n return 'mm'\n}"]}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * threemf-bambu — Bambu Lab private 3MF extensions (moved up from 3d_editor,
3
+ * plan §8 decision 2).
4
+ *
5
+ * Bambu Studio stores non-standard metadata in:
6
+ * - `Metadata/project_settings.config` (JSON — filament colours/types, bed)
7
+ * - `Metadata/model_settings.config` (XML — objects, parts, plates,
8
+ * assemble/import transforms)
9
+ * plus standard 3MF `<metadata>` / thumbnails.
10
+ *
11
+ * This module parses those from an already-unzipped entry table so the host's
12
+ * single `parseThreemf` unzip feeds both the geometry and the Bambu metadata
13
+ * layer (one unzip, two consumer chains — plan D4). Everything here is
14
+ * environment-agnostic: no three.js, no `Blob`, no browser globals — the thumb
15
+ * is returned as bytes and the host wraps it. Matrix helpers return plain 16x4
16
+ * row-major number arrays (host converts to THREE.Matrix4).
17
+ *
18
+ * The parser mirrors the behaviour of the retired 3d_editor `bambu-3mf.ts` and
19
+ * `viewTransforms.ts` so ModelGroup / DesktopLayout keep working unchanged
20
+ * apart from the import source.
21
+ */
22
+ import type { ThreemfArchive } from './threemf-loader.js';
23
+ /** Remove a known 3D file extension from a filename.
24
+ *
25
+ * @param name - the entry name, possibly ending in `.3mf`, `.stl`, `.step`, `.stp`
26
+ * (optionally suffixed `_<n>` for multi-plate objects).
27
+ * @returns the name without the known extension.
28
+ */
29
+ export declare function stripExtension(name: string): string;
30
+ /** A Bambu model object (an `<object>` in model_settings.config). */
31
+ export interface BambuObjectMeta {
32
+ objectId: string;
33
+ name: string;
34
+ extruder: number;
35
+ plateId: number;
36
+ }
37
+ /** A part inside a Bambu object (a `<part>` in model_settings.config). */
38
+ export interface BambuPartMeta {
39
+ partIndex: number;
40
+ objectId: string;
41
+ partId: string;
42
+ name: string;
43
+ extruder: number;
44
+ plateId: number;
45
+ }
46
+ /** Build-plate printable-area size, in millimetres. */
47
+ export interface BambuPlateSize {
48
+ width: number;
49
+ depth: number;
50
+ height: number;
51
+ }
52
+ /** A build plate in the project (id + display name + optional size). */
53
+ export interface BambuPlateInfo {
54
+ plateId: number;
55
+ plateName: string;
56
+ size?: BambuPlateSize;
57
+ }
58
+ /** Model-level descriptive metadata (Title/Designer/Description/License). */
59
+ export interface BambuModelMeta {
60
+ title?: string;
61
+ designer?: string;
62
+ description?: string;
63
+ license?: string;
64
+ }
65
+ /** A `<build>-section `<item> entry: object id and its print transform. */
66
+ export interface BuildItem {
67
+ objectId: string;
68
+ transform: number[] | null;
69
+ }
70
+ /** An assembly pose for a Bambu object (an `<assemble_item` entry). */
71
+ export interface AssembleItemTransform {
72
+ objectId: string;
73
+ /** 12-value 4×3 matrix (same format as build `<item transform>`). */
74
+ transform: number[];
75
+ /** Additional fine-tune translation [tx, ty, tz]. */
76
+ offset: [number, number, number];
77
+ }
78
+ /** A per-part import pose (4×4 matrix from model_settings.config). */
79
+ export interface PartImportTransform {
80
+ objectId: string;
81
+ partId: string;
82
+ /** 16-value 4×4 matrix (row-major). */
83
+ matrix: number[];
84
+ /** Additional import translation offset. */
85
+ sourceOffset: [number, number, number];
86
+ }
87
+ /** Everything parsed from a Bambu-labelled 3MF's private metadata layer. */
88
+ export interface Bambu3mfMetadata {
89
+ filamentColors: string[];
90
+ filamentTypes: string[];
91
+ objects: Map<string, BambuObjectMeta>;
92
+ parts: BambuPartMeta[];
93
+ plates: Map<number, BambuPlateInfo>;
94
+ modelMeta?: BambuModelMeta;
95
+ metadataEntries: Array<{
96
+ name: string;
97
+ value: string;
98
+ }>;
99
+ /** Raw thumbnail PNG bytes, or undefined when absent. */
100
+ thumbnailBytes?: Uint8Array;
101
+ assembleTransforms?: Map<string, AssembleItemTransform>;
102
+ importTransforms?: Map<string, PartImportTransform>;
103
+ buildItems?: BuildItem[];
104
+ }
105
+ /** Parse `<build>` section object IDs and transforms from 3D/3dmodel.model XML.
106
+ *
107
+ * @param xml - the raw 3D model XML text.
108
+ * @returns the build items (objectId + optional print transform).
109
+ */
110
+ export declare function parse3mfBuild(xml: string): BuildItem[];
111
+ /** Parse model-level `<metadata name="...">…</metadata>` tags (3MF standard).
112
+ *
113
+ * @param xml - the raw 3D model XML text.
114
+ * @returns the recognised model meta fields plus every raw metadata entry.
115
+ */
116
+ export declare function parseModelMeta(xml: string): {
117
+ modelMeta: BambuModelMeta | undefined;
118
+ metadataEntries: Array<{
119
+ name: string;
120
+ value: string;
121
+ }>;
122
+ };
123
+ /** Extract a standard 3MF thumbnail PNG from an entry table (raw bytes).
124
+ *
125
+ * @param entries - the unzipped 3MF entry table (path -> bytes).
126
+ * @returns the PNG bytes of the first matching thumbnail, or undefined.
127
+ */
128
+ export declare function extractThumbnailBytes(entries: Map<string, Uint8Array>): Uint8Array | undefined;
129
+ /** Parse Bambu Lab metadata from an already-unzipped entry table.
130
+ *
131
+ * @param extraEntries - the 3MF entry table excluding the geometry model shared
132
+ * with `parseThreemf` (project_settings / model_settings configs + thumbnails).
133
+ * @returns the resolved `Bambu3mfMetadata`.
134
+ */
135
+ export declare function parseBambu3mfFromEntries(extraEntries: Map<string, Uint8Array>): Bambu3mfMetadata;
136
+ /** Parse Bambu metadata from a `ThreemfArchive`'s `extraEntries`.
137
+ *
138
+ * @param archive - a `ThreemfArchive` produced by `parseThreemf`.
139
+ * @returns the resolved `Bambu3mfMetadata`.
140
+ */
141
+ export declare function parseBambu3mfFromArchive(archive: ThreemfArchive): Bambu3mfMetadata;
142
+ //# sourceMappingURL=threemf-bambu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threemf-bambu.d.ts","sourceRoot":"","sources":["../../src/mesh/threemf-bambu.ts"],"names":[],"mappings":"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"}