@pascal-app/core 1.0.6 → 1.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 (1003) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +411 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13804 -10600
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +37 -1
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1163 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5881 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +39 -3
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +259 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +2525 -1723
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +59 -13
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +5 -7
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +181 -35
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +4667 -3065
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +5 -3
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +134 -12
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +182 -41
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +889 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +2897 -1938
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -25
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +62 -2
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +43 -20
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +42 -19
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +1629 -828
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-mode.d.ts +11 -0
  432. package/dist/lib/build-mode.d.ts.map +1 -0
  433. package/dist/lib/build-mode.js +24 -0
  434. package/dist/lib/build-up.d.ts +89 -0
  435. package/dist/lib/build-up.d.ts.map +1 -0
  436. package/dist/lib/build-up.js +216 -0
  437. package/dist/lib/corner-pair.d.ts +207 -4
  438. package/dist/lib/corner-pair.d.ts.map +1 -1
  439. package/dist/lib/deck-boards.d.ts +80 -0
  440. package/dist/lib/deck-boards.d.ts.map +1 -0
  441. package/dist/lib/deck-boards.js +184 -0
  442. package/dist/lib/deck-framing.d.ts +150 -0
  443. package/dist/lib/deck-framing.d.ts.map +1 -0
  444. package/dist/lib/deck-framing.js +515 -0
  445. package/dist/lib/deepest-drawn.d.ts +3 -6
  446. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  447. package/dist/lib/deepest-drawn.js +4 -8
  448. package/dist/lib/door-interaction.d.ts +14 -0
  449. package/dist/lib/door-interaction.d.ts.map +1 -0
  450. package/dist/lib/door-interaction.js +62 -0
  451. package/dist/lib/door-opening.d.ts +19 -0
  452. package/dist/lib/door-opening.d.ts.map +1 -0
  453. package/dist/lib/door-opening.js +27 -0
  454. package/dist/lib/door-operation.d.ts +2 -0
  455. package/dist/lib/door-operation.d.ts.map +1 -1
  456. package/dist/lib/door-operation.js +4 -0
  457. package/dist/lib/elevator-support.d.ts +15 -0
  458. package/dist/lib/elevator-support.d.ts.map +1 -0
  459. package/dist/lib/elevator-support.js +40 -0
  460. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  461. package/dist/lib/exterior-wall-loops.js +2 -1
  462. package/dist/lib/finish-script.d.ts +5 -5
  463. package/dist/lib/finish-script.d.ts.map +1 -1
  464. package/dist/lib/finish-script.js +12 -5
  465. package/dist/lib/floor-footprint-name.d.ts +17 -0
  466. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  467. package/dist/lib/floor-footprint-name.js +17 -4
  468. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  469. package/dist/lib/floor-intent-changes.js +66 -39
  470. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  471. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  472. package/dist/lib/floor-opening-footprints.js +10 -4
  473. package/dist/lib/floor-plate-paint.d.ts +2 -0
  474. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  475. package/dist/lib/floor-plate-paint.js +12 -0
  476. package/dist/lib/floor-plates.d.ts +250 -0
  477. package/dist/lib/floor-plates.d.ts.map +1 -1
  478. package/dist/lib/floor-plates.js +43 -4
  479. package/dist/lib/floor-script.d.ts +35 -6
  480. package/dist/lib/floor-script.d.ts.map +1 -1
  481. package/dist/lib/floor-script.js +96 -16
  482. package/dist/lib/foundation-construction.d.ts +4 -13
  483. package/dist/lib/foundation-construction.d.ts.map +1 -1
  484. package/dist/lib/foundation-construction.js +4 -14
  485. package/dist/lib/foundation-standard.d.ts +2 -3
  486. package/dist/lib/foundation-standard.d.ts.map +1 -1
  487. package/dist/lib/foundation-standard.js +2 -3
  488. package/dist/lib/foundation-wall.d.ts +1 -2
  489. package/dist/lib/foundation-wall.d.ts.map +1 -1
  490. package/dist/lib/foundation-wall.js +1 -2
  491. package/dist/lib/framing-post.d.ts +91 -0
  492. package/dist/lib/framing-post.d.ts.map +1 -0
  493. package/dist/lib/framing-post.js +174 -0
  494. package/dist/lib/geometry-script-node.d.ts +11 -0
  495. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  496. package/dist/lib/geometry-script-node.js +35 -0
  497. package/dist/lib/grade-standing.d.ts +16 -2
  498. package/dist/lib/grade-standing.d.ts.map +1 -1
  499. package/dist/lib/grade-standing.js +129 -9
  500. package/dist/lib/ground-seat.d.ts +2 -22
  501. package/dist/lib/ground-seat.d.ts.map +1 -1
  502. package/dist/lib/ground-seat.js +2 -17
  503. package/dist/lib/ground-window.d.ts +2 -1
  504. package/dist/lib/ground-window.d.ts.map +1 -1
  505. package/dist/lib/ground-window.js +5 -2
  506. package/dist/lib/hierarchy.d.ts +19 -0
  507. package/dist/lib/hierarchy.d.ts.map +1 -0
  508. package/dist/lib/hierarchy.js +53 -0
  509. package/dist/lib/level-footprints.d.ts +2 -0
  510. package/dist/lib/level-footprints.d.ts.map +1 -1
  511. package/dist/lib/level-footprints.js +7 -0
  512. package/dist/lib/opening-casing.d.ts +67 -0
  513. package/dist/lib/opening-casing.d.ts.map +1 -0
  514. package/dist/lib/opening-casing.js +131 -0
  515. package/dist/lib/opening-exterior-face.d.ts +6 -0
  516. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  517. package/dist/lib/opening-exterior-face.js +15 -0
  518. package/dist/lib/opening-floor-datum.d.ts +11 -5
  519. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  520. package/dist/lib/opening-floor-datum.js +40 -8
  521. package/dist/lib/opening-frame-depth.d.ts +18 -0
  522. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  523. package/dist/lib/opening-frame-depth.js +22 -0
  524. package/dist/lib/outdoor-room.d.ts +32 -0
  525. package/dist/lib/outdoor-room.d.ts.map +1 -0
  526. package/dist/lib/outdoor-room.js +66 -0
  527. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  528. package/dist/lib/own-floor-intent.js +2 -2
  529. package/dist/lib/plate-surface.d.ts +8 -0
  530. package/dist/lib/plate-surface.d.ts.map +1 -1
  531. package/dist/lib/plate-surface.js +53 -3
  532. package/dist/lib/polygon-boolean.d.ts.map +1 -1
  533. package/dist/lib/polygon-boolean.js +2 -1
  534. package/dist/lib/porch-framing-sync.d.ts +46 -0
  535. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  536. package/dist/lib/porch-framing-sync.js +206 -0
  537. package/dist/lib/porch-framing.d.ts +44 -0
  538. package/dist/lib/porch-framing.d.ts.map +1 -0
  539. package/dist/lib/porch-framing.js +159 -0
  540. package/dist/lib/railing-rooms.d.ts +13 -0
  541. package/dist/lib/railing-rooms.d.ts.map +1 -0
  542. package/dist/lib/railing-rooms.js +37 -0
  543. package/dist/lib/roof-eave.d.ts +135 -0
  544. package/dist/lib/roof-eave.d.ts.map +1 -0
  545. package/dist/lib/roof-eave.js +186 -0
  546. package/dist/lib/room-floor-elevation.d.ts +12 -0
  547. package/dist/lib/room-floor-elevation.d.ts.map +1 -0
  548. package/dist/lib/room-floor-elevation.js +41 -0
  549. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  550. package/dist/lib/room-floor-feasibility.js +1 -1
  551. package/dist/lib/room-floor-plate.d.ts +3 -1
  552. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  553. package/dist/lib/room-floor-plate.js +7 -0
  554. package/dist/lib/space-detection.d.ts +13 -0
  555. package/dist/lib/space-detection.d.ts.map +1 -1
  556. package/dist/lib/space-detection.js +113 -24
  557. package/dist/lib/structure-kernel.d.ts +22 -9
  558. package/dist/lib/structure-kernel.d.ts.map +1 -1
  559. package/dist/lib/structure-kernel.js +146 -28
  560. package/dist/lib/structure-reconcile.d.ts +1 -1
  561. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  562. package/dist/lib/structure-reconcile.js +7 -4
  563. package/dist/lib/surface-intent.d.ts +10 -0
  564. package/dist/lib/surface-intent.d.ts.map +1 -0
  565. package/dist/lib/surface-intent.js +18 -0
  566. package/dist/lib/terrain-source.d.ts.map +1 -1
  567. package/dist/lib/terrain-source.js +2 -1
  568. package/dist/lib/wall-face-script.d.ts.map +1 -1
  569. package/dist/lib/wall-face-script.js +8 -5
  570. package/dist/lib/window-interaction.d.ts +16 -0
  571. package/dist/lib/window-interaction.d.ts.map +1 -0
  572. package/dist/lib/window-interaction.js +82 -0
  573. package/dist/lib/zone-quantities.js +1 -1
  574. package/dist/material-kinds.d.ts +1 -1
  575. package/dist/material-kinds.d.ts.map +1 -1
  576. package/dist/material-kinds.js +1 -0
  577. package/dist/material-library.d.ts +15 -0
  578. package/dist/material-library.d.ts.map +1 -1
  579. package/dist/material-library.js +458 -59
  580. package/dist/node-slots/column.d.ts +5 -0
  581. package/dist/node-slots/column.d.ts.map +1 -1
  582. package/dist/node-slots/column.js +10 -0
  583. package/dist/node-slots/door.d.ts +3 -4
  584. package/dist/node-slots/door.d.ts.map +1 -1
  585. package/dist/node-slots/door.js +4 -3
  586. package/dist/node-slots/wall.d.ts.map +1 -1
  587. package/dist/node-slots/wall.js +21 -3
  588. package/dist/node-slots/window.d.ts +2 -2
  589. package/dist/node-slots/window.d.ts.map +1 -1
  590. package/dist/node-slots/window.js +6 -1
  591. package/dist/procedural-items/design.d.ts +8 -0
  592. package/dist/procedural-items/design.d.ts.map +1 -1
  593. package/dist/procedural-items/design.js +169 -21
  594. package/dist/procedural-items/motion-controller.d.ts +2 -0
  595. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  596. package/dist/procedural-items/motion-controller.js +2 -1
  597. package/dist/registry/index.d.ts +3 -3
  598. package/dist/registry/index.d.ts.map +1 -1
  599. package/dist/registry/index.js +2 -2
  600. package/dist/registry/mechanism.d.ts +4 -1
  601. package/dist/registry/mechanism.d.ts.map +1 -1
  602. package/dist/registry/mechanism.js +10 -0
  603. package/dist/registry/registry.d.ts +5 -0
  604. package/dist/registry/registry.d.ts.map +1 -1
  605. package/dist/registry/registry.js +10 -0
  606. package/dist/registry/types.d.ts +89 -23
  607. package/dist/registry/types.d.ts.map +1 -1
  608. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  609. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  610. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  611. package/dist/runtime/apply.d.ts +42 -0
  612. package/dist/runtime/apply.d.ts.map +1 -0
  613. package/dist/runtime/apply.js +274 -0
  614. package/dist/runtime/dependencies.d.ts +97 -0
  615. package/dist/runtime/dependencies.d.ts.map +1 -0
  616. package/dist/runtime/dependencies.js +42 -0
  617. package/dist/runtime/ids.d.ts +11 -0
  618. package/dist/runtime/ids.d.ts.map +1 -0
  619. package/dist/runtime/ids.js +80 -0
  620. package/dist/runtime/index.d.ts +14 -0
  621. package/dist/runtime/index.d.ts.map +1 -0
  622. package/dist/runtime/index.js +11 -0
  623. package/dist/runtime/node-queries.d.ts +16 -0
  624. package/dist/runtime/node-queries.d.ts.map +1 -0
  625. package/dist/runtime/node-queries.js +30 -0
  626. package/dist/runtime/patch.d.ts +26 -0
  627. package/dist/runtime/patch.d.ts.map +1 -0
  628. package/dist/runtime/patch.js +165 -0
  629. package/dist/runtime/reader.d.ts +104 -0
  630. package/dist/runtime/reader.d.ts.map +1 -0
  631. package/dist/runtime/reader.js +455 -0
  632. package/dist/runtime/scene-runtime.d.ts +112 -0
  633. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  634. package/dist/runtime/scene-runtime.js +302 -0
  635. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  636. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  637. package/dist/schema/assembly.d.ts +3 -0
  638. package/dist/schema/assembly.d.ts.map +1 -1
  639. package/dist/schema/assembly.js +13 -0
  640. package/dist/schema/asset-url.d.ts +37 -2
  641. package/dist/schema/asset-url.d.ts.map +1 -1
  642. package/dist/schema/asset-url.js +80 -11
  643. package/dist/schema/base.d.ts +8 -0
  644. package/dist/schema/base.d.ts.map +1 -1
  645. package/dist/schema/base.js +19 -1
  646. package/dist/schema/build-up.d.ts +247 -0
  647. package/dist/schema/build-up.d.ts.map +1 -0
  648. package/dist/schema/build-up.js +83 -0
  649. package/dist/schema/geometry-source.d.ts +80 -0
  650. package/dist/schema/geometry-source.d.ts.map +1 -1
  651. package/dist/schema/geometry-source.js +38 -0
  652. package/dist/schema/index.d.ts +12 -7
  653. package/dist/schema/index.d.ts.map +1 -1
  654. package/dist/schema/index.js +12 -6
  655. package/dist/schema/material.d.ts +5 -0
  656. package/dist/schema/material.d.ts.map +1 -1
  657. package/dist/schema/material.js +6 -0
  658. package/dist/schema/nodes/beam.d.ts +264 -0
  659. package/dist/schema/nodes/beam.d.ts.map +1 -0
  660. package/dist/schema/nodes/beam.js +139 -0
  661. package/dist/schema/nodes/box-vent.d.ts +5 -0
  662. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  663. package/dist/schema/nodes/cabinet.d.ts +10 -0
  664. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  665. package/dist/schema/nodes/ceiling.d.ts +48 -0
  666. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  667. package/dist/schema/nodes/ceiling.js +5 -0
  668. package/dist/schema/nodes/chimney.d.ts +10 -0
  669. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  670. package/dist/schema/nodes/column.d.ts +42 -0
  671. package/dist/schema/nodes/column.d.ts.map +1 -1
  672. package/dist/schema/nodes/column.js +11 -1
  673. package/dist/schema/nodes/cupola.d.ts +5 -0
  674. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  675. package/dist/schema/nodes/door.d.ts +54 -3
  676. package/dist/schema/nodes/door.d.ts.map +1 -1
  677. package/dist/schema/nodes/door.js +41 -7
  678. package/dist/schema/nodes/dormer.d.ts +20 -0
  679. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  680. package/dist/schema/nodes/downspout.d.ts +5 -0
  681. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  682. package/dist/schema/nodes/elevator.d.ts +5 -0
  683. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  684. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  685. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  686. package/dist/schema/nodes/fence.d.ts +5 -0
  687. package/dist/schema/nodes/fence.d.ts.map +1 -1
  688. package/dist/schema/nodes/guide.d.ts +14 -0
  689. package/dist/schema/nodes/guide.d.ts.map +1 -1
  690. package/dist/schema/nodes/guide.js +2 -0
  691. package/dist/schema/nodes/gutter.d.ts +5 -0
  692. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  693. package/dist/schema/nodes/item.d.ts +71 -0
  694. package/dist/schema/nodes/item.d.ts.map +1 -1
  695. package/dist/schema/nodes/item.js +5 -1
  696. package/dist/schema/nodes/level.d.ts +1 -1
  697. package/dist/schema/nodes/level.d.ts.map +1 -1
  698. package/dist/schema/nodes/opening-types.d.ts +13 -0
  699. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  700. package/dist/schema/nodes/opening-types.js +8 -1
  701. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  702. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  703. package/dist/schema/nodes/railing-wall.js +160 -0
  704. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  705. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
  707. package/dist/schema/nodes/roof-segment-resize.js +2 -2
  708. package/dist/schema/nodes/roof-segment.d.ts +226 -1
  709. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  710. package/dist/schema/nodes/roof-segment.js +97 -12
  711. package/dist/schema/nodes/roof-types.d.ts +11 -0
  712. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  713. package/dist/schema/nodes/roof-types.js +6 -0
  714. package/dist/schema/nodes/roof.d.ts +60 -0
  715. package/dist/schema/nodes/roof.d.ts.map +1 -1
  716. package/dist/schema/nodes/roof.js +4 -0
  717. package/dist/schema/nodes/shelf.d.ts +5 -0
  718. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  719. package/dist/schema/nodes/site.d.ts +80 -0
  720. package/dist/schema/nodes/site.d.ts.map +1 -1
  721. package/dist/schema/nodes/site.js +7 -0
  722. package/dist/schema/nodes/skylight.d.ts +10 -0
  723. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  724. package/dist/schema/nodes/slab.d.ts +137 -0
  725. package/dist/schema/nodes/slab.d.ts.map +1 -1
  726. package/dist/schema/nodes/slab.js +3 -0
  727. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  728. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  729. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  730. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  731. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  732. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  733. package/dist/schema/nodes/stair-structure.js +39 -0
  734. package/dist/schema/nodes/stair.d.ts +46 -0
  735. package/dist/schema/nodes/stair.d.ts.map +1 -1
  736. package/dist/schema/nodes/stair.js +3 -0
  737. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  738. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  739. package/dist/schema/nodes/wall.d.ts +136 -2
  740. package/dist/schema/nodes/wall.d.ts.map +1 -1
  741. package/dist/schema/nodes/wall.js +48 -6
  742. package/dist/schema/nodes/window.d.ts +66 -1
  743. package/dist/schema/nodes/window.d.ts.map +1 -1
  744. package/dist/schema/nodes/window.js +50 -5
  745. package/dist/schema/nodes/zone.d.ts +68 -0
  746. package/dist/schema/nodes/zone.d.ts.map +1 -1
  747. package/dist/schema/nodes/zone.js +32 -0
  748. package/dist/schema/scene-material.d.ts +5 -0
  749. package/dist/schema/scene-material.d.ts.map +1 -1
  750. package/dist/schema/types.d.ts +1080 -4
  751. package/dist/schema/types.d.ts.map +1 -1
  752. package/dist/schema/types.js +2 -0
  753. package/dist/schema/wall-type.d.ts +95 -0
  754. package/dist/schema/wall-type.d.ts.map +1 -0
  755. package/dist/schema/wall-type.js +32 -0
  756. package/dist/services/index.d.ts +1 -1
  757. package/dist/services/index.d.ts.map +1 -1
  758. package/dist/services/index.js +1 -1
  759. package/dist/services/movement.d.ts +7 -0
  760. package/dist/services/movement.d.ts.map +1 -1
  761. package/dist/services/movement.js +13 -0
  762. package/dist/services/port-connectivity.d.ts +15 -6
  763. package/dist/services/port-connectivity.d.ts.map +1 -1
  764. package/dist/services/port-connectivity.js +83 -17
  765. package/dist/services/roof-bearing.d.ts.map +1 -1
  766. package/dist/services/roof-bearing.js +8 -4
  767. package/dist/services/roof-level.d.ts.map +1 -1
  768. package/dist/services/roof-level.js +4 -3
  769. package/dist/services/roof-move.d.ts.map +1 -1
  770. package/dist/services/roof-move.js +13 -7
  771. package/dist/services/storey.d.ts +6 -1
  772. package/dist/services/storey.d.ts.map +1 -1
  773. package/dist/services/storey.js +24 -10
  774. package/dist/spatial/usage-field/beds.d.ts +51 -0
  775. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  776. package/dist/spatial/usage-field/beds.js +346 -0
  777. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  778. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  779. package/dist/spatial/usage-field/blocked.js +185 -0
  780. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  781. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  782. package/dist/spatial/usage-field/boxes.js +82 -0
  783. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  784. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  785. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  786. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  787. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  788. package/dist/spatial/usage-field/catalogue.js +11 -0
  789. package/dist/spatial/usage-field/clash.d.ts +40 -0
  790. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  791. package/dist/spatial/usage-field/clash.js +187 -0
  792. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  793. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  794. package/dist/spatial/usage-field/door-stairs.js +129 -0
  795. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  796. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  797. package/dist/spatial/usage-field/entry-way.js +219 -0
  798. package/dist/spatial/usage-field/fences.d.ts +18 -0
  799. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  800. package/dist/spatial/usage-field/fences.js +253 -0
  801. package/dist/spatial/usage-field/field.d.ts +44 -0
  802. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  803. package/dist/spatial/usage-field/field.js +145 -0
  804. package/dist/spatial/usage-field/findings.d.ts +76 -0
  805. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  806. package/dist/spatial/usage-field/findings.js +252 -0
  807. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  808. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  809. package/dist/spatial/usage-field/fixtures.js +160 -0
  810. package/dist/spatial/usage-field/flag.d.ts +10 -0
  811. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  812. package/dist/spatial/usage-field/flag.js +12 -0
  813. package/dist/spatial/usage-field/floors.d.ts +13 -0
  814. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  815. package/dist/spatial/usage-field/floors.js +36 -0
  816. package/dist/spatial/usage-field/index.d.ts +7 -0
  817. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  818. package/dist/spatial/usage-field/index.js +5 -0
  819. package/dist/spatial/usage-field/items.d.ts +38 -0
  820. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  821. package/dist/spatial/usage-field/items.js +261 -0
  822. package/dist/spatial/usage-field/labels.d.ts +8 -0
  823. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  824. package/dist/spatial/usage-field/labels.js +14 -0
  825. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  826. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  827. package/dist/spatial/usage-field/level-field.js +96 -0
  828. package/dist/spatial/usage-field/measure.d.ts +324 -0
  829. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  830. package/dist/spatial/usage-field/measure.js +458 -0
  831. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  832. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  833. package/dist/spatial/usage-field/obstacles.js +215 -0
  834. package/dist/spatial/usage-field/openings.d.ts +12 -0
  835. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  836. package/dist/spatial/usage-field/openings.js +162 -0
  837. package/dist/spatial/usage-field/path.d.ts +48 -0
  838. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  839. package/dist/spatial/usage-field/path.js +354 -0
  840. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  841. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  842. package/dist/spatial/usage-field/pieces.js +89 -0
  843. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  844. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  845. package/dist/spatial/usage-field/shapes.js +92 -0
  846. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  847. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  848. package/dist/spatial/usage-field/stairs.js +163 -0
  849. package/dist/spatial/usage-field/support.d.ts +24 -0
  850. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  851. package/dist/spatial/usage-field/support.js +46 -0
  852. package/dist/spatial/usage-field/swings.d.ts +847 -0
  853. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  854. package/dist/spatial/usage-field/swings.js +427 -0
  855. package/dist/spatial/usage-field/types.d.ts +65 -0
  856. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  857. package/dist/spatial/usage-field/types.js +1 -0
  858. package/dist/spatial/usage-field/walls.d.ts +1059 -0
  859. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  860. package/dist/spatial/usage-field/walls.js +180 -0
  861. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  862. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  863. package/dist/spatial/usage-field/way-in.js +113 -0
  864. package/dist/store/actions/node-actions.d.ts +1467 -664
  865. package/dist/store/actions/node-actions.d.ts.map +1 -1
  866. package/dist/store/actions/node-actions.js +65 -21
  867. package/dist/store/derived-node-guard.d.ts +10 -2
  868. package/dist/store/derived-node-guard.d.ts.map +1 -1
  869. package/dist/store/derived-node-guard.js +33 -12
  870. package/dist/store/document-settling.d.ts +9 -0
  871. package/dist/store/document-settling.d.ts.map +1 -0
  872. package/dist/store/document-settling.js +22 -0
  873. package/dist/store/history-control.d.ts +19 -10
  874. package/dist/store/history-control.d.ts.map +1 -1
  875. package/dist/store/history-control.js +176 -127
  876. package/dist/store/history-drafts.d.ts.map +1 -1
  877. package/dist/store/history-drafts.js +21 -17
  878. package/dist/store/live-previews.d.ts +9 -0
  879. package/dist/store/live-previews.d.ts.map +1 -0
  880. package/dist/store/live-previews.js +19 -0
  881. package/dist/store/scene-annotations.d.ts +5409 -3807
  882. package/dist/store/scene-annotations.d.ts.map +1 -1
  883. package/dist/store/scene-environment.d.ts +33 -0
  884. package/dist/store/scene-environment.d.ts.map +1 -0
  885. package/dist/store/scene-environment.js +54 -0
  886. package/dist/store/scene-hydration.d.ts.map +1 -1
  887. package/dist/store/scene-hydration.js +41 -30
  888. package/dist/store/use-interactive.d.ts +9 -3
  889. package/dist/store/use-interactive.d.ts.map +1 -1
  890. package/dist/store/use-interactive.js +43 -11
  891. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  892. package/dist/store/use-live-node-overrides.js +3 -0
  893. package/dist/store/use-scene.d.ts +25 -0
  894. package/dist/store/use-scene.d.ts.map +1 -1
  895. package/dist/store/use-scene.js +408 -336
  896. package/dist/systems/document-reconcile.d.ts +40 -0
  897. package/dist/systems/document-reconcile.d.ts.map +1 -0
  898. package/dist/systems/document-reconcile.js +159 -0
  899. package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
  900. package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
  901. package/dist/systems/elevator/elevator-geometry.js +40 -8
  902. package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
  903. package/dist/systems/elevator/elevator-opening-sync.js +4 -35
  904. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  905. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  906. package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
  907. package/dist/systems/elevator/elevator-runtime.js +95 -18
  908. package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
  909. package/dist/systems/elevator/elevator-service.js +24 -4
  910. package/dist/systems/fence/guard-layout.d.ts +69 -0
  911. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  912. package/dist/systems/fence/guard-layout.js +194 -0
  913. package/dist/systems/owned-floor-openings.d.ts +13 -1
  914. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  915. package/dist/systems/owned-floor-openings.js +58 -2
  916. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  917. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  918. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  919. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  920. package/dist/systems/roof/roof-elevation-system.js +8 -26
  921. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  922. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  923. package/dist/systems/roof/roof-elevation.js +87 -5
  924. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  925. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  926. package/dist/systems/roof/roof-footprint.js +160 -4
  927. package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
  928. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  929. package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
  930. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  931. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  932. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  933. package/dist/systems/stair/stair-clearance.js +31 -11
  934. package/dist/systems/stair/stair-construction.d.ts +8 -3
  935. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  936. package/dist/systems/stair/stair-construction.js +55 -4
  937. package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
  938. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  939. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  940. package/dist/systems/stair/stair-opening-system.js +18 -34
  941. package/dist/systems/stair/stair-presets.d.ts +36 -0
  942. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  943. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  944. package/dist/systems/stair/stair-rise-query.js +3 -2
  945. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  946. package/dist/systems/stair/stair-rise.js +6 -0
  947. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  948. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  949. package/dist/systems/stair/stair-sizing.js +10 -1
  950. package/dist/systems/stair/stair-structure.d.ts +277 -0
  951. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  952. package/dist/systems/stair/stair-structure.js +496 -0
  953. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  954. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  955. package/dist/systems/wall/wall-assembly.js +204 -5
  956. package/dist/systems/wall/wall-curve.d.ts +10 -0
  957. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  958. package/dist/systems/wall/wall-curve.js +38 -0
  959. package/dist/systems/wall/wall-finish.d.ts +38 -2
  960. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  961. package/dist/systems/wall/wall-finish.js +70 -2
  962. package/dist/systems/wall/wall-footprint.js +2 -2
  963. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  964. package/dist/systems/wall/wall-frame.js +8 -0
  965. package/dist/systems/wall/wall-merge.d.ts +9 -1
  966. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  967. package/dist/systems/wall/wall-merge.js +66 -13
  968. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  969. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  970. package/dist/systems/wall/wall-mitering.js +152 -52
  971. package/dist/systems/wall/wall-move.d.ts +23 -6
  972. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  973. package/dist/systems/wall/wall-move.js +65 -0
  974. package/dist/systems/wall/wall-top.d.ts +11 -4
  975. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  976. package/dist/systems/wall/wall-top.js +28 -7
  977. package/dist/systems/wall/wall-topology.d.ts +32 -1
  978. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  979. package/dist/systems/wall/wall-topology.js +137 -11
  980. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  981. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  982. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  983. package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
  984. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  985. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  986. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  987. package/dist/utils/floor-plate-migration.d.ts +3372 -2571
  988. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  989. package/dist/utils/measurement-format.d.ts +27 -0
  990. package/dist/utils/measurement-format.d.ts.map +1 -0
  991. package/dist/utils/measurement-format.js +143 -0
  992. package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
  993. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  994. package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
  995. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  996. package/dist/utils/structure-id.d.ts.map +1 -1
  997. package/dist/utils/structure-id.js +4 -0
  998. package/dist/validation/validate-build-json.d.ts.map +1 -1
  999. package/dist/validation/validate-build-json.js +3 -1
  1000. package/package.json +22 -5
  1001. package/dist/lib/generic-foundation.d.ts +0 -40
  1002. package/dist/lib/generic-foundation.d.ts.map +0 -1
  1003. package/dist/lib/generic-foundation.js +0 -200
