@ifc-lite/create 3.2.0 → 5.1.0

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 (426) hide show
  1. package/README.md +43 -0
  2. package/dist/in-store/align-boxes.d.ts +38 -0
  3. package/dist/in-store/align-boxes.d.ts.map +1 -0
  4. package/dist/in-store/align-boxes.js +97 -0
  5. package/dist/in-store/align-boxes.js.map +1 -0
  6. package/dist/in-store/anchor.d.ts.map +1 -1
  7. package/dist/in-store/anchor.js +13 -2
  8. package/dist/in-store/anchor.js.map +1 -1
  9. package/dist/in-store/auto-space-detect.d.ts +1 -1
  10. package/dist/in-store/auto-space-detect.js +1 -1
  11. package/dist/in-store/beam.d.ts +10 -1
  12. package/dist/in-store/beam.d.ts.map +1 -1
  13. package/dist/in-store/beam.js +17 -35
  14. package/dist/in-store/beam.js.map +1 -1
  15. package/dist/in-store/column.d.ts +10 -1
  16. package/dist/in-store/column.d.ts.map +1 -1
  17. package/dist/in-store/column.js +23 -22
  18. package/dist/in-store/column.js.map +1 -1
  19. package/dist/in-store/copy-array.d.ts +17 -0
  20. package/dist/in-store/copy-array.d.ts.map +1 -0
  21. package/dist/in-store/copy-array.js +47 -0
  22. package/dist/in-store/copy-array.js.map +1 -0
  23. package/dist/in-store/copy-batch.d.ts +27 -0
  24. package/dist/in-store/copy-batch.d.ts.map +1 -0
  25. package/dist/in-store/copy-batch.js +101 -0
  26. package/dist/in-store/copy-batch.js.map +1 -0
  27. package/dist/in-store/copy-dependent-walk.d.ts +27 -0
  28. package/dist/in-store/copy-dependent-walk.d.ts.map +1 -0
  29. package/dist/in-store/copy-dependent-walk.js +61 -0
  30. package/dist/in-store/copy-dependent-walk.js.map +1 -0
  31. package/dist/in-store/copy-frame.d.ts +53 -0
  32. package/dist/in-store/copy-frame.d.ts.map +1 -0
  33. package/dist/in-store/copy-frame.js +112 -0
  34. package/dist/in-store/copy-frame.js.map +1 -0
  35. package/dist/in-store/copy-product.d.ts +76 -0
  36. package/dist/in-store/copy-product.d.ts.map +1 -0
  37. package/dist/in-store/copy-product.js +318 -0
  38. package/dist/in-store/copy-product.js.map +1 -0
  39. package/dist/in-store/curtain-wall.d.ts +87 -0
  40. package/dist/in-store/curtain-wall.d.ts.map +1 -0
  41. package/dist/in-store/curtain-wall.js +237 -0
  42. package/dist/in-store/curtain-wall.js.map +1 -0
  43. package/dist/in-store/edit/effective-mutation-view.d.ts +6 -0
  44. package/dist/in-store/edit/effective-mutation-view.d.ts.map +1 -0
  45. package/dist/in-store/edit/effective-mutation-view.js +45 -0
  46. package/dist/in-store/edit/effective-mutation-view.js.map +1 -0
  47. package/dist/in-store/edit/effective-storey.d.ts +13 -0
  48. package/dist/in-store/edit/effective-storey.d.ts.map +1 -0
  49. package/dist/in-store/edit/effective-storey.js +36 -0
  50. package/dist/in-store/edit/effective-storey.js.map +1 -0
  51. package/dist/in-store/edit/effective-storeys.d.ts +9 -0
  52. package/dist/in-store/edit/effective-storeys.d.ts.map +1 -0
  53. package/dist/in-store/edit/effective-storeys.js +16 -0
  54. package/dist/in-store/edit/effective-storeys.js.map +1 -0
  55. package/dist/in-store/edit/hosted-opening-refit.d.ts +29 -0
  56. package/dist/in-store/edit/hosted-opening-refit.d.ts.map +1 -0
  57. package/dist/in-store/edit/hosted-opening-refit.js +168 -0
  58. package/dist/in-store/edit/hosted-opening-refit.js.map +1 -0
  59. package/dist/in-store/edit/length-unit-scale.d.ts +24 -0
  60. package/dist/in-store/edit/length-unit-scale.d.ts.map +1 -0
  61. package/dist/in-store/edit/length-unit-scale.js +37 -0
  62. package/dist/in-store/edit/length-unit-scale.js.map +1 -0
  63. package/dist/in-store/edit/linear-element-edit.d.ts +131 -0
  64. package/dist/in-store/edit/linear-element-edit.d.ts.map +1 -0
  65. package/dist/in-store/edit/linear-element-edit.js +259 -0
  66. package/dist/in-store/edit/linear-element-edit.js.map +1 -0
  67. package/dist/in-store/edit/metadata-clone-effective.d.ts +5 -0
  68. package/dist/in-store/edit/metadata-clone-effective.d.ts.map +1 -0
  69. package/dist/in-store/edit/metadata-clone-effective.js +47 -0
  70. package/dist/in-store/edit/metadata-clone-effective.js.map +1 -0
  71. package/dist/in-store/edit/metadata-clone.d.ts +40 -0
  72. package/dist/in-store/edit/metadata-clone.d.ts.map +1 -0
  73. package/dist/in-store/edit/metadata-clone.js +107 -0
  74. package/dist/in-store/edit/metadata-clone.js.map +1 -0
  75. package/dist/in-store/edit/placement-core.d.ts +140 -0
  76. package/dist/in-store/edit/placement-core.d.ts.map +1 -0
  77. package/dist/in-store/edit/placement-core.js +317 -0
  78. package/dist/in-store/edit/placement-core.js.map +1 -0
  79. package/dist/in-store/edit/polygon-clip.d.ts +58 -0
  80. package/dist/in-store/edit/polygon-clip.d.ts.map +1 -0
  81. package/dist/in-store/edit/polygon-clip.js +153 -0
  82. package/dist/in-store/edit/polygon-clip.js.map +1 -0
  83. package/dist/in-store/edit/read-profile.d.ts +6 -0
  84. package/dist/in-store/edit/read-profile.d.ts.map +1 -0
  85. package/dist/in-store/edit/read-profile.js +95 -0
  86. package/dist/in-store/edit/read-profile.js.map +1 -0
  87. package/dist/in-store/edit/slab-edit-frame.d.ts +40 -0
  88. package/dist/in-store/edit/slab-edit-frame.d.ts.map +1 -0
  89. package/dist/in-store/edit/slab-edit-frame.js +146 -0
  90. package/dist/in-store/edit/slab-edit-frame.js.map +1 -0
  91. package/dist/in-store/edit/slab-edit.d.ts +112 -0
  92. package/dist/in-store/edit/slab-edit.d.ts.map +1 -0
  93. package/dist/in-store/edit/slab-edit.js +275 -0
  94. package/dist/in-store/edit/slab-edit.js.map +1 -0
  95. package/dist/in-store/edit/slab-opening-carry.d.ts +10 -0
  96. package/dist/in-store/edit/slab-opening-carry.d.ts.map +1 -0
  97. package/dist/in-store/edit/slab-opening-carry.js +65 -0
  98. package/dist/in-store/edit/slab-opening-carry.js.map +1 -0
  99. package/dist/in-store/edit/split-guid.d.ts +29 -0
  100. package/dist/in-store/edit/split-guid.d.ts.map +1 -0
  101. package/dist/in-store/edit/split-guid.js +64 -0
  102. package/dist/in-store/edit/split-guid.js.map +1 -0
  103. package/dist/in-store/edit/split-target.d.ts +90 -0
  104. package/dist/in-store/edit/split-target.d.ts.map +1 -0
  105. package/dist/in-store/edit/split-target.js +116 -0
  106. package/dist/in-store/edit/split-target.js.map +1 -0
  107. package/dist/in-store/edit/target.d.ts +8 -0
  108. package/dist/in-store/edit/target.d.ts.map +1 -0
  109. package/dist/in-store/edit/target.js +5 -0
  110. package/dist/in-store/edit/target.js.map +1 -0
  111. package/dist/in-store/edit/trim-extend-geometry.d.ts +99 -0
  112. package/dist/in-store/edit/trim-extend-geometry.d.ts.map +1 -0
  113. package/dist/in-store/edit/trim-extend-geometry.js +105 -0
  114. package/dist/in-store/edit/trim-extend-geometry.js.map +1 -0
  115. package/dist/in-store/edit/wall-axis-edit.d.ts +16 -0
  116. package/dist/in-store/edit/wall-axis-edit.d.ts.map +1 -0
  117. package/dist/in-store/edit/wall-axis-edit.js +40 -0
  118. package/dist/in-store/edit/wall-axis-edit.js.map +1 -0
  119. package/dist/in-store/edit/wall-edit.d.ts +157 -0
  120. package/dist/in-store/edit/wall-edit.d.ts.map +1 -0
  121. package/dist/in-store/edit/wall-edit.js +276 -0
  122. package/dist/in-store/edit/wall-edit.js.map +1 -0
  123. package/dist/in-store/edit/wall-hosted-cuts.d.ts +35 -0
  124. package/dist/in-store/edit/wall-hosted-cuts.d.ts.map +1 -0
  125. package/dist/in-store/edit/wall-hosted-cuts.js +27 -0
  126. package/dist/in-store/edit/wall-hosted-cuts.js.map +1 -0
  127. package/dist/in-store/edit/wall-opening-reassign.d.ts +18 -0
  128. package/dist/in-store/edit/wall-opening-reassign.d.ts.map +1 -0
  129. package/dist/in-store/edit/wall-opening-reassign.js +50 -0
  130. package/dist/in-store/edit/wall-opening-reassign.js.map +1 -0
  131. package/dist/in-store/element-align.d.ts +13 -0
  132. package/dist/in-store/element-align.d.ts.map +1 -0
  133. package/dist/in-store/element-align.js +90 -0
  134. package/dist/in-store/element-align.js.map +1 -0
  135. package/dist/in-store/element-replacement.d.ts +26 -0
  136. package/dist/in-store/element-replacement.d.ts.map +1 -0
  137. package/dist/in-store/element-replacement.js +68 -0
  138. package/dist/in-store/element-replacement.js.map +1 -0
  139. package/dist/in-store/element-size-edit.d.ts +40 -0
  140. package/dist/in-store/element-size-edit.d.ts.map +1 -0
  141. package/dist/in-store/element-size-edit.js +103 -0
  142. package/dist/in-store/element-size-edit.js.map +1 -0
  143. package/dist/in-store/element-split-axis.d.ts +6 -0
  144. package/dist/in-store/element-split-axis.d.ts.map +1 -0
  145. package/dist/in-store/element-split-axis.js +87 -0
  146. package/dist/in-store/element-split-axis.js.map +1 -0
  147. package/dist/in-store/element-split-joined.d.ts +13 -0
  148. package/dist/in-store/element-split-joined.d.ts.map +1 -0
  149. package/dist/in-store/element-split-joined.js +74 -0
  150. package/dist/in-store/element-split-joined.js.map +1 -0
  151. package/dist/in-store/element-split-placement.d.ts +19 -0
  152. package/dist/in-store/element-split-placement.d.ts.map +1 -0
  153. package/dist/in-store/element-split-placement.js +48 -0
  154. package/dist/in-store/element-split-placement.js.map +1 -0
  155. package/dist/in-store/element-split-slab.d.ts +19 -0
  156. package/dist/in-store/element-split-slab.d.ts.map +1 -0
  157. package/dist/in-store/element-split-slab.js +86 -0
  158. package/dist/in-store/element-split-slab.js.map +1 -0
  159. package/dist/in-store/element-split.d.ts +49 -0
  160. package/dist/in-store/element-split.d.ts.map +1 -0
  161. package/dist/in-store/element-split.js +52 -0
  162. package/dist/in-store/element-split.js.map +1 -0
  163. package/dist/in-store/element-transform-edit.d.ts +33 -0
  164. package/dist/in-store/element-transform-edit.d.ts.map +1 -0
  165. package/dist/in-store/element-transform-edit.js +97 -0
  166. package/dist/in-store/element-transform-edit.js.map +1 -0
  167. package/dist/in-store/element-transform-frames.d.ts +58 -0
  168. package/dist/in-store/element-transform-frames.d.ts.map +1 -0
  169. package/dist/in-store/element-transform-frames.js +110 -0
  170. package/dist/in-store/element-transform-frames.js.map +1 -0
  171. package/dist/in-store/element-transform-joins.d.ts +4 -0
  172. package/dist/in-store/element-transform-joins.d.ts.map +1 -0
  173. package/dist/in-store/element-transform-joins.js +62 -0
  174. package/dist/in-store/element-transform-joins.js.map +1 -0
  175. package/dist/in-store/element-transform-plan.d.ts +38 -0
  176. package/dist/in-store/element-transform-plan.d.ts.map +1 -0
  177. package/dist/in-store/element-transform-plan.js +115 -0
  178. package/dist/in-store/element-transform-plan.js.map +1 -0
  179. package/dist/in-store/element-trim-extend.d.ts +25 -0
  180. package/dist/in-store/element-trim-extend.d.ts.map +1 -0
  181. package/dist/in-store/element-trim-extend.js +97 -0
  182. package/dist/in-store/element-trim-extend.js.map +1 -0
  183. package/dist/in-store/extract-grids.d.ts +36 -0
  184. package/dist/in-store/extract-grids.d.ts.map +1 -0
  185. package/dist/in-store/extract-grids.js +220 -0
  186. package/dist/in-store/extract-grids.js.map +1 -0
  187. package/dist/in-store/extract-walls.d.ts +12 -23
  188. package/dist/in-store/extract-walls.d.ts.map +1 -1
  189. package/dist/in-store/extract-walls.js +6 -69
  190. package/dist/in-store/extract-walls.js.map +1 -1
  191. package/dist/in-store/generate-spaces.d.ts +1 -1
  192. package/dist/in-store/grid-column.d.ts +23 -0
  193. package/dist/in-store/grid-column.d.ts.map +1 -0
  194. package/dist/in-store/grid-column.js +73 -0
  195. package/dist/in-store/grid-column.js.map +1 -0
  196. package/dist/in-store/grid-intersection-read.d.ts +10 -0
  197. package/dist/in-store/grid-intersection-read.d.ts.map +1 -0
  198. package/dist/in-store/grid-intersection-read.js +45 -0
  199. package/dist/in-store/grid-intersection-read.js.map +1 -0
  200. package/dist/in-store/grid.d.ts +124 -0
  201. package/dist/in-store/grid.d.ts.map +1 -0
  202. package/dist/in-store/grid.js +204 -0
  203. package/dist/in-store/grid.js.map +1 -0
  204. package/dist/in-store/group-evidence.d.ts +49 -0
  205. package/dist/in-store/group-evidence.d.ts.map +1 -0
  206. package/dist/in-store/group-evidence.js +111 -0
  207. package/dist/in-store/group-evidence.js.map +1 -0
  208. package/dist/in-store/group-graph.d.ts +51 -0
  209. package/dist/in-store/group-graph.d.ts.map +1 -0
  210. package/dist/in-store/group-graph.js +213 -0
  211. package/dist/in-store/group-graph.js.map +1 -0
  212. package/dist/in-store/group.d.ts +34 -0
  213. package/dist/in-store/group.d.ts.map +1 -0
  214. package/dist/in-store/group.js +181 -0
  215. package/dist/in-store/group.js.map +1 -0
  216. package/dist/in-store/host-geometry-frame.d.ts +48 -0
  217. package/dist/in-store/host-geometry-frame.d.ts.map +1 -0
  218. package/dist/in-store/host-geometry-frame.js +190 -0
  219. package/dist/in-store/host-geometry-frame.js.map +1 -0
  220. package/dist/in-store/hosted-element-edit.d.ts +29 -0
  221. package/dist/in-store/hosted-element-edit.d.ts.map +1 -0
  222. package/dist/in-store/hosted-element-edit.js +120 -0
  223. package/dist/in-store/hosted-element-edit.js.map +1 -0
  224. package/dist/in-store/hosted-element.d.ts +41 -0
  225. package/dist/in-store/hosted-element.d.ts.map +1 -0
  226. package/dist/in-store/hosted-element.js +124 -0
  227. package/dist/in-store/hosted-element.js.map +1 -0
  228. package/dist/in-store/hosted-fill-read.d.ts +56 -0
  229. package/dist/in-store/hosted-fill-read.d.ts.map +1 -0
  230. package/dist/in-store/hosted-fill-read.js +197 -0
  231. package/dist/in-store/hosted-fill-read.js.map +1 -0
  232. package/dist/in-store/hosted-global-id.d.ts +8 -0
  233. package/dist/in-store/hosted-global-id.d.ts.map +1 -0
  234. package/dist/in-store/hosted-global-id.js +53 -0
  235. package/dist/in-store/hosted-global-id.js.map +1 -0
  236. package/dist/in-store/hosted-placement-edit.d.ts +30 -0
  237. package/dist/in-store/hosted-placement-edit.d.ts.map +1 -0
  238. package/dist/in-store/hosted-placement-edit.js +123 -0
  239. package/dist/in-store/hosted-placement-edit.js.map +1 -0
  240. package/dist/in-store/hosted-scale-chain.d.ts +12 -0
  241. package/dist/in-store/hosted-scale-chain.d.ts.map +1 -0
  242. package/dist/in-store/hosted-scale-chain.js +74 -0
  243. package/dist/in-store/hosted-scale-chain.js.map +1 -0
  244. package/dist/in-store/hosted-shape-edit.d.ts +9 -0
  245. package/dist/in-store/hosted-shape-edit.d.ts.map +1 -0
  246. package/dist/in-store/hosted-shape-edit.js +79 -0
  247. package/dist/in-store/hosted-shape-edit.js.map +1 -0
  248. package/dist/in-store/index.d.ts +66 -0
  249. package/dist/in-store/index.d.ts.map +1 -0
  250. package/dist/in-store/index.js +71 -0
  251. package/dist/in-store/index.js.map +1 -0
  252. package/dist/in-store/linear-profile-frame.d.ts +10 -0
  253. package/dist/in-store/linear-profile-frame.d.ts.map +1 -0
  254. package/dist/in-store/linear-profile-frame.js +17 -0
  255. package/dist/in-store/linear-profile-frame.js.map +1 -0
  256. package/dist/in-store/material.d.ts.map +1 -1
  257. package/dist/in-store/material.js +17 -6
  258. package/dist/in-store/material.js.map +1 -1
  259. package/dist/in-store/member.d.ts +8 -2
  260. package/dist/in-store/member.d.ts.map +1 -1
  261. package/dist/in-store/member.js +15 -21
  262. package/dist/in-store/member.js.map +1 -1
  263. package/dist/in-store/ordinary-element.d.ts +47 -0
  264. package/dist/in-store/ordinary-element.d.ts.map +1 -0
  265. package/dist/in-store/ordinary-element.js +38 -0
  266. package/dist/in-store/ordinary-element.js.map +1 -0
  267. package/dist/in-store/placement-frame.d.ts +15 -5
  268. package/dist/in-store/placement-frame.d.ts.map +1 -1
  269. package/dist/in-store/placement-frame.js +25 -36
  270. package/dist/in-store/placement-frame.js.map +1 -1
  271. package/dist/in-store/profile.d.ts +141 -0
  272. package/dist/in-store/profile.d.ts.map +1 -0
  273. package/dist/in-store/profile.js +174 -0
  274. package/dist/in-store/profile.js.map +1 -0
  275. package/dist/in-store/railing.d.ts +65 -0
  276. package/dist/in-store/railing.d.ts.map +1 -0
  277. package/dist/in-store/railing.js +112 -0
  278. package/dist/in-store/railing.js.map +1 -0
  279. package/dist/in-store/rel-connects-path.d.ts +43 -0
  280. package/dist/in-store/rel-connects-path.d.ts.map +1 -0
  281. package/dist/in-store/rel-connects-path.js +65 -0
  282. package/dist/in-store/rel-connects-path.js.map +1 -0
  283. package/dist/in-store/resolve-anchor.d.ts +3 -2
  284. package/dist/in-store/resolve-anchor.d.ts.map +1 -1
  285. package/dist/in-store/resolve-anchor.js +7 -5
  286. package/dist/in-store/resolve-anchor.js.map +1 -1
  287. package/dist/in-store/resolve-host.d.ts +12 -1
  288. package/dist/in-store/resolve-host.d.ts.map +1 -1
  289. package/dist/in-store/resolve-host.js +169 -85
  290. package/dist/in-store/resolve-host.js.map +1 -1
  291. package/dist/in-store/resolve-relations.d.ts +3 -1
  292. package/dist/in-store/resolve-relations.d.ts.map +1 -1
  293. package/dist/in-store/resolve-relations.js +8 -3
  294. package/dist/in-store/resolve-relations.js.map +1 -1
  295. package/dist/in-store/resolve-source.d.ts.map +1 -1
  296. package/dist/in-store/resolve-source.js +39 -59
  297. package/dist/in-store/resolve-source.js.map +1 -1
  298. package/dist/in-store/room-candidates.d.ts +58 -0
  299. package/dist/in-store/room-candidates.d.ts.map +1 -0
  300. package/dist/in-store/room-candidates.js +135 -0
  301. package/dist/in-store/room-candidates.js.map +1 -0
  302. package/dist/in-store/room-creation-plan.d.ts +16 -0
  303. package/dist/in-store/room-creation-plan.d.ts.map +1 -0
  304. package/dist/in-store/room-creation-plan.js +28 -0
  305. package/dist/in-store/room-creation-plan.js.map +1 -0
  306. package/dist/in-store/room-floor-height.d.ts +24 -0
  307. package/dist/in-store/room-floor-height.d.ts.map +1 -0
  308. package/dist/in-store/room-floor-height.js +32 -0
  309. package/dist/in-store/room-floor-height.js.map +1 -0
  310. package/dist/in-store/room-footprint-native.d.ts +19 -0
  311. package/dist/in-store/room-footprint-native.d.ts.map +1 -0
  312. package/dist/in-store/room-footprint-native.js +117 -0
  313. package/dist/in-store/room-footprint-native.js.map +1 -0
  314. package/dist/in-store/room-layout-cache.d.ts +23 -0
  315. package/dist/in-store/room-layout-cache.d.ts.map +1 -0
  316. package/dist/in-store/room-layout-cache.js +84 -0
  317. package/dist/in-store/room-layout-cache.js.map +1 -0
  318. package/dist/in-store/room-layout-core.d.ts +68 -0
  319. package/dist/in-store/room-layout-core.d.ts.map +1 -0
  320. package/dist/in-store/room-layout-core.js +153 -0
  321. package/dist/in-store/room-layout-core.js.map +1 -0
  322. package/dist/in-store/room-population.d.ts +5 -0
  323. package/dist/in-store/room-population.d.ts.map +1 -0
  324. package/dist/in-store/room-population.js +28 -0
  325. package/dist/in-store/room-population.js.map +1 -0
  326. package/dist/in-store/room-space-meshes.d.ts +15 -0
  327. package/dist/in-store/room-space-meshes.d.ts.map +1 -0
  328. package/dist/in-store/room-space-meshes.js +38 -0
  329. package/dist/in-store/room-space-meshes.js.map +1 -0
  330. package/dist/in-store/room-store.d.ts +55 -0
  331. package/dist/in-store/room-store.d.ts.map +1 -0
  332. package/dist/in-store/room-store.js +173 -0
  333. package/dist/in-store/room-store.js.map +1 -0
  334. package/dist/in-store/room-storey-elevation.d.ts +5 -0
  335. package/dist/in-store/room-storey-elevation.d.ts.map +1 -0
  336. package/dist/in-store/room-storey-elevation.js +42 -0
  337. package/dist/in-store/room-storey-elevation.js.map +1 -0
  338. package/dist/in-store/room-storey-frame.d.ts +47 -0
  339. package/dist/in-store/room-storey-frame.d.ts.map +1 -0
  340. package/dist/in-store/room-storey-frame.js +48 -0
  341. package/dist/in-store/room-storey-frame.js.map +1 -0
  342. package/dist/in-store/room-wall-rects.d.ts +117 -0
  343. package/dist/in-store/room-wall-rects.d.ts.map +1 -0
  344. package/dist/in-store/room-wall-rects.js +157 -0
  345. package/dist/in-store/room-wall-rects.js.map +1 -0
  346. package/dist/in-store/schema-attributes.d.ts +8 -3
  347. package/dist/in-store/schema-attributes.d.ts.map +1 -1
  348. package/dist/in-store/schema-attributes.js +18 -9
  349. package/dist/in-store/schema-attributes.js.map +1 -1
  350. package/dist/in-store/slab.d.ts.map +1 -1
  351. package/dist/in-store/slab.js +1 -4
  352. package/dist/in-store/slab.js.map +1 -1
  353. package/dist/in-store/space-footprints.d.ts +55 -0
  354. package/dist/in-store/space-footprints.d.ts.map +1 -0
  355. package/dist/in-store/space-footprints.js +260 -0
  356. package/dist/in-store/space-footprints.js.map +1 -0
  357. package/dist/in-store/space.d.ts.map +1 -1
  358. package/dist/in-store/space.js +15 -3
  359. package/dist/in-store/space.js.map +1 -1
  360. package/dist/in-store/spatial-children.d.ts +1 -1
  361. package/dist/in-store/spatial-children.js +1 -1
  362. package/dist/in-store/stair-edit.d.ts +24 -0
  363. package/dist/in-store/stair-edit.d.ts.map +1 -0
  364. package/dist/in-store/stair-edit.js +190 -0
  365. package/dist/in-store/stair-edit.js.map +1 -0
  366. package/dist/in-store/stair-removal.d.ts +17 -0
  367. package/dist/in-store/stair-removal.d.ts.map +1 -0
  368. package/dist/in-store/stair-removal.js +134 -0
  369. package/dist/in-store/stair-removal.js.map +1 -0
  370. package/dist/in-store/stair.d.ts +58 -0
  371. package/dist/in-store/stair.d.ts.map +1 -0
  372. package/dist/in-store/stair.js +156 -0
  373. package/dist/in-store/stair.js.map +1 -0
  374. package/dist/in-store/storey-plan-frame.d.ts +2 -1
  375. package/dist/in-store/storey-plan-frame.d.ts.map +1 -1
  376. package/dist/in-store/storey-plan-frame.js +20 -11
  377. package/dist/in-store/storey-plan-frame.js.map +1 -1
  378. package/dist/in-store/storey-reassignment-plan.d.ts +53 -0
  379. package/dist/in-store/storey-reassignment-plan.d.ts.map +1 -0
  380. package/dist/in-store/storey-reassignment-plan.js +237 -0
  381. package/dist/in-store/storey-reassignment-plan.js.map +1 -0
  382. package/dist/in-store/storey-reassignment.d.ts +8 -0
  383. package/dist/in-store/storey-reassignment.d.ts.map +1 -0
  384. package/dist/in-store/storey-reassignment.js +52 -0
  385. package/dist/in-store/storey-reassignment.js.map +1 -0
  386. package/dist/in-store/trim-extend-plan.d.ts +27 -0
  387. package/dist/in-store/trim-extend-plan.d.ts.map +1 -0
  388. package/dist/in-store/trim-extend-plan.js +49 -0
  389. package/dist/in-store/trim-extend-plan.js.map +1 -0
  390. package/dist/in-store/wall-join-apply.d.ts +74 -0
  391. package/dist/in-store/wall-join-apply.d.ts.map +1 -0
  392. package/dist/in-store/wall-join-apply.js +137 -0
  393. package/dist/in-store/wall-join-apply.js.map +1 -0
  394. package/dist/in-store/wall-join-edit.d.ts +53 -0
  395. package/dist/in-store/wall-join-edit.d.ts.map +1 -0
  396. package/dist/in-store/wall-join-edit.js +251 -0
  397. package/dist/in-store/wall-join-edit.js.map +1 -0
  398. package/dist/in-store/wall-join-read.d.ts +60 -0
  399. package/dist/in-store/wall-join-read.d.ts.map +1 -0
  400. package/dist/in-store/wall-join-read.js +230 -0
  401. package/dist/in-store/wall-join-read.js.map +1 -0
  402. package/dist/in-store/wall-join.d.ts +122 -0
  403. package/dist/in-store/wall-join.d.ts.map +1 -0
  404. package/dist/in-store/wall-join.js +231 -0
  405. package/dist/in-store/wall-join.js.map +1 -0
  406. package/dist/in-store/wall-opening-fit.d.ts +11 -0
  407. package/dist/in-store/wall-opening-fit.d.ts.map +1 -0
  408. package/dist/in-store/wall-opening-fit.js +27 -0
  409. package/dist/in-store/wall-opening-fit.js.map +1 -0
  410. package/dist/in-store/wall-section-edit.d.ts +16 -0
  411. package/dist/in-store/wall-section-edit.d.ts.map +1 -0
  412. package/dist/in-store/wall-section-edit.js +75 -0
  413. package/dist/in-store/wall-section-edit.js.map +1 -0
  414. package/dist/in-store/wall-size-edit.d.ts +29 -0
  415. package/dist/in-store/wall-size-edit.d.ts.map +1 -0
  416. package/dist/in-store/wall-size-edit.js +65 -0
  417. package/dist/in-store/wall-size-edit.js.map +1 -0
  418. package/dist/in-store/wall.d.ts +32 -0
  419. package/dist/in-store/wall.d.ts.map +1 -1
  420. package/dist/in-store/wall.js +77 -13
  421. package/dist/in-store/wall.js.map +1 -1
  422. package/dist/index.d.ts +25 -38
  423. package/dist/index.d.ts.map +1 -1
  424. package/dist/index.js +25 -40
  425. package/dist/index.js.map +1 -1
  426. package/package.json +9 -8
