@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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { BELOW_GRADE_TOLERANCE, getLevelElevations, isLevelBelowGrade, levelPlaneWorldY, } from '../services/storey.js';
|
|
2
2
|
import { pointInPolygon } from '../systems/slab/slab-support.js';
|
|
3
|
+
import { getWallCurveFrameAt, getWallCurveLength } from '../systems/wall/wall-curve.js';
|
|
4
|
+
import { getWallFaceOffsets } from '../systems/wall/wall-frame.js';
|
|
3
5
|
import { levelUnderNamedGround } from './ground-level.js';
|
|
6
|
+
import { getOpeningFloorDatum } from './opening-floor-datum.js';
|
|
7
|
+
import { area, intersection, union } from './polygon-boolean.js';
|
|
4
8
|
import { isSiteFlatwork } from './site-flatwork.js';
|
|
5
9
|
import { heightAt } from './terrain-field.js';
|
|
6
10
|
import { terrainFieldOf } from './terrain-source.js';
|
|
@@ -58,7 +62,7 @@ function flatFloorsStanding(nodes, level, fallback) {
|
|
|
58
62
|
const slabs = floorSlabsOf(nodes, level);
|
|
59
63
|
if (slabs.length === 0)
|
|
60
64
|
return fallback;
|
|
61
|
-
const buried = slabs.filter((slab) => floorBuriedOnFlatSite(plane + slab
|
|
65
|
+
const buried = slabs.filter((slab) => floorBuriedOnFlatSite(plane + slabGradeElevation(nodes, level, slab))).length;
|
|
62
66
|
if (buried === 0)
|
|
63
67
|
return 'at-grade';
|
|
64
68
|
return buried === slabs.length ? 'below-grade' : 'partly-below-grade';
|
|
@@ -67,18 +71,134 @@ function flatFloorsStanding(nodes, level, fallback) {
|
|
|
67
71
|
export function floorBuriedOnFlatSite(floorY) {
|
|
68
72
|
return SITE_DATUM_Y - floorY > BELOW_GRADE_TOLERANCE;
|
|
69
73
|
}
|
|
70
|
-
|
|
74
|
+
const floorSlabsMemo = new WeakMap();
|
|
75
|
+
/**
|
|
76
|
+
* The floor slabs of the house on a level: not a basin, not site flatwork, with a plan, and on a
|
|
77
|
+
* level with rooms, under one of them. A slab outside every room (an entry pad, a stoop) is the
|
|
78
|
+
* site's, as flatwork is, not a floor the ground can bury.
|
|
79
|
+
*/
|
|
71
80
|
function floorSlabsOf(nodes, level) {
|
|
81
|
+
let levels = floorSlabsMemo.get(nodes);
|
|
82
|
+
if (!levels) {
|
|
83
|
+
levels = new Map();
|
|
84
|
+
floorSlabsMemo.set(nodes, levels);
|
|
85
|
+
}
|
|
86
|
+
const hit = levels.get(level.id);
|
|
87
|
+
if (hit)
|
|
88
|
+
return hit;
|
|
72
89
|
const slabs = [];
|
|
90
|
+
const rooms = [];
|
|
73
91
|
for (const childId of level.children) {
|
|
74
|
-
const
|
|
75
|
-
if (
|
|
92
|
+
const child = nodes[childId];
|
|
93
|
+
if (child?.type === 'zone' && child.spaceRole === 'room' && child.polygon.length >= 3)
|
|
94
|
+
rooms.push({ outer: child.polygon, holes: child.holes ?? [] });
|
|
95
|
+
if (child?.type !== 'slab' || child.recessed === true || child.polygon.length < 3)
|
|
76
96
|
continue;
|
|
77
|
-
if (isSiteFlatwork(
|
|
97
|
+
if (isSiteFlatwork(child))
|
|
78
98
|
continue;
|
|
79
|
-
slabs.push(
|
|
99
|
+
slabs.push(child);
|
|
100
|
+
}
|
|
101
|
+
const indoors = rooms.length ? union(rooms) : null;
|
|
102
|
+
const floors = indoors
|
|
103
|
+
? slabs.filter((slab) => area(intersection(slab.polygon, indoors)) > OUTDOOR_SLAB_AREA)
|
|
104
|
+
: slabs;
|
|
105
|
+
levels.set(level.id, floors);
|
|
106
|
+
return floors;
|
|
107
|
+
}
|
|
108
|
+
/** A slab sharing less than this with the level's rooms (m²) stands outside them. */
|
|
109
|
+
const OUTDOOR_SLAB_AREA = 1e-3;
|
|
110
|
+
/** How far past a wall's face a door's two sides are looked at. */
|
|
111
|
+
const DOOR_SIDE_REACH = 0.1;
|
|
112
|
+
const gradeElevationsMemo = new WeakMap();
|
|
113
|
+
/**
|
|
114
|
+
* The level-local elevation the ground is judged against over a floor slab: its own top, except
|
|
115
|
+
* for a floor sunk under its level's floor that opens to the outside through a door reaching down
|
|
116
|
+
* to it (a garage below the house, its door onto the drive). The ground outside that door comes
|
|
117
|
+
* down to it, so it is no basement: it is judged at its level's floor, and does not leave the
|
|
118
|
+
* level partly below grade.
|
|
119
|
+
*/
|
|
120
|
+
export function slabGradeElevation(nodes, level, slab) {
|
|
121
|
+
let levels = gradeElevationsMemo.get(nodes);
|
|
122
|
+
if (!levels) {
|
|
123
|
+
levels = new Map();
|
|
124
|
+
gradeElevationsMemo.set(nodes, levels);
|
|
125
|
+
}
|
|
126
|
+
let walkOuts = levels.get(level.id);
|
|
127
|
+
if (!walkOuts) {
|
|
128
|
+
walkOuts = sunkenFloorsOpeningOut(nodes, level);
|
|
129
|
+
levels.set(level.id, walkOuts);
|
|
130
|
+
}
|
|
131
|
+
return walkOuts.get(slab.id) ?? slab.elevation;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The world Y of `level`'s lowest floor as the ground judges it ({@link slabGradeElevation}): a
|
|
135
|
+
* garage sunk under the floor and opening out to the drive leaves it at the level's floor. `null`
|
|
136
|
+
* for a level with no floor slab, or no plane.
|
|
137
|
+
*/
|
|
138
|
+
export function levelGradeFloorWorldY(nodes, level) {
|
|
139
|
+
const plane = levelPlaneWorldY(nodes, level.id);
|
|
140
|
+
const slabs = floorSlabsOf(nodes, level);
|
|
141
|
+
if (plane === null || slabs.length === 0)
|
|
142
|
+
return null;
|
|
143
|
+
return plane + Math.min(...slabs.map((slab) => slabGradeElevation(nodes, level, slab)));
|
|
144
|
+
}
|
|
145
|
+
/** {@link slabGradeElevation}'s exceptions on `level`: slab id to the level floor it is judged at. */
|
|
146
|
+
function sunkenFloorsOpeningOut(nodes, level) {
|
|
147
|
+
const walkOuts = new Map();
|
|
148
|
+
const slabs = floorSlabsOf(nodes, level);
|
|
149
|
+
if (slabs.length < 2)
|
|
150
|
+
return walkOuts;
|
|
151
|
+
const floor = Math.max(...slabs.map((slab) => slab.elevation));
|
|
152
|
+
const floorsAt = ([x, z]) => slabs.filter((slab) => pointInPolygon(x, z, slab.polygon));
|
|
153
|
+
for (const wallId of level.children) {
|
|
154
|
+
const wall = nodes[wallId];
|
|
155
|
+
if (wall?.type !== 'wall')
|
|
156
|
+
continue;
|
|
157
|
+
const length = getWallCurveLength(wall);
|
|
158
|
+
if (length < 1e-9)
|
|
159
|
+
continue;
|
|
160
|
+
const faces = getWallFaceOffsets(wall);
|
|
161
|
+
for (const doorId of wall.children ?? []) {
|
|
162
|
+
const door = nodes[doorId];
|
|
163
|
+
if (door?.type !== 'door')
|
|
164
|
+
continue;
|
|
165
|
+
const { position, height } = door;
|
|
166
|
+
// A raw legacy door places itself by `offset` until it is loaded.
|
|
167
|
+
if (!Array.isArray(position))
|
|
168
|
+
continue;
|
|
169
|
+
const bottom = getOpeningFloorDatum(wall, door, nodes) + position[1] - height / 2;
|
|
170
|
+
const frame = getWallCurveFrameAt(wall, position[0] / length);
|
|
171
|
+
const side = (offset) => [
|
|
172
|
+
frame.point.x + frame.normal.x * offset,
|
|
173
|
+
frame.point.y + frame.normal.y * offset,
|
|
174
|
+
];
|
|
175
|
+
const a = floorsAt(side(faces.a + DOOR_SIDE_REACH));
|
|
176
|
+
const b = floorsAt(side(faces.b - DOOR_SIDE_REACH));
|
|
177
|
+
// A door between a floor and no floor at all opens to the outside.
|
|
178
|
+
const inside = a.length === 0 ? b : b.length === 0 ? a : [];
|
|
179
|
+
for (const slab of inside)
|
|
180
|
+
if (slab.elevation < floor && bottom <= slab.elevation + BELOW_GRADE_TOLERANCE)
|
|
181
|
+
walkOuts.set(slab.id, floor);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// The rest of that floor: a garage's floor may be several plates at its height (of its room, or
|
|
185
|
+
// joining the one the door is on).
|
|
186
|
+
for (let grown = walkOuts.size > 0; grown;) {
|
|
187
|
+
grown = false;
|
|
188
|
+
for (const slab of slabs) {
|
|
189
|
+
if (walkOuts.has(slab.id))
|
|
190
|
+
continue;
|
|
191
|
+
const joined = slabs.some((other) => walkOuts.has(other.id) &&
|
|
192
|
+
Math.abs(other.elevation - slab.elevation) < 1e-3 &&
|
|
193
|
+
((slab.zoneIds ?? []).some((id) => other.zoneIds?.includes(id)) ||
|
|
194
|
+
union([slab.polygon, other.polygon]).length === 1));
|
|
195
|
+
if (joined) {
|
|
196
|
+
walkOuts.set(slab.id, floor);
|
|
197
|
+
grown = true;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
80
200
|
}
|
|
81
|
-
return
|
|
201
|
+
return walkOuts;
|
|
82
202
|
}
|
|
83
203
|
/** The site's terrain field for the site this level stands on, or null on a flat site. */
|
|
84
204
|
export function terrainFieldOverLevel(nodes, level) {
|
|
@@ -91,7 +211,7 @@ export function terrainFieldOverLevel(nodes, level) {
|
|
|
91
211
|
/**
|
|
92
212
|
* World XZ samples over the level's floor slabs: each slab's corners plus a grid across it no
|
|
93
213
|
* coarser than the terrain's own spacing, capped so a big plate stays cheap. Slabs are the
|
|
94
|
-
* footprint the
|
|
214
|
+
* footprint the ground's hole already trusts (`belowGradeFootprints`).
|
|
95
215
|
*/
|
|
96
216
|
export function footprintSamples(nodes, level, field) {
|
|
97
217
|
return footprintFloorSamples(nodes, level, field).map(([x, z]) => [x, z]);
|
|
@@ -112,7 +232,7 @@ export function footprintFloorSamples(nodes, level, field) {
|
|
|
112
232
|
for (const slab of floorSlabsOf(nodes, level)) {
|
|
113
233
|
for (const [x, z] of slabSamples(slab.polygon, field.spacing)) {
|
|
114
234
|
const [worldX, worldZ] = levelLocalToWorldXZ(placed, x, z);
|
|
115
|
-
samples.push([worldX, worldZ, plane + slab
|
|
235
|
+
samples.push([worldX, worldZ, plane + slabGradeElevation(nodes, level, slab)]);
|
|
116
236
|
}
|
|
117
237
|
}
|
|
118
238
|
return samples;
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import type { AnyNode, AnyNodeId, LevelNode } from '../schema/index.js';
|
|
2
|
-
|
|
3
|
-
/** How far the ground floor's datum may stand from its seat and still count as seated on it. */
|
|
2
|
+
/** How far the ground floor's datum may stand from grade and still count as seated on it. */
|
|
4
3
|
export declare const GROUND_SEAT_TOLERANCE = 0.05;
|
|
5
|
-
/**
|
|
6
|
-
* Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
|
|
7
|
-
* on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
|
|
8
|
-
* in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
|
|
9
|
-
* least 8 in from exposed ground. A building's region and style can choose another construction
|
|
10
|
-
* and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
|
|
11
|
-
*/
|
|
12
|
-
export declare const GROUND_FLOOR_ABOVE_GRADE: number;
|
|
13
4
|
/**
|
|
14
5
|
* The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
|
|
15
6
|
* terrain the ground's mean height over the level's floor slabs (the building's own origin when it
|
|
@@ -28,19 +19,8 @@ export type GroundSeat = {
|
|
|
28
19
|
gradeElevation: number;
|
|
29
20
|
/** How far the floor datum stands over grade: negative when it is sunk. */
|
|
30
21
|
offset: number;
|
|
31
|
-
/**
|
|
32
|
-
aboveGrade: number;
|
|
33
|
-
/** The construction, the region and style it was read from. */
|
|
34
|
-
foundation: FoundationReading;
|
|
35
|
-
/**
|
|
36
|
-
* The floor datum stands between grade and the foundation's top (`aboveGrade`, or the block's
|
|
37
|
-
* 8 in where that is higher), within {@link GROUND_SEAT_TOLERANCE}: what a scene seated before
|
|
38
|
-
* the 8 in rule, one seated by it and one seated by its own region's construction all satisfy,
|
|
39
|
-
* so a check has nothing to say about any of them.
|
|
40
|
-
*/
|
|
22
|
+
/** The floor datum stands on grade, within {@link GROUND_SEAT_TOLERANCE}. */
|
|
41
23
|
seated: boolean;
|
|
42
|
-
/** The floor datum stands at `aboveGrade` over grade, within the tolerance. */
|
|
43
|
-
atFoundationTop: boolean;
|
|
44
24
|
};
|
|
45
25
|
/** `null` for an id that is no building, or a building with no level at or over the ground. */
|
|
46
26
|
export declare function groundSeat(nodes: Record<AnyNodeId, AnyNode>, buildingId: string): GroundSeat | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ground-seat.d.ts","sourceRoot":"","sources":["../../src/lib/ground-seat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ground-seat.d.ts","sourceRoot":"","sources":["../../src/lib/ground-seat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAgB,SAAS,EAAE,MAAM,WAAW,CAAA;AAO5E,6FAA6F;AAC7F,eAAO,MAAM,qBAAqB,OAAO,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAa3F;AAED,4DAA4D;AAC5D,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAA;IACjB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAA;IACtB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,IAAI,CAenB"}
|
package/dist/lib/ground-seat.js
CHANGED
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
import { getStoreyDatum } from '../services/storey-datum.js';
|
|
2
|
-
import { FOUNDATION_CONSTRUCTIONS, foundationReadingOf, } from './foundation-construction.js';
|
|
3
2
|
import { footprintSamples, terrainFieldOverLevel } from './grade-standing.js';
|
|
4
3
|
import { groundLevelOf } from './ground-level.js';
|
|
5
4
|
import { heightAt } from './terrain-field.js';
|
|
6
5
|
import { levelLocalToWorldXZ, SITE_DATUM_Y } from './terrain-support-query.js';
|
|
7
|
-
/** How far the ground floor's datum may stand from
|
|
6
|
+
/** How far the ground floor's datum may stand from grade and still count as seated on it. */
|
|
8
7
|
export const GROUND_SEAT_TOLERANCE = 0.05;
|
|
9
|
-
/**
|
|
10
|
-
* Where "Set as ground floor" and `set_ground_level` stand the ground floor over finished grade
|
|
11
|
-
* on the generic (block) foundation: the top of the foundation, where the wood framing starts, 8
|
|
12
|
-
* in (0.203 m) above the ground. IRC R317.1 keeps wood framing resting on a foundation wall at
|
|
13
|
-
* least 8 in from exposed ground. A building's region and style can choose another construction
|
|
14
|
-
* and its own seat (`GroundSeat.aboveGrade`, `FOUNDATION_CONSTRUCTIONS`).
|
|
15
|
-
*/
|
|
16
|
-
export const GROUND_FLOOR_ABOVE_GRADE = FOUNDATION_CONSTRUCTIONS.cmu.seatAboveGrade;
|
|
17
8
|
/**
|
|
18
9
|
* The grade a level's floor is seated against: the flat datum on a flat site, and on shaped
|
|
19
10
|
* terrain the ground's mean height over the level's floor slabs (the building's own origin when it
|
|
@@ -43,8 +34,6 @@ export function groundSeat(nodes, buildingId) {
|
|
|
43
34
|
return null;
|
|
44
35
|
const gradeElevation = gradeUnderLevel(nodes, ground.level);
|
|
45
36
|
const offset = datum.floorElevation - gradeElevation;
|
|
46
|
-
const foundation = foundationReadingOf(nodes, buildingId);
|
|
47
|
-
const aboveGrade = foundation.construction.seatAboveGrade;
|
|
48
37
|
return {
|
|
49
38
|
buildingId,
|
|
50
39
|
levelId: ground.level.id,
|
|
@@ -52,10 +41,6 @@ export function groundSeat(nodes, buildingId) {
|
|
|
52
41
|
floorElevation: datum.floorElevation,
|
|
53
42
|
gradeElevation,
|
|
54
43
|
offset,
|
|
55
|
-
|
|
56
|
-
foundation,
|
|
57
|
-
seated: offset >= -GROUND_SEAT_TOLERANCE &&
|
|
58
|
-
offset <= Math.max(aboveGrade, GROUND_FLOOR_ABOVE_GRADE) + GROUND_SEAT_TOLERANCE,
|
|
59
|
-
atFoundationTop: Math.abs(offset - aboveGrade) <= GROUND_SEAT_TOLERANCE,
|
|
44
|
+
seated: Math.abs(offset) <= GROUND_SEAT_TOLERANCE,
|
|
60
45
|
};
|
|
61
46
|
}
|
|
@@ -11,7 +11,8 @@ export type GroundBox = {
|
|
|
11
11
|
};
|
|
12
12
|
/**
|
|
13
13
|
* The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
|
|
14
|
-
* lowest floor (the sunken room of a split level
|
|
14
|
+
* lowest floor (the sunken room of a split level; not a garage sunk under the floor that opens out
|
|
15
|
+
* to the drive, whose ground comes down to it) to the height of its highest floor's ceiling.
|
|
15
16
|
*/
|
|
16
17
|
export declare function levelGroundBox(nodes: Record<AnyNodeId, AnyNode>, levelId: string): GroundBox | null;
|
|
17
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ground-window.d.ts","sourceRoot":"","sources":["../../src/lib/ground-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"ground-window.d.ts","sourceRoot":"","sources":["../../src/lib/ground-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAA2B,MAAM,WAAW,CAAA;AAQ5E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAExF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CASlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,GAAG,IAAI,CASlB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAUlB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,GACb,OAAO,CAwBT"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { getLevelElevations, levelFloorWorldY, levelLowestFloorWorldY } from '../services/storey.js';
|
|
2
|
+
import { levelGradeFloorWorldY } from './grade-standing.js';
|
|
2
3
|
import { isSiteFlatwork } from './site-flatwork.js';
|
|
3
4
|
import { heightAt } from './terrain-field.js';
|
|
4
5
|
import { terrainFieldOf } from './terrain-source.js';
|
|
5
6
|
import { levelLocalToWorldXZ } from './terrain-support-query.js';
|
|
6
7
|
/**
|
|
7
8
|
* The world box of one level: its floor slabs' extent (its walls' if it has no slab), from its
|
|
8
|
-
* lowest floor (the sunken room of a split level
|
|
9
|
+
* lowest floor (the sunken room of a split level; not a garage sunk under the floor that opens out
|
|
10
|
+
* to the drive, whose ground comes down to it) to the height of its highest floor's ceiling.
|
|
9
11
|
*/
|
|
10
12
|
export function levelGroundBox(nodes, levelId) {
|
|
11
13
|
const level = nodes[levelId];
|
|
@@ -16,7 +18,8 @@ export function levelGroundBox(nodes, levelId) {
|
|
|
16
18
|
const points = footprintPoints(nodes, level);
|
|
17
19
|
if (points.length === 0)
|
|
18
20
|
return null;
|
|
19
|
-
|
|
21
|
+
const lowest = levelGradeFloorWorldY(nodes, level) ?? levelLowestFloorWorldY(nodes, levelId);
|
|
22
|
+
return boxOf(points, lowest ?? floorY, floorY + height);
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
25
|
* The world box of a building (every building, with no id): the union of its levels' boxes.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AnyNode, AnyNodeId } from '../schema/types.js';
|
|
2
|
+
type NodeMap = Readonly<Record<string, Pick<AnyNode, 'parentId'>>>;
|
|
3
|
+
type NodeLookup = (id: AnyNodeId) => Pick<AnyNode, 'parentId'> | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* Whether assigning `newParentId` to `nodeId` would put `nodeId` on a cycle of
|
|
6
|
+
* parent links. A cycle the chain already holds without `nodeId` is not one it
|
|
7
|
+
* creates: counting it would refuse every edit beneath an old cyclic scene.
|
|
8
|
+
*/
|
|
9
|
+
export declare function wouldCreateHierarchyCycle(nodeId: AnyNodeId, newParentId: AnyNodeId | null, nodes: NodeMap | NodeLookup): boolean;
|
|
10
|
+
/** Return each distinct cycle encoded by `parentId` links. */
|
|
11
|
+
export declare function findHierarchyCycles(nodes: NodeMap): AnyNodeId[][];
|
|
12
|
+
/** The `parentId` error each node on a cycle raises, as every scene check lists it. */
|
|
13
|
+
export declare function hierarchyCycleErrors(nodes: NodeMap): {
|
|
14
|
+
nodeId: AnyNodeId;
|
|
15
|
+
path: 'parentId';
|
|
16
|
+
message: string;
|
|
17
|
+
}[];
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=hierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../src/lib/hierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEzD,KAAK,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;AAClE,KAAK,UAAU,GAAG,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,SAAS,CAAA;AAE1E;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,GAAG,IAAI,EAC7B,KAAK,EAAE,OAAO,GAAG,UAAU,GAC1B,OAAO,CAaT;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,CAwBjE;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAK5D"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether assigning `newParentId` to `nodeId` would put `nodeId` on a cycle of
|
|
3
|
+
* parent links. A cycle the chain already holds without `nodeId` is not one it
|
|
4
|
+
* creates: counting it would refuse every edit beneath an old cyclic scene.
|
|
5
|
+
*/
|
|
6
|
+
export function wouldCreateHierarchyCycle(nodeId, newParentId, nodes) {
|
|
7
|
+
if (!newParentId)
|
|
8
|
+
return false;
|
|
9
|
+
const nodeAt = typeof nodes === 'function' ? nodes : (id) => nodes[id];
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
let currentId = newParentId;
|
|
12
|
+
while (currentId) {
|
|
13
|
+
if (currentId === nodeId)
|
|
14
|
+
return true;
|
|
15
|
+
if (seen.has(currentId))
|
|
16
|
+
return false;
|
|
17
|
+
seen.add(currentId);
|
|
18
|
+
currentId = nodeAt(currentId)?.parentId ?? null;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
/** Return each distinct cycle encoded by `parentId` links. */
|
|
23
|
+
export function findHierarchyCycles(nodes) {
|
|
24
|
+
const visited = new Set();
|
|
25
|
+
const cycles = [];
|
|
26
|
+
for (const startId of Object.keys(nodes)) {
|
|
27
|
+
if (visited.has(startId))
|
|
28
|
+
continue;
|
|
29
|
+
const chain = [];
|
|
30
|
+
const positions = new Map();
|
|
31
|
+
let currentId = startId;
|
|
32
|
+
while (currentId && nodes[currentId] && !visited.has(currentId)) {
|
|
33
|
+
const position = positions.get(currentId);
|
|
34
|
+
if (position !== undefined) {
|
|
35
|
+
cycles.push(chain.slice(position));
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
positions.set(currentId, chain.length);
|
|
39
|
+
chain.push(currentId);
|
|
40
|
+
currentId = nodes[currentId]?.parentId ?? null;
|
|
41
|
+
}
|
|
42
|
+
for (const id of chain)
|
|
43
|
+
visited.add(id);
|
|
44
|
+
}
|
|
45
|
+
return cycles;
|
|
46
|
+
}
|
|
47
|
+
/** The `parentId` error each node on a cycle raises, as every scene check lists it. */
|
|
48
|
+
export function hierarchyCycleErrors(nodes) {
|
|
49
|
+
return findHierarchyCycles(nodes).flatMap((cycle) => {
|
|
50
|
+
const message = `hierarchy cycle detected: ${[...cycle, cycle[0]].join(' -> ')}`;
|
|
51
|
+
return cycle.map((nodeId) => ({ nodeId, path: 'parentId', message }));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -2,6 +2,8 @@ import type { WallNode } from '../schema/index.js';
|
|
|
2
2
|
import { type MultiPolygon } from './polygon-boolean.js';
|
|
3
3
|
import type { LevelFootprintContext, TopologyRoom } from './room-topology-index.js';
|
|
4
4
|
export declare function roomWallFootprints(rooms: readonly TopologyRoom[]): MultiPolygon;
|
|
5
|
+
/** The footprints of the railings round `room` (a deck's guard): no house wall among them. */
|
|
6
|
+
export declare function roomRailingFootprints(room: TopologyRoom): MultiPolygon;
|
|
5
7
|
export declare function roomClearPolygon(room: TopologyRoom): MultiPolygon;
|
|
6
8
|
/** Rooms must belong to the same immutable level topology revision. */
|
|
7
9
|
export declare function plateFootprint(rooms: readonly TopologyRoom[]): MultiPolygon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"level-footprints.d.ts","sourceRoot":"","sources":["../../src/lib/level-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"level-footprints.d.ts","sourceRoot":"","sources":["../../src/lib/level-footprints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAMzC,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAmLhF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAE/E;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAMtE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CASjE;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CA8F3E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AA2ED,mGAAmG;AACnG,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,qBAAqB,EAClD,KAAK,CAAC,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAC7D,eAAe,EAAE,CA2EnB;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isRailingWall } from '../schema/nodes/railing-wall.js';
|
|
1
2
|
import { getWallSurfacePolygon, isCurvedWall } from '../systems/wall/wall-curve.js';
|
|
2
3
|
import { calculateLevelMiters, getWallPlanFootprint } from '../systems/wall/wall-footprint.js';
|
|
3
4
|
import { getWallFaceLine } from '../systems/wall/wall-frame.js';
|
|
@@ -165,6 +166,12 @@ function recoverWallFootprint(plate, footprint, context) {
|
|
|
165
166
|
export function roomWallFootprints(rooms) {
|
|
166
167
|
return union(boundaryFootprints(rooms).map(({ polygon }) => polygon));
|
|
167
168
|
}
|
|
169
|
+
/** The footprints of the railings round `room` (a deck's guard): no house wall among them. */
|
|
170
|
+
export function roomRailingFootprints(room) {
|
|
171
|
+
return union(boundaryFootprints([room])
|
|
172
|
+
.filter(({ id }) => isRailingWall(room.context.walls.get(id)))
|
|
173
|
+
.map(({ polygon }) => polygon));
|
|
174
|
+
}
|
|
168
175
|
export function roomClearPolygon(room) {
|
|
169
176
|
const cached = clearCache.get(room);
|
|
170
177
|
if (cached)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { AnyNode, DoorNode, WallFace, WindowNode } from '../schema/index.js';
|
|
2
|
+
import { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD } from '../schema/nodes/opening-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Door and window casing: flat boards on the finished faces of the host wall
|
|
5
|
+
* around the opening, over the drywall or siding. The wall cutout is the unit's
|
|
6
|
+
* own width × height and the casing never reaches into it: each board starts at
|
|
7
|
+
* the cutout's edge and runs outward, `OPENING_CASING_PROUD` off the face. A
|
|
8
|
+
* window gets a picture frame (head, two legs, bottom), a door a head and two
|
|
9
|
+
* legs, butted at the corners: the head and bottom run the full width over the
|
|
10
|
+
* legs' ends.
|
|
11
|
+
*
|
|
12
|
+
* Everything here is in the host frame, centred on the opening: x along the
|
|
13
|
+
* host toward its end, y up, z across it toward face `a`. The 3D builders turn
|
|
14
|
+
* that into the unit's own frame (a unit facing the back is turned half round,
|
|
15
|
+
* see `openingHostFacing`); the plan draws it as it is.
|
|
16
|
+
*/
|
|
17
|
+
export { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD };
|
|
18
|
+
type CasedOpening = DoorNode | WindowNode;
|
|
19
|
+
export type OpeningCasingHost = {
|
|
20
|
+
/** The host's total thickness with its finishes: each face is half of it off the mid-plane (m). */
|
|
21
|
+
thickness: number;
|
|
22
|
+
/** Room side, when known, for a window's interior stool. */
|
|
23
|
+
interiorFace?: WallFace;
|
|
24
|
+
exteriorFace?: WallFace;
|
|
25
|
+
/** The host end a corner window runs to: no leg there; the head and bottom stop at the opening. */
|
|
26
|
+
cornerEnd?: 'start' | 'end';
|
|
27
|
+
};
|
|
28
|
+
export type OpeningCasingFace = {
|
|
29
|
+
face: WallFace;
|
|
30
|
+
/** Across the host, from the opening's centre plane to the finished face (m). */
|
|
31
|
+
plane: number;
|
|
32
|
+
/** The way the face looks across the host: +1 for `a`, -1 for `b`. */
|
|
33
|
+
out: 1 | -1;
|
|
34
|
+
};
|
|
35
|
+
export type OpeningCasingBoard = {
|
|
36
|
+
face: WallFace;
|
|
37
|
+
/**
|
|
38
|
+
* `leg` boards stand beside the opening, the part a plan cut shows. A `foot` carries a leg on
|
|
39
|
+
* down past a window's sill to the bottom board, which sits under the sill on that face.
|
|
40
|
+
*/
|
|
41
|
+
part: 'head' | 'leg' | 'foot' | 'bottom';
|
|
42
|
+
/** Centre, from the opening's centre in the host frame (m). */
|
|
43
|
+
center: [number, number, number];
|
|
44
|
+
/** Along the host, up, across it (m). */
|
|
45
|
+
size: [number, number, number];
|
|
46
|
+
};
|
|
47
|
+
/** The face width of an opening's casing boards; a save from before casing has the default. */
|
|
48
|
+
export declare function openingCasingWidth(opening: Pick<CasedOpening, 'casingWidth'>): number;
|
|
49
|
+
/**
|
|
50
|
+
* +1 when the unit faces the host's front (its own +z is face `a`), -1 when it is turned half
|
|
51
|
+
* round to face the back, which mirrors its x and z against the host's.
|
|
52
|
+
*/
|
|
53
|
+
export declare function openingHostFacing(opening: Partial<Pick<CasedOpening, 'rotation'>>): 1 | -1;
|
|
54
|
+
/** Roof face a is outside; an unbounded wall follows the same a/outside, b/inside convention. */
|
|
55
|
+
export declare function openingInteriorFace(opening: Pick<CasedOpening, 'parentId' | 'roofSegmentId'>, nodes: Readonly<Record<string, AnyNode>>): WallFace;
|
|
56
|
+
/**
|
|
57
|
+
* The host an opening is cased on: its wall, or the roof-segment face it is cut into (a gable
|
|
58
|
+
* end, whose face `a` is the outside). Null where casing has nowhere to go: a curtain wall, a
|
|
59
|
+
* railing (its openings are gaps in the guard), a dormer face, a unit built from a script (its
|
|
60
|
+
* script draws its own trim).
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveOpeningCasingHost(opening: CasedOpening, nodes: Readonly<Record<string, AnyNode>>, host?: AnyNode | undefined): OpeningCasingHost | null;
|
|
63
|
+
/** The host faces an opening is cased on: both unless turned off (a save from before has both). */
|
|
64
|
+
export declare function openingCasingFaces(opening: Pick<CasedOpening, 'position' | 'casingFaceA' | 'casingFaceB'>, host: OpeningCasingHost): OpeningCasingFace[];
|
|
65
|
+
/** The casing boards of a rectangular opening on each face it is cased on, in the host frame. */
|
|
66
|
+
export declare function openingCasingBoards(opening: CasedOpening, host: OpeningCasingHost): OpeningCasingBoard[];
|
|
67
|
+
//# sourceMappingURL=opening-casing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-casing.d.ts","sourceRoot":"","sources":["../../src/lib/opening-casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOlG;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,CAAA;AAE7D,KAAK,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAA;AAIzC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mGAAmG;IACnG,SAAS,EAAE,MAAM,CAAA;IACjB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,YAAY,CAAC,EAAE,QAAQ,CAAA;IACvB,mGAAmG;IACnG,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd;;;OAGG;IACH,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACxC,+DAA+D;IAC/D,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,yCAAyC;IACzC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,+FAA+F;AAC/F,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,MAAM,CAGrF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAE1F;AAED,iGAAiG;AACjG,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC,EACzD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,QAAQ,CAKV;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,IAAI,GAAE,OAAO,GAAG,SAAkE,GACjF,iBAAiB,GAAG,IAAI,CA2B1B;AAED,mGAAmG;AACnG,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC,EACvE,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,EAAE,CAOrB;AAcD,iGAAiG;AACjG,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,iBAAiB,GACtB,kBAAkB,EAAE,CAoCtB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD } from '../schema/nodes/opening-types.js';
|
|
2
|
+
import { DEFAULT_WALL_THICKNESS, getWallThickness } from '../systems/wall/wall-footprint.js';
|
|
3
|
+
import { roomSideFaces } from '../systems/wall/wall-room-sides.js';
|
|
4
|
+
import { cornerPair } from './corner-pair.js';
|
|
5
|
+
import { getDoorOpeningSize } from './door-opening.js';
|
|
6
|
+
import { openingExteriorFace } from './opening-exterior-face.js';
|
|
7
|
+
/**
|
|
8
|
+
* Door and window casing: flat boards on the finished faces of the host wall
|
|
9
|
+
* around the opening, over the drywall or siding. The wall cutout is the unit's
|
|
10
|
+
* own width × height and the casing never reaches into it: each board starts at
|
|
11
|
+
* the cutout's edge and runs outward, `OPENING_CASING_PROUD` off the face. A
|
|
12
|
+
* window gets a picture frame (head, two legs, bottom), a door a head and two
|
|
13
|
+
* legs, butted at the corners: the head and bottom run the full width over the
|
|
14
|
+
* legs' ends.
|
|
15
|
+
*
|
|
16
|
+
* Everything here is in the host frame, centred on the opening: x along the
|
|
17
|
+
* host toward its end, y up, z across it toward face `a`. The 3D builders turn
|
|
18
|
+
* that into the unit's own frame (a unit facing the back is turned half round,
|
|
19
|
+
* see `openingHostFacing`); the plan draws it as it is.
|
|
20
|
+
*/
|
|
21
|
+
export { DEFAULT_OPENING_CASING_WIDTH, OPENING_CASING_PROUD };
|
|
22
|
+
/** The face width of an opening's casing boards; a save from before casing has the default. */
|
|
23
|
+
export function openingCasingWidth(opening) {
|
|
24
|
+
const width = opening.casingWidth;
|
|
25
|
+
return typeof width === 'number' && width > 0 ? width : DEFAULT_OPENING_CASING_WIDTH;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* +1 when the unit faces the host's front (its own +z is face `a`), -1 when it is turned half
|
|
29
|
+
* round to face the back, which mirrors its x and z against the host's.
|
|
30
|
+
*/
|
|
31
|
+
export function openingHostFacing(opening) {
|
|
32
|
+
return Math.cos(opening.rotation?.[1] ?? 0) >= 0 ? 1 : -1;
|
|
33
|
+
}
|
|
34
|
+
/** Roof face a is outside; an unbounded wall follows the same a/outside, b/inside convention. */
|
|
35
|
+
export function openingInteriorFace(opening, nodes) {
|
|
36
|
+
if (!opening.roofSegmentId && opening.parentId && nodes[opening.parentId]?.type === 'wall') {
|
|
37
|
+
return roomSideFaces(nodes, opening.parentId).inside ?? 'b';
|
|
38
|
+
}
|
|
39
|
+
return 'b';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The host an opening is cased on: its wall, or the roof-segment face it is cut into (a gable
|
|
43
|
+
* end, whose face `a` is the outside). Null where casing has nowhere to go: a curtain wall, a
|
|
44
|
+
* railing (its openings are gaps in the guard), a dormer face, a unit built from a script (its
|
|
45
|
+
* script draws its own trim).
|
|
46
|
+
*/
|
|
47
|
+
export function resolveOpeningCasingHost(opening, nodes, host = nodes[opening.roofSegmentId ?? opening.parentId ?? '']) {
|
|
48
|
+
if (opening.source)
|
|
49
|
+
return null;
|
|
50
|
+
const exteriorFace = opening.type === 'window' ? openingExteriorFace(opening, nodes) : undefined;
|
|
51
|
+
const interior = opening.type === 'window'
|
|
52
|
+
? {
|
|
53
|
+
exteriorFace,
|
|
54
|
+
...(opening.sillInterior
|
|
55
|
+
? {
|
|
56
|
+
interiorFace: exteriorFace === 'a' ? 'b' : 'a',
|
|
57
|
+
}
|
|
58
|
+
: {}),
|
|
59
|
+
}
|
|
60
|
+
: {};
|
|
61
|
+
if (opening.roofSegmentId) {
|
|
62
|
+
return host?.type === 'roof-segment'
|
|
63
|
+
? { thickness: host.wallThickness ?? DEFAULT_WALL_THICKNESS, ...interior }
|
|
64
|
+
: null;
|
|
65
|
+
}
|
|
66
|
+
if (host?.type !== 'wall' || host.wallType === 'curtain' || host.wallType === 'railing')
|
|
67
|
+
return null;
|
|
68
|
+
const pair = opening.type === 'window' ? cornerPair(nodes, opening) : null;
|
|
69
|
+
return {
|
|
70
|
+
thickness: getWallThickness(host),
|
|
71
|
+
...interior,
|
|
72
|
+
...(pair ? { cornerEnd: pair.end } : {}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** The host faces an opening is cased on: both unless turned off (a save from before has both). */
|
|
76
|
+
export function openingCasingFaces(opening, host) {
|
|
77
|
+
const offset = opening.position[2] ?? 0;
|
|
78
|
+
const half = host.thickness / 2;
|
|
79
|
+
const faces = [];
|
|
80
|
+
if (opening.casingFaceA === true)
|
|
81
|
+
faces.push({ face: 'a', plane: half - offset, out: 1 });
|
|
82
|
+
if (opening.casingFaceB === true)
|
|
83
|
+
faces.push({ face: 'b', plane: -half - offset, out: -1 });
|
|
84
|
+
return faces;
|
|
85
|
+
}
|
|
86
|
+
/** The casing bottom clears whichever sill is on this host face. */
|
|
87
|
+
function sillDrop(opening, face, host) {
|
|
88
|
+
if (opening.type !== 'window' || opening.openingKind === 'opening')
|
|
89
|
+
return 0;
|
|
90
|
+
const front = host.exteriorFace ?? (openingHostFacing(opening) === 1 ? 'a' : 'b');
|
|
91
|
+
return Math.max(opening.sill && face === front ? Math.max(opening.sillThickness ?? 0, 0) : 0, opening.sillInterior && face === (host.interiorFace ?? 'b')
|
|
92
|
+
? (opening.sillInteriorThickness ?? 0.03)
|
|
93
|
+
: 0);
|
|
94
|
+
}
|
|
95
|
+
/** The casing boards of a rectangular opening on each face it is cased on, in the host frame. */
|
|
96
|
+
export function openingCasingBoards(opening, host) {
|
|
97
|
+
const width = openingCasingWidth(opening);
|
|
98
|
+
const proud = OPENING_CASING_PROUD;
|
|
99
|
+
const size = getDoorOpeningSize(opening);
|
|
100
|
+
const halfWidth = size.width / 2;
|
|
101
|
+
const halfHeight = size.height / 2;
|
|
102
|
+
const offsetX = -size.leafOffsetX * openingHostFacing(opening);
|
|
103
|
+
const offsetY = (size.height - opening.height) / 2;
|
|
104
|
+
const corner = host.cornerEnd === 'start' ? -1 : host.cornerEnd === 'end' ? 1 : 0;
|
|
105
|
+
const left = -halfWidth - (corner === -1 ? 0 : width);
|
|
106
|
+
const right = halfWidth + (corner === 1 ? 0 : width);
|
|
107
|
+
const legs = [-1, 1]
|
|
108
|
+
.filter((side) => side !== corner)
|
|
109
|
+
.map((side) => side < 0 ? [-halfWidth - width, -halfWidth] : [halfWidth, halfWidth + width]);
|
|
110
|
+
const boards = [];
|
|
111
|
+
for (const { face, plane, out } of openingCasingFaces(opening, host)) {
|
|
112
|
+
const z = plane + (out * proud) / 2;
|
|
113
|
+
const board = (part, [x0, x1], [y0, y1]) => boards.push({
|
|
114
|
+
face,
|
|
115
|
+
part,
|
|
116
|
+
center: [(x0 + x1) / 2 + offsetX, (y0 + y1) / 2 + offsetY, z],
|
|
117
|
+
size: [x1 - x0, y1 - y0, proud],
|
|
118
|
+
});
|
|
119
|
+
board('head', [left, right], [halfHeight, halfHeight + width]);
|
|
120
|
+
for (const along of legs)
|
|
121
|
+
board('leg', along, [-halfHeight, halfHeight]);
|
|
122
|
+
if (opening.type !== 'window')
|
|
123
|
+
continue;
|
|
124
|
+
const drop = sillDrop(opening, face, host);
|
|
125
|
+
if (drop > 1e-6)
|
|
126
|
+
for (const along of legs)
|
|
127
|
+
board('foot', along, [-halfHeight - drop, -halfHeight]);
|
|
128
|
+
board('bottom', [left, right], [-halfHeight - drop - width, -halfHeight - drop]);
|
|
129
|
+
}
|
|
130
|
+
return boards;
|
|
131
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AnyNode, WallFace, WindowNode } from '../schema/index.js';
|
|
2
|
+
type Opening = Pick<WindowNode, 'parentId' | 'wallId' | 'roofSegmentId' | 'dormerId' | 'side' | 'rotation'>;
|
|
3
|
+
/** The unoccupied face; ambiguous walls retain the placement face. Generated roof faces face out on a. */
|
|
4
|
+
export declare function openingExteriorFace(opening: Opening, nodes: Readonly<Record<string, AnyNode>>): WallFace;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=opening-exterior-face.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-exterior-face.d.ts","sourceRoot":"","sources":["../../src/lib/opening-exterior-face.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAG9D,KAAK,OAAO,GAAG,IAAI,CACjB,UAAU,EACV,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAC3E,CAAA;AAED,0GAA0G;AAC1G,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,QAAQ,CASV"}
|