@pascal-app/core 1.0.4 → 1.0.6

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 (866) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +102 -90
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/add-object-cases.js +301 -1
  4. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
  5. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
  6. package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
  7. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  8. package/dist/agent-operations/__fixtures__/build-room-cases.js +410 -40
  9. package/dist/agent-operations/__fixtures__/cases.d.ts +18 -3
  10. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  11. package/dist/agent-operations/__fixtures__/cases.js +183 -4
  12. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
  13. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
  14. package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
  15. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
  16. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
  17. package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
  18. package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
  19. package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
  20. package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
  21. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
  22. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
  23. package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
  24. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
  25. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
  26. package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
  27. package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
  28. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
  29. package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
  30. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
  31. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
  32. package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
  33. package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
  34. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
  35. package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
  36. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  37. package/dist/agent-operations/__fixtures__/place-items-cases.js +80 -2
  38. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
  39. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
  40. package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
  41. package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
  42. package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
  43. package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
  44. package/dist/agent-operations/__fixtures__/room-cases.d.ts +2 -1
  45. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  46. package/dist/agent-operations/__fixtures__/room-cases.js +136 -1
  47. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
  48. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
  49. package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
  50. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  51. package/dist/agent-operations/__fixtures__/search-assets-cases.js +15 -3
  52. package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
  53. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
  54. package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
  55. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +1 -0
  56. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  57. package/dist/agent-operations/__fixtures__/structure-cases.js +630 -3
  58. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +311 -1
  59. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  60. package/dist/agent-operations/__fixtures__/verify-scene-cases.js +59 -11
  61. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
  62. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
  63. package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
  64. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
  65. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
  66. package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
  67. package/dist/agent-operations/achieved.d.ts +5 -0
  68. package/dist/agent-operations/achieved.d.ts.map +1 -1
  69. package/dist/agent-operations/achieved.js +21 -1
  70. package/dist/agent-operations/add-column.d.ts.map +1 -1
  71. package/dist/agent-operations/add-column.js +3 -1
  72. package/dist/agent-operations/add-fence.d.ts +18 -0
  73. package/dist/agent-operations/add-fence.d.ts.map +1 -0
  74. package/dist/agent-operations/add-fence.js +48 -0
  75. package/dist/agent-operations/add-level.d.ts +4 -1
  76. package/dist/agent-operations/add-level.d.ts.map +1 -1
  77. package/dist/agent-operations/add-level.js +48 -12
  78. package/dist/agent-operations/add-object.d.ts +38 -9
  79. package/dist/agent-operations/add-object.d.ts.map +1 -1
  80. package/dist/agent-operations/add-object.js +172 -11
  81. package/dist/agent-operations/add-wall.d.ts +1 -3
  82. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  83. package/dist/agent-operations/add-wall.js +35 -9
  84. package/dist/agent-operations/apply-changes.d.ts +7 -1
  85. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  86. package/dist/agent-operations/apply-changes.js +54 -22
  87. package/dist/agent-operations/apply-outcome.d.ts +6 -0
  88. package/dist/agent-operations/apply-outcome.d.ts.map +1 -1
  89. package/dist/agent-operations/apply-outcome.js +23 -8
  90. package/dist/agent-operations/asset-views.d.ts +75 -0
  91. package/dist/agent-operations/asset-views.d.ts.map +1 -0
  92. package/dist/agent-operations/asset-views.js +234 -0
  93. package/dist/agent-operations/author-scene.d.ts +157 -0
  94. package/dist/agent-operations/author-scene.d.ts.map +1 -0
  95. package/dist/agent-operations/author-scene.js +1076 -0
  96. package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
  97. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
  98. package/dist/agent-operations/authored-scene-merge.js +96 -0
  99. package/dist/agent-operations/batch.d.ts +22 -0
  100. package/dist/agent-operations/batch.d.ts.map +1 -0
  101. package/dist/agent-operations/batch.js +104 -0
  102. package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
  103. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
  104. package/dist/agent-operations/ceiling-object-observations.js +111 -0
  105. package/dist/agent-operations/corner-window.d.ts +19 -0
  106. package/dist/agent-operations/corner-window.d.ts.map +1 -0
  107. package/dist/agent-operations/corner-window.js +84 -0
  108. package/dist/agent-operations/create-roof.d.ts +32 -0
  109. package/dist/agent-operations/create-roof.d.ts.map +1 -0
  110. package/dist/agent-operations/create-roof.js +304 -0
  111. package/dist/agent-operations/create-room.d.ts +2 -0
  112. package/dist/agent-operations/create-room.d.ts.map +1 -1
  113. package/dist/agent-operations/create-room.js +73 -5
  114. package/dist/agent-operations/create-stair.d.ts +6 -28
  115. package/dist/agent-operations/create-stair.d.ts.map +1 -1
  116. package/dist/agent-operations/create-stair.js +187 -104
  117. package/dist/agent-operations/design-brief.d.ts +38 -0
  118. package/dist/agent-operations/design-brief.d.ts.map +1 -0
  119. package/dist/agent-operations/design-brief.js +300 -0
  120. package/dist/agent-operations/designs.d.ts +24 -0
  121. package/dist/agent-operations/designs.d.ts.map +1 -0
  122. package/dist/agent-operations/designs.js +48 -0
  123. package/dist/agent-operations/door-clearance.d.ts +16 -1
  124. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/door-clearance.js +61 -4
  126. package/dist/agent-operations/duplicate-level.d.ts.map +1 -1
  127. package/dist/agent-operations/duplicate-level.js +2 -1
  128. package/dist/agent-operations/find-by-type.d.ts +14 -7
  129. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  130. package/dist/agent-operations/find-by-type.js +266 -43
  131. package/dist/agent-operations/furnish-room.d.ts +22 -1
  132. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  133. package/dist/agent-operations/furnish-room.js +66 -19
  134. package/dist/agent-operations/furniture-kind.d.ts +22 -0
  135. package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
  136. package/dist/agent-operations/furniture-kind.js +69 -0
  137. package/dist/agent-operations/get-node.d.ts +5 -2
  138. package/dist/agent-operations/get-node.d.ts.map +1 -1
  139. package/dist/agent-operations/get-node.js +82 -10
  140. package/dist/agent-operations/hosted-services.d.ts +2 -1
  141. package/dist/agent-operations/hosted-services.d.ts.map +1 -1
  142. package/dist/agent-operations/index.d.ts +281 -69
  143. package/dist/agent-operations/index.d.ts.map +1 -1
  144. package/dist/agent-operations/index.js +66 -5
  145. package/dist/agent-operations/item-space.d.ts +22 -0
  146. package/dist/agent-operations/item-space.d.ts.map +1 -0
  147. package/dist/agent-operations/item-space.js +69 -0
  148. package/dist/agent-operations/layout-clearance.d.ts +52 -3
  149. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  150. package/dist/agent-operations/layout-clearance.js +340 -30
  151. package/dist/agent-operations/level-height-fill.d.ts +12 -0
  152. package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
  153. package/dist/agent-operations/level-height-fill.js +59 -0
  154. package/dist/agent-operations/level-reads.d.ts +5 -1
  155. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  156. package/dist/agent-operations/level-reads.js +10 -3
  157. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  158. package/dist/agent-operations/list-levels.js +23 -0
  159. package/dist/agent-operations/material-preset.d.ts.map +1 -1
  160. package/dist/agent-operations/material-preset.js +3 -9
  161. package/dist/agent-operations/material-refs.d.ts +7 -1
  162. package/dist/agent-operations/material-refs.d.ts.map +1 -1
  163. package/dist/agent-operations/material-refs.js +10 -5
  164. package/dist/agent-operations/merge-windows.d.ts +6 -0
  165. package/dist/agent-operations/merge-windows.d.ts.map +1 -0
  166. package/dist/agent-operations/merge-windows.js +27 -0
  167. package/dist/agent-operations/move-roofs.d.ts +9 -0
  168. package/dist/agent-operations/move-roofs.d.ts.map +1 -0
  169. package/dist/agent-operations/move-roofs.js +29 -0
  170. package/dist/agent-operations/paint.d.ts +2 -1
  171. package/dist/agent-operations/paint.d.ts.map +1 -1
  172. package/dist/agent-operations/paint.js +163 -53
  173. package/dist/agent-operations/photo-elevation.d.ts +155 -0
  174. package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
  175. package/dist/agent-operations/photo-elevation.js +761 -0
  176. package/dist/agent-operations/place-in-room.d.ts +29 -0
  177. package/dist/agent-operations/place-in-room.d.ts.map +1 -0
  178. package/dist/agent-operations/place-in-room.js +403 -0
  179. package/dist/agent-operations/place-items.d.ts.map +1 -1
  180. package/dist/agent-operations/place-items.js +15 -2
  181. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  182. package/dist/agent-operations/plan-geometry.js +3 -0
  183. package/dist/agent-operations/point-context.d.ts +139 -0
  184. package/dist/agent-operations/point-context.d.ts.map +1 -0
  185. package/dist/agent-operations/point-context.js +1 -0
  186. package/dist/agent-operations/project-files.d.ts +9 -0
  187. package/dist/agent-operations/project-files.d.ts.map +1 -0
  188. package/dist/agent-operations/project-files.js +25 -0
  189. package/dist/agent-operations/record-made.d.ts +18 -0
  190. package/dist/agent-operations/record-made.d.ts.map +1 -0
  191. package/dist/agent-operations/record-made.js +28 -0
  192. package/dist/agent-operations/roof-footprint.d.ts +24 -0
  193. package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
  194. package/dist/agent-operations/roof-footprint.js +242 -0
  195. package/dist/agent-operations/roof-writes.d.ts +20 -0
  196. package/dist/agent-operations/roof-writes.d.ts.map +1 -0
  197. package/dist/agent-operations/roof-writes.js +165 -0
  198. package/dist/agent-operations/room-findings.d.ts +54 -0
  199. package/dist/agent-operations/room-findings.d.ts.map +1 -0
  200. package/dist/agent-operations/room-findings.js +143 -0
  201. package/dist/agent-operations/room-floor-script.d.ts +23 -0
  202. package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
  203. package/dist/agent-operations/room-floor-script.js +54 -0
  204. package/dist/agent-operations/room-structure.d.ts +2 -2
  205. package/dist/agent-operations/room-structure.d.ts.map +1 -1
  206. package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
  207. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
  208. package/dist/agent-operations/scene-checkpoint.js +176 -0
  209. package/dist/agent-operations/scene-queries.d.ts +3750 -3319
  210. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  211. package/dist/agent-operations/scene-queries.js +13 -23
  212. package/dist/agent-operations/scene-review.d.ts +52 -0
  213. package/dist/agent-operations/scene-review.d.ts.map +1 -0
  214. package/dist/agent-operations/scene-review.js +106 -0
  215. package/dist/agent-operations/scene-view.d.ts +82 -15
  216. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  217. package/dist/agent-operations/scene-view.js +408 -51
  218. package/dist/agent-operations/search-assets.d.ts +2 -2
  219. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  220. package/dist/agent-operations/search-assets.js +4 -3
  221. package/dist/agent-operations/search-materials.d.ts +9 -3
  222. package/dist/agent-operations/search-materials.d.ts.map +1 -1
  223. package/dist/agent-operations/search-materials.js +83 -29
  224. package/dist/agent-operations/set-checkpoint.d.ts +9 -0
  225. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
  226. package/dist/agent-operations/set-checkpoint.js +31 -0
  227. package/dist/agent-operations/set-ground-level.d.ts +12 -0
  228. package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
  229. package/dist/agent-operations/set-ground-level.js +61 -0
  230. package/dist/agent-operations/site.d.ts +21 -0
  231. package/dist/agent-operations/site.d.ts.map +1 -0
  232. package/dist/agent-operations/site.js +123 -0
  233. package/dist/agent-operations/types.d.ts +66 -7
  234. package/dist/agent-operations/types.d.ts.map +1 -1
  235. package/dist/agent-operations/verify-scene.d.ts +39 -5
  236. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  237. package/dist/agent-operations/verify-scene.js +223 -44
  238. package/dist/agent-operations/wall-face-script.d.ts +28 -0
  239. package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
  240. package/dist/agent-operations/wall-face-script.js +62 -0
  241. package/dist/agent-operations/wall-object-observations.d.ts +41 -0
  242. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
  243. package/dist/agent-operations/wall-object-observations.js +249 -0
  244. package/dist/agent-operations/wall-opening.d.ts +23 -23
  245. package/dist/agent-operations/wall-opening.d.ts.map +1 -1
  246. package/dist/agent-operations/wall-skirting.d.ts +24 -0
  247. package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
  248. package/dist/agent-operations/wall-skirting.js +85 -0
  249. package/dist/agent-tools/add-object.d.ts +11 -7
  250. package/dist/agent-tools/add-object.d.ts.map +1 -1
  251. package/dist/agent-tools/add-object.js +17 -11
  252. package/dist/agent-tools/assets.d.ts +8 -0
  253. package/dist/agent-tools/assets.d.ts.map +1 -1
  254. package/dist/agent-tools/assets.js +13 -1
  255. package/dist/agent-tools/author-scene.d.ts +651 -0
  256. package/dist/agent-tools/author-scene.d.ts.map +1 -0
  257. package/dist/agent-tools/author-scene.js +252 -0
  258. package/dist/agent-tools/batch.d.ts +25 -0
  259. package/dist/agent-tools/batch.d.ts.map +1 -0
  260. package/dist/agent-tools/batch.js +61 -0
  261. package/dist/agent-tools/checkpoints.d.ts +13 -0
  262. package/dist/agent-tools/checkpoints.d.ts.map +1 -0
  263. package/dist/agent-tools/checkpoints.js +16 -0
  264. package/dist/agent-tools/clear-scene.d.ts.map +1 -1
  265. package/dist/agent-tools/collections.d.ts +6 -6
  266. package/dist/agent-tools/collections.d.ts.map +1 -1
  267. package/dist/agent-tools/columns.d.ts +18 -18
  268. package/dist/agent-tools/columns.js +2 -2
  269. package/dist/agent-tools/corner-window.d.ts +46 -0
  270. package/dist/agent-tools/corner-window.d.ts.map +1 -0
  271. package/dist/agent-tools/corner-window.js +47 -0
  272. package/dist/agent-tools/create-room.d.ts +26 -25
  273. package/dist/agent-tools/create-room.d.ts.map +1 -1
  274. package/dist/agent-tools/create-room.js +11 -4
  275. package/dist/agent-tools/design-brief.d.ts +408 -0
  276. package/dist/agent-tools/design-brief.d.ts.map +1 -0
  277. package/dist/agent-tools/design-brief.js +149 -0
  278. package/dist/agent-tools/designs.d.ts +34 -0
  279. package/dist/agent-tools/designs.d.ts.map +1 -0
  280. package/dist/agent-tools/designs.js +50 -0
  281. package/dist/agent-tools/fences.d.ts +28 -0
  282. package/dist/agent-tools/fences.d.ts.map +1 -0
  283. package/dist/agent-tools/fences.js +31 -0
  284. package/dist/agent-tools/find-by-type.d.ts +8 -1
  285. package/dist/agent-tools/find-by-type.d.ts.map +1 -1
  286. package/dist/agent-tools/find-by-type.js +23 -2
  287. package/dist/agent-tools/furnish-room.d.ts +10 -8
  288. package/dist/agent-tools/furnish-room.d.ts.map +1 -1
  289. package/dist/agent-tools/furnish-room.js +3 -1
  290. package/dist/agent-tools/hosted-services.d.ts +177 -141
  291. package/dist/agent-tools/hosted-services.d.ts.map +1 -1
  292. package/dist/agent-tools/hosted-services.js +47 -14
  293. package/dist/agent-tools/index.d.ts +894 -215
  294. package/dist/agent-tools/index.d.ts.map +1 -1
  295. package/dist/agent-tools/index.js +47 -3
  296. package/dist/agent-tools/levels.d.ts +11 -3
  297. package/dist/agent-tools/levels.d.ts.map +1 -1
  298. package/dist/agent-tools/levels.js +16 -5
  299. package/dist/agent-tools/measurement.d.ts +38 -20
  300. package/dist/agent-tools/measurement.d.ts.map +1 -1
  301. package/dist/agent-tools/measurement.js +117 -67
  302. package/dist/agent-tools/merge-windows.d.ts +10 -0
  303. package/dist/agent-tools/merge-windows.d.ts.map +1 -0
  304. package/dist/agent-tools/merge-windows.js +12 -0
  305. package/dist/agent-tools/nodes.d.ts.map +1 -1
  306. package/dist/agent-tools/nodes.js +1 -1
  307. package/dist/agent-tools/notation-inventory.d.ts +16 -0
  308. package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
  309. package/dist/agent-tools/notation-inventory.js +105 -0
  310. package/dist/agent-tools/paint.d.ts +5 -5
  311. package/dist/agent-tools/paint.d.ts.map +1 -1
  312. package/dist/agent-tools/paint.js +1 -1
  313. package/dist/agent-tools/photo-elevation.d.ts +32 -0
  314. package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
  315. package/dist/agent-tools/photo-elevation.js +73 -0
  316. package/dist/agent-tools/place-in-room.d.ts +35 -0
  317. package/dist/agent-tools/place-in-room.d.ts.map +1 -0
  318. package/dist/agent-tools/place-in-room.js +61 -0
  319. package/dist/agent-tools/place-items.d.ts +1 -1
  320. package/dist/agent-tools/place-items.js +2 -2
  321. package/dist/agent-tools/project-files.d.ts +189 -0
  322. package/dist/agent-tools/project-files.d.ts.map +1 -0
  323. package/dist/agent-tools/project-files.js +99 -0
  324. package/dist/agent-tools/refusal.d.ts.map +1 -1
  325. package/dist/agent-tools/retired.d.ts +21 -0
  326. package/dist/agent-tools/retired.d.ts.map +1 -0
  327. package/dist/agent-tools/retired.js +29 -0
  328. package/dist/agent-tools/roofs.d.ts +100 -0
  329. package/dist/agent-tools/roofs.d.ts.map +1 -0
  330. package/dist/agent-tools/roofs.js +96 -0
  331. package/dist/agent-tools/room-structure.d.ts +46 -38
  332. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  333. package/dist/agent-tools/room-structure.js +30 -27
  334. package/dist/agent-tools/search-materials.d.ts +22 -3
  335. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  336. package/dist/agent-tools/search-materials.js +13 -14
  337. package/dist/agent-tools/site.d.ts +27 -0
  338. package/dist/agent-tools/site.d.ts.map +1 -0
  339. package/dist/agent-tools/site.js +40 -0
  340. package/dist/agent-tools/sources.d.ts +12 -0
  341. package/dist/agent-tools/sources.d.ts.map +1 -0
  342. package/dist/agent-tools/sources.js +11 -0
  343. package/dist/agent-tools/stairs.d.ts +48 -28
  344. package/dist/agent-tools/stairs.d.ts.map +1 -1
  345. package/dist/agent-tools/stairs.js +65 -22
  346. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  347. package/dist/agent-tools/verify-scene.js +1 -1
  348. package/dist/agent-tools/view-scene.d.ts +50 -12
  349. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  350. package/dist/agent-tools/view-scene.js +74 -31
  351. package/dist/agent-tools/wall-openings.d.ts +77 -73
  352. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  353. package/dist/agent-tools/wall-openings.js +9 -5
  354. package/dist/agent-tools/walls.d.ts +4 -4
  355. package/dist/agent-tools/walls.d.ts.map +1 -1
  356. package/dist/agent-tools/walls.js +7 -2
  357. package/dist/building/__fixtures__/wall-opening-cases.d.ts +454 -250
  358. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  359. package/dist/building/__fixtures__/wall-opening-cases.js +62 -2
  360. package/dist/building/corner-window.d.ts +56 -0
  361. package/dist/building/corner-window.d.ts.map +1 -0
  362. package/dist/building/corner-window.js +179 -0
  363. package/dist/building/ground-level.d.ts +26 -0
  364. package/dist/building/ground-level.d.ts.map +1 -0
  365. package/dist/building/ground-level.js +58 -0
  366. package/dist/building/index.d.ts +5 -0
  367. package/dist/building/index.d.ts.map +1 -1
  368. package/dist/building/index.js +5 -0
  369. package/dist/building/level-duplication.d.ts +7472 -6613
  370. package/dist/building/level-duplication.d.ts.map +1 -1
  371. package/dist/building/level-duplication.js +18 -4
  372. package/dist/building/level-insertion.d.ts +55 -0
  373. package/dist/building/level-insertion.d.ts.map +1 -0
  374. package/dist/building/level-insertion.js +35 -0
  375. package/dist/building/merge-windows.d.ts +58 -0
  376. package/dist/building/merge-windows.d.ts.map +1 -0
  377. package/dist/building/merge-windows.js +189 -0
  378. package/dist/building/opening-style-presets.d.ts +2 -2
  379. package/dist/building/opening-style-presets.d.ts.map +1 -1
  380. package/dist/building/photo-elevation.d.ts +125 -0
  381. package/dist/building/photo-elevation.d.ts.map +1 -0
  382. package/dist/building/photo-elevation.js +404 -0
  383. package/dist/building/wall-gaps.d.ts +13 -0
  384. package/dist/building/wall-gaps.d.ts.map +1 -0
  385. package/dist/building/wall-gaps.js +158 -0
  386. package/dist/building/wall-openings.d.ts +154 -119
  387. package/dist/building/wall-openings.d.ts.map +1 -1
  388. package/dist/building/wall-openings.js +37 -9
  389. package/dist/capture/schema.d.ts +22 -22
  390. package/dist/capture/source.d.ts.map +1 -1
  391. package/dist/capture/source.js +1 -1
  392. package/dist/commands/structure/create-zone.d.ts +12 -1
  393. package/dist/commands/structure/create-zone.d.ts.map +1 -1
  394. package/dist/commands/structure/create-zone.js +49 -0
  395. package/dist/commands/structure/divide-zone.d.ts +3 -3
  396. package/dist/commands/structure/index.d.ts +1 -1
  397. package/dist/commands/structure/index.d.ts.map +1 -1
  398. package/dist/commands/structure/index.js +1 -1
  399. package/dist/commands/structure/set-floor-foundation.d.ts +6 -6
  400. package/dist/commands/structure/set-zone-intent.d.ts +4 -0
  401. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  402. package/dist/commands/structure/set-zone-intent.js +19 -0
  403. package/dist/commands/structure/shared.d.ts +3642 -3213
  404. package/dist/commands/structure/shared.d.ts.map +1 -1
  405. package/dist/commands/structure/zone-wall-merge.d.ts +4149 -3334
  406. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  407. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  408. package/dist/contracts/reference-inventory.js +106 -26
  409. package/dist/events/bus.d.ts +22 -3
  410. package/dist/events/bus.d.ts.map +1 -1
  411. package/dist/events/capture-sessions.d.ts +5 -0
  412. package/dist/events/capture-sessions.d.ts.map +1 -0
  413. package/dist/events/capture-sessions.js +31 -0
  414. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  415. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +1 -2
  416. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  417. package/dist/hooks/spatial-grid/spatial-grid-manager.js +4 -6
  418. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3608 -3179
  419. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  420. package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
  421. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  422. package/dist/hooks/spatial-grid/support-host-patch.js +11 -2
  423. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
  424. package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
  425. package/dist/index.d.ts +37 -9
  426. package/dist/index.d.ts.map +1 -1
  427. package/dist/index.js +36 -9
  428. package/dist/lib/__fixtures__/mezzanine.d.ts +11800 -10132
  429. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  430. package/dist/lib/absorb-wall-separators.d.ts +3642 -3213
  431. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  432. package/dist/lib/angle-accumulator.d.ts.map +1 -1
  433. package/dist/lib/artifact-store.d.ts.map +1 -1
  434. package/dist/lib/below-grade-footprints.d.ts +65 -0
  435. package/dist/lib/below-grade-footprints.d.ts.map +1 -0
  436. package/dist/lib/below-grade-footprints.js +181 -0
  437. package/dist/lib/building-footprint.d.ts +33 -0
  438. package/dist/lib/building-footprint.d.ts.map +1 -0
  439. package/dist/lib/building-footprint.js +89 -0
  440. package/dist/lib/corner-pair.d.ts +1129 -0
  441. package/dist/lib/corner-pair.d.ts.map +1 -0
  442. package/dist/lib/corner-pair.js +130 -0
  443. package/dist/lib/corner-snap.d.ts +54 -0
  444. package/dist/lib/corner-snap.d.ts.map +1 -0
  445. package/dist/lib/corner-snap.js +125 -0
  446. package/dist/lib/critically-damped.d.ts +11 -0
  447. package/dist/lib/critically-damped.d.ts.map +1 -0
  448. package/dist/lib/critically-damped.js +14 -0
  449. package/dist/lib/deepest-drawn.d.ts +18 -0
  450. package/dist/lib/deepest-drawn.d.ts.map +1 -0
  451. package/dist/lib/deepest-drawn.js +65 -0
  452. package/dist/lib/door-operation.d.ts +1 -1
  453. package/dist/lib/exterior-wall-loops.d.ts +17 -0
  454. package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
  455. package/dist/lib/exterior-wall-loops.js +334 -0
  456. package/dist/lib/finish-script.d.ts +61 -0
  457. package/dist/lib/finish-script.d.ts.map +1 -0
  458. package/dist/lib/finish-script.js +86 -0
  459. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  460. package/dist/lib/floor-intent-changes.js +4 -4
  461. package/dist/lib/floor-plate-paint.d.ts +3 -1
  462. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  463. package/dist/lib/floor-plate-paint.js +24 -4
  464. package/dist/lib/floor-plates.d.ts +50 -50
  465. package/dist/lib/floor-script.d.ts +24 -0
  466. package/dist/lib/floor-script.d.ts.map +1 -0
  467. package/dist/lib/floor-script.js +51 -0
  468. package/dist/lib/foundation-construction.d.ts +73 -0
  469. package/dist/lib/foundation-construction.d.ts.map +1 -0
  470. package/dist/lib/foundation-construction.js +242 -0
  471. package/dist/lib/foundation-standard.d.ts +30 -0
  472. package/dist/lib/foundation-standard.d.ts.map +1 -0
  473. package/dist/lib/foundation-standard.js +30 -0
  474. package/dist/lib/foundation-wall.d.ts +36 -0
  475. package/dist/lib/foundation-wall.d.ts.map +1 -0
  476. package/dist/lib/foundation-wall.js +66 -0
  477. package/dist/lib/generic-foundation.d.ts +40 -0
  478. package/dist/lib/generic-foundation.d.ts.map +1 -0
  479. package/dist/lib/generic-foundation.js +200 -0
  480. package/dist/lib/geometry-script-node.d.ts +32 -3
  481. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  482. package/dist/lib/geometry-script-node.js +26 -0
  483. package/dist/lib/grade-standing.d.ts +38 -0
  484. package/dist/lib/grade-standing.d.ts.map +1 -0
  485. package/dist/lib/grade-standing.js +137 -0
  486. package/dist/lib/ground-level.d.ts +20 -0
  487. package/dist/lib/ground-level.d.ts.map +1 -0
  488. package/dist/lib/ground-level.js +49 -0
  489. package/dist/lib/ground-over-part.d.ts +13 -0
  490. package/dist/lib/ground-over-part.d.ts.map +1 -0
  491. package/dist/lib/ground-over-part.js +94 -0
  492. package/dist/lib/ground-seat.d.ts +47 -0
  493. package/dist/lib/ground-seat.d.ts.map +1 -0
  494. package/dist/lib/ground-seat.js +61 -0
  495. package/dist/lib/ground-window.d.ts +39 -0
  496. package/dist/lib/ground-window.d.ts.map +1 -0
  497. package/dist/lib/ground-window.js +147 -0
  498. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  499. package/dist/lib/opening-floor-datum.js +2 -3
  500. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  501. package/dist/lib/own-floor-intent.js +4 -4
  502. package/dist/lib/plate-surface.d.ts.map +1 -1
  503. package/dist/lib/plate-surface.js +3 -1
  504. package/dist/lib/point-ask.d.ts +9 -0
  505. package/dist/lib/point-ask.d.ts.map +1 -0
  506. package/dist/lib/point-ask.js +36 -0
  507. package/dist/lib/room-drawn-floor.d.ts +1 -1
  508. package/dist/lib/room-drawn-floor.d.ts.map +1 -1
  509. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  510. package/dist/lib/room-floor-feasibility.js +3 -3
  511. package/dist/lib/room-graph.d.ts.map +1 -1
  512. package/dist/lib/room-graph.js +2 -0
  513. package/dist/lib/room-name.d.ts +2 -0
  514. package/dist/lib/room-name.d.ts.map +1 -1
  515. package/dist/lib/room-name.js +2 -0
  516. package/dist/lib/room-topology-index.d.ts.map +1 -1
  517. package/dist/lib/room-topology-index.js +1 -1
  518. package/dist/lib/room-zone-adoption.d.ts.map +1 -1
  519. package/dist/lib/script-inputs-key.d.ts +3 -0
  520. package/dist/lib/script-inputs-key.d.ts.map +1 -0
  521. package/dist/lib/script-inputs-key.js +13 -0
  522. package/dist/lib/setback-envelope.d.ts +95 -5
  523. package/dist/lib/setback-envelope.d.ts.map +1 -1
  524. package/dist/lib/setback-envelope.js +351 -35
  525. package/dist/lib/site-flatwork.d.ts +11 -0
  526. package/dist/lib/site-flatwork.d.ts.map +1 -0
  527. package/dist/lib/site-flatwork.js +11 -0
  528. package/dist/lib/site-ground-height.d.ts +13 -0
  529. package/dist/lib/site-ground-height.d.ts.map +1 -0
  530. package/dist/lib/site-ground-height.js +16 -0
  531. package/dist/lib/site-placement.d.ts +362 -0
  532. package/dist/lib/site-placement.d.ts.map +1 -0
  533. package/dist/lib/site-placement.js +942 -0
  534. package/dist/lib/snap-ease.d.ts +20 -0
  535. package/dist/lib/snap-ease.d.ts.map +1 -0
  536. package/dist/lib/snap-ease.js +50 -0
  537. package/dist/lib/structure-kernel.d.ts +1 -1
  538. package/dist/lib/structure-kernel.d.ts.map +1 -1
  539. package/dist/lib/structure-kernel.js +2 -0
  540. package/dist/lib/surface-support-references.d.ts +4 -0
  541. package/dist/lib/surface-support-references.d.ts.map +1 -0
  542. package/dist/lib/surface-support-references.js +19 -0
  543. package/dist/lib/terrain-support-query.d.ts +10 -0
  544. package/dist/lib/terrain-support-query.d.ts.map +1 -1
  545. package/dist/lib/terrain-support-query.js +1 -1
  546. package/dist/lib/wall-face-script.d.ts +66 -0
  547. package/dist/lib/wall-face-script.d.ts.map +1 -0
  548. package/dist/lib/wall-face-script.js +235 -0
  549. package/dist/lib/zone-colors.d.ts +1 -1
  550. package/dist/lib/zone-colors.d.ts.map +1 -1
  551. package/dist/lib/zone-quantities.d.ts.map +1 -1
  552. package/dist/lib/zone-quantities.js +4 -5
  553. package/dist/material-kinds.d.ts +9 -0
  554. package/dist/material-kinds.d.ts.map +1 -0
  555. package/dist/material-kinds.js +30 -0
  556. package/dist/material-library.d.ts +4 -4
  557. package/dist/material-library.d.ts.map +1 -1
  558. package/dist/material-library.js +72 -26
  559. package/dist/node-slots/index.d.ts +1 -0
  560. package/dist/node-slots/index.d.ts.map +1 -1
  561. package/dist/node-slots/index.js +7 -1
  562. package/dist/node-slots/roof.d.ts +5 -0
  563. package/dist/node-slots/roof.d.ts.map +1 -0
  564. package/dist/node-slots/roof.js +12 -0
  565. package/dist/node-slots/stair.d.ts +2 -0
  566. package/dist/node-slots/stair.d.ts.map +1 -1
  567. package/dist/node-slots/stair.js +6 -2
  568. package/dist/procedural-items/design-placement.d.ts.map +1 -1
  569. package/dist/procedural-items/design.d.ts +19 -19
  570. package/dist/procedural-items/fixtures.d.ts +297 -297
  571. package/dist/procedural-items/fixtures.d.ts.map +1 -1
  572. package/dist/procedural-items/integration.d.ts +106 -106
  573. package/dist/procedural-items/joints.d.ts +4 -4
  574. package/dist/procedural-items/library-colors.d.ts +22 -22
  575. package/dist/procedural-items/library-colors.d.ts.map +1 -1
  576. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  577. package/dist/procedural-items/node.d.ts +291 -291
  578. package/dist/procedural-items/query.d.ts +1 -1
  579. package/dist/procedural-items/query.d.ts.map +1 -1
  580. package/dist/procedural-items/recipe.d.ts +11 -11
  581. package/dist/procedural-items/recipe.d.ts.map +1 -1
  582. package/dist/procedural-items/section.d.ts.map +1 -1
  583. package/dist/registry/index.d.ts +1 -1
  584. package/dist/registry/index.d.ts.map +1 -1
  585. package/dist/registry/scene-api.d.ts +1 -0
  586. package/dist/registry/scene-api.d.ts.map +1 -1
  587. package/dist/registry/scene-api.js +3 -0
  588. package/dist/registry/subtree.d.ts.map +1 -1
  589. package/dist/registry/subtree.js +2 -0
  590. package/dist/registry/types.d.ts +120 -1
  591. package/dist/registry/types.d.ts.map +1 -1
  592. package/dist/schema/assembly.d.ts +41 -41
  593. package/dist/schema/asset-url.d.ts +1 -1
  594. package/dist/schema/asset-url.d.ts.map +1 -1
  595. package/dist/schema/base.d.ts +9 -9
  596. package/dist/schema/base.d.ts.map +1 -1
  597. package/dist/schema/camera.d.ts +1 -1
  598. package/dist/schema/collection-templates.d.ts +20 -20
  599. package/dist/schema/collection-templates.d.ts.map +1 -1
  600. package/dist/schema/geometry-metadata.d.ts +7 -7
  601. package/dist/schema/geometry-metadata.d.ts.map +1 -1
  602. package/dist/schema/geometry-source.d.ts +26 -16
  603. package/dist/schema/geometry-source.d.ts.map +1 -1
  604. package/dist/schema/geometry-source.js +14 -0
  605. package/dist/schema/index.d.ts +10 -7
  606. package/dist/schema/index.d.ts.map +1 -1
  607. package/dist/schema/index.js +10 -7
  608. package/dist/schema/material.d.ts +33 -33
  609. package/dist/schema/nodes/barrel-roof.d.ts +3 -0
  610. package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
  611. package/dist/schema/nodes/barrel-roof.js +11 -0
  612. package/dist/schema/nodes/block.d.ts +8 -8
  613. package/dist/schema/nodes/box-vent.d.ts +13 -13
  614. package/dist/schema/nodes/building.d.ts +9 -8
  615. package/dist/schema/nodes/building.d.ts.map +1 -1
  616. package/dist/schema/nodes/building.js +2 -0
  617. package/dist/schema/nodes/cabinet.d.ts +130 -129
  618. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  619. package/dist/schema/nodes/cabinet.js +1 -1
  620. package/dist/schema/nodes/ceiling.d.ts +15 -15
  621. package/dist/schema/nodes/chimney.d.ts +23 -23
  622. package/dist/schema/nodes/column.d.ts +207 -199
  623. package/dist/schema/nodes/column.d.ts.map +1 -1
  624. package/dist/schema/nodes/column.js +2 -0
  625. package/dist/schema/nodes/construction-dimension.d.ts +34 -34
  626. package/dist/schema/nodes/cupola.d.ts +15 -15
  627. package/dist/schema/nodes/curtain-wall.d.ts +21 -20
  628. package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
  629. package/dist/schema/nodes/curtain-wall.js +23 -0
  630. package/dist/schema/nodes/door.d.ts +50 -43
  631. package/dist/schema/nodes/door.d.ts.map +1 -1
  632. package/dist/schema/nodes/door.js +19 -0
  633. package/dist/schema/nodes/dormer.d.ts +37 -36
  634. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  635. package/dist/schema/nodes/downspout.d.ts +17 -17
  636. package/dist/schema/nodes/duct-fitting.d.ts +24 -24
  637. package/dist/schema/nodes/duct-segment.d.ts +14 -14
  638. package/dist/schema/nodes/duct-terminal.d.ts +12 -12
  639. package/dist/schema/nodes/elevator.d.ts +15 -15
  640. package/dist/schema/nodes/eyebrow-vent.d.ts +13 -13
  641. package/dist/schema/nodes/fence-feature.d.ts +37 -37
  642. package/dist/schema/nodes/fence-types.d.ts +32 -0
  643. package/dist/schema/nodes/fence-types.d.ts.map +1 -0
  644. package/dist/schema/nodes/fence-types.js +22 -0
  645. package/dist/schema/nodes/fence.d.ts +43 -72
  646. package/dist/schema/nodes/fence.d.ts.map +1 -1
  647. package/dist/schema/nodes/fence.js +4 -20
  648. package/dist/schema/nodes/floor-opening.d.ts +8 -8
  649. package/dist/schema/nodes/guide.d.ts +8 -8
  650. package/dist/schema/nodes/gutter.d.ts +14 -14
  651. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  652. package/dist/schema/nodes/gutter.js +6 -5
  653. package/dist/schema/nodes/hvac-equipment.d.ts +13 -13
  654. package/dist/schema/nodes/imported-mesh.d.ts +8 -8
  655. package/dist/schema/nodes/item.d.ts +30 -25
  656. package/dist/schema/nodes/item.d.ts.map +1 -1
  657. package/dist/schema/nodes/lean-to-extension.d.ts +36 -36
  658. package/dist/schema/nodes/level.d.ts +9 -9
  659. package/dist/schema/nodes/lineset.d.ts +8 -8
  660. package/dist/schema/nodes/liquid-line.d.ts +8 -8
  661. package/dist/schema/nodes/measurement.d.ts +8 -8
  662. package/dist/schema/nodes/opening-types.d.ts +13 -13
  663. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  664. package/dist/schema/nodes/pipe-fitting.d.ts +15 -15
  665. package/dist/schema/nodes/pipe-segment.d.ts +11 -11
  666. package/dist/schema/nodes/pipe-trap.d.ts +9 -9
  667. package/dist/schema/nodes/ridge-vent.d.ts +14 -14
  668. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  669. package/dist/schema/nodes/ridge-vent.js +3 -1
  670. package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
  671. package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
  672. package/dist/schema/nodes/roof-glazing-config.js +34 -0
  673. package/dist/schema/nodes/roof-glazing.d.ts +57 -0
  674. package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
  675. package/dist/schema/nodes/roof-glazing.js +514 -0
  676. package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
  677. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
  678. package/dist/schema/nodes/roof-segment-resize.js +21 -0
  679. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
  680. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  681. package/dist/schema/nodes/roof-segment-shape.js +44 -0
  682. package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
  683. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  684. package/dist/schema/nodes/roof-segment-walls.js +24 -0
  685. package/dist/schema/nodes/roof-segment.d.ts +153 -46
  686. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  687. package/dist/schema/nodes/roof-segment.js +91 -20
  688. package/dist/schema/nodes/roof-types.d.ts +14 -0
  689. package/dist/schema/nodes/roof-types.d.ts.map +1 -0
  690. package/dist/schema/nodes/roof-types.js +14 -0
  691. package/dist/schema/nodes/roof.d.ts +49 -49
  692. package/dist/schema/nodes/scan.d.ts +8 -8
  693. package/dist/schema/nodes/separator.d.ts +8 -8
  694. package/dist/schema/nodes/shelf.d.ts +16 -16
  695. package/dist/schema/nodes/site-facts.d.ts +64 -0
  696. package/dist/schema/nodes/site-facts.d.ts.map +1 -0
  697. package/dist/schema/nodes/site-facts.js +73 -0
  698. package/dist/schema/nodes/site.d.ts +105 -63
  699. package/dist/schema/nodes/site.d.ts.map +1 -1
  700. package/dist/schema/nodes/site.js +7 -70
  701. package/dist/schema/nodes/skylight.d.ts +41 -41
  702. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  703. package/dist/schema/nodes/slab.d.ts +21 -21
  704. package/dist/schema/nodes/solar-panel.d.ts +21 -21
  705. package/dist/schema/nodes/spawn.d.ts +8 -8
  706. package/dist/schema/nodes/stair-construction.d.ts +3 -3
  707. package/dist/schema/nodes/stair-defaults.d.ts +16 -0
  708. package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
  709. package/dist/schema/nodes/stair-defaults.js +15 -0
  710. package/dist/schema/nodes/stair-segment.d.ts +22 -22
  711. package/dist/schema/nodes/stair-types.d.ts +29 -0
  712. package/dist/schema/nodes/stair-types.d.ts.map +1 -0
  713. package/dist/schema/nodes/stair-types.js +23 -0
  714. package/dist/schema/nodes/stair.d.ts +51 -75
  715. package/dist/schema/nodes/stair.d.ts.map +1 -1
  716. package/dist/schema/nodes/stair.js +6 -20
  717. package/dist/schema/nodes/structural-grid.d.ts +8 -8
  718. package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -2
  719. package/dist/schema/nodes/turbine-vent.d.ts +13 -13
  720. package/dist/schema/nodes/unit.d.ts +10 -10
  721. package/dist/schema/nodes/unit.d.ts.map +1 -1
  722. package/dist/schema/nodes/wall.d.ts +479 -146
  723. package/dist/schema/nodes/wall.d.ts.map +1 -1
  724. package/dist/schema/nodes/wall.js +19 -0
  725. package/dist/schema/nodes/window.d.ts +55 -39
  726. package/dist/schema/nodes/window.d.ts.map +1 -1
  727. package/dist/schema/nodes/window.js +10 -0
  728. package/dist/schema/nodes/zone.d.ts +231 -12
  729. package/dist/schema/nodes/zone.d.ts.map +1 -1
  730. package/dist/schema/nodes/zone.js +10 -0
  731. package/dist/schema/provenance.d.ts +21 -21
  732. package/dist/schema/scene-material.d.ts +5 -5
  733. package/dist/schema/site-presentation.d.ts +100 -0
  734. package/dist/schema/site-presentation.d.ts.map +1 -0
  735. package/dist/schema/site-presentation.js +83 -0
  736. package/dist/schema/types.d.ts +1954 -1414
  737. package/dist/schema/types.d.ts.map +1 -1
  738. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
  739. package/dist/services/index.d.ts +5 -1
  740. package/dist/services/index.d.ts.map +1 -1
  741. package/dist/services/index.js +5 -1
  742. package/dist/services/level-height.d.ts.map +1 -1
  743. package/dist/services/level-height.js +7 -3
  744. package/dist/services/port-connectivity.d.ts +4 -0
  745. package/dist/services/port-connectivity.d.ts.map +1 -1
  746. package/dist/services/port-connectivity.js +35 -0
  747. package/dist/services/project-file-sink.d.ts +9 -0
  748. package/dist/services/project-file-sink.d.ts.map +1 -0
  749. package/dist/services/project-file-sink.js +13 -0
  750. package/dist/services/roof-bearing.d.ts +62 -0
  751. package/dist/services/roof-bearing.d.ts.map +1 -0
  752. package/dist/services/roof-bearing.js +234 -0
  753. package/dist/services/roof-level.d.ts +121 -0
  754. package/dist/services/roof-level.d.ts.map +1 -0
  755. package/dist/services/roof-level.js +280 -0
  756. package/dist/services/roof-move.d.ts +83 -0
  757. package/dist/services/roof-move.d.ts.map +1 -0
  758. package/dist/services/roof-move.js +316 -0
  759. package/dist/services/stair-surface-snap.d.ts +14 -0
  760. package/dist/services/stair-surface-snap.d.ts.map +1 -0
  761. package/dist/services/stair-surface-snap.js +116 -0
  762. package/dist/services/storey-datum.d.ts +12 -0
  763. package/dist/services/storey-datum.d.ts.map +1 -0
  764. package/dist/services/storey-datum.js +18 -0
  765. package/dist/services/storey.d.ts +51 -5
  766. package/dist/services/storey.d.ts.map +1 -1
  767. package/dist/services/storey.js +125 -8
  768. package/dist/solar-panel-presets.d.ts +2 -2
  769. package/dist/store/actions/node-actions.d.ts +3613 -3182
  770. package/dist/store/actions/node-actions.d.ts.map +1 -1
  771. package/dist/store/actions/node-actions.js +46 -1
  772. package/dist/store/derived-node-guard.d.ts.map +1 -1
  773. package/dist/store/history-control.d.ts +39 -0
  774. package/dist/store/history-control.d.ts.map +1 -1
  775. package/dist/store/history-control.js +84 -4
  776. package/dist/store/scene-annotations.d.ts +7267 -6409
  777. package/dist/store/scene-annotations.d.ts.map +1 -1
  778. package/dist/store/scene-preview.d.ts +16 -0
  779. package/dist/store/scene-preview.d.ts.map +1 -0
  780. package/dist/store/scene-preview.js +144 -0
  781. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  782. package/dist/store/use-live-terrain.d.ts.map +1 -1
  783. package/dist/store/use-live-transforms.d.ts.map +1 -1
  784. package/dist/store/use-scene.d.ts.map +1 -1
  785. package/dist/store/use-scene.js +37 -4
  786. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  787. package/dist/systems/fence/fence-features.d.ts.map +1 -1
  788. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  789. package/dist/systems/owned-floor-openings.js +24 -3
  790. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  791. package/dist/systems/roof/roof-elevation-system.js +9 -3
  792. package/dist/systems/roof/roof-elevation.d.ts +5 -0
  793. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  794. package/dist/systems/roof/roof-elevation.js +91 -62
  795. package/dist/systems/slab/__fixtures__/floor-step.d.ts +4623 -3516
  796. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  797. package/dist/systems/slab/__fixtures__/raised-room.d.ts +5149 -4076
  798. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  799. package/dist/systems/slab/slab-support.d.ts +6 -3
  800. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  801. package/dist/systems/slab/slab-support.js +78 -10
  802. package/dist/systems/stair/stair-detail-budget.d.ts +2 -2
  803. package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -1
  804. package/dist/systems/stair/stair-footprint.d.ts +6 -0
  805. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  806. package/dist/systems/stair/stair-footprint.js +27 -14
  807. package/dist/systems/stair/stair-layout.d.ts +2 -2
  808. package/dist/systems/stair/stair-opening-preview.d.ts +3643 -3214
  809. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  810. package/dist/systems/stair/stair-presets.d.ts +73 -65
  811. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  812. package/dist/systems/stair/stair-presets.js +16 -9
  813. package/dist/systems/stair/stair-rail-path.d.ts +1 -1
  814. package/dist/systems/stair/stair-rise-query.d.ts +16 -0
  815. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  816. package/dist/systems/stair/stair-rise-query.js +57 -7
  817. package/dist/systems/stair/stair-sizing.d.ts +101 -99
  818. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  819. package/dist/systems/wall/wall-assembly.d.ts +11 -0
  820. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  821. package/dist/systems/wall/wall-assembly.js +21 -0
  822. package/dist/systems/wall/wall-curve.d.ts +5 -0
  823. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  824. package/dist/systems/wall/wall-curve.js +13 -0
  825. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  826. package/dist/systems/wall/wall-frame.js +8 -0
  827. package/dist/systems/wall/wall-room-sides.d.ts +8 -0
  828. package/dist/systems/wall/wall-room-sides.d.ts.map +1 -1
  829. package/dist/systems/wall/wall-room-sides.js +60 -7
  830. package/dist/systems/wall/wall-top.d.ts +7 -4
  831. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  832. package/dist/systems/wall/wall-top.js +14 -6
  833. package/dist/systems/wall/wall-topology.d.ts +4 -0
  834. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  835. package/dist/systems/wall/wall-topology.js +4 -2
  836. package/dist/systems/wall/wall-trim.d.ts +7 -0
  837. package/dist/systems/wall/wall-trim.d.ts.map +1 -0
  838. package/dist/systems/wall/wall-trim.js +10 -0
  839. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  840. package/dist/utils/clone-scene-graph.js +8 -0
  841. package/dist/utils/ensure-scene-openings.d.ts +7420 -6562
  842. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  843. package/dist/utils/floor-piece-adoption.d.ts +2 -2
  844. package/dist/utils/floor-plate-migration.d.ts +3746 -3317
  845. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  846. package/dist/utils/floor-plate-migration.js +2 -2
  847. package/dist/utils/heal-scene-graph.d.ts +12 -0
  848. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  849. package/dist/utils/heal-scene-graph.js +40 -23
  850. package/dist/utils/legacy-wall-datums.d.ts.map +1 -1
  851. package/dist/utils/legacy-wall-datums.js +2 -2
  852. package/dist/utils/owned-floor-opening-migration.d.ts +3642 -3213
  853. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  854. package/dist/utils/reconcile-structure-on-load.d.ts +3730 -7777
  855. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  856. package/dist/utils/scene-migrations.d.ts +1 -1
  857. package/dist/utils/scene-migrations.d.ts.map +1 -1
  858. package/dist/utils/scene-migrations.js +1 -1
  859. package/dist/utils/semantic-equal.d.ts +3 -0
  860. package/dist/utils/semantic-equal.d.ts.map +1 -0
  861. package/dist/utils/semantic-equal.js +26 -0
  862. package/dist/utils/structure-id.d.ts.map +1 -1
  863. package/dist/utils/types.d.ts.map +1 -1
  864. package/dist/utils/wall-face-migration.d.ts +1 -1
  865. package/dist/utils/wall-face-migration.d.ts.map +1 -1
  866. package/package.json +36 -10