@@ -0,0 +1,251 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Editing joined walls in the store (#6232 B2): join two walls that are
6
+ * already there, and move wall ends with their joins following.
7
+ *
8
+ * - `joinWallsInStore` reads both walls, then writes the join. Two walls that
9
+ * are already joined get the new `IfcRelConnectsPathElements` in place of
10
+ * the old one, never a second beside it.
11
+ * - `reshapeWallsInStore` gives walls new axis ends. A dragged corner brings
12
+ * the walls joined at that end along, changed ends are made square while
13
+ * unchanged ends retain their cuts, and every affected join is recomputed. A join that
14
+ * no longer holds (the axes no longer meet) is removed and the wall that did
15
+ * not move stops square at its own end.
16
+ *
17
+ * Both write through the editor only. Joining is atomic; reshaping runs inside
18
+ * the caller's transaction. Hosts record either as one undo step. Every length
19
+ * in and out is metres, storey-local.
20
+ */
21
+ import { editOwnershipRefusal, expandAffectedSet } from '@ifc-lite/export';
22
+ import { toNativeLength } from './anchor.js';
23
+ import { resolveAuthoringAnchor } from './resolve-relations.js';
24
+ import { AnchorEntityReader } from './resolve-anchor.js';
25
+ import { applyWallJoinToStore, rewriteWall } from './wall-join-apply.js';
26
+ import { readWallJoinRels, readWallJoinTarget } from './wall-join-read.js';
27
+ import { computeWallJoin, reshapeWallAxis } from './wall-join.js';
28
+ import { assertWallOpeningsFit } from './wall-opening-fit.js';
29
+ /** What a join write needs from the model: the authoring anchor plus the context an `Axis` representation lives in. */
30
+ export function resolveWallJoinAnchor(store, view) {
31
+ const base = resolveAuthoringAnchor(store, view);
32
+ const reader = new AnchorEntityReader(store, view);
33
+ const axisContextId = reader.contextId('axis', reader.rootContextId());
34
+ if (axisContextId === null)
35
+ throw new Error('resolveWallJoinAnchor: no IfcGeometricRepresentationContext (or Axis subcontext) found in store');
36
+ return { ownerHistoryId: base.ownerHistoryId, schema: base.schema, lengthUnitScale: base.lengthUnitScale, axisContextId };
37
+ }
38
+ function mustRead(store, editor, wallId, scale, op) {
39
+ const read = readWallJoinTarget(store, editor.getMutationView(), wallId, scale);
40
+ if (!read)
41
+ throw new Error(`${op}: #${wallId} is not a straight wall with a body this editor can rewrite`);
42
+ return read;
43
+ }
44
+ /**
45
+ * Join walls `aId` and `bId`. See `computeWallJoin` for the geometry and
46
+ * options. When the pair is already joined, the old relationship is removed
47
+ * (its name and priorities carried over) and the wall that ran through then
48
+ * still does, unless `options.priority` says otherwise. Nothing is written
49
+ * when the join is refused.
50
+ */
51
+ export function joinWallsInStore(editor, store, anchor, aId, bId, options = {}) {
52
+ return editor.runAtomic(draft => joinWalls(draft, store, anchor, aId, bId, options));
53
+ }
54
+ function joinWalls(editor, store, anchor, aId, bId, options) {
55
+ const op = 'joinWallsInStore';
56
+ const a = mustRead(store, editor, aId, anchor.lengthUnitScale ?? 1, op);
57
+ const b = mustRead(store, editor, bId, anchor.lengthUnitScale ?? 1, op);
58
+ if (a.parentPlacementId !== b.parentPlacementId)
59
+ throw new Error(`${op}: walls #${aId} and #${bId} are not placed in the same frame`);
60
+ const existing = readWallJoinRels(store, editor.getMutationView(), new Set([aId, bId]))
61
+ .filter((rel) => (rel.relatingId === aId && rel.relatedId === bId) || (rel.relatingId === bId && rel.relatedId === aId));
62
+ const first = existing[0];
63
+ const priority = options.priority ?? (first ? (first.relatingId === aId ? 'a' : 'b') : undefined);
64
+ const priorities = options.priorities ?? (first
65
+ ? (first.relatingId === aId
66
+ ? { a: first.relatingPriorities, b: first.relatedPriorities }
67
+ : { a: first.relatedPriorities, b: first.relatingPriorities })
68
+ : undefined);
69
+ const joinOptions = { ...options, priority, priorities, Name: options.Name ?? first?.name ?? undefined };
70
+ // Refuse before the old relationship is touched.
71
+ const join = computeWallJoin(a.wall, b.wall, joinOptions);
72
+ assertWallOpeningsFit(store, editor.getMutationView(), a, join.a.wall, anchor.lengthUnitScale ?? 1);
73
+ assertWallOpeningsFit(store, editor.getMutationView(), b, join.b.wall, anchor.lengthUnitScale ?? 1);
74
+ for (const rel of existing)
75
+ editor.removeEntity(rel.relId);
76
+ return { ...applyWallJoinToStore(editor, anchor, a, b, joinOptions), replacedRelIds: existing.map((rel) => rel.relId) };
77
+ }
78
+ const MOVE_EPS = 1e-9;
79
+ const MIN_LENGTH = 1e-6;
80
+ /**
81
+ * Give walls new axis ends and keep every join that touches them current.
82
+ * Refuses (writing nothing) a wall this module cannot read, a wall that would
83
+ * have no length or leave its storey plane is the caller's to check.
84
+ */
85
+ export function reshapeWallsInStore(editor, store, anchor, edits, options = {}) {
86
+ const op = 'reshapeWallsInStore';
87
+ const scale = anchor.lengthUnitScale ?? 1;
88
+ const view = () => editor.getMutationView();
89
+ const targets = new Map();
90
+ const load = (id) => {
91
+ let read = targets.get(id);
92
+ if (!read)
93
+ targets.set(id, (read = mustRead(store, editor, id, scale, op)));
94
+ return read;
95
+ };
96
+ // The requested axes, then the walls a moved corner drags along.
97
+ const axes = new Map();
98
+ for (const edit of edits) {
99
+ const read = load(edit.wallId);
100
+ const start = edit.start ?? read.wall.start;
101
+ const end = edit.end ?? read.wall.end;
102
+ if (![...start, ...end].every(Number.isFinite))
103
+ throw new Error(`${op}: wall #${edit.wallId} has a non-finite end`);
104
+ if (Math.hypot(end[0] - start[0], end[1] - start[1]) < MIN_LENGTH)
105
+ throw new Error(`${op}: wall #${edit.wallId} would have no length`);
106
+ if (edit.thickness !== undefined && !(Number.isFinite(edit.thickness) && edit.thickness > 0)) {
107
+ throw new Error(`${op}: wall #${edit.wallId} thickness must be positive`);
108
+ }
109
+ axes.set(edit.wallId, { start, end, thickness: edit.thickness });
110
+ }
111
+ if (options.moveJoinedEnds) {
112
+ for (const rel of readWallJoinRels(store, view(), new Set(axes.keys()))) {
113
+ for (const [self, other, selfConn, otherConn] of [
114
+ [rel.relatingId, rel.relatedId, rel.relatingConnection, rel.relatedConnection],
115
+ [rel.relatedId, rel.relatingId, rel.relatedConnection, rel.relatingConnection],
116
+ ]) {
117
+ const moved = axes.get(self);
118
+ if (!moved || axes.has(other) || selfConn === 'ATPATH' || otherConn === 'ATPATH')
119
+ continue;
120
+ const from = load(self).wall;
121
+ const key = selfConn === 'ATSTART' ? 'start' : 'end';
122
+ if (Math.hypot(moved[key][0] - from[key][0], moved[key][1] - from[key][1]) <= MOVE_EPS)
123
+ continue;
124
+ const partner = load(other).wall;
125
+ const newAxis = { start: partner.start, end: partner.end };
126
+ newAxis[otherConn === 'ATSTART' ? 'start' : 'end'] = moved[key];
127
+ axes.set(other, newAxis);
128
+ }
129
+ }
130
+ }
131
+ for (const id of axes.keys())
132
+ load(id);
133
+ // Everything that can refuse has run: write. Each moved wall gets a fresh
134
+ // placement point and direction (the old ones may be shared with other
135
+ // walls), retaining supported cuts at unchanged ends on the same direction.
136
+ const rels = readWallJoinRels(store, view(), new Set([...axes.keys(), ...(options.refresh ?? [])]));
137
+ const touched = new Set(axes.keys());
138
+ // A refresh can rewrite either joined wall, including neighbours that did
139
+ // not move. Their solid/shape records must not belong to unrelated products.
140
+ for (const rel of rels) {
141
+ readOrNull(store, editor, targets, rel.relatingId, scale);
142
+ readOrNull(store, editor, targets, rel.relatedId, scale);
143
+ }
144
+ const bodyIds = [...targets.values()].flatMap(read => [read.solidId, read.productShapeId]);
145
+ const ownership = editOwnershipRefusal(store, view(), bodyIds, new Set(targets.keys()));
146
+ if (ownership)
147
+ throw new Error(`${op}: ${ownership}`);
148
+ const placementIds = [...axes].flatMap(([id, ends]) => holdsPlacement(load(id).wall, ends.start, ends.end) ? [] : [load(id).axisPlacementId]);
149
+ const placementOwnership = editOwnershipRefusal(store, view(), placementIds, expandAffectedSet(store, view(), targets.keys(), 'hostsChanged'));
150
+ if (placementOwnership)
151
+ throw new Error(`${op}: ${placementOwnership}`);
152
+ for (const [id, { start, end, thickness }] of axes)
153
+ targets.set(id, writeAxis(editor, anchor, load(id), start, end, thickness));
154
+ // Recompute every join that touches a moved wall: the joined end snaps to the
155
+ // crossing and is cut to the other wall's face. The relating wall runs through.
156
+ const relIds = [];
157
+ const droppedRelIds = [];
158
+ for (const rel of rels) {
159
+ const a = readOrNull(store, editor, targets, rel.relatingId, scale);
160
+ const b = readOrNull(store, editor, targets, rel.relatedId, scale);
161
+ if (!a || !b)
162
+ continue;
163
+ const joinOptions = joinOptionsOf(rel, options.tolerance);
164
+ try {
165
+ computeWallJoin(a.wall, b.wall, joinOptions);
166
+ }
167
+ catch {
168
+ // The walls no longer meet: the join goes, and a wall that did not move stops square at that end.
169
+ editor.removeEntity(rel.relId);
170
+ droppedRelIds.push(rel.relId);
171
+ for (const [wall, connection] of [[a, rel.relatingConnection], [b, rel.relatedConnection]]) {
172
+ if (axes.has(wall.wallId) || connection === 'ATPATH')
173
+ continue;
174
+ targets.set(wall.wallId, squareEnd(editor, anchor, wall, connection));
175
+ touched.add(wall.wallId);
176
+ }
177
+ continue;
178
+ }
179
+ editor.removeEntity(rel.relId);
180
+ const written = applyWallJoinToStore(editor, anchor, a, b, joinOptions);
181
+ relIds.push(written.relId);
182
+ for (const [id, next] of [[a.wallId, written.a], [b.wallId, written.b]]) {
183
+ targets.set(id, { ...load(id), ...next });
184
+ touched.add(id);
185
+ }
186
+ }
187
+ return { walls: [...touched], relIds, droppedRelIds };
188
+ }
189
+ function readOrNull(store, editor, targets, id, scale) {
190
+ const known = targets.get(id);
191
+ if (known)
192
+ return known;
193
+ const read = readWallJoinTarget(store, editor.getMutationView(), id, scale);
194
+ if (read)
195
+ targets.set(id, read);
196
+ return read;
197
+ }
198
+ /** The recompute options of an existing join: the relating wall (`a`) keeps running through, its name and priorities stay. */
199
+ function joinOptionsOf(rel, tolerance) {
200
+ return {
201
+ priority: 'a',
202
+ ...(tolerance === undefined ? {} : { tolerance }),
203
+ priorities: { a: rel.relatingPriorities, b: rel.relatedPriorities },
204
+ Name: rel.name ?? undefined,
205
+ };
206
+ }
207
+ /**
208
+ * Move `read` onto the axis `start`..`end`, retaining unchanged end cuts. The placement
209
+ * stays where it is when the start does not move and the direction holds (a
210
+ * far-end drag: the openings hosted in the wall keep their place); otherwise it
211
+ * gets a fresh point and direction at the new start (the old ones may be
212
+ * shared with other walls).
213
+ */
214
+ /** The existing axis writer retains placement when start and direction stay. */
215
+ function holdsPlacement(old, start, end) {
216
+ const oldLength = Math.hypot(old.end[0] - old.start[0], old.end[1] - old.start[1]);
217
+ const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
218
+ return Math.hypot(start[0] - old.start[0], start[1] - old.start[1]) <= MOVE_EPS
219
+ && (((end[0] - start[0]) / length) * ((old.end[0] - old.start[0]) / oldLength)
220
+ + ((end[1] - start[1]) / length) * ((old.end[1] - old.start[1]) / oldLength)) > 1 - 1e-12;
221
+ }
222
+ function writeAxis(editor, anchor, read, start, end, thickness = read.wall.thickness) {
223
+ const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
224
+ const native = (v) => toNativeLength(anchor, v);
225
+ const reshaped = reshapeWallAxis({ ...read.wall, thickness }, start, end);
226
+ const ux = (end[0] - start[0]) / length;
227
+ const uy = (end[1] - start[1]) / length;
228
+ if (holdsPlacement(read.wall, start, end)) {
229
+ return { ...read, ...rewriteWall(editor, anchor, { ...read, wall: reshaped }, reshaped), wall: reshaped, plain: false };
230
+ }
231
+ const point = editor.addEntity('IfcCartesianPoint', [[native(start[0]), native(start[1]), read.location[2]]]).expressId;
232
+ const direction = editor.addEntity('IfcDirection', [[ux, uy, 0]]).expressId;
233
+ editor.setPositionalAttribute(read.axisPlacementId, 0, `#${point}`);
234
+ editor.setPositionalAttribute(read.axisPlacementId, 2, `#${direction}`);
235
+ const moved = rewriteWall(editor, anchor, { ...read, origin: start, wall: reshaped }, reshaped);
236
+ return {
237
+ ...read, ...moved, locationPointId: point, refDirectionId: direction,
238
+ location: [native(start[0]), native(start[1]), read.location[2]], origin: start, wall: reshaped, plain: false,
239
+ };
240
+ }
241
+ /** `read`'s wall with its joined end cut square again. */
242
+ function squareEnd(editor, anchor, read, connection) {
243
+ const { startCut, endCut, ...rest } = read.wall;
244
+ const wall = {
245
+ ...rest,
246
+ ...(connection === 'ATEND' && startCut ? { startCut } : {}),
247
+ ...(connection === 'ATSTART' && endCut ? { endCut } : {}),
248
+ };
249
+ return { ...read, ...rewriteWall(editor, anchor, read, wall), wall };
250
+ }
251
+ //# sourceMappingURL=wall-join-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-join-edit.js","sourceRoot":"","sources":["../../src/in-store/wall-join-edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Read side of the wall joins (#6232 B2): a wall already in the store, source
3
+ * or authored, as the `WallJoinTarget` a join rewrites, and the
4
+ * `IfcRelConnectsPathElements` that tie walls together. Reads go through the
5
+ * mutation overlay, so a wall or join written earlier in the session counts.
6
+ *
7
+ * A wall is readable when it is a straight wall with a placement that names its
8
+ * direction, an extruded body over a rectangle or a four-point polygon (what
9
+ * `addWallToStore` and `applyWallJoinToStore` write), and an optional `Axis`
10
+ * polyline on the wall's own centreline. Anything else reads as null: it can
11
+ * neither be re-shaped nor joined.
12
+ */
13
+ import type { IfcDataStore } from '@ifc-lite/parser';
14
+ import type { MutablePropertyView } from '@ifc-lite/mutations';
15
+ import type { WallJoinTarget } from './wall-join-apply.js';
16
+ import type { WallConnectionType } from './wall-join.js';
17
+ /** A wall as the join tools see it, with the ids and native-unit values a re-shape writes. */
18
+ export interface WallJoinRead extends WallJoinTarget {
19
+ /** IfcAxis2Placement3D of the wall's placement. */
20
+ axisPlacementId: number;
21
+ /** IfcCartesianPoint of the placement's Location. */
22
+ locationPointId: number;
23
+ /** IfcDirection of the placement's RefDirection. */
24
+ refDirectionId: number;
25
+ /** The Location, in the file's native unit. */
26
+ location: [number, number, number];
27
+ /** `PlacementRelTo` of the wall's placement: two walls join only in the same frame. */
28
+ parentPlacementId: number | null;
29
+ /** Extrusion depth in metres, `NaN` when the slot is not a number. */
30
+ height: number;
31
+ /**
32
+ * The body is the plain rectangle `addWallToStore` writes without cuts,
33
+ * offset or axis alignment: the four coupled entities (placement, direction,
34
+ * XDim, profile origin) describe the wall completely.
35
+ */
36
+ plain: boolean;
37
+ }
38
+ export interface WallJoinRel {
39
+ relId: number;
40
+ relatingId: number;
41
+ relatedId: number;
42
+ relatingConnection: WallConnectionType;
43
+ relatedConnection: WallConnectionType;
44
+ relatingPriorities: number[];
45
+ relatedPriorities: number[];
46
+ name: string | null;
47
+ }
48
+ /**
49
+ * Read wall `wallId` as a join target. `lengthUnitScale` is the model's native
50
+ * unit in metres; the target's plan values are metres.
51
+ */
52
+ export declare function readWallJoinTarget(store: IfcDataStore, view: MutablePropertyView | null | undefined, wallId: number, lengthUnitScale: number): WallJoinRead | null;
53
+ /**
54
+ * Every live `IfcRelConnectsPathElements` that touches one of `wallIds` (all
55
+ * of them when omitted). The attribute slots (Relating 5, Related 6,
56
+ * priorities 7 and 8, connection types 9 and 10) are the same in IFC2X3,
57
+ * IFC4 and IFC4X3.
58
+ */
59
+ export declare function readWallJoinRels(store: IfcDataStore, view: MutablePropertyView | null | undefined, wallIds?: ReadonlySet<number>): WallJoinRel[];
60
+ //# sourceMappingURL=wall-join-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-join-read.d.ts","sourceRoot":"","sources":["../../src/in-store/wall-join-read.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAa,kBAAkB,EAA4B,MAAM,gBAAgB,CAAC;AAE9F,8FAA8F;AAC9F,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,uFAAuF;IACvF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAyFD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAC5C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,YAAY,GAAG,IAAI,CA4FrB;AAYD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,WAAW,EAAE,CAoBf"}
@@ -0,0 +1,230 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { AnchorEntityReader } from './resolve-anchor.js';
5
+ const WALL_TYPES = new Set(['IFCWALL', 'IFCWALLSTANDARDCASE']);
6
+ const EPS = 1e-9;
7
+ const CONNECTIONS = ['ATSTART', 'ATEND', 'ATPATH'];
8
+ function refId(value) {
9
+ if (typeof value === 'number' && Number.isInteger(value) && value > 0)
10
+ return value;
11
+ if (typeof value === 'string' && /^#[1-9][0-9]*$/.test(value))
12
+ return Number(value.slice(1));
13
+ return null;
14
+ }
15
+ function numbers(value, min) {
16
+ return Array.isArray(value) && value.length >= min && value.every((v) => typeof v === 'number' && Number.isFinite(v))
17
+ ? value
18
+ : null;
19
+ }
20
+ /** A polyline's 2D points (native), without a repeated closing point; null unless every point is a 2D or 3D IfcCartesianPoint. */
21
+ function polylinePoints(reader, polylineId) {
22
+ const polyline = polylineId === null ? null : reader.entity(polylineId);
23
+ if (polyline?.type.toUpperCase() !== 'IFCPOLYLINE' || !Array.isArray(polyline.attributes[0]))
24
+ return null;
25
+ const points = [];
26
+ for (const ref of polyline.attributes[0]) {
27
+ const id = refId(ref);
28
+ const point = id === null ? null : reader.entity(id);
29
+ const xy = point?.type.toUpperCase() === 'IFCCARTESIANPOINT' ? numbers(point.attributes[0], 2) : null;
30
+ if (!xy)
31
+ return null;
32
+ points.push([xy[0], xy[1]]);
33
+ }
34
+ const first = points[0];
35
+ const last = points[points.length - 1];
36
+ if (points.length > 1 && Math.hypot(first[0] - last[0], first[1] - last[1]) <= EPS)
37
+ points.pop();
38
+ return points;
39
+ }
40
+ /** The body profile's extent in the wall frame, or null when it is neither an axis-aligned rectangle nor a four-point trapezoid. */
41
+ function bodyExtent(reader, profileId) {
42
+ const profile = reader.entity(profileId);
43
+ const type = profile?.type.toUpperCase();
44
+ if (!profile)
45
+ return null;
46
+ if (type === 'IFCRECTANGLEPROFILEDEF') {
47
+ const position = refId(profile.attributes[2]) === null ? null : reader.entity(refId(profile.attributes[2]));
48
+ const xDim = profile.attributes[3];
49
+ const yDim = profile.attributes[4];
50
+ if (position?.type.toUpperCase() !== 'IFCAXIS2PLACEMENT2D' || typeof xDim !== 'number' || typeof yDim !== 'number')
51
+ return null;
52
+ if (!(xDim > 0) || !(yDim > 0))
53
+ return null;
54
+ // A rotated profile is not one this reader can express as cuts.
55
+ const rotation = refId(position.attributes[1]) === null ? null : reader.entity(refId(position.attributes[1]));
56
+ const dir = rotation ? numbers(rotation.attributes[0], 2) : null;
57
+ if (dir && (Math.abs(dir[0] - 1) > EPS || Math.abs(dir[1]) > EPS))
58
+ return null;
59
+ const point = refId(position.attributes[0]) === null ? null : reader.entity(refId(position.attributes[0]));
60
+ const centre = point ? numbers(point.attributes[0], 2) : null;
61
+ if (!centre)
62
+ return null;
63
+ const x = [centre[0] - xDim / 2, centre[0] + xDim / 2];
64
+ return {
65
+ right: x, left: x, yMin: centre[1] - yDim / 2, yMax: centre[1] + yDim / 2,
66
+ rectangular: true, centred: Math.abs(x[0]) <= EPS && Math.abs(centre[1]) <= EPS,
67
+ };
68
+ }
69
+ if (type === 'IFCARBITRARYCLOSEDPROFILEDEF') {
70
+ const points = polylinePoints(reader, refId(profile.attributes[2]));
71
+ if (!points || points.length !== 4)
72
+ return null;
73
+ const ys = [...new Set(points.map((p) => p[1]))].sort((a, b) => a - b);
74
+ if (ys.length !== 2 || !(ys[1] - ys[0] > EPS))
75
+ return null;
76
+ const along = (y) => {
77
+ const xs = points.filter((p) => p[1] === y).map((p) => p[0]);
78
+ return xs.length === 2 ? [Math.min(...xs), Math.max(...xs)] : null;
79
+ };
80
+ const right = along(ys[0]);
81
+ const left = along(ys[1]);
82
+ return right && left ? { right, left, yMin: ys[0], yMax: ys[1], rectangular: false, centred: false } : null;
83
+ }
84
+ return null;
85
+ }
86
+ const clean = (v) => (Math.abs(v) <= EPS ? 0 : v);
87
+ /**
88
+ * Read wall `wallId` as a join target. `lengthUnitScale` is the model's native
89
+ * unit in metres; the target's plan values are metres.
90
+ */
91
+ export function readWallJoinTarget(store, view, wallId, lengthUnitScale) {
92
+ const reader = new AnchorEntityReader(store, view);
93
+ const wall = reader.entity(wallId);
94
+ if (!wall || !WALL_TYPES.has(wall.type.toUpperCase()))
95
+ return null;
96
+ // Placement: the wall's Location and RefDirection (explicit: the join keeps the frame).
97
+ const placementId = refId(wall.attributes[5]);
98
+ const placement = placementId === null ? null : reader.entity(placementId);
99
+ if (placement?.type.toUpperCase() !== 'IFCLOCALPLACEMENT')
100
+ return null;
101
+ const axisPlacementId = refId(placement.attributes[1]);
102
+ const axisPlacement = axisPlacementId === null ? null : reader.entity(axisPlacementId);
103
+ if (axisPlacementId === null || axisPlacement?.type.toUpperCase() !== 'IFCAXIS2PLACEMENT3D')
104
+ return null;
105
+ const locationPointId = refId(axisPlacement.attributes[0]);
106
+ const refDirectionId = refId(axisPlacement.attributes[2]);
107
+ if (locationPointId === null || refDirectionId === null)
108
+ return null;
109
+ const location = numbers(reader.entity(locationPointId)?.attributes[0], 3);
110
+ const ratios = numbers(reader.entity(refDirectionId)?.attributes[0], 2);
111
+ if (!location || !ratios)
112
+ return null;
113
+ const dirLength = Math.hypot(ratios[0], ratios[1]);
114
+ if (!(dirLength > EPS) || (ratios.length > 2 && Math.abs(ratios[2]) > 1e-6 * dirLength))
115
+ return null;
116
+ const dir = [ratios[0] / dirLength, ratios[1] / dirLength];
117
+ // Representations: the Body (an extruded profile) and the optional Axis.
118
+ const productShapeId = refId(wall.attributes[6]);
119
+ const productShape = productShapeId === null ? null : reader.entity(productShapeId);
120
+ if (productShapeId === null || productShape?.type.toUpperCase() !== 'IFCPRODUCTDEFINITIONSHAPE'
121
+ || !Array.isArray(productShape.attributes[2]))
122
+ return null;
123
+ const representationIds = productShape.attributes[2].map(refId);
124
+ if (representationIds.length === 0 || representationIds.some((id) => id === null))
125
+ return null;
126
+ const ids = representationIds;
127
+ const repOf = (identifier) => ids.find((id) => reader.entity(id)?.attributes[1] === identifier) ?? null;
128
+ const bodyRepId = repOf('Body') ?? ids[0];
129
+ const axisRepId = repOf('Axis');
130
+ const bodyItems = reader.entity(bodyRepId)?.attributes[3];
131
+ const solidId = Array.isArray(bodyItems) && bodyItems.length > 0 ? refId(bodyItems[0]) : null;
132
+ const solid = solidId === null ? null : reader.entity(solidId);
133
+ if (solidId === null || solid?.type.toUpperCase() !== 'IFCEXTRUDEDAREASOLID')
134
+ return null;
135
+ const profileId = refId(solid.attributes[0]);
136
+ const extent = profileId === null ? null : bodyExtent(reader, profileId);
137
+ if (profileId === null || !extent)
138
+ return null;
139
+ // The axis, from its polyline when there is one (on the wall's own centreline), else the body's length.
140
+ let a0;
141
+ let a1;
142
+ let axisIsBody = false;
143
+ if (axisRepId !== null) {
144
+ const items = reader.entity(axisRepId)?.attributes[3];
145
+ const points = Array.isArray(items) && items.length === 1 ? polylinePoints(reader, refId(items[0])) : null;
146
+ if (!points || points.length !== 2 || Math.abs(points[0][1]) > EPS || Math.abs(points[1][1]) > EPS
147
+ || !(points[1][0] - points[0][0] > EPS))
148
+ return null;
149
+ [a0, a1] = [points[0][0], points[1][0]];
150
+ axisIsBody = Math.abs(a0 - extent.right[0]) <= EPS && Math.abs(a1 - extent.right[1]) <= EPS;
151
+ }
152
+ else {
153
+ a0 = Math.min(extent.right[0], extent.left[0]);
154
+ a1 = Math.max(extent.right[1], extent.left[1]);
155
+ axisIsBody = extent.rectangular;
156
+ }
157
+ const m = lengthUnitScale > 0 && Number.isFinite(lengthUnitScale) ? lengthUnitScale : 1;
158
+ const metre = (native) => Math.round(native * m * 1e9) / 1e9;
159
+ const origin = [metre(location[0]), metre(location[1])];
160
+ const at = (x) => [metre(location[0] + dir[0] * x), metre(location[1] + dir[1] * x)];
161
+ const startCut = { left: metre(clean(a0 - extent.left[0])), right: metre(clean(a0 - extent.right[0])) };
162
+ const endCut = { left: metre(clean(extent.left[1] - a1)), right: metre(clean(extent.right[1] - a1)) };
163
+ const offset = metre((extent.yMin + extent.yMax) / 2);
164
+ const wallShape = {
165
+ start: at(a0),
166
+ end: at(a1),
167
+ thickness: metre(extent.yMax - extent.yMin),
168
+ ...(offset !== 0 ? { offset } : {}),
169
+ ...(startCut.left !== 0 || startCut.right !== 0 ? { startCut } : {}),
170
+ ...(endCut.left !== 0 || endCut.right !== 0 ? { endCut } : {}),
171
+ };
172
+ const depth = solid.attributes[3];
173
+ return {
174
+ wallId,
175
+ solidId,
176
+ profileId,
177
+ productShapeId,
178
+ representationIds: ids,
179
+ axisRepId,
180
+ origin,
181
+ wall: wallShape,
182
+ axisPlacementId,
183
+ locationPointId,
184
+ refDirectionId,
185
+ location: [location[0], location[1], location[2]],
186
+ parentPlacementId: refId(placement.attributes[0]),
187
+ height: typeof depth === 'number' ? metre(depth) : Number.NaN,
188
+ plain: extent.rectangular && extent.centred && axisIsBody && offset === 0
189
+ && startCut.left === 0 && startCut.right === 0 && endCut.left === 0 && endCut.right === 0,
190
+ };
191
+ }
192
+ /** The connection type of an enum attribute, `.ATSTART.` or `ATSTART`. */
193
+ function connectionOf(value) {
194
+ const text = typeof value === 'string' ? value.replace(/^\.|\.$/g, '').toUpperCase() : '';
195
+ return CONNECTIONS.includes(text) ? text : null;
196
+ }
197
+ function prioritiesOf(value) {
198
+ return Array.isArray(value) ? value.filter((v) => typeof v === 'number') : [];
199
+ }
200
+ /**
201
+ * Every live `IfcRelConnectsPathElements` that touches one of `wallIds` (all
202
+ * of them when omitted). The attribute slots (Relating 5, Related 6,
203
+ * priorities 7 and 8, connection types 9 and 10) are the same in IFC2X3,
204
+ * IFC4 and IFC4X3.
205
+ */
206
+ export function readWallJoinRels(store, view, wallIds) {
207
+ const reader = new AnchorEntityReader(store, view);
208
+ const rels = [];
209
+ for (const relId of reader.ids('IFCRELCONNECTSPATHELEMENTS')) {
210
+ const attributes = reader.entity(relId)?.attributes;
211
+ if (!attributes)
212
+ continue;
213
+ const relatingId = refId(attributes[5]);
214
+ const relatedId = refId(attributes[6]);
215
+ const relatedConnection = connectionOf(attributes[9]);
216
+ const relatingConnection = connectionOf(attributes[10]);
217
+ if (relatingId === null || relatedId === null || !relatedConnection || !relatingConnection)
218
+ continue;
219
+ if (wallIds && !wallIds.has(relatingId) && !wallIds.has(relatedId))
220
+ continue;
221
+ rels.push({
222
+ relId, relatingId, relatedId, relatingConnection, relatedConnection,
223
+ relatingPriorities: prioritiesOf(attributes[7]),
224
+ relatedPriorities: prioritiesOf(attributes[8]),
225
+ name: typeof attributes[2] === 'string' ? attributes[2] : null,
226
+ });
227
+ }
228
+ return rels;
229
+ }
230
+ //# sourceMappingURL=wall-join-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-join-read.js","sourceRoot":"","sources":["../../src/in-store/wall-join-read.ts"],"names":[],"mappings":"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"}