@pascal-app/core 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1164 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +38 -2
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +257 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +1667 -866
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +55 -11
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +4 -6
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +5951 -4351
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +1 -0
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +115 -7
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +121 -29
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +888 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -24
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +32 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -15
- package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +205 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +60 -35
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +38 -6
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +112 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +5 -2
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/types.d.ts +65 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +224 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +57 -10
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +135 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +42 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1079 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +6 -3
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +13 -8
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +846 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1057 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +166 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +2124 -1322
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +42 -16
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +31 -11
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +6751 -5151
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +85 -4
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +28 -7
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +2 -2
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +6 -1
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +118 -10
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1930 -1130
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type SpatialGridManager } from '../hooks/spatial-grid/spatial-grid-manager.js';
|
|
2
|
+
import type { SceneNodes } from '../lib/structure-kernel.js';
|
|
3
|
+
import type { AnyNode } from '../schema/index.js';
|
|
4
|
+
import type { SceneStore } from '../store/use-scene.js';
|
|
5
|
+
/** Kinds whose change re-sizes a straight stair's flights or re-cuts its floor openings. */
|
|
6
|
+
export declare function isStairOpeningInput(node: AnyNode | undefined): boolean;
|
|
7
|
+
/** Kinds whose change re-cuts an elevator's (and so every owner's) floor openings. */
|
|
8
|
+
export declare function isElevatorOpeningInput(node: AnyNode | undefined): boolean;
|
|
9
|
+
/** Whether any node of an input kind differs between two versions of a scene. */
|
|
10
|
+
export declare function changedInputs(before: SceneNodes, after: SceneNodes, isInput: (node: AnyNode | undefined) => boolean, options?: {
|
|
11
|
+
ignoreChildLists?: boolean;
|
|
12
|
+
}): boolean;
|
|
13
|
+
export type DocumentReconcileOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* The view the passes read a version of the nodes through: a detached scene's tracked view, so
|
|
16
|
+
* their reads are recorded. Applied to every version a pass compares, so identity holds between.
|
|
17
|
+
*/
|
|
18
|
+
read?: (nodes: SceneNodes) => SceneNodes;
|
|
19
|
+
/** Re-derive every level's structure, not only the levels whose structure changed since `before`. */
|
|
20
|
+
allLevels?: boolean;
|
|
21
|
+
/** The support index the passes query; by default one built from the store's own nodes. */
|
|
22
|
+
grid?: () => SpatialGridManager;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Every derived write the document owes after an edit, in one synchronous pass, so a patch taken
|
|
26
|
+
* afterwards is complete and applying it to the editor leaves its systems nothing to write:
|
|
27
|
+
*
|
|
28
|
+
* - room structure (zones, auto ceilings, floor plates) for the levels whose structure changed,
|
|
29
|
+
* as space detection derives it for a batch;
|
|
30
|
+
* - stair rises and the floor openings stairs and elevators own, as the opening systems do;
|
|
31
|
+
* - the elevation of wall-supported roofs, and of a roof kept over the storey it covers when its
|
|
32
|
+
* level moves, as the roof system does.
|
|
33
|
+
*
|
|
34
|
+
* The opening and roof systems still run in the editor (on a microtask, for edits made by hand);
|
|
35
|
+
* they plan with the same functions, so after this pass they find nothing to do. Writes are
|
|
36
|
+
* history-paused: they join the triggering edit's undo step. Support queries read an index built
|
|
37
|
+
* from the store's nodes, never the editor's previews.
|
|
38
|
+
*/
|
|
39
|
+
export declare function reconcileDocument(store: SceneStore, before: SceneNodes, options?: DocumentReconcileOptions): void;
|
|
40
|
+
//# sourceMappingURL=document-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reconcile.d.ts","sourceRoot":"","sources":["../../src/systems/document-reconcile.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,4CAA4C,CAAA;AAInD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,WAAW,CAAA;AAKnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAWpD,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAStE;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAQzE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,KAAK,OAAO,EAC/C,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAST;AAYD,MAAM,MAAM,wBAAwB,GAAG;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAA;IACxC,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,kBAAkB,CAAA;CAChC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,wBAA6B,GACrC,IAAI,CA0FN"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { structureChangeBatch } from '../commands/structure/shared.js';
|
|
2
|
+
import { supportIndexOf, withSpatialGrid, } from '../hooks/spatial-grid/spatial-grid-manager.js';
|
|
3
|
+
import { resolveLevelId } from '../lib/node-ancestry.js';
|
|
4
|
+
import { structureLevelsForChange } from '../lib/space-detection.js';
|
|
5
|
+
import { applyStructureReconciliation } from '../lib/structure-commit.js';
|
|
6
|
+
import { generateId } from '../schema/base.js';
|
|
7
|
+
import { roofsKeptOverStorey } from '../services/roof-move.js';
|
|
8
|
+
import { pauseSceneHistory, resumeSceneHistory } from '../store/history-control.js';
|
|
9
|
+
import { withoutLivePreviews } from '../store/live-previews.js';
|
|
10
|
+
import { planOwnedFloorOpenings } from './owned-floor-openings.js';
|
|
11
|
+
import { reconcileOwnedFloorOpeningChanges } from './reconcile-owned-floor-openings.js';
|
|
12
|
+
import { isRoofElevationInput, planRoofElevationUpdates, roofsAffectedBy, } from './roof/roof-elevation.js';
|
|
13
|
+
import { changedStairOpeningOwners } from './stair/stair-opening-sync.js';
|
|
14
|
+
import { syncStairRises } from './stair/stair-rise.js';
|
|
15
|
+
/** Kinds whose change re-sizes a straight stair's flights or re-cuts its floor openings. */
|
|
16
|
+
export function isStairOpeningInput(node) {
|
|
17
|
+
return (node?.type === 'building' ||
|
|
18
|
+
node?.type === 'ceiling' ||
|
|
19
|
+
node?.type === 'level' ||
|
|
20
|
+
node?.type === 'slab' ||
|
|
21
|
+
node?.type === 'stair' ||
|
|
22
|
+
node?.type === 'stair-segment');
|
|
23
|
+
}
|
|
24
|
+
/** Kinds whose change re-cuts an elevator's (and so every owner's) floor openings. */
|
|
25
|
+
export function isElevatorOpeningInput(node) {
|
|
26
|
+
return (node?.type === 'building' ||
|
|
27
|
+
node?.type === 'ceiling' ||
|
|
28
|
+
node?.type === 'elevator' ||
|
|
29
|
+
node?.type === 'level' ||
|
|
30
|
+
node?.type === 'slab');
|
|
31
|
+
}
|
|
32
|
+
/** Whether any node of an input kind differs between two versions of a scene. */
|
|
33
|
+
export function changedInputs(before, after, isInput, options = {}) {
|
|
34
|
+
if (before === after)
|
|
35
|
+
return false;
|
|
36
|
+
const differs = (previous, next) => previous !== next &&
|
|
37
|
+
(isInput(previous) || isInput(next)) &&
|
|
38
|
+
!(options.ignoreChildLists && onlyChildListChanged(previous, next));
|
|
39
|
+
for (const id in after)
|
|
40
|
+
if (differs(before[id], after[id]))
|
|
41
|
+
return true;
|
|
42
|
+
for (const id in before)
|
|
43
|
+
if (!(id in after) && differs(before[id], undefined))
|
|
44
|
+
return true;
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/** Only a node's child list changed: its children's own changes are what passes react to. */
|
|
48
|
+
function onlyChildListChanged(previous, next) {
|
|
49
|
+
if (!(previous && next))
|
|
50
|
+
return false;
|
|
51
|
+
const a = previous;
|
|
52
|
+
const b = next;
|
|
53
|
+
for (const key in b)
|
|
54
|
+
if (key !== 'children' && a[key] !== b[key])
|
|
55
|
+
return false;
|
|
56
|
+
for (const key in a)
|
|
57
|
+
if (key !== 'children' && !(key in b))
|
|
58
|
+
return false;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Every derived write the document owes after an edit, in one synchronous pass, so a patch taken
|
|
63
|
+
* afterwards is complete and applying it to the editor leaves its systems nothing to write:
|
|
64
|
+
*
|
|
65
|
+
* - room structure (zones, auto ceilings, floor plates) for the levels whose structure changed,
|
|
66
|
+
* as space detection derives it for a batch;
|
|
67
|
+
* - stair rises and the floor openings stairs and elevators own, as the opening systems do;
|
|
68
|
+
* - the elevation of wall-supported roofs, and of a roof kept over the storey it covers when its
|
|
69
|
+
* level moves, as the roof system does.
|
|
70
|
+
*
|
|
71
|
+
* The opening and roof systems still run in the editor (on a microtask, for edits made by hand);
|
|
72
|
+
* they plan with the same functions, so after this pass they find nothing to do. Writes are
|
|
73
|
+
* history-paused: they join the triggering edit's undo step. Support queries read an index built
|
|
74
|
+
* from the store's nodes, never the editor's previews.
|
|
75
|
+
*/
|
|
76
|
+
export function reconcileDocument(store, before, options = {}) {
|
|
77
|
+
const read = options.read ?? ((nodes) => nodes);
|
|
78
|
+
const nodes = () => store.getState().nodes;
|
|
79
|
+
const view = () => read(nodes());
|
|
80
|
+
const grid = options.grid ?? (() => supportIndexOf(store, resolveLevelId));
|
|
81
|
+
// The kernel and opening planners read the store's nodes through `read`; their writes go to it.
|
|
82
|
+
const readingStore = {
|
|
83
|
+
getState: () => ({ ...store.getState(), nodes: view() }),
|
|
84
|
+
};
|
|
85
|
+
const write = (apply) => {
|
|
86
|
+
pauseSceneHistory(store);
|
|
87
|
+
try {
|
|
88
|
+
apply();
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
resumeSceneHistory(store);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const applyOpenings = (changes) => {
|
|
95
|
+
if (!changes.length)
|
|
96
|
+
return;
|
|
97
|
+
const previous = nodes();
|
|
98
|
+
write(() => {
|
|
99
|
+
store.getState().applyNodeChanges(structureChangeBatch(changes));
|
|
100
|
+
reconcileOwnedFloorOpeningChanges(readingStore, read(previous), changes);
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
withoutLivePreviews(() => withSpatialGrid(grid, () => {
|
|
104
|
+
const levelIds = options.allLevels ? undefined : structureLevelsForChange(before, nodes());
|
|
105
|
+
if (!levelIds || levelIds.length)
|
|
106
|
+
write(() => applyStructureReconciliation(readingStore, {
|
|
107
|
+
levelIds,
|
|
108
|
+
previousNodes: options.allLevels ? undefined : read(before),
|
|
109
|
+
mintId: generateId,
|
|
110
|
+
}));
|
|
111
|
+
// A parent's child list is bookkeeping: what was added or removed is an input of its own.
|
|
112
|
+
const settled = { ignoreChildLists: true };
|
|
113
|
+
let stairsFrom = before;
|
|
114
|
+
let elevatorsFrom = before;
|
|
115
|
+
let roofsFrom = before;
|
|
116
|
+
// Each pass can feed another (a stair's openings change slabs, slabs carry roofs); a pass runs
|
|
117
|
+
// again only on a change to its own inputs, so this settles in a few rounds.
|
|
118
|
+
for (let round = 0; round < 8; round++) {
|
|
119
|
+
const start = nodes();
|
|
120
|
+
if (changedInputs(stairsFrom, start, isStairOpeningInput, settled)) {
|
|
121
|
+
const from = stairsFrom;
|
|
122
|
+
stairsFrom = start;
|
|
123
|
+
const rises = syncStairRises(view());
|
|
124
|
+
if (rises.length)
|
|
125
|
+
write(() => store.getState().updateNodes(rises));
|
|
126
|
+
// Which stairs this edit moved is the edit's own bookkeeping; the re-cut reads the scene.
|
|
127
|
+
const owners = changedStairOpeningOwners(from, nodes());
|
|
128
|
+
applyOpenings(planOwnedFloorOpenings(view(), { ownerIds: owners }));
|
|
129
|
+
stairsFrom = nodes();
|
|
130
|
+
}
|
|
131
|
+
if (changedInputs(elevatorsFrom, nodes(), isElevatorOpeningInput, settled)) {
|
|
132
|
+
applyOpenings(planOwnedFloorOpenings(view()));
|
|
133
|
+
elevatorsFrom = nodes();
|
|
134
|
+
}
|
|
135
|
+
// A roof's own child list is an input: a segment added reshapes its footprint.
|
|
136
|
+
const current = nodes();
|
|
137
|
+
const changed = [];
|
|
138
|
+
for (const id in current)
|
|
139
|
+
if (current[id] !== roofsFrom[id] &&
|
|
140
|
+
(current[id]?.type === 'roof' || !onlyChildListChanged(roofsFrom[id], current[id])))
|
|
141
|
+
changed.push(id);
|
|
142
|
+
for (const id in roofsFrom)
|
|
143
|
+
if (!(id in current))
|
|
144
|
+
changed.push(id);
|
|
145
|
+
const roofInput = (node) => isRoofElevationInput(node) || node?.type === 'roof-segment';
|
|
146
|
+
if (changed.some((id) => roofInput(roofsFrom[id]) || roofInput(current[id]))) {
|
|
147
|
+
const roofs = [
|
|
148
|
+
...roofsKeptOverStorey(roofsFrom, view()),
|
|
149
|
+
...planRoofElevationUpdates(view(), roofsAffectedBy(roofsFrom, current, changed)),
|
|
150
|
+
];
|
|
151
|
+
if (roofs.length)
|
|
152
|
+
write(() => store.getState().updateNodes(roofs));
|
|
153
|
+
roofsFrom = nodes();
|
|
154
|
+
}
|
|
155
|
+
if (nodes() === start)
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elevator-opening-system.d.ts","sourceRoot":"","sources":["../../../src/systems/elevator/elevator-opening-system.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"elevator-opening-system.d.ts","sourceRoot":"","sources":["../../../src/systems/elevator/elevator-opening-system.tsx"],"names":[],"mappings":"AAYA,wBAAgB,6BAA6B,eAgC5C;AAED,eAAO,MAAM,qBAAqB,YAIjC,CAAA"}
|
|
@@ -1,32 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import { structureChangeBatch } from '../../commands/structure/shared.js';
|
|
4
|
+
import { isSettlingDocument } from '../../store/document-settling.js';
|
|
4
5
|
import { pauseSceneHistory, resumeSceneHistory } from '../../store/history-control.js';
|
|
5
6
|
import { isHydrationNormalization } from '../../store/scene-hydration.js';
|
|
6
7
|
import useScene from '../../store/use-scene.js';
|
|
8
|
+
import { changedInputs, isElevatorOpeningInput } from '../document-reconcile.js';
|
|
7
9
|
import { planOwnedFloorOpenings } from '../owned-floor-openings.js';
|
|
8
10
|
import { reconcileOwnedFloorOpeningChanges } from '../reconcile-owned-floor-openings.js';
|
|
9
|
-
function isOpeningRelevantNode(node) {
|
|
10
|
-
return (node?.type === 'building' ||
|
|
11
|
-
node?.type === 'ceiling' ||
|
|
12
|
-
node?.type === 'elevator' ||
|
|
13
|
-
node?.type === 'level' ||
|
|
14
|
-
node?.type === 'slab');
|
|
15
|
-
}
|
|
16
|
-
function hasOpeningRelevantNodeChange(nextNodes, prevNodes) {
|
|
17
|
-
if (nextNodes === prevNodes)
|
|
18
|
-
return false;
|
|
19
|
-
const ids = new Set([...Object.keys(nextNodes), ...Object.keys(prevNodes)]);
|
|
20
|
-
for (const id of ids) {
|
|
21
|
-
const nextNode = nextNodes[id];
|
|
22
|
-
const prevNode = prevNodes[id];
|
|
23
|
-
if (nextNode === prevNode)
|
|
24
|
-
continue;
|
|
25
|
-
if (isOpeningRelevantNode(nextNode) || isOpeningRelevantNode(prevNode))
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
11
|
export function initializeElevatorOpeningSync() {
|
|
31
12
|
let syncingAutoOpenings = false;
|
|
32
13
|
const applyChanges = (skipExistingSurfaces = false) => {
|
|
@@ -38,7 +19,7 @@ export function initializeElevatorOpeningSync() {
|
|
|
38
19
|
try {
|
|
39
20
|
const before = useScene.getState().nodes;
|
|
40
21
|
useScene.getState().applyNodeChanges(structureChangeBatch(changes));
|
|
41
|
-
reconcileOwnedFloorOpeningChanges(before, changes);
|
|
22
|
+
reconcileOwnedFloorOpeningChanges(useScene, before, changes);
|
|
42
23
|
}
|
|
43
24
|
finally {
|
|
44
25
|
resumeSceneHistory(useScene);
|
|
@@ -47,9 +28,13 @@ export function initializeElevatorOpeningSync() {
|
|
|
47
28
|
};
|
|
48
29
|
applyChanges(true);
|
|
49
30
|
return useScene.subscribe((state, prevState) => {
|
|
50
|
-
if (syncingAutoOpenings)
|
|
31
|
+
if (syncingAutoOpenings || isSettlingDocument(useScene))
|
|
51
32
|
return;
|
|
52
|
-
|
|
33
|
+
// A level's child list is bookkeeping (furniture re-parenting under it): what joined or left
|
|
34
|
+
// is an input of its own, as the document reconcile reads it.
|
|
35
|
+
if (!changedInputs(prevState.nodes, state.nodes, isElevatorOpeningInput, {
|
|
36
|
+
ignoreChildLists: true,
|
|
37
|
+
}))
|
|
53
38
|
return;
|
|
54
39
|
applyChanges(isHydrationNormalization() || state.hydrationId !== prevState.hydrationId);
|
|
55
40
|
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { FenceNode } from '../../schema/index.js';
|
|
2
|
+
/** A box standing on the fence's base: its centre, the turn about the vertical axis, its size along its own axes. */
|
|
3
|
+
export type GuardPost = {
|
|
4
|
+
position: [number, number, number];
|
|
5
|
+
rotationY: number;
|
|
6
|
+
scale: [number, number, number];
|
|
7
|
+
/** A 4-sided cone, square base aligned to the box. */
|
|
8
|
+
shape?: 'pyramid';
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A run along the centreline between two fractions of its length, `depth` across it, `height` tall
|
|
12
|
+
* round `centerY`. `split` runs are cut into short segments so a curved fence bends them.
|
|
13
|
+
*/
|
|
14
|
+
export type GuardBlock = {
|
|
15
|
+
startT: number;
|
|
16
|
+
endT: number;
|
|
17
|
+
centerY: number;
|
|
18
|
+
height: number;
|
|
19
|
+
depth: number;
|
|
20
|
+
split: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type GuardLayout = {
|
|
23
|
+
posts: GuardPost[];
|
|
24
|
+
/** The cap rail flat over the posts and the top rail on edge under it. */
|
|
25
|
+
rail: GuardBlock[];
|
|
26
|
+
/** The bottom rail the balusters stand on (balusters only). */
|
|
27
|
+
base: GuardBlock[];
|
|
28
|
+
/** Balusters, cables or boards. */
|
|
29
|
+
infill: GuardBlock[];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* A deck guard the way the AWC Deck Construction Guide (DCA 6) draws one: 4x4 posts (`postSize`) no
|
|
33
|
+
* more than `postSpacing` apart, the two ends counted as posts whether drawn or not (`startPost` /
|
|
34
|
+
* `endPost` false: the rails die into a post already standing there), a 2x6 cap rail flat over the
|
|
35
|
+
* posts, a 2x4 top rail on edge under it, and the infill: balusters (2x2 on a 2x4 bottom rail
|
|
36
|
+
* `groundClearance` over the deck, `slatGap` clear), cable (½ in runs `slatGap` apart from
|
|
37
|
+
* `groundClearance` up), or boards (`thickness` x 5½ in, `slatGap` apart from `groundClearance`
|
|
38
|
+
* up). `postThrough` runs the posts 3 in past the cap under a cap of their own (`postCap`).
|
|
39
|
+
*
|
|
40
|
+
* The pure layout the guard renderer builds its meshes from and the usage field reads its
|
|
41
|
+
* obstacles from, so the two cannot disagree.
|
|
42
|
+
*/
|
|
43
|
+
export declare function layoutGuardFence(fence: FenceNode): GuardLayout;
|
|
44
|
+
/**
|
|
45
|
+
* The fractions a run between `startT` and `endT` is cut at: segments no longer than
|
|
46
|
+
* `maxSegmentLength`, so a curved fence bends them.
|
|
47
|
+
*/
|
|
48
|
+
export declare function fenceBlockSegments(fence: FenceNode, startT: number, endT: number, maxSegmentLength: number): [number, number][];
|
|
49
|
+
type Corner = [number, number];
|
|
50
|
+
/**
|
|
51
|
+
* The four plan corners of a run between `startT` and `endT`, `depth` across the centreline and
|
|
52
|
+
* shifted `lateralOffset` to the side the frame's normal points: the outer then the inner corner at
|
|
53
|
+
* the start, then at the end.
|
|
54
|
+
*/
|
|
55
|
+
export declare function fenceBlockCorners(fence: FenceNode, startT: number, endT: number, depth: number, lateralOffset?: number): [Corner, Corner, Corner, Corner];
|
|
56
|
+
/**
|
|
57
|
+
* Where a run's end moves to when its fence meets `neighbor` at a corner: the two end corners slide
|
|
58
|
+
* along the fence so the run meets the neighbour's in a mitre. `side` is -1 for the inner corner and
|
|
59
|
+
* 1 for the outer, `reach` the metres along the unit vector `(ux, uz)`; null where the two run
|
|
60
|
+
* nearly straight on, or the mitre would reach absurdly far.
|
|
61
|
+
*/
|
|
62
|
+
export declare function fenceMiter(fence: FenceNode, endpoint: 'start' | 'end', neighbor: FenceNode, depth: number, lateralOffset?: number): {
|
|
63
|
+
side: -1 | 1;
|
|
64
|
+
reach: number;
|
|
65
|
+
ux: number;
|
|
66
|
+
uz: number;
|
|
67
|
+
}[] | null;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=guard-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-layout.d.ts","sourceRoot":"","sources":["../../../src/systems/fence/guard-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAe7C,qHAAqH;AACrH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,0EAA0E;IAC1E,IAAI,EAAE,UAAU,EAAE,CAAA;IAClB,+DAA+D;IAC/D,IAAI,EAAE,UAAU,EAAE,CAAA;IAClB,mCAAmC;IACnC,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB,CAAA;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAgG9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GACvB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAOpB;AAED,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE9B;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,aAAa,SAAI,GAChB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAclC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,GAAG,KAAK,EACzB,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,MAAM,EACb,aAAa,SAAI,GAChB;IAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,CA2BlE"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { getFenceCenterlineFrameAt, getFenceCenterlineLength } from './fence-centerline.js';
|
|
2
|
+
/** Dressed lumber the guard is built from, metres. */
|
|
3
|
+
const IN = 0.0254;
|
|
4
|
+
const GUARD_CAP_T = 1.5 * IN;
|
|
5
|
+
const GUARD_CAP_W = 5.5 * IN;
|
|
6
|
+
const GUARD_RAIL_T = 1.5 * IN;
|
|
7
|
+
const GUARD_RAIL_D = 3.5 * IN;
|
|
8
|
+
const GUARD_BALUSTER = 1.5 * IN;
|
|
9
|
+
const GUARD_BOARD_D = 5.5 * IN;
|
|
10
|
+
const GUARD_CABLE = 0.5 * IN;
|
|
11
|
+
const GUARD_POST_ABOVE_CAP = 3 * IN;
|
|
12
|
+
const GUARD_POST_CAP_T = 1 * IN;
|
|
13
|
+
function frameAt(fence, t) {
|
|
14
|
+
const { point, tangent } = getFenceCenterlineFrameAt(fence, t);
|
|
15
|
+
return { x: point.x, z: point.y, angle: Math.atan2(tangent.y, tangent.x) };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A deck guard the way the AWC Deck Construction Guide (DCA 6) draws one: 4x4 posts (`postSize`) no
|
|
19
|
+
* more than `postSpacing` apart, the two ends counted as posts whether drawn or not (`startPost` /
|
|
20
|
+
* `endPost` false: the rails die into a post already standing there), a 2x6 cap rail flat over the
|
|
21
|
+
* posts, a 2x4 top rail on edge under it, and the infill: balusters (2x2 on a 2x4 bottom rail
|
|
22
|
+
* `groundClearance` over the deck, `slatGap` clear), cable (½ in runs `slatGap` apart from
|
|
23
|
+
* `groundClearance` up), or boards (`thickness` x 5½ in, `slatGap` apart from `groundClearance`
|
|
24
|
+
* up). `postThrough` runs the posts 3 in past the cap under a cap of their own (`postCap`).
|
|
25
|
+
*
|
|
26
|
+
* The pure layout the guard renderer builds its meshes from and the usage field reads its
|
|
27
|
+
* obstacles from, so the two cannot disagree.
|
|
28
|
+
*/
|
|
29
|
+
export function layoutGuardFence(fence) {
|
|
30
|
+
const posts = [];
|
|
31
|
+
const infill = [];
|
|
32
|
+
const base = [];
|
|
33
|
+
const rail = [];
|
|
34
|
+
const length = Math.max(getFenceCenterlineLength(fence), 0.01);
|
|
35
|
+
const H = Math.max(fence.height, 0.4);
|
|
36
|
+
const postW = Math.max(fence.postSize, 0.02);
|
|
37
|
+
const clearance = Math.max(fence.groundClearance, 0);
|
|
38
|
+
const gap = Math.max(fence.slatGap ?? 0.09, 0.01);
|
|
39
|
+
const infillKind = fence.guardInfill ?? 'balusters';
|
|
40
|
+
const through = fence.postThrough === true;
|
|
41
|
+
const capTop = H;
|
|
42
|
+
const capBottom = H - GUARD_CAP_T;
|
|
43
|
+
const topRailBottom = capBottom - GUARD_RAIL_D;
|
|
44
|
+
const bays = Math.max(1, Math.ceil(length / Math.max(fence.postSpacing, postW * 2)));
|
|
45
|
+
const stations = [];
|
|
46
|
+
for (let i = 0; i <= bays; i++)
|
|
47
|
+
stations.push(i / bays);
|
|
48
|
+
// posts: to the cap's underside, or through it with a cap
|
|
49
|
+
const postH = through ? capTop + GUARD_POST_ABOVE_CAP : capBottom;
|
|
50
|
+
for (const [i, t] of stations.entries()) {
|
|
51
|
+
if (i === 0 && fence.startPost === false)
|
|
52
|
+
continue;
|
|
53
|
+
if (i === stations.length - 1 && fence.endPost === false)
|
|
54
|
+
continue;
|
|
55
|
+
const frame = frameAt(fence, t);
|
|
56
|
+
posts.push({
|
|
57
|
+
position: [frame.x, postH / 2, frame.z],
|
|
58
|
+
rotationY: -frame.angle,
|
|
59
|
+
scale: [postW, postH, postW],
|
|
60
|
+
});
|
|
61
|
+
if (through && (fence.postCap ?? 'flat') !== 'none') {
|
|
62
|
+
const cap = fence.postCap ?? 'flat';
|
|
63
|
+
if (cap === 'pyramid') {
|
|
64
|
+
posts.push({
|
|
65
|
+
position: [frame.x, postH + postW * 0.45, frame.z],
|
|
66
|
+
rotationY: -frame.angle,
|
|
67
|
+
scale: [postW * 1.18, postW * 0.9, postW * 1.18],
|
|
68
|
+
shape: 'pyramid',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
posts.push({
|
|
73
|
+
position: [frame.x, postH + GUARD_POST_CAP_T / 2, frame.z],
|
|
74
|
+
rotationY: -frame.angle,
|
|
75
|
+
scale: [postW + 2 * IN, GUARD_POST_CAP_T, postW + 2 * IN],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const run = (centerY, height, depth) => ({
|
|
81
|
+
startT: 0,
|
|
82
|
+
endT: 1,
|
|
83
|
+
centerY,
|
|
84
|
+
height,
|
|
85
|
+
depth,
|
|
86
|
+
split: true,
|
|
87
|
+
});
|
|
88
|
+
rail.push(run(capBottom + GUARD_CAP_T / 2, GUARD_CAP_T, GUARD_CAP_W));
|
|
89
|
+
rail.push(run(topRailBottom + GUARD_RAIL_D / 2, GUARD_RAIL_D, GUARD_RAIL_T));
|
|
90
|
+
const postHalfT = postW / 2 / length;
|
|
91
|
+
const clearOfPosts = (t, halfT) => !stations.some((s) => Math.abs(s - t) < postHalfT + halfT);
|
|
92
|
+
if (infillKind === 'balusters') {
|
|
93
|
+
// the 2x4 bottom rail `clearance` over the deck, the balusters on it
|
|
94
|
+
const bottomRailTop = clearance + GUARD_RAIL_D;
|
|
95
|
+
base.push(run(clearance + GUARD_RAIL_D / 2, GUARD_RAIL_D, GUARD_RAIL_T));
|
|
96
|
+
const balH = Math.max(topRailBottom - bottomRailTop, 0.05);
|
|
97
|
+
const pitch = GUARD_BALUSTER + gap;
|
|
98
|
+
const halfT = GUARD_BALUSTER / 2 / length;
|
|
99
|
+
for (let s = pitch; s < length - GUARD_BALUSTER; s += pitch) {
|
|
100
|
+
const t = s / length;
|
|
101
|
+
if (!clearOfPosts(t, halfT))
|
|
102
|
+
continue;
|
|
103
|
+
if (2 * halfT <= 1e-5)
|
|
104
|
+
continue;
|
|
105
|
+
infill.push({
|
|
106
|
+
startT: t - halfT,
|
|
107
|
+
endT: t + halfT,
|
|
108
|
+
centerY: bottomRailTop + balH / 2,
|
|
109
|
+
height: balH,
|
|
110
|
+
depth: GUARD_BALUSTER,
|
|
111
|
+
split: false,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (infillKind === 'cable') {
|
|
116
|
+
// ½ in cables `gap` apart from `clearance` up to under the top rail
|
|
117
|
+
for (let y = clearance; y < topRailBottom - GUARD_CABLE; y += gap)
|
|
118
|
+
infill.push(run(y + GUARD_CABLE / 2, GUARD_CABLE, GUARD_CABLE));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// boards `gap` apart from `clearance` up to under the top rail
|
|
122
|
+
const boardT = Math.max(fence.thickness, 0.012);
|
|
123
|
+
for (let y = clearance; y + GUARD_BOARD_D <= topRailBottom + 1e-6; y += GUARD_BOARD_D + gap)
|
|
124
|
+
infill.push(run(y + GUARD_BOARD_D / 2, GUARD_BOARD_D, boardT));
|
|
125
|
+
}
|
|
126
|
+
return { posts, infill, base, rail };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The fractions a run between `startT` and `endT` is cut at: segments no longer than
|
|
130
|
+
* `maxSegmentLength`, so a curved fence bends them.
|
|
131
|
+
*/
|
|
132
|
+
export function fenceBlockSegments(fence, startT, endT, maxSegmentLength) {
|
|
133
|
+
const length = getFenceCenterlineLength(fence) * Math.max(1e-4, endT - startT);
|
|
134
|
+
const count = Math.max(1, Math.ceil(length / Math.max(1e-4, maxSegmentLength)));
|
|
135
|
+
return Array.from({ length: count }, (_, index) => [
|
|
136
|
+
startT + (endT - startT) * (index / count),
|
|
137
|
+
startT + (endT - startT) * ((index + 1) / count),
|
|
138
|
+
]);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The four plan corners of a run between `startT` and `endT`, `depth` across the centreline and
|
|
142
|
+
* shifted `lateralOffset` to the side the frame's normal points: the outer then the inner corner at
|
|
143
|
+
* the start, then at the end.
|
|
144
|
+
*/
|
|
145
|
+
export function fenceBlockCorners(fence, startT, endT, depth, lateralOffset = 0) {
|
|
146
|
+
const half = depth / 2;
|
|
147
|
+
const at = (t) => {
|
|
148
|
+
const frame = frameAt(fence, t);
|
|
149
|
+
const nx = -Math.sin(frame.angle);
|
|
150
|
+
const nz = Math.cos(frame.angle);
|
|
151
|
+
return [
|
|
152
|
+
[frame.x + nx * (half + lateralOffset), frame.z + nz * (half + lateralOffset)],
|
|
153
|
+
[frame.x - nx * (half - lateralOffset), frame.z - nz * (half - lateralOffset)],
|
|
154
|
+
];
|
|
155
|
+
};
|
|
156
|
+
const [startOuter, startInner] = at(startT);
|
|
157
|
+
const [endOuter, endInner] = at(endT);
|
|
158
|
+
return [startOuter, startInner, endOuter, endInner];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Where a run's end moves to when its fence meets `neighbor` at a corner: the two end corners slide
|
|
162
|
+
* along the fence so the run meets the neighbour's in a mitre. `side` is -1 for the inner corner and
|
|
163
|
+
* 1 for the outer, `reach` the metres along the unit vector `(ux, uz)`; null where the two run
|
|
164
|
+
* nearly straight on, or the mitre would reach absurdly far.
|
|
165
|
+
*/
|
|
166
|
+
export function fenceMiter(fence, endpoint, neighbor, depth, lateralOffset = 0) {
|
|
167
|
+
const point = fence[endpoint];
|
|
168
|
+
const frame = getFenceCenterlineFrameAt(fence, endpoint === 'start' ? 0 : 1);
|
|
169
|
+
const sign = endpoint === 'start' ? 1 : -1;
|
|
170
|
+
const ux = frame.tangent.x * sign;
|
|
171
|
+
const uz = frame.tangent.y * sign;
|
|
172
|
+
const neighborAtStart = Math.hypot(neighbor.start[0] - point[0], neighbor.start[1] - point[1]) < 0.001;
|
|
173
|
+
const other = getFenceCenterlineFrameAt(neighbor, neighborAtStart ? 0 : 1);
|
|
174
|
+
const vx = other.tangent.x * (neighborAtStart ? 1 : -1);
|
|
175
|
+
const vz = other.tangent.y * (neighborAtStart ? 1 : -1);
|
|
176
|
+
const cross = ux * vz - uz * vx;
|
|
177
|
+
if (Math.abs(cross) < 0.15)
|
|
178
|
+
return null;
|
|
179
|
+
const ratio = Math.max(neighbor.thickness, 0.03) / Math.max(fence.thickness, 0.03);
|
|
180
|
+
const out = [];
|
|
181
|
+
for (const side of [-1, 1]) {
|
|
182
|
+
const offset = lateralOffset + (side * depth) / 2;
|
|
183
|
+
const neighborOffset = -offset * sign * ratio;
|
|
184
|
+
const nx = -uz * offset * sign;
|
|
185
|
+
const nz = ux * offset * sign;
|
|
186
|
+
const mx = -vz * neighborOffset;
|
|
187
|
+
const mz = vx * neighborOffset;
|
|
188
|
+
const reach = ((mx - nx) * vz - (mz - nz) * vx) / cross;
|
|
189
|
+
if (Math.abs(reach) > Math.max(depth, depth * ratio) * 4)
|
|
190
|
+
continue;
|
|
191
|
+
out.push({ side, reach, ux, uz });
|
|
192
|
+
}
|
|
193
|
+
return out;
|
|
194
|
+
}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import type { NodePatch } from '../lib/structure-kernel.js';
|
|
2
|
-
import type { AnyNode } from '../schema/index.js';
|
|
2
|
+
import type { AnyNode, AnyNodeId, FloorOpeningNode } from '../schema/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* A stair opening reshaped by hand: the floor cut and the ceiling cut below it (the stair's openings
|
|
5
|
+
* on its own two levels) take `polygon` and become openings the stair owns as drawn, so the plate
|
|
6
|
+
* and ceiling are cut by that shape (not the derived rectangle) and keep it when the stair is
|
|
7
|
+
* reselected or re-synced. The stair's current pose is recorded so they still follow it when it
|
|
8
|
+
* moves or resizes. Returns the patches; empty when `openingId` is not a stair opening that can be
|
|
9
|
+
* authored this way (an opening on a level between two the stair joins keeps following it).
|
|
10
|
+
*/
|
|
11
|
+
export declare function authorStairOpeningPatches(nodes: Record<string, AnyNode>, openingId: string, polygon: [number, number][]): Array<{
|
|
12
|
+
id: AnyNodeId;
|
|
13
|
+
data: Partial<FloorOpeningNode>;
|
|
14
|
+
}>;
|
|
3
15
|
export declare function planOwnedFloorOpenings(nodes: Record<string, AnyNode>, options?: {
|
|
4
16
|
ownerIds?: ReadonlySet<string>;
|
|
5
17
|
skipExistingSurfaces?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owned-floor-openings.d.ts","sourceRoot":"","sources":["../../src/systems/owned-floor-openings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"owned-floor-openings.d.ts","sourceRoot":"","sources":["../../src/systems/owned-floor-openings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAuB,MAAM,WAAW,CAAA;AAwI1F;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAC1B,KAAK,CAAC;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAAE,CAAC,CAuC3D;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC,GACL,SAAS,EAAE,CA2Rb"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { canonicalOpeningRing } from '../lib/canonical-opening-ring.js';
|
|
2
|
+
import { queryNodes } from '../runtime/node-queries.js';
|
|
2
3
|
import { FloorOpeningNode as FloorOpeningSchema } from '../schema/nodes/floor-opening.js';
|
|
3
4
|
import { resolveCeilingHeight } from '../services/level-height.js';
|
|
4
5
|
import { getLevelElevations } from '../services/storey.js';
|
|
@@ -99,12 +100,67 @@ function cutsFromSurfaces(surfaces, owners) {
|
|
|
99
100
|
}
|
|
100
101
|
return cuts;
|
|
101
102
|
}
|
|
103
|
+
/** The level an authored stair opening is kept on: its source level for a ceiling cut, else its destination. */
|
|
104
|
+
function authoredOpeningTarget(opening, owner) {
|
|
105
|
+
return opening.metadata.ownerOpeningTarget === 'source' || opening.drawnOn === 'ceiling'
|
|
106
|
+
? owner.fromLevelId
|
|
107
|
+
: owner.toLevelId;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* A stair opening reshaped by hand: the floor cut and the ceiling cut below it (the stair's openings
|
|
111
|
+
* on its own two levels) take `polygon` and become openings the stair owns as drawn, so the plate
|
|
112
|
+
* and ceiling are cut by that shape (not the derived rectangle) and keep it when the stair is
|
|
113
|
+
* reselected or re-synced. The stair's current pose is recorded so they still follow it when it
|
|
114
|
+
* moves or resizes. Returns the patches; empty when `openingId` is not a stair opening that can be
|
|
115
|
+
* authored this way (an opening on a level between two the stair joins keeps following it).
|
|
116
|
+
*/
|
|
117
|
+
export function authorStairOpeningPatches(nodes, openingId, polygon) {
|
|
118
|
+
const opening = nodes[openingId];
|
|
119
|
+
if (opening?.type !== 'floor-opening' || opening.source !== 'stair' || !opening.ownerId)
|
|
120
|
+
return [];
|
|
121
|
+
const owner = nodes[opening.ownerId];
|
|
122
|
+
if (owner?.type !== 'stair' || authoredOpeningTarget(opening, owner) !== opening.parentId)
|
|
123
|
+
return [];
|
|
124
|
+
const segment = owner.children
|
|
125
|
+
.map((id) => nodes[id])
|
|
126
|
+
.find((node) => node?.type === 'stair-segment');
|
|
127
|
+
const footprint = stairFootprintAABB({ ...owner, position: [0, 0, 0], rotation: 0 }, nodes);
|
|
128
|
+
const pose = {
|
|
129
|
+
position: owner.position,
|
|
130
|
+
rotation: owner.rotation,
|
|
131
|
+
width: owner.width,
|
|
132
|
+
runLength: segment?.type === 'stair-segment' ? segment.length : 1,
|
|
133
|
+
...(isBox(footprint) ? { footprint } : {}),
|
|
134
|
+
};
|
|
135
|
+
const ring = canonicalOpeningRing(polygon);
|
|
136
|
+
return Object.values(nodes).flatMap((node) => node.type === 'floor-opening' &&
|
|
137
|
+
node.source === 'stair' &&
|
|
138
|
+
node.ownerId === owner.id &&
|
|
139
|
+
authoredOpeningTarget(node, owner) === node.parentId
|
|
140
|
+
? [
|
|
141
|
+
{
|
|
142
|
+
id: node.id,
|
|
143
|
+
data: {
|
|
144
|
+
polygon: ring,
|
|
145
|
+
surfaceId: undefined,
|
|
146
|
+
legacyPlateCuts: undefined,
|
|
147
|
+
legacyCeilingCuts: undefined,
|
|
148
|
+
cutsPrimary: true,
|
|
149
|
+
cutsAdjacent: false,
|
|
150
|
+
metadata: { ...node.metadata, ownerPose: pose },
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
]
|
|
154
|
+
: []);
|
|
155
|
+
}
|
|
102
156
|
export function planOwnedFloorOpenings(nodes, options = {}) {
|
|
103
|
-
|
|
104
|
-
|
|
157
|
+
// Owners and their openings first: a scene with none has nothing to plan.
|
|
158
|
+
const owned = queryNodes(nodes, { type: ['stair', 'elevator', 'floor-opening'] });
|
|
159
|
+
if (!owned.some((node) => node.type === 'stair' ||
|
|
105
160
|
node.type === 'elevator' ||
|
|
106
161
|
(node.type === 'floor-opening' && (node.source === 'stair' || node.source === 'elevator'))))
|
|
107
162
|
return [];
|
|
163
|
+
const values = Object.values(nodes);
|
|
108
164
|
const existing = values.filter((node) => node.type === 'floor-opening' &&
|
|
109
165
|
(node.source === 'stair' || node.source === 'elevator') &&
|
|
110
166
|
!!node.ownerId &&
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { NodePatch, SceneNodes } from '../lib/structure-kernel.js';
|
|
2
|
-
|
|
2
|
+
import type { SceneStore } from '../store/use-scene.js';
|
|
3
|
+
/** Re-derives the structure of every level an owned opening change cut into or out of. */
|
|
4
|
+
export declare function reconcileOwnedFloorOpeningChanges(store: Pick<SceneStore, 'getState'>, before: SceneNodes, changes: NodePatch[]): void;
|
|
3
5
|
//# sourceMappingURL=reconcile-owned-floor-openings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile-owned-floor-openings.d.ts","sourceRoot":"","sources":["../../src/systems/reconcile-owned-floor-openings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"reconcile-owned-floor-openings.d.ts","sourceRoot":"","sources":["../../src/systems/reconcile-owned-floor-openings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,0FAA0F;AAC1F,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,SAAS,EAAE,QAmBrB"}
|