@@ -0,0 +1,187 @@
1
+ import { isFloorUnderlay } from '../../agent-operations/furniture-kind.js';
2
+ import { area, intersection } from '../../lib/polygon-boolean.js';
3
+ import { cm, nameOf, quote, unique } from './labels.js';
4
+ import { boxesMeet, hosts, isBed, isBuildingElement, isFoliage, isPiecePrism, itemText, narrowestExtent, ringBox, roomAt, } from './pieces.js';
5
+ /** Two shapes that overlap by less than this are touching, not clashing (the outlines' own tolerance is 2 cm). */
6
+ export const CLASH_INFO_M = 0.02;
7
+ /** From this depth a clash is a warning; between the two it is information. */
8
+ export const CLASH_WARNING_M = 0.08;
9
+ /** An approximate shape needs a warning at a greater depth: its outline's own error is this order. */
10
+ export const CLASH_APPROX_WARNING_M = 0.12;
11
+ /** A clash smaller than this in plan is a sliver (m²). */
12
+ export const CLASH_MIN_AREA_M2 = 0.002;
13
+ /** A wall-fixed piece (a cabinet, a wall unit) may sink this far into a wall: it is scribed to it. */
14
+ export const SCRIBE_M = 0.05;
15
+ const MIN_HEIGHT_OVERLAP_M = 0.02;
16
+ /** A piece this thin (a rug, a mat) is a covering, not something a piece stands in. */
17
+ const FLAT_COVERING_M = 0.03;
18
+ /** A chair tucked under its table overlaps it by up to this much (m). */
19
+ const TUCKED_M = 0.15;
20
+ const BUILT_IN = /oven|hob\b|cook ?top|cooker|stove|range|washing|washer|dryer|dishwasher|sink|fridge|refrigerator/i;
21
+ const SEAT = /(?:^|[^a-z])(?:chair|stool)(?![a-z])/i;
22
+ const TABLE = /(?:^|[^a-z])(?:table|desk)(?![a-z])/i;
23
+ export const OBSTACLE_KINDS = new Set([
24
+ 'wall',
25
+ 'jamb',
26
+ 'door-head',
27
+ 'threshold',
28
+ 'window-frame',
29
+ 'sill',
30
+ 'stair',
31
+ 'stair-rail',
32
+ 'guard',
33
+ ]);
34
+ const WHAT = {
35
+ wall: 'the wall',
36
+ jamb: 'the frame of',
37
+ 'door-head': 'the frame of',
38
+ threshold: 'the threshold of',
39
+ 'window-frame': 'the frame of',
40
+ sill: 'the sill of',
41
+ stair: 'the stair',
42
+ 'stair-rail': 'the railing of',
43
+ guard: 'the guard',
44
+ };
45
+ export function wallFixed(nodes, prism) {
46
+ if (prism.kind === 'cabinet' || prism.host)
47
+ return true;
48
+ const node = nodes[prism.nodeId];
49
+ const attach = node?.type === 'item' ? node.asset?.attachTo : undefined;
50
+ return attach === 'wall' || attach === 'wall-side';
51
+ }
52
+ /**
53
+ * How deep two prisms stand in each other, or null: the same node, a host and what it carries, a wall
54
+ * and what is fixed to it, a contact, a sliver, a column that runs up into the piece above it, and a
55
+ * wall-fixed piece scribed to its wall are not clashes.
56
+ */
57
+ export function pairClash(nodes, a, b) {
58
+ if (a.nodeId === b.nodeId)
59
+ return null;
60
+ if (hosts(nodes, a.nodeId, b.nodeId) || hosts(nodes, b.nodeId, a.nodeId))
61
+ return null;
62
+ if (a.host?.wallId === b.nodeId || b.host?.wallId === a.nodeId)
63
+ return null;
64
+ const z0 = Math.max(a.z0, b.z0);
65
+ const z1 = Math.min(a.z1, b.z1);
66
+ if (z1 - z0 < MIN_HEIGHT_OVERLAP_M)
67
+ return null;
68
+ const meet = intersection({ outer: a.outer, holes: a.holes }, { outer: b.outer, holes: b.holes });
69
+ const size = area(meet);
70
+ if (size < CLASH_MIN_AREA_M2)
71
+ return null;
72
+ const depth = narrowestExtent(meet);
73
+ if (depth < CLASH_INFO_M)
74
+ return null;
75
+ // a column that runs up into the piece above it (a beam) is joined to it, not clashing
76
+ const column = a.kind === 'column' ? a : b.kind === 'column' ? b : null;
77
+ if (column && z1 >= column.z1 - 0.05)
78
+ return null;
79
+ if (b.kind === 'wall' && wallFixed(nodes, a) && depth <= SCRIBE_M)
80
+ return null;
81
+ if (Math.min(a.z1 - a.z0, b.z1 - b.z0) <= FLAT_COVERING_M)
82
+ return null;
83
+ // a cabinet run is drawn as its box; the oven, hob or machine built into it is inside it by design
84
+ for (const [run, other] of [
85
+ [a, b],
86
+ [b, a],
87
+ ])
88
+ if (run.kind === 'cabinet' &&
89
+ run.shape === 'approx' &&
90
+ BUILT_IN.test(itemText(nodes, other.nodeId)))
91
+ return null;
92
+ if (depth <= TUCKED_M)
93
+ for (const [seat, table] of [
94
+ [a, b],
95
+ [b, a],
96
+ ])
97
+ if (SEAT.test(itemText(nodes, seat.nodeId)) && TABLE.test(itemText(nodes, table.nodeId)))
98
+ return null;
99
+ const ring = meet[0].outer;
100
+ return {
101
+ depth,
102
+ area: size,
103
+ at: [
104
+ ring.reduce((sum, p) => sum + p[0], 0) / ring.length,
105
+ ring.reduce((sum, p) => sum + p[1], 0) / ring.length,
106
+ ],
107
+ zFrom: z0,
108
+ zTo: z1,
109
+ };
110
+ }
111
+ /**
112
+ * A piece of furniture or a fixture that stands inside something solid: another piece, a wall body, a
113
+ * door or window frame or sill, a stair or a guard (a curtain or a blind is read with its opening). Read on the real outlines, so a
114
+ * contact (under 2 cm), a piece resting on another, a rug, foliage, a building element (trim, soffit,
115
+ * pier, beam) and a wall-fixed piece scribed to its wall (5 cm) stay quiet. From 2 cm it is information,
116
+ * from 8 cm a warning, and from 12 cm for an approximate outline, still labeled as such.
117
+ */
118
+ export function clashIssues(nodes, shapes) {
119
+ const out = [];
120
+ for (const level of shapes.levels) {
121
+ const prisms = level.prisms.filter((prism) => !(nodes[prism.nodeId]?.type === 'item' && isFloorUnderlay(nodes[prism.nodeId])));
122
+ const pieces = prisms.filter((prism) => isPiecePrism(prism) &&
123
+ !isFoliage(nodes, prism.nodeId) &&
124
+ !isBuildingElement(nodes, prism.nodeId));
125
+ const others = prisms.filter((prism) => (isPiecePrism(prism) || OBSTACLE_KINDS.has(prism.kind)) &&
126
+ !isFoliage(nodes, prism.nodeId) &&
127
+ !isBuildingElement(nodes, prism.nodeId));
128
+ const boxes = new Map();
129
+ const box = (prism) => {
130
+ const known = boxes.get(prism);
131
+ if (known)
132
+ return known;
133
+ const fresh = ringBox(prism.outer);
134
+ boxes.set(prism, fresh);
135
+ return fresh;
136
+ };
137
+ const found = new Map();
138
+ for (const a of pieces) {
139
+ for (const b of others) {
140
+ if (isPiecePrism(b) && b.nodeId < a.nodeId)
141
+ continue;
142
+ if (!boxesMeet(box(a), box(b)))
143
+ continue;
144
+ const clash = pairClash(nodes, a, b);
145
+ if (!clash)
146
+ continue;
147
+ const key = `${a.nodeId}|${b.nodeId}|${b.kind}`;
148
+ const prior = found.get(key);
149
+ if (!prior || clash.depth > prior.depth)
150
+ found.set(key, { a, b, ...clash });
151
+ else
152
+ prior.area += clash.area;
153
+ }
154
+ }
155
+ for (const { a, b, depth, area: size, at } of found.values()) {
156
+ // a bed head against a window is a design choice, not a finding
157
+ if (isBed(nodes[a.nodeId]) && (b.kind === 'sill' || b.kind === 'window-frame'))
158
+ continue;
159
+ const approximate = a.shape === 'approx' || b.shape === 'approx';
160
+ const room = roomAt(nodes, level.levelId, at);
161
+ const who = quote(nameOf(nodes, a.nodeId));
162
+ const target = isPiecePrism(b)
163
+ ? `${quote(nameOf(nodes, b.nodeId))}`
164
+ : `${WHAT[b.kind] ?? 'the'} ${quote(nameOf(nodes, b.nodeId))}`;
165
+ const warnAt = approximate ? CLASH_APPROX_WARNING_M : CLASH_WARNING_M;
166
+ const severity = depth >= warnAt ? 'warning' : 'info';
167
+ out.push({
168
+ type: 'usage_clash',
169
+ message: `${who} ${isPiecePrism(b) ? 'overlaps' : 'stands'} ${cm(depth)} ${isPiecePrism(b) ? 'of' : 'into'} ${target}${room ? ` in ${quote(room.name)}` : ''}${size >= 0.1 || approximate ? ` (${[size >= 0.1 ? `${Math.round(size * 1e4)} cm² in plan` : '', approximate ? 'approximate shape' : ''].filter(Boolean).join(', ')})` : ''}.`,
170
+ severity,
171
+ nodeIds: unique([room?.id, a.nodeId, b.nodeId]),
172
+ valueM: Math.round(depth * 1000) / 1000,
173
+ thresholdM: warnAt,
174
+ place: { room: room?.name ?? '', roomId: room?.id ?? level.levelId, at },
175
+ obstacles: [a, b].map((prism) => ({
176
+ nodeId: prism.nodeId,
177
+ name: nameOf(nodes, prism.nodeId),
178
+ kind: prism.kind,
179
+ shape: prism.shape,
180
+ movable: false,
181
+ })),
182
+ approximate,
183
+ });
184
+ }
185
+ }
186
+ return out;
187
+ }
@@ -0,0 +1,18 @@
1
+ import type { UsageIssue } from './findings.js';
2
+ import type { UsageShapes } from './types.js';
3
+ import type { Nodes } from './walls.js';
4
+ /**
5
+ * A door whose leaf swings over steps. Both texts the checks read say it: a floor or landing is not
6
+ * required at the top of an interior flight "provided that a door does not swing over the stairs"
7
+ * (R311.7.6), and a landing at an exterior door may be 7-3/4 in below the threshold, or a flight of two
8
+ * risers need no top landing, only where the door does not swing over it (R311.3.1, R311.3.2). So the
9
+ * leaf's sweep is read against the treads and landings of every stair that lie more than 1-1/2 in below
10
+ * the door's own floor; ground the door's level covers (a slab, a landing at the threshold) is not steps.
11
+ * The text says nothing of a door swinging over a flat landing: that is a design preference (Architect
12
+ * Pro's `door_over_landing` keeps both landings clear), not this check.
13
+ *
14
+ * It is a code's rule. With no `site.metadata.codeProfile` a finding is information that names the US
15
+ * IRC it used; with `irc-2021` it is a warning; a profile with no row for it reports nothing.
16
+ */
17
+ export declare function doorOverStairIssues(nodes: Nodes, shapes: UsageShapes): UsageIssue[];
18
+ //# sourceMappingURL=door-stairs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"door-stairs.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/door-stairs.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAY5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAyBpC;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,CA2FnF"}
@@ -0,0 +1,129 @@
1
+ import { CODE_PROFILES, codeProfileOf } from '../../building/code-profile.js';
2
+ import { area, difference, intersection } from '../../lib/polygon-boolean.js';
3
+ import { getLevelElevations } from '../../services/storey.js';
4
+ import { resolveStairWalkingSurfaces, } from '../../systems/stair/stair-clearance.js';
5
+ import { m, nameOf, quote, unique } from './labels.js';
6
+ import { roomAt } from './pieces.js';
7
+ import { doorFrame, FRAME_M, hingeOf, hungOf, leafDirection, SWEEP_STEP_DEG, swingDoors, } from './swings.js';
8
+ /** A tread this far under the threshold or less is steps the leaf is read against; further down it is another storey's. */
9
+ const BAND_M = 0.6;
10
+ /** Less of the sweep than this over a tread is the leaf grazing its edge (m2). */
11
+ const MIN_OVERLAP_M2 = 0.01;
12
+ /** How far from the wall's centre line the room behind or ahead of a door is looked for (m). */
13
+ const ROOM_PROBE_M = 0.4;
14
+ /** A floor within this far above the door's own still carries it (a slab's finish). */
15
+ const FLOOR_ABOVE_M = 0.25;
16
+ /** The ground a leaf covers while it opens: a fan from the hinge, closed to 90 degrees, as long as the leaf. */
17
+ function sweptFan(hinge, length, direction) {
18
+ const ring = [hinge];
19
+ for (let a = 0; a <= 90; a += SWEEP_STEP_DEG) {
20
+ const [dx, dz] = direction((a * Math.PI) / 180);
21
+ ring.push([hinge[0] + dx * length, hinge[1] + dz * length]);
22
+ }
23
+ return ring;
24
+ }
25
+ /**
26
+ * A door whose leaf swings over steps. Both texts the checks read say it: a floor or landing is not
27
+ * required at the top of an interior flight "provided that a door does not swing over the stairs"
28
+ * (R311.7.6), and a landing at an exterior door may be 7-3/4 in below the threshold, or a flight of two
29
+ * risers need no top landing, only where the door does not swing over it (R311.3.1, R311.3.2). So the
30
+ * leaf's sweep is read against the treads and landings of every stair that lie more than 1-1/2 in below
31
+ * the door's own floor; ground the door's level covers (a slab, a landing at the threshold) is not steps.
32
+ * The text says nothing of a door swinging over a flat landing: that is a design preference (Architect
33
+ * Pro's `door_over_landing` keeps both landings clear), not this check.
34
+ *
35
+ * It is a code's rule. With no `site.metadata.codeProfile` a finding is information that names the US
36
+ * IRC it used; with `irc-2021` it is a warning; a profile with no row for it reports nothing.
37
+ */
38
+ export function doorOverStairIssues(nodes, shapes) {
39
+ const profile = codeProfileOf(nodes);
40
+ const applied = profile ?? CODE_PROFILES['irc-2021'];
41
+ const row = applied.thresholds.doorThresholdDrop;
42
+ if (!row)
43
+ return [];
44
+ const stairs = [];
45
+ for (const node of Object.values(nodes)) {
46
+ if (node.type !== 'stair')
47
+ continue;
48
+ try {
49
+ stairs.push({ stair: node, surfaces: resolveStairWalkingSurfaces(node, nodes) });
50
+ }
51
+ catch {
52
+ // a stair whose surfaces cannot be read (its detail is over budget) has nothing to sweep against
53
+ }
54
+ }
55
+ if (stairs.length === 0)
56
+ return [];
57
+ const elevations = getLevelElevations(nodes);
58
+ const out = [];
59
+ for (const level of shapes.levels) {
60
+ const baseY = elevations.get(level.levelId)?.baseY ?? 0;
61
+ const steps = stairs
62
+ .map(({ stair, surfaces }) => ({
63
+ stair,
64
+ surfaces: surfaces.filter((surface) => surface.top <= baseY - row.value && surface.top >= baseY - BAND_M),
65
+ }))
66
+ .filter(({ surfaces }) => surfaces.length > 0);
67
+ if (steps.length === 0)
68
+ continue;
69
+ const floors = shapes.levels
70
+ .flatMap((other) => other.floors)
71
+ .filter((floor) => floor.y >= baseY - row.value && floor.y <= baseY + FLOOR_ABOVE_M)
72
+ .map((floor) => ({ outer: floor.outer, holes: floor.holes }));
73
+ for (const door of swingDoors(nodes, level.levelId)) {
74
+ const hung = hungOf(door);
75
+ const frame = doorFrame(nodes, door);
76
+ const hinge = hingeOf(nodes, door, hung);
77
+ const fan = sweptFan(hinge, 2 * frame.half - FRAME_M, (theta) => leafDirection(frame, hung, theta));
78
+ // the room the door belongs to is the one behind the leaf; failing that, the one it swings into
79
+ const centre = [
80
+ frame.sx + frame.tx * frame.along,
81
+ frame.sz + frame.tz * frame.along,
82
+ ];
83
+ const beside = (side) => [
84
+ centre[0] + frame.nx * hung.swing * side * ROOM_PROBE_M,
85
+ centre[1] + frame.nz * hung.swing * side * ROOM_PROBE_M,
86
+ ];
87
+ const room = roomAt(nodes, level.levelId, beside(-1)) ?? roomAt(nodes, level.levelId, beside(1));
88
+ for (const { stair, surfaces } of steps) {
89
+ let over = 0;
90
+ let nearest = Number.NEGATIVE_INFINITY;
91
+ for (const surface of surfaces) {
92
+ const swept = intersection(fan, surface.region);
93
+ if (swept.length === 0)
94
+ continue;
95
+ const bare = area(floors.length ? difference(swept, floors) : swept);
96
+ if (bare < MIN_OVERLAP_M2)
97
+ continue;
98
+ over += bare;
99
+ nearest = Math.max(nearest, surface.top);
100
+ }
101
+ if (over === 0)
102
+ continue;
103
+ const drop = baseY - nearest;
104
+ const name = nameOf(nodes, door.id);
105
+ const stairName = nameOf(nodes, stair.id);
106
+ out.push({
107
+ type: 'usage_door_over_stair',
108
+ message: `${quote(name)}${room ? ` in ${quote(room.name)}` : ''} swings over the steps of ${quote(stairName)}: its leaf passes over ${m(over)} m² of treads, the nearest ${m(drop)} m below the threshold, where ${applied.label} (${row.section}) wants a floor or landing for the leaf to open onto${profile ? '' : ', and this project names no code'}. Swing it the other way, hinge it on the other side, or give the stair a landing as deep as the door is wide.`,
109
+ severity: profile ? 'warning' : 'info',
110
+ nodeIds: unique([room?.id, door.id, stair.id]),
111
+ valueM: Math.round(drop * 1000) / 1000,
112
+ thresholdM: row.value,
113
+ place: { room: room?.name ?? '', roomId: room?.id ?? level.levelId, at: hinge },
114
+ obstacles: [
115
+ { nodeId: stair.id, name: stairName, kind: 'stair', shape: 'exact', movable: false },
116
+ ],
117
+ approximate: false,
118
+ code: {
119
+ profile: applied.id,
120
+ cite: row.cite,
121
+ source: row.source,
122
+ byDefault: profile === null,
123
+ },
124
+ });
125
+ }
126
+ }
127
+ }
128
+ return out;
129
+ }
@@ -0,0 +1,14 @@
1
+ import { type UsageIssue } from './findings.js';
2
+ import type { UsageShapes } from './types.js';
3
+ import { type Nodes } from './walls.js';
4
+ /**
5
+ * What closes off part of a room: from each entrance of a room (a doorway, or an open edge to the room
6
+ * beside it) the widest way to the room's open floor, with the pieces of furniture standing where they
7
+ * are. A way under a passage's width that a piece bounds is a finding that names the piece, the room and
8
+ * what is on the other side of the pinch. A leaf swinging open is `doorSwingIssues`'s, a doorway's own
9
+ * width and the walls' are the passage measure's: only a free-standing piece is named. What is built to
10
+ * stand there stays quiet: a kitchen run or anything on a wall, a fixture, built-in joinery, foliage, a
11
+ * building element, a rug, a piece on another piece. A room narrower than a passage is judged on its doorway only.
12
+ */
13
+ export declare function entryIssues(nodes: Nodes, shapes: UsageShapes): UsageIssue[];
14
+ //# sourceMappingURL=entry-way.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-way.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/entry-way.ts"],"names":[],"mappings":"AAQA,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAY/D,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AA4HhD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,EAAE,CA2G3E"}
@@ -0,0 +1,219 @@
1
+ import { floorsOf } from '../../agent-operations/circulation-spaces.js';
2
+ import { isFloorUnderlay } from '../../agent-operations/furniture-kind.js';
3
+ import { area, containsPoint, intersection } from '../../lib/polygon-boolean.js';
4
+ import { getLevelElevations } from '../../services/storey.js';
5
+ import { getWallThickness } from '../../systems/wall/wall-footprint.js';
6
+ import { getWallLocalFaceZ } from '../../systems/wall/wall-frame.js';
7
+ import { CLASH_INFO_M, CLASH_MIN_AREA_M2, wallFixed } from './clash.js';
8
+ import { DOOR_M, PASSAGE_M } from './findings.js';
9
+ import { m, nameOf, quote, unique } from './labels.js';
10
+ import { doorwayRing } from './openings.js';
11
+ import { boxesMeet, isBuildingElement, isFoliage, isPiecePrism, narrowestExtent, ringBox, } from './pieces.js';
12
+ import { doorFrame, FIXTURE } from './swings.js';
13
+ import { levelWalls } from './walls.js';
14
+ import { wayIn } from './way-in.js';
15
+ /** Where a doorway is looked at from: this far to either side of the wall's middle (m). */
16
+ const SIDE_M = 0.3;
17
+ /** A zone edge is sampled this often (m) to find where no wall stands on it. */
18
+ const SAMPLE_M = 0.05;
19
+ /** Joinery made for the room: a built-in robe or a fitted unit is where it was designed to be. */
20
+ const BUILT_IN = /built[- ]?in|fitted|joinery/i;
21
+ /** A wall stands on a zone edge when its middle line is within half its thickness and this much (m). */
22
+ const SCRIBE_M = 0.02;
23
+ /** An open edge is a passage of this half thickness across (m): a doorway's, a wall's half thickness and a centimetre. */
24
+ const OPEN_HALF_M = 0.065;
25
+ /** The segment's distance from a point. */
26
+ function segmentDistance(p, a, b) {
27
+ const dx = b[0] - a[0];
28
+ const dz = b[1] - a[1];
29
+ const length2 = dx * dx + dz * dz;
30
+ const t = length2 < 1e-12
31
+ ? 0
32
+ : Math.max(0, Math.min(1, ((p[0] - a[0]) * dx + (p[1] - a[1]) * dz) / length2));
33
+ return Math.hypot(p[0] - (a[0] + dx * t), p[1] - (a[1] + dz * t));
34
+ }
35
+ /**
36
+ * The stretches of a zone's boundary with no wall on them, a doorway's width or more: where the room is
37
+ * open to the one beside it. A ring across each, a wall's thickness deep, is the way in.
38
+ */
39
+ function openEntrances(walls, zone, zones, self) {
40
+ const out = [];
41
+ const covered = (p) => walls.some((wall) => segmentDistance(p, wall.start, wall.end) <=
42
+ getWallThickness(wall) / 2 + SCRIBE_M);
43
+ for (const [i, a] of zone.polygon.entries()) {
44
+ const b = zone.polygon[(i + 1) % zone.polygon.length];
45
+ const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
46
+ if (length < DOOR_M)
47
+ continue;
48
+ const tx = (b[0] - a[0]) / length;
49
+ const tz = (b[1] - a[1]) / length;
50
+ const steps = Math.ceil(length / SAMPLE_M);
51
+ let from = -1;
52
+ const close = (last) => {
53
+ const s0 = (from * length) / steps;
54
+ const s1 = (last * length) / steps;
55
+ if (from >= 0 && s1 - s0 >= DOOR_M) {
56
+ const p0 = [a[0] + tx * s0, a[1] + tz * s0];
57
+ const p1 = [a[0] + tx * s1, a[1] + tz * s1];
58
+ const mid = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
59
+ // a room beyond: the opening is a way between two rooms, not a gap in the outline
60
+ const beyond = [1, -1].some((side) => {
61
+ const q = [mid[0] - tz * side * SIDE_M, mid[1] + tx * side * SIDE_M];
62
+ return (!containsPoint([{ outer: zone.polygon, holes: zone.holes }], q) &&
63
+ zones.some((z) => z.id !== self && containsPoint([{ outer: z.polygon, holes: z.holes }], q)));
64
+ });
65
+ if (beyond)
66
+ out.push({
67
+ ring: [
68
+ [p0[0] - tz * OPEN_HALF_M, p0[1] + tx * OPEN_HALF_M],
69
+ [p1[0] - tz * OPEN_HALF_M, p1[1] + tx * OPEN_HALF_M],
70
+ [p1[0] + tz * OPEN_HALF_M, p1[1] - tx * OPEN_HALF_M],
71
+ [p0[0] + tz * OPEN_HALF_M, p0[1] - tx * OPEN_HALF_M],
72
+ ],
73
+ at: mid,
74
+ });
75
+ }
76
+ from = -1;
77
+ };
78
+ for (let s = 0; s <= steps; s++) {
79
+ const p = [a[0] + (tx * s * length) / steps, a[1] + (tz * s * length) / steps];
80
+ if (covered(p)) {
81
+ if (from >= 0)
82
+ close(s - 1);
83
+ }
84
+ else if (from < 0)
85
+ from = s;
86
+ }
87
+ if (from >= 0)
88
+ close(steps);
89
+ }
90
+ return out;
91
+ }
92
+ /** The doors of a level that lead into a zone: a doorway of any kind but a vehicle's whose one side, and only one, is in the zone. */
93
+ function doorEntrances(nodes, doors, zone) {
94
+ const out = [];
95
+ for (const door of doors) {
96
+ const f = doorFrame(nodes, door);
97
+ const across = (getWallLocalFaceZ(f.wall, 'a') + getWallLocalFaceZ(f.wall, 'b')) / 2;
98
+ const side = (sign) => [
99
+ f.sx + f.tx * f.along + f.nx * (across + sign * SIDE_M),
100
+ f.sz + f.tz * f.along + f.nz * (across + sign * SIDE_M),
101
+ ];
102
+ const inside = [1, -1].filter((sign) => containsPoint([{ outer: zone.polygon, holes: zone.holes }], side(sign)));
103
+ if (inside.length !== 1)
104
+ continue;
105
+ const ring = doorwayRing(f.wall, door);
106
+ if (!ring)
107
+ continue;
108
+ out.push({
109
+ ring,
110
+ at: [f.sx + f.tx * f.along + f.nx * across, f.sz + f.tz * f.along + f.nz * across],
111
+ door,
112
+ });
113
+ }
114
+ return out;
115
+ }
116
+ /**
117
+ * What closes off part of a room: from each entrance of a room (a doorway, or an open edge to the room
118
+ * beside it) the widest way to the room's open floor, with the pieces of furniture standing where they
119
+ * are. A way under a passage's width that a piece bounds is a finding that names the piece, the room and
120
+ * what is on the other side of the pinch. A leaf swinging open is `doorSwingIssues`'s, a doorway's own
121
+ * width and the walls' are the passage measure's: only a free-standing piece is named. What is built to
122
+ * stand there stays quiet: a kitchen run or anything on a wall, a fixture, built-in joinery, foliage, a
123
+ * building element, a rug, a piece on another piece. A room narrower than a passage is judged on its doorway only.
124
+ */
125
+ export function entryIssues(nodes, shapes) {
126
+ const out = [];
127
+ const floors = floorsOf(nodes).floors;
128
+ const elevations = getLevelElevations(nodes);
129
+ for (const level of shapes.levels) {
130
+ const floor = floors.find((f) => f.id === level.levelId);
131
+ if (!floor)
132
+ continue;
133
+ const baseY = elevations.get(level.levelId)?.baseY ?? 0;
134
+ const isUnderlay = (prism) => nodes[prism.nodeId]?.type === 'item' && isFloorUnderlay(nodes[prism.nodeId]);
135
+ const standing = (prism) => {
136
+ const node = nodes[prism.nodeId];
137
+ return ((prism.kind === 'item' || prism.kind === 'shelf') &&
138
+ isPiecePrism(prism) &&
139
+ !wallFixed(nodes, prism) &&
140
+ !isUnderlay(prism) &&
141
+ !isFoliage(nodes, prism.nodeId) &&
142
+ !isBuildingElement(nodes, prism.nodeId) &&
143
+ !FIXTURE.test(nameOf(nodes, prism.nodeId)) &&
144
+ !BUILT_IN.test(nameOf(nodes, prism.nodeId)) &&
145
+ nodes[node?.parentId ?? '']?.type !== 'item');
146
+ };
147
+ const named = new Set(level.prisms.filter(standing).map((prism) => prism.id));
148
+ if (named.size === 0)
149
+ continue;
150
+ const namedPrisms = level.prisms.filter((prism) => named.has(prism.id));
151
+ const walls = levelWalls(nodes, level.levelId);
152
+ const wallIds = new Set(walls.map((wall) => wall.id));
153
+ const doors = Object.values(nodes).filter((node) => node.type === 'door' &&
154
+ node.visible !== false &&
155
+ !String(node.doorType).startsWith('garage') &&
156
+ wallIds.has(node.parentId ?? ''));
157
+ const zones = floor.zones.filter((zone) => !zone.outdoor);
158
+ const found = new Map();
159
+ for (const zone of zones) {
160
+ if (narrowestExtent([{ outer: zone.polygon }]) < PASSAGE_M)
161
+ continue;
162
+ const zoneBox = ringBox(zone.polygon);
163
+ // a piece is in the room when it stands a contact's depth inside it: one against the wall on the other side is that room's
164
+ const here = new Set(namedPrisms
165
+ .filter((prism) => {
166
+ if (!boxesMeet(ringBox(prism.outer), zoneBox))
167
+ return false;
168
+ const meet = intersection({ outer: prism.outer, holes: prism.holes }, { outer: zone.polygon, holes: zone.holes });
169
+ return area(meet) >= CLASH_MIN_AREA_M2 && narrowestExtent(meet) >= CLASH_INFO_M;
170
+ })
171
+ .map((prism) => prism.id));
172
+ if (here.size === 0)
173
+ continue;
174
+ const room = { id: zone.id, name: nameOf(nodes, zone.id) };
175
+ const entrances = [
176
+ ...doorEntrances(nodes, doors, zone),
177
+ ...openEntrances(walls, zone, zones, zone.id),
178
+ ];
179
+ for (const entrance of entrances) {
180
+ const way = wayIn(shapes, level, zone, entrance.ring, entrance.at, baseY, isUnderlay, (prism) => here.has(prism.id));
181
+ if (!way)
182
+ continue;
183
+ const subject = way.by.find((o) => here.has(o.prism.id));
184
+ const other = way.by.find((o) => o !== subject);
185
+ const approximate = way.by.some((o) => o.prism.shape === 'approx');
186
+ const key = `${zone.id}|${subject.prism.nodeId}`;
187
+ if ((found.get(key)?.width ?? Number.POSITIVE_INFINITY) <= way.width)
188
+ continue;
189
+ found.set(key, {
190
+ width: way.width,
191
+ issue: {
192
+ type: 'usage_entry_narrow',
193
+ message: `${quote(nameOf(nodes, subject.prism.nodeId))} leaves ${m(way.width)} m to enter ${quote(room.name)}, ${other ? `between it and ${quote(nameOf(nodes, other.prism.nodeId))}` : 'against it'} (below ${m(PASSAGE_M)} m).`,
194
+ severity: 'warning',
195
+ nodeIds: unique([
196
+ room.id,
197
+ subject.prism.nodeId,
198
+ other?.prism.nodeId,
199
+ entrance.door?.id,
200
+ ]),
201
+ valueM: way.width,
202
+ thresholdM: PASSAGE_M,
203
+ place: { room: room.name, roomId: room.id, at: way.at },
204
+ obstacles: way.by.map((o) => ({
205
+ nodeId: o.prism.nodeId,
206
+ name: nameOf(nodes, o.prism.nodeId),
207
+ kind: o.prism.kind,
208
+ shape: o.prism.shape,
209
+ movable: false,
210
+ })),
211
+ approximate,
212
+ },
213
+ });
214
+ }
215
+ }
216
+ out.push(...[...found.values()].map(({ issue }) => issue));
217
+ }
218
+ return out;
219
+ }
@@ -0,0 +1,18 @@
1
+ import type { Prism, Skipped } from './types.js';
2
+ import type { Nodes } from './walls.js';
3
+ export type FencePrisms = {
4
+ fenceId: string;
5
+ levelId: string | null;
6
+ prisms: Prism[];
7
+ };
8
+ /**
9
+ * A deck guard with nothing cut into it is read part by part (`guardPrisms`). Every other fence is
10
+ * a strip along its centreline, as wide as its thicker of thickness and post, from its support to
11
+ * its height, with a gate or an open passage taken out of it; the infill is not drawn (a picket
12
+ * fence is solid to a person) and the height does not follow terrain, so it is approximate.
13
+ */
14
+ export declare function fenceBodies(nodes: Nodes): {
15
+ fences: FencePrisms[];
16
+ skipped: Skipped[];
17
+ };
18
+ //# sourceMappingURL=fences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fences.d.ts","sourceRoot":"","sources":["../../../src/spatial/usage-field/fences.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAQ,OAAO,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAsBpC,MAAM,MAAM,WAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAA;AA6KtF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,CA0FvF"}