@@ -0,0 +1,137 @@
1
+ import { BELOW_GRADE_TOLERANCE, getLevelElevations, isLevelBelowGrade, levelPlaneWorldY, } from '../services/storey.js';
2
+ import { pointInPolygon } from '../systems/slab/slab-support.js';
3
+ import { levelUnderNamedGround } from './ground-level.js';
4
+ import { isSiteFlatwork } from './site-flatwork.js';
5
+ import { heightAt } from './terrain-field.js';
6
+ import { terrainFieldOf } from './terrain-source.js';
7
+ import { levelLocalToWorldXZ, SITE_DATUM_Y } from './terrain-support-query.js';
8
+ /** Sample lines per footprint side at most: enough to catch a slope crossing a floor plate. */
9
+ const MAX_SAMPLE_LINES = 17;
10
+ /**
11
+ * `levelId`'s standing against the ground. When its building names a ground level, the line is the
12
+ * word: a level under it is below grade, and one at or over it is not buried by the stack's own
13
+ * elevations (a basement added under a house, a floor the stack lifted). Where the sculpted terrain
14
+ * stands over a floor's slabs (sampled against the field, the ground over each slab's own floor
15
+ * where it stands more than {@link BELOW_GRADE_TOLERANCE} above it: a split level's sunken room is
16
+ * judged at its own height, not at the raised part's) it still decides how much of that floor is
17
+ * buried: a hillside buries half a floor whose other half walks out, and a floor under the line the
18
+ * terrain leaves out of the ground reads as partly below. Without a named ground level, or a field,
19
+ * the flat datum answers exactly as before. `'at-grade'` for an id that is no level.
20
+ */
21
+ export function levelGradeStanding(nodes, levelId) {
22
+ const level = nodes[levelId];
23
+ if (level?.type !== 'level')
24
+ return 'at-grade';
25
+ const under = levelUnderNamedGround(nodes, level);
26
+ const flat = under === null
27
+ ? isLevelBelowGrade(nodes, levelId)
28
+ ? 'below-grade'
29
+ : 'at-grade'
30
+ : under
31
+ ? 'below-grade'
32
+ : 'at-grade';
33
+ const field = terrainFieldOverLevel(nodes, level);
34
+ if (!field)
35
+ return under === null ? flatFloorsStanding(nodes, level, flat) : flat;
36
+ const samples = footprintFloorSamples(nodes, level, field);
37
+ if (samples.length === 0)
38
+ return flat;
39
+ let buried = 0;
40
+ for (const [worldX, worldZ, floorY] of samples) {
41
+ if (heightAt(field, worldX, worldZ) - floorY > BELOW_GRADE_TOLERANCE)
42
+ buried += 1;
43
+ }
44
+ if (buried === 0)
45
+ return under ? 'partly-below-grade' : 'at-grade';
46
+ return buried === samples.length ? 'below-grade' : 'partly-below-grade';
47
+ }
48
+ /**
49
+ * A flat site with no ground line named: the datum is the ground under every floor, and each floor
50
+ * slab of the level is judged against it as the sampled path judges them against the field. A split
51
+ * level whose raised part sits at grade is partly below grade over its sunken room, not at grade
52
+ * on the strength of its highest floor. A level with no floor slab reads as `fallback` (its plane).
53
+ */
54
+ function flatFloorsStanding(nodes, level, fallback) {
55
+ const plane = levelPlaneWorldY(nodes, level.id);
56
+ if (plane === null)
57
+ return fallback;
58
+ const slabs = floorSlabsOf(nodes, level);
59
+ if (slabs.length === 0)
60
+ return fallback;
61
+ const buried = slabs.filter((slab) => floorBuriedOnFlatSite(plane + slab.elevation)).length;
62
+ if (buried === 0)
63
+ return 'at-grade';
64
+ return buried === slabs.length ? 'below-grade' : 'partly-below-grade';
65
+ }
66
+ /** Whether a floor at world Y `floorY` lies under a flat site's datum by more than the tolerance. */
67
+ export function floorBuriedOnFlatSite(floorY) {
68
+ return SITE_DATUM_Y - floorY > BELOW_GRADE_TOLERANCE;
69
+ }
70
+ /** The floor slabs of the house on a level: not a basin, not site flatwork, with a plan. */
71
+ function floorSlabsOf(nodes, level) {
72
+ const slabs = [];
73
+ for (const childId of level.children) {
74
+ const slab = nodes[childId];
75
+ if (slab?.type !== 'slab' || slab.recessed === true || slab.polygon.length < 3)
76
+ continue;
77
+ if (isSiteFlatwork(slab))
78
+ continue;
79
+ slabs.push(slab);
80
+ }
81
+ return slabs;
82
+ }
83
+ /** The site's terrain field for the site this level stands on, or null on a flat site. */
84
+ export function terrainFieldOverLevel(nodes, level) {
85
+ const buildingId = getLevelElevations(nodes).get(level.id)?.buildingId;
86
+ const building = buildingId ? nodes[buildingId] : undefined;
87
+ const site = (building?.parentId ? nodes[building.parentId] : undefined) ??
88
+ Object.values(nodes).find((node) => node.type === 'site');
89
+ return site?.type === 'site' ? terrainFieldOf(site) : null;
90
+ }
91
+ /**
92
+ * World XZ samples over the level's floor slabs: each slab's corners plus a grid across it no
93
+ * coarser than the terrain's own spacing, capped so a big plate stays cheap. Slabs are the
94
+ * footprint the grade ring already trusts (`belowGradeFootprints`).
95
+ */
96
+ export function footprintSamples(nodes, level, field) {
97
+ return footprintFloorSamples(nodes, level, field).map(([x, z]) => [x, z]);
98
+ }
99
+ /**
100
+ * {@link footprintSamples} with the world Y of the top of the floor slab each sample lies on as a
101
+ * third coordinate: a level with floors at several heights (a split level) is buried by the ground
102
+ * over each of them, not over the highest alone.
103
+ */
104
+ export function footprintFloorSamples(nodes, level, field) {
105
+ const buildingId = getLevelElevations(nodes).get(level.id)?.buildingId;
106
+ const building = buildingId ? nodes[buildingId] : undefined;
107
+ const placed = building?.type === 'building' ? building : null;
108
+ const plane = levelPlaneWorldY(nodes, level.id);
109
+ if (plane === null)
110
+ return [];
111
+ const samples = [];
112
+ for (const slab of floorSlabsOf(nodes, level)) {
113
+ for (const [x, z] of slabSamples(slab.polygon, field.spacing)) {
114
+ const [worldX, worldZ] = levelLocalToWorldXZ(placed, x, z);
115
+ samples.push([worldX, worldZ, plane + slab.elevation]);
116
+ }
117
+ }
118
+ return samples;
119
+ }
120
+ function slabSamples(polygon, spacing) {
121
+ const samples = [...polygon];
122
+ const xs = polygon.map(([x]) => x);
123
+ const zs = polygon.map(([, z]) => z);
124
+ const minX = Math.min(...xs);
125
+ const maxX = Math.max(...xs);
126
+ const minZ = Math.min(...zs);
127
+ const maxZ = Math.max(...zs);
128
+ const stepX = Math.max(spacing, (maxX - minX) / (MAX_SAMPLE_LINES - 1));
129
+ const stepZ = Math.max(spacing, (maxZ - minZ) / (MAX_SAMPLE_LINES - 1));
130
+ for (let x = minX + stepX / 2; x < maxX; x += stepX) {
131
+ for (let z = minZ + stepZ / 2; z < maxZ; z += stepZ) {
132
+ if (pointInPolygon(x, z, polygon))
133
+ samples.push([x, z]);
134
+ }
135
+ }
136
+ return samples;
137
+ }
@@ -0,0 +1,20 @@
1
+ import type { AnyNode, AnyNodeId, LevelNode } from '../schema/index.js';
2
+ /** The level a building stands at grade on, and whether the building says so or it is read off. */
3
+ export type GroundLevel = {
4
+ level: LevelNode;
5
+ explicit: boolean;
6
+ };
7
+ /**
8
+ * The ground line of `buildingId`'s stack: the level standing at grade, the levels with a lower
9
+ * floor index below it. The building names it (`groundLevelId`, written by "Set as ground floor");
10
+ * until it does, or when the level named is gone, it is the lowest level whose floor is not under
11
+ * the flat datum, the reading every scene had before the line existed. `null` for an id that is
12
+ * no building, or a building with every floor under the ground.
13
+ */
14
+ export declare function groundLevelOf(nodes: Record<AnyNodeId, AnyNode>, buildingId: string): GroundLevel | null;
15
+ /**
16
+ * Whether a building that names its ground level puts `level` under it: a lower floor index. `null`
17
+ * when the line is only read off the elevations (nothing named), so a caller falls back to them.
18
+ */
19
+ export declare function levelUnderNamedGround(nodes: Record<AnyNodeId, AnyNode>, level: LevelNode): boolean | null;
20
+ //# sourceMappingURL=ground-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-level.d.ts","sourceRoot":"","sources":["../../src/lib/ground-level.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;AAG5E,mGAAmG;AACnG,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAIjE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,WAAW,GAAG,IAAI,CAUpB;AAsBD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,SAAS,GACf,OAAO,GAAG,IAAI,CAMhB"}
@@ -0,0 +1,49 @@
1
+ import { getLevelElevations, isLevelBelowGrade } from '../services/storey.js';
2
+ const groundMemo = new WeakMap();
3
+ /**
4
+ * The ground line of `buildingId`'s stack: the level standing at grade, the levels with a lower
5
+ * floor index below it. The building names it (`groundLevelId`, written by "Set as ground floor");
6
+ * until it does, or when the level named is gone, it is the lowest level whose floor is not under
7
+ * the flat datum, the reading every scene had before the line existed. `null` for an id that is
8
+ * no building, or a building with every floor under the ground.
9
+ */
10
+ export function groundLevelOf(nodes, buildingId) {
11
+ let byBuilding = groundMemo.get(nodes);
12
+ if (!byBuilding) {
13
+ byBuilding = new Map();
14
+ groundMemo.set(nodes, byBuilding);
15
+ }
16
+ if (byBuilding.has(buildingId))
17
+ return byBuilding.get(buildingId) ?? null;
18
+ const found = resolveGroundLevel(nodes, buildingId);
19
+ byBuilding.set(buildingId, found);
20
+ return found;
21
+ }
22
+ function resolveGroundLevel(nodes, buildingId) {
23
+ const building = nodes[buildingId];
24
+ if (building?.type !== 'building')
25
+ return null;
26
+ const elevations = getLevelElevations(nodes);
27
+ const levels = Object.values(nodes)
28
+ .filter((node) => node.type === 'level' && elevations.get(node.id)?.buildingId === buildingId)
29
+ .sort((a, b) => a.level - b.level);
30
+ const named = building.groundLevelId;
31
+ const explicit = named ? levels.find((level) => level.id === named) : undefined;
32
+ if (explicit)
33
+ return { level: explicit, explicit: true };
34
+ const derived = levels.find((level) => !isLevelBelowGrade(nodes, level.id));
35
+ return derived ? { level: derived, explicit: false } : null;
36
+ }
37
+ /**
38
+ * Whether a building that names its ground level puts `level` under it: a lower floor index. `null`
39
+ * when the line is only read off the elevations (nothing named), so a caller falls back to them.
40
+ */
41
+ export function levelUnderNamedGround(nodes, level) {
42
+ const buildingId = getLevelElevations(nodes).get(level.id)?.buildingId;
43
+ if (!buildingId)
44
+ return null;
45
+ const ground = groundLevelOf(nodes, buildingId);
46
+ if (!ground?.explicit)
47
+ return null;
48
+ return level.level < ground.level.level;
49
+ }
@@ -0,0 +1,13 @@
1
+ import type { Point2D } from './polygon-union.js';
2
+ import { type TerrainField } from './terrain-field.js';
3
+ /**
4
+ * The part of `plate` (a floor plate in the world plan) over which the ground stands higher than
5
+ * `above` metres. The ground is the rendered terrain, the triangle plane `heightAt` reads (each cell
6
+ * split on its `(c+1,r)`–`(c,r+1)` diagonal), so the cut follows the slope exactly: every triangle
7
+ * of the field gives its piece where it stands over `above`, a run of cells wholly over it in a row
8
+ * is one rectangle, and the pieces are joined and cut to the plate. Past the field's edge the
9
+ * ground is the edge's height, as `heightAt` reads it. Rings only: an island of low ground inside
10
+ * the part is not cut out.
11
+ */
12
+ export declare function groundOverPart(plate: readonly Point2D[], field: TerrainField, above: number): Point2D[][];
13
+ //# sourceMappingURL=ground-over-part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-over-part.d.ts","sourceRoot":"","sources":["../../src/lib/ground-over-part.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAwBnE;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,GACZ,OAAO,EAAE,EAAE,CA0Db"}
@@ -0,0 +1,94 @@
1
+ import { area, intersection, union } from './polygon-boolean.js';
2
+ import { heightAtSample } from './terrain-field.js';
3
+ /** Pieces smaller than this (m²) are the clip's rounding, not ground. */
4
+ const MIN_PIECE_AREA = 0.01;
5
+ /** A plate over this many field cells is left whole rather than walked cell by cell. */
6
+ const MAX_CELLS = 90_000;
7
+ /** The part of a triangle where the height is positive, by clipping it against `f > 0` (f is linear on it). */
8
+ function positivePart(triangle) {
9
+ const part = [];
10
+ for (let i = 0; i < 3; i += 1) {
11
+ const a = triangle[i];
12
+ const b = triangle[(i + 1) % 3];
13
+ if (a.f > 0)
14
+ part.push([a.x, a.z]);
15
+ if (a.f > 0 !== b.f > 0) {
16
+ const t = a.f / (a.f - b.f);
17
+ part.push([a.x + (b.x - a.x) * t, a.z + (b.z - a.z) * t]);
18
+ }
19
+ }
20
+ return part;
21
+ }
22
+ /**
23
+ * The part of `plate` (a floor plate in the world plan) over which the ground stands higher than
24
+ * `above` metres. The ground is the rendered terrain, the triangle plane `heightAt` reads (each cell
25
+ * split on its `(c+1,r)`–`(c,r+1)` diagonal), so the cut follows the slope exactly: every triangle
26
+ * of the field gives its piece where it stands over `above`, a run of cells wholly over it in a row
27
+ * is one rectangle, and the pieces are joined and cut to the plate. Past the field's edge the
28
+ * ground is the edge's height, as `heightAt` reads it. Rings only: an island of low ground inside
29
+ * the part is not cut out.
30
+ */
31
+ export function groundOverPart(plate, field, above) {
32
+ if (plate.length < 3)
33
+ return [];
34
+ const [originX, originZ] = field.origin;
35
+ const { spacing } = field;
36
+ const xs = plate.map(([x]) => x);
37
+ const zs = plate.map(([, z]) => z);
38
+ const firstCol = Math.floor((Math.min(...xs) - originX) / spacing);
39
+ const lastCol = Math.floor((Math.max(...xs) - originX) / spacing);
40
+ const firstRow = Math.floor((Math.min(...zs) - originZ) / spacing);
41
+ const lastRow = Math.floor((Math.max(...zs) - originZ) / spacing);
42
+ if ((lastCol - firstCol + 1) * (lastRow - firstRow + 1) > MAX_CELLS)
43
+ return [[...plate]];
44
+ const pieces = [];
45
+ for (let row = firstRow; row <= lastRow; row += 1) {
46
+ const z0 = originZ + row * spacing;
47
+ const z1 = z0 + spacing;
48
+ let runStart = -1;
49
+ const closeRun = (col) => {
50
+ if (runStart < 0)
51
+ return;
52
+ const x0 = originX + runStart * spacing;
53
+ const x1 = originX + col * spacing;
54
+ pieces.push([
55
+ [x0, z0],
56
+ [x1, z0],
57
+ [x1, z1],
58
+ [x0, z1],
59
+ ]);
60
+ runStart = -1;
61
+ };
62
+ for (let col = firstCol; col <= lastCol; col += 1) {
63
+ const x0 = originX + col * spacing;
64
+ const x1 = x0 + spacing;
65
+ const c00 = { x: x0, z: z0, f: heightAtSample(field, col, row) - above };
66
+ const c10 = { x: x1, z: z0, f: heightAtSample(field, col + 1, row) - above };
67
+ const c01 = { x: x0, z: z1, f: heightAtSample(field, col, row + 1) - above };
68
+ const c11 = { x: x1, z: z1, f: heightAtSample(field, col + 1, row + 1) - above };
69
+ const over = [c00, c10, c01, c11].filter((corner) => corner.f > 0).length;
70
+ if (over === 4) {
71
+ if (runStart < 0)
72
+ runStart = col;
73
+ continue;
74
+ }
75
+ closeRun(col);
76
+ if (over === 0)
77
+ continue;
78
+ for (const triangle of [
79
+ [c00, c10, c01],
80
+ [c11, c01, c10],
81
+ ]) {
82
+ const piece = positivePart(triangle);
83
+ if (piece.length >= 3)
84
+ pieces.push(piece);
85
+ }
86
+ }
87
+ closeRun(lastCol + 1);
88
+ }
89
+ if (pieces.length === 0)
90
+ return [];
91
+ return intersection(union(pieces), [...plate])
92
+ .filter((polygon) => area([polygon]) >= MIN_PIECE_AREA)
93
+ .map((polygon) => polygon.outer);
94
+ }
@@ -0,0 +1,47 @@
1
+ import type { AnyNode, AnyNodeId, LevelNode } from '../schema/index.js';
2
+ import { type FoundationReading } from './foundation-construction.js';
3
+ /** How far the ground floor's datum may stand from its seat and still count as seated on it. */
4
+ export declare const GROUND_SEAT_TOLERANCE = 0.05;
5
+ /**
6
+ * Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
7
+ * on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
8
+ * in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
9
+ * least 8 in from exposed ground. A building's region and style can choose another construction
10
+ * and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
11
+ */
12
+ export declare const GROUND_FLOOR_ABOVE_GRADE: number;
13
+ /**
14
+ * The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
15
+ * terrain the ground's mean height over the level's floor slabs (the building's own origin when it
16
+ * has none yet).
17
+ */
18
+ export declare function gradeUnderLevel(nodes: Record<AnyNodeId, AnyNode>, level: LevelNode): number;
19
+ /** Where a building's ground level stands against grade. */
20
+ export type GroundSeat = {
21
+ buildingId: string;
22
+ levelId: string;
23
+ /** The building names it; false when it is read off the elevations. */
24
+ explicit: boolean;
25
+ /** World Y of the ground level's floor datum (without its slab). */
26
+ floorElevation: number;
27
+ /** World Y of the grade under it. */
28
+ gradeElevation: number;
29
+ /** How far the floor datum stands over grade: negative when it is sunk. */
30
+ offset: number;
31
+ /** How far the building's foundation construction stands the ground floor over grade, metres. */
32
+ aboveGrade: number;
33
+ /** The construction, the region and style it was read from. */
34
+ foundation: FoundationReading;
35
+ /**
36
+ * The floor datum stands between grade and the foundation's top (`aboveGrade`, or the block's
37
+ * 8 in where that is higher), within {@link GROUND_SEAT_TOLERANCE}: what a scene seated before
38
+ * the 8 in rule, one seated by it and one seated by its own region's construction all satisfy,
39
+ * so a check has nothing to say about any of them.
40
+ */
41
+ seated: boolean;
42
+ /** The floor datum stands at `aboveGrade` over grade, within the tolerance. */
43
+ atFoundationTop: boolean;
44
+ };
45
+ /** `null` for an id that is no building, or a building with no level at or over the ground. */
46
+ export declare function groundSeat(nodes: Record<AnyNodeId, AnyNode>, buildingId: string): GroundSeat | null;
47
+ //# sourceMappingURL=ground-seat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-seat.d.ts","sourceRoot":"","sources":["../../src/lib/ground-seat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;AAE5E,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,2BAA2B,CAAA;AAMlC,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,QAA8C,CAAA;AAEnF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAa3F;AAED,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAA;IACjB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,UAAU,EAAE,MAAM,CAAA;IAClB,+DAA+D;IAC/D,UAAU,EAAE,iBAAiB,CAAA;IAC7B;;;;;OAKG;IACH,MAAM,EAAE,OAAO,CAAA;IACf,+EAA+E;IAC/E,eAAe,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,IAAI,CAsBnB"}
@@ -0,0 +1,61 @@
1
+ import { getStoreyDatum } from '../services/storey-datum.js';
2
+ import { FOUNDATION_CONSTRUCTIONS, foundationReadingOf, } from './foundation-construction.js';
3
+ import { footprintSamples, terrainFieldOverLevel } from './grade-standing.js';
4
+ import { groundLevelOf } from './ground-level.js';
5
+ import { heightAt } from './terrain-field.js';
6
+ import { levelLocalToWorldXZ, SITE_DATUM_Y } from './terrain-support-query.js';
7
+ /** How far the ground floor's datum may stand from its seat and still count as seated on it. */
8
+ export const GROUND_SEAT_TOLERANCE = 0.05;
9
+ /**
10
+ * Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
11
+ * on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
12
+ * in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
13
+ * least 8 in from exposed ground. A building's region and style can choose another construction
14
+ * and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
15
+ */
16
+ export const GROUND_FLOOR_ABOVE_GRADE = FOUNDATION_CONSTRUCTIONS.cmu.seatAboveGrade;
17
+ /**
18
+ * The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
19
+ * terrain the ground's mean height over the level's floor slabs (the building's own origin when it
20
+ * has none yet).
21
+ */
22
+ export function gradeUnderLevel(nodes, level) {
23
+ const field = terrainFieldOverLevel(nodes, level);
24
+ if (!field)
25
+ return SITE_DATUM_Y;
26
+ const samples = footprintSamples(nodes, level, field);
27
+ if (samples.length === 0) {
28
+ const building = nodes[level.parentId];
29
+ const placed = building?.type === 'building' ? building : null;
30
+ const [x, z] = levelLocalToWorldXZ(placed, 0, 0);
31
+ return heightAt(field, x, z);
32
+ }
33
+ let sum = 0;
34
+ for (const [x, z] of samples)
35
+ sum += heightAt(field, x, z);
36
+ return sum / samples.length;
37
+ }
38
+ /** `null` for an id that is no building, or a building with no level at or over the ground. */
39
+ export function groundSeat(nodes, buildingId) {
40
+ const ground = groundLevelOf(nodes, buildingId);
41
+ const datum = ground ? getStoreyDatum(nodes, ground.level.id) : null;
42
+ if (!(ground && datum))
43
+ return null;
44
+ const gradeElevation = gradeUnderLevel(nodes, ground.level);
45
+ const offset = datum.floorElevation - gradeElevation;
46
+ const foundation = foundationReadingOf(nodes, buildingId);
47
+ const aboveGrade = foundation.construction.seatAboveGrade;
48
+ return {
49
+ buildingId,
50
+ levelId: ground.level.id,
51
+ explicit: ground.explicit,
52
+ floorElevation: datum.floorElevation,
53
+ gradeElevation,
54
+ offset,
55
+ aboveGrade,
56
+ foundation,
57
+ seated: offset >= -GROUND_SEAT_TOLERANCE &&
58
+ offset <= Math.max(aboveGrade, GROUND_FLOOR_ABOVE_GRADE) + GROUND_SEAT_TOLERANCE,
59
+ atFoundationTop: Math.abs(offset - aboveGrade) <= GROUND_SEAT_TOLERANCE,
60
+ };
61
+ }
@@ -0,0 +1,39 @@
1
+ import type { AnyNode, AnyNodeId } from '../schema/index.js';
2
+ /**
3
+ * The ground between an eye and the house: a hillside can hide a level that no floor-burial
4
+ * test flags — the owner's street-side plateau stands 6 m tall just past the walls, over a
5
+ * pad flattened to 0. These boxes and the march along the sight line are what the ground
6
+ * window (the veiled patch of ground in the way) is decided from, live and in a capture.
7
+ */
8
+ export type GroundBox = {
9
+ min: [number, number, number];
10
+ max: [number, number, number];
11
+ };
12
+ /**
13
+ * The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
14
+ * lowest floor (the sunken room of a split level) to the height of its highest floor's ceiling.
15
+ */
16
+ export declare function levelGroundBox(nodes: Record<AnyNodeId, AnyNode>, levelId: string): GroundBox | null;
17
+ /**
18
+ * The world box of a building (every building, with no id): the union of its levels' boxes.
19
+ * The window's target when the whole building is shown.
20
+ */
21
+ export declare function buildingGroundBox(nodes: Record<AnyNodeId, AnyNode>, buildingId?: string | null): GroundBox | null;
22
+ /**
23
+ * The world box of what the editor's level display shows when `levelId` is the shown level: that
24
+ * level and the ones under it, in every building (the display decides from the level index alone
25
+ * and hides the ones above), the levels the author hid left out. Where the fog of the underground
26
+ * keeps the world clear. `null` for an id that is no level, or when nothing shown has a footprint.
27
+ */
28
+ export declare function levelStackGroundBox(nodes: Record<AnyNodeId, AnyNode>, levelId: string): GroundBox | null;
29
+ /**
30
+ * Whether sculpted ground stands between `eye` and `box`: any of the sight lines to a grid
31
+ * over the box's floor passes under the terrain before it reaches the floor — a grid, not
32
+ * just the corners, because ground sculpted over the middle of a partly buried floor hides
33
+ * the rooms under it from above while every corner stays visible. Pure height field
34
+ * arithmetic — the few throttled CPU rays the view bar's word and the window's on/off
35
+ * are decided by; the window's shape itself is per-fragment in the renderer. `false` on a
36
+ * flat site, and for an eye inside the box (a walkthrough sees out, not through a window).
37
+ */
38
+ export declare function terrainBetweenEyeAndBox(nodes: Record<AnyNodeId, AnyNode>, eye: readonly [number, number, number], box: GroundBox): boolean;
39
+ //# sourceMappingURL=ground-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-window.d.ts","sourceRoot":"","sources":["../../src/lib/ground-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAA;AAO5E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAExF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAQlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,GAAG,IAAI,CASlB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAUlB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,GACb,OAAO,CAwBT"}
@@ -0,0 +1,147 @@
1
+ import { getLevelElevations, levelFloorWorldY, levelLowestFloorWorldY } from '../services/storey.js';
2
+ import { isSiteFlatwork } from './site-flatwork.js';
3
+ import { heightAt } from './terrain-field.js';
4
+ import { terrainFieldOf } from './terrain-source.js';
5
+ import { levelLocalToWorldXZ } from './terrain-support-query.js';
6
+ /**
7
+ * The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
8
+ * lowest floor (the sunken room of a split level) to the height of its highest floor's ceiling.
9
+ */
10
+ export function levelGroundBox(nodes, levelId) {
11
+ const level = nodes[levelId];
12
+ const floorY = levelFloorWorldY(nodes, levelId);
13
+ if (level?.type !== 'level' || floorY === null)
14
+ return null;
15
+ const height = getLevelElevations(nodes).get(levelId)?.height ?? 3;
16
+ const points = footprintPoints(nodes, level);
17
+ if (points.length === 0)
18
+ return null;
19
+ return boxOf(points, levelLowestFloorWorldY(nodes, levelId) ?? floorY, floorY + height);
20
+ }
21
+ /**
22
+ * The world box of a building (every building, with no id): the union of its levels' boxes.
23
+ * The window's target when the whole building is shown.
24
+ */
25
+ export function buildingGroundBox(nodes, buildingId) {
26
+ let box = null;
27
+ for (const node of Object.values(nodes)) {
28
+ if (node.type !== 'level')
29
+ continue;
30
+ if (buildingId && getLevelElevations(nodes).get(node.id)?.buildingId !== buildingId)
31
+ continue;
32
+ const levelBox = levelGroundBox(nodes, node.id);
33
+ if (levelBox)
34
+ box = box ? unionBox(box, levelBox) : levelBox;
35
+ }
36
+ return box;
37
+ }
38
+ /**
39
+ * The world box of what the editor's level display shows when `levelId` is the shown level: that
40
+ * level and the ones under it, in every building (the display decides from the level index alone
41
+ * and hides the ones above), the levels the author hid left out. Where the fog of the underground
42
+ * keeps the world clear. `null` for an id that is no level, or when nothing shown has a footprint.
43
+ */
44
+ export function levelStackGroundBox(nodes, levelId) {
45
+ const shown = nodes[levelId];
46
+ if (shown?.type !== 'level')
47
+ return null;
48
+ let box = null;
49
+ for (const node of Object.values(nodes)) {
50
+ if (node.type !== 'level' || node.level > shown.level || node.visible === false)
51
+ continue;
52
+ const levelBox = levelGroundBox(nodes, node.id);
53
+ if (levelBox)
54
+ box = box ? unionBox(box, levelBox) : levelBox;
55
+ }
56
+ return box;
57
+ }
58
+ /** How far past the sight line the ground must stand to count as in the way. */
59
+ const SIGHT_CLEARANCE = 0.05;
60
+ /** Sight-line marches at most this long, however far the eye is. */
61
+ const MAX_MARCH_STEPS = 240;
62
+ /**
63
+ * Whether sculpted ground stands between `eye` and `box`: any of the sight lines to a grid
64
+ * over the box's floor passes under the terrain before it reaches the floor — a grid, not
65
+ * just the corners, because ground sculpted over the middle of a partly buried floor hides
66
+ * the rooms under it from above while every corner stays visible. Pure height field
67
+ * arithmetic — the few throttled CPU rays the view bar's word and the window's on/off
68
+ * are decided by; the window's shape itself is per-fragment in the renderer. `false` on a
69
+ * flat site, and for an eye inside the box (a walkthrough sees out, not through a window).
70
+ */
71
+ export function terrainBetweenEyeAndBox(nodes, eye, box) {
72
+ const site = Object.values(nodes).find((node) => node.type === 'site');
73
+ const field = site?.type === 'site' ? terrainFieldOf(site) : null;
74
+ if (!field)
75
+ return false;
76
+ if (eye[0] >= box.min[0] &&
77
+ eye[0] <= box.max[0] &&
78
+ eye[1] >= box.min[1] &&
79
+ eye[1] <= box.max[1] &&
80
+ eye[2] >= box.min[2] &&
81
+ eye[2] <= box.max[2])
82
+ return false;
83
+ const floorY = box.min[1];
84
+ for (const fx of [0, 0.25, 0.5, 0.75, 1])
85
+ for (const fz of [0, 0.25, 0.5, 0.75, 1]) {
86
+ const target = [
87
+ box.min[0] + (box.max[0] - box.min[0]) * fx,
88
+ floorY,
89
+ box.min[2] + (box.max[2] - box.min[2]) * fz,
90
+ ];
91
+ if (sightLineBuried(field, eye, target))
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+ function sightLineBuried(field, eye, target) {
97
+ const dx = target[0] - eye[0];
98
+ const dz = target[2] - eye[2];
99
+ const planLength = Math.hypot(dx, dz);
100
+ // Straight down: the ground at the eye's own XZ is what the floor under it is seen through.
101
+ if (planLength < 1e-6)
102
+ return heightAt(field, eye[0], eye[2]) > target[1] + SIGHT_CLEARANCE;
103
+ const steps = Math.min(MAX_MARCH_STEPS, Math.max(2, Math.ceil(planLength / field.spacing)));
104
+ for (let step = 1; step < steps; step += 1) {
105
+ const t = step / steps;
106
+ const x = eye[0] + dx * t;
107
+ const z = eye[2] + dz * t;
108
+ // Samples over the footprint count too: from above, ground sculpted over part of a
109
+ // partly buried floor is exactly what stands between the eye and its rooms. A pad at
110
+ // the floor's own height never trips this — the sight line only reaches it at the
111
+ // target, where the clearance absorbs it.
112
+ const sightY = eye[1] + (target[1] - eye[1]) * t;
113
+ if (heightAt(field, x, z) > sightY + SIGHT_CLEARANCE)
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ function footprintPoints(nodes, level) {
119
+ const buildingId = getLevelElevations(nodes).get(level.id)?.buildingId;
120
+ const building = buildingId ? nodes[buildingId] : undefined;
121
+ const placed = building?.type === 'building' ? building : null;
122
+ const points = [];
123
+ for (const childId of level.children) {
124
+ const child = nodes[childId];
125
+ if (child?.type === 'slab' && child.recessed !== true && !isSiteFlatwork(child))
126
+ for (const [x, z] of child.polygon)
127
+ points.push(levelLocalToWorldXZ(placed, x, z));
128
+ else if (child?.type === 'wall')
129
+ for (const [x, z] of [child.start, child.end])
130
+ points.push(levelLocalToWorldXZ(placed, x, z));
131
+ }
132
+ return points;
133
+ }
134
+ function boxOf(points, minY, maxY) {
135
+ const xs = points.map(([x]) => x);
136
+ const zs = points.map(([, z]) => z);
137
+ return {
138
+ min: [Math.min(...xs), minY, Math.min(...zs)],
139
+ max: [Math.max(...xs), maxY, Math.max(...zs)],
140
+ };
141
+ }
142
+ function unionBox(a, b) {
143
+ return {
144
+ min: [Math.min(a.min[0], b.min[0]), Math.min(a.min[1], b.min[1]), Math.min(a.min[2], b.min[2])],
145
+ max: [Math.max(a.max[0], b.max[0]), Math.max(a.max[1], b.max[1]), Math.max(a.max[2], b.max[2])],
146
+ };
147
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAElF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAA;AAsBrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,eAAe,CAoCjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,OAAO,EAAE,eAAe,GACvB,MAAM,CAWR;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,EAC3D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,OAAO,CAGT;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,MAAM,CAIR;AAUD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC;;;;;;;EA6D3C;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GAAG;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,EACD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;EAyBzC"}
1
+ {"version":3,"file":"opening-floor-datum.d.ts","sourceRoot":"","sources":["../../src/lib/opening-floor-datum.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAElF,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAA;AAqBrC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,eAAe,CAoCjB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,OAAO,EAAE,eAAe,GACvB,MAAM,CAWR;AAED,kFAAkF;AAClF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,EAC3D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,OAAO,CAGT;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC,GACzC,MAAM,CAIR;AAUD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,QAAQ,GAAG,UAAU,EAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,kBAAmC;;;;;;;EA6D3C;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC,GAAG;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,EACD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;EAyBzC"}