@pascal-app/core 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1164 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +38 -2
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +257 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +1667 -866
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +55 -11
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +4 -6
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +5951 -4351
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +1 -0
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +115 -7
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +121 -29
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +888 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -24
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +32 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -15
- package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +205 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +60 -35
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +38 -6
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +112 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +5 -2
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/types.d.ts +65 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +224 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +57 -10
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +135 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +42 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1079 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +6 -3
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +13 -8
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +846 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1057 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +166 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +2124 -1322
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +42 -16
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +31 -11
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +6751 -5151
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +85 -4
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +28 -7
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +2 -2
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +6 -1
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +118 -10
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1930 -1130
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -3,7 +3,9 @@ import { computeWallSlabSupport, } from '../systems/slab/slab-support.js';
|
|
|
3
3
|
import { getWallCurveFrameAt, getWallCurveLength } from '../systems/wall/wall-curve.js';
|
|
4
4
|
import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
|
|
5
5
|
import { getWallBodyCenterOffset } from '../systems/wall/wall-frame.js';
|
|
6
|
+
import { getDoorOpeningSize } from './door-opening.js';
|
|
6
7
|
import { isFloorAnchoredOpening, openingAperture, wallOpeningBand, } from './floor-opening-footprints.js';
|
|
8
|
+
import { openingHostFacing } from './opening-casing.js';
|
|
7
9
|
import { area, intersection, union } from './polygon-boolean.js';
|
|
8
10
|
import { levelBaseElevationAt } from './terrain-support-query.js';
|
|
9
11
|
const supportCache = new WeakMap();
|
|
@@ -47,8 +49,10 @@ export function openingDatumFromSupport(wall, opening, support) {
|
|
|
47
49
|
if (!isFloorAnchoredOpening(opening))
|
|
48
50
|
return support.elevation;
|
|
49
51
|
const length = getWallCurveLength(wall);
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
+
const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
|
|
53
|
+
const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
|
|
54
|
+
const from = Math.max(0, (centerX - size.width / 2) / length);
|
|
55
|
+
const to = Math.min(1, (centerX + size.width / 2) / length);
|
|
52
56
|
const heights = [...support.faceDatum.a, ...support.faceDatum.b].flatMap((segment) => {
|
|
53
57
|
const start = Math.max(from, segment.start), end = Math.min(to, segment.end);
|
|
54
58
|
return end > start ? [supportSegmentAt(segment, start), supportSegmentAt(segment, end)] : [];
|
|
@@ -61,7 +65,31 @@ export function getOpeningFloorTarget(wall, opening, nodes) {
|
|
|
61
65
|
}
|
|
62
66
|
export function openingFitsAtDatum(wall, opening, datum, nodes, support = wallSupportForNodes(wall, nodes)) {
|
|
63
67
|
const top = getWallTop(wall, wall.parentId, nodes, support.elevation);
|
|
64
|
-
return datum +
|
|
68
|
+
return (datum +
|
|
69
|
+
opening.position[1] -
|
|
70
|
+
opening.height / 2 +
|
|
71
|
+
getDoorOpeningSize({ ...opening, width: 0 }).height <=
|
|
72
|
+
top + 1e-9);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The lowest the wall reaches under the opening's span, level-local, on its centreline or either
|
|
76
|
+
* face: where a face goes down beside a floor sunk under the one the wall stands on (a garage
|
|
77
|
+
* beside the house), lower than that floor.
|
|
78
|
+
*/
|
|
79
|
+
export function wallBottomUnderOpening(wall, opening, support) {
|
|
80
|
+
const length = getWallCurveLength(wall);
|
|
81
|
+
if (length < 1e-9)
|
|
82
|
+
return support.baseElevation;
|
|
83
|
+
const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
|
|
84
|
+
const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
|
|
85
|
+
const from = Math.max(0, (centerX - size.width / 2) / length);
|
|
86
|
+
const to = Math.min(1, (centerX + size.width / 2) / length);
|
|
87
|
+
const segments = [...support.baseSegments, ...support.faceBottom.a, ...support.faceBottom.b];
|
|
88
|
+
const heights = segments.flatMap((segment) => {
|
|
89
|
+
const start = Math.max(from, segment.start), end = Math.min(to, segment.end);
|
|
90
|
+
return end > start ? [supportSegmentAt(segment, start), supportSegmentAt(segment, end)] : [];
|
|
91
|
+
});
|
|
92
|
+
return heights.length ? Math.min(...heights) : support.baseElevation;
|
|
65
93
|
}
|
|
66
94
|
export function getOpeningFloorDatum(wall, opening, nodes, support = wallSupportForNodes(wall, nodes)) {
|
|
67
95
|
const target = openingDatumFromSupport(wall, opening, support);
|
|
@@ -102,13 +130,17 @@ export function getOpeningWallCut(wall, opening, nodes, support = wallSupportFor
|
|
|
102
130
|
covers.set(datum, cover);
|
|
103
131
|
const covered = area(aperture) > 0 && area(intersection(aperture, cover)) >= area(aperture) - 0.00001;
|
|
104
132
|
const length = getWallCurveLength(wall);
|
|
105
|
-
const
|
|
133
|
+
const size = getDoorOpeningSize({ ...opening, height: opening.height ?? 0 });
|
|
134
|
+
const centerX = opening.position[0] - size.leafOffsetX * openingHostFacing(opening);
|
|
135
|
+
const from = (centerX - size.width / 2) / length, to = (centerX + size.width / 2) / length;
|
|
106
136
|
const bottoms = [...support.faceBottom.a, ...support.faceBottom.b]
|
|
107
137
|
.filter((s) => s.end > from && s.start < to)
|
|
108
138
|
.map((s) => Math.min(s.elevation, s.endElevation ?? s.elevation));
|
|
139
|
+
// An opening may reach below its floor (a negative sill: a garage door down to the garage floor
|
|
140
|
+
// sunk beside the wall), never below the wall itself.
|
|
109
141
|
const bottom = isFloorAnchoredOpening(opening) && covered
|
|
110
142
|
? Math.min(support.elevation, ...bottoms)
|
|
111
|
-
: datum + opening.position[1] - opening.height / 2;
|
|
143
|
+
: Math.max(datum + opening.position[1] - opening.height / 2, Math.min(datum, wallBottomUnderOpening(wall, opening, support)));
|
|
112
144
|
return {
|
|
113
145
|
// The floor the doorway exposes: exactly the wall's own footprint.
|
|
114
146
|
aperture,
|
|
@@ -116,7 +148,7 @@ export function getOpeningWallCut(wall, opening, nodes, support = wallSupportFor
|
|
|
116
148
|
band: wallOpeningBand(wall, Math.max(0, from), Math.min(1, to)),
|
|
117
149
|
datum,
|
|
118
150
|
bottom,
|
|
119
|
-
top: datum + opening.position[1]
|
|
151
|
+
top: datum + opening.position[1] - opening.height / 2 + size.height,
|
|
120
152
|
covered,
|
|
121
153
|
};
|
|
122
154
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AnyNode, DoorNode, WindowNode } from '../schema/index.js';
|
|
2
|
+
type FrameDepthOpening = Pick<DoorNode | WindowNode, 'frameDepth'>;
|
|
3
|
+
/** An opening without an explicit frame depth follows its host wall. */
|
|
4
|
+
export declare function isAutoFrameDepth(opening: FrameDepthOpening): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* The depth a door's or window's frame runs through its wall. An explicit
|
|
7
|
+
* `frameDepth` is kept as stored; left out, the frame is the host wall's
|
|
8
|
+
* thickness exactly.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveOpeningFrameDepth(opening: FrameDepthOpening, wallThickness: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* `resolveOpeningFrameDepth` against the opening's host in `nodes`: its parent
|
|
13
|
+
* wall's thickness, or the default wall thickness off a wall (a roof face, a
|
|
14
|
+
* dormer, an unparented preview).
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveHostedOpeningFrameDepth(opening: Pick<DoorNode | WindowNode, 'frameDepth' | 'parentId'>, nodes: Readonly<Record<string, AnyNode | undefined>>): number;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=opening-frame-depth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-frame-depth.d.ts","sourceRoot":"","sources":["../../src/lib/opening-frame-depth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAG9D,KAAK,iBAAiB,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,YAAY,CAAC,CAAA;AAElE,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,YAAY,GAAG,UAAU,CAAC,EAC/D,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,GACnD,MAAM,CAMR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DEFAULT_WALL_THICKNESS, getWallThickness } from '../systems/wall/wall-footprint.js';
|
|
2
|
+
/** An opening without an explicit frame depth follows its host wall. */
|
|
3
|
+
export function isAutoFrameDepth(opening) {
|
|
4
|
+
return opening.frameDepth === undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The depth a door's or window's frame runs through its wall. An explicit
|
|
8
|
+
* `frameDepth` is kept as stored; left out, the frame is the host wall's
|
|
9
|
+
* thickness exactly.
|
|
10
|
+
*/
|
|
11
|
+
export function resolveOpeningFrameDepth(opening, wallThickness) {
|
|
12
|
+
return opening.frameDepth ?? wallThickness;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* `resolveOpeningFrameDepth` against the opening's host in `nodes`: its parent
|
|
16
|
+
* wall's thickness, or the default wall thickness off a wall (a roof face, a
|
|
17
|
+
* dormer, an unparented preview).
|
|
18
|
+
*/
|
|
19
|
+
export function resolveHostedOpeningFrameDepth(opening, nodes) {
|
|
20
|
+
const host = opening.parentId ? nodes[opening.parentId] : undefined;
|
|
21
|
+
return resolveOpeningFrameDepth(opening, host?.type === 'wall' ? getWallThickness(host) : DEFAULT_WALL_THICKNESS);
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ZoneNode } from '../schema/index.js';
|
|
2
|
+
export declare const OUTDOOR_ROOM_TYPES: readonly ['porch', 'deck', 'patio'];
|
|
3
|
+
export type OutdoorRoomType = (typeof OUTDOOR_ROOM_TYPES)[number];
|
|
4
|
+
/** A porch or patio slab steps down from the house's finish floor by 1.5 in at most. */
|
|
5
|
+
export declare const PORCH_FLOOR_DROP: number;
|
|
6
|
+
/** Deck boards ride 1 in under the threshold so water sheds away from the door. */
|
|
7
|
+
export declare const DECK_FLOOR_DROP: number;
|
|
8
|
+
/**
|
|
9
|
+
* The deck boards on a deck's floor unless its room says otherwise (5/4x6, 1 in: `lib/deck-boards`);
|
|
10
|
+
* the framing hangs under them.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DECKING_THICKNESS: number;
|
|
13
|
+
export type OutdoorRoomDefaults = {
|
|
14
|
+
/** The name a room of the type is given while it has a default name. */
|
|
15
|
+
name: string;
|
|
16
|
+
drop: number;
|
|
17
|
+
/** The floor finish it starts with. */
|
|
18
|
+
finish: string;
|
|
19
|
+
/** Whether it has a ceiling (a covered porch). */
|
|
20
|
+
covered: boolean;
|
|
21
|
+
/** How the framing plugin reads its floor plate (`metadata.floor`). */
|
|
22
|
+
floorTag: 'porch-slab' | 'deck';
|
|
23
|
+
};
|
|
24
|
+
export declare const OUTDOOR_ROOM_DEFAULTS: Record<OutdoorRoomType, OutdoorRoomDefaults>;
|
|
25
|
+
export declare function isOutdoorRoomType(value: unknown): value is OutdoorRoomType;
|
|
26
|
+
/** Whether a room is one of the outdoor room types. */
|
|
27
|
+
export declare function isOutdoorRoom(zone: Pick<ZoneNode, 'roomType'>): boolean;
|
|
28
|
+
/** "Porch", "Porch 2", …: the next free name for a room of `type` among `names`. */
|
|
29
|
+
export declare function nextOutdoorRoomName(type: OutdoorRoomType, names: Iterable<string>): string;
|
|
30
|
+
/** Whether `name` is a type's default name ("Deck", "Deck 3"), so a type change may rename it. */
|
|
31
|
+
export declare function isOutdoorRoomDefaultName(name: string | undefined): boolean;
|
|
32
|
+
//# sourceMappingURL=outdoor-room.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outdoor-room.d.ts","sourceRoot":"","sources":["../../src/lib/outdoor-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAezC,eAAO,MAAM,kBAAkB,YAAI,OAAO,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AACrE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,QAAW,CAAA;AACxC,mFAAmF;AACnF,eAAO,MAAM,eAAe,QAAS,CAAA;AACrC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAA0C,CAAA;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAsB9E,CAAA;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,OAAO,CAEvE;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAK1F;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO1E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { DEFAULT_DECK_BOARDS, deckBoardThickness } from './deck-boards.js';
|
|
2
|
+
/**
|
|
3
|
+
* Rooms outside the house, the outdoor room types: a porch (a covered floor a step
|
|
4
|
+
* down from the house), a deck (a framed floor of boards) and a patio (an uncovered slab). A room
|
|
5
|
+
* of one of these types is outdoors whatever covers it, so the house walls it faces are exterior
|
|
6
|
+
* walls even under a porch ceiling, and its floor steps down from the house's (`floor.drop`).
|
|
7
|
+
*
|
|
8
|
+
* A room closed off outside the house by invisible walls starts as a porch: its floor a concrete
|
|
9
|
+
* slab 1.5 in under the house's and its ceiling at the house's, both adjustable in its panel.
|
|
10
|
+
*/
|
|
11
|
+
const IN = 0.0254;
|
|
12
|
+
export const OUTDOOR_ROOM_TYPES = ['porch', 'deck', 'patio'];
|
|
13
|
+
/** A porch or patio slab steps down from the house's finish floor by 1.5 in at most. */
|
|
14
|
+
export const PORCH_FLOOR_DROP = 1.5 * IN;
|
|
15
|
+
/** Deck boards ride 1 in under the threshold so water sheds away from the door. */
|
|
16
|
+
export const DECK_FLOOR_DROP = 1 * IN;
|
|
17
|
+
/**
|
|
18
|
+
* The deck boards on a deck's floor unless its room says otherwise (5/4x6, 1 in: `lib/deck-boards`);
|
|
19
|
+
* the framing hangs under them.
|
|
20
|
+
*/
|
|
21
|
+
export const DECKING_THICKNESS = deckBoardThickness(DEFAULT_DECK_BOARDS);
|
|
22
|
+
export const OUTDOOR_ROOM_DEFAULTS = {
|
|
23
|
+
porch: {
|
|
24
|
+
name: 'Porch',
|
|
25
|
+
drop: PORCH_FLOOR_DROP,
|
|
26
|
+
finish: 'library:concrete-raw',
|
|
27
|
+
covered: true,
|
|
28
|
+
floorTag: 'porch-slab',
|
|
29
|
+
},
|
|
30
|
+
deck: {
|
|
31
|
+
name: 'Deck',
|
|
32
|
+
drop: DECK_FLOOR_DROP,
|
|
33
|
+
finish: 'library:wood-woodfine11',
|
|
34
|
+
covered: false,
|
|
35
|
+
floorTag: 'deck',
|
|
36
|
+
},
|
|
37
|
+
patio: {
|
|
38
|
+
name: 'Patio',
|
|
39
|
+
drop: PORCH_FLOOR_DROP,
|
|
40
|
+
finish: 'library:concrete-raw',
|
|
41
|
+
covered: false,
|
|
42
|
+
floorTag: 'porch-slab',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export function isOutdoorRoomType(value) {
|
|
46
|
+
return typeof value === 'string' && OUTDOOR_ROOM_TYPES.includes(value);
|
|
47
|
+
}
|
|
48
|
+
/** Whether a room is one of the outdoor room types. */
|
|
49
|
+
export function isOutdoorRoom(zone) {
|
|
50
|
+
return isOutdoorRoomType(zone.roomType);
|
|
51
|
+
}
|
|
52
|
+
/** "Porch", "Porch 2", …: the next free name for a room of `type` among `names`. */
|
|
53
|
+
export function nextOutdoorRoomName(type, names) {
|
|
54
|
+
const base = OUTDOOR_ROOM_DEFAULTS[type].name;
|
|
55
|
+
const taken = new Set(names);
|
|
56
|
+
if (!taken.has(base))
|
|
57
|
+
return base;
|
|
58
|
+
for (let n = 2;; n++)
|
|
59
|
+
if (!taken.has(`${base} ${n}`))
|
|
60
|
+
return `${base} ${n}`;
|
|
61
|
+
}
|
|
62
|
+
/** Whether `name` is a type's default name ("Deck", "Deck 3"), so a type change may rename it. */
|
|
63
|
+
export function isOutdoorRoomDefaultName(name) {
|
|
64
|
+
return (typeof name === 'string' &&
|
|
65
|
+
OUTDOOR_ROOM_TYPES.some((type) => new RegExp(`^${OUTDOOR_ROOM_DEFAULTS[type].name}( \\d+)?$`).test(name)));
|
|
66
|
+
}
|
|
@@ -92,6 +92,14 @@ export declare function plateOpeningLandings(context: PlateLevelContext): import
|
|
|
92
92
|
* `platePartitionSignature`. Returns `null` for anything that is not an
|
|
93
93
|
* unrecessed floor plate — manual slabs and pools keep the plain two-slot path.
|
|
94
94
|
*/
|
|
95
|
+
/**
|
|
96
|
+
* The doorways cut out of `plate`, each its wall's span past both faces (whole, so a cut never
|
|
97
|
+
* runs along the plate's own edge): those of the openings reaching below their floor (a negative
|
|
98
|
+
* sill: a garage door down to the garage floor sunk beside its wall) where the plate stands above
|
|
99
|
+
* the opening's bottom. The doorway is then open from its bottom to its head on both faces, with
|
|
100
|
+
* no strip of the floor the wall stands on left across it.
|
|
101
|
+
*/
|
|
102
|
+
export declare function plateDoorwayCuts(plate: SlabNode, context: PlateLevelContext): MultiPolygon;
|
|
95
103
|
export declare function computePlateSurfacePartition(plate: SlabNode, context: PlateLevelContext): PlateSurfacePartition | null;
|
|
96
104
|
/**
|
|
97
105
|
* The doorway keys of every step `zoneId` owns on its level — what the room
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plate-surface.d.ts","sourceRoot":"","sources":["../../src/lib/plate-surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"plate-surface.d.ts","sourceRoot":"","sources":["../../src/lib/plate-surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,WAAW,CAAA;AAelB,OAAO,EAIL,KAAK,YAAY,EAIlB,MAAM,mBAAmB,CAAA;AAG1B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,iFAAiF;AACjF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE1D,MAAM,MAAM,YAAY,GAAG;IACzB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,YAAY,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrB,IAAI,EAAE,aAAa,CAAA;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,gEAAgE;IAChE,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,+DAA+D;IAC/D,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C,CAAA;AAmCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,OAAO,CAEtE;AAED,qFAAqF;AACrF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAQpD;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAGtE;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,GAC9C,iBAAiB,CA6BnB;AA2DD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAuB3F;AAmBD,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,YAAY,CAkBvE;AAiSD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,yDAE9D;AA+ND;;;;GAIG;AACH;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAY1F;AA6BD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,iBAAiB,GACzB,qBAAqB,GAAG,IAAI,CAuB9B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAeV;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,IAAI,IAAI,CAI9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAChC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,SAAS,SAAO,GACf,aAAa,CAEf;AA6BD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,qBAAqB,EAChC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8C1F"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_SLAB_ELEVATION } from '../schema/nodes/slab.js';
|
|
2
|
-
import { getWallCurveFrameAt, getWallCurveStationAtPoint } from '../systems/wall/wall-curve.js';
|
|
2
|
+
import { getWallCurveFrameAt, getWallCurveLength, getWallCurveStationAtPoint, isCurvedWall, } from '../systems/wall/wall-curve.js';
|
|
3
3
|
import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
|
|
4
|
+
import { getWallFaceOffsets } from '../systems/wall/wall-frame.js';
|
|
4
5
|
import { openingLandings } from './floor-opening-footprints.js';
|
|
5
6
|
import { floorRoomFaces } from './floor-room-faces.js';
|
|
6
7
|
import { exposedIntervals } from './level-footprints.js';
|
|
@@ -566,7 +567,13 @@ function classifySides(plate, top, context, prepared) {
|
|
|
566
567
|
...(hi < b ? [[hi, b]] : []),
|
|
567
568
|
]);
|
|
568
569
|
const role = adjacent || neighbour ? 'riser' : 'edge';
|
|
569
|
-
|
|
570
|
+
// A base plate's side facing into one of its own holes (a void, a stairwell) belongs to the
|
|
571
|
+
// room around the hole, so it can wear that room's floor edge rather than the facade's.
|
|
572
|
+
const holeOwner = plate.plateRole === 'base' &&
|
|
573
|
+
top.some(({ outer }) => containsPoint([{ outer, holes: [] }], outside))
|
|
574
|
+
? zones.find((entry) => containsPoint(entry.polygon, inside))?.zone.id
|
|
575
|
+
: undefined;
|
|
576
|
+
const owner = role === 'riser' || plate.plateRole !== 'base' ? ownerId : holeOwner;
|
|
570
577
|
// A door jamb's side of the step meets the aperture only at its edge, so
|
|
571
578
|
// the doorway is looked for on both sides of the face too.
|
|
572
579
|
const doorway = opening ??
|
|
@@ -600,6 +607,48 @@ const partitionCache = new Map();
|
|
|
600
607
|
* `platePartitionSignature`. Returns `null` for anything that is not an
|
|
601
608
|
* unrecessed floor plate — manual slabs and pools keep the plain two-slot path.
|
|
602
609
|
*/
|
|
610
|
+
/**
|
|
611
|
+
* The doorways cut out of `plate`, each its wall's span past both faces (whole, so a cut never
|
|
612
|
+
* runs along the plate's own edge): those of the openings reaching below their floor (a negative
|
|
613
|
+
* sill: a garage door down to the garage floor sunk beside its wall) where the plate stands above
|
|
614
|
+
* the opening's bottom. The doorway is then open from its bottom to its head on both faces, with
|
|
615
|
+
* no strip of the floor the wall stands on left across it.
|
|
616
|
+
*/
|
|
617
|
+
export function plateDoorwayCuts(plate, context) {
|
|
618
|
+
if (!isFloorPlate(plate) || plate.recessed || plate.polygon.length < 3)
|
|
619
|
+
return [];
|
|
620
|
+
const elevation = plate.elevation ?? DEFAULT_SLAB_ELEVATION;
|
|
621
|
+
const top = slabTop(plate);
|
|
622
|
+
return union(levelInputs(context).openings.flatMap(({ opening, wall, cut }) => {
|
|
623
|
+
if (opening.position[1] - opening.height / 2 >= -BELOW_FLOOR_SILL)
|
|
624
|
+
return [];
|
|
625
|
+
if (cut.bottom >= elevation - 1e-3)
|
|
626
|
+
return [];
|
|
627
|
+
const band = doorwayBand(wall, opening);
|
|
628
|
+
return area(intersection(band, top)) > 0 ? [band] : [];
|
|
629
|
+
}));
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* The doorway's span of the wall, past both faces by {@link DOORWAY_OVERSHOOT}: a plate edge a few
|
|
633
|
+
* millimetres off the face (a plate drawn to the wall's line, a wall a hair out of square) would
|
|
634
|
+
* otherwise leave a sliver whose side face shows as a bar across the doorway.
|
|
635
|
+
*/
|
|
636
|
+
function doorwayBand(wall, opening) {
|
|
637
|
+
const length = getWallCurveLength(wall);
|
|
638
|
+
const from = Math.max(0, (opening.position[0] - opening.width / 2) / length);
|
|
639
|
+
const to = Math.min(1, (opening.position[0] + opening.width / 2) / length);
|
|
640
|
+
const faces = getWallFaceOffsets(wall);
|
|
641
|
+
const count = isCurvedWall(wall) ? Math.max(2, Math.ceil((to - from) * 96)) : 1;
|
|
642
|
+
const side = (offset) => Array.from({ length: count + 1 }, (_, i) => {
|
|
643
|
+
const frame = getWallCurveFrameAt(wall, from + ((to - from) * i) / count);
|
|
644
|
+
return [frame.point.x + frame.normal.x * offset, frame.point.y + frame.normal.y * offset];
|
|
645
|
+
});
|
|
646
|
+
return [...side(faces.a + DOORWAY_OVERSHOOT), ...side(faces.b - DOORWAY_OVERSHOOT).reverse()];
|
|
647
|
+
}
|
|
648
|
+
/** How far past each wall face a doorway is cut out of the plates it crosses. */
|
|
649
|
+
const DOORWAY_OVERSHOOT = 0.02;
|
|
650
|
+
/** A sill this far under its floor reaches below it; nearer is the floor (rounding). */
|
|
651
|
+
const BELOW_FLOOR_SILL = 1e-3;
|
|
603
652
|
export function computePlateSurfacePartition(plate, context) {
|
|
604
653
|
if (!isFloorPlate(plate) || plate.recessed || plate.polygon.length < 3)
|
|
605
654
|
return null;
|
|
@@ -607,7 +656,8 @@ export function computePlateSurfacePartition(plate, context) {
|
|
|
607
656
|
const cached = partitionCache.get(signature);
|
|
608
657
|
if (cached)
|
|
609
658
|
return cached;
|
|
610
|
-
const
|
|
659
|
+
const doorways = plateDoorwayCuts(plate, context);
|
|
660
|
+
const top = doorways.length ? difference(slabTop(plate), doorways) : slabTop(plate);
|
|
611
661
|
if (!top.length)
|
|
612
662
|
return null;
|
|
613
663
|
const wallCover = levelWallCover(context.walls);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { AnyNode, AnyNodeId, SlabNode, ZoneNode } from '../schema/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* A porch's posts and beams (`lib/porch-framing`), kept by the structure kernel as it keeps a
|
|
4
|
+
* room's floor and ceiling: made when a covered porch has an open side, moved with the porch,
|
|
5
|
+
* rebuilt when its framing settings change, removed when it stops being a covered porch. A deck
|
|
6
|
+
* or patio gets the same once they are switched on, to carry a roof over it. They are ordinary
|
|
7
|
+
* post and beam nodes. Moving, resizing or deleting one hands the room's framing to the user
|
|
8
|
+
* (`porchFraming.auto: false`): framing edited by hand stops rebuilding; turning it back on
|
|
9
|
+
* rebuilds it.
|
|
10
|
+
*/
|
|
11
|
+
type Nodes = Readonly<Record<string, AnyNode>>;
|
|
12
|
+
/** What the kernel stamps on a porch part: the porch, which part, and what it made it as. */
|
|
13
|
+
export type PorchPartMetadata = {
|
|
14
|
+
porchOf: string;
|
|
15
|
+
porchPart: string;
|
|
16
|
+
porchSeed: string;
|
|
17
|
+
};
|
|
18
|
+
/** The porch a post or beam was made for, when the kernel made it. */
|
|
19
|
+
export declare function porchPartOf(node: AnyNode | null | undefined): PorchPartMetadata | null;
|
|
20
|
+
/** Keep generated parts linked when reconciliation assigns their room its stable ID. */
|
|
21
|
+
export declare function remapPorchOwner(metadata: Record<string, unknown> | undefined, ids: ReadonlyMap<string, string>): Record<string, unknown> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* A porch part's id and shape, for the structure sync to notice a hand edit or a delete (and run
|
|
24
|
+
* the kernel, which hands the porch's framing over); null for any other node.
|
|
25
|
+
*/
|
|
26
|
+
export declare function porchPartSignature(node: AnyNode | null | undefined): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* The kernel's porch framing pass over one level: which posts and beams to put and delete, and
|
|
29
|
+
* the porches whose framing a hand edit has handed to the user. `zones` are the level's rooms as
|
|
30
|
+
* the pass leaves them, `plates` its floor plates, `current` a node as the pass has it so far;
|
|
31
|
+
* `previousNodes` (the scene before the edit) tells a deleted part from one never made.
|
|
32
|
+
*/
|
|
33
|
+
export declare function reconcilePorchFraming({ levelId, nodes, previousNodes, zones, plates, current, mintId, }: {
|
|
34
|
+
levelId: string;
|
|
35
|
+
nodes: Nodes;
|
|
36
|
+
previousNodes?: Nodes;
|
|
37
|
+
zones: readonly ZoneNode[];
|
|
38
|
+
plates: readonly SlabNode[];
|
|
39
|
+
current: (id: string) => AnyNode | undefined;
|
|
40
|
+
mintId: (kind: 'column' | 'beam') => string;
|
|
41
|
+
}): {
|
|
42
|
+
put: AnyNode[];
|
|
43
|
+
delete: AnyNodeId[];
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=porch-framing-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porch-framing-sync.d.ts","sourceRoot":"","sources":["../../src/lib/porch-framing-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAYvE;;;;;;;;GAQG;AAEH,KAAK,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAG9C,6FAA6F;AAC7F,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzF,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAMtF;AAED,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AAmBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAElF;AA0HD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,aAAa,EACb,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,GACP,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,KAAK,CAAA;IACZ,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAA;IAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAA;CAC5C,GAAG;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAmE1C"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { beamBottomElevation, createBeam } from './beam.js';
|
|
2
|
+
import { createFramingPost, FRAMING_POST_MIN_HEIGHT, framingPostFields, framingPostSize, } from './framing-post.js';
|
|
3
|
+
import { planPorchFraming, porchFramingSettings } from './porch-framing.js';
|
|
4
|
+
/** The porch a post or beam was made for, when the kernel made it. */
|
|
5
|
+
export function porchPartOf(node) {
|
|
6
|
+
if (node?.type !== 'column' && node?.type !== 'beam')
|
|
7
|
+
return null;
|
|
8
|
+
const metadata = node.metadata;
|
|
9
|
+
return typeof metadata?.porchOf === 'string' && typeof metadata.porchPart === 'string'
|
|
10
|
+
? metadata
|
|
11
|
+
: null;
|
|
12
|
+
}
|
|
13
|
+
/** Keep generated parts linked when reconciliation assigns their room its stable ID. */
|
|
14
|
+
export function remapPorchOwner(metadata, ids) {
|
|
15
|
+
return typeof metadata?.porchOf === 'string' && ids.has(metadata.porchOf)
|
|
16
|
+
? { ...metadata, porchOf: ids.get(metadata.porchOf) }
|
|
17
|
+
: undefined;
|
|
18
|
+
}
|
|
19
|
+
const round = (value) => Math.round(value * 1e6) / 1e6;
|
|
20
|
+
/** A part's shape, as it was made: anything else is a hand edit. */
|
|
21
|
+
function seedOf(part) {
|
|
22
|
+
if (part.type === 'column')
|
|
23
|
+
return JSON.stringify([part.position[0], part.position[2], part.width, part.depth, part.height, part.rotation].map(round));
|
|
24
|
+
return JSON.stringify([
|
|
25
|
+
...[...part.start, ...part.end, part.width, part.depth].map(round),
|
|
26
|
+
part.topElevation === undefined ? null : round(part.topElevation),
|
|
27
|
+
part.placement,
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A porch part's id and shape, for the structure sync to notice a hand edit or a delete (and run
|
|
32
|
+
* the kernel, which hands the porch's framing over); null for any other node.
|
|
33
|
+
*/
|
|
34
|
+
export function porchPartSignature(node) {
|
|
35
|
+
return porchPartOf(node) ? JSON.stringify([node.id, seedOf(node)]) : null;
|
|
36
|
+
}
|
|
37
|
+
function edited(part) {
|
|
38
|
+
return seedOf(part) !== porchPartOf(part)?.porchSeed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A room the kernel frames, still closed and its framing automatic: a covered porch (automatic
|
|
42
|
+
* unless switched off), or a deck or patio whose posts and beam are switched on (`auto: true`, to
|
|
43
|
+
* carry a roof over it; off by default).
|
|
44
|
+
*/
|
|
45
|
+
function framedPorch(zone) {
|
|
46
|
+
if (!zone || zone.enclosureStatus === 'open')
|
|
47
|
+
return false;
|
|
48
|
+
if (zone.roomType === 'porch')
|
|
49
|
+
return zone.hasCeiling !== false && zone.porchFraming?.auto !== false;
|
|
50
|
+
return coverOptional(zone) && zone.porchFraming?.auto === true;
|
|
51
|
+
}
|
|
52
|
+
/** A deck or patio: its posts and beam are off until switched on. */
|
|
53
|
+
function coverOptional(zone) {
|
|
54
|
+
return zone.roomType === 'deck' || zone.roomType === 'patio';
|
|
55
|
+
}
|
|
56
|
+
/** The floor plate a porch's posts stand on: its own step-down plate, else the one it shares. */
|
|
57
|
+
function porchPlate(zone, plates) {
|
|
58
|
+
const holding = plates.filter((plate) => plate.zoneIds?.includes(zone.id));
|
|
59
|
+
return holding.find((plate) => plate.plateRole !== 'base') ?? holding[0];
|
|
60
|
+
}
|
|
61
|
+
const yawOf = (start, end) => Math.atan2(-(end[1] - start[1]), end[0] - start[0]);
|
|
62
|
+
function withPorch(node, zone, key) {
|
|
63
|
+
const metadata = { porchOf: zone.id, porchPart: key, porchSeed: '' };
|
|
64
|
+
const tagged = { ...node, metadata: { ...node.metadata, ...metadata } };
|
|
65
|
+
tagged.metadata.porchSeed = seedOf(tagged);
|
|
66
|
+
return tagged;
|
|
67
|
+
}
|
|
68
|
+
/** The porch's planned parts as nodes, reusing the ids (and the touches) of the ones it has. */
|
|
69
|
+
function buildParts(zone, plan, owned, plate, levelId, nodes, mintId) {
|
|
70
|
+
const settings = porchFramingSettings(zone);
|
|
71
|
+
const byKey = new Map(owned.map((part) => [porchPartOf(part).porchPart, part]));
|
|
72
|
+
const beams = new Map();
|
|
73
|
+
for (const planned of plan.beams) {
|
|
74
|
+
const existing = byKey.get(planned.key);
|
|
75
|
+
const fresh = createBeam({
|
|
76
|
+
start: planned.start,
|
|
77
|
+
end: planned.end,
|
|
78
|
+
preset: settings.beamSize,
|
|
79
|
+
levelId,
|
|
80
|
+
supportSlabId: plate?.id,
|
|
81
|
+
name: `${zone.name} beam`,
|
|
82
|
+
});
|
|
83
|
+
const beam = existing?.type === 'beam'
|
|
84
|
+
? {
|
|
85
|
+
...existing,
|
|
86
|
+
start: fresh.start,
|
|
87
|
+
end: fresh.end,
|
|
88
|
+
width: fresh.width,
|
|
89
|
+
depth: fresh.depth,
|
|
90
|
+
size: fresh.size,
|
|
91
|
+
plies: fresh.plies,
|
|
92
|
+
material: fresh.material,
|
|
93
|
+
placement: 'dropped',
|
|
94
|
+
topElevation: undefined,
|
|
95
|
+
supportSlabId: plate?.id,
|
|
96
|
+
}
|
|
97
|
+
: { ...fresh, id: mintId('beam') };
|
|
98
|
+
beams.set(planned.key, withPorch(beam, zone, planned.key));
|
|
99
|
+
}
|
|
100
|
+
const foot = plate?.elevation ?? 0;
|
|
101
|
+
const posts = plan.posts.map((planned) => {
|
|
102
|
+
// Up to the underside of the beam it carries (the lower of two at a corner).
|
|
103
|
+
const bottoms = planned.beams.flatMap((key) => {
|
|
104
|
+
const beam = beams.get(key);
|
|
105
|
+
return beam ? [beamBottomElevation(nodes, beam)] : [];
|
|
106
|
+
});
|
|
107
|
+
const height = Math.max(FRAMING_POST_MIN_HEIGHT, Math.min(...bottoms) - foot);
|
|
108
|
+
const run = plan.beams.find((beam) => beam.key === planned.beams.at(-1));
|
|
109
|
+
const rotation = run ? yawOf(run.start, run.end) : 0;
|
|
110
|
+
const existing = byKey.get(planned.key);
|
|
111
|
+
const position = [planned.position[0], 0, planned.position[1]];
|
|
112
|
+
const post = existing?.type === 'column'
|
|
113
|
+
? {
|
|
114
|
+
...existing,
|
|
115
|
+
...(framingPostSize(existing) === settings.postSize
|
|
116
|
+
? {}
|
|
117
|
+
: framingPostFields(settings.postSize, existing.postBase ?? 'post-base')),
|
|
118
|
+
position,
|
|
119
|
+
rotation,
|
|
120
|
+
height,
|
|
121
|
+
supportSlabId: plate?.id,
|
|
122
|
+
}
|
|
123
|
+
: {
|
|
124
|
+
...createFramingPost({
|
|
125
|
+
position: planned.position,
|
|
126
|
+
size: settings.postSize,
|
|
127
|
+
base: 'post-base',
|
|
128
|
+
height,
|
|
129
|
+
levelId,
|
|
130
|
+
supportSlabId: plate?.id,
|
|
131
|
+
rotation,
|
|
132
|
+
name: `${zone.name} post`,
|
|
133
|
+
}),
|
|
134
|
+
id: mintId('column'),
|
|
135
|
+
};
|
|
136
|
+
return withPorch(post, zone, planned.key);
|
|
137
|
+
});
|
|
138
|
+
return [...beams.values(), ...posts];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The kernel's porch framing pass over one level: which posts and beams to put and delete, and
|
|
142
|
+
* the porches whose framing a hand edit has handed to the user. `zones` are the level's rooms as
|
|
143
|
+
* the pass leaves them, `plates` its floor plates, `current` a node as the pass has it so far;
|
|
144
|
+
* `previousNodes` (the scene before the edit) tells a deleted part from one never made.
|
|
145
|
+
*/
|
|
146
|
+
export function reconcilePorchFraming({ levelId, nodes, previousNodes, zones, plates, current, mintId, }) {
|
|
147
|
+
const put = [];
|
|
148
|
+
const remove = [];
|
|
149
|
+
const owned = new Map();
|
|
150
|
+
for (const node of Object.values(nodes)) {
|
|
151
|
+
const part = porchPartOf(node);
|
|
152
|
+
if (!part || node.parentId !== levelId)
|
|
153
|
+
continue;
|
|
154
|
+
const latest = (current(node.id) ?? node);
|
|
155
|
+
owned.set(part.porchOf, [...(owned.get(part.porchOf) ?? []), latest]);
|
|
156
|
+
}
|
|
157
|
+
const zonesById = new Map(zones.map((zone) => [zone.id, zone]));
|
|
158
|
+
// A porch gone, or no longer a covered one: what it made goes with it; a part edited by hand
|
|
159
|
+
// stays, the user's own. A deck's or patio's switched off goes whole, edited or not.
|
|
160
|
+
for (const [zoneId, parts] of owned) {
|
|
161
|
+
const zone = zonesById.get(zoneId);
|
|
162
|
+
if (framedPorch(zone) || zone?.porchFraming?.auto === false)
|
|
163
|
+
continue;
|
|
164
|
+
const switchedOff = !!zone && coverOptional(zone) && zone.porchFraming?.auto === undefined;
|
|
165
|
+
for (const part of parts) {
|
|
166
|
+
if (switchedOff || !edited(part))
|
|
167
|
+
remove.push(part.id);
|
|
168
|
+
else {
|
|
169
|
+
const { porchOf: _porchOf, porchPart: _porchPart, porchSeed: _seed, ...metadata } = part.metadata;
|
|
170
|
+
put.push({ ...part, metadata });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
for (const zone of zones) {
|
|
175
|
+
if (!framedPorch(zone))
|
|
176
|
+
continue;
|
|
177
|
+
const parts = owned.get(zone.id) ?? [];
|
|
178
|
+
const before = previousNodes?.[zone.id];
|
|
179
|
+
const settingsChanged = before?.type !== 'zone' ||
|
|
180
|
+
before.roomType !== zone.roomType ||
|
|
181
|
+
JSON.stringify(before.porchFraming ?? null) !== JSON.stringify(zone.porchFraming ?? null);
|
|
182
|
+
const plan = planPorchFraming(zone, nodes);
|
|
183
|
+
if (!settingsChanged) {
|
|
184
|
+
// A part of the plan gone since the edit before: deleted by hand. (One the plan dropped
|
|
185
|
+
// went with an earlier pass.)
|
|
186
|
+
const planned = new Set([...plan.posts, ...plan.beams].map((part) => part.key));
|
|
187
|
+
const deleted = Object.values(previousNodes ?? {}).some((node) => {
|
|
188
|
+
const part = porchPartOf(node);
|
|
189
|
+
return part?.porchOf === zone.id && planned.has(part.porchPart) && !nodes[node.id];
|
|
190
|
+
});
|
|
191
|
+
if (deleted || parts.some(edited)) {
|
|
192
|
+
put.push({ ...zone, porchFraming: { ...zone.porchFraming, auto: false } });
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const built = buildParts(zone, plan,
|
|
197
|
+
// Settings changed: what a hand made goes too; the porch is rebuilt from its settings.
|
|
198
|
+
parts, porchPlate(zone, plates), levelId, nodes, mintId);
|
|
199
|
+
const kept = new Set(built.map((part) => part.id));
|
|
200
|
+
for (const part of parts)
|
|
201
|
+
if (!kept.has(part.id))
|
|
202
|
+
remove.push(part.id);
|
|
203
|
+
put.push(...built);
|
|
204
|
+
}
|
|
205
|
+
return { put, delete: remove };
|
|
206
|
+
}
|