@pascal-app/core 1.0.5 → 1.0.7
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.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1164 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +38 -2
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +257 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +1667 -866
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +55 -11
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +4 -6
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +5951 -4351
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +1 -0
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +115 -7
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +121 -29
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +888 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -24
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +32 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -15
- package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +205 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +60 -35
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +38 -6
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +112 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +5 -2
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/types.d.ts +65 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +224 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +57 -10
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +135 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +42 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1079 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +6 -3
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +13 -8
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +846 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1057 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +166 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +2124 -1322
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +42 -16
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +31 -11
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +6751 -5151
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +85 -4
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +28 -7
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +2 -2
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +6 -1
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +118 -10
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1930 -1130
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -6,4 +6,14 @@ export type ProjectFileToolExecutor = (request: {
|
|
|
6
6
|
signal?: AbortSignal;
|
|
7
7
|
}) => Promise<unknown>;
|
|
8
8
|
export declare function executeProjectFileTool(name: string, raw: unknown, execute: ProjectFileToolExecutor, signal?: AbortSignal): Promise<unknown>;
|
|
9
|
+
/**
|
|
10
|
+
* A project file's bytes, for a caller who may edit the project: `author_scene`'s payload by
|
|
11
|
+
* reference. Refuses a missing file or one over maxBytes.
|
|
12
|
+
*/
|
|
13
|
+
export type ProjectFileReader = (request: {
|
|
14
|
+
projectId?: string;
|
|
15
|
+
fileId: string;
|
|
16
|
+
maxBytes: number;
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
}) => Promise<Uint8Array>;
|
|
9
19
|
//# sourceMappingURL=project-files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/agent-operations/project-files.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,mBAAmB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,oBA0BrB"}
|
|
1
|
+
{"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/agent-operations/project-files.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,mBAAmB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,oBA0BrB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type CirculationGeometryReason } from './circulation-geometry.js';
|
|
2
|
+
import { type CirculationGraph, type CirculationIssue } from './circulation-graph.js';
|
|
3
|
+
import type { SceneNodes } from './types.js';
|
|
4
|
+
export { floorSpaceReader, type Space, wallSidesReader } from './circulation-spaces.js';
|
|
5
|
+
/** Why a level is or is not reached from an entrance; null when it is. */
|
|
6
|
+
export type CirculationLevelReason = 'no_connection' | 'no_landing' | 'no_entrance' | 'not_measured';
|
|
7
|
+
/** Whether a level can be reached from an entrance: true, false, or null where it cannot be measured. */
|
|
8
|
+
export type CirculationLevel = {
|
|
9
|
+
levelId: string;
|
|
10
|
+
name: string;
|
|
11
|
+
buildingId: string | null;
|
|
12
|
+
reachable: boolean | null;
|
|
13
|
+
reason: CirculationLevelReason | null;
|
|
14
|
+
spaces: number;
|
|
15
|
+
reachedSpaces: number;
|
|
16
|
+
};
|
|
17
|
+
export type CirculationReach = {
|
|
18
|
+
/** The graph the reading measures: raw, or without the geometry that cannot be measured. */
|
|
19
|
+
graph: CirculationGraph;
|
|
20
|
+
geometry: CirculationGeometryReason[];
|
|
21
|
+
/** A multiple-building, tilted or floorless scene has no frame to measure a route in. */
|
|
22
|
+
frameLimited: boolean;
|
|
23
|
+
entrance: boolean;
|
|
24
|
+
reached: Set<string>;
|
|
25
|
+
/** Graph nodes whose route is not measurable: neither reached nor proven cut off. */
|
|
26
|
+
unmeasured: Set<string>;
|
|
27
|
+
/** Per level that holds a space to reach. */
|
|
28
|
+
levels: CirculationLevel[];
|
|
29
|
+
/** Level ids where a flight or lift serves the level but arrives at no floor. */
|
|
30
|
+
landingTrouble: Set<string>;
|
|
31
|
+
/** Spaces behind a door whose approach from outside cannot be measured. */
|
|
32
|
+
behindUnmeasuredEntrance: Set<string>;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* The one reading of reach that verify_scene and the circulation findings share: what is reached from
|
|
36
|
+
* any entrance, what is unmeasured, and, per level, whether an entrance reaches it at all.
|
|
37
|
+
*/
|
|
38
|
+
export declare function circulationReach(nodes: SceneNodes, rawGraph: CirculationGraph, geometry?: CirculationGeometryReason[]): CirculationReach;
|
|
39
|
+
export declare function circulationGraphIssues(nodes: SceneNodes, rawGraph: CirculationGraph, reach?: CirculationReach): CirculationIssue[];
|
|
40
|
+
export declare function circulationDiagnostics(nodes: SceneNodes): CirculationIssue[];
|
|
41
|
+
//# sourceMappingURL=reachability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reachability.d.ts","sourceRoot":"","sources":["../../src/agent-operations/reachability.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,yBAAyB,EAI/B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAMtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA4DpF,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,CAAA;AAEpG,yGAAyG;AACzG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4FAA4F;IAC5F,KAAK,EAAE,gBAAgB,CAAA;IACvB,QAAQ,EAAE,yBAAyB,EAAE,CAAA;IACrC,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,qFAAqF;IACrF,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,6CAA6C;IAC7C,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,iFAAiF;IACjF,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,2EAA2E;IAC3E,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACtC,CAAA;AAYD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,GAAE,yBAAyB,EAAgD,GAClF,gBAAgB,CAoElB;AAKD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,GAAE,gBAAoD,GAC1D,gBAAgB,EAAE,CAsEpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAE5E"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { resolveBuildingForLevel, resolveLevelId } from '../lib/node-ancestry.js';
|
|
2
|
+
import { getLevelAbove } from '../services/storey.js';
|
|
3
|
+
import { circulationGeometryReasons, measuredCirculationGraph, unmeasuredRouteIds, } from './circulation-geometry.js';
|
|
4
|
+
import { buildCirculationGraph, circulationLinks, exteriorEntranceEdges, nodeName, reachedFrom, } from './circulation-graph.js';
|
|
5
|
+
import { queryNodes } from './scene-queries.js';
|
|
6
|
+
export { floorSpaceReader, wallSidesReader } from './circulation-spaces.js';
|
|
7
|
+
const listed = (names) => names.length > 8
|
|
8
|
+
? `${names.slice(0, 8).join(', ')} and ${names.length - 8} more`
|
|
9
|
+
: names.join(', ');
|
|
10
|
+
function apartmentIssues(nodes, graph, entrance, rawGraph, cutOff) {
|
|
11
|
+
const links = circulationLinks(graph);
|
|
12
|
+
const groundIds = new Set(graph.floors.filter((floor) => floor.ground).map((floor) => floor.id));
|
|
13
|
+
const starts = entrance
|
|
14
|
+
? ['outside']
|
|
15
|
+
: [...graph.nodes.values()]
|
|
16
|
+
.filter((node) => node.levelId && groundIds.has(node.levelId) && !node.apartment)
|
|
17
|
+
.map((node) => node.id);
|
|
18
|
+
const everywhere = reachedFrom(links, starts);
|
|
19
|
+
const shared = reachedFrom(links, starts, (id) => !graph.nodes.get(id)?.apartment);
|
|
20
|
+
const rawLinks = circulationLinks(rawGraph);
|
|
21
|
+
const unmeasured = unmeasuredRouteIds(reachedFrom(rawLinks, starts), everywhere);
|
|
22
|
+
const unmeasuredShared = unmeasuredRouteIds(reachedFrom(rawLinks, starts, (id) => !rawGraph.nodes.get(id)?.apartment), shared);
|
|
23
|
+
const unreachable = [], through = [];
|
|
24
|
+
for (const unit of queryNodes(nodes, { type: 'unit' })) {
|
|
25
|
+
if ((unit.kind ?? 'apartment') !== 'apartment')
|
|
26
|
+
continue;
|
|
27
|
+
const keys = [...graph.nodes.values()]
|
|
28
|
+
.filter((node) => node.apartment === unit.id)
|
|
29
|
+
.map((node) => node.id);
|
|
30
|
+
if (!keys.length)
|
|
31
|
+
continue;
|
|
32
|
+
if (!keys.some((id) => everywhere.has(id))) {
|
|
33
|
+
const onCutOffLevels = keys.every((id) => cutOff.has(graph.nodes.get(id)?.levelId ?? ''));
|
|
34
|
+
if (!(onCutOffLevels || keys.some((id) => unmeasured.has(id))))
|
|
35
|
+
unreachable.push(unit.id);
|
|
36
|
+
}
|
|
37
|
+
else if (!keys.some((id) => shared.has(id) || unmeasuredShared.has(id)))
|
|
38
|
+
through.push(unit.id);
|
|
39
|
+
}
|
|
40
|
+
const issues = [];
|
|
41
|
+
if (unreachable.length)
|
|
42
|
+
issues.push({
|
|
43
|
+
type: 'apartment_unreachable',
|
|
44
|
+
message: `${unreachable.length} apartment${unreachable.length === 1 ? '' : 's'} cannot be reached from ${entrance ? 'the entrance' : "the ground floor's corridors"}: ${listed(unreachable.map((id) => nodeName(nodes, id)))}.`,
|
|
45
|
+
nodeIds: unreachable,
|
|
46
|
+
});
|
|
47
|
+
if (through.length)
|
|
48
|
+
issues.push({
|
|
49
|
+
type: 'reached_through_apartment',
|
|
50
|
+
message: `${through.length} apartment${through.length === 1 ? ' is' : 's are'} reached only by crossing another apartment: ${listed(through.map((id) => nodeName(nodes, id)))}.`,
|
|
51
|
+
nodeIds: through,
|
|
52
|
+
});
|
|
53
|
+
return issues;
|
|
54
|
+
}
|
|
55
|
+
const FRAME_REASONS = ['multiple_buildings', 'tilted_buildings', 'floor_missing'];
|
|
56
|
+
function stairLevelIds(nodes, id) {
|
|
57
|
+
const stair = nodes[id];
|
|
58
|
+
if (stair?.type !== 'stair')
|
|
59
|
+
return [];
|
|
60
|
+
const foot = stair.fromLevelId ?? resolveLevelId(stair, nodes);
|
|
61
|
+
const head = stair.toLevelId ?? (foot ? getLevelAbove(foot, nodes)?.id : undefined);
|
|
62
|
+
return [foot, head].filter((levelId) => typeof levelId === 'string');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The one reading of reach that verify_scene and the circulation findings share: what is reached from
|
|
66
|
+
* any entrance, what is unmeasured, and, per level, whether an entrance reaches it at all.
|
|
67
|
+
*/
|
|
68
|
+
export function circulationReach(nodes, rawGraph, geometry = circulationGeometryReasons(nodes, rawGraph)) {
|
|
69
|
+
const frameLimited = geometry.some((reason) => FRAME_REASONS.includes(reason.code));
|
|
70
|
+
const graph = frameLimited ? rawGraph : measuredCirculationGraph(nodes, rawGraph, geometry);
|
|
71
|
+
const entrance = exteriorEntranceEdges(graph).length > 0;
|
|
72
|
+
const reached = reachedFrom(circulationLinks(graph), entrance ? ['outside'] : []);
|
|
73
|
+
const rawLinks = circulationLinks(rawGraph);
|
|
74
|
+
const noRoute = !entrance && geometry.length > 0;
|
|
75
|
+
const behindUnmeasuredEntrance = reachedFrom(rawLinks, rawGraph.unmeasuredEntrances
|
|
76
|
+
.map((unmeasured) => unmeasured.spaceId)
|
|
77
|
+
.filter((id) => rawGraph.nodes.has(id)), (id) => id !== 'outside');
|
|
78
|
+
const unmeasured = new Set([
|
|
79
|
+
...unmeasuredRouteIds(reachedFrom(rawLinks, ['outside']), reached),
|
|
80
|
+
...[...behindUnmeasuredEntrance].filter((id) => !reached.has(id)),
|
|
81
|
+
...(noRoute ? [...rawGraph.nodes.keys()].filter((id) => !reached.has(id)) : []),
|
|
82
|
+
]);
|
|
83
|
+
const landingTrouble = new Set();
|
|
84
|
+
for (const issue of rawGraph.issues) {
|
|
85
|
+
if (issue.type !== 'stair_has_no_landing' && issue.type !== 'lift_door_blocked')
|
|
86
|
+
continue;
|
|
87
|
+
for (const id of issue.levelIds ?? [])
|
|
88
|
+
landingTrouble.add(id);
|
|
89
|
+
for (const nodeId of issue.nodeIds)
|
|
90
|
+
for (const id of stairLevelIds(nodes, nodeId))
|
|
91
|
+
landingTrouble.add(id);
|
|
92
|
+
}
|
|
93
|
+
const levels = rawGraph.floors.flatMap((floor) => {
|
|
94
|
+
const spaces = [...rawGraph.nodes.values()].filter((node) => node.levelId === floor.id &&
|
|
95
|
+
(node.kind === 'room' || node.kind === 'zone' || node.kind === 'floor') &&
|
|
96
|
+
!rawGraph.nonSpaces.has(node.id));
|
|
97
|
+
if (!spaces.length)
|
|
98
|
+
return [];
|
|
99
|
+
const reachedSpaces = spaces.filter((node) => reached.has(node.id)).length;
|
|
100
|
+
const lost = (node) => unmeasured.has(node.id) || !graph.nodes.has(node.id);
|
|
101
|
+
const [reachable, reason] = frameLimited
|
|
102
|
+
? [null, 'not_measured']
|
|
103
|
+
: !entrance
|
|
104
|
+
? [null, 'no_entrance']
|
|
105
|
+
: reachedSpaces
|
|
106
|
+
? [true, null]
|
|
107
|
+
: spaces.some(lost)
|
|
108
|
+
? [null, 'not_measured']
|
|
109
|
+
: [false, landingTrouble.has(floor.id) ? 'no_landing' : 'no_connection'];
|
|
110
|
+
return [
|
|
111
|
+
{
|
|
112
|
+
levelId: floor.id,
|
|
113
|
+
name: floor.name,
|
|
114
|
+
buildingId: resolveBuildingForLevel(floor.id, nodes) ?? null,
|
|
115
|
+
reachable,
|
|
116
|
+
reason,
|
|
117
|
+
spaces: spaces.length,
|
|
118
|
+
reachedSpaces,
|
|
119
|
+
},
|
|
120
|
+
];
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
graph,
|
|
124
|
+
geometry,
|
|
125
|
+
frameLimited,
|
|
126
|
+
entrance,
|
|
127
|
+
reached,
|
|
128
|
+
unmeasured,
|
|
129
|
+
levels,
|
|
130
|
+
landingTrouble,
|
|
131
|
+
behindUnmeasuredEntrance,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const levelFact = (name, building) => `${name} of ${building} has no walkable stair or lift to it from an entrance`;
|
|
135
|
+
export function circulationGraphIssues(nodes, rawGraph, reach = circulationReach(nodes, rawGraph)) {
|
|
136
|
+
const issues = [...rawGraph.issues];
|
|
137
|
+
const { geometry } = reach;
|
|
138
|
+
issues.push(...geometry.map((reason) => ({
|
|
139
|
+
type: 'circulation_not_measured',
|
|
140
|
+
message: reason.message,
|
|
141
|
+
nodeIds: reason.nodeIds,
|
|
142
|
+
reasonCode: reason.code,
|
|
143
|
+
})));
|
|
144
|
+
if (reach.frameLimited)
|
|
145
|
+
return issues;
|
|
146
|
+
const { graph, entrance, reached, unmeasured } = reach;
|
|
147
|
+
if (!entrance && geometry.length)
|
|
148
|
+
return issues;
|
|
149
|
+
const ground = graph.floors.find((floor) => floor.ground);
|
|
150
|
+
const spaces = [...graph.nodes.values()].filter((node) => (node.kind === 'room' || node.kind === 'zone' || node.kind === 'floor') &&
|
|
151
|
+
!graph.nonSpaces.has(node.id));
|
|
152
|
+
if (!entrance && ground && spaces.length)
|
|
153
|
+
issues.push({
|
|
154
|
+
type: 'no_exterior_door',
|
|
155
|
+
message: `No door, open edge or entrance steps connect outside to an interior space on ${ground.name}: the building cannot be entered.`,
|
|
156
|
+
nodeIds: [ground.id],
|
|
157
|
+
levelIds: [ground.id],
|
|
158
|
+
});
|
|
159
|
+
// A level no entrance reaches is one fact about the level; its rooms are not raised one by one.
|
|
160
|
+
const cutOff = new Set(reach.levels.filter((level) => level.reachable === false).map((level) => level.levelId));
|
|
161
|
+
for (const level of reach.levels) {
|
|
162
|
+
if (level.reachable !== false)
|
|
163
|
+
continue;
|
|
164
|
+
const building = (level.buildingId && nodes[level.buildingId]?.name) || 'the building';
|
|
165
|
+
issues.push({
|
|
166
|
+
type: 'missing_stair',
|
|
167
|
+
message: `${levelFact(level.name, building)}.`,
|
|
168
|
+
nodeIds: [level.levelId],
|
|
169
|
+
levelIds: [level.levelId],
|
|
170
|
+
...(level.reason ? { reasonCode: level.reason } : {}),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const rooms = spaces.filter((node) => !reached.has(node.id) &&
|
|
174
|
+
(!node.apartment || unmeasured.has(node.id)) &&
|
|
175
|
+
!(cutOff.has(node.levelId ?? '') && !unmeasured.has(node.id)));
|
|
176
|
+
for (const room of rooms) {
|
|
177
|
+
const limited = unmeasured.has(room.id);
|
|
178
|
+
const entryUnmeasured = limited && reach.behindUnmeasuredEntrance.has(room.id);
|
|
179
|
+
issues.push({
|
|
180
|
+
type: limited ? 'circulation_not_measured' : 'room_unreachable',
|
|
181
|
+
message: entryUnmeasured
|
|
182
|
+
? `${room.name} access is not measured because the door that enters it opens high above the modeled ground.`
|
|
183
|
+
: limited
|
|
184
|
+
? `${room.name} access is not measured because its route crosses unmeasured walking geometry.`
|
|
185
|
+
: `${room.name} cannot be reached from outside through modeled doors, openings, open edges, stairs or lifts.`,
|
|
186
|
+
...(limited
|
|
187
|
+
? { reasonCode: entryUnmeasured ? 'entrance_not_measured' : 'route_not_measured' }
|
|
188
|
+
: {}),
|
|
189
|
+
nodeIds: [room.sourceId ?? room.levelId ?? room.id],
|
|
190
|
+
levelIds: room.levelId ? [room.levelId] : [],
|
|
191
|
+
spaceId: room.id,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
issues.push(...apartmentIssues(nodes, graph, entrance, rawGraph, cutOff));
|
|
195
|
+
return issues;
|
|
196
|
+
}
|
|
197
|
+
export function circulationDiagnostics(nodes) {
|
|
198
|
+
return circulationGraphIssues(nodes, buildCirculationGraph(nodes));
|
|
199
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { SceneMaterial } from '../schema/index.js';
|
|
2
|
+
import { type RoomReading } from './room-readings.js';
|
|
3
|
+
import type { SceneNodes } from './types.js';
|
|
4
|
+
import { type WallFaceReading } from './wall-face-defaults.js';
|
|
5
|
+
/**
|
|
6
|
+
* What the rooms of a scene owe, checked at the end of a turn: a wet room with no tile, rooms with no
|
|
7
|
+
* skirting, a piece hung on the face of the wall that looks into another room than the one it names.
|
|
8
|
+
* Like the coherence checks they guide and never forbid: each says what the scene shows and leaves
|
|
9
|
+
* the maker to fix it or keep it. A finding fires only where the nodes can be read to the end (an
|
|
10
|
+
* inline material, a script-built face or a scene ref with no scene materials is `unknown`, and
|
|
11
|
+
* unknown fires nothing).
|
|
12
|
+
*/
|
|
13
|
+
export declare const ROOM_CHECK_CODES: readonly ['room_wet_untiled', 'rooms_no_skirting', 'rooms_skirting_partial', 'wall_faces_default', 'rooms_floors_default', 'room_no_floor'];
|
|
14
|
+
export type RoomCheckCode = (typeof ROOM_CHECK_CODES)[number];
|
|
15
|
+
export type RoomCheckIssue = {
|
|
16
|
+
type: RoomCheckCode;
|
|
17
|
+
message: string;
|
|
18
|
+
severity: 'warning';
|
|
19
|
+
nodeIds: string[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* A wet room (bathroom, shower room, WC, laundry) whose walls are not tiled as a wet room is: to
|
|
23
|
+
* `WET_TILED_TO_M` on the walls its fixtures stand against, and to the ceiling around its shower. A
|
|
24
|
+
* tiled floor does not make up for walls that splash.
|
|
25
|
+
*/
|
|
26
|
+
export declare function wetRoomIssues(rooms: readonly RoomReading[]): RoomCheckIssue[];
|
|
27
|
+
/**
|
|
28
|
+
* Skirting, from the faces of a room's walls: the rooms a finished floor meets in view (bedrooms,
|
|
29
|
+
* living and dining rooms, offices, hallways) that have none on any face. When some rooms have it
|
|
30
|
+
* the finding names the ones left bare; when none has it, it is about the scene, and only for a
|
|
31
|
+
* house of at least `HOUSE_MIN_ROOMS` such rooms. Rooms with no known wall face are not read.
|
|
32
|
+
*/
|
|
33
|
+
export declare function skirtingIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
|
|
34
|
+
/**
|
|
35
|
+
* Skirting on part of a room's faces: a room the skirting is owed in (see `skirtingIssue`) that has it
|
|
36
|
+
* on some of the wall faces looking in and not on the others. A room with none is `skirtingIssue`'s.
|
|
37
|
+
*/
|
|
38
|
+
export declare function partialSkirtingIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
|
|
39
|
+
/** Rooms with no floor under them: no plate of their own, no drawn slab they were taken from, and slabs over less than half their footprint. */
|
|
40
|
+
export declare function noFloorIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
|
|
41
|
+
/**
|
|
42
|
+
* The floors of the indoor rooms that show the default, as one finding that names the rooms and
|
|
43
|
+
* says how many other rooms show a finish. Fewer than `HOUSE_MIN_ROOMS` rooms all at the default
|
|
44
|
+
* are a test or a demonstration and say nothing. A ceiling at its default is normal and is not
|
|
45
|
+
* read; the wall faces are read apart (`wallFaceDefaultIssue`): by wall, not through a room.
|
|
46
|
+
*/
|
|
47
|
+
export declare function floorDefaultIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
|
|
48
|
+
/**
|
|
49
|
+
* The wall faces nobody gave a finish, read from the walls themselves (`readWallFaces`): one finding
|
|
50
|
+
* that names each wall with its default faces, how long they are, where they run in plan and which
|
|
51
|
+
* room they face (or stand inside), and how many of the faces read show the default. The walls of a
|
|
52
|
+
* scene of fewer than `HOUSE_MIN_ROOMS` rooms whose faces are all at the default are a test or a
|
|
53
|
+
* demonstration and say nothing.
|
|
54
|
+
*/
|
|
55
|
+
export declare function wallFaceDefaultIssue(read: WallFaceReading, roomsRead: number): RoomCheckIssue | null;
|
|
56
|
+
/** Every room check on a scene. */
|
|
57
|
+
export declare function roomCheckIssues(nodes: SceneNodes, options?: {
|
|
58
|
+
materials?: Readonly<Record<string, SceneMaterial>>;
|
|
59
|
+
}): RoomCheckIssue[];
|
|
60
|
+
//# sourceMappingURL=room-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-checks.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-checks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEhG;;;;;;;GAOG;AAEH,eAAO,MAAM,gBAAgB,YAC3B,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,CACP,CAAA;AACV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,EAAE,CA6B7E;AAQD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAsBlF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAkBzF;AAED,gJAAgJ;AAChJ,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CASjF;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAetF;AA4BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CAiBvB;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;CAAO,GACpE,cAAc,EAAE,CAmBlB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { isSkirtedRoomUse, isWetRoomUse } from '../building/room-use.js';
|
|
2
|
+
import { readRooms } from './room-readings.js';
|
|
3
|
+
import { WET_TILED_TO_M } from './room-wet.js';
|
|
4
|
+
import { registerSceneCheck } from './verify-scene.js';
|
|
5
|
+
import { readWallFaces } from './wall-face-defaults.js';
|
|
6
|
+
/**
|
|
7
|
+
* What the rooms of a scene owe, checked at the end of a turn: a wet room with no tile, rooms with no
|
|
8
|
+
* skirting, a piece hung on the face of the wall that looks into another room than the one it names.
|
|
9
|
+
* Like the coherence checks they guide and never forbid: each says what the scene shows and leaves
|
|
10
|
+
* the maker to fix it or keep it. A finding fires only where the nodes can be read to the end (an
|
|
11
|
+
* inline material, a script-built face or a scene ref with no scene materials is `unknown`, and
|
|
12
|
+
* unknown fires nothing).
|
|
13
|
+
*/
|
|
14
|
+
export const ROOM_CHECK_CODES = [
|
|
15
|
+
'room_wet_untiled',
|
|
16
|
+
'rooms_no_skirting',
|
|
17
|
+
'rooms_skirting_partial',
|
|
18
|
+
'wall_faces_default',
|
|
19
|
+
'rooms_floors_default',
|
|
20
|
+
'room_no_floor',
|
|
21
|
+
];
|
|
22
|
+
const WORDS_SHOWN = 6;
|
|
23
|
+
/** Names as a sentence lists them: the first few, then how many more. */
|
|
24
|
+
const listed = (names) => names.length <= WORDS_SHOWN
|
|
25
|
+
? names.join(', ')
|
|
26
|
+
: `${names.slice(0, WORDS_SHOWN).join(', ')} and ${names.length - WORDS_SHOWN} more`;
|
|
27
|
+
const finishes = (room) => `its floor is ${room.floor.finish} and its walls ${room.walls.finishes.join(', ') || 'unfinished'}`;
|
|
28
|
+
const metres = (value) => `${value.toFixed(2)} m`;
|
|
29
|
+
/**
|
|
30
|
+
* A wet room (bathroom, shower room, WC, laundry) whose walls are not tiled as a wet room is: to
|
|
31
|
+
* `WET_TILED_TO_M` on the walls its fixtures stand against, and to the ceiling around its shower. A
|
|
32
|
+
* tiled floor does not make up for walls that splash.
|
|
33
|
+
*/
|
|
34
|
+
export function wetRoomIssues(rooms) {
|
|
35
|
+
return rooms.flatMap((room) => {
|
|
36
|
+
const wet = room.wet;
|
|
37
|
+
if (wet?.verdict !== 'no' || !isWetRoomUse(room.use))
|
|
38
|
+
return [];
|
|
39
|
+
const where = wet.byFixtures ? 'the walls its fixtures stand against' : 'its walls';
|
|
40
|
+
const bareShower = wet.showers.find((shower) => shower.full === 'no');
|
|
41
|
+
const [lead, fix] = wet.tiled === 'no'
|
|
42
|
+
? [
|
|
43
|
+
!wet.anyTile
|
|
44
|
+
? `shows no tile on ${where}`
|
|
45
|
+
: wet.tiledTo && wet.tiledTo > 0.05
|
|
46
|
+
? `has tile up to ${metres(wet.tiledTo)} on ${where}`
|
|
47
|
+
: `has tile on part of ${where}, along less than most of their length`,
|
|
48
|
+
`tile ${where} to ${metres(WET_TILED_TO_M)}`,
|
|
49
|
+
]
|
|
50
|
+
: [
|
|
51
|
+
`is tiled to ${metres(WET_TILED_TO_M)} but not to the ceiling around its shower (${bareShower?.name})`,
|
|
52
|
+
`tile the walls around ${bareShower?.name} to the ceiling`,
|
|
53
|
+
];
|
|
54
|
+
return [
|
|
55
|
+
{
|
|
56
|
+
type: 'room_wet_untiled',
|
|
57
|
+
message: `${room.name} (${room.use}, ${room.levelName}) ${lead}: ${finishes(room)}. A wet room is usually tiled to ${metres(WET_TILED_TO_M)} on the walls its fixtures stand against and to the ceiling around its shower, whatever its floor; ${fix}, or keep the finish if it is intended.`,
|
|
58
|
+
severity: 'warning',
|
|
59
|
+
nodeIds: [room.id],
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fewer rooms than this are a room or two, not a house: bare wall bases there say nothing of a
|
|
66
|
+
* finishing recipe, and a scene of one room is mostly a test or a demonstration.
|
|
67
|
+
*/
|
|
68
|
+
const HOUSE_MIN_ROOMS = 3;
|
|
69
|
+
/**
|
|
70
|
+
* Skirting, from the faces of a room's walls: the rooms a finished floor meets in view (bedrooms,
|
|
71
|
+
* living and dining rooms, offices, hallways) that have none on any face. When some rooms have it
|
|
72
|
+
* the finding names the ones left bare; when none has it, it is about the scene, and only for a
|
|
73
|
+
* house of at least `HOUSE_MIN_ROOMS` such rooms. Rooms with no known wall face are not read.
|
|
74
|
+
*/
|
|
75
|
+
export function skirtingIssue(rooms) {
|
|
76
|
+
const bare = rooms.filter((room) => isSkirtedRoomUse(room.use) && room.skirting.faces > 0 && !room.skirting.withSkirting);
|
|
77
|
+
if (!bare.length)
|
|
78
|
+
return null;
|
|
79
|
+
const skirted = rooms.filter((room) => room.skirting.withSkirting > 0);
|
|
80
|
+
const nodeIds = bare.map((room) => room.id);
|
|
81
|
+
if (!skirted.length)
|
|
82
|
+
return bare.length < HOUSE_MIN_ROOMS
|
|
83
|
+
? null
|
|
84
|
+
: {
|
|
85
|
+
type: 'rooms_no_skirting',
|
|
86
|
+
message: `No room of the scene has skirting: ${listed(bare.map((room) => room.name))} (${bare.length}) show bare wall bases. Skirting is the skirting field of the wall: set it on the walls of these rooms, or keep the bare bases if they are intended.`,
|
|
87
|
+
severity: 'warning',
|
|
88
|
+
nodeIds,
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
type: 'rooms_no_skirting',
|
|
92
|
+
message: `${listed(bare.map((room) => room.name))} have no skirting while ${listed(skirted.map((room) => room.name))} do. Skirting is the skirting field of the wall: set it on the walls of these rooms, or keep them bare if that is intended.`,
|
|
93
|
+
severity: 'warning',
|
|
94
|
+
nodeIds,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Skirting on part of a room's faces: a room the skirting is owed in (see `skirtingIssue`) that has it
|
|
99
|
+
* on some of the wall faces looking in and not on the others. A room with none is `skirtingIssue`'s.
|
|
100
|
+
*/
|
|
101
|
+
export function partialSkirtingIssue(rooms) {
|
|
102
|
+
const partial = rooms.filter((room) => isSkirtedRoomUse(room.use) &&
|
|
103
|
+
room.skirting.withSkirting > 0 &&
|
|
104
|
+
room.skirting.withSkirting < room.skirting.faces);
|
|
105
|
+
if (!partial.length)
|
|
106
|
+
return null;
|
|
107
|
+
return {
|
|
108
|
+
type: 'rooms_skirting_partial',
|
|
109
|
+
message: `Skirting is on part of the wall faces of ${listed(partial.map((room) => `${room.name} (${room.skirting.withSkirting} of ${room.skirting.faces} faces)`))}: ${plural(partial.length, 'room')} of the ${plural(rooms.filter((room) => isSkirtedRoomUse(room.use)).length, 'room')} that owe it.`,
|
|
110
|
+
severity: 'warning',
|
|
111
|
+
nodeIds: partial.map((room) => room.id),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Rooms with no floor under them: no plate of their own, no drawn slab they were taken from, and slabs over less than half their footprint. */
|
|
115
|
+
export function noFloorIssue(rooms) {
|
|
116
|
+
const bare = rooms.filter((room) => room.indoor && !room.floor.held);
|
|
117
|
+
if (!bare.length)
|
|
118
|
+
return null;
|
|
119
|
+
return {
|
|
120
|
+
type: 'room_no_floor',
|
|
121
|
+
message: `No floor plate or slab is under ${listed(bare.map((room) => `${room.name} (${room.levelName})`))}: slabs cover less than half of ${bare.length === 1 ? 'its footprint' : 'each footprint'}.`,
|
|
122
|
+
severity: 'warning',
|
|
123
|
+
nodeIds: bare.map((room) => room.id),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const plural = (count, noun) => `${count} ${noun}${count === 1 ? '' : 's'}`;
|
|
127
|
+
/**
|
|
128
|
+
* The floors of the indoor rooms that show the default, as one finding that names the rooms and
|
|
129
|
+
* says how many other rooms show a finish. Fewer than `HOUSE_MIN_ROOMS` rooms all at the default
|
|
130
|
+
* are a test or a demonstration and say nothing. A ceiling at its default is normal and is not
|
|
131
|
+
* read; the wall faces are read apart (`wallFaceDefaultIssue`): by wall, not through a room.
|
|
132
|
+
*/
|
|
133
|
+
export function floorDefaultIssue(rooms) {
|
|
134
|
+
const indoor = rooms.filter((room) => room.indoor);
|
|
135
|
+
const bare = indoor.filter((room) => room.floor.atDefault);
|
|
136
|
+
if (!bare.length || (bare.length === indoor.length && indoor.length < HOUSE_MIN_ROOMS))
|
|
137
|
+
return null;
|
|
138
|
+
return {
|
|
139
|
+
type: 'rooms_floors_default',
|
|
140
|
+
message: `Floors at the default, no finish written for them: ${listed(bare.map((room) => room.name))}${bare.length === indoor.length
|
|
141
|
+
? ` (all ${plural(indoor.length, 'room')} read)`
|
|
142
|
+
: `; the other ${plural(indoor.length - bare.length, 'room')} read show a finish`}.`,
|
|
143
|
+
severity: 'warning',
|
|
144
|
+
nodeIds: bare.map((room) => room.id),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const two = (value) => value.toFixed(2);
|
|
148
|
+
const spot = (point) => `${point[0]}, ${point[1]}`;
|
|
149
|
+
/** Where a default face is, as the finding says it: the rooms it faces, or the room its wall stands in. */
|
|
150
|
+
const placeOf = (face) => face.facing.length
|
|
151
|
+
? `facing ${listed(face.facing)}`
|
|
152
|
+
: face.standsIn.length
|
|
153
|
+
? `inside ${listed(face.standsIn)}`
|
|
154
|
+
: 'with no room on that side';
|
|
155
|
+
/** One wall's default faces as a clause: both faces together when they are alike, else each face. */
|
|
156
|
+
function wallClause(faces) {
|
|
157
|
+
const [one] = faces;
|
|
158
|
+
const alike = faces.length === 2 &&
|
|
159
|
+
Math.abs(faces[0].metres - faces[1].metres) < 0.01 &&
|
|
160
|
+
placeOf(faces[0]) === placeOf(faces[1]);
|
|
161
|
+
const how = alike
|
|
162
|
+
? `both faces ${two(faces[0].metres)} m ${placeOf(faces[0])}`
|
|
163
|
+
: faces.map((face) => `face ${face.face} ${two(face.metres)} m ${placeOf(face)}`).join(', ');
|
|
164
|
+
const first = faces.reduce((a, b) => (b.stretches[0][0] < a.stretches[0][0] ? b : a));
|
|
165
|
+
const last = faces.reduce((a, b) => (b.stretches.at(-1)[1] > a.stretches.at(-1)[1] ? b : a));
|
|
166
|
+
return `“${one.wallName}” (${one.levelName}): ${how}, from ${spot(first.from)} to ${spot(last.to)}`;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The wall faces nobody gave a finish, read from the walls themselves (`readWallFaces`): one finding
|
|
170
|
+
* that names each wall with its default faces, how long they are, where they run in plan and which
|
|
171
|
+
* room they face (or stand inside), and how many of the faces read show the default. The walls of a
|
|
172
|
+
* scene of fewer than `HOUSE_MIN_ROOMS` rooms whose faces are all at the default are a test or a
|
|
173
|
+
* demonstration and say nothing.
|
|
174
|
+
*/
|
|
175
|
+
export function wallFaceDefaultIssue(read, roomsRead) {
|
|
176
|
+
if (!read.defaults.length)
|
|
177
|
+
return null;
|
|
178
|
+
const bare = new Set(read.defaults.map((face) => `${face.wallId}/${face.face}`)).size;
|
|
179
|
+
if (bare >= read.faces && roomsRead < HOUSE_MIN_ROOMS)
|
|
180
|
+
return null;
|
|
181
|
+
const byWall = new Map();
|
|
182
|
+
for (const face of read.defaults)
|
|
183
|
+
byWall.set(face.wallId, [...(byWall.get(face.wallId) ?? []), face]);
|
|
184
|
+
const metres = read.defaults.reduce((sum, face) => sum + face.metres, 0);
|
|
185
|
+
const total = (faces) => Math.round(faces.reduce((sum, face) => sum + face.metres, 0) * 100);
|
|
186
|
+
const longest = [...byWall.values()].sort((p, q) => total(q) - total(p));
|
|
187
|
+
return {
|
|
188
|
+
type: 'wall_faces_default',
|
|
189
|
+
message: `Wall faces at the default, no finish written for them: ${listed(longest.map(wallClause))}; ${bare} of ${plural(read.faces, 'wall face')} read (${metres.toFixed(1)} of ${read.metres.toFixed(1)} m) show the default.`,
|
|
190
|
+
severity: 'warning',
|
|
191
|
+
nodeIds: [...byWall.keys()],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/** Every room check on a scene. */
|
|
195
|
+
export function roomCheckIssues(nodes, options = {}) {
|
|
196
|
+
const rooms = readRooms(nodes, { materials: options.materials });
|
|
197
|
+
const wallFaces = wallFaceDefaultIssue(readWallFaces(nodes), rooms.filter((room) => room.indoor).length);
|
|
198
|
+
if (!rooms.length)
|
|
199
|
+
return wallFaces ? [wallFaces] : [];
|
|
200
|
+
const skirting = skirtingIssue(rooms);
|
|
201
|
+
const partial = partialSkirtingIssue(rooms);
|
|
202
|
+
const noFloor = noFloorIssue(rooms);
|
|
203
|
+
const floors = floorDefaultIssue(rooms);
|
|
204
|
+
return [
|
|
205
|
+
...wetRoomIssues(rooms),
|
|
206
|
+
...(skirting ? [skirting] : []),
|
|
207
|
+
...(partial ? [partial] : []),
|
|
208
|
+
...(noFloor ? [noFloor] : []),
|
|
209
|
+
...(wallFaces ? [wallFaces] : []),
|
|
210
|
+
...(floors ? [floors] : []),
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
registerSceneCheck({
|
|
214
|
+
name: 'room checks',
|
|
215
|
+
order: 70,
|
|
216
|
+
run: (nodes, _input, context) => {
|
|
217
|
+
try {
|
|
218
|
+
return roomCheckIssues(nodes, { materials: context?.materials });
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// A scene the readers cannot walk (a wall stored without its start) is the schema check's to
|
|
222
|
+
// report, not a reason for verify_scene to fail.
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { WallFace, WallNode, ZoneNode } from '../schema/index.js';
|
|
2
|
+
import type { SceneNodes } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A stretch of one face of one wall that a room stands on: the unit every room-level wall write
|
|
5
|
+
* and read works in. `u0..u1` are metres from the wall's start along its reference line (along the
|
|
6
|
+
* chord for a curved wall), the coordinates a face's paint regions use; `whole` is a stretch that
|
|
7
|
+
* runs the face's full length, so a region over it can leave `u` unbounded and follow the wall when
|
|
8
|
+
* it is lengthened.
|
|
9
|
+
*/
|
|
10
|
+
export type RoomWallFace = {
|
|
11
|
+
wallId: string;
|
|
12
|
+
face: WallFace;
|
|
13
|
+
t0: number;
|
|
14
|
+
t1: number;
|
|
15
|
+
u0: number;
|
|
16
|
+
u1: number;
|
|
17
|
+
/** The wall's reference length (its chord), metres. */
|
|
18
|
+
length: number;
|
|
19
|
+
whole: boolean;
|
|
20
|
+
curved: boolean;
|
|
21
|
+
};
|
|
22
|
+
/** The walls that bound a room and carry a finish: its boundary walls, curtain walls left out. */
|
|
23
|
+
export declare function roomBoundaryWalls(nodes: SceneNodes, zone: ZoneNode): WallNode[];
|
|
24
|
+
/**
|
|
25
|
+
* The faces that look into a room, a stretch each, in the order of the room's boundary walls: for a
|
|
26
|
+
* partition the face of this room and not the other's, for a wall that runs on past the room only the
|
|
27
|
+
* stretch the room stands on.
|
|
28
|
+
*/
|
|
29
|
+
export declare function roomWallFaces(nodes: SceneNodes, zone: ZoneNode): RoomWallFace[];
|
|
30
|
+
//# sourceMappingURL=room-faces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-faces.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-faces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAID,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,CAgB/E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { isCurvedWall } from '../systems/wall/wall-curve.js';
|
|
2
|
+
import { getWallZoneSpans } from '../systems/wall/wall-finish.js';
|
|
3
|
+
const WHOLE = 1e-3;
|
|
4
|
+
/** The walls that bound a room and carry a finish: its boundary walls, curtain walls left out. */
|
|
5
|
+
export function roomBoundaryWalls(nodes, zone) {
|
|
6
|
+
return (zone.boundaryWallIds ?? [])
|
|
7
|
+
.map((id) => nodes[id])
|
|
8
|
+
.filter((wall) => wall?.type === 'wall' && wall.wallType !== 'curtain');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The faces that look into a room, a stretch each, in the order of the room's boundary walls: for a
|
|
12
|
+
* partition the face of this room and not the other's, for a wall that runs on past the room only the
|
|
13
|
+
* stretch the room stands on.
|
|
14
|
+
*/
|
|
15
|
+
export function roomWallFaces(nodes, zone) {
|
|
16
|
+
return roomBoundaryWalls(nodes, zone).flatMap((wall) => {
|
|
17
|
+
const length = Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
|
|
18
|
+
const curved = isCurvedWall(wall);
|
|
19
|
+
return getWallZoneSpans(wall, [zone]).map((span) => ({
|
|
20
|
+
wallId: wall.id,
|
|
21
|
+
face: span.face,
|
|
22
|
+
t0: span.t0,
|
|
23
|
+
t1: span.t1,
|
|
24
|
+
u0: span.t0 * length,
|
|
25
|
+
u1: span.t1 * length,
|
|
26
|
+
length,
|
|
27
|
+
whole: span.t0 < WHOLE && span.t1 > 1 - WHOLE,
|
|
28
|
+
curved,
|
|
29
|
+
}));
|
|
30
|
+
});
|
|
31
|
+
}
|