@pascal-app/core 1.0.5 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1164 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +38 -2
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +257 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +1667 -866
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +55 -11
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +4 -6
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +5951 -4351
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +1 -0
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +115 -7
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +121 -29
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +888 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -24
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +32 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -15
- package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +205 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +60 -35
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +38 -6
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +112 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +5 -2
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/types.d.ts +65 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +224 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +57 -10
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +135 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +42 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1079 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +6 -3
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +13 -8
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +846 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1057 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +166 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +2124 -1322
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +42 -16
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +31 -11
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +6751 -5151
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +85 -4
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +28 -7
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +2 -2
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +6 -1
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +118 -10
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1930 -1130
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AnyNode, ZoneNode } from '../schema/index.js';
|
|
2
|
+
import { type FramingPostSize } from './framing-post.js';
|
|
3
|
+
/** Post faces sit this far in from the slab edge. */
|
|
4
|
+
export declare const PORCH_POST_SETBACK: number;
|
|
5
|
+
/** Posts no more than 8 ft apart (the porch generator's and DCA 6's limit). */
|
|
6
|
+
export declare const PORCH_POST_SPACING: number;
|
|
7
|
+
export type PorchFramingSettings = {
|
|
8
|
+
/** A framing post size (`FRAMING_POST_SIZES`). */
|
|
9
|
+
postSize: FramingPostSize;
|
|
10
|
+
postSpacing: number;
|
|
11
|
+
/** A stock beam size id (`BEAM_SIZE_PRESETS`). */
|
|
12
|
+
beamSize: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const DEFAULT_PORCH_FRAMING: PorchFramingSettings;
|
|
15
|
+
/** A porch's framing settings: its own, else the defaults (an unknown size is the default). */
|
|
16
|
+
export declare function porchFramingSettings(zone: Pick<ZoneNode, 'porchFraming'>): PorchFramingSettings;
|
|
17
|
+
type P = [number, number];
|
|
18
|
+
export type PorchPostPlan = {
|
|
19
|
+
/** Stable within the porch: which corner or side, and which bay. */
|
|
20
|
+
key: string;
|
|
21
|
+
position: P;
|
|
22
|
+
/** Actual post width (square). */
|
|
23
|
+
size: number;
|
|
24
|
+
/** The beams (their keys) it stands under: two at a corner, one along a side. */
|
|
25
|
+
beams: string[];
|
|
26
|
+
};
|
|
27
|
+
export type PorchBeamPlan = {
|
|
28
|
+
key: string;
|
|
29
|
+
start: P;
|
|
30
|
+
end: P;
|
|
31
|
+
width: number;
|
|
32
|
+
depth: number;
|
|
33
|
+
};
|
|
34
|
+
export type PorchFramingPlan = {
|
|
35
|
+
posts: PorchPostPlan[];
|
|
36
|
+
beams: PorchBeamPlan[];
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* The posts and beams for porch `zone` among `nodes` (its level's walls decide which sides are
|
|
40
|
+
* open). Empty when no side is open.
|
|
41
|
+
*/
|
|
42
|
+
export declare function planPorchFraming(zone: Pick<ZoneNode, 'polygon' | 'parentId' | 'porchFraming'>, nodes: Readonly<Record<string, AnyNode>>): PorchFramingPlan;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=porch-framing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"porch-framing.d.ts","sourceRoot":"","sources":["../../src/lib/porch-framing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,QAAQ,EAAE,MAAM,WAAW,CAAA;AAG5D,OAAO,EAAiD,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAepG,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,QAAW,CAAA;AAC1C,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC,MAAM,MAAM,oBAAoB,GAAG;IACjC,kDAAkD;IAClD,QAAQ,EAAE,eAAe,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,oBAInC,CAAA;AAKD,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG,oBAAoB,CAU/F;AAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEzB,MAAM,MAAM,aAAa,GAAG;IAC1B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,CAAC,CAAA;IACX,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,CAAC,CAAA;IACR,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,CAAA;AAkCjF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC,EAC7D,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,gBAAgB,CAqFlB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { DEFAULT_BEAM_SIZE_PRESET_ID } from '../schema/nodes/beam.js';
|
|
2
|
+
import { beamSizePreset } from './beam.js';
|
|
3
|
+
import { DEFAULT_FRAMING_POST_SIZE, FRAMING_POST_SIZES } from './framing-post.js';
|
|
4
|
+
/**
|
|
5
|
+
* Where a porch's posts and beam go (a porch room, `lib/outdoor-room`): a post on each outside
|
|
6
|
+
* corner, where two open sides meet (a porch in a corner of the house gets its one corner post),
|
|
7
|
+
* more along each open side at most `postSpacing` apart, evenly; none where a side meets the house,
|
|
8
|
+
* whose wall carries the beam's end. The beam runs along each open side on the posts, dropped
|
|
9
|
+
* under the porch ceiling. Pure geometry: the structure kernel turns it into post and beam nodes.
|
|
10
|
+
*
|
|
11
|
+
* A side is open when no wall stands on it (an invisible wall) or the wall on it is a railing.
|
|
12
|
+
*/
|
|
13
|
+
const IN = 0.0254;
|
|
14
|
+
const FT = 0.3048;
|
|
15
|
+
/** Post faces sit this far in from the slab edge. */
|
|
16
|
+
export const PORCH_POST_SETBACK = 1.5 * IN;
|
|
17
|
+
/** Posts no more than 8 ft apart (the porch generator's and DCA 6's limit). */
|
|
18
|
+
export const PORCH_POST_SPACING = 8 * FT;
|
|
19
|
+
export const DEFAULT_PORCH_FRAMING = {
|
|
20
|
+
postSize: DEFAULT_FRAMING_POST_SIZE,
|
|
21
|
+
postSpacing: PORCH_POST_SPACING,
|
|
22
|
+
beamSize: DEFAULT_BEAM_SIZE_PRESET_ID,
|
|
23
|
+
};
|
|
24
|
+
const isPostSize = (size) => !!size && Object.hasOwn(FRAMING_POST_SIZES, size);
|
|
25
|
+
/** A porch's framing settings: its own, else the defaults (an unknown size is the default). */
|
|
26
|
+
export function porchFramingSettings(zone) {
|
|
27
|
+
const own = zone.porchFraming;
|
|
28
|
+
return {
|
|
29
|
+
postSize: isPostSize(own?.postSize) ? own.postSize : DEFAULT_PORCH_FRAMING.postSize,
|
|
30
|
+
postSpacing: own?.postSpacing ?? DEFAULT_PORCH_FRAMING.postSpacing,
|
|
31
|
+
beamSize: own?.beamSize && beamSizePreset(own.beamSize)
|
|
32
|
+
? beamSizePreset(own.beamSize).id
|
|
33
|
+
: DEFAULT_PORCH_FRAMING.beamSize,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const sub = (a, b) => [a[0] - b[0], a[1] - b[1]];
|
|
37
|
+
const add = (a, b) => [a[0] + b[0], a[1] + b[1]];
|
|
38
|
+
const scale = (a, s) => [a[0] * s, a[1] * s];
|
|
39
|
+
const len = (a) => Math.hypot(a[0], a[1]);
|
|
40
|
+
const unit = (a) => {
|
|
41
|
+
const l = len(a);
|
|
42
|
+
return l > 1e-12 ? [a[0] / l, a[1] / l] : [0, 0];
|
|
43
|
+
};
|
|
44
|
+
/** The wall standing along `a` → `b` (its reference line on the segment), if any. */
|
|
45
|
+
function wallAlong(a, b, walls) {
|
|
46
|
+
const dir = unit(sub(b, a));
|
|
47
|
+
const mid = scale(add(a, b), 0.5);
|
|
48
|
+
return walls.find((wall) => {
|
|
49
|
+
if ((wall.curveOffset ?? 0) !== 0)
|
|
50
|
+
return false;
|
|
51
|
+
const w = sub(wall.end, wall.start);
|
|
52
|
+
const length = len(w);
|
|
53
|
+
if (length < 1e-6)
|
|
54
|
+
return false;
|
|
55
|
+
const u = scale(w, 1 / length);
|
|
56
|
+
if (Math.abs(u[0] * dir[1] - u[1] * dir[0]) > 1e-3)
|
|
57
|
+
return false;
|
|
58
|
+
const rel = sub(mid, wall.start);
|
|
59
|
+
const across = Math.abs(rel[0] * u[1] - rel[1] * u[0]);
|
|
60
|
+
const along = rel[0] * u[0] + rel[1] * u[1];
|
|
61
|
+
return across < 1e-3 && along > -1e-3 && along < length + 1e-3;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Whether a wall is a railing, which a porch's posts and beam still stand along. */
|
|
65
|
+
function isRailing(wall) {
|
|
66
|
+
return wall.wallType === 'railing';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The posts and beams for porch `zone` among `nodes` (its level's walls decide which sides are
|
|
70
|
+
* open). Empty when no side is open.
|
|
71
|
+
*/
|
|
72
|
+
export function planPorchFraming(zone, nodes) {
|
|
73
|
+
const settings = porchFramingSettings(zone);
|
|
74
|
+
const postSize = FRAMING_POST_SIZES[settings.postSize];
|
|
75
|
+
const beam = beamSizePreset(settings.beamSize);
|
|
76
|
+
const spacing = Math.max(0.6, settings.postSpacing);
|
|
77
|
+
const walls = Object.values(nodes).filter((node) => node.type === 'wall' && node.parentId === zone.parentId);
|
|
78
|
+
const polygon = zone.polygon;
|
|
79
|
+
const n = polygon.length;
|
|
80
|
+
if (n < 3)
|
|
81
|
+
return { posts: [], beams: [] };
|
|
82
|
+
// Inward normals: the polygon's winding decides which side of each edge is inside.
|
|
83
|
+
let area = 0;
|
|
84
|
+
for (let i = 0; i < n; i++) {
|
|
85
|
+
const a = polygon[i];
|
|
86
|
+
const b = polygon[(i + 1) % n];
|
|
87
|
+
area += a[0] * b[1] - b[0] * a[1];
|
|
88
|
+
}
|
|
89
|
+
const turn = area > 0 ? 1 : -1;
|
|
90
|
+
const edges = polygon.map((a, i) => {
|
|
91
|
+
const b = polygon[(i + 1) % n];
|
|
92
|
+
const wall = wallAlong(a, b, walls);
|
|
93
|
+
const dir = unit(sub(b, a));
|
|
94
|
+
const inward = [-dir[1] * turn, dir[0] * turn];
|
|
95
|
+
return { a, b, dir, inward, open: !wall || isRailing(wall), wall };
|
|
96
|
+
});
|
|
97
|
+
const inset = postSize / 2 + PORCH_POST_SETBACK;
|
|
98
|
+
const posts = [];
|
|
99
|
+
const beams = [];
|
|
100
|
+
// The post line of an edge: the edge moved in by the inset.
|
|
101
|
+
const onLine = (edge, p) => add(p, scale(edge.inward, inset));
|
|
102
|
+
// The outside corner where open edge i-1 meets open edge i: the two post lines' crossing.
|
|
103
|
+
const corner = (i) => {
|
|
104
|
+
const prev = edges[(i - 1 + n) % n];
|
|
105
|
+
const next = edges[i];
|
|
106
|
+
const p = onLine(prev, prev.b);
|
|
107
|
+
const q = onLine(next, next.a);
|
|
108
|
+
const denom = prev.dir[0] * next.dir[1] - prev.dir[1] * next.dir[0];
|
|
109
|
+
if (Math.abs(denom) < 1e-9)
|
|
110
|
+
return q;
|
|
111
|
+
const t = ((q[0] - p[0]) * next.dir[1] - (q[1] - p[1]) * next.dir[0]) / denom;
|
|
112
|
+
return add(p, scale(prev.dir, t));
|
|
113
|
+
};
|
|
114
|
+
edges.forEach((edge, i) => {
|
|
115
|
+
if (!edge.open)
|
|
116
|
+
return;
|
|
117
|
+
const prev = edges[(i - 1 + n) % n];
|
|
118
|
+
const next = edges[(i + 1) % n];
|
|
119
|
+
const startCorner = prev.open;
|
|
120
|
+
const endCorner = next.open;
|
|
121
|
+
// A side meeting the house starts at the wall's face, where the beam bears.
|
|
122
|
+
const startFace = startCorner ? 0 : (prev.wall?.thickness ?? 0.15) / 2;
|
|
123
|
+
const endFace = endCorner ? 0 : (next.wall?.thickness ?? 0.15) / 2;
|
|
124
|
+
const start = startCorner ? corner(i) : add(onLine(edge, edge.a), scale(edge.dir, startFace));
|
|
125
|
+
const end = endCorner
|
|
126
|
+
? corner((i + 1) % n)
|
|
127
|
+
: sub(onLine(edge, edge.b), scale(edge.dir, endFace));
|
|
128
|
+
if (startCorner)
|
|
129
|
+
posts.push({
|
|
130
|
+
key: `corner:${i}`,
|
|
131
|
+
position: start,
|
|
132
|
+
size: postSize,
|
|
133
|
+
beams: [`beam:${(i - 1 + n) % n}`, `beam:${i}`],
|
|
134
|
+
});
|
|
135
|
+
const run = sub(end, start);
|
|
136
|
+
const length = len(run);
|
|
137
|
+
if (length < postSize)
|
|
138
|
+
return;
|
|
139
|
+
const bays = Math.max(1, Math.ceil(length / spacing - 1e-9));
|
|
140
|
+
for (let k = 1; k < bays; k++)
|
|
141
|
+
posts.push({
|
|
142
|
+
key: `side:${i}:${k}`,
|
|
143
|
+
position: add(start, scale(run, k / bays)),
|
|
144
|
+
size: postSize,
|
|
145
|
+
beams: [`beam:${i}`],
|
|
146
|
+
});
|
|
147
|
+
// The beam reaches the corner posts' outside faces, so two sides' beams meet over a corner.
|
|
148
|
+
const reachStart = startCorner ? postSize / 2 : 0;
|
|
149
|
+
const reachEnd = endCorner ? postSize / 2 : 0;
|
|
150
|
+
beams.push({
|
|
151
|
+
key: `beam:${i}`,
|
|
152
|
+
start: sub(start, scale(edge.dir, reachStart)),
|
|
153
|
+
end: add(end, scale(edge.dir, reachEnd)),
|
|
154
|
+
width: beam.width,
|
|
155
|
+
depth: beam.depth,
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
return { posts, beams };
|
|
159
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WallNode } from '../schema/index.js';
|
|
2
|
+
import type { BoundarySpan } from './room-topology-index.js';
|
|
3
|
+
/** The ids of the railing walls among `walls`. */
|
|
4
|
+
export declare function railingWallIds(walls: readonly WallNode[]): Set<string>;
|
|
5
|
+
/**
|
|
6
|
+
* The rooms a railing fences off from the outside: a railing on the room's edge with no room
|
|
7
|
+
* standing behind some stretch of it (a deck's or a porch's guard on the storey's outline). A
|
|
8
|
+
* railing is a guard, not an enclosure, so such a room is outside whatever covers it, and a wall
|
|
9
|
+
* it shares with the house faces outdoors. A railing with rooms on both faces (round a stair well,
|
|
10
|
+
* along a loft) leaves them inside.
|
|
11
|
+
*/
|
|
12
|
+
export declare function railingFencedRoomIds(spans: readonly BoundarySpan[], railingIds: ReadonlySet<string>): Set<string>;
|
|
13
|
+
//# sourceMappingURL=railing-rooms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"railing-rooms.d.ts","sourceRoot":"","sources":["../../src/lib/railing-rooms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKzD,kDAAkD;AAClD,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,GAAG,CAAC,MAAM,CAAC,CAwBb"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isRailingWall } from '../schema/nodes/railing-wall.js';
|
|
2
|
+
/** Span overlap below this (a fraction of the boundary) is a shared endpoint, not a shared edge. */
|
|
3
|
+
const SPAN_OVERLAP = 1e-6;
|
|
4
|
+
/** The ids of the railing walls among `walls`. */
|
|
5
|
+
export function railingWallIds(walls) {
|
|
6
|
+
return new Set(walls.flatMap((wall) => (isRailingWall(wall) ? [wall.id] : [])));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The rooms a railing fences off from the outside: a railing on the room's edge with no room
|
|
10
|
+
* standing behind some stretch of it (a deck's or a porch's guard on the storey's outline). A
|
|
11
|
+
* railing is a guard, not an enclosure, so such a room is outside whatever covers it, and a wall
|
|
12
|
+
* it shares with the house faces outdoors. A railing with rooms on both faces (round a stair well,
|
|
13
|
+
* along a loft) leaves them inside.
|
|
14
|
+
*/
|
|
15
|
+
export function railingFencedRoomIds(spans, railingIds) {
|
|
16
|
+
const railings = spans.filter((span) => span.kind === 'wall' && railingIds.has(span.boundaryId));
|
|
17
|
+
const fenced = new Set();
|
|
18
|
+
for (const span of railings) {
|
|
19
|
+
const behind = railings
|
|
20
|
+
.filter((other) => other.boundaryId === span.boundaryId &&
|
|
21
|
+
other.face !== span.face &&
|
|
22
|
+
Math.min(span.t1, other.t1) - Math.max(span.t0, other.t0) > SPAN_OVERLAP)
|
|
23
|
+
.sort((a, b) => a.t0 - b.t0);
|
|
24
|
+
let reach = span.t0;
|
|
25
|
+
let open = false;
|
|
26
|
+
for (const other of behind) {
|
|
27
|
+
if (other.t0 > reach + SPAN_OVERLAP) {
|
|
28
|
+
open = true;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
reach = Math.max(reach, other.t1);
|
|
32
|
+
}
|
|
33
|
+
if (open || reach < span.t1 - SPAN_OVERLAP)
|
|
34
|
+
fenced.add(span.roomId);
|
|
35
|
+
}
|
|
36
|
+
return fenced;
|
|
37
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { type RoofSegmentNode } from '../schema/nodes/roof-segment.js';
|
|
2
|
+
import type { RoofEaveCut } from '../schema/nodes/roof-types.js';
|
|
3
|
+
/** A 1x board's actual thickness: every fascia and rake board is nominal 1x. */
|
|
4
|
+
export declare const FASCIA_THICKNESS: number;
|
|
5
|
+
/** How far a fascia or rake board drops below the tails' lowest point, past a soffit's edge. */
|
|
6
|
+
export declare const FASCIA_DROP: number;
|
|
7
|
+
/** The run of a plumb-and-level tail's level cut: a 2x4's width for the soffit's edge to nail to. */
|
|
8
|
+
export declare const LEVEL_CUT_RUN: number;
|
|
9
|
+
/** A boxed eave's soffit: a 1/2 in panel nailed up to the level cuts. */
|
|
10
|
+
export declare const SOFFIT_THICKNESS: number;
|
|
11
|
+
export type FasciaStock = '1x6' | '1x8' | '1x10' | '1x12';
|
|
12
|
+
/** The 1x boards a fascia or rake board is cut from, narrowest first, at their actual widths. */
|
|
13
|
+
export declare const FASCIA_STOCK: readonly {
|
|
14
|
+
size: FasciaStock;
|
|
15
|
+
width: number;
|
|
16
|
+
}[];
|
|
17
|
+
/**
|
|
18
|
+
* The 1x a board `width` wide is cut from: the narrowest stock as wide, ripped down to it when
|
|
19
|
+
* wider. Past a 1x12 no 1x is wide enough: a ripped width of wider stock (`stock` null).
|
|
20
|
+
*/
|
|
21
|
+
export declare function fasciaStockFor(width: number): {
|
|
22
|
+
stock: FasciaStock | null;
|
|
23
|
+
ripped: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** A point of an eave's section: `s` out from the plate line in plan, `y` up from the plate's plane there. */
|
|
26
|
+
export type EavePoint = readonly [number, number];
|
|
27
|
+
/** The numbers an eave is cut from (`roofEaveProfile`), the roof shell's and Bones' alike. */
|
|
28
|
+
export type RoofEaveInput = {
|
|
29
|
+
/** The slope's tangent, falling outward; 0 for a flat roof, negative where it rises (a shed's high edge). */
|
|
30
|
+
tan: number;
|
|
31
|
+
/** Out from the plate line (the wall's centre line), in plan, to the overhang's end: where the tails are cut. */
|
|
32
|
+
reach: number;
|
|
33
|
+
/** Out from the plate line to the wall's outer face. */
|
|
34
|
+
wallOut: number;
|
|
35
|
+
/** The tails' depth square to the slope: a rafter's, or a truss's top chord. */
|
|
36
|
+
tailDepth: number;
|
|
37
|
+
/**
|
|
38
|
+
* How far the tails' underside stands over the plate's plane, plumb: 0 for a rafter, its bottom
|
|
39
|
+
* chord's depth for a truss's top chord, which rides it at the heel.
|
|
40
|
+
*/
|
|
41
|
+
tailLift: number;
|
|
42
|
+
/** The deck's depth square to the slope, from the plate's plane to the sheathing's top. */
|
|
43
|
+
deckDepth: number;
|
|
44
|
+
/** Absent, plumb. */
|
|
45
|
+
cut?: RoofEaveCut;
|
|
46
|
+
/** The fascia's own height (its width as a board) and thickness, where the plane sets them. */
|
|
47
|
+
fasciaHeight?: number;
|
|
48
|
+
fasciaThickness?: number;
|
|
49
|
+
/** How far the fascia's top stands over the sheathing's: a flat roof's coping band over its membrane. */
|
|
50
|
+
fasciaRise?: number;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* One eave's section, the rule the roof shell's eave edge, fascia and soffit and Bones' rafter tails
|
|
54
|
+
* and fascia are all cut by, so the frame never hangs below the shell nor pokes out of it.
|
|
55
|
+
*/
|
|
56
|
+
export type RoofEaveProfile = {
|
|
57
|
+
/** The cut drawn: a flat eave, or an edge rising outward, is plumb whatever the plane asks. */
|
|
58
|
+
cut: RoofEaveCut;
|
|
59
|
+
tan: number;
|
|
60
|
+
cos: number;
|
|
61
|
+
sin: number;
|
|
62
|
+
reach: number;
|
|
63
|
+
wallOut: number;
|
|
64
|
+
/** The sheathing's top at `s`. */
|
|
65
|
+
top: (s: number) => number;
|
|
66
|
+
/** The tails' underside at `s`. */
|
|
67
|
+
under: (s: number) => number;
|
|
68
|
+
/**
|
|
69
|
+
* The tails' end, from its top corner on the sheathing's top down: a plumb or square cut's two
|
|
70
|
+
* ends, or a plumb cut's and then its level cut's inner end.
|
|
71
|
+
*/
|
|
72
|
+
end: readonly EavePoint[];
|
|
73
|
+
/** The tails' lowest point's height. */
|
|
74
|
+
low: number;
|
|
75
|
+
fascia: {
|
|
76
|
+
/** Its section: back top, front top, front bottom, back bottom. */
|
|
77
|
+
corners: readonly [EavePoint, EavePoint, EavePoint, EavePoint];
|
|
78
|
+
/** Its width as a board: plumb, its height; square to the slope, its depth along its face. */
|
|
79
|
+
height: number;
|
|
80
|
+
thickness: number;
|
|
81
|
+
/** Square to the slope (a `square` cut's), else plumb. */
|
|
82
|
+
square: boolean;
|
|
83
|
+
stock: FasciaStock | null;
|
|
84
|
+
ripped: boolean;
|
|
85
|
+
};
|
|
86
|
+
/** A boxed eave's soffit: its top (on the level cuts) and thickness, from the wall's outer face out to the fascia's back. */
|
|
87
|
+
soffit: {
|
|
88
|
+
y: number;
|
|
89
|
+
thickness: number;
|
|
90
|
+
from: number;
|
|
91
|
+
to: number;
|
|
92
|
+
} | null;
|
|
93
|
+
/**
|
|
94
|
+
* The rake board over a barge rafter on this slope: plumb, its top on the sheathing's top, as deep
|
|
95
|
+
* plumb (`height`) as the fascia is at the corner, or over a boxed eave as the barge with the
|
|
96
|
+
* fascia's drop; `width` is square to its edges, as a board.
|
|
97
|
+
*/
|
|
98
|
+
rake: {
|
|
99
|
+
height: number;
|
|
100
|
+
width: number;
|
|
101
|
+
stock: FasciaStock | null;
|
|
102
|
+
ripped: boolean;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* An eave cut to its plane's rule. The tails reach `reach` out from the plate line along the
|
|
107
|
+
* sheathing's top, the deck's full depth under it:
|
|
108
|
+
* - plumb: the tails cut plumb there; a plumb 1x fascia covers their face, its top flush with the
|
|
109
|
+
* sheathing's top (under the drip edge), its bottom about `FASCIA_DROP` below their lowest point;
|
|
110
|
+
* - square: the tails cut square to the slope through the sheathing's outer edge, the fascia square
|
|
111
|
+
* to the slope on them, its top face in the sheathing's plane;
|
|
112
|
+
* - plumb-level: the plumb cut, and under it a level cut `LEVEL_CUT_RUN` long (at most half the tail's
|
|
113
|
+
* plumb depth deep) that a soffit nails up to, run level from the fascia's back to the wall.
|
|
114
|
+
* The fascia is as deep as that takes (a whole 1x where one drops at least 1/4 in under the tails,
|
|
115
|
+
* else one ripped to it), unless the plane sets its own.
|
|
116
|
+
*/
|
|
117
|
+
export declare function roofEaveProfile(input: RoofEaveInput): RoofEaveProfile;
|
|
118
|
+
/**
|
|
119
|
+
* Whether a point of an eave's section, out past the wall's outer face, lies in the shell's eave
|
|
120
|
+
* (`tolerance` either way): under the sheathing's top, inside the tails' end cut, and over their
|
|
121
|
+
* underside or a boxed eave's soffit.
|
|
122
|
+
*/
|
|
123
|
+
export declare function eaveContains(profile: RoofEaveProfile, [s, y]: EavePoint, tolerance?: number): boolean;
|
|
124
|
+
type EaveSegment = Pick<RoofSegmentNode, 'roofType' | 'pitch' | 'width' | 'depth' | 'wallThickness' | 'overhang' | 'deckThickness'> & Partial<Pick<RoofSegmentNode, 'gableOverhang' | 'buildUp' | 'eaveCut' | 'fasciaHeight' | 'fasciaDepth' | 'shingleThickness' | 'barrelRise' | 'barrelSegments'>>;
|
|
125
|
+
/**
|
|
126
|
+
* The numbers a roof plane's eaves are cut from (`roofEaveProfile`): its reach and wall, its layers'
|
|
127
|
+
* structure and deck, its eave cut and fascia. Its rafters sit on the plate; a truss's top chord on
|
|
128
|
+
* its bottom chord at the heel. A plane without layers is taken as rafters under a 7/16 in sheet,
|
|
129
|
+
* as deep as its deck. `high`: a shed's high edge, rising outward, cut plumb.
|
|
130
|
+
*/
|
|
131
|
+
export declare function roofSegmentEaveInput(node: EaveSegment, edge?: 'eave' | 'high'): RoofEaveInput;
|
|
132
|
+
/** A roof plane's eave (`roofSegmentEaveInput`, `roofEaveProfile`). */
|
|
133
|
+
export declare function roofSegmentEaveProfile(node: EaveSegment, edge?: 'eave' | 'high'): RoofEaveProfile;
|
|
134
|
+
export {};
|
|
135
|
+
//# sourceMappingURL=roof-eave.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roof-eave.d.ts","sourceRoot":"","sources":["../../src/lib/roof-eave.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAK7D,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,QAAe,CAAA;AAC5C,gGAAgG;AAChG,eAAO,MAAM,WAAW,QAAe,CAAA;AAGvC,qGAAqG;AACrG,eAAO,MAAM,aAAa,QAAc,CAAA;AACxC,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,QAAc,CAAA;AAI3C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzD,iGAAiG;AACjG,eAAO,MAAM,YAAY,EAAE,SAAS;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAKvE,CAAA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAI5F;AAeD,8GAA8G;AAC9G,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEjD,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG;IAC1B,6GAA6G;IAC7G,GAAG,EAAE,MAAM,CAAA;IACX,iHAAiH;IACjH,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;IACf,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB;IACrB,GAAG,CAAC,EAAE,WAAW,CAAA;IACjB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yGAAyG;IACzG,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,+FAA+F;IAC/F,GAAG,EAAE,WAAW,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC1B,mCAAmC;IACnC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAC5B;;;OAGG;IACH,GAAG,EAAE,SAAS,SAAS,EAAE,CAAA;IACzB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE;QACN,mEAAmE;QACnE,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9D,8FAA8F;QAC9F,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,0DAA0D;QAC1D,MAAM,EAAE,OAAO,CAAA;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;QACzB,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;IACD,6HAA6H;IAC7H,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACzE;;;;OAIG;IACH,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAA;CACpF,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CAsFrE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,SAAI,GAAG,OAAO,CAQhG;AAED,KAAK,WAAW,GAAG,IAAI,CACrB,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,eAAe,GAAG,UAAU,GAAG,eAAe,CAC1F,GACC,OAAO,CACL,IAAI,CACF,eAAe,EACb,eAAe,GACf,SAAS,GACT,SAAS,GACT,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,gBAAgB,CACnB,CACF,CAAA;AAEH;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,aAAa,CAqBf;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,eAAe,CAEjB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { getRoofSegmentDeckReach, getSegmentSlopeFrame, } from '../schema/nodes/roof-segment.js';
|
|
2
|
+
import { LUMBER_DEPTH } from './build-up.js';
|
|
3
|
+
const inches = (value) => value * 0.0254;
|
|
4
|
+
/** A 1x board's actual thickness: every fascia and rake board is nominal 1x. */
|
|
5
|
+
export const FASCIA_THICKNESS = inches(0.75);
|
|
6
|
+
/** How far a fascia or rake board drops below the tails' lowest point, past a soffit's edge. */
|
|
7
|
+
export const FASCIA_DROP = inches(0.75);
|
|
8
|
+
/** The least it drops where a 1x then needs no ripping. */
|
|
9
|
+
const FASCIA_DROP_MIN = inches(0.25);
|
|
10
|
+
/** The run of a plumb-and-level tail's level cut: a 2x4's width for the soffit's edge to nail to. */
|
|
11
|
+
export const LEVEL_CUT_RUN = inches(3.5);
|
|
12
|
+
/** A boxed eave's soffit: a 1/2 in panel nailed up to the level cuts. */
|
|
13
|
+
export const SOFFIT_THICKNESS = inches(0.5);
|
|
14
|
+
/** The sheathing a plane without layers is taken to carry over its tails: Bones' 7/16 in. */
|
|
15
|
+
const BARE_SHEATHING = inches(7 / 16);
|
|
16
|
+
/** The 1x boards a fascia or rake board is cut from, narrowest first, at their actual widths. */
|
|
17
|
+
export const FASCIA_STOCK = [
|
|
18
|
+
{ size: '1x6', width: inches(5.5) },
|
|
19
|
+
{ size: '1x8', width: inches(7.25) },
|
|
20
|
+
{ size: '1x10', width: inches(9.25) },
|
|
21
|
+
{ size: '1x12', width: inches(11.25) },
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* The 1x a board `width` wide is cut from: the narrowest stock as wide, ripped down to it when
|
|
25
|
+
* wider. Past a 1x12 no 1x is wide enough: a ripped width of wider stock (`stock` null).
|
|
26
|
+
*/
|
|
27
|
+
export function fasciaStockFor(width) {
|
|
28
|
+
const stock = FASCIA_STOCK.find((candidate) => candidate.width >= width - 1e-4);
|
|
29
|
+
if (!stock)
|
|
30
|
+
return { stock: null, ripped: true };
|
|
31
|
+
return { stock: stock.size, ripped: stock.width - width > 1e-3 };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* How wide a board covering `cover` is, `scale` its width per unit of the cover's measure (a rake
|
|
35
|
+
* board's, its plumb depth's cosine): `FASCIA_DROP` past it, or a 1x whole where one drops between
|
|
36
|
+
* `least` and that, so the board is stock, not ripped.
|
|
37
|
+
*/
|
|
38
|
+
function boardWidth(cover, scale = 1, least = FASCIA_DROP_MIN) {
|
|
39
|
+
const whole = FASCIA_STOCK.find(({ width }) => width >= (cover + least) * scale - 1e-6 && width <= (cover + FASCIA_DROP) * scale + 1e-6);
|
|
40
|
+
return whole ? whole.width : (cover + FASCIA_DROP) * scale;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* An eave cut to its plane's rule. The tails reach `reach` out from the plate line along the
|
|
44
|
+
* sheathing's top, the deck's full depth under it:
|
|
45
|
+
* - plumb: the tails cut plumb there; a plumb 1x fascia covers their face, its top flush with the
|
|
46
|
+
* sheathing's top (under the drip edge), its bottom about `FASCIA_DROP` below their lowest point;
|
|
47
|
+
* - square: the tails cut square to the slope through the sheathing's outer edge, the fascia square
|
|
48
|
+
* to the slope on them, its top face in the sheathing's plane;
|
|
49
|
+
* - plumb-level: the plumb cut, and under it a level cut `LEVEL_CUT_RUN` long (at most half the tail's
|
|
50
|
+
* plumb depth deep) that a soffit nails up to, run level from the fascia's back to the wall.
|
|
51
|
+
* The fascia is as deep as that takes (a whole 1x where one drops at least 1/4 in under the tails,
|
|
52
|
+
* else one ripped to it), unless the plane sets its own.
|
|
53
|
+
*/
|
|
54
|
+
export function roofEaveProfile(input) {
|
|
55
|
+
const tan = Number.isFinite(input.tan) ? input.tan : 0;
|
|
56
|
+
const cos = 1 / Math.hypot(1, tan);
|
|
57
|
+
const sin = tan * cos;
|
|
58
|
+
const { reach, wallOut, tailLift } = input;
|
|
59
|
+
const deck = Math.max(0, input.deckDepth);
|
|
60
|
+
const top = (s) => deck / cos - s * tan;
|
|
61
|
+
const under = (s) => tailLift - s * tan;
|
|
62
|
+
const thickness = input.fasciaThickness ?? FASCIA_THICKNESS;
|
|
63
|
+
const cut = tan > 1e-6 ? (input.cut ?? 'plumb') : 'plumb';
|
|
64
|
+
const corner = [reach, top(reach)];
|
|
65
|
+
let end;
|
|
66
|
+
let low;
|
|
67
|
+
let height;
|
|
68
|
+
let corners;
|
|
69
|
+
let soffit = null;
|
|
70
|
+
if (cut === 'square') {
|
|
71
|
+
// the sheathing's top to the tails' underside, square to the slope
|
|
72
|
+
const depth = deck - tailLift * cos;
|
|
73
|
+
height = input.fasciaHeight ?? boardWidth(depth);
|
|
74
|
+
const down = (d) => [reach - d * sin, corner[1] - d * cos];
|
|
75
|
+
const out = (point) => [
|
|
76
|
+
point[0] + thickness * cos,
|
|
77
|
+
point[1] - thickness * sin,
|
|
78
|
+
];
|
|
79
|
+
const foot = down(depth);
|
|
80
|
+
end = [corner, foot];
|
|
81
|
+
low = foot[1];
|
|
82
|
+
const bottom = down(height);
|
|
83
|
+
corners = [corner, out(corner), out(bottom), bottom];
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
let foot = under(reach);
|
|
87
|
+
if (cut === 'plumb-level') {
|
|
88
|
+
const run = Math.min(LEVEL_CUT_RUN, input.tailDepth / cos / (2 * tan));
|
|
89
|
+
foot = under(reach) + run * tan;
|
|
90
|
+
end = [corner, [reach, foot], [reach - run, foot]];
|
|
91
|
+
soffit = { y: foot, thickness: SOFFIT_THICKNESS, from: wallOut, to: reach };
|
|
92
|
+
}
|
|
93
|
+
else
|
|
94
|
+
end = [corner, [reach, foot]];
|
|
95
|
+
low = foot;
|
|
96
|
+
const topY = corner[1] + (input.fasciaRise ?? 0);
|
|
97
|
+
// past a boxed eave's soffit, the fascia drops its whole 3/4 in under the level cuts
|
|
98
|
+
height =
|
|
99
|
+
input.fasciaHeight ??
|
|
100
|
+
boardWidth(topY - foot, 1, cut === 'plumb-level' ? SOFFIT_THICKNESS + FASCIA_DROP_MIN : FASCIA_DROP_MIN);
|
|
101
|
+
corners = [
|
|
102
|
+
[reach, topY],
|
|
103
|
+
[reach + thickness, topY],
|
|
104
|
+
[reach + thickness, topY - height],
|
|
105
|
+
[reach, topY - height],
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
// A rake board meets the eave's fascia flush at the corner: as deep at its foot (plumb, or square
|
|
109
|
+
// along the cut), so neither hangs past the other. Over a boxed eave it covers the barge whole,
|
|
110
|
+
// held level with the fascia's bottom at the corner.
|
|
111
|
+
const rakeHeight = input.fasciaHeight ??
|
|
112
|
+
(cut === 'plumb'
|
|
113
|
+
? height
|
|
114
|
+
: cut === 'square'
|
|
115
|
+
? height / cos
|
|
116
|
+
: boardWidth(deck / cos - tailLift, cos) / cos);
|
|
117
|
+
return {
|
|
118
|
+
cut,
|
|
119
|
+
tan,
|
|
120
|
+
cos,
|
|
121
|
+
sin,
|
|
122
|
+
reach,
|
|
123
|
+
wallOut,
|
|
124
|
+
top,
|
|
125
|
+
under,
|
|
126
|
+
end,
|
|
127
|
+
low,
|
|
128
|
+
fascia: {
|
|
129
|
+
corners,
|
|
130
|
+
height,
|
|
131
|
+
thickness,
|
|
132
|
+
square: cut === 'square',
|
|
133
|
+
...fasciaStockFor(height),
|
|
134
|
+
},
|
|
135
|
+
soffit,
|
|
136
|
+
rake: { height: rakeHeight, width: rakeHeight * cos, ...fasciaStockFor(rakeHeight * cos) },
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Whether a point of an eave's section, out past the wall's outer face, lies in the shell's eave
|
|
141
|
+
* (`tolerance` either way): under the sheathing's top, inside the tails' end cut, and over their
|
|
142
|
+
* underside or a boxed eave's soffit.
|
|
143
|
+
*/
|
|
144
|
+
export function eaveContains(profile, [s, y], tolerance = 0) {
|
|
145
|
+
const { reach, cut, cos, sin, top, under, soffit } = profile;
|
|
146
|
+
if (y > top(s) + tolerance || s > reach + tolerance)
|
|
147
|
+
return false;
|
|
148
|
+
const [cs, cy] = profile.end[0];
|
|
149
|
+
if (cut === 'square' && (s - cs) * cos - (y - cy) * sin > tolerance)
|
|
150
|
+
return false;
|
|
151
|
+
// a boxed eave stands on its soffit: under it the deck is cut away
|
|
152
|
+
const floor = soffit ? soffit.y - soffit.thickness : under(s);
|
|
153
|
+
return y >= floor - tolerance;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* The numbers a roof plane's eaves are cut from (`roofEaveProfile`): its reach and wall, its layers'
|
|
157
|
+
* structure and deck, its eave cut and fascia. Its rafters sit on the plate; a truss's top chord on
|
|
158
|
+
* its bottom chord at the heel. A plane without layers is taken as rafters under a 7/16 in sheet,
|
|
159
|
+
* as deep as its deck. `high`: a shed's high edge, rising outward, cut plumb.
|
|
160
|
+
*/
|
|
161
|
+
export function roofSegmentEaveInput(node, edge = 'eave') {
|
|
162
|
+
const { tanTheta } = getSegmentSlopeFrame(node);
|
|
163
|
+
const deck = Math.max(0, node.deckThickness);
|
|
164
|
+
const structure = node.buildUp?.structure;
|
|
165
|
+
const chord = structure ? LUMBER_DEPTH[structure.size] : 0;
|
|
166
|
+
const tailDepth = structure ? chord : Math.max(0, deck - Math.min(BARE_SHEATHING, deck / 2));
|
|
167
|
+
return {
|
|
168
|
+
tan: edge === 'high' ? -tanTheta : tanTheta,
|
|
169
|
+
reach: getRoofSegmentDeckReach(node).z,
|
|
170
|
+
wallOut: Math.max(0, node.wallThickness) / 2,
|
|
171
|
+
tailDepth,
|
|
172
|
+
tailLift: structure?.system === 'trusses' ? chord : 0,
|
|
173
|
+
deckDepth: deck,
|
|
174
|
+
cut: edge === 'high' ? 'plumb' : (node.eaveCut ?? 'plumb'),
|
|
175
|
+
...(node.fasciaHeight !== undefined ? { fasciaHeight: node.fasciaHeight } : {}),
|
|
176
|
+
...(node.fasciaDepth !== undefined ? { fasciaThickness: node.fasciaDepth } : {}),
|
|
177
|
+
// a flat roof's boards sized on purpose rise over its membrane's edge: a coping band
|
|
178
|
+
...(node.roofType === 'flat' && node.fasciaHeight !== undefined
|
|
179
|
+
? { fasciaRise: Math.max(0, node.shingleThickness ?? 0) }
|
|
180
|
+
: {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/** A roof plane's eave (`roofSegmentEaveInput`, `roofEaveProfile`). */
|
|
184
|
+
export function roofSegmentEaveProfile(node, edge = 'eave') {
|
|
185
|
+
return roofEaveProfile(roofSegmentEaveInput(node, edge));
|
|
186
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import type { SlabNode } from '../schema/index.js';
|
|
1
|
+
import type { AnyNode, AnyNodeId, SlabNode, ZoneNode } from '../schema/index.js';
|
|
2
2
|
export declare function roomFloorPlate(slabs: readonly SlabNode[], zoneId: string): SlabNode | undefined;
|
|
3
|
+
/** A dedicated plate's room; shared base plates do not inherit one room's outdoor type. */
|
|
4
|
+
export declare function floorPlateRoom(slab: Pick<SlabNode, 'zoneIds' | 'plateRole'>, resolve: (id: AnyNodeId) => AnyNode | undefined): ZoneNode | undefined;
|
|
3
5
|
//# sourceMappingURL=room-floor-plate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-floor-plate.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-plate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"room-floor-plate.d.ts","sourceRoot":"","sources":["../../src/lib/room-floor-plate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG/F;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC,EAC7C,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,GAC9C,QAAQ,GAAG,SAAS,CAItB"}
|
|
@@ -2,3 +2,10 @@ export function roomFloorPlate(slabs, zoneId) {
|
|
|
2
2
|
const owned = slabs.filter((slab) => slab.zoneIds?.includes(zoneId));
|
|
3
3
|
return owned.find((slab) => slab.plateRole !== 'base') ?? owned[0];
|
|
4
4
|
}
|
|
5
|
+
/** A dedicated plate's room; shared base plates do not inherit one room's outdoor type. */
|
|
6
|
+
export function floorPlateRoom(slab, resolve) {
|
|
7
|
+
if (slab.plateRole === 'base' || slab.zoneIds?.length !== 1)
|
|
8
|
+
return undefined;
|
|
9
|
+
const zone = resolve(slab.zoneIds[0]);
|
|
10
|
+
return zone?.type === 'zone' ? zone : undefined;
|
|
11
|
+
}
|
|
@@ -29,12 +29,25 @@ type WallSideUpdate = {
|
|
|
29
29
|
frontSide: 'interior' | 'exterior' | 'unknown';
|
|
30
30
|
backSide: 'interior' | 'exterior' | 'unknown';
|
|
31
31
|
};
|
|
32
|
+
type SceneNodes = Record<string, any>;
|
|
32
33
|
export declare function detectSpacesForLevel(levelId: string, walls: BoundaryNode[]): {
|
|
33
34
|
rooms: ExtractedRoom[];
|
|
34
35
|
roomPolygons: import("./room-graph.js").Point2D[][];
|
|
35
36
|
spaces: Space[];
|
|
36
37
|
wallUpdates: WallSideUpdate[];
|
|
37
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* Levels whose structure intent differs between two versions of a scene: what a paused batch's
|
|
41
|
+
* resume (and a detached scene's reconciliation) re-derives.
|
|
42
|
+
*/
|
|
43
|
+
export declare function changedStructureLevelIds(before: SceneNodes, after: SceneNodes): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Levels whose structure an edit from `before` to `after` asks to re-derive, chosen as space
|
|
46
|
+
* detection chooses them for a store commit: from the nodes the edit changed (walls by level, and
|
|
47
|
+
* the fallbacks for levels, stairs, openings, slabs, ceilings, zones and separators), without
|
|
48
|
+
* signing every level of the scene.
|
|
49
|
+
*/
|
|
50
|
+
export declare function structureLevelsForChange(before: SceneNodes, after: SceneNodes): string[];
|
|
38
51
|
/** Pause structure reconciliation. Refcounted — pair with `resumeSpaceDetection`. */
|
|
39
52
|
export declare function pauseSpaceDetection(): void;
|
|
40
53
|
/** Resume structure reconciliation. No-op if not currently paused. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"space-detection.d.ts","sourceRoot":"","sources":["../../src/lib/space-detection.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,WAAW,CAAA;AAuBlB,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,iBAAiB,EAGvB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,YAAY,EAAqB,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAG/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAG/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEzE;AAID,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEvF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9B,aAAa,EAAE,iBAAiB,EAAE,CAAA;IAClC,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,GAAG,UAAU,CAAA;IAChC,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,wBAAwB,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;IAC9C,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAA;CAC9C,CAAA;AA8PD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAkKrC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;;;;;EAE1E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAMxF;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CAWxF;AA+CD,qFAAqF;AACrF,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAED,6DAA6D;AAC7D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,uBAAuB,qCAMtC;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,GAAG,EACf,WAAW,EAAE,GAAG,EAChB,OAAO,GAAE,yBAA8B,GACtC,MAAM,IAAI,CAuLZ;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAiBjF"}
|