@pascal-app/core 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +411 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +13804 -10600
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +37 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1163 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5881 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +39 -3
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +259 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +2525 -1723
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +59 -13
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +5 -7
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +181 -35
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +4667 -3065
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +5 -3
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +134 -12
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +182 -41
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +889 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +2897 -1938
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -25
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +62 -2
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +207 -36
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2915 -2114
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +32 -5
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +43 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -19
- package/dist/lib/__fixtures__/mezzanine.d.ts +10900 -8225
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +1629 -828
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-mode.d.ts +11 -0
- package/dist/lib/build-mode.d.ts.map +1 -0
- package/dist/lib/build-mode.js +24 -0
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +207 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-interaction.d.ts +14 -0
- package/dist/lib/door-interaction.d.ts.map +1 -0
- package/dist/lib/door-interaction.js +62 -0
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/elevator-support.d.ts +15 -0
- package/dist/lib/elevator-support.d.ts.map +1 -0
- package/dist/lib/elevator-support.js +40 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +66 -39
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/hierarchy.d.ts +19 -0
- package/dist/lib/hierarchy.d.ts.map +1 -0
- package/dist/lib/hierarchy.js +53 -0
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +40 -8
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +2 -2
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/polygon-boolean.d.ts.map +1 -1
- package/dist/lib/polygon-boolean.js +2 -1
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-elevation.d.ts +12 -0
- package/dist/lib/room-floor-elevation.d.ts.map +1 -0
- package/dist/lib/room-floor-elevation.js +41 -0
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +1 -1
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +113 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +8 -5
- package/dist/lib/window-interaction.d.ts +16 -0
- package/dist/lib/window-interaction.d.ts.map +1 -0
- package/dist/lib/window-interaction.js +82 -0
- package/dist/lib/zone-quantities.js +1 -1
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/column.d.ts +5 -0
- package/dist/node-slots/column.d.ts.map +1 -1
- package/dist/node-slots/column.js +10 -0
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +2 -2
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/registry.d.ts +5 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +10 -0
- package/dist/registry/types.d.ts +89 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-resize.js +2 -2
- package/dist/schema/nodes/roof-segment.d.ts +226 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +97 -12
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +136 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +48 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1080 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/movement.d.ts +7 -0
- package/dist/services/movement.d.ts.map +1 -1
- package/dist/services/movement.js +13 -0
- package/dist/services/port-connectivity.d.ts +15 -6
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +83 -17
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +8 -4
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts +6 -1
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +24 -10
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +847 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1059 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +180 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +1467 -664
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +65 -21
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +33 -12
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +5409 -3807
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-geometry.d.ts +25 -0
- package/dist/systems/elevator/elevator-geometry.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-geometry.js +40 -8
- package/dist/systems/elevator/elevator-opening-sync.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +4 -35
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/elevator/elevator-runtime.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-runtime.js +95 -18
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +24 -4
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +87 -5
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +2714 -1481
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +3815 -2565
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +1630 -829
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-curve.d.ts +10 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +38 -0
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-merge.d.ts +9 -1
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +66 -13
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +11 -4
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +28 -7
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +137 -11
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +4663 -3061
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +3372 -2571
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/measurement-format.d.ts +27 -0
- package/dist/utils/measurement-format.d.ts.map +1 -0
- package/dist/utils/measurement-format.js +143 -0
- package/dist/utils/owned-floor-opening-migration.d.ts +1629 -828
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +2308 -1507
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +3 -1
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -25,7 +25,8 @@ function getWallFreeEndpoint(wall, sharedPoint) {
|
|
|
25
25
|
* The delete heal is strict: room sides must match, and a wall following the
|
|
26
26
|
* storey never joins one with an explicit height. An explicit merge compares
|
|
27
27
|
* what is visible instead — `heightOf` resolves each wall's actual height — and
|
|
28
|
-
* leaves the sides to room detection, which reclassifies the merged wall.
|
|
28
|
+
* leaves the sides to room detection, which reclassifies the merged wall. Sloped
|
|
29
|
+
* tops are matched by `mergedWallTop`, which also builds the merged top.
|
|
29
30
|
*/
|
|
30
31
|
export function wallStyleMismatch(a, b, options) {
|
|
31
32
|
if ((a.parentId ?? null) !== (b.parentId ?? null))
|
|
@@ -41,15 +42,18 @@ export function wallStyleMismatch(a, b, options) {
|
|
|
41
42
|
if (a.justification !== alignedB.justification)
|
|
42
43
|
return 'justification';
|
|
43
44
|
const { heightOf } = options;
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
if (!(a.endHeightOffset || b.endHeightOffset) &&
|
|
46
|
+
(heightOf
|
|
47
|
+
? Math.abs(heightOf(a) - heightOf(b)) > 1e-6
|
|
48
|
+
: (a.height == null) !== (b.height == null) ||
|
|
49
|
+
Math.abs((a.height ?? 0) - (b.height ?? 0)) > 1e-6))
|
|
48
50
|
return 'height';
|
|
49
|
-
// Faces are compared as the merged wall will carry them: b read in a's direction.
|
|
51
|
+
// Faces are compared as the merged wall will carry them: b read in a's direction. An unpainted
|
|
52
|
+
// face's default follows its room side, which room detection reclassifies, so it is set aside.
|
|
53
|
+
const painted = (wall) => ({ ...wall, frontSide: undefined, backSide: undefined });
|
|
50
54
|
for (const face of ['a', 'b']) {
|
|
51
|
-
if (JSON.stringify(resolveWallFaceChain(a, face)) !==
|
|
52
|
-
JSON.stringify(resolveWallFaceChain(alignedB, face)))
|
|
55
|
+
if (JSON.stringify(resolveWallFaceChain(painted(a), face)) !==
|
|
56
|
+
JSON.stringify(resolveWallFaceChain(painted(alignedB), face)))
|
|
53
57
|
return `side ${face.toUpperCase()} finish`;
|
|
54
58
|
}
|
|
55
59
|
if (wallTrimSignature(a) !== wallTrimSignature(alignedB))
|
|
@@ -223,6 +227,32 @@ export function planMergedZoneReferences(nodes, primary, secondary, mergedStart,
|
|
|
223
227
|
export function areWallStylesCompatible(a, b) {
|
|
224
228
|
return wallStyleMismatch(a, b, { sides: true }) === null;
|
|
225
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* The kept wall's top once `secondary` joins it at `joint`: nothing changes between flat walls;
|
|
232
|
+
* sloped ones take the start height and the summed end offset along the kept wall. Null when the
|
|
233
|
+
* tops don't continue one line — a step at the joint or a different rise per metre.
|
|
234
|
+
* `heightAt` reads a wall's body height at a chord fraction.
|
|
235
|
+
*/
|
|
236
|
+
export function mergedWallTop(primary, secondary, joint, heightAt) {
|
|
237
|
+
if (!(primary.endHeightOffset || secondary.endHeightOffset))
|
|
238
|
+
return {};
|
|
239
|
+
const reversed = readsBackwards(secondary, primary.start, primary.end);
|
|
240
|
+
const along = (wall, backwards) => {
|
|
241
|
+
const heights = [heightAt(wall, 0), heightAt(wall, 1)];
|
|
242
|
+
const [from, to] = backwards ? [heights[1], heights[0]] : [heights[0], heights[1]];
|
|
243
|
+
return { from, to, rise: (to - from) / Math.max(wallLength(wall), 1e-9) };
|
|
244
|
+
};
|
|
245
|
+
const primaryFirst = getWallEndpointAtPoint(primary, joint) === 'end';
|
|
246
|
+
const first = primaryFirst ? along(primary, false) : along(secondary, reversed);
|
|
247
|
+
const second = primaryFirst ? along(secondary, reversed) : along(primary, false);
|
|
248
|
+
if (Math.abs(first.to - second.from) > 1e-6 || Math.abs(first.rise - second.rise) > 1e-6)
|
|
249
|
+
return null;
|
|
250
|
+
return {
|
|
251
|
+
// A start that stays where it was keeps its height mode, storey-bound included.
|
|
252
|
+
height: primaryFirst ? primary.height : reversed ? first.from : secondary.height,
|
|
253
|
+
endHeightOffset: first.to - first.from + (second.to - second.from),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
226
256
|
export function areWallsCollinearAcrossPoint(a, b, sharedPoint) {
|
|
227
257
|
const freeA = getWallFreeEndpoint(a, sharedPoint);
|
|
228
258
|
const freeB = getWallFreeEndpoint(b, sharedPoint);
|
|
@@ -260,13 +290,19 @@ export function resolveMergedWallEndpoints(primary, secondary, sharedPoint) {
|
|
|
260
290
|
* 0 front / π back). A wall read backwards turns that frame by 180° about Y,
|
|
261
291
|
* so the face and the yaw swap and the caller mirrors depth. Hinges, handles
|
|
262
292
|
* and swing hang off the node's own yaw (the plan symbol flips them from it),
|
|
263
|
-
* so they stay as stored.
|
|
293
|
+
* so they stay as stored. Door and window casing is kept per wall face, so it
|
|
294
|
+
* swaps faces too and stays on the same side of the wall.
|
|
264
295
|
*/
|
|
265
296
|
function reversedWallChildPatch(child) {
|
|
266
297
|
const patch = {};
|
|
267
298
|
if ('side' in child && (child.side === 'front' || child.side === 'back')) {
|
|
268
299
|
patch.side = child.side === 'front' ? 'back' : 'front';
|
|
269
300
|
}
|
|
301
|
+
if (child.type === 'door' || child.type === 'window') {
|
|
302
|
+
const [faceA, faceB] = [child.casingFaceA === true, child.casingFaceB === true];
|
|
303
|
+
if (faceA !== faceB)
|
|
304
|
+
Object.assign(patch, { casingFaceA: faceB, casingFaceB: faceA });
|
|
305
|
+
}
|
|
270
306
|
if ('rotation' in child && Array.isArray(child.rotation)) {
|
|
271
307
|
const yaw = child.rotation[1] + Math.PI;
|
|
272
308
|
patch.rotation = [
|
|
@@ -355,19 +391,35 @@ export function planWallMerge(nodes, wallIds) {
|
|
|
355
391
|
}
|
|
356
392
|
if (!(next && joint))
|
|
357
393
|
throw Error('Merge walls that touch end to end.');
|
|
394
|
+
if (!areWallsCollinearAcrossPoint(merged, next, joint))
|
|
395
|
+
throw Error('Merge walls that continue in a straight line.');
|
|
396
|
+
// A wall meeting the joint from the side stays T'd into the merged wall's
|
|
397
|
+
// body there; one running along the line would be buried in it.
|
|
398
|
+
const runX = merged.end[0] - merged.start[0];
|
|
399
|
+
const runZ = merged.end[1] - merged.start[1];
|
|
400
|
+
const alongRun = (wall) => {
|
|
401
|
+
const free = getWallFreeEndpoint(wall, joint);
|
|
402
|
+
const x = free[0] - joint[0];
|
|
403
|
+
const z = free[1] - joint[1];
|
|
404
|
+
const length = Math.hypot(x, z) * Math.hypot(runX, runZ);
|
|
405
|
+
return length < 1e-12 || Math.abs(x * runZ - z * runX) / length < 1e-4;
|
|
406
|
+
};
|
|
358
407
|
const atJoint = Object.values(virtual).filter((node) => node?.type === 'wall' &&
|
|
408
|
+
node.id !== merged.id &&
|
|
409
|
+
node.id !== next.id &&
|
|
359
410
|
(node.parentId ?? null) === levelId &&
|
|
360
411
|
getWallEndpointAtPoint(node, joint) !== null);
|
|
361
|
-
if (atJoint.
|
|
412
|
+
if (atJoint.some(alongRun))
|
|
362
413
|
throw Error('Another wall meets this joint, so merging would disconnect it.');
|
|
363
|
-
if (!areWallsCollinearAcrossPoint(merged, next, joint))
|
|
364
|
-
throw Error('Merge walls that continue in a straight line.');
|
|
365
414
|
const mismatch = wallStyleMismatch(merged, next, {
|
|
366
415
|
sides: false,
|
|
367
|
-
heightOf: (wall) => getWallEffectiveHeightForNodes(wall, virtual),
|
|
416
|
+
heightOf: (wall) => getWallEffectiveHeightForNodes(wall, virtual, 0),
|
|
368
417
|
});
|
|
369
418
|
if (mismatch)
|
|
370
419
|
throw Error(`These walls have a different ${mismatch}.`);
|
|
420
|
+
const top = mergedWallTop(merged, next, joint, (wall, t) => getWallEffectiveHeightForNodes(wall, virtual, t));
|
|
421
|
+
if (!top)
|
|
422
|
+
throw Error('These walls have a different slope.');
|
|
371
423
|
const { start, end } = resolveMergedWallEndpoints(merged, next, joint);
|
|
372
424
|
const faceRegions = mergeWallFaceRegions([merged, next], start, end);
|
|
373
425
|
if (!faceRegions)
|
|
@@ -381,6 +433,7 @@ export function planWallMerge(nodes, wallIds) {
|
|
|
381
433
|
const { faceRegions: _regions, ...kept } = merged;
|
|
382
434
|
merged = {
|
|
383
435
|
...kept,
|
|
436
|
+
...top,
|
|
384
437
|
...(faceRegions.length > 0 ? { faceRegions } : {}),
|
|
385
438
|
start,
|
|
386
439
|
end,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-mitering.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-mitering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAQ5C,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"wall-mitering.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-mitering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAQ5C,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;CACpB;AAWD,KAAK,iBAAiB,GAAG,GAAG,CAC1B,MAAM,EACN;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAChF,CAAA;AAGD,KAAK,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAmBlD,iBAAS,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,SAAY,GAAG,MAAM,CAG7D;AA8CD,UAAU,QAAQ;IAChB,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,CAAA;KAAE,CAAC,CAAA;IACnF,YAAY,EAAE,OAAO,CAAA;CACtB;AA4fD,MAAM,WAAW,aAAa;IAE5B,YAAY,EAAE,YAAY,CAAA;IAE1B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;CACjC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,SAAI,GAAG,aAAa,CAUtF;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,aAAa,EACxB,WAAW,SAAI,GACd,uBAAuB,GAAG,IAAI,CA2BhC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CA8C/F;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
|
@@ -208,6 +208,125 @@ function getWallBoundaryFrame(wall, endType) {
|
|
|
208
208
|
normal: { x: -direction.y / length, y: direction.x / length },
|
|
209
209
|
};
|
|
210
210
|
}
|
|
211
|
+
function isOutsideWall(wall) {
|
|
212
|
+
return wall.frontSide === 'exterior' || wall.backSide === 'exterior';
|
|
213
|
+
}
|
|
214
|
+
/** Each wall's joint with its neighbours round the junction (sorted by angle). */
|
|
215
|
+
function miterAdjacentWalls(processedWalls, meetingPoint) {
|
|
216
|
+
const wallIntersections = new Map();
|
|
217
|
+
const n = processedWalls.length;
|
|
218
|
+
// Calculate intersections between adjacent walls (exactly like demo)
|
|
219
|
+
for (let i = 0; i < n; i++) {
|
|
220
|
+
const wall1 = processedWalls[i];
|
|
221
|
+
const wall2 = processedWalls[(i + 1) % n];
|
|
222
|
+
// Intersect left edge of wall1 with right edge of wall2
|
|
223
|
+
const det = wall1.edgeA.a * wall2.edgeB.b - wall2.edgeB.a * wall1.edgeA.b;
|
|
224
|
+
// If lines are parallel (det ≈ 0), skip this intersection - walls will use defaults
|
|
225
|
+
if (Math.abs(det) < 1e-9) {
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
const p = {
|
|
229
|
+
x: (wall1.edgeA.b * wall2.edgeB.c - wall2.edgeB.b * wall1.edgeA.c) / det,
|
|
230
|
+
y: (wall2.edgeB.a * wall1.edgeA.c - wall1.edgeA.a * wall2.edgeB.c) / det,
|
|
231
|
+
};
|
|
232
|
+
// Miter limit: `det` only catches walls that are *exactly* parallel. Two
|
|
233
|
+
// walls meeting at a shallow angle have a small-but-nonzero `det`, so `p`
|
|
234
|
+
// lands far from the junction (∝ 1/sin θ) and the wall renders as an
|
|
235
|
+
// infinite spike. Reject any joint farther than MITER_LIMIT half-thicknesses
|
|
236
|
+
// from the meeting point — those walls fall back to a square joint.
|
|
237
|
+
const maxMiter = MITER_LIMIT * Math.max(wall1.halfThickness, wall2.halfThickness);
|
|
238
|
+
const dx = p.x - meetingPoint.x;
|
|
239
|
+
const dy = p.y - meetingPoint.y;
|
|
240
|
+
if (!(Number.isFinite(p.x) && Number.isFinite(p.y)) ||
|
|
241
|
+
dx * dx + dy * dy > maxMiter * maxMiter) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
// Only assign intersection to non-passthrough walls
|
|
245
|
+
// Passthrough walls don't receive junction data (their geometry doesn't change)
|
|
246
|
+
if (!wall1.isPassthrough) {
|
|
247
|
+
if (!wallIntersections.has(wall1.wallId)) {
|
|
248
|
+
wallIntersections.set(wall1.wallId, {});
|
|
249
|
+
}
|
|
250
|
+
wallIntersections.get(wall1.wallId).left = p;
|
|
251
|
+
}
|
|
252
|
+
if (!wall2.isPassthrough) {
|
|
253
|
+
if (!wallIntersections.has(wall2.wallId)) {
|
|
254
|
+
wallIntersections.set(wall2.wallId, {});
|
|
255
|
+
}
|
|
256
|
+
wallIntersections.get(wall2.wallId).right = p;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return wallIntersections;
|
|
260
|
+
}
|
|
261
|
+
// Walls within about 15° of each other don't make an outside corner.
|
|
262
|
+
const CORNER_MIN_SINE = Math.sin(Math.PI / 12);
|
|
263
|
+
// Walls within about 1° of each other run in line.
|
|
264
|
+
const IN_LINE_SINE = Math.sin(Math.PI / 180);
|
|
265
|
+
const dot2 = (a, b) => a.x * b.x + a.y * b.y;
|
|
266
|
+
const cross2 = (a, b) => a.x * b.y - a.y * b.x;
|
|
267
|
+
/**
|
|
268
|
+
* An outside corner keeps its own miter when a partition carries one of its
|
|
269
|
+
* walls on past the corner (two outside walls at an angle, one inside wall in
|
|
270
|
+
* line with one of them): the outside faces miter to the corner, the partition
|
|
271
|
+
* stops square at the other outside wall's inside face, and the in-line outside
|
|
272
|
+
* wall fills the corner on the partition's room side. So each room's own walls
|
|
273
|
+
* cover its side of the corner, and its floor and ceiling stop at them, where a
|
|
274
|
+
* three-way miter would notch the corner. Null for any other junction.
|
|
275
|
+
*/
|
|
276
|
+
function outsideCornerIntersections(processedWalls, meetingPoint) {
|
|
277
|
+
if (processedWalls.length !== 3 || processedWalls.some((wall) => wall.isPassthrough))
|
|
278
|
+
return null;
|
|
279
|
+
const outside = processedWalls.filter((wall) => wall.outside);
|
|
280
|
+
const inside = processedWalls.find((wall) => !wall.outside);
|
|
281
|
+
if (outside.length !== 2 || !inside)
|
|
282
|
+
return null;
|
|
283
|
+
const inLine = outside.find((wall) => Math.abs(cross2(wall.dir, inside.dir)) < IN_LINE_SINE && dot2(wall.dir, inside.dir) < 0);
|
|
284
|
+
const across = outside.find((wall) => wall !== inLine);
|
|
285
|
+
if (!(inLine && across) || Math.abs(cross2(inLine.dir, across.dir)) < CORNER_MIN_SINE) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
const corner = miterAdjacentWalls(outside, meetingPoint);
|
|
289
|
+
const inLineEnds = corner.get(inLine.wallId);
|
|
290
|
+
const acrossEnds = corner.get(across.wallId);
|
|
291
|
+
if (!(inLineEnds?.left && inLineEnds.right && acrossEnds?.left && acrossEnds.right))
|
|
292
|
+
return null;
|
|
293
|
+
// Of the L's two joints, the one toward the partition is its inside corner.
|
|
294
|
+
const toward = (point) => dot2({ x: point.x - meetingPoint.x, y: point.y - meetingPoint.y }, inside.dir);
|
|
295
|
+
// Where a line parallel to the partition, `offset` across it, meets the
|
|
296
|
+
// across wall's face toward the partition.
|
|
297
|
+
const face = dot2(inside.dir, across.normal) > 0 ? across.hi : across.lo;
|
|
298
|
+
const rate = dot2(inside.dir, across.normal);
|
|
299
|
+
const onFace = (offset) => {
|
|
300
|
+
const origin = {
|
|
301
|
+
x: meetingPoint.x + inside.normal.x * offset,
|
|
302
|
+
y: meetingPoint.y + inside.normal.y * offset,
|
|
303
|
+
};
|
|
304
|
+
const along = (face - offset * dot2(inside.normal, across.normal)) / rate;
|
|
305
|
+
return { x: origin.x + inside.dir.x * along, y: origin.y + inside.dir.y * along };
|
|
306
|
+
};
|
|
307
|
+
// The shared line's point on that face: the in-line wall fills the corner up to it.
|
|
308
|
+
const heel = onFace(0);
|
|
309
|
+
corner.set(inLine.wallId, {
|
|
310
|
+
left: inLineEnds.left,
|
|
311
|
+
right: inLineEnds.right,
|
|
312
|
+
closingPath: toward(inLineEnds.left) > toward(inLineEnds.right)
|
|
313
|
+
? [heel, meetingPoint]
|
|
314
|
+
: [meetingPoint, heel],
|
|
315
|
+
});
|
|
316
|
+
corner.set(across.wallId, toward(acrossEnds.left) > toward(acrossEnds.right)
|
|
317
|
+
? { left: heel, right: acrossEnds.right }
|
|
318
|
+
: { left: acrossEnds.left, right: heel });
|
|
319
|
+
const left = onFace(inside.hi);
|
|
320
|
+
const right = onFace(inside.lo);
|
|
321
|
+
corner.set(inside.wallId, {
|
|
322
|
+
left,
|
|
323
|
+
right,
|
|
324
|
+
// Square across the partition: closing through the junction would reach
|
|
325
|
+
// back into the corner.
|
|
326
|
+
closing: { x: (left.x + right.x) / 2, y: (left.y + right.y) / 2 },
|
|
327
|
+
});
|
|
328
|
+
return corner;
|
|
329
|
+
}
|
|
211
330
|
function calculateJunctionIntersections(junction, facePadding) {
|
|
212
331
|
const { meetingPoint, connectedWalls } = junction;
|
|
213
332
|
const processedWalls = [];
|
|
@@ -239,6 +358,11 @@ function calculateJunctionIntersections(junction, facePadding) {
|
|
|
239
358
|
edgeB,
|
|
240
359
|
isPassthrough: true,
|
|
241
360
|
halfThickness: halfT,
|
|
361
|
+
outside: isOutsideWall(wall),
|
|
362
|
+
dir: { x: v.x / L, y: v.y / L },
|
|
363
|
+
normal: nUnit,
|
|
364
|
+
lo: b,
|
|
365
|
+
hi: a,
|
|
242
366
|
});
|
|
243
367
|
}
|
|
244
368
|
}
|
|
@@ -263,6 +387,11 @@ function calculateJunctionIntersections(junction, facePadding) {
|
|
|
263
387
|
edgeB,
|
|
264
388
|
isPassthrough: false,
|
|
265
389
|
halfThickness: halfT,
|
|
390
|
+
outside: isOutsideWall(wall),
|
|
391
|
+
dir: { x: v.x / L, y: v.y / L },
|
|
392
|
+
normal: nUnit,
|
|
393
|
+
lo: b,
|
|
394
|
+
hi: a,
|
|
266
395
|
});
|
|
267
396
|
}
|
|
268
397
|
}
|
|
@@ -274,68 +403,39 @@ function calculateJunctionIntersections(junction, facePadding) {
|
|
|
274
403
|
return angleOrder;
|
|
275
404
|
return a.wallId < b.wallId ? -1 : a.wallId > b.wallId ? 1 : 0;
|
|
276
405
|
});
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if (
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
const wall1 = processedWalls[i];
|
|
284
|
-
const wall2 = processedWalls[(i + 1) % n];
|
|
285
|
-
// Intersect left edge of wall1 with right edge of wall2
|
|
286
|
-
const det = wall1.edgeA.a * wall2.edgeB.b - wall2.edgeB.a * wall1.edgeA.b;
|
|
287
|
-
// If lines are parallel (det ≈ 0), skip this intersection - walls will use defaults
|
|
288
|
-
if (Math.abs(det) < 1e-9) {
|
|
289
|
-
continue;
|
|
290
|
-
}
|
|
291
|
-
const p = {
|
|
292
|
-
x: (wall1.edgeA.b * wall2.edgeB.c - wall2.edgeB.b * wall1.edgeA.c) / det,
|
|
293
|
-
y: (wall2.edgeB.a * wall1.edgeA.c - wall1.edgeA.a * wall2.edgeB.c) / det,
|
|
294
|
-
};
|
|
295
|
-
// Miter limit: `det` only catches walls that are *exactly* parallel. Two
|
|
296
|
-
// walls meeting at a shallow angle have a small-but-nonzero `det`, so `p`
|
|
297
|
-
// lands far from the junction (∝ 1/sin θ) and the wall renders as an
|
|
298
|
-
// infinite spike. Reject any joint farther than MITER_LIMIT half-thicknesses
|
|
299
|
-
// from the meeting point — those walls fall back to a square joint.
|
|
300
|
-
const maxMiter = MITER_LIMIT * Math.max(wall1.halfThickness, wall2.halfThickness);
|
|
301
|
-
const dx = p.x - meetingPoint.x;
|
|
302
|
-
const dy = p.y - meetingPoint.y;
|
|
303
|
-
if (!(Number.isFinite(p.x) && Number.isFinite(p.y)) ||
|
|
304
|
-
dx * dx + dy * dy > maxMiter * maxMiter) {
|
|
305
|
-
continue;
|
|
306
|
-
}
|
|
307
|
-
// Only assign intersection to non-passthrough walls
|
|
308
|
-
// Passthrough walls don't receive junction data (their geometry doesn't change)
|
|
309
|
-
if (!wall1.isPassthrough) {
|
|
310
|
-
if (!wallIntersections.has(wall1.wallId)) {
|
|
311
|
-
wallIntersections.set(wall1.wallId, {});
|
|
312
|
-
}
|
|
313
|
-
wallIntersections.get(wall1.wallId).left = p;
|
|
314
|
-
}
|
|
315
|
-
if (!wall2.isPassthrough) {
|
|
316
|
-
if (!wallIntersections.has(wall2.wallId)) {
|
|
317
|
-
wallIntersections.set(wall2.wallId, {});
|
|
318
|
-
}
|
|
319
|
-
wallIntersections.get(wall2.wallId).right = p;
|
|
320
|
-
}
|
|
406
|
+
if (processedWalls.length < 2)
|
|
407
|
+
return new Map();
|
|
408
|
+
if (!connectedWalls.some(({ wall }) => wall.justification !== undefined)) {
|
|
409
|
+
const corner = outsideCornerIntersections(processedWalls, meetingPoint);
|
|
410
|
+
if (corner)
|
|
411
|
+
return corner;
|
|
321
412
|
}
|
|
322
|
-
|
|
323
|
-
|
|
413
|
+
const wallIntersections = miterAdjacentWalls(processedWalls, meetingPoint);
|
|
414
|
+
const host = connectedWalls.find(({ endType }) => endType === 'passthrough');
|
|
415
|
+
if (host) {
|
|
416
|
+
// A wall T'd into another's body ends square on its face: both edges
|
|
417
|
+
// already meet the host's near face, and closing through the reference
|
|
418
|
+
// vertex would add a triangular sliver inside the host.
|
|
324
419
|
for (const entry of connectedWalls) {
|
|
325
420
|
if (entry.endType === 'passthrough')
|
|
326
421
|
continue;
|
|
327
422
|
const edges = wallIntersections.get(entry.wall.id);
|
|
328
|
-
if (
|
|
329
|
-
continue;
|
|
330
|
-
if (host && edges.left && edges.right) {
|
|
331
|
-
// Both edges already meet the host's near face. Closing through the
|
|
332
|
-
// reference vertex would add a triangular sliver inside the host.
|
|
423
|
+
if (edges?.left && edges.right) {
|
|
333
424
|
edges.closing = {
|
|
334
425
|
x: (edges.left.x + edges.right.x) / 2,
|
|
335
426
|
y: (edges.left.y + edges.right.y) / 2,
|
|
336
427
|
};
|
|
337
428
|
}
|
|
338
|
-
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
if (connectedWalls.some(({ wall }) => wall.justification !== undefined)) {
|
|
432
|
+
for (const entry of connectedWalls) {
|
|
433
|
+
if (entry.endType === 'passthrough')
|
|
434
|
+
continue;
|
|
435
|
+
const edges = wallIntersections.get(entry.wall.id);
|
|
436
|
+
if (!edges || (host && edges.left && edges.right))
|
|
437
|
+
continue;
|
|
438
|
+
if (connectedWalls.length === 2) {
|
|
339
439
|
const other = connectedWalls.find((candidate) => candidate !== entry);
|
|
340
440
|
if (other.endType === 'passthrough')
|
|
341
441
|
continue;
|
|
@@ -2,17 +2,21 @@ import type { WallNode } from '../../schema/index.js';
|
|
|
2
2
|
export type WallPlanPoint = [number, number];
|
|
3
3
|
export type WallMoveAxis = [number, number];
|
|
4
4
|
export type WallMoveEndpoint = 'start' | 'end';
|
|
5
|
-
|
|
5
|
+
/** A wall's line as the move planners read it: invisible walls move by the same rules. */
|
|
6
|
+
export type WallMoveLine = Pick<WallNode, 'start' | 'end'> & {
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
export type WallMoveBridgePlan<TWall extends WallMoveLine> = {
|
|
6
10
|
wall: TWall;
|
|
7
11
|
originalPoint: WallPlanPoint;
|
|
8
12
|
movedEndpoint: WallMoveEndpoint;
|
|
9
13
|
};
|
|
10
|
-
export type WallMoveLinkedWallTargetPlan<TWall extends
|
|
14
|
+
export type WallMoveLinkedWallTargetPlan<TWall extends WallMoveLine> = {
|
|
11
15
|
wall: TWall;
|
|
12
16
|
originalPoint: WallPlanPoint;
|
|
13
17
|
targetPoint: WallPlanPoint;
|
|
14
18
|
};
|
|
15
|
-
export type WallMoveJunctionPlan<TWall extends
|
|
19
|
+
export type WallMoveJunctionPlan<TWall extends WallMoveLine> = {
|
|
16
20
|
linkedWallsToMove: TWall[];
|
|
17
21
|
linkedWallTargetPlans: Array<WallMoveLinkedWallTargetPlan<TWall>>;
|
|
18
22
|
bridgePlans: Array<WallMoveBridgePlan<TWall>>;
|
|
@@ -30,7 +34,7 @@ export declare function constrainWallMoveDeltaToAxis(deltaX: number, deltaZ: num
|
|
|
30
34
|
* matchPoint/targetPoint pair encodes the pivot, not the original ↔ next
|
|
31
35
|
* endpoint mapping.
|
|
32
36
|
*/
|
|
33
|
-
export declare function getLinkedWallUpdates<TWall extends
|
|
37
|
+
export declare function getLinkedWallUpdates<TWall extends WallMoveLine>(linkedWalls: Array<{
|
|
34
38
|
wall: TWall;
|
|
35
39
|
matchPoint?: WallPlanPoint;
|
|
36
40
|
targetPoint?: WallPlanPoint;
|
|
@@ -39,10 +43,23 @@ export declare function getLinkedWallUpdates<TWall extends Pick<WallNode, 'id' |
|
|
|
39
43
|
start: WallPlanPoint;
|
|
40
44
|
end: WallPlanPoint;
|
|
41
45
|
}>;
|
|
42
|
-
export declare function getPlannedLinkedWallUpdates<TWall extends
|
|
46
|
+
export declare function getPlannedLinkedWallUpdates<TWall extends WallMoveLine>(plan: WallMoveJunctionPlan<TWall>, originalStart: WallPlanPoint, originalEnd: WallPlanPoint, nextStart: WallPlanPoint, nextEnd: WallPlanPoint): Array<{
|
|
47
|
+
id: TWall['id'];
|
|
48
|
+
start: WallPlanPoint;
|
|
49
|
+
end: WallPlanPoint;
|
|
50
|
+
}>;
|
|
51
|
+
export declare function planWallMoveJunctions<TWall extends WallMoveLine>(linkedWalls: TWall[], originalStart: WallPlanPoint, originalEnd: WallPlanPoint, nextStart: WallPlanPoint, nextEnd: WallPlanPoint): WallMoveJunctionPlan<TWall>;
|
|
52
|
+
/**
|
|
53
|
+
* Walls T'd into a moving wall (an end on its reference line, between its
|
|
54
|
+
* ends) stay on it: each such end slides along its own wall onto the moved
|
|
55
|
+
* line, so a partition stretches or shortens with the wall it meets, as a
|
|
56
|
+
* framed partition stays nailed to it. An end the move would carry past the
|
|
57
|
+
* moved wall's ends lets go and stays where it was; walls joined at the moving
|
|
58
|
+
* wall's ends are the junction planner's (`planWallMoveJunctions`).
|
|
59
|
+
*/
|
|
60
|
+
export declare function planAttachedWallUpdates<TWall extends WallMoveLine & Pick<WallNode, 'curveOffset'>>(walls: readonly TWall[], originalStart: WallPlanPoint, originalEnd: WallPlanPoint, nextStart: WallPlanPoint, nextEnd: WallPlanPoint): Array<{
|
|
43
61
|
id: TWall['id'];
|
|
44
62
|
start: WallPlanPoint;
|
|
45
63
|
end: WallPlanPoint;
|
|
46
64
|
}>;
|
|
47
|
-
export declare function planWallMoveJunctions<TWall extends Pick<WallNode, 'id' | 'start' | 'end'>>(linkedWalls: TWall[], originalStart: WallPlanPoint, originalEnd: WallPlanPoint, nextStart: WallPlanPoint, nextEnd: WallPlanPoint): WallMoveJunctionPlan<TWall>;
|
|
48
65
|
//# sourceMappingURL=wall-move.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-move.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAI5C,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE5C,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"wall-move.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAI5C,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAE5C,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC3C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,CAAA;AAC9C,0FAA0F;AAC1F,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAC,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3E,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,YAAY,IAAI;IAC3D,IAAI,EAAE,KAAK,CAAA;IACX,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,gBAAgB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,4BAA4B,CAAC,KAAK,SAAS,YAAY,IAAI;IACrE,IAAI,EAAE,KAAK,CAAA;IACX,aAAa,EAAE,aAAa,CAAA;IAC5B,WAAW,EAAE,aAAa,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,CAAC,KAAK,SAAS,YAAY,IAAI;IAC7D,iBAAiB,EAAE,KAAK,EAAE,CAAA;IAC1B,qBAAqB,EAAE,KAAK,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAA;IACjE,WAAW,EAAE,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7C,aAAa,EAAE,KAAK,EAAE,CAAA;CACvB,CAAA;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,GACjB,YAAY,GAAG,IAAI,CAUrB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,GAAG,IAAI,GACxB,aAAa,CAMf;AAkDD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,YAAY,EAC7D,WAAW,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,KAAK,CAAA;IACX,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,WAAW,CAAC,EAAE,aAAa,CAAA;CAC5B,CAAC,EACF,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,GACrB,KAAK,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,CAAC,CA2BtE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,SAAS,YAAY,EACpE,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,EACjC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,GACrB,KAAK,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,CAAC,CAyBtE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,SAAS,YAAY,EAC9D,WAAW,EAAE,KAAK,EAAE,EACpB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,GACrB,oBAAoB,CAAC,KAAK,CAAC,CAmI7B;AAQD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAChG,KAAK,EAAE,SAAS,KAAK,EAAE,EACvB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,GACrB,KAAK,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,CAAC,CA+CtE"}
|
|
@@ -191,3 +191,68 @@ export function planWallMoveJunctions(linkedWalls, originalStart, originalEnd, n
|
|
|
191
191
|
wallsToDelete: Array.from(wallsToDelete.values()),
|
|
192
192
|
};
|
|
193
193
|
}
|
|
194
|
+
// An end within this of a wall's reference line is T'd into it.
|
|
195
|
+
const ATTACH_TOLERANCE = 1e-3;
|
|
196
|
+
// Walls within about 1° of each other run alongside, never T'd.
|
|
197
|
+
const ATTACH_MIN_SINE = Math.sin(Math.PI / 180);
|
|
198
|
+
const ATTACHED_MIN_LENGTH = 0.01;
|
|
199
|
+
/**
|
|
200
|
+
* Walls T'd into a moving wall (an end on its reference line, between its
|
|
201
|
+
* ends) stay on it: each such end slides along its own wall onto the moved
|
|
202
|
+
* line, so a partition stretches or shortens with the wall it meets, as a
|
|
203
|
+
* framed partition stays nailed to it. An end the move would carry past the
|
|
204
|
+
* moved wall's ends lets go and stays where it was; walls joined at the moving
|
|
205
|
+
* wall's ends are the junction planner's (`planWallMoveJunctions`).
|
|
206
|
+
*/
|
|
207
|
+
export function planAttachedWallUpdates(walls, originalStart, originalEnd, nextStart, nextEnd) {
|
|
208
|
+
const dx = originalEnd[0] - originalStart[0];
|
|
209
|
+
const dz = originalEnd[1] - originalStart[1];
|
|
210
|
+
const length = Math.hypot(dx, dz);
|
|
211
|
+
const mx = nextEnd[0] - nextStart[0];
|
|
212
|
+
const mz = nextEnd[1] - nextStart[1];
|
|
213
|
+
const movedLength = Math.hypot(mx, mz);
|
|
214
|
+
if (length < AXIS_EPSILON || movedLength < AXIS_EPSILON)
|
|
215
|
+
return [];
|
|
216
|
+
const ux = dx / length;
|
|
217
|
+
const uz = dz / length;
|
|
218
|
+
const updates = [];
|
|
219
|
+
for (const wall of walls) {
|
|
220
|
+
if ((wall.curveOffset ?? 0) !== 0)
|
|
221
|
+
continue;
|
|
222
|
+
if (wallTouchesPoint(wall, originalStart) || wallTouchesPoint(wall, originalEnd))
|
|
223
|
+
continue;
|
|
224
|
+
const next = { start: wall.start, end: wall.end };
|
|
225
|
+
let moved = false;
|
|
226
|
+
for (const end of ['start', 'end']) {
|
|
227
|
+
const point = wall[end];
|
|
228
|
+
const along = (point[0] - originalStart[0]) * ux + (point[1] - originalStart[1]) * uz;
|
|
229
|
+
const across = (point[1] - originalStart[1]) * ux - (point[0] - originalStart[0]) * uz;
|
|
230
|
+
if (Math.abs(across) > ATTACH_TOLERANCE ||
|
|
231
|
+
along <= ATTACH_TOLERANCE ||
|
|
232
|
+
along >= length - ATTACH_TOLERANCE) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const other = end === 'start' ? wall.end : wall.start;
|
|
236
|
+
const wx = point[0] - other[0];
|
|
237
|
+
const wz = point[1] - other[1];
|
|
238
|
+
const denominator = wx * mz - wz * mx;
|
|
239
|
+
if (Math.abs(denominator) <= ATTACH_MIN_SINE * Math.hypot(wx, wz) * movedLength)
|
|
240
|
+
continue;
|
|
241
|
+
// other + w·s meets nextStart + m·t.
|
|
242
|
+
const ox = nextStart[0] - other[0];
|
|
243
|
+
const oz = nextStart[1] - other[1];
|
|
244
|
+
const s = (ox * mz - oz * mx) / denominator;
|
|
245
|
+
const t = (ox * wz - oz * wx) / denominator;
|
|
246
|
+
if (t < -AXIS_EPSILON || t > 1 + AXIS_EPSILON)
|
|
247
|
+
continue;
|
|
248
|
+
const target = [other[0] + wx * s, other[1] + wz * s];
|
|
249
|
+
if (Math.hypot(target[0] - other[0], target[1] - other[1]) < ATTACHED_MIN_LENGTH)
|
|
250
|
+
continue;
|
|
251
|
+
next[end] = target;
|
|
252
|
+
moved = true;
|
|
253
|
+
}
|
|
254
|
+
if (moved)
|
|
255
|
+
updates.push({ id: wall.id, start: next.start, end: next.end });
|
|
256
|
+
}
|
|
257
|
+
return updates;
|
|
258
|
+
}
|
|
@@ -7,7 +7,13 @@ import type { WallNode } from '../../schema/nodes/wall.js';
|
|
|
7
7
|
* would collapse below this minimum.
|
|
8
8
|
*/
|
|
9
9
|
export declare const MIN_WALL_HEIGHT = 0.5;
|
|
10
|
-
export declare
|
|
10
|
+
export declare const MIN_WALL_END_HEIGHT = 0.01;
|
|
11
|
+
/**
|
|
12
|
+
* Clamps a wall's end-height offset so the lower end of the wall never
|
|
13
|
+
* collapses below `minEndHeight` (0.01 m by default).
|
|
14
|
+
*/
|
|
15
|
+
export declare function clampWallEndHeightOffset(endHeightOffset: number | undefined, bodyHeight: number, minEndHeight?: number): number;
|
|
16
|
+
export declare function wallFollowsStorey(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType'>, authoredStoreyHeight: number | null): boolean;
|
|
11
17
|
/**
|
|
12
18
|
* Wall-top inversion (vertical building model): a wall with no stored
|
|
13
19
|
* `height` is plane-bound — its top sits at the storey plane (level-local
|
|
@@ -18,9 +24,10 @@ export declare function wallFollowsStorey(wall: Pick<WallNode, 'height' | 'suppo
|
|
|
18
24
|
* Other explicit walls stand on their elected support; ground-hosted walls
|
|
19
25
|
* always retain their authored body height.
|
|
20
26
|
*
|
|
21
|
-
* Returns the top in level-local Y (same frame as `electedBase`)
|
|
27
|
+
* Returns the top in level-local Y (same frame as `electedBase`) at chord fraction `t`
|
|
28
|
+
* ($t = 0$ is the start, $t = 1$ the end); a sloped top differs along the wall.
|
|
22
29
|
*/
|
|
23
|
-
export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportSlabId'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null): number;
|
|
30
|
+
export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType' | 'endHeightOffset'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null, t?: number): number;
|
|
24
31
|
/**
|
|
25
32
|
* Extruded height of the wall body: {@link resolveWallTop} minus the
|
|
26
33
|
* elected base. Base convention: the elected slab-support elevation itself
|
|
@@ -35,5 +42,5 @@ export declare function resolveWallTop(wall: Pick<WallNode, 'height' | 'supportS
|
|
|
35
42
|
* slab reaches the storey plane; callers own the degenerate-geometry
|
|
36
43
|
* policy.
|
|
37
44
|
*/
|
|
38
|
-
export declare function resolveWallEffectiveHeight(wall: Pick<WallNode, 'height' | 'supportSlabId'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null): number;
|
|
45
|
+
export declare function resolveWallEffectiveHeight(wall: Pick<WallNode, 'height' | 'supportSlabId' | 'wallType' | 'endHeightOffset'>, storeyHeight: number, electedBase: number, authoredStoreyHeight?: number | null, t?: number): number;
|
|
39
46
|
//# sourceMappingURL=wall-top.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-top.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-top.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wall-top.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-top.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;AAClC,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAEvC;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,EAClB,YAAY,SAAsB,GACjC,MAAM,CAKR;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,CAAC,EAC7D,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAClC,OAAO,CAST;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,oBAAoB,GAAE,MAAM,GAAG,IAAmB,EAClD,CAAC,SAAI,GACJ,MAAM,CAOR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,GAAG,UAAU,GAAG,iBAAiB,CAAC,EACjF,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,oBAAoB,GAAE,MAAM,GAAG,IAAmB,EAClD,CAAC,SAAI,GACJ,MAAM,CAER"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RAILING_GUARD_HEIGHT } from '../../schema/nodes/railing-wall.js';
|
|
1
2
|
/**
|
|
2
3
|
* Minimum wall body height in meters. Governs both the wall height
|
|
3
4
|
* arrow's lower drag bound and the slab-elevation clamp: a slab may not
|
|
@@ -6,7 +7,22 @@
|
|
|
6
7
|
* would collapse below this minimum.
|
|
7
8
|
*/
|
|
8
9
|
export const MIN_WALL_HEIGHT = 0.5;
|
|
10
|
+
export const MIN_WALL_END_HEIGHT = 0.01;
|
|
11
|
+
/**
|
|
12
|
+
* Clamps a wall's end-height offset so the lower end of the wall never
|
|
13
|
+
* collapses below `minEndHeight` (0.01 m by default).
|
|
14
|
+
*/
|
|
15
|
+
export function clampWallEndHeightOffset(endHeightOffset, bodyHeight, minEndHeight = MIN_WALL_END_HEIGHT) {
|
|
16
|
+
if (!endHeightOffset)
|
|
17
|
+
return 0;
|
|
18
|
+
const maxNegativeOffset = -(Math.max(minEndHeight, bodyHeight) - minEndHeight);
|
|
19
|
+
const clamped = Math.max(endHeightOffset, maxNegativeOffset);
|
|
20
|
+
return clamped === 0 ? 0 : clamped;
|
|
21
|
+
}
|
|
9
22
|
export function wallFollowsStorey(wall, authoredStoreyHeight) {
|
|
23
|
+
// A railing is a guard as tall as itself, never the storey (36 in when it says nothing).
|
|
24
|
+
if (wall.wallType === 'railing')
|
|
25
|
+
return false;
|
|
10
26
|
return (wall.height == null ||
|
|
11
27
|
(authoredStoreyHeight !== null &&
|
|
12
28
|
wall.supportSlabId !== 'ground' &&
|
|
@@ -22,12 +38,17 @@ export function wallFollowsStorey(wall, authoredStoreyHeight) {
|
|
|
22
38
|
* Other explicit walls stand on their elected support; ground-hosted walls
|
|
23
39
|
* always retain their authored body height.
|
|
24
40
|
*
|
|
25
|
-
* Returns the top in level-local Y (same frame as `electedBase`)
|
|
41
|
+
* Returns the top in level-local Y (same frame as `electedBase`) at chord fraction `t`
|
|
42
|
+
* ($t = 0$ is the start, $t = 1$ the end); a sloped top differs along the wall.
|
|
26
43
|
*/
|
|
27
|
-
export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight, t = 0) {
|
|
45
|
+
// Only a railing reaches the fallback with no height of its own.
|
|
46
|
+
const top = wallFollowsStorey(wall, authoredStoreyHeight)
|
|
47
|
+
? storeyHeight
|
|
48
|
+
: electedBase + (wall.height ?? RAILING_GUARD_HEIGHT);
|
|
49
|
+
if (!wall.endHeightOffset)
|
|
50
|
+
return top;
|
|
51
|
+
return top + clampWallEndHeightOffset(wall.endHeightOffset, top - electedBase) * t;
|
|
31
52
|
}
|
|
32
53
|
/**
|
|
33
54
|
* Extruded height of the wall body: {@link resolveWallTop} minus the
|
|
@@ -43,6 +64,6 @@ export function resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHe
|
|
|
43
64
|
* slab reaches the storey plane; callers own the degenerate-geometry
|
|
44
65
|
* policy.
|
|
45
66
|
*/
|
|
46
|
-
export function resolveWallEffectiveHeight(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight) {
|
|
47
|
-
return resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight) - electedBase;
|
|
67
|
+
export function resolveWallEffectiveHeight(wall, storeyHeight, electedBase, authoredStoreyHeight = storeyHeight, t = 0) {
|
|
68
|
+
return resolveWallTop(wall, storeyHeight, electedBase, authoredStoreyHeight, t) - electedBase;
|
|
48
69
|
}
|