@pascal-app/core 1.0.6 → 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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getDoorOpeningSize } from '../lib/door-opening.js';
|
|
1
2
|
/**
|
|
2
3
|
* Door access keep-outs for MCP layout tools.
|
|
3
4
|
*
|
|
@@ -6,10 +7,14 @@
|
|
|
6
7
|
*
|
|
7
8
|
* See docs/layout-clearance-error-log.md for pitfalls (levels, gap sign, scale).
|
|
8
9
|
*/
|
|
10
|
+
import { isVehicleDoorType } from '../lib/door-operation.js';
|
|
11
|
+
import { area, intersection } from '../lib/polygon-boolean.js';
|
|
9
12
|
import { boxCorners, rotateVector } from '../procedural-items/spatial.js';
|
|
10
13
|
import { getScaledDimensions } from '../schema/index.js';
|
|
11
|
-
import {
|
|
14
|
+
import { DEFAULT_WALL_THICKNESS } from '../systems/wall/wall-footprint.js';
|
|
15
|
+
import { isFloorUnderlay, isVehicle } from './furniture-kind.js';
|
|
12
16
|
import { itemLevelHeightRange, itemPlanAabbInLevel } from './item-space.js';
|
|
17
|
+
import { axisOverlap, clearingMoves, describeMoves, metres, roundBox, roundMm, } from './plan-clearance.js';
|
|
13
18
|
import { wallLength } from './plan-geometry.js';
|
|
14
19
|
/** Plan depth (m) cleared on each side of the wall face through the opening. */
|
|
15
20
|
export const DEFAULT_DOOR_CLEAR_DEPTH = 0.65;
|
|
@@ -210,8 +215,14 @@ export function doorKeepoutFromWall(wall, door, options) {
|
|
|
210
215
|
const length = wallLength(wall);
|
|
211
216
|
if (length <= 1e-6)
|
|
212
217
|
return null;
|
|
213
|
-
const
|
|
214
|
-
|
|
218
|
+
const size = getDoorOpeningSize({
|
|
219
|
+
...door,
|
|
220
|
+
width: typeof door.width === 'number' && door.width > 0 ? door.width : 0.9,
|
|
221
|
+
height: typeof door.height === 'number' && door.height > 0 ? door.height : DEFAULT_DOOR_HEIGHT,
|
|
222
|
+
});
|
|
223
|
+
const width = size.width;
|
|
224
|
+
const localX = (Array.isArray(door.position) ? (door.position[0] ?? length / 2) : length / 2) -
|
|
225
|
+
size.leafOffsetX * (Math.cos(door.rotation?.[1] ?? 0) >= 0 ? 1 : -1);
|
|
215
226
|
const [sx, sz] = wall.start;
|
|
216
227
|
const [ex, ez] = wall.end;
|
|
217
228
|
const dx = (ex - sx) / length;
|
|
@@ -237,13 +248,28 @@ export function doorKeepoutFromWall(wall, door, options) {
|
|
|
237
248
|
}
|
|
238
249
|
const xs = corners.map((c) => c[0]);
|
|
239
250
|
const zs = corners.map((c) => c[1]);
|
|
251
|
+
const vehicleAperture = isVehicleDoorType(door.doorType)
|
|
252
|
+
? doorKeepoutFromWall(wall, { ...door, doorType: undefined }, {
|
|
253
|
+
clearDepth: (wall.thickness ?? DEFAULT_WALL_THICKNESS) / 2,
|
|
254
|
+
sidePad,
|
|
255
|
+
levelId: options?.levelId,
|
|
256
|
+
})
|
|
257
|
+
: null;
|
|
240
258
|
return {
|
|
259
|
+
...(vehicleAperture
|
|
260
|
+
? { vehicleAperture: { ...vehicleAperture, doorType: door.doorType } }
|
|
261
|
+
: {}),
|
|
241
262
|
doorId: door.id,
|
|
242
263
|
wallId: wall.id,
|
|
243
264
|
levelId: options?.levelId ?? null,
|
|
244
265
|
width,
|
|
245
266
|
localX,
|
|
246
|
-
|
|
267
|
+
doorType: door.doorType,
|
|
268
|
+
centre: [sx + dx * localX, sz + dz * localX],
|
|
269
|
+
normal: [nx, nz],
|
|
270
|
+
alongM: 2 * half,
|
|
271
|
+
depthM: { inward: front, outward: -back },
|
|
272
|
+
height: size.height,
|
|
247
273
|
aabb: {
|
|
248
274
|
minX: Math.min(...xs),
|
|
249
275
|
maxX: Math.max(...xs),
|
|
@@ -279,8 +305,87 @@ export function collectDoorKeepouts(nodes, options) {
|
|
|
279
305
|
}
|
|
280
306
|
return keepouts;
|
|
281
307
|
}
|
|
308
|
+
/** How near a door's keep-out an item may stand before it is read as in it (m): a leaf's play, not a measure of the house. */
|
|
309
|
+
export const DOOR_KEEPOUT_MARGIN = 0.02;
|
|
282
310
|
export function itemBlocksDoorKeepout(itemAabb, keepout) {
|
|
283
|
-
return aabbsOverlap(itemAabb, keepout.aabb,
|
|
311
|
+
return aabbsOverlap(itemAabb, keepout.aabb, DOOR_KEEPOUT_MARGIN);
|
|
312
|
+
}
|
|
313
|
+
/** How much of a keep-out an item's real shape must stand in to block it (m²): a touching edge is not. */
|
|
314
|
+
export const DOOR_KEEPOUT_MIN_AREA = 1e-4;
|
|
315
|
+
/**
|
|
316
|
+
* The area (m²) of an item's solids that reach below the door's head and stand in the keep-out,
|
|
317
|
+
* grown by the same margin the box is read with; 0 when none does.
|
|
318
|
+
*/
|
|
319
|
+
function solidsKeepoutArea(solids, keepout) {
|
|
320
|
+
const { minX, maxX, minZ, maxZ } = keepout.aabb;
|
|
321
|
+
const m = DOOR_KEEPOUT_MARGIN;
|
|
322
|
+
const zone = [
|
|
323
|
+
[minX - m, minZ - m],
|
|
324
|
+
[maxX + m, minZ - m],
|
|
325
|
+
[maxX + m, maxZ + m],
|
|
326
|
+
[minX - m, maxZ + m],
|
|
327
|
+
];
|
|
328
|
+
return solids.reduce((total, solid) => {
|
|
329
|
+
// A pendant over the doorway is above the leaf.
|
|
330
|
+
if (solid.y0 >= keepout.height - 0.05)
|
|
331
|
+
return total;
|
|
332
|
+
const shared = area(intersection(solid.polygons, zone));
|
|
333
|
+
return shared >= DOOR_KEEPOUT_MIN_AREA ? total + shared : total;
|
|
334
|
+
}, 0);
|
|
335
|
+
}
|
|
336
|
+
function clearZoneOf(keepout) {
|
|
337
|
+
return {
|
|
338
|
+
box: roundBox(keepout.aabb),
|
|
339
|
+
alongWallM: roundMm(keepout.alongM),
|
|
340
|
+
depthM: { inward: roundMm(keepout.depthM.inward), outward: roundMm(keepout.depthM.outward) },
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function sideOfWall(keepout, footprint) {
|
|
344
|
+
const across = ((footprint.minX + footprint.maxX) / 2 - keepout.centre[0]) * keepout.normal[0] +
|
|
345
|
+
((footprint.minZ + footprint.maxZ) / 2 - keepout.centre[1]) * keepout.normal[1];
|
|
346
|
+
return across >= 0 ? 'inward' : 'outward';
|
|
347
|
+
}
|
|
348
|
+
function blockedDoorMessage(keepout, item, facts) {
|
|
349
|
+
const { side, clearZone, reading } = facts;
|
|
350
|
+
const standing = 'overlapAreaM2' in reading
|
|
351
|
+
? `its shape covers ${metres(reading.overlapAreaM2)} m² of the door's clear zone`
|
|
352
|
+
: reading.overlapM > 0
|
|
353
|
+
? `its footprint stands ${metres(reading.overlapM)} m into the door's clear zone`
|
|
354
|
+
: `its footprint stands within the ${DOOR_KEEPOUT_MARGIN.toFixed(2)} m the check keeps clear of the door's clear zone`;
|
|
355
|
+
const { box, alongWallM, depthM } = clearZone;
|
|
356
|
+
const zone = `Clear zone: x ${metres(box.minX)}…${metres(box.maxX)}, z ${metres(box.minZ)}…${metres(box.maxZ)} (${alongWallM.toFixed(2)} m along the wall, ${depthM.inward.toFixed(2)} m deep inward and ${depthM.outward.toFixed(2)} m outward of the wall's centre line).`;
|
|
357
|
+
const clear = 'clearBy' in reading ? ` Clear of it: ${describeMoves(reading.clearBy)}.` : '';
|
|
358
|
+
const kind = keepout.doorType ? `${keepout.doorType}, ` : '';
|
|
359
|
+
return `Door ${keepout.doorId} (${kind}${keepout.width.toFixed(2)} m wide) on wall ${keepout.wallId} is blocked by item ${item.name} (${item.id}): ${standing}, on the ${side} side of the wall. ${zone}${clear}`;
|
|
360
|
+
}
|
|
361
|
+
function doorBlockReading(keepout, footprint, solidsAreaM2) {
|
|
362
|
+
if (solidsAreaM2 !== undefined)
|
|
363
|
+
return { overlapAreaM2: roundMm(solidsAreaM2) };
|
|
364
|
+
const shared = axisOverlap(footprint, keepout.aabb);
|
|
365
|
+
return {
|
|
366
|
+
overlapM: Math.max(0, roundMm(Math.min(shared.x, shared.z))),
|
|
367
|
+
clearBy: clearingMoves(footprint, keepout.aabb, DOOR_KEEPOUT_MARGIN),
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
/** A blocked door as the agent reads it: the item, how far it stands in the zone, the ways out, the zone. */
|
|
371
|
+
function blockedDoorIssue(keepout, node, footprint, levelId, solidsAreaM2) {
|
|
372
|
+
const name = node.name ?? node.asset?.name ?? node.id;
|
|
373
|
+
const item = { name: typeof name === 'string' ? name : node.id, id: node.id };
|
|
374
|
+
const facts = {
|
|
375
|
+
side: sideOfWall(keepout, footprint),
|
|
376
|
+
clearZone: clearZoneOf(keepout),
|
|
377
|
+
reading: doorBlockReading(keepout, footprint, solidsAreaM2),
|
|
378
|
+
};
|
|
379
|
+
return {
|
|
380
|
+
doorId: keepout.doorId,
|
|
381
|
+
wallId: keepout.wallId,
|
|
382
|
+
itemId: node.id,
|
|
383
|
+
levelId,
|
|
384
|
+
itemName: item.name,
|
|
385
|
+
footprint: roundBox(footprint),
|
|
386
|
+
message: blockedDoorMessage(keepout, item, facts),
|
|
387
|
+
...facts,
|
|
388
|
+
};
|
|
284
389
|
}
|
|
285
390
|
export function findBlockedDoors(args) {
|
|
286
391
|
const nodes = [...args.nodes];
|
|
@@ -307,27 +412,29 @@ export function findBlockedDoors(args) {
|
|
|
307
412
|
const aabb = itemPlanAabbInLevel(node, byId);
|
|
308
413
|
if (!aabb)
|
|
309
414
|
continue;
|
|
310
|
-
const heights = itemLevelHeightRange(node, byId);
|
|
311
|
-
|
|
415
|
+
const heights = args.heightsOf?.(node) ?? itemLevelHeightRange(node, byId);
|
|
416
|
+
const solids = args.solidsOf?.(node) ?? null;
|
|
417
|
+
const vehicle = isVehicle(node);
|
|
418
|
+
for (const full of keepouts) {
|
|
312
419
|
// Same-level only (multi-story safety).
|
|
313
|
-
if (
|
|
420
|
+
if (full.levelId && itemLevel && full.levelId !== itemLevel)
|
|
314
421
|
continue;
|
|
315
|
-
if (args.levelId &&
|
|
422
|
+
if (args.levelId && full.levelId && full.levelId !== args.levelId)
|
|
316
423
|
continue;
|
|
424
|
+
const keepout = (vehicle && full.vehicleAperture) || full;
|
|
317
425
|
if (!itemBlocksDoorKeepout(aabb, keepout))
|
|
318
426
|
continue;
|
|
319
|
-
|
|
320
|
-
if (
|
|
427
|
+
let solidsAreaM2;
|
|
428
|
+
if (solids) {
|
|
429
|
+
solidsAreaM2 = solidsKeepoutArea(solids, keepout);
|
|
430
|
+
if (solidsAreaM2 === 0)
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
else if (heights && heights.min >= keepout.height - 0.05) {
|
|
434
|
+
// A pendant over the doorway is above the leaf.
|
|
321
435
|
continue;
|
|
322
|
-
|
|
323
|
-
issues.push(
|
|
324
|
-
doorId: keepout.doorId,
|
|
325
|
-
wallId: keepout.wallId,
|
|
326
|
-
itemId: node.id,
|
|
327
|
-
levelId: itemLevel,
|
|
328
|
-
itemName: typeof itemName === 'string' ? itemName : undefined,
|
|
329
|
-
message: `Door ${keepout.doorId} on wall ${keepout.wallId} is blocked by item ${itemName} (${node.id})`,
|
|
330
|
-
});
|
|
436
|
+
}
|
|
437
|
+
issues.push(blockedDoorIssue(keepout, node, aabb, itemLevel, solidsAreaM2));
|
|
331
438
|
}
|
|
332
439
|
}
|
|
333
440
|
return issues;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WallNode } from '../schema/index.js';
|
|
2
|
+
import type { RoomWallFace } from './room-faces.js';
|
|
3
|
+
type Plan = [number, number];
|
|
4
|
+
/** What a layer is laid against: the plan corners of a fixture or a cabinet run, and the worktop of a run. */
|
|
5
|
+
export type DressTarget = {
|
|
6
|
+
id: string;
|
|
7
|
+
corners: Plan[];
|
|
8
|
+
worktop?: number;
|
|
9
|
+
};
|
|
10
|
+
/** How far a footprint's edge may stand from a face and still stand against it, metres. */
|
|
11
|
+
export declare const STANDS_AGAINST_M = 0.15;
|
|
12
|
+
/**
|
|
13
|
+
* The stretch of a face a target stands against, widened by `margin` and held to the stretch the room
|
|
14
|
+
* stands on, in metres along the wall; undefined when the target is not at the face. A target stands
|
|
15
|
+
* against a face when its nearest corner is within `STANDS_AGAINST_M` of the face's plane on the room's
|
|
16
|
+
* side. A curved face has no straight plane to measure: the caller skips it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function standsAgainst(wall: WallNode, stretch: RoomWallFace, corners: readonly Plan[], margin: number): {
|
|
19
|
+
u0: number;
|
|
20
|
+
u1: number;
|
|
21
|
+
} | undefined;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=dress-targets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dress-targets.d.ts","sourceRoot":"","sources":["../../src/agent-operations/dress-targets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE5B,8GAA8G;AAC9G,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3E,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAcpC;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,SAAS,IAAI,EAAE,EACxB,MAAM,EAAE,MAAM,GACb;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgBxC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getWallFaceOffsets } from '../systems/wall/wall-frame.js';
|
|
2
|
+
/** How far a footprint's edge may stand from a face and still stand against it, metres. */
|
|
3
|
+
export const STANDS_AGAINST_M = 0.15;
|
|
4
|
+
/** The slack a footprint may sink into a face before it stands behind it instead, metres. */
|
|
5
|
+
const SINK_M = 0.03;
|
|
6
|
+
const millimetre = (metres) => Math.round(metres * 1000) / 1000;
|
|
7
|
+
const aabbCorners = (box) => [
|
|
8
|
+
[box.minX, box.minZ],
|
|
9
|
+
[box.maxX, box.minZ],
|
|
10
|
+
[box.maxX, box.maxZ],
|
|
11
|
+
[box.minX, box.maxZ],
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* The stretch of a face a target stands against, widened by `margin` and held to the stretch the room
|
|
15
|
+
* stands on, in metres along the wall; undefined when the target is not at the face. A target stands
|
|
16
|
+
* against a face when its nearest corner is within `STANDS_AGAINST_M` of the face's plane on the room's
|
|
17
|
+
* side. A curved face has no straight plane to measure: the caller skips it.
|
|
18
|
+
*/
|
|
19
|
+
export function standsAgainst(wall, stretch, corners, margin) {
|
|
20
|
+
const length = stretch.length;
|
|
21
|
+
const dx = (wall.end[0] - wall.start[0]) / length;
|
|
22
|
+
const dz = (wall.end[1] - wall.start[1]) / length;
|
|
23
|
+
// Face a is on the left of start to end; both normals point into the room.
|
|
24
|
+
const sign = stretch.face === 'a' ? 1 : -1;
|
|
25
|
+
const plane = sign * getWallFaceOffsets(wall)[stretch.face];
|
|
26
|
+
const along = corners.map(([x, z]) => (x - wall.start[0]) * dx + (z - wall.start[1]) * dz);
|
|
27
|
+
const into = corners.map(([x, z]) => sign * (-(x - wall.start[0]) * dz + (z - wall.start[1]) * dx));
|
|
28
|
+
const gap = Math.min(...into) - plane;
|
|
29
|
+
if (gap > STANDS_AGAINST_M || gap < -SINK_M)
|
|
30
|
+
return undefined;
|
|
31
|
+
const u0 = Math.max(stretch.u0, millimetre(Math.min(...along) - margin));
|
|
32
|
+
const u1 = Math.min(stretch.u1, millimetre(Math.max(...along) + margin));
|
|
33
|
+
return u1 - u0 > 1e-6 ? { u0, u1 } : undefined;
|
|
34
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentOperation } from './types.js';
|
|
2
|
+
type DuplicateNodeInput = {
|
|
3
|
+
ids: string[];
|
|
4
|
+
offset?: number[];
|
|
5
|
+
targetLevelId?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* `duplicate_node`: the editor's Duplicate — the same clone its duplicate-without-move path
|
|
9
|
+
* makes (`collectSubtree` + `cloneNodesInto`), its clipboard's root rules, and its paste's
|
|
10
|
+
* host-reference remap, with the offset seated by the same plan as `move_node`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const duplicateNode: AgentOperation<DuplicateNodeInput>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=duplicate-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplicate-node.d.ts","sourceRoot":"","sources":["../../src/agent-operations/duplicate-node.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAA4B,MAAM,SAAS,CAAA;AAEvE,KAAK,kBAAkB,GAAG;IACxB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAyGD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,cAAc,CAAC,kBAAkB,CA6E5D,CAAA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { refuse } from '../agent-tools/refusal.js';
|
|
2
|
+
import { cloneNodesInto, collectSubtree } from '../registry/subtree.js';
|
|
3
|
+
import { isDerivedNode } from '../store/derived-node-guard.js';
|
|
4
|
+
import { achievedChanges } from './achieved.js';
|
|
5
|
+
import { planNodeMove } from './move-plan.js';
|
|
6
|
+
import { levelIdOf, levelsOf } from './scene-queries.js';
|
|
7
|
+
const DEDICATED_TOOL = {
|
|
8
|
+
level: 'duplicate_level',
|
|
9
|
+
zone: 'duplicate_zone',
|
|
10
|
+
roof: 'create_roof',
|
|
11
|
+
'roof-segment': 'create_roof',
|
|
12
|
+
};
|
|
13
|
+
// Kinds the editor does not copy node by node: scene structure with its own tools, plus the
|
|
14
|
+
// kinds whose definitions declare themselves not duplicable (a spawn is one per level).
|
|
15
|
+
const REFUSED_TYPES = new Set([
|
|
16
|
+
'site',
|
|
17
|
+
'building',
|
|
18
|
+
'level',
|
|
19
|
+
'zone',
|
|
20
|
+
'roof',
|
|
21
|
+
'roof-segment',
|
|
22
|
+
'guide',
|
|
23
|
+
'unit',
|
|
24
|
+
'floor-opening',
|
|
25
|
+
'stair-segment',
|
|
26
|
+
'separator',
|
|
27
|
+
'facade',
|
|
28
|
+
'scan',
|
|
29
|
+
'spawn',
|
|
30
|
+
]);
|
|
31
|
+
/** The parent classes the editor copies a root from, as its clipboard roots are decided. */
|
|
32
|
+
function requireCopyableRoot(nodes, node) {
|
|
33
|
+
if (isDerivedNode(node) || REFUSED_TYPES.has(node.type)) {
|
|
34
|
+
const dedicated = DEDICATED_TOOL[node.type];
|
|
35
|
+
refuse('duplicate_not_supported', `A ${node.type} is not copied node by node${dedicated ? `; use ${dedicated}` : ''}.`, { id: node.id, type: node.type });
|
|
36
|
+
}
|
|
37
|
+
const parent = node.parentId ? nodes[node.parentId] : undefined;
|
|
38
|
+
const hostedRoot = (parent?.type === 'wall' &&
|
|
39
|
+
(node.type === 'door' || node.type === 'window' || node.type === 'item')) ||
|
|
40
|
+
(parent?.type === 'ceiling' && node.type === 'item') ||
|
|
41
|
+
parent?.type === 'roof-segment';
|
|
42
|
+
if (parent?.type !== 'level' && !hostedRoot)
|
|
43
|
+
refuse('duplicate_root_invalid', `${node.type} ${node.id} is copied as part of its parent${parent ? ` (${parent.type} ${parent.id})` : ''}; name the parent instead.`, { id: node.id, type: node.type, parentId: node.parentId ?? null });
|
|
44
|
+
return parent;
|
|
45
|
+
}
|
|
46
|
+
function isDescendantOf(nodes, id, rootIds) {
|
|
47
|
+
let parentId = nodes[id]?.parentId;
|
|
48
|
+
while (parentId) {
|
|
49
|
+
if (rootIds.has(parentId))
|
|
50
|
+
return true;
|
|
51
|
+
parentId = nodes[parentId]?.parentId;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
/** Derived plates are rebuilt by the host's reconciler, as the editor's copy leaves them out. */
|
|
56
|
+
function withoutDerived(subtree) {
|
|
57
|
+
const pruned = new Set();
|
|
58
|
+
return subtree.filter((node, index) => {
|
|
59
|
+
// collectSubtree lists parents before children, so a pruned parent prunes its subtree.
|
|
60
|
+
if (index > 0 && (isDerivedNode(node) || (node.parentId && pruned.has(node.parentId)))) {
|
|
61
|
+
pruned.add(node.id);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** Host references inside the copied set point at the copies, as the editor's paste remaps them. */
|
|
68
|
+
function remapHostRefs(cloned, idMap) {
|
|
69
|
+
for (const node of cloned) {
|
|
70
|
+
const record = node;
|
|
71
|
+
for (const field of ['wallId', 'roofSegmentId']) {
|
|
72
|
+
const value = record[field];
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
const fresh = idMap.get(value);
|
|
75
|
+
if (fresh)
|
|
76
|
+
record[field] = fresh;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** A stair copied to another floor climbs from that floor, as the editor's paste re-aims it. */
|
|
82
|
+
function reaimStairs(nodes, cloned, targetLevelId) {
|
|
83
|
+
if (!targetLevelId)
|
|
84
|
+
return;
|
|
85
|
+
const target = nodes[targetLevelId];
|
|
86
|
+
if (target?.type !== 'level')
|
|
87
|
+
return;
|
|
88
|
+
const next = levelsOf(nodes).find((level) => level.parentId === target.parentId && level.level > target.level);
|
|
89
|
+
for (const node of cloned) {
|
|
90
|
+
if (node.type !== 'stair')
|
|
91
|
+
continue;
|
|
92
|
+
const stair = node;
|
|
93
|
+
stair.fromLevelId = targetLevelId;
|
|
94
|
+
stair.toLevelId = next?.id ?? null;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* `duplicate_node`: the editor's Duplicate — the same clone its duplicate-without-move path
|
|
99
|
+
* makes (`collectSubtree` + `cloneNodesInto`), its clipboard's root rules, and its paste's
|
|
100
|
+
* host-reference remap, with the offset seated by the same plan as `move_node`.
|
|
101
|
+
*/
|
|
102
|
+
export const duplicateNode = (nodes, input) => {
|
|
103
|
+
const targetLevel = input.targetLevelId ? nodes[input.targetLevelId] : undefined;
|
|
104
|
+
if (input.targetLevelId && targetLevel?.type !== 'level')
|
|
105
|
+
refuse('level_not_found', `Level not found: ${input.targetLevelId}.`, {
|
|
106
|
+
levelId: input.targetLevelId,
|
|
107
|
+
});
|
|
108
|
+
const requested = [...new Set(input.ids)];
|
|
109
|
+
for (const id of requested) {
|
|
110
|
+
if (!nodes[id])
|
|
111
|
+
refuse('node_not_found', `Node not found: ${id}.`, { id });
|
|
112
|
+
}
|
|
113
|
+
const roots = [];
|
|
114
|
+
const skippedIds = [];
|
|
115
|
+
for (const id of requested) {
|
|
116
|
+
const node = nodes[id];
|
|
117
|
+
const parent = requireCopyableRoot(nodes, node);
|
|
118
|
+
if (isDescendantOf(nodes, id, new Set(requested.filter((other) => other !== id)))) {
|
|
119
|
+
skippedIds.push(id);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (targetLevel && parent?.type !== 'level' && levelIdOf(nodes, id) !== targetLevel.id)
|
|
123
|
+
refuse('hosted_root_level', `${node.type} ${id} is hosted on ${parent?.type} ${parent?.id} on another level; copy its host, or copy it without targetLevelId.`, { id, hostId: parent?.id ?? null, targetLevelId: targetLevel.id });
|
|
124
|
+
roots.push(node);
|
|
125
|
+
}
|
|
126
|
+
const clonedAll = [];
|
|
127
|
+
const idMap = new Map();
|
|
128
|
+
const copies = [];
|
|
129
|
+
for (const root of roots) {
|
|
130
|
+
const subtree = collectSubtree(nodes, root.id);
|
|
131
|
+
if (!subtree)
|
|
132
|
+
refuse('node_not_found', `Node not found: ${root.id}.`, { id: root.id });
|
|
133
|
+
const members = withoutDerived([subtree.root, ...subtree.descendants]);
|
|
134
|
+
const parentId = (targetLevel && nodes[root.parentId ?? '']?.type === 'level' ? targetLevel.id : root.parentId);
|
|
135
|
+
const cloned = cloneNodesInto(members, { rootId: root.id, parentId });
|
|
136
|
+
for (const [source, fresh] of cloned.idMap)
|
|
137
|
+
idMap.set(source, fresh);
|
|
138
|
+
clonedAll.push(...cloned.nodes);
|
|
139
|
+
copies.push({
|
|
140
|
+
sourceId: root.id,
|
|
141
|
+
copyId: cloned.rootId,
|
|
142
|
+
type: root.type,
|
|
143
|
+
descendantCount: cloned.nodes.length - 1,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
remapHostRefs(clonedAll, idMap);
|
|
147
|
+
reaimStairs(nodes, clonedAll, input.targetLevelId);
|
|
148
|
+
const offset = input.offset ?? [0, 0];
|
|
149
|
+
if (offset[0] || offset[1]) {
|
|
150
|
+
const withClones = { ...nodes };
|
|
151
|
+
for (const node of clonedAll)
|
|
152
|
+
withClones[node.id] = node;
|
|
153
|
+
for (const copy of copies) {
|
|
154
|
+
const clone = withClones[copy.copyId];
|
|
155
|
+
const plan = planNodeMove(withClones, clone, { by: offset }, { checkOverlap: false });
|
|
156
|
+
Object.assign(clone, plan.data);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const changes = {
|
|
160
|
+
create: clonedAll.map((node) => ({ node, parentId: node.parentId ?? undefined })),
|
|
161
|
+
};
|
|
162
|
+
return {
|
|
163
|
+
result: {
|
|
164
|
+
ok: true,
|
|
165
|
+
copies,
|
|
166
|
+
totalCreated: clonedAll.length,
|
|
167
|
+
skippedIds,
|
|
168
|
+
message: `Duplicated ${copies.length} node${copies.length === 1 ? '' : 's'} (${clonedAll.length} created)`,
|
|
169
|
+
achieved: achievedChanges(nodes, changes),
|
|
170
|
+
},
|
|
171
|
+
changes,
|
|
172
|
+
};
|
|
173
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-by-type.d.ts","sourceRoot":"","sources":["../../src/agent-operations/find-by-type.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAgB,cAAc,EAAc,MAAM,SAAS,CAAA;AAIvE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;
|
|
1
|
+
{"version":3,"file":"find-by-type.d.ts","sourceRoot":"","sources":["../../src/agent-operations/find-by-type.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAgB,cAAc,EAAc,MAAM,SAAS,CAAA;AAIvE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAuPD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,CAAC,eAAe,CAmGtD,CAAA"}
|
|
@@ -211,6 +211,7 @@ function namesAnything(nodes, names, { nodeSchema }) {
|
|
|
211
211
|
const known = (name) => CORE_KINDS.has(name) || registered.includes(name) || Boolean(nodeSchema?.(name));
|
|
212
212
|
if ([...names].some(known))
|
|
213
213
|
return true;
|
|
214
|
+
// biome-ignore lint/plugin: a type word may name any node's kind, category or part
|
|
214
215
|
return Object.values(nodes).some((node) => names.has(kindOf(node)) ||
|
|
215
216
|
(node.type === 'item' &&
|
|
216
217
|
[...names].some((name) => matchesWord(node.asset?.category, name))) ||
|
|
@@ -240,6 +241,7 @@ export const findByType = (nodes, input, context) => {
|
|
|
240
241
|
? undefined
|
|
241
242
|
: new Set([kind, kind.includes(':') ? kind : kind.replace(/s$/, '')]);
|
|
242
243
|
const results = [];
|
|
244
|
+
// biome-ignore lint/plugin: any node, or any typed part of an authored object, may match
|
|
243
245
|
for (const node of Object.values(nodes)) {
|
|
244
246
|
if (parentId && node.parentId !== parentId)
|
|
245
247
|
continue;
|
|
@@ -294,6 +296,7 @@ export const findByType = (nodes, input, context) => {
|
|
|
294
296
|
results.push(...(inZone ? inZone(node, level, matched) : matched).map(({ found }) => found));
|
|
295
297
|
}
|
|
296
298
|
if (names && results.length === 0 && !namesAnything(nodes, names, context)) {
|
|
299
|
+
// biome-ignore lint/plugin: the refusal lists every kind the scene holds
|
|
297
300
|
const kinds = [...new Set(Object.values(nodes).map(kindOf))].sort();
|
|
298
301
|
refuse('unknown_type', `"${kind}" names nothing find_by_type reads: no node kind (core's or a plugin's this host knows), and no item category or part type in this scene. Kinds in this scene: ${kinds.join(', ')}.`, { type: kind, kinds });
|
|
299
302
|
}
|
|
@@ -9,6 +9,8 @@ type FurnishRoomInput = LevelTargetInput & {
|
|
|
9
9
|
roomType: RoomType;
|
|
10
10
|
doorWallIndex?: number;
|
|
11
11
|
};
|
|
12
|
+
/** Every catalog id a room type's set may take, whatever the room's size: what a host reads first. */
|
|
13
|
+
export declare const FURNISH_ROOM_ASSETS: Readonly<Record<RoomType, readonly string[]>>;
|
|
12
14
|
export declare const WALL_GAP = 0.1;
|
|
13
15
|
/** The room asked for: a zone's level and outline, or a polygon on the level named. */
|
|
14
16
|
export declare function roomToFurnish(nodes: SceneNodes, input: LevelTargetInput & Pick<FurnishRoomInput, 'zoneId' | 'polygon'>, context: AgentContext): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"furnish-room.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furnish-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAsBvE,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAA8B,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvE,KAAK,QAAQ,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,KAAK,gBAAgB,GAAG,gBAAgB,GAAG;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAKD,eAAO,MAAM,QAAQ,MAAM,CAAA;AAQ3B,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,EACtE,OAAO,EAAE,YAAY;;aAkBwB,IAAI,EAAE;EAKpD;
|
|
1
|
+
{"version":3,"file":"furnish-room.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furnish-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAsBvE,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAA8B,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvE,KAAK,QAAQ,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,KAAK,gBAAgB,GAAG,gBAAgB,GAAG;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC,CAU7E,CAAA;AAKD,eAAO,MAAM,QAAQ,MAAM,CAAA;AAQ3B,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,EACtE,OAAO,EAAE,YAAY;;aAkBwB,IAAI,EAAE;EAKpD;AA0BD,sGAAsG;AACtG,wBAAgB,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;;;;;;;;;;;;EAWrE;AA0KD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,gBAAgB,CAuGxD,CAAA"}
|
|
@@ -7,7 +7,19 @@ import { furnitureKind } from './furniture-kind.js';
|
|
|
7
7
|
import { collectOccupiedFootprints, findValidPlacement, lateralSteps, MID_ROOM_DISTANCE_M, PLACEMENT_INSETS_M, wallFacesOn, } from './layout-clearance.js';
|
|
8
8
|
import { targetLevel } from './level-target.js';
|
|
9
9
|
import { polygonArea, polygonBounds } from './plan-geometry.js';
|
|
10
|
-
import { levelIdOf, levelRole } from './scene-queries.js';
|
|
10
|
+
import { levelIdOf, levelRole, queryNodes } from './scene-queries.js';
|
|
11
|
+
/** Every catalog id a room type's set may take, whatever the room's size: what a host reads first. */
|
|
12
|
+
export const FURNISH_ROOM_ASSETS = {
|
|
13
|
+
bedroom: ['double-bed', 'single-bed', 'bedside-table', 'dresser', 'closet'],
|
|
14
|
+
kitchen: ['kitchen', 'kitchen-counter', 'stove', 'fridge'],
|
|
15
|
+
bathroom: ['toilet', 'bathroom-sink', 'bathtub', 'shower-square'],
|
|
16
|
+
living: ['sofa', 'coffee-table', 'livingroom-chair', 'tv-stand'],
|
|
17
|
+
dining: ['dining-table', 'dining-chair'],
|
|
18
|
+
hallway: ['coat-rack'],
|
|
19
|
+
entry: ['coat-rack'],
|
|
20
|
+
laundry: ['washing-machine', 'drying-rack'],
|
|
21
|
+
storage: ['closet'],
|
|
22
|
+
};
|
|
11
23
|
// A door belongs to a room edge when it stands this close to the edge's line, within its span.
|
|
12
24
|
const DOOR_EDGE_TOLERANCE = 0.25;
|
|
13
25
|
// Clearance between a piece's back and the wall's centreline: half a wall and a hand's width.
|
|
@@ -36,9 +48,7 @@ export function roomToFurnish(nodes, input, context) {
|
|
|
36
48
|
/** The doors of the level that stand on an edge of the room, by where they stand. */
|
|
37
49
|
function doorsOfRoom(nodes, levelId, polygon) {
|
|
38
50
|
const found = [];
|
|
39
|
-
for (const wall of
|
|
40
|
-
if (wall.type !== 'wall' || wall.parentId !== levelId)
|
|
41
|
-
continue;
|
|
51
|
+
for (const wall of queryNodes(nodes, { type: 'wall', parentId: levelId })) {
|
|
42
52
|
const length = Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
|
|
43
53
|
if (length < 1e-9)
|
|
44
54
|
continue;
|
|
@@ -222,6 +232,7 @@ export const furnishRoom = (nodes, input, context) => {
|
|
|
222
232
|
refuse('edge_out_of_range', `The room has ${polygon.length} edges (0–${polygon.length - 1}); there is no edge ${input.doorWallIndex}.`);
|
|
223
233
|
const doors = doorsOfRoom(nodes, levelId, polygon);
|
|
224
234
|
const doorWall = input.doorWallIndex ?? doors[0]?.edge ?? 0;
|
|
235
|
+
// biome-ignore lint/plugin: door keep-outs and occupied footprints resolve each item through its parents
|
|
225
236
|
const all = Object.values(nodes);
|
|
226
237
|
const doorKeepouts = collectDoorKeepouts(all, { levelId });
|
|
227
238
|
const keepouts = doorKeepouts.map((door) => door.aabb);
|
|
@@ -5,14 +5,41 @@ type Named = {
|
|
|
5
5
|
id: string;
|
|
6
6
|
name?: string | undefined;
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* A car, a ute: filed as a vehicle, or named as one when nothing is filed. What stands in a garage
|
|
10
|
+
* to be driven out of it, so the garage door's opening is its way and not a thing it obstructs.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isVehicle(item: ItemNode): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Only a flat floor covering is nonblocking, never an arbitrary short solid or low top surface. It is
|
|
15
|
+
* a rug by what it is filed under (its category: "rug", "rugs", "tapis"), else by what it is called
|
|
16
|
+
* in English or French, and in both cases it must lie flat on the floor.
|
|
17
|
+
*/
|
|
9
18
|
export declare function isFloorUnderlay(item: ItemNode): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Wall panelling and trim are the wall's own surface: an item filed under them is read by its strips
|
|
21
|
+
* (its box is the room's) in a collision and in a door's clearance. A piece beside it keeps the gap
|
|
22
|
+
* it keeps from anything else.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isWallDressing(item: ItemNode): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether two items are designed to stand together, a few centimetres apart: a nightstand beside a
|
|
27
|
+
* bed, a chair or stool at a desk or table, a sofa beside a side table. Such a pair being close is
|
|
28
|
+
* the design, not a finding; two of them overlapping is still one. Read from what each is filed
|
|
29
|
+
* under (its category), by its words only where the category says nothing.
|
|
30
|
+
*/
|
|
31
|
+
export declare function designedTogether(a: ItemNode, b: ItemNode): boolean;
|
|
10
32
|
/**
|
|
11
33
|
* Wall-bound pieces (a fridge, a counter, a bed, a sofa) stand against a wall and never in the
|
|
12
34
|
* middle of a room; free-standing ones (a dining table, a rug, a plant) may take the middle; a chair
|
|
13
35
|
* is placed around its table. A name the table does not know is free-standing.
|
|
14
36
|
*/
|
|
15
37
|
export declare function furnitureKind(asset: Named): FurnitureKind;
|
|
38
|
+
/**
|
|
39
|
+
* The word that makes a piece wall-bound ("fridge", "counter"), for a piece that is judged to stand
|
|
40
|
+
* against a wall; null for every other piece, a sofa or stools that float by design included.
|
|
41
|
+
*/
|
|
42
|
+
export declare function wallBoundWord(asset: Named): string | null;
|
|
16
43
|
/**
|
|
17
44
|
* What a piece faces when it does not stand against a wall, as a pattern for the name of the item
|
|
18
45
|
* it belongs with: the coffee table and the TV face the sofa, a chair faces its table.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"furniture-kind.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furniture-kind.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"furniture-kind.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furniture-kind.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,QAAQ,EAAuC,MAAM,WAAW,CAAA;AAEnG,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAErD,KAAK,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AA0BtD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAIjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAgCvD;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEtD;AAsDD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAMlE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQzD;AAKD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAMpD"}
|