@pascal-app/core 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +411 -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 +13804 -10600
- 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 +37 -1
- 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 +1163 -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 +5881 -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 +39 -3
- 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 +259 -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 +2525 -1723
- 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 +59 -13
- 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 +5 -7
- 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 +181 -35
- 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 +4667 -3065
- 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 +5 -3
- 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 +134 -12
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +182 -41
- 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 +889 -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 +2897 -1938
- 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 -25
- 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 +62 -2
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
- 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 +43 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -19
- package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +1629 -828
- 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-mode.d.ts +11 -0
- package/dist/lib/build-mode.d.ts.map +1 -0
- package/dist/lib/build-mode.js +24 -0
- 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 +207 -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-interaction.d.ts +14 -0
- package/dist/lib/door-interaction.d.ts.map +1 -0
- package/dist/lib/door-interaction.js +62 -0
- 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/elevator-support.d.ts +15 -0
- package/dist/lib/elevator-support.d.ts.map +1 -0
- package/dist/lib/elevator-support.js +40 -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 +66 -39
- 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/hierarchy.d.ts +19 -0
- package/dist/lib/hierarchy.d.ts.map +1 -0
- package/dist/lib/hierarchy.js +53 -0
- 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 +40 -8
- 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/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +2 -2
- 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/polygon-boolean.d.ts.map +1 -1
- package/dist/lib/polygon-boolean.js +2 -1
- 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-elevation.d.ts +12 -0
- package/dist/lib/room-floor-elevation.d.ts.map +1 -0
- package/dist/lib/room-floor-elevation.js +41 -0
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +1 -1
- 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 +113 -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 +8 -5
- package/dist/lib/window-interaction.d.ts +16 -0
- package/dist/lib/window-interaction.d.ts.map +1 -0
- package/dist/lib/window-interaction.js +82 -0
- package/dist/lib/zone-quantities.js +1 -1
- 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/column.d.ts +5 -0
- package/dist/node-slots/column.d.ts.map +1 -1
- package/dist/node-slots/column.js +10 -0
- 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 +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -2
- 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/registry.d.ts +5 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +10 -0
- package/dist/registry/types.d.ts +89 -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-resize.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-resize.js +2 -2
- package/dist/schema/nodes/roof-segment.d.ts +226 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +97 -12
- 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 +136 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +48 -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 +1080 -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/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/movement.d.ts +7 -0
- package/dist/services/movement.d.ts.map +1 -1
- package/dist/services/movement.js +13 -0
- package/dist/services/port-connectivity.d.ts +15 -6
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +83 -17
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +8 -4
- 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 +6 -1
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +24 -10
- 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 +847 -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 +1059 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +180 -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 +1467 -664
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +65 -21
- 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 +33 -12
- 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 +5409 -3807
- 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-geometry.d.ts +25 -0
- package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-geometry.js +40 -8
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +4 -35
- 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/elevator/elevator-runtime.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-runtime.js +95 -18
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +24 -4
- 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 +87 -5
- 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 +2714 -1481
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
- 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 +1630 -829
- 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-curve.d.ts +10 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +38 -0
- 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-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-merge.d.ts +9 -1
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +66 -13
- 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 +11 -4
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +28 -7
- 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 +137 -11
- 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 +4663 -3061
- 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 +3372 -2571
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/measurement-format.d.ts +27 -0
- package/dist/utils/measurement-format.d.ts.map +1 -0
- package/dist/utils/measurement-format.js +143 -0
- package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
- 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/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +3 -1
- 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
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { getRoofSegmentDeckReach, getSegmentSlopeFrame, } from '../schema/nodes/roof-segment.js';
|
|
2
|
+
import { LUMBER_DEPTH } from './build-up.js';
|
|
3
|
+
const inches = (value) => value * 0.0254;
|
|
4
|
+
/** A 1x board's actual thickness: every fascia and rake board is nominal 1x. */
|
|
5
|
+
export const FASCIA_THICKNESS = inches(0.75);
|
|
6
|
+
/** How far a fascia or rake board drops below the tails' lowest point, past a soffit's edge. */
|
|
7
|
+
export const FASCIA_DROP = inches(0.75);
|
|
8
|
+
/** The least it drops where a 1x then needs no ripping. */
|
|
9
|
+
const FASCIA_DROP_MIN = inches(0.25);
|
|
10
|
+
/** The run of a plumb-and-level tail's level cut: a 2x4's width for the soffit's edge to nail to. */
|
|
11
|
+
export const LEVEL_CUT_RUN = inches(3.5);
|
|
12
|
+
/** A boxed eave's soffit: a 1/2 in panel nailed up to the level cuts. */
|
|
13
|
+
export const SOFFIT_THICKNESS = inches(0.5);
|
|
14
|
+
/** The sheathing a plane without layers is taken to carry over its tails: Bones' 7/16 in. */
|
|
15
|
+
const BARE_SHEATHING = inches(7 / 16);
|
|
16
|
+
/** The 1x boards a fascia or rake board is cut from, narrowest first, at their actual widths. */
|
|
17
|
+
export const FASCIA_STOCK = [
|
|
18
|
+
{ size: '1x6', width: inches(5.5) },
|
|
19
|
+
{ size: '1x8', width: inches(7.25) },
|
|
20
|
+
{ size: '1x10', width: inches(9.25) },
|
|
21
|
+
{ size: '1x12', width: inches(11.25) },
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* The 1x a board `width` wide is cut from: the narrowest stock as wide, ripped down to it when
|
|
25
|
+
* wider. Past a 1x12 no 1x is wide enough: a ripped width of wider stock (`stock` null).
|
|
26
|
+
*/
|
|
27
|
+
export function fasciaStockFor(width) {
|
|
28
|
+
const stock = FASCIA_STOCK.find((candidate) => candidate.width >= width - 1e-4);
|
|
29
|
+
if (!stock)
|
|
30
|
+
return { stock: null, ripped: true };
|
|
31
|
+
return { stock: stock.size, ripped: stock.width - width > 1e-3 };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* How wide a board covering `cover` is, `scale` its width per unit of the cover's measure (a rake
|
|
35
|
+
* board's, its plumb depth's cosine): `FASCIA_DROP` past it, or a 1x whole where one drops between
|
|
36
|
+
* `least` and that, so the board is stock, not ripped.
|
|
37
|
+
*/
|
|
38
|
+
function boardWidth(cover, scale = 1, least = FASCIA_DROP_MIN) {
|
|
39
|
+
const whole = FASCIA_STOCK.find(({ width }) => width >= (cover + least) * scale - 1e-6 && width <= (cover + FASCIA_DROP) * scale + 1e-6);
|
|
40
|
+
return whole ? whole.width : (cover + FASCIA_DROP) * scale;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* An eave cut to its plane's rule. The tails reach `reach` out from the plate line along the
|
|
44
|
+
* sheathing's top, the deck's full depth under it:
|
|
45
|
+
* - plumb: the tails cut plumb there; a plumb 1x fascia covers their face, its top flush with the
|
|
46
|
+
* sheathing's top (under the drip edge), its bottom about `FASCIA_DROP` below their lowest point;
|
|
47
|
+
* - square: the tails cut square to the slope through the sheathing's outer edge, the fascia square
|
|
48
|
+
* to the slope on them, its top face in the sheathing's plane;
|
|
49
|
+
* - plumb-level: the plumb cut, and under it a level cut `LEVEL_CUT_RUN` long (at most half the tail's
|
|
50
|
+
* plumb depth deep) that a soffit nails up to, run level from the fascia's back to the wall.
|
|
51
|
+
* The fascia is as deep as that takes (a whole 1x where one drops at least 1/4 in under the tails,
|
|
52
|
+
* else one ripped to it), unless the plane sets its own.
|
|
53
|
+
*/
|
|
54
|
+
export function roofEaveProfile(input) {
|
|
55
|
+
const tan = Number.isFinite(input.tan) ? input.tan : 0;
|
|
56
|
+
const cos = 1 / Math.hypot(1, tan);
|
|
57
|
+
const sin = tan * cos;
|
|
58
|
+
const { reach, wallOut, tailLift } = input;
|
|
59
|
+
const deck = Math.max(0, input.deckDepth);
|
|
60
|
+
const top = (s) => deck / cos - s * tan;
|
|
61
|
+
const under = (s) => tailLift - s * tan;
|
|
62
|
+
const thickness = input.fasciaThickness ?? FASCIA_THICKNESS;
|
|
63
|
+
const cut = tan > 1e-6 ? (input.cut ?? 'plumb') : 'plumb';
|
|
64
|
+
const corner = [reach, top(reach)];
|
|
65
|
+
let end;
|
|
66
|
+
let low;
|
|
67
|
+
let height;
|
|
68
|
+
let corners;
|
|
69
|
+
let soffit = null;
|
|
70
|
+
if (cut === 'square') {
|
|
71
|
+
// the sheathing's top to the tails' underside, square to the slope
|
|
72
|
+
const depth = deck - tailLift * cos;
|
|
73
|
+
height = input.fasciaHeight ?? boardWidth(depth);
|
|
74
|
+
const down = (d) => [reach - d * sin, corner[1] - d * cos];
|
|
75
|
+
const out = (point) => [
|
|
76
|
+
point[0] + thickness * cos,
|
|
77
|
+
point[1] - thickness * sin,
|
|
78
|
+
];
|
|
79
|
+
const foot = down(depth);
|
|
80
|
+
end = [corner, foot];
|
|
81
|
+
low = foot[1];
|
|
82
|
+
const bottom = down(height);
|
|
83
|
+
corners = [corner, out(corner), out(bottom), bottom];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
let foot = under(reach);
|
|
87
|
+
if (cut === 'plumb-level') {
|
|
88
|
+
const run = Math.min(LEVEL_CUT_RUN, input.tailDepth / cos / (2 * tan));
|
|
89
|
+
foot = under(reach) + run * tan;
|
|
90
|
+
end = [corner, [reach, foot], [reach - run, foot]];
|
|
91
|
+
soffit = { y: foot, thickness: SOFFIT_THICKNESS, from: wallOut, to: reach };
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
end = [corner, [reach, foot]];
|
|
95
|
+
low = foot;
|
|
96
|
+
const topY = corner[1] + (input.fasciaRise ?? 0);
|
|
97
|
+
// past a boxed eave's soffit, the fascia drops its whole 3/4 in under the level cuts
|
|
98
|
+
height =
|
|
99
|
+
input.fasciaHeight ??
|
|
100
|
+
boardWidth(topY - foot, 1, cut === 'plumb-level' ? SOFFIT_THICKNESS + FASCIA_DROP_MIN : FASCIA_DROP_MIN);
|
|
101
|
+
corners = [
|
|
102
|
+
[reach, topY],
|
|
103
|
+
[reach + thickness, topY],
|
|
104
|
+
[reach + thickness, topY - height],
|
|
105
|
+
[reach, topY - height],
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
// A rake board meets the eave's fascia flush at the corner: as deep at its foot (plumb, or square
|
|
109
|
+
// along the cut), so neither hangs past the other. Over a boxed eave it covers the barge whole,
|
|
110
|
+
// held level with the fascia's bottom at the corner.
|
|
111
|
+
const rakeHeight = input.fasciaHeight ??
|
|
112
|
+
(cut === 'plumb'
|
|
113
|
+
? height
|
|
114
|
+
: cut === 'square'
|
|
115
|
+
? height / cos
|
|
116
|
+
: boardWidth(deck / cos - tailLift, cos) / cos);
|
|
117
|
+
return {
|
|
118
|
+
cut,
|
|
119
|
+
tan,
|
|
120
|
+
cos,
|
|
121
|
+
sin,
|
|
122
|
+
reach,
|
|
123
|
+
wallOut,
|
|
124
|
+
top,
|
|
125
|
+
under,
|
|
126
|
+
end,
|
|
127
|
+
low,
|
|
128
|
+
fascia: {
|
|
129
|
+
corners,
|
|
130
|
+
height,
|
|
131
|
+
thickness,
|
|
132
|
+
square: cut === 'square',
|
|
133
|
+
...fasciaStockFor(height),
|
|
134
|
+
},
|
|
135
|
+
soffit,
|
|
136
|
+
rake: { height: rakeHeight, width: rakeHeight * cos, ...fasciaStockFor(rakeHeight * cos) },
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Whether a point of an eave's section, out past the wall's outer face, lies in the shell's eave
|
|
141
|
+
* (`tolerance` either way): under the sheathing's top, inside the tails' end cut, and over their
|
|
142
|
+
* underside or a boxed eave's soffit.
|
|
143
|
+
*/
|
|
144
|
+
export function eaveContains(profile, [s, y], tolerance = 0) {
|
|
145
|
+
const { reach, cut, cos, sin, top, under, soffit } = profile;
|
|
146
|
+
if (y > top(s) + tolerance || s > reach + tolerance)
|
|
147
|
+
return false;
|
|
148
|
+
const [cs, cy] = profile.end[0];
|
|
149
|
+
if (cut === 'square' && (s - cs) * cos - (y - cy) * sin > tolerance)
|
|
150
|
+
return false;
|
|
151
|
+
// a boxed eave stands on its soffit: under it the deck is cut away
|
|
152
|
+
const floor = soffit ? soffit.y - soffit.thickness : under(s);
|
|
153
|
+
return y >= floor - tolerance;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The numbers a roof plane's eaves are cut from (`roofEaveProfile`): its reach and wall, its layers'
|
|
157
|
+
* structure and deck, its eave cut and fascia. Its rafters sit on the plate; a truss's top chord on
|
|
158
|
+
* its bottom chord at the heel. A plane without layers is taken as rafters under a 7/16 in sheet,
|
|
159
|
+
* as deep as its deck. `high`: a shed's high edge, rising outward, cut plumb.
|
|
160
|
+
*/
|
|
161
|
+
export function roofSegmentEaveInput(node, edge = 'eave') {
|
|
162
|
+
const { tanTheta } = getSegmentSlopeFrame(node);
|
|
163
|
+
const deck = Math.max(0, node.deckThickness);
|
|
164
|
+
const structure = node.buildUp?.structure;
|
|
165
|
+
const chord = structure ? LUMBER_DEPTH[structure.size] : 0;
|
|
166
|
+
const tailDepth = structure ? chord : Math.max(0, deck - Math.min(BARE_SHEATHING, deck / 2));
|
|
167
|
+
return {
|
|
168
|
+
tan: edge === 'high' ? -tanTheta : tanTheta,
|
|
169
|
+
reach: getRoofSegmentDeckReach(node).z,
|
|
170
|
+
wallOut: Math.max(0, node.wallThickness) / 2,
|
|
171
|
+
tailDepth,
|
|
172
|
+
tailLift: structure?.system === 'trusses' ? chord : 0,
|
|
173
|
+
deckDepth: deck,
|
|
174
|
+
cut: edge === 'high' ? 'plumb' : (node.eaveCut ?? 'plumb'),
|
|
175
|
+
...(node.fasciaHeight !== undefined ? { fasciaHeight: node.fasciaHeight } : {}),
|
|
176
|
+
...(node.fasciaDepth !== undefined ? { fasciaThickness: node.fasciaDepth } : {}),
|
|
177
|
+
// a flat roof's boards sized on purpose rise over its membrane's edge: a coping band
|
|
178
|
+
...(node.roofType === 'flat' && node.fasciaHeight !== undefined
|
|
179
|
+
? { fasciaRise: Math.max(0, node.shingleThickness ?? 0) }
|
|
180
|
+
: {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/** A roof plane's eave (`roofSegmentEaveInput`, `roofEaveProfile`). */
|
|
184
|
+
export function roofSegmentEaveProfile(node, edge = 'eave') {
|
|
185
|
+
return roofEaveProfile(roofSegmentEaveInput(node, edge));
|
|
186
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AnyNode, SlabNode } from '../schema/index.js';
|
|
2
|
+
type Nodes = Readonly<Record<string, AnyNode>>;
|
|
3
|
+
/** The level's footprints, largest first (ties by id, so the order is stable). */
|
|
4
|
+
export declare function levelFootprints(nodes: Record<string, AnyNode>, levelId: string): SlabNode[];
|
|
5
|
+
/** A room's separate base plate, only when no other ground room shares it. */
|
|
6
|
+
export declare function roomOwnPlate(nodes: Nodes, zoneId: string): SlabNode | null;
|
|
7
|
+
/** The walking surface of a room: its own elevation, else its plate's. */
|
|
8
|
+
export declare function roomFloorElevation(nodes: Nodes, zoneId: string): number;
|
|
9
|
+
/** The walking surface of a room the separator closes, else zero. */
|
|
10
|
+
export declare function separatorFloorElevation(nodes: Nodes, separatorId: string): number;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=room-floor-elevation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-floor-elevation.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-elevation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAY,MAAM,WAAW,CAAA;AAG5D,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAK9C,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAW3F;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAW1E;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAUvE;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKjF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { area } from './polygon-boolean.js';
|
|
2
|
+
const isRoom = (node) => node?.type === 'zone' && node.spaceRole === 'room';
|
|
3
|
+
const isGroundRoom = (node) => isRoom(node) && node.floor?.support !== 'open';
|
|
4
|
+
/** The level's footprints, largest first (ties by id, so the order is stable). */
|
|
5
|
+
export function levelFootprints(nodes, levelId) {
|
|
6
|
+
return Object.values(nodes)
|
|
7
|
+
.filter((node) => node.type === 'slab' && node.plateRole === 'base' && node.parentId === levelId)
|
|
8
|
+
.sort((a, b) => area([{ outer: b.polygon, holes: b.holes }]) -
|
|
9
|
+
area([{ outer: a.polygon, holes: a.holes }]) || a.id.localeCompare(b.id));
|
|
10
|
+
}
|
|
11
|
+
/** A room's separate base plate, only when no other ground room shares it. */
|
|
12
|
+
export function roomOwnPlate(nodes, zoneId) {
|
|
13
|
+
const zone = nodes[zoneId];
|
|
14
|
+
if (!isRoom(zone) || !zone.floor?.footprint || zone.floor.support === 'open')
|
|
15
|
+
return null;
|
|
16
|
+
const plate = zone.parentId
|
|
17
|
+
? levelFootprints(nodes, zone.parentId).find((plate) => plate.zoneIds?.includes(zoneId))
|
|
18
|
+
: null;
|
|
19
|
+
if (!plate)
|
|
20
|
+
return null;
|
|
21
|
+
const alone = !(plate.zoneIds ?? []).some((id) => id !== zoneId && isGroundRoom(nodes[id]));
|
|
22
|
+
return alone ? plate : null;
|
|
23
|
+
}
|
|
24
|
+
/** The walking surface of a room: its own elevation, else its plate's. */
|
|
25
|
+
export function roomFloorElevation(nodes, zoneId) {
|
|
26
|
+
const zone = nodes[zoneId];
|
|
27
|
+
if (zone?.type !== 'zone')
|
|
28
|
+
return 0;
|
|
29
|
+
const own = roomOwnPlate(nodes, zoneId);
|
|
30
|
+
if (own)
|
|
31
|
+
return own.elevation;
|
|
32
|
+
if (typeof zone.floor?.elevation === 'number')
|
|
33
|
+
return zone.floor.elevation;
|
|
34
|
+
const plate = Object.values(nodes).find((node) => node.type === 'slab' && node.zoneIds?.includes(zoneId));
|
|
35
|
+
return plate?.type === 'slab' ? (plate.elevation ?? 0.05) : 0.05;
|
|
36
|
+
}
|
|
37
|
+
/** The walking surface of a room the separator closes, else zero. */
|
|
38
|
+
export function separatorFloorElevation(nodes, separatorId) {
|
|
39
|
+
const zone = Object.values(nodes).find((node) => node.type === 'zone' && node.boundarySeparatorIds.includes(separatorId));
|
|
40
|
+
return zone ? roomFloorElevation(nodes, zone.id) : 0;
|
|
41
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-floor-feasibility.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-feasibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,WAAW,CAAA;AAC5D,OAAO,EAEL,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAgB7B,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EACA,wBAAwB,GACxB,gCAAgC,GAChC,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CA8CR;AAID,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAoE7B;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM;;;;;;EAa1B;
|
|
1
|
+
{"version":3,"file":"room-floor-feasibility.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-feasibility.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,WAAW,CAAA;AAC5D,OAAO,EAEL,0BAA0B,EAC1B,kBAAkB,EACnB,MAAM,sBAAsB,CAAA;AAgB7B,eAAO,MAAM,uBAAuB,QAAQ,CAAA;AAC5C,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,CAAA;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EACA,wBAAwB,GACxB,gCAAgC,GAChC,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,GACnB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,GACpB,iBAAiB,GACjB,kBAAkB,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CA8CR;AAID,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,GACd,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAoE7B;AAID,wBAAgB,cAAc,CAC5B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM;;;;;;EAa1B;AA2KD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,GACb,MAAM,CAMR;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR"}
|
|
@@ -176,7 +176,7 @@ function computeRoomFloor(nodes, zoneId, proposedElevation) {
|
|
|
176
176
|
for (const wall of walls) {
|
|
177
177
|
const hasOpenings = wall.children.some((id) => nodes[id]?.type === 'door' || nodes[id]?.type === 'window');
|
|
178
178
|
const support = hasOpenings || wall.height !== undefined ? wallSupportForNodes(wall, candidate) : undefined;
|
|
179
|
-
const top = getWallTop(wall, level.id, nodes, support?.elevation ?? 0);
|
|
179
|
+
const top = Math.min(getWallTop(wall, level.id, nodes, support?.elevation ?? 0, 0), getWallTop(wall, level.id, nodes, support?.elevation ?? 0, 1));
|
|
180
180
|
const openingSpans = hasOpenings && linked
|
|
181
181
|
? (roomFace(nodes, zone, floorRoomFaces(boundaries(nodes, zone.parentId)))?.spans ?? [])
|
|
182
182
|
: spans;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import type { SlabNode } from '../schema/index.js';
|
|
1
|
+
import type { AnyNode, AnyNodeId, SlabNode, ZoneNode } from '../schema/index.js';
|
|
2
2
|
export declare function roomFloorPlate(slabs: readonly SlabNode[], zoneId: string): SlabNode | undefined;
|
|
3
|
+
/** A dedicated plate's room; shared base plates do not inherit one room's outdoor type. */
|
|
4
|
+
export declare function floorPlateRoom(slab: Pick<SlabNode, 'zoneIds' | 'plateRole'>, resolve: (id: AnyNodeId) => AnyNode | undefined): ZoneNode | undefined;
|
|
3
5
|
//# sourceMappingURL=room-floor-plate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-floor-plate.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-plate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"room-floor-plate.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-plate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG/F;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC,EAC7C,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,GAC9C,QAAQ,GAAG,SAAS,CAItB"}
|
|
@@ -2,3 +2,10 @@ export function roomFloorPlate(slabs, zoneId) {
|
|
|
2
2
|
const owned = slabs.filter((slab) => slab.zoneIds?.includes(zoneId));
|
|
3
3
|
return owned.find((slab) => slab.plateRole !== 'base') ?? owned[0];
|
|
4
4
|
}
|
|
5
|
+
/** A dedicated plate's room; shared base plates do not inherit one room's outdoor type. */
|
|
6
|
+
export function floorPlateRoom(slab, resolve) {
|
|
7
|
+
if (slab.plateRole === 'base' || slab.zoneIds?.length !== 1)
|
|
8
|
+
return undefined;
|
|
9
|
+
const zone = resolve(slab.zoneIds[0]);
|
|
10
|
+
return zone?.type === 'zone' ? zone : undefined;
|
|
11
|
+
}
|
|
@@ -29,12 +29,25 @@ type WallSideUpdate = {
|
|
|
29
29
|
frontSide: 'interior' | 'exterior' | 'unknown';
|
|
30
30
|
backSide: 'interior' | 'exterior' | 'unknown';
|
|
31
31
|
};
|
|
32
|
+
type SceneNodes = Record<string, any>;
|
|
32
33
|
export declare function detectSpacesForLevel(levelId: string, walls: BoundaryNode[]): {
|
|
33
34
|
rooms: ExtractedRoom[];
|
|
34
35
|
roomPolygons: import("./room-graph.js").Point2D[][];
|
|
35
36
|
spaces: Space[];
|
|
36
37
|
wallUpdates: WallSideUpdate[];
|
|
37
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* Levels whose structure intent differs between two versions of a scene: what a paused batch's
|
|
41
|
+
* resume (and a detached scene's reconciliation) re-derives.
|
|
42
|
+
*/
|
|
43
|
+
export declare function changedStructureLevelIds(before: SceneNodes, after: SceneNodes): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Levels whose structure an edit from `before` to `after` asks to re-derive, chosen as space
|
|
46
|
+
* detection chooses them for a store commit: from the nodes the edit changed (walls by level, and
|
|
47
|
+
* the fallbacks for levels, stairs, openings, slabs, ceilings, zones and separators), without
|
|
48
|
+
* signing every level of the scene.
|
|
49
|
+
*/
|
|
50
|
+
export declare function structureLevelsForChange(before: SceneNodes, after: SceneNodes): string[];
|
|
38
51
|
/** Pause structure reconciliation. Refcounted — pair with `resumeSpaceDetection`. */
|
|
39
52
|
export declare function pauseSpaceDetection(): void;
|
|
40
53
|
/** Resume structure reconciliation. No-op if not currently paused. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;AAuBlB,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,iBAAiB,EAGvB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,YAAY,EAAqB,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzE;AAID,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEvF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9B,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IAChC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IAC9C,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CAC9C,CAAA;AA+PD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAkKrC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;;;;;EAE1E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAMxF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAWxF;AA+CD,qFAAqF;AACrF,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,uBAAuB,qCAMtC;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,GAAG,EACf,WAAW,EAAE,GAAG,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,IAAI,CAuLZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAiBjF"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { ZoneNode, } from '../schema/index.js';
|
|
2
2
|
import { generateId } from '../schema/base.js';
|
|
3
3
|
import { findLevelAboveId, getLevelBelow, getLevelElevations } from '../services/storey.js';
|
|
4
|
+
import { isSettlingDocument } from '../store/document-settling.js';
|
|
4
5
|
import { activeSceneCommitNodeIds, getSceneHistoryPauseDepth, isRestoringSceneHistory, notifySceneCommit, pauseSceneHistory, resumeSceneHistory, subscribeSceneCommits, } from '../store/history-control.js';
|
|
6
|
+
import { currentSceneEnvironment, sceneEnvironmentOf, } from '../store/scene-environment.js';
|
|
5
7
|
import { getClampedWallCurveOffset } from '../systems/wall/wall-curve.js';
|
|
6
8
|
import { changedLevelConstructionDisplacements } from './floor-foundation-stack.js';
|
|
7
9
|
import { createFloorOpeningIndex, floorOpeningTargets } from './floor-opening-intent.js';
|
|
10
|
+
import { porchPartOf, porchPartSignature } from './porch-framing-sync.js';
|
|
11
|
+
import { railingFencedRoomIds, railingWallIds } from './railing-rooms.js';
|
|
8
12
|
import { extractRooms, pointToTuple, polygonSignature, sampleWallPointsForRoomDetection, WALL_JUNCTION_TOLERANCE, } from './room-graph.js';
|
|
9
13
|
import { distanceToSegment, RoomTopologyIndex } from './room-topology-index.js';
|
|
10
14
|
import { applyStructureReconciliation } from './structure-commit.js';
|
|
@@ -31,7 +35,13 @@ function wallGeometrySignature(wall, nodes, levelId) {
|
|
|
31
35
|
// Plane-bound (no stored height) is a distinct state, not a default
|
|
32
36
|
// value: it resolves to the storey plane, so it must not alias an
|
|
33
37
|
// explicit height of the same magnitude in the trigger signature.
|
|
34
|
-
|
|
38
|
+
// A legacy height that is not a number still signs, rather than throwing.
|
|
39
|
+
wall.height == null
|
|
40
|
+
? 'plane'
|
|
41
|
+
: typeof wall.height === 'number'
|
|
42
|
+
? wall.height.toFixed(4)
|
|
43
|
+
: String(wall.height),
|
|
44
|
+
(wall.endHeightOffset ?? 0).toFixed(4),
|
|
35
45
|
wall.supportSlabId ?? 'elected',
|
|
36
46
|
(wall.supportOffset ?? 0).toFixed(4),
|
|
37
47
|
getClampedWallCurveOffset(wall).toFixed(4),
|
|
@@ -74,6 +84,9 @@ function zoneGeometrySignature(zone) {
|
|
|
74
84
|
zone.wallMaterial,
|
|
75
85
|
zone.wallOverrides,
|
|
76
86
|
zone.seed,
|
|
87
|
+
// A porch's type and framing settings rebuild its posts and beam.
|
|
88
|
+
zone.roomType,
|
|
89
|
+
zone.porchFraming,
|
|
77
90
|
// A drawn zone's outline is intent (it may be adopted); a room's outline is
|
|
78
91
|
// derived, and an edit to it must be re-derived here as the hosted path does.
|
|
79
92
|
// The kernel's own write is not a change: the baseline is taken after it.
|
|
@@ -92,11 +105,19 @@ function levelStructureSnapshots(nodes) {
|
|
|
92
105
|
const zonesByLevel = new Map();
|
|
93
106
|
const slabElevationsByLevel = new Map();
|
|
94
107
|
const coveringUndersidesByLevel = new Map();
|
|
108
|
+
const porchPartsByLevel = new Map();
|
|
95
109
|
const floorOpenings = [];
|
|
96
110
|
for (const node of Object.values(nodes)) {
|
|
97
111
|
if (!(node && typeof node === 'object' && 'parentId' in node && node.parentId))
|
|
98
112
|
continue;
|
|
99
113
|
const levelId = node.parentId;
|
|
114
|
+
// A porch's own post or beam moved, resized or deleted by hand hands its framing over.
|
|
115
|
+
const porchPart = porchPartSignature(node);
|
|
116
|
+
if (porchPart) {
|
|
117
|
+
const parts = porchPartsByLevel.get(levelId) ?? [];
|
|
118
|
+
parts.push(porchPart);
|
|
119
|
+
porchPartsByLevel.set(levelId, parts);
|
|
120
|
+
}
|
|
100
121
|
if (node.type === 'stair' && nodes[node.deckSlabId]?.support === 'open') {
|
|
101
122
|
const target = nodes[node.deckSlabId].parentId;
|
|
102
123
|
const arrivals = arrivalsByLevel.get(target) ?? [];
|
|
@@ -196,6 +217,7 @@ function levelStructureSnapshots(nodes) {
|
|
|
196
217
|
...zonesByLevel.keys(),
|
|
197
218
|
...separatorsByLevel.keys(),
|
|
198
219
|
...openingsByLevel.keys(),
|
|
220
|
+
...porchPartsByLevel.keys(),
|
|
199
221
|
]);
|
|
200
222
|
for (const levelId of levelIds) {
|
|
201
223
|
const walls = wallsByLevel.get(levelId) ?? [];
|
|
@@ -207,7 +229,7 @@ function levelStructureSnapshots(nodes) {
|
|
|
207
229
|
const aboveSlabKey = aboveId
|
|
208
230
|
? (coveringUndersidesByLevel.get(aboveId) ?? []).sort().join(';')
|
|
209
231
|
: '';
|
|
210
|
-
snapshots.set(levelId, `${(arrivalsByLevel.get(levelId) ?? []).sort().join('|')}#${(separatorsByLevel.get(levelId) ?? []).sort().join('|')}#${storeyKey}#${levelWallSnapshot(walls, nodes, levelId)}##${zones.map(zoneGeometrySignature).sort().join('||')}##${slabKey}##${aboveSlabKey}##${(ceilingIdsByLevel.get(levelId) ?? []).sort().join('|')}##${(openingsByLevel.get(levelId) ?? []).sort().join('|')}`);
|
|
232
|
+
snapshots.set(levelId, `${(arrivalsByLevel.get(levelId) ?? []).sort().join('|')}#${(separatorsByLevel.get(levelId) ?? []).sort().join('|')}#${storeyKey}#${levelWallSnapshot(walls, nodes, levelId)}##${zones.map(zoneGeometrySignature).sort().join('||')}##${slabKey}##${aboveSlabKey}##${(ceilingIdsByLevel.get(levelId) ?? []).sort().join('|')}##${(openingsByLevel.get(levelId) ?? []).sort().join('|')}##${(porchPartsByLevel.get(levelId) ?? []).sort().join('|')}`);
|
|
211
233
|
}
|
|
212
234
|
return snapshots;
|
|
213
235
|
}
|
|
@@ -335,11 +357,17 @@ function fallbackLevelIdsForCandidates(before, current, candidateIds) {
|
|
|
335
357
|
if (wall?.parentId)
|
|
336
358
|
levelIds.add(wall.parentId);
|
|
337
359
|
}
|
|
360
|
+
else if (porchPartOf(node)) {
|
|
361
|
+
// A porch's own post or beam edited by hand: the kernel hands its framing over.
|
|
362
|
+
if (porchPartSignature(before[id]) !== porchPartSignature(current[id]) && node.parentId)
|
|
363
|
+
levelIds.add(node.parentId);
|
|
364
|
+
}
|
|
338
365
|
else if (node.type === 'slab') {
|
|
339
366
|
const old = before[id], next = current[id];
|
|
340
367
|
const changed = !old ||
|
|
341
368
|
!next ||
|
|
342
|
-
|
|
369
|
+
// Everything the covering underside below reads, as well as this level's own floor.
|
|
370
|
+
['thickness', 'floorHeight', 'polygon', 'holes', 'elevation', 'recessed'].some((field) => JSON.stringify(old[field]) !==
|
|
343
371
|
JSON.stringify(next[field]));
|
|
344
372
|
addLevelAndLower(node.parentId, nodes, changed);
|
|
345
373
|
if (node.plateRole === 'base' && changed)
|
|
@@ -375,9 +403,12 @@ function detectSpacesFromWalls(levelId, boundaries) {
|
|
|
375
403
|
const rooms = extractRooms(boundaries);
|
|
376
404
|
const walls = boundaries.filter((boundary) => boundary.type === 'wall');
|
|
377
405
|
const roomPolygons = rooms.map((room) => room.polygon);
|
|
406
|
+
const spans = rooms.flatMap((room) => room.spans);
|
|
407
|
+
// A room a railing fences off from the outside (a deck's guard) is outside.
|
|
408
|
+
const fenced = railingFencedRoomIds(spans, railingWallIds(walls));
|
|
378
409
|
const wallUpdates = walls.map((wall) => ({
|
|
379
410
|
wallId: wall.id,
|
|
380
|
-
...classifyWallSides(wall,
|
|
411
|
+
...classifyWallSides(wall, spans, fenced),
|
|
381
412
|
}));
|
|
382
413
|
return {
|
|
383
414
|
rooms,
|
|
@@ -389,6 +420,48 @@ function detectSpacesFromWalls(levelId, boundaries) {
|
|
|
389
420
|
export function detectSpacesForLevel(levelId, walls) {
|
|
390
421
|
return detectSpacesFromWalls(levelId, walls);
|
|
391
422
|
}
|
|
423
|
+
/**
|
|
424
|
+
* Levels whose structure intent differs between two versions of a scene: what a paused batch's
|
|
425
|
+
* resume (and a detached scene's reconciliation) re-derives.
|
|
426
|
+
*/
|
|
427
|
+
export function changedStructureLevelIds(before, after) {
|
|
428
|
+
const previous = levelStructureSnapshots(before);
|
|
429
|
+
const current = levelStructureSnapshots(after);
|
|
430
|
+
return [...new Set([...previous.keys(), ...current.keys()])].filter((id) => previous.get(id) !== current.get(id));
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Levels whose structure an edit from `before` to `after` asks to re-derive, chosen as space
|
|
434
|
+
* detection chooses them for a store commit: from the nodes the edit changed (walls by level, and
|
|
435
|
+
* the fallbacks for levels, stairs, openings, slabs, ceilings, zones and separators), without
|
|
436
|
+
* signing every level of the scene.
|
|
437
|
+
*/
|
|
438
|
+
export function structureLevelsForChange(before, after) {
|
|
439
|
+
const candidateIds = new Set();
|
|
440
|
+
for (const id in after)
|
|
441
|
+
if (after[id] !== before[id] && !onlyChildrenChanged(before[id], after[id]))
|
|
442
|
+
candidateIds.add(id);
|
|
443
|
+
for (const id in before)
|
|
444
|
+
if (!(id in after))
|
|
445
|
+
candidateIds.add(id);
|
|
446
|
+
if (!candidateIds.size)
|
|
447
|
+
return [];
|
|
448
|
+
const levels = fallbackLevelIdsForCandidates(before, after, candidateIds);
|
|
449
|
+
for (const levelId of changedWallIdsByLevel(before, after, candidateIds).keys())
|
|
450
|
+
levels.add(levelId);
|
|
451
|
+
return [...levels];
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* A parent whose child list alone changed: the children created or deleted are candidates of
|
|
455
|
+
* their own, so the parent adds nothing (an item placed on a level re-derives no structure).
|
|
456
|
+
*/
|
|
457
|
+
function onlyChildrenChanged(before, after) {
|
|
458
|
+
if (!(before && after))
|
|
459
|
+
return false;
|
|
460
|
+
for (const key of new Set([...Object.keys(before), ...Object.keys(after)]))
|
|
461
|
+
if (key !== 'children' && before[key] !== after[key])
|
|
462
|
+
return false;
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
392
465
|
function syncSceneStructure(levelIds, sceneStore, previousNodes, mintId) {
|
|
393
466
|
applyStructureReconciliation(sceneStore, { levelIds, previousNodes, mintId });
|
|
394
467
|
}
|
|
@@ -402,26 +475,28 @@ function publishSpaces(levelIds, nodes, editorStore) {
|
|
|
402
475
|
}
|
|
403
476
|
editorStore.getState().setSpaces(nextSpaces);
|
|
404
477
|
}
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
478
|
+
const SPACE_DETECTION_PAUSE = Symbol('space-detection-pause');
|
|
479
|
+
const pauseOf = (environment = currentSceneEnvironment()) => environment.slot(SPACE_DETECTION_PAUSE, () => ({
|
|
480
|
+
depth: 0,
|
|
481
|
+
resumeListeners: new Set(),
|
|
482
|
+
}));
|
|
409
483
|
/** Pause structure reconciliation. Refcounted — pair with `resumeSpaceDetection`. */
|
|
410
484
|
export function pauseSpaceDetection() {
|
|
411
|
-
|
|
485
|
+
pauseOf().depth += 1;
|
|
412
486
|
}
|
|
413
487
|
/** Resume structure reconciliation. No-op if not currently paused. */
|
|
414
488
|
export function resumeSpaceDetection() {
|
|
415
|
-
|
|
489
|
+
const pause = pauseOf();
|
|
490
|
+
if (pause.depth === 0)
|
|
416
491
|
return;
|
|
417
|
-
|
|
418
|
-
if (
|
|
419
|
-
for (const reconcile of resumeListeners)
|
|
492
|
+
pause.depth -= 1;
|
|
493
|
+
if (pause.depth === 0)
|
|
494
|
+
for (const reconcile of pause.resumeListeners)
|
|
420
495
|
reconcile();
|
|
421
496
|
}
|
|
422
497
|
/** True iff structure reconciliation is currently paused. */
|
|
423
498
|
export function isSpaceDetectionPaused() {
|
|
424
|
-
return
|
|
499
|
+
return pauseOf().depth > 0;
|
|
425
500
|
}
|
|
426
501
|
export function createRoomTopologyIndex() {
|
|
427
502
|
return new RoomTopologyIndex({
|
|
@@ -436,6 +511,7 @@ export function initSpaceDetectionSync(sceneStore, editorStore, options = {}) {
|
|
|
436
511
|
// scene that merely loaded — rerunning on hydration resurrected auto slabs
|
|
437
512
|
// the user had deleted in an earlier session.
|
|
438
513
|
const initialNodes = sceneStore.getState().nodes;
|
|
514
|
+
const pause = pauseOf(sceneEnvironmentOf(sceneStore));
|
|
439
515
|
const topologyIndex = new RoomTopologyIndex({
|
|
440
516
|
detectRooms: extractRooms,
|
|
441
517
|
sampleWall: (wall) => sampleWallPointsForRoomDetection(wall).map(pointToTuple),
|
|
@@ -459,11 +535,11 @@ export function initSpaceDetectionSync(sceneStore, editorStore, options = {}) {
|
|
|
459
535
|
previousNodes = nodes;
|
|
460
536
|
};
|
|
461
537
|
adoptSceneBaseline(initialNodes);
|
|
462
|
-
const unsubscribeCommits = subscribeSceneCommits((commit) => {
|
|
538
|
+
const unsubscribeCommits = sceneEnvironmentOf(sceneStore).run(() => subscribeSceneCommits((commit) => {
|
|
463
539
|
if (commit.origin === 'local')
|
|
464
540
|
return;
|
|
465
541
|
adoptSceneBaseline(commit.current.nodes);
|
|
466
|
-
});
|
|
542
|
+
}));
|
|
467
543
|
// Keep reconciliation in this synchronous store subscription. Zundo emits
|
|
468
544
|
// the originating local SceneCommit only after subscribers return, so the
|
|
469
545
|
// history-paused derived writes below join that commit's current snapshot
|
|
@@ -476,11 +552,27 @@ export function initSpaceDetectionSync(sceneStore, editorStore, options = {}) {
|
|
|
476
552
|
adoptSceneBaseline(state.nodes);
|
|
477
553
|
return;
|
|
478
554
|
}
|
|
479
|
-
|
|
555
|
+
// A settling host derives this edit's structure itself (reconcileDocument): only the topology
|
|
556
|
+
// and spaces of the levels whose walls it changed are brought up to date here. Its derived
|
|
557
|
+
// writes are history-paused, so this runs before the pause check: the baseline must take them
|
|
558
|
+
// in, or the next edit would derive the host's rooms again from before it.
|
|
559
|
+
if (isSettlingDocument(sceneStore)) {
|
|
560
|
+
const levels = [
|
|
561
|
+
...changedWallIdsByLevel(previousNodes, state.nodes, activeSceneCommitNodeIds()).keys(),
|
|
562
|
+
];
|
|
563
|
+
for (const levelId of levels)
|
|
564
|
+
topologyIndex.rebuildLevel(levelId, state.nodes);
|
|
565
|
+
if (levels.length)
|
|
566
|
+
publishSpaces(levels, state.nodes, editorStore);
|
|
567
|
+
previousNodes = state.nodes;
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
if (getSceneHistoryPauseDepth(sceneStore) > 0 ||
|
|
571
|
+
sceneStore.temporal.getState().isTracking === false)
|
|
480
572
|
return;
|
|
481
573
|
const nodes = state.nodes;
|
|
482
574
|
const candidateIds = activeSceneCommitNodeIds();
|
|
483
|
-
if (
|
|
575
|
+
if (pause.depth > 0)
|
|
484
576
|
return;
|
|
485
577
|
const changedWalls = changedWallIdsByLevel(previousNodes, nodes, candidateIds);
|
|
486
578
|
if (candidateIds && changedWalls.size > 0) {
|
|
@@ -563,10 +655,7 @@ export function initSpaceDetectionSync(sceneStore, editorStore, options = {}) {
|
|
|
563
655
|
return { nodes, rootNodeIds, collections, materials, installedPlugins };
|
|
564
656
|
};
|
|
565
657
|
const beforeCommit = capture();
|
|
566
|
-
const
|
|
567
|
-
const before = levelStructureSnapshots(previousNodes);
|
|
568
|
-
const after = levelStructureSnapshots(nodes);
|
|
569
|
-
const levels = [...new Set([...before.keys(), ...after.keys()])].filter((id) => before.get(id) !== after.get(id));
|
|
658
|
+
const levels = changedStructureLevelIds(previousNodes, beforeCommit.nodes);
|
|
570
659
|
if (!levels.length)
|
|
571
660
|
return;
|
|
572
661
|
isProcessing = true;
|
|
@@ -586,11 +675,11 @@ export function initSpaceDetectionSync(sceneStore, editorStore, options = {}) {
|
|
|
586
675
|
// so collaboration receives the originator's ids even for AI/template batches.
|
|
587
676
|
notifySceneCommit({ origin: 'local', before: beforeCommit, current: capture() });
|
|
588
677
|
};
|
|
589
|
-
resumeListeners.add(reconcilePaused);
|
|
678
|
+
pause.resumeListeners.add(reconcilePaused);
|
|
590
679
|
return () => {
|
|
591
680
|
unsubscribe();
|
|
592
681
|
unsubscribeCommits();
|
|
593
|
-
resumeListeners.delete(reconcilePaused);
|
|
682
|
+
pause.resumeListeners.delete(reconcilePaused);
|
|
594
683
|
};
|
|
595
684
|
}
|
|
596
685
|
export function wallTouchesOthers(wall, otherWalls) {
|