@pascal-app/core 0.9.1 → 1.0.0-beta.1
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/README.md +17 -10
- package/dist/events/bus.d.ts +49 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
- package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
- package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/scene-registry.js +27 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +135 -28
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +427 -271
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +208 -9
- package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
- package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-id.js +2 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
- package/dist/index.d.ts +33 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -10
- package/dist/lib/level-name.d.ts +4 -0
- package/dist/lib/level-name.d.ts.map +1 -0
- package/dist/lib/level-name.js +10 -0
- package/dist/lib/measurement-geometry.d.ts +23 -0
- package/dist/lib/measurement-geometry.d.ts.map +1 -0
- package/dist/lib/measurement-geometry.js +249 -0
- package/dist/lib/polygon-geometry.d.ts +0 -1
- package/dist/lib/polygon-geometry.d.ts.map +1 -1
- package/dist/lib/polygon-geometry.js +0 -18
- package/dist/lib/selection-proxy.d.ts +4 -0
- package/dist/lib/selection-proxy.d.ts.map +1 -0
- package/dist/lib/selection-proxy.js +12 -0
- package/dist/lib/slab-polygon.d.ts +31 -2
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +557 -31
- package/dist/lib/slots.d.ts +14 -0
- package/dist/lib/slots.d.ts.map +1 -0
- package/dist/lib/slots.js +26 -0
- package/dist/lib/space-detection.d.ts +40 -6
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +574 -192
- package/dist/lib/terrain-brush.d.ts +163 -0
- package/dist/lib/terrain-brush.d.ts.map +1 -0
- package/dist/lib/terrain-brush.js +359 -0
- package/dist/lib/terrain-codec.d.ts +51 -0
- package/dist/lib/terrain-codec.d.ts.map +1 -0
- package/dist/lib/terrain-codec.js +167 -0
- package/dist/lib/terrain-field.d.ts +150 -0
- package/dist/lib/terrain-field.d.ts.map +1 -0
- package/dist/lib/terrain-field.js +248 -0
- package/dist/lib/terrain-raycast.d.ts +44 -0
- package/dist/lib/terrain-raycast.d.ts.map +1 -0
- package/dist/lib/terrain-raycast.js +188 -0
- package/dist/lib/terrain-source.d.ts +60 -0
- package/dist/lib/terrain-source.d.ts.map +1 -0
- package/dist/lib/terrain-source.js +90 -0
- package/dist/lib/terrain-support.d.ts +60 -0
- package/dist/lib/terrain-support.d.ts.map +1 -0
- package/dist/lib/terrain-support.js +150 -0
- package/dist/lib/wall-distance.d.ts +60 -0
- package/dist/lib/wall-distance.d.ts.map +1 -0
- package/dist/lib/wall-distance.js +85 -0
- package/dist/lib/zone-quantities.d.ts +21 -0
- package/dist/lib/zone-quantities.d.ts.map +1 -0
- package/dist/lib/zone-quantities.js +428 -0
- package/dist/material-library.d.ts +28 -1
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +2233 -441
- package/dist/registry/handles.d.ts +91 -3
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/registry.d.ts +46 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +82 -1
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +8 -1
- package/dist/registry/types.d.ts +781 -39
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +27 -8
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +23 -6
- package/dist/schema/material.d.ts +3 -2
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +7 -5
- package/dist/schema/nodes/box-vent.d.ts +2 -2
- package/dist/schema/nodes/cabinet.d.ts +536 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -0
- package/dist/schema/nodes/cabinet.js +139 -0
- package/dist/schema/nodes/ceiling.d.ts +4 -3
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +11 -1
- package/dist/schema/nodes/chimney.d.ts +4 -4
- package/dist/schema/nodes/column.d.ts +4 -2
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +5 -0
- package/dist/schema/nodes/construction-dimension.d.ts +195 -0
- package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
- package/dist/schema/nodes/construction-dimension.js +151 -0
- package/dist/schema/nodes/cupola.d.ts +2 -2
- package/dist/schema/nodes/door.d.ts +42 -5
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +32 -0
- package/dist/schema/nodes/dormer.d.ts +8 -8
- package/dist/schema/nodes/dormer.js +1 -1
- package/dist/schema/nodes/downspout.d.ts +2 -2
- package/dist/schema/nodes/duct-fitting.d.ts +91 -0
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/duct-fitting.js +92 -0
- package/dist/schema/nodes/duct-segment.d.ts +61 -0
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
- package/dist/schema/nodes/duct-segment.js +73 -0
- package/dist/schema/nodes/duct-terminal.d.ts +58 -0
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
- package/dist/schema/nodes/duct-terminal.js +53 -0
- package/dist/schema/nodes/elevator.d.ts +3 -2
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.js +3 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
- package/dist/schema/nodes/fence.d.ts +20 -2
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +33 -2
- package/dist/schema/nodes/gutter.d.ts +2 -2
- package/dist/schema/nodes/hvac-equipment.d.ts +64 -0
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
- package/dist/schema/nodes/hvac-equipment.js +57 -0
- package/dist/schema/nodes/item.d.ts +9 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +24 -0
- package/dist/schema/nodes/level.d.ts +2 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +12 -31
- package/dist/schema/nodes/lineset.d.ts +42 -0
- package/dist/schema/nodes/lineset.d.ts.map +1 -0
- package/dist/schema/nodes/lineset.js +38 -0
- package/dist/schema/nodes/liquid-line.d.ts +34 -0
- package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
- package/dist/schema/nodes/liquid-line.js +24 -0
- package/dist/schema/nodes/measurement.d.ts +306 -0
- package/dist/schema/nodes/measurement.d.ts.map +1 -0
- package/dist/schema/nodes/measurement.js +87 -0
- package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-fitting.js +45 -0
- package/dist/schema/nodes/pipe-segment.d.ts +48 -0
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-segment.js +36 -0
- package/dist/schema/nodes/pipe-trap.d.ts +43 -0
- package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-trap.js +36 -0
- package/dist/schema/nodes/ridge-vent.d.ts +18 -3
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +221 -3
- package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-shape.js +318 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-walls.js +330 -0
- package/dist/schema/nodes/roof-segment.d.ts +84 -8
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +290 -5
- package/dist/schema/nodes/roof.d.ts +8 -8
- package/dist/schema/nodes/shelf.d.ts +4 -2
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/shelf.js +8 -0
- package/dist/schema/nodes/site.d.ts +9 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +8 -6
- package/dist/schema/nodes/skylight.d.ts +10 -10
- package/dist/schema/nodes/slab.d.ts +8 -2
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +18 -2
- package/dist/schema/nodes/solar-panel.d.ts +4 -4
- package/dist/schema/nodes/spawn.d.ts +1 -0
- package/dist/schema/nodes/spawn.d.ts.map +1 -1
- package/dist/schema/nodes/spawn.js +2 -0
- package/dist/schema/nodes/stair-segment.d.ts +4 -4
- package/dist/schema/nodes/stair.d.ts +16 -13
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +11 -1
- package/dist/schema/nodes/structural-grid.d.ts +27 -0
- package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
- package/dist/schema/nodes/structural-grid.js +17 -0
- package/dist/schema/nodes/turbine-vent.d.ts +2 -2
- package/dist/schema/nodes/wall.d.ts +248 -6
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +266 -0
- package/dist/schema/nodes/window.d.ts +40 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +30 -0
- package/dist/schema/nodes/zone.d.ts +22 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +21 -0
- package/dist/schema/scene-material.d.ts +41 -0
- package/dist/schema/scene-material.d.ts.map +1 -0
- package/dist/schema/scene-material.js +9 -0
- package/dist/schema/terrain.d.ts +28 -0
- package/dist/schema/terrain.d.ts.map +1 -0
- package/dist/schema/terrain.js +30 -0
- package/dist/schema/types.d.ts +1300 -97
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +27 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
- package/dist/services/alignment-anchors.d.ts.map +1 -1
- package/dist/services/alignment-anchors.js +30 -1
- package/dist/services/alignment.d.ts +5 -0
- package/dist/services/alignment.d.ts.map +1 -1
- package/dist/services/alignment.js +2 -0
- package/dist/services/hosting.d.ts +8 -0
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +13 -4
- package/dist/services/index.d.ts +9 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -2
- package/dist/services/level-height.d.ts +27 -0
- package/dist/services/level-height.d.ts.map +1 -0
- package/dist/services/level-height.js +94 -0
- package/dist/services/opening-guides.d.ts +141 -0
- package/dist/services/opening-guides.d.ts.map +1 -0
- package/dist/services/opening-guides.js +267 -0
- package/dist/services/port-connectivity.d.ts +115 -0
- package/dist/services/port-connectivity.d.ts.map +1 -0
- package/dist/services/port-connectivity.js +300 -0
- package/dist/services/riser-diagram.d.ts +40 -0
- package/dist/services/riser-diagram.d.ts.map +1 -0
- package/dist/services/riser-diagram.js +110 -0
- package/dist/services/snap.d.ts +9 -1
- package/dist/services/snap.d.ts.map +1 -1
- package/dist/services/snap.js +21 -1
- package/dist/services/storey.d.ts +103 -0
- package/dist/services/storey.d.ts.map +1 -0
- package/dist/services/storey.js +296 -0
- package/dist/services/system-graph.d.ts +30 -0
- package/dist/services/system-graph.d.ts.map +1 -0
- package/dist/services/system-graph.js +164 -0
- package/dist/services/validate-dwv.d.ts +32 -0
- package/dist/services/validate-dwv.d.ts.map +1 -0
- package/dist/services/validate-dwv.js +118 -0
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +141 -4
- package/dist/store/history-control.d.ts +31 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +130 -0
- package/dist/store/use-live-terrain.d.ts +65 -0
- package/dist/store/use-live-terrain.d.ts.map +1 -0
- package/dist/store/use-live-terrain.js +31 -0
- package/dist/store/use-live-transforms.d.ts +8 -0
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts +47 -3
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +992 -55
- package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +27 -21
- package/dist/systems/elevator/elevator-service.d.ts +0 -2
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +2 -24
- package/dist/systems/fence/fence-centerline.d.ts +12 -0
- package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
- package/dist/systems/fence/fence-centerline.js +37 -0
- package/dist/systems/fence/fence-spline.d.ts +39 -0
- package/dist/systems/fence/fence-spline.d.ts.map +1 -0
- package/dist/systems/fence/fence-spline.js +196 -0
- package/dist/systems/slab/slab-placement.d.ts +11 -0
- package/dist/systems/slab/slab-placement.d.ts.map +1 -0
- package/dist/systems/slab/slab-placement.js +14 -0
- package/dist/systems/slab/slab-support.d.ts +137 -0
- package/dist/systems/slab/slab-support.d.ts.map +1 -0
- package/dist/systems/slab/slab-support.js +557 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +21 -11
- package/dist/systems/stair/stair-opening-preview.d.ts +1300 -505
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +19 -33
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +32 -4
- package/dist/systems/stair/stair-rise.d.ts +22 -0
- package/dist/systems/stair/stair-rise.d.ts.map +1 -0
- package/dist/systems/stair/stair-rise.js +79 -0
- 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 +1 -1
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +44 -8
- package/dist/systems/wall/wall-top.d.ts +40 -0
- package/dist/systems/wall/wall-top.d.ts.map +1 -0
- package/dist/systems/wall/wall-top.js +46 -0
- package/dist/utils/clone-scene-graph.d.ts +1 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +56 -5
- package/dist/utils/heal-scene-graph.d.ts +18 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -0
- package/dist/utils/heal-scene-graph.js +106 -0
- package/dist/validation/validate-build-json.d.ts +3 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +90 -5
- package/package.json +4 -4
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -273
- package/dist/lib/space-detection-pause.test.d.ts +0 -2
- package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
- package/dist/lib/space-detection-pause.test.js +0 -42
- package/dist/lib/space-detection.test.d.ts +0 -2
- package/dist/lib/space-detection.test.d.ts.map +0 -1
- package/dist/lib/space-detection.test.js +0 -77
- package/dist/registry/registry.test.d.ts +0 -2
- package/dist/registry/registry.test.d.ts.map +0 -1
- package/dist/registry/registry.test.js +0 -183
- package/dist/registry/relations-resolver.test.d.ts +0 -2
- package/dist/registry/relations-resolver.test.d.ts.map +0 -1
- package/dist/registry/relations-resolver.test.js +0 -183
- package/dist/registry/scene-api.test.d.ts +0 -2
- package/dist/registry/scene-api.test.d.ts.map +0 -1
- package/dist/registry/scene-api.test.js +0 -183
- package/dist/registry/subtree.test.d.ts +0 -2
- package/dist/registry/subtree.test.d.ts.map +0 -1
- package/dist/registry/subtree.test.js +0 -133
- package/dist/schema/asset-url.test.d.ts +0 -2
- package/dist/schema/asset-url.test.d.ts.map +0 -1
- package/dist/schema/asset-url.test.js +0 -134
- package/dist/services/alignment-anchors.test.d.ts +0 -2
- package/dist/services/alignment-anchors.test.d.ts.map +0 -1
- package/dist/services/alignment-anchors.test.js +0 -383
- package/dist/services/alignment.test.d.ts +0 -2
- package/dist/services/alignment.test.d.ts.map +0 -1
- package/dist/services/alignment.test.js +0 -92
- package/dist/services/drag-session.test.d.ts +0 -2
- package/dist/services/drag-session.test.d.ts.map +0 -1
- package/dist/services/drag-session.test.js +0 -219
- package/dist/services/hosting.test.d.ts +0 -2
- package/dist/services/hosting.test.d.ts.map +0 -1
- package/dist/services/hosting.test.js +0 -199
- package/dist/services/movement.test.d.ts +0 -2
- package/dist/services/movement.test.d.ts.map +0 -1
- package/dist/services/movement.test.js +0 -133
- package/dist/services/single-undo-dance.test.d.ts +0 -2
- package/dist/services/single-undo-dance.test.d.ts.map +0 -1
- package/dist/services/single-undo-dance.test.js +0 -210
- package/dist/services/snap.test.d.ts +0 -2
- package/dist/services/snap.test.d.ts.map +0 -1
- package/dist/services/snap.test.js +0 -95
- package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
- package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
- package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
- package/dist/store/actions/reparent.test.d.ts +0 -2
- package/dist/store/actions/reparent.test.d.ts.map +0 -1
- package/dist/store/actions/reparent.test.js +0 -212
- package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
- package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
- package/dist/store/use-scene-elevator-migration.test.js +0 -109
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
- package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-runtime.test.js +0 -64
- package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-preview.test.js +0 -80
- package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-sync.test.js +0 -446
- package/dist/utils/clone-scene-graph.test.d.ts +0 -2
- package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
- package/dist/utils/clone-scene-graph.test.js +0 -59
|
@@ -1,5 +1,128 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { MaterialSchema } from '../material';
|
|
3
|
+
export declare const WallTreatmentSide: z.ZodEnum<{
|
|
4
|
+
interior: "interior";
|
|
5
|
+
exterior: "exterior";
|
|
6
|
+
both: "both";
|
|
7
|
+
}>;
|
|
8
|
+
export type WallTreatmentSide = z.infer<typeof WallTreatmentSide>;
|
|
9
|
+
export declare const WallTrimProfile: z.ZodEnum<{
|
|
10
|
+
flat: "flat";
|
|
11
|
+
bevel: "bevel";
|
|
12
|
+
triangle: "triangle";
|
|
13
|
+
cove: "cove";
|
|
14
|
+
bullnose: "bullnose";
|
|
15
|
+
"base-modern": "base-modern";
|
|
16
|
+
"base-colonial": "base-colonial";
|
|
17
|
+
"base-shoe": "base-shoe";
|
|
18
|
+
"base-ogee": "base-ogee";
|
|
19
|
+
"crown-cove": "crown-cove";
|
|
20
|
+
"crown-ogee": "crown-ogee";
|
|
21
|
+
"crown-craftsman": "crown-craftsman";
|
|
22
|
+
"crown-layered": "crown-layered";
|
|
23
|
+
"rail-rounded": "rail-rounded";
|
|
24
|
+
"rail-ogee": "rail-ogee";
|
|
25
|
+
"rail-picture": "rail-picture";
|
|
26
|
+
"rail-stepped": "rail-stepped";
|
|
27
|
+
}>;
|
|
28
|
+
export type WallTrimProfile = z.infer<typeof WallTrimProfile>;
|
|
29
|
+
export declare const WallTrimConfig: z.ZodObject<{
|
|
30
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
31
|
+
sides: z.ZodDefault<z.ZodEnum<{
|
|
32
|
+
interior: "interior";
|
|
33
|
+
exterior: "exterior";
|
|
34
|
+
both: "both";
|
|
35
|
+
}>>;
|
|
36
|
+
height: z.ZodDefault<z.ZodNumber>;
|
|
37
|
+
proud: z.ZodDefault<z.ZodNumber>;
|
|
38
|
+
profile: z.ZodDefault<z.ZodEnum<{
|
|
39
|
+
flat: "flat";
|
|
40
|
+
bevel: "bevel";
|
|
41
|
+
triangle: "triangle";
|
|
42
|
+
cove: "cove";
|
|
43
|
+
bullnose: "bullnose";
|
|
44
|
+
"base-modern": "base-modern";
|
|
45
|
+
"base-colonial": "base-colonial";
|
|
46
|
+
"base-shoe": "base-shoe";
|
|
47
|
+
"base-ogee": "base-ogee";
|
|
48
|
+
"crown-cove": "crown-cove";
|
|
49
|
+
"crown-ogee": "crown-ogee";
|
|
50
|
+
"crown-craftsman": "crown-craftsman";
|
|
51
|
+
"crown-layered": "crown-layered";
|
|
52
|
+
"rail-rounded": "rail-rounded";
|
|
53
|
+
"rail-ogee": "rail-ogee";
|
|
54
|
+
"rail-picture": "rail-picture";
|
|
55
|
+
"rail-stepped": "rail-stepped";
|
|
56
|
+
}>>;
|
|
57
|
+
offsetY: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
export type WallTrimConfig = z.infer<typeof WallTrimConfig>;
|
|
60
|
+
export declare const WALL_SKIRTING_DEFAULT: WallTrimConfig;
|
|
61
|
+
export declare const WALL_CROWN_DEFAULT: WallTrimConfig;
|
|
62
|
+
export declare const WALL_CHAIR_RAIL_DEFAULT: WallTrimConfig;
|
|
63
|
+
export declare const WALL_TRIM_DEFAULTS: {
|
|
64
|
+
readonly skirting: {
|
|
65
|
+
enabled: boolean;
|
|
66
|
+
sides: "interior" | "exterior" | "both";
|
|
67
|
+
height: number;
|
|
68
|
+
proud: number;
|
|
69
|
+
profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
|
|
70
|
+
offsetY?: number | undefined;
|
|
71
|
+
};
|
|
72
|
+
readonly crown: {
|
|
73
|
+
enabled: boolean;
|
|
74
|
+
sides: "interior" | "exterior" | "both";
|
|
75
|
+
height: number;
|
|
76
|
+
proud: number;
|
|
77
|
+
profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
|
|
78
|
+
offsetY?: number | undefined;
|
|
79
|
+
};
|
|
80
|
+
readonly chairRail: {
|
|
81
|
+
enabled: boolean;
|
|
82
|
+
sides: "interior" | "exterior" | "both";
|
|
83
|
+
height: number;
|
|
84
|
+
proud: number;
|
|
85
|
+
profile: "flat" | "bevel" | "triangle" | "cove" | "bullnose" | "base-modern" | "base-colonial" | "base-shoe" | "base-ogee" | "crown-cove" | "crown-ogee" | "crown-craftsman" | "crown-layered" | "rail-rounded" | "rail-ogee" | "rail-picture" | "rail-stepped";
|
|
86
|
+
offsetY?: number | undefined;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
export declare const WallFaceBandConfig: z.ZodPreprocess<z.ZodObject<{
|
|
90
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
91
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
92
|
+
lowerHeight: z.ZodDefault<z.ZodNumber>;
|
|
93
|
+
middleHeight: z.ZodDefault<z.ZodNumber>;
|
|
94
|
+
upperHeight: z.ZodDefault<z.ZodNumber>;
|
|
95
|
+
}, z.core.$strip>>;
|
|
96
|
+
export type WallFaceBandConfig = z.infer<typeof WallFaceBandConfig>;
|
|
97
|
+
export declare const WALL_FACE_BAND_DEFAULT: WallFaceBandConfig;
|
|
98
|
+
export declare const WALL_SKIRTING_SLOT_DEFAULT = "library:preset-softwhite";
|
|
99
|
+
export declare const WALL_CROWN_SLOT_DEFAULT = "library:preset-white";
|
|
100
|
+
export declare const WALL_CHAIR_RAIL_SLOT_DEFAULT = "library:preset-cream";
|
|
101
|
+
export declare const WALL_FACE_BAND_SOLID_SLOT_DEFAULTS: {
|
|
102
|
+
readonly lower: "library:preset-white";
|
|
103
|
+
readonly middle: "library:preset-lightgrey";
|
|
104
|
+
readonly upper: "library:preset-greige";
|
|
105
|
+
readonly top: "library:preset-softwhite";
|
|
106
|
+
};
|
|
107
|
+
export declare const WALL_SURFACE_SLOT_DEFAULTS: {
|
|
108
|
+
readonly interior: "library:concrete-drywall";
|
|
109
|
+
readonly exterior: "library:concrete-drywall";
|
|
110
|
+
readonly lowerInterior: "library:concrete-drywall";
|
|
111
|
+
readonly middleInterior: "library:concrete-drywall";
|
|
112
|
+
readonly upperInterior: "library:concrete-drywall";
|
|
113
|
+
readonly topInterior: "library:concrete-drywall";
|
|
114
|
+
readonly lowerExterior: "library:concrete-drywall";
|
|
115
|
+
readonly middleExterior: "library:concrete-drywall";
|
|
116
|
+
readonly upperExterior: "library:concrete-drywall";
|
|
117
|
+
readonly topExterior: "library:concrete-drywall";
|
|
118
|
+
readonly skirtingInterior: "library:preset-softwhite";
|
|
119
|
+
readonly skirtingExterior: "library:preset-softwhite";
|
|
120
|
+
readonly crownInterior: "library:preset-white";
|
|
121
|
+
readonly crownExterior: "library:preset-white";
|
|
122
|
+
readonly chairRailInterior: "library:preset-cream";
|
|
123
|
+
readonly chairRailExterior: "library:preset-cream";
|
|
124
|
+
};
|
|
125
|
+
export type WallSurfaceSlotId = keyof typeof WALL_SURFACE_SLOT_DEFAULTS;
|
|
3
126
|
export declare const WallNode: z.ZodObject<{
|
|
4
127
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
5
128
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -21,7 +144,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
21
144
|
children: z.ZodDefault<z.ZodArray<z.ZodUnion<readonly [z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`door_${string}`>>, z.ZodDefault<z.ZodTemplateLiteral<`window_${string}`>>]>>>;
|
|
22
145
|
material: z.ZodOptional<z.ZodObject<{
|
|
23
146
|
id: z.ZodOptional<z.ZodString>;
|
|
24
|
-
preset: z.ZodOptional<z.ZodEnum<{
|
|
147
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
25
148
|
custom: "custom";
|
|
26
149
|
white: "white";
|
|
27
150
|
brick: "brick";
|
|
@@ -32,7 +155,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
32
155
|
plaster: "plaster";
|
|
33
156
|
tile: "tile";
|
|
34
157
|
marble: "marble";
|
|
35
|
-
}
|
|
158
|
+
}>>>;
|
|
36
159
|
properties: z.ZodOptional<z.ZodObject<{
|
|
37
160
|
color: z.ZodDefault<z.ZodString>;
|
|
38
161
|
roughness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -54,7 +177,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
54
177
|
materialPreset: z.ZodOptional<z.ZodString>;
|
|
55
178
|
interiorMaterial: z.ZodOptional<z.ZodObject<{
|
|
56
179
|
id: z.ZodOptional<z.ZodString>;
|
|
57
|
-
preset: z.ZodOptional<z.ZodEnum<{
|
|
180
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
58
181
|
custom: "custom";
|
|
59
182
|
white: "white";
|
|
60
183
|
brick: "brick";
|
|
@@ -65,7 +188,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
65
188
|
plaster: "plaster";
|
|
66
189
|
tile: "tile";
|
|
67
190
|
marble: "marble";
|
|
68
|
-
}
|
|
191
|
+
}>>>;
|
|
69
192
|
properties: z.ZodOptional<z.ZodObject<{
|
|
70
193
|
color: z.ZodDefault<z.ZodString>;
|
|
71
194
|
roughness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -87,7 +210,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
87
210
|
interiorMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
88
211
|
exteriorMaterial: z.ZodOptional<z.ZodObject<{
|
|
89
212
|
id: z.ZodOptional<z.ZodString>;
|
|
90
|
-
preset: z.ZodOptional<z.ZodEnum<{
|
|
213
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
91
214
|
custom: "custom";
|
|
92
215
|
white: "white";
|
|
93
216
|
brick: "brick";
|
|
@@ -98,7 +221,7 @@ export declare const WallNode: z.ZodObject<{
|
|
|
98
221
|
plaster: "plaster";
|
|
99
222
|
tile: "tile";
|
|
100
223
|
marble: "marble";
|
|
101
|
-
}
|
|
224
|
+
}>>>;
|
|
102
225
|
properties: z.ZodOptional<z.ZodObject<{
|
|
103
226
|
color: z.ZodDefault<z.ZodString>;
|
|
104
227
|
roughness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -118,9 +241,110 @@ export declare const WallNode: z.ZodObject<{
|
|
|
118
241
|
}, z.core.$strip>>;
|
|
119
242
|
}, z.core.$strip>>;
|
|
120
243
|
exteriorMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
244
|
+
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
121
245
|
thickness: z.ZodOptional<z.ZodNumber>;
|
|
122
246
|
height: z.ZodOptional<z.ZodNumber>;
|
|
123
247
|
curveOffset: z.ZodOptional<z.ZodNumber>;
|
|
248
|
+
supportSlabId: z.ZodOptional<z.ZodString>;
|
|
249
|
+
supportOffset: z.ZodOptional<z.ZodNumber>;
|
|
250
|
+
fillToTerrain: z.ZodOptional<z.ZodBoolean>;
|
|
251
|
+
faceBands: z.ZodOptional<z.ZodPreprocess<z.ZodObject<{
|
|
252
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
253
|
+
count: z.ZodDefault<z.ZodNumber>;
|
|
254
|
+
lowerHeight: z.ZodDefault<z.ZodNumber>;
|
|
255
|
+
middleHeight: z.ZodDefault<z.ZodNumber>;
|
|
256
|
+
upperHeight: z.ZodDefault<z.ZodNumber>;
|
|
257
|
+
}, z.core.$strip>>>;
|
|
258
|
+
skirting: z.ZodOptional<z.ZodObject<{
|
|
259
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
260
|
+
sides: z.ZodDefault<z.ZodEnum<{
|
|
261
|
+
interior: "interior";
|
|
262
|
+
exterior: "exterior";
|
|
263
|
+
both: "both";
|
|
264
|
+
}>>;
|
|
265
|
+
height: z.ZodDefault<z.ZodNumber>;
|
|
266
|
+
proud: z.ZodDefault<z.ZodNumber>;
|
|
267
|
+
profile: z.ZodDefault<z.ZodEnum<{
|
|
268
|
+
flat: "flat";
|
|
269
|
+
bevel: "bevel";
|
|
270
|
+
triangle: "triangle";
|
|
271
|
+
cove: "cove";
|
|
272
|
+
bullnose: "bullnose";
|
|
273
|
+
"base-modern": "base-modern";
|
|
274
|
+
"base-colonial": "base-colonial";
|
|
275
|
+
"base-shoe": "base-shoe";
|
|
276
|
+
"base-ogee": "base-ogee";
|
|
277
|
+
"crown-cove": "crown-cove";
|
|
278
|
+
"crown-ogee": "crown-ogee";
|
|
279
|
+
"crown-craftsman": "crown-craftsman";
|
|
280
|
+
"crown-layered": "crown-layered";
|
|
281
|
+
"rail-rounded": "rail-rounded";
|
|
282
|
+
"rail-ogee": "rail-ogee";
|
|
283
|
+
"rail-picture": "rail-picture";
|
|
284
|
+
"rail-stepped": "rail-stepped";
|
|
285
|
+
}>>;
|
|
286
|
+
offsetY: z.ZodOptional<z.ZodNumber>;
|
|
287
|
+
}, z.core.$strip>>;
|
|
288
|
+
crown: z.ZodOptional<z.ZodObject<{
|
|
289
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
290
|
+
sides: z.ZodDefault<z.ZodEnum<{
|
|
291
|
+
interior: "interior";
|
|
292
|
+
exterior: "exterior";
|
|
293
|
+
both: "both";
|
|
294
|
+
}>>;
|
|
295
|
+
height: z.ZodDefault<z.ZodNumber>;
|
|
296
|
+
proud: z.ZodDefault<z.ZodNumber>;
|
|
297
|
+
profile: z.ZodDefault<z.ZodEnum<{
|
|
298
|
+
flat: "flat";
|
|
299
|
+
bevel: "bevel";
|
|
300
|
+
triangle: "triangle";
|
|
301
|
+
cove: "cove";
|
|
302
|
+
bullnose: "bullnose";
|
|
303
|
+
"base-modern": "base-modern";
|
|
304
|
+
"base-colonial": "base-colonial";
|
|
305
|
+
"base-shoe": "base-shoe";
|
|
306
|
+
"base-ogee": "base-ogee";
|
|
307
|
+
"crown-cove": "crown-cove";
|
|
308
|
+
"crown-ogee": "crown-ogee";
|
|
309
|
+
"crown-craftsman": "crown-craftsman";
|
|
310
|
+
"crown-layered": "crown-layered";
|
|
311
|
+
"rail-rounded": "rail-rounded";
|
|
312
|
+
"rail-ogee": "rail-ogee";
|
|
313
|
+
"rail-picture": "rail-picture";
|
|
314
|
+
"rail-stepped": "rail-stepped";
|
|
315
|
+
}>>;
|
|
316
|
+
offsetY: z.ZodOptional<z.ZodNumber>;
|
|
317
|
+
}, z.core.$strip>>;
|
|
318
|
+
chairRail: z.ZodOptional<z.ZodObject<{
|
|
319
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
320
|
+
sides: z.ZodDefault<z.ZodEnum<{
|
|
321
|
+
interior: "interior";
|
|
322
|
+
exterior: "exterior";
|
|
323
|
+
both: "both";
|
|
324
|
+
}>>;
|
|
325
|
+
height: z.ZodDefault<z.ZodNumber>;
|
|
326
|
+
proud: z.ZodDefault<z.ZodNumber>;
|
|
327
|
+
profile: z.ZodDefault<z.ZodEnum<{
|
|
328
|
+
flat: "flat";
|
|
329
|
+
bevel: "bevel";
|
|
330
|
+
triangle: "triangle";
|
|
331
|
+
cove: "cove";
|
|
332
|
+
bullnose: "bullnose";
|
|
333
|
+
"base-modern": "base-modern";
|
|
334
|
+
"base-colonial": "base-colonial";
|
|
335
|
+
"base-shoe": "base-shoe";
|
|
336
|
+
"base-ogee": "base-ogee";
|
|
337
|
+
"crown-cove": "crown-cove";
|
|
338
|
+
"crown-ogee": "crown-ogee";
|
|
339
|
+
"crown-craftsman": "crown-craftsman";
|
|
340
|
+
"crown-layered": "crown-layered";
|
|
341
|
+
"rail-rounded": "rail-rounded";
|
|
342
|
+
"rail-ogee": "rail-ogee";
|
|
343
|
+
"rail-picture": "rail-picture";
|
|
344
|
+
"rail-stepped": "rail-stepped";
|
|
345
|
+
}>>;
|
|
346
|
+
offsetY: z.ZodOptional<z.ZodNumber>;
|
|
347
|
+
}, z.core.$strip>>;
|
|
124
348
|
start: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
125
349
|
end: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
126
350
|
frontSide: z.ZodDefault<z.ZodEnum<{
|
|
@@ -136,6 +360,24 @@ export declare const WallNode: z.ZodObject<{
|
|
|
136
360
|
}, z.core.$strip>;
|
|
137
361
|
export type WallNode = z.infer<typeof WallNode>;
|
|
138
362
|
export type WallSurfaceSide = 'interior' | 'exterior';
|
|
363
|
+
export type WallFaceBand = 'lower' | 'middle' | 'upper' | 'top';
|
|
364
|
+
export type WallBandSurfaceSlotId = 'lowerInterior' | 'middleInterior' | 'upperInterior' | 'topInterior' | 'lowerExterior' | 'middleExterior' | 'upperExterior' | 'topExterior';
|
|
365
|
+
export declare const WALL_SLOT_DEFAULT: Record<WallSurfaceSide, string>;
|
|
366
|
+
export declare function getWallFaceBandConfig(wall: Pick<WallNode, 'height' | 'faceBands'>, effectiveWallHeight: number): {
|
|
367
|
+
enabled: boolean;
|
|
368
|
+
count: number;
|
|
369
|
+
lowerHeight: number;
|
|
370
|
+
middleHeight: number;
|
|
371
|
+
upperHeight: number;
|
|
372
|
+
lowerTop: number;
|
|
373
|
+
middleTop: number;
|
|
374
|
+
upperTop: number;
|
|
375
|
+
};
|
|
376
|
+
export declare function getWallFaceBandForHeight(wall: Pick<WallNode, 'height' | 'faceBands'>, y: number, effectiveWallHeight: number): WallFaceBand;
|
|
377
|
+
export declare function getWallBandSlotId(side: WallSurfaceSide, band: WallFaceBand): WallBandSurfaceSlotId;
|
|
378
|
+
export declare function buildWallFaceBandCountPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>, count: number): Pick<WallNode, 'faceBands' | 'slots'>;
|
|
379
|
+
export declare function buildEnabledWallFaceBandPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>): Pick<WallNode, 'faceBands' | 'slots'>;
|
|
380
|
+
export declare function getWallSurfaceSideFromBandSlot(slotId: string): WallSurfaceSide | null;
|
|
139
381
|
export type WallSurfaceMaterialSpec = {
|
|
140
382
|
material?: z.infer<typeof MaterialSchema>;
|
|
141
383
|
materialPreset?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/wall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAK5C,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/wall.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,109 @@ import { MaterialSchema } from '../material';
|
|
|
5
5
|
import { DoorNode } from './door';
|
|
6
6
|
import { ItemNode } from './item';
|
|
7
7
|
import { WindowNode } from './window';
|
|
8
|
+
export const WallTreatmentSide = z.enum(['interior', 'exterior', 'both']);
|
|
9
|
+
export const WallTrimProfile = z.enum([
|
|
10
|
+
'flat',
|
|
11
|
+
'bevel',
|
|
12
|
+
'triangle',
|
|
13
|
+
'cove',
|
|
14
|
+
'bullnose',
|
|
15
|
+
'base-modern',
|
|
16
|
+
'base-colonial',
|
|
17
|
+
'base-shoe',
|
|
18
|
+
'base-ogee',
|
|
19
|
+
'crown-cove',
|
|
20
|
+
'crown-ogee',
|
|
21
|
+
'crown-craftsman',
|
|
22
|
+
'crown-layered',
|
|
23
|
+
'rail-rounded',
|
|
24
|
+
'rail-ogee',
|
|
25
|
+
'rail-picture',
|
|
26
|
+
'rail-stepped',
|
|
27
|
+
]);
|
|
28
|
+
export const WallTrimConfig = z.object({
|
|
29
|
+
enabled: z.boolean().default(false),
|
|
30
|
+
sides: WallTreatmentSide.default('both'),
|
|
31
|
+
height: z.number().default(0.1),
|
|
32
|
+
proud: z.number().default(0.015),
|
|
33
|
+
profile: WallTrimProfile.default('flat'),
|
|
34
|
+
offsetY: z.number().optional(),
|
|
35
|
+
});
|
|
36
|
+
export const WALL_SKIRTING_DEFAULT = {
|
|
37
|
+
enabled: false,
|
|
38
|
+
sides: 'both',
|
|
39
|
+
height: 0.12,
|
|
40
|
+
proud: 0.02,
|
|
41
|
+
profile: 'flat',
|
|
42
|
+
};
|
|
43
|
+
export const WALL_CROWN_DEFAULT = {
|
|
44
|
+
enabled: false,
|
|
45
|
+
sides: 'both',
|
|
46
|
+
height: 0.12,
|
|
47
|
+
proud: 0.055,
|
|
48
|
+
profile: 'flat',
|
|
49
|
+
};
|
|
50
|
+
export const WALL_CHAIR_RAIL_DEFAULT = {
|
|
51
|
+
enabled: false,
|
|
52
|
+
sides: 'both',
|
|
53
|
+
height: 0.055,
|
|
54
|
+
proud: 0.026,
|
|
55
|
+
profile: 'flat',
|
|
56
|
+
offsetY: 0.9,
|
|
57
|
+
};
|
|
58
|
+
export const WALL_TRIM_DEFAULTS = {
|
|
59
|
+
skirting: WALL_SKIRTING_DEFAULT,
|
|
60
|
+
crown: WALL_CROWN_DEFAULT,
|
|
61
|
+
chairRail: WALL_CHAIR_RAIL_DEFAULT,
|
|
62
|
+
};
|
|
63
|
+
const WallFaceBandConfigShape = z.object({
|
|
64
|
+
enabled: z.boolean().default(false),
|
|
65
|
+
count: z.number().int().min(1).max(4).default(1),
|
|
66
|
+
lowerHeight: z.number().default(0.84),
|
|
67
|
+
middleHeight: z.number().default(0.61),
|
|
68
|
+
upperHeight: z.number().default(0.61),
|
|
69
|
+
});
|
|
70
|
+
export const WallFaceBandConfig = z.preprocess((value) => {
|
|
71
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && !('count' in value)) {
|
|
72
|
+
const enabled = value.enabled === true;
|
|
73
|
+
return { ...value, count: enabled ? 3 : 1 };
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
}, WallFaceBandConfigShape);
|
|
77
|
+
export const WALL_FACE_BAND_DEFAULT = {
|
|
78
|
+
enabled: false,
|
|
79
|
+
count: 1,
|
|
80
|
+
lowerHeight: 0.84,
|
|
81
|
+
middleHeight: 0.61,
|
|
82
|
+
upperHeight: 0.61,
|
|
83
|
+
};
|
|
84
|
+
export const WALL_SKIRTING_SLOT_DEFAULT = 'library:preset-softwhite';
|
|
85
|
+
export const WALL_CROWN_SLOT_DEFAULT = 'library:preset-white';
|
|
86
|
+
export const WALL_CHAIR_RAIL_SLOT_DEFAULT = 'library:preset-cream';
|
|
87
|
+
export const WALL_FACE_BAND_SOLID_SLOT_DEFAULTS = {
|
|
88
|
+
lower: 'library:preset-white',
|
|
89
|
+
middle: 'library:preset-lightgrey',
|
|
90
|
+
upper: 'library:preset-greige',
|
|
91
|
+
top: 'library:preset-softwhite',
|
|
92
|
+
};
|
|
93
|
+
export const WALL_SURFACE_SLOT_DEFAULTS = {
|
|
94
|
+
interior: 'library:concrete-drywall',
|
|
95
|
+
exterior: 'library:concrete-drywall',
|
|
96
|
+
lowerInterior: 'library:concrete-drywall',
|
|
97
|
+
middleInterior: 'library:concrete-drywall',
|
|
98
|
+
upperInterior: 'library:concrete-drywall',
|
|
99
|
+
topInterior: 'library:concrete-drywall',
|
|
100
|
+
lowerExterior: 'library:concrete-drywall',
|
|
101
|
+
middleExterior: 'library:concrete-drywall',
|
|
102
|
+
upperExterior: 'library:concrete-drywall',
|
|
103
|
+
topExterior: 'library:concrete-drywall',
|
|
104
|
+
skirtingInterior: WALL_SKIRTING_SLOT_DEFAULT,
|
|
105
|
+
skirtingExterior: WALL_SKIRTING_SLOT_DEFAULT,
|
|
106
|
+
crownInterior: WALL_CROWN_SLOT_DEFAULT,
|
|
107
|
+
crownExterior: WALL_CROWN_SLOT_DEFAULT,
|
|
108
|
+
chairRailInterior: WALL_CHAIR_RAIL_SLOT_DEFAULT,
|
|
109
|
+
chairRailExterior: WALL_CHAIR_RAIL_SLOT_DEFAULT,
|
|
110
|
+
};
|
|
8
111
|
export const WallNode = BaseNode.extend({
|
|
9
112
|
id: objectId('wall'),
|
|
10
113
|
type: nodeType('wall'),
|
|
@@ -19,9 +122,28 @@ export const WallNode = BaseNode.extend({
|
|
|
19
122
|
interiorMaterialPreset: z.string().optional(),
|
|
20
123
|
exteriorMaterial: MaterialSchema.optional(),
|
|
21
124
|
exteriorMaterialPreset: z.string().optional(),
|
|
125
|
+
// Per-slot material overrides on the unified slot model, mirroring
|
|
126
|
+
// `SlabNode.slots`. Key = slot id (`interior` / `exterior`), value = a
|
|
127
|
+
// `MaterialRef` (`library:<id>` / `scene:<id>`). Absent = the declared slot
|
|
128
|
+
// default (`WALL_SLOT_DEFAULT`). The legacy `*Material*` fields above are
|
|
129
|
+
// read only by the load migration that moves them into `slots`; delete them
|
|
130
|
+
// in a follow-up once migrated scenes are the norm.
|
|
131
|
+
slots: z.record(z.string(), z.string()).optional(),
|
|
22
132
|
thickness: z.number().optional(),
|
|
23
133
|
height: z.number().optional(),
|
|
24
134
|
curveOffset: z.number().optional(),
|
|
135
|
+
// Persisted slab-support host — see ItemNode.supportSlabId for the rules.
|
|
136
|
+
supportSlabId: z.string().optional(),
|
|
137
|
+
// Vertical offset from the elected support surface. Ground-hosted chained
|
|
138
|
+
// walls use this to preserve one construction plane without copying terrain.
|
|
139
|
+
supportOffset: z.number().finite().optional(),
|
|
140
|
+
// Extend downward from the authored wall base to the terrain while keeping
|
|
141
|
+
// the wall body height and top unchanged.
|
|
142
|
+
fillToTerrain: z.boolean().optional(),
|
|
143
|
+
faceBands: WallFaceBandConfig.optional(),
|
|
144
|
+
skirting: WallTrimConfig.optional(),
|
|
145
|
+
crown: WallTrimConfig.optional(),
|
|
146
|
+
chairRail: WallTrimConfig.optional(),
|
|
25
147
|
// e.g., start/end points for path
|
|
26
148
|
start: z.tuple([z.number(), z.number()]),
|
|
27
149
|
end: z.tuple([z.number(), z.number()]),
|
|
@@ -32,6 +154,7 @@ export const WallNode = BaseNode.extend({
|
|
|
32
154
|
Wall node - used to represent a wall in the building
|
|
33
155
|
- thickness: thickness in meters
|
|
34
156
|
- height: height in meters
|
|
157
|
+
- fillToTerrain: extends the wall downward to the terrain without changing its authored height
|
|
35
158
|
- curveOffset: midpoint sagitta offset used to bend the wall into an arc
|
|
36
159
|
- start: start point of the wall in level coordinate system
|
|
37
160
|
- end: end point of the wall in level coordinate system
|
|
@@ -39,6 +162,149 @@ export const WallNode = BaseNode.extend({
|
|
|
39
162
|
- frontSide: whether the front side faces interior, exterior, or unknown
|
|
40
163
|
- backSide: whether the back side faces interior, exterior, or unknown
|
|
41
164
|
`);
|
|
165
|
+
// Declared default appearance for an unpainted wall face in colored mode —
|
|
166
|
+
// visual parity with the retired DEFAULT_WALL_MATERIAL. Lives in core so the
|
|
167
|
+
// slot declaration (nodes) and the material resolver (viewer) share one value.
|
|
168
|
+
// May be a `#rrggbb` colour or a `library:<id>` ref. Textures-off still
|
|
169
|
+
// collapses to the themed wall role (the escape hatch).
|
|
170
|
+
export const WALL_SLOT_DEFAULT = {
|
|
171
|
+
interior: WALL_SURFACE_SLOT_DEFAULTS.interior,
|
|
172
|
+
exterior: WALL_SURFACE_SLOT_DEFAULTS.exterior,
|
|
173
|
+
};
|
|
174
|
+
export function getWallFaceBandConfig(wall, effectiveWallHeight) {
|
|
175
|
+
const wallHeight = Math.max(0, effectiveWallHeight);
|
|
176
|
+
const raw = { ...WALL_FACE_BAND_DEFAULT, ...(wall.faceBands ?? {}) };
|
|
177
|
+
const count = raw.enabled ? Math.max(1, Math.min(4, Math.round(raw.count ?? 3))) : 1;
|
|
178
|
+
const lowerHeight = count >= 2 ? Math.max(0, Math.min(wallHeight, raw.lowerHeight)) : 0;
|
|
179
|
+
const middleHeight = count >= 3 ? Math.max(0, Math.min(wallHeight - lowerHeight, raw.middleHeight)) : 0;
|
|
180
|
+
const upperHeight = count >= 4 ? Math.max(0, Math.min(wallHeight - lowerHeight - middleHeight, raw.upperHeight)) : 0;
|
|
181
|
+
return {
|
|
182
|
+
enabled: raw.enabled && count > 1,
|
|
183
|
+
count,
|
|
184
|
+
lowerHeight,
|
|
185
|
+
middleHeight,
|
|
186
|
+
upperHeight,
|
|
187
|
+
lowerTop: lowerHeight,
|
|
188
|
+
middleTop: lowerHeight + middleHeight,
|
|
189
|
+
upperTop: lowerHeight + middleHeight + upperHeight,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
export function getWallFaceBandForHeight(wall, y, effectiveWallHeight) {
|
|
193
|
+
const bands = getWallFaceBandConfig(wall, effectiveWallHeight);
|
|
194
|
+
if (!bands.enabled)
|
|
195
|
+
return 'upper';
|
|
196
|
+
if (y < bands.lowerTop)
|
|
197
|
+
return 'lower';
|
|
198
|
+
if (y < bands.middleTop)
|
|
199
|
+
return 'middle';
|
|
200
|
+
if (bands.count >= 4 && y < bands.upperTop)
|
|
201
|
+
return 'upper';
|
|
202
|
+
if (bands.count >= 4)
|
|
203
|
+
return 'top';
|
|
204
|
+
return 'upper';
|
|
205
|
+
}
|
|
206
|
+
export function getWallBandSlotId(side, band) {
|
|
207
|
+
const suffix = side === 'interior' ? 'Interior' : 'Exterior';
|
|
208
|
+
return `${band}${suffix}`;
|
|
209
|
+
}
|
|
210
|
+
const WALL_FACE_BAND_SLOTS_BY_SIDE = {
|
|
211
|
+
interior: ['lowerInterior', 'middleInterior', 'upperInterior', 'topInterior'],
|
|
212
|
+
exterior: ['lowerExterior', 'middleExterior', 'upperExterior', 'topExterior'],
|
|
213
|
+
};
|
|
214
|
+
function getWallFaceBandSlotsForCount(side, count) {
|
|
215
|
+
if (count <= 1)
|
|
216
|
+
return [];
|
|
217
|
+
if (side === 'interior') {
|
|
218
|
+
if (count === 2)
|
|
219
|
+
return ['lowerInterior', 'upperInterior'];
|
|
220
|
+
if (count === 3)
|
|
221
|
+
return ['lowerInterior', 'middleInterior', 'upperInterior'];
|
|
222
|
+
return ['lowerInterior', 'middleInterior', 'upperInterior', 'topInterior'];
|
|
223
|
+
}
|
|
224
|
+
if (count === 2)
|
|
225
|
+
return ['lowerExterior', 'upperExterior'];
|
|
226
|
+
if (count === 3)
|
|
227
|
+
return ['lowerExterior', 'middleExterior', 'upperExterior'];
|
|
228
|
+
return ['lowerExterior', 'middleExterior', 'upperExterior', 'topExterior'];
|
|
229
|
+
}
|
|
230
|
+
function getWallFaceBandDefaultSlot(slotId) {
|
|
231
|
+
if (slotId.startsWith('lower'))
|
|
232
|
+
return WALL_FACE_BAND_SOLID_SLOT_DEFAULTS.lower;
|
|
233
|
+
if (slotId.startsWith('middle'))
|
|
234
|
+
return WALL_FACE_BAND_SOLID_SLOT_DEFAULTS.middle;
|
|
235
|
+
if (slotId.startsWith('top'))
|
|
236
|
+
return WALL_FACE_BAND_SOLID_SLOT_DEFAULTS.top;
|
|
237
|
+
return WALL_FACE_BAND_SOLID_SLOT_DEFAULTS.upper;
|
|
238
|
+
}
|
|
239
|
+
function getWallFaceTopBandSlot(side, count) {
|
|
240
|
+
const slots = getWallFaceBandSlotsForCount(side, count);
|
|
241
|
+
return slots[slots.length - 1] ?? null;
|
|
242
|
+
}
|
|
243
|
+
export function buildWallFaceBandCountPatch(wall, count) {
|
|
244
|
+
const slots = { ...(wall.slots ?? {}) };
|
|
245
|
+
const nextCount = Math.max(1, Math.min(4, Math.round(count)));
|
|
246
|
+
const previousCount = wall.faceBands?.enabled
|
|
247
|
+
? Math.max(1, Math.min(4, Math.round(wall.faceBands.count ?? 3)))
|
|
248
|
+
: 1;
|
|
249
|
+
for (const side of ['interior', 'exterior']) {
|
|
250
|
+
const nextSlots = getWallFaceBandSlotsForCount(side, nextCount);
|
|
251
|
+
const activeSlots = new Set(nextSlots);
|
|
252
|
+
const previouslyActiveSlots = new Set(getWallFaceBandSlotsForCount(side, previousCount));
|
|
253
|
+
const previousTopSlot = getWallFaceTopBandSlot(side, previousCount);
|
|
254
|
+
const nextTopSlot = getWallFaceTopBandSlot(side, nextCount);
|
|
255
|
+
const topMaterial = (previousTopSlot ? slots[previousTopSlot] : undefined) ??
|
|
256
|
+
slots[side] ??
|
|
257
|
+
WALL_SURFACE_SLOT_DEFAULTS[side];
|
|
258
|
+
for (const slotId of WALL_FACE_BAND_SLOTS_BY_SIDE[side]) {
|
|
259
|
+
if (activeSlots.has(slotId)) {
|
|
260
|
+
if (slotId === nextTopSlot) {
|
|
261
|
+
slots[slotId] = topMaterial;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
const wasActive = previouslyActiveSlots.has(slotId);
|
|
265
|
+
const wasPreviousTop = slotId === previousTopSlot;
|
|
266
|
+
if (!wasActive || wasPreviousTop || !slots[slotId]) {
|
|
267
|
+
slots[slotId] = getWallFaceBandDefaultSlot(slotId);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
delete slots[slotId];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
faceBands: {
|
|
277
|
+
...WALL_FACE_BAND_DEFAULT,
|
|
278
|
+
...(wall.faceBands ?? {}),
|
|
279
|
+
enabled: nextCount > 1,
|
|
280
|
+
count: nextCount,
|
|
281
|
+
lowerHeight: wall.faceBands?.lowerHeight ?? WALL_FACE_BAND_DEFAULT.lowerHeight,
|
|
282
|
+
middleHeight: wall.faceBands?.middleHeight ?? WALL_FACE_BAND_DEFAULT.middleHeight,
|
|
283
|
+
upperHeight: wall.faceBands?.upperHeight ?? WALL_FACE_BAND_DEFAULT.upperHeight,
|
|
284
|
+
},
|
|
285
|
+
slots,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
export function buildEnabledWallFaceBandPatch(wall) {
|
|
289
|
+
return buildWallFaceBandCountPatch(wall, 2);
|
|
290
|
+
}
|
|
291
|
+
export function getWallSurfaceSideFromBandSlot(slotId) {
|
|
292
|
+
if (slotId === 'interior' || slotId === 'exterior')
|
|
293
|
+
return slotId;
|
|
294
|
+
if (slotId === 'lowerInterior' ||
|
|
295
|
+
slotId === 'middleInterior' ||
|
|
296
|
+
slotId === 'upperInterior' ||
|
|
297
|
+
slotId === 'topInterior') {
|
|
298
|
+
return 'interior';
|
|
299
|
+
}
|
|
300
|
+
if (slotId === 'lowerExterior' ||
|
|
301
|
+
slotId === 'middleExterior' ||
|
|
302
|
+
slotId === 'upperExterior' ||
|
|
303
|
+
slotId === 'topExterior') {
|
|
304
|
+
return 'exterior';
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
42
308
|
function getConfiguredWallSurfaceMaterial(wall, side) {
|
|
43
309
|
if (side === 'interior') {
|
|
44
310
|
return {
|