@pascal-app/core 0.9.2 → 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 +21 -2
- package/dist/events/bus.d.ts.map +1 -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 +116 -66
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +316 -441
- 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 +193 -12
- 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 +23 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -10
- package/dist/lib/measurement-geometry.d.ts +4 -0
- package/dist/lib/measurement-geometry.d.ts.map +1 -1
- package/dist/lib/measurement-geometry.js +27 -10
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +33 -1
- package/dist/lib/space-detection.d.ts +15 -4
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +174 -88
- 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/zone-quantities.d.ts +1 -1
- package/dist/lib/zone-quantities.d.ts.map +1 -1
- package/dist/lib/zone-quantities.js +311 -66
- package/dist/material-library.d.ts +9 -1
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +56 -4
- package/dist/registry/handles.d.ts +16 -1
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +5 -2
- package/dist/registry/types.d.ts +64 -1
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +6 -3
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +6 -3
- package/dist/schema/nodes/cabinet.d.ts +2 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +4 -2
- package/dist/schema/nodes/ceiling.d.ts +1 -1
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +7 -1
- package/dist/schema/nodes/column.d.ts +1 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +2 -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/door.d.ts +29 -0
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +20 -0
- package/dist/schema/nodes/duct-terminal.d.ts +1 -0
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -1
- package/dist/schema/nodes/duct-terminal.js +2 -0
- package/dist/schema/nodes/fence.d.ts +2 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +8 -0
- package/dist/schema/nodes/hvac-equipment.d.ts +1 -0
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -1
- package/dist/schema/nodes/hvac-equipment.js +2 -0
- package/dist/schema/nodes/item.d.ts +1 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +13 -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 -33
- package/dist/schema/nodes/shelf.d.ts +1 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/shelf.js +2 -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/slab.d.ts +5 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +14 -2
- 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.d.ts +3 -1
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +8 -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/wall.d.ts +5 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +13 -4
- package/dist/schema/nodes/window.d.ts +29 -0
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +18 -0
- package/dist/schema/nodes/zone.d.ts +20 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +15 -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 +211 -3
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +4 -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/index.d.ts +2 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -1
- package/dist/services/level-height.d.ts +8 -9
- package/dist/services/level-height.d.ts.map +1 -1
- package/dist/services/level-height.js +48 -16
- 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/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +47 -3
- package/dist/store/history-control.d.ts +20 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +110 -13
- 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 +31 -2
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +638 -8
- 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/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-opening-preview.d.ts +1060 -935
- 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 +18 -15
- 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.js +6 -6
- 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.map +1 -1
- package/dist/utils/clone-scene-graph.js +34 -3
- package/dist/utils/heal-scene-graph.d.ts +1 -1
- package/dist/utils/heal-scene-graph.d.ts.map +1 -1
- package/dist/utils/heal-scene-graph.js +25 -9
- package/dist/validation/validate-build-json.d.ts +2 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +59 -3
- package/package.json +2 -2
- package/dist/hooks/scene-registry/scene-registry.test.d.ts +0 -2
- package/dist/hooks/scene-registry/scene-registry.test.d.ts.map +0 -1
- package/dist/hooks/scene-registry/scene-registry.test.js +0 -26
- 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 -366
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts +0 -2
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.d.ts.map +0 -1
- package/dist/hooks/spatial-grid/wall-slab-overlap.test.js +0 -363
- package/dist/lib/measurement-geometry.test.d.ts +0 -2
- package/dist/lib/measurement-geometry.test.d.ts.map +0 -1
- package/dist/lib/measurement-geometry.test.js +0 -102
- package/dist/lib/slab-polygon.test.d.ts +0 -2
- package/dist/lib/slab-polygon.test.d.ts.map +0 -1
- package/dist/lib/slab-polygon.test.js +0 -635
- 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 -376
- package/dist/lib/zone-quantities.test.d.ts +0 -2
- package/dist/lib/zone-quantities.test.d.ts.map +0 -1
- package/dist/lib/zone-quantities.test.js +0 -82
- 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 -196
- 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 -163
- 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/schema/material.test.d.ts +0 -2
- package/dist/schema/material.test.d.ts.map +0 -1
- package/dist/schema/material.test.js +0 -43
- package/dist/schema/nodes/measurement.test.d.ts +0 -2
- package/dist/schema/nodes/measurement.test.d.ts.map +0 -1
- package/dist/schema/nodes/measurement.test.js +0 -139
- package/dist/schema/nodes/ridge-vent-defaults.test.d.ts +0 -2
- package/dist/schema/nodes/ridge-vent-defaults.test.d.ts.map +0 -1
- package/dist/schema/nodes/ridge-vent-defaults.test.js +0 -205
- package/dist/schema/nodes/roof-segment-shape.test.d.ts +0 -2
- package/dist/schema/nodes/roof-segment-shape.test.d.ts.map +0 -1
- package/dist/schema/nodes/roof-segment-shape.test.js +0 -175
- package/dist/schema/nodes/roof-segment-surface.test.d.ts +0 -2
- package/dist/schema/nodes/roof-segment-surface.test.d.ts.map +0 -1
- package/dist/schema/nodes/roof-segment-surface.test.js +0 -48
- package/dist/schema/nodes/roof-segment-trim.test.d.ts +0 -2
- package/dist/schema/nodes/roof-segment-trim.test.d.ts.map +0 -1
- package/dist/schema/nodes/roof-segment-trim.test.js +0 -107
- package/dist/schema/nodes/roof-segment-walls.test.d.ts +0 -2
- package/dist/schema/nodes/roof-segment-walls.test.d.ts.map +0 -1
- package/dist/schema/nodes/roof-segment-walls.test.js +0 -92
- package/dist/schema/nodes/wall.test.d.ts +0 -2
- package/dist/schema/nodes/wall.test.d.ts.map +0 -1
- package/dist/schema/nodes/wall.test.js +0 -208
- 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 -230
- 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/opening-guides.test.d.ts +0 -2
- package/dist/services/opening-guides.test.d.ts.map +0 -1
- package/dist/services/opening-guides.test.js +0 -208
- package/dist/services/port-connectivity.test.d.ts +0 -2
- package/dist/services/port-connectivity.test.d.ts.map +0 -1
- package/dist/services/port-connectivity.test.js +0 -297
- package/dist/services/riser-diagram.test.d.ts +0 -2
- package/dist/services/riser-diagram.test.d.ts.map +0 -1
- package/dist/services/riser-diagram.test.js +0 -66
- 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 -137
- package/dist/services/system-graph.test.d.ts +0 -2
- package/dist/services/system-graph.test.d.ts.map +0 -1
- package/dist/services/system-graph.test.js +0 -138
- package/dist/services/validate-dwv.test.d.ts +0 -2
- package/dist/services/validate-dwv.test.d.ts.map +0 -1
- package/dist/services/validate-dwv.test.js +0 -109
- 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/actions/ridge-vent-update.test.d.ts +0 -2
- package/dist/store/actions/ridge-vent-update.test.d.ts.map +0 -1
- package/dist/store/actions/ridge-vent-update.test.js +0 -264
- package/dist/store/use-scene-dirty-tracking.test.d.ts +0 -2
- package/dist/store/use-scene-dirty-tracking.test.d.ts.map +0 -1
- package/dist/store/use-scene-dirty-tracking.test.js +0 -68
- 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/store/use-scene-measurement-roundtrip.test.d.ts +0 -2
- package/dist/store/use-scene-measurement-roundtrip.test.d.ts.map +0 -1
- package/dist/store/use-scene-measurement-roundtrip.test.js +0 -97
- package/dist/store/use-scene-plugins.test.d.ts +0 -2
- package/dist/store/use-scene-plugins.test.d.ts.map +0 -1
- package/dist/store/use-scene-plugins.test.js +0 -51
- package/dist/store/use-scene-wall-slot-migration.test.d.ts +0 -2
- package/dist/store/use-scene-wall-slot-migration.test.d.ts.map +0 -1
- package/dist/store/use-scene-wall-slot-migration.test.js +0 -210
- package/dist/store/use-scene-window-migration.test.d.ts +0 -2
- package/dist/store/use-scene-window-migration.test.d.ts.map +0 -1
- package/dist/store/use-scene-window-migration.test.js +0 -85
- 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/fence/fence-spline.test.d.ts +0 -2
- package/dist/systems/fence/fence-spline.test.d.ts.map +0 -1
- package/dist/systems/fence/fence-spline.test.js +0 -136
- 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 -485
- package/dist/systems/wall/wall-mitering.test.d.ts +0 -2
- package/dist/systems/wall/wall-mitering.test.d.ts.map +0 -1
- package/dist/systems/wall/wall-mitering.test.js +0 -63
- 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 -62
- package/dist/utils/heal-scene-graph.test.d.ts +0 -2
- package/dist/utils/heal-scene-graph.test.d.ts.map +0 -1
- package/dist/utils/heal-scene-graph.test.js +0 -88
|
@@ -1,45 +1,24 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
|
|
5
|
-
import { ColumnNode } from './column';
|
|
6
|
-
import { FenceNode } from './fence';
|
|
7
|
-
import { GuideNode } from './guide';
|
|
8
|
-
import { ItemNode } from './item';
|
|
9
|
-
import { MeasurementNode } from './measurement';
|
|
10
|
-
import { RoofNode } from './roof';
|
|
11
|
-
import { ScanNode } from './scan';
|
|
12
|
-
import { ShelfNode } from './shelf';
|
|
13
|
-
import { SlabNode } from './slab';
|
|
14
|
-
import { SpawnNode } from './spawn';
|
|
15
|
-
import { StairNode } from './stair';
|
|
16
|
-
import { WallNode } from './wall';
|
|
17
|
-
import { ZoneNode } from './zone';
|
|
4
|
+
const LevelChildId = z.string().transform((id) => id);
|
|
18
5
|
export const LevelNode = BaseNode.extend({
|
|
19
6
|
id: objectId('level'),
|
|
20
7
|
type: nodeType('level'),
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
FenceNode.shape.id,
|
|
25
|
-
ColumnNode.shape.id,
|
|
26
|
-
ItemNode.shape.id,
|
|
27
|
-
ZoneNode.shape.id,
|
|
28
|
-
SlabNode.shape.id,
|
|
29
|
-
CeilingNode.shape.id,
|
|
30
|
-
RoofNode.shape.id,
|
|
31
|
-
StairNode.shape.id,
|
|
32
|
-
ScanNode.shape.id,
|
|
33
|
-
GuideNode.shape.id,
|
|
34
|
-
MeasurementNode.shape.id,
|
|
35
|
-
SpawnNode.shape.id,
|
|
36
|
-
ShelfNode.shape.id,
|
|
37
|
-
]))
|
|
38
|
-
.default([]),
|
|
8
|
+
// The node registry owns child-kind validity. Persisted level relationships
|
|
9
|
+
// must also admit IDs minted by plugins that core cannot enumerate.
|
|
10
|
+
children: z.array(LevelChildId).default([]),
|
|
39
11
|
// Specific props
|
|
40
12
|
level: z.number().default(0),
|
|
13
|
+
/**
|
|
14
|
+
* Stored storey height in meters (floor-to-floor). No zod default on
|
|
15
|
+
* purpose: absence marks unmigrated legacy data and gates the load-time
|
|
16
|
+
* migration; a schema default would materialize silently through .parse().
|
|
17
|
+
*/
|
|
18
|
+
height: z.number().optional(),
|
|
41
19
|
}).describe(dedent `
|
|
42
20
|
Level node - used to represent a level in the building
|
|
43
|
-
- children: array of
|
|
21
|
+
- children: array of architectural, equipment, and MEP distribution nodes
|
|
44
22
|
- level: level number
|
|
23
|
+
- height: storey height in meters (floor-to-floor); absent only on unmigrated legacy data
|
|
45
24
|
`);
|
|
@@ -47,6 +47,7 @@ export declare const ShelfNode: z.ZodObject<{
|
|
|
47
47
|
children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`item_${string}`>>>>;
|
|
48
48
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
49
49
|
rotation: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
50
|
+
supportSlabId: z.ZodOptional<z.ZodString>;
|
|
50
51
|
width: z.ZodDefault<z.ZodNumber>;
|
|
51
52
|
depth: z.ZodDefault<z.ZodNumber>;
|
|
52
53
|
thickness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shelf.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/shelf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"shelf.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/shelf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiEpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -42,6 +42,8 @@ export const ShelfNode = BaseNode.extend({
|
|
|
42
42
|
children: z.array(ItemNode.shape.id).default([]),
|
|
43
43
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
44
44
|
rotation: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
45
|
+
// Persisted slab-support host — see ItemNode.supportSlabId for the rules.
|
|
46
|
+
supportSlabId: z.string().optional(),
|
|
45
47
|
// Dimensions (meters). Schema-level defaults intentionally reproduce
|
|
46
48
|
// the v1 wall-shelf so existing v1 scenes that omit the v2-introduced
|
|
47
49
|
// fields (style / rows / columns / with*) load with their original
|
|
@@ -21,6 +21,15 @@ export declare const SiteNode: z.ZodObject<{
|
|
|
21
21
|
type: z.ZodLiteral<"polygon">;
|
|
22
22
|
points: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
23
23
|
}, z.core.$strip>>>;
|
|
24
|
+
terrain: z.ZodOptional<z.ZodObject<{
|
|
25
|
+
type: z.ZodLiteral<"heightfield">;
|
|
26
|
+
origin: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
27
|
+
spacing: z.ZodNumber;
|
|
28
|
+
cols: z.ZodNumber;
|
|
29
|
+
rows: z.ZodNumber;
|
|
30
|
+
step: z.ZodNumber;
|
|
31
|
+
heights: z.ZodString;
|
|
32
|
+
}, z.core.$strip>>;
|
|
24
33
|
children: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
25
34
|
}, z.core.$strip>;
|
|
26
35
|
export type SiteNode = z.infer<typeof SiteNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4BpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
import dedent from 'dedent';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
5
|
+
import { TerrainData } from '../terrain';
|
|
5
6
|
// 2D Polygon
|
|
6
7
|
const PropertyLineData = z.object({
|
|
7
8
|
type: z.literal('polygon'),
|
|
8
9
|
points: z.array(z.tuple([z.number(), z.number()])),
|
|
9
10
|
});
|
|
10
|
-
// 3D Polygon/Mesh
|
|
11
|
-
// const TerrainData = z.object({
|
|
12
|
-
// type: z.literal('terrain'),
|
|
13
|
-
// points: z.array(z.tuple([z.number(), z.number(), z.number()])),
|
|
14
|
-
// })
|
|
15
11
|
export const SiteNode = BaseNode.extend({
|
|
16
12
|
id: objectId('site'),
|
|
17
13
|
type: nodeType('site'),
|
|
@@ -26,10 +22,16 @@ export const SiteNode = BaseNode.extend({
|
|
|
26
22
|
[-15, 15],
|
|
27
23
|
],
|
|
28
24
|
}),
|
|
29
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Sculpted ground. Absent means flat ground at the datum — the state every
|
|
27
|
+
* scene that predates terrain is in, and the state an untouched site stays in
|
|
28
|
+
* so ~11 KB of base64 zeroes does not land in every saved scene.
|
|
29
|
+
*/
|
|
30
|
+
terrain: TerrainData.optional(),
|
|
30
31
|
children: z.array(z.string()).default([]),
|
|
31
32
|
}).describe(dedent `
|
|
32
33
|
Site node - used to represent a site
|
|
33
34
|
- polygon: polygon data
|
|
35
|
+
- terrain: optional sculpted heightfield; absent means flat ground
|
|
34
36
|
- children: array of child node ids (buildings, items)
|
|
35
37
|
`);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare const MIN_SLAB_THICKNESS = 0.02;
|
|
2
3
|
export declare const SlabNode: z.ZodObject<{
|
|
3
4
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
5
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -63,6 +64,10 @@ export declare const SlabNode: z.ZodObject<{
|
|
|
63
64
|
elevatorId: z.ZodOptional<z.ZodString>;
|
|
64
65
|
}, z.core.$strip>>>;
|
|
65
66
|
elevation: z.ZodDefault<z.ZodNumber>;
|
|
67
|
+
thickness: z.ZodDefault<z.ZodNumber>;
|
|
68
|
+
recessed: z.ZodDefault<z.ZodBoolean>;
|
|
69
|
+
recessedRimElevation: z.ZodOptional<z.ZodNumber>;
|
|
70
|
+
fillToTerrain: z.ZodOptional<z.ZodBoolean>;
|
|
66
71
|
autoFromWalls: z.ZodDefault<z.ZodBoolean>;
|
|
67
72
|
}, z.core.$strip>;
|
|
68
73
|
export type SlabNode = z.infer<typeof SlabNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"slab.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/slab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAQvB,eAAO,MAAM,kBAAkB,OAAO,CAAA;AAEtC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -3,6 +3,10 @@ import { z } from 'zod';
|
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
5
|
import { SurfaceHoleMetadata } from './surface-hole-metadata';
|
|
6
|
+
// Edit-time floor for `thickness` — a thinner slab z-fights the ceiling's
|
|
7
|
+
// −0.01 underside offset. Applies to edits only; migration writes legacy
|
|
8
|
+
// intervals verbatim (including degenerate zero-thickness slabs).
|
|
9
|
+
export const MIN_SLAB_THICKNESS = 0.02;
|
|
6
10
|
export const SlabNode = BaseNode.extend({
|
|
7
11
|
id: objectId('slab'),
|
|
8
12
|
type: nodeType('slab'),
|
|
@@ -15,13 +19,21 @@ export const SlabNode = BaseNode.extend({
|
|
|
15
19
|
polygon: z.array(z.tuple([z.number(), z.number()])),
|
|
16
20
|
holes: z.array(z.array(z.tuple([z.number(), z.number()]))).default([]),
|
|
17
21
|
holeMetadata: z.array(SurfaceHoleMetadata).default([]),
|
|
18
|
-
elevation: z.number().default(0.05), //
|
|
22
|
+
elevation: z.number().default(0.05), // Walking surface (slab top), meters above the level plane
|
|
23
|
+
thickness: z.number().default(0.05), // Grows downward from the surface
|
|
24
|
+
recessed: z.boolean().default(false),
|
|
25
|
+
recessedRimElevation: z.number().finite().optional(),
|
|
26
|
+
fillToTerrain: z.boolean().optional(),
|
|
19
27
|
autoFromWalls: z.boolean().default(false),
|
|
20
28
|
}).describe(dedent `
|
|
21
29
|
Slab node - used to represent a slab/floor in the building
|
|
22
30
|
- polygon: array of [x, z] points defining the slab boundary
|
|
23
31
|
- holes: array of [x, z] polygons representing cutouts in the slab
|
|
24
32
|
- holeMetadata: metadata parallel to holes, used to preserve manual and auto-managed cutouts
|
|
25
|
-
- elevation:
|
|
33
|
+
- elevation: the walking surface (slab top), in meters above the level plane
|
|
34
|
+
- thickness: grows downward from the surface; the solid occupies [elevation - thickness, elevation]
|
|
35
|
+
- recessed: open recess (pool) whose floor sits at elevation
|
|
36
|
+
- recessedRimElevation: optional rim anchor for a raised/lowered recess; absent means the level plane
|
|
37
|
+
- fillToTerrain: extends a solid slab's perimeter downward to terrain without changing its flat top or authored thickness
|
|
26
38
|
- autoFromWalls: whether the slab is automatically generated from a closed wall loop
|
|
27
39
|
`);
|
|
@@ -19,6 +19,7 @@ export declare const SpawnNode: z.ZodObject<{
|
|
|
19
19
|
type: z.ZodDefault<z.ZodLiteral<"spawn">>;
|
|
20
20
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
21
21
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
supportSlabId: z.ZodOptional<z.ZodString>;
|
|
22
23
|
}, z.core.$strip>;
|
|
23
24
|
export type SpawnNode = z.infer<typeof SpawnNode>;
|
|
24
25
|
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;iBAOpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA"}
|
|
@@ -5,4 +5,6 @@ export const SpawnNode = BaseNode.extend({
|
|
|
5
5
|
type: nodeType('spawn'),
|
|
6
6
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
7
7
|
rotation: z.number().default(0),
|
|
8
|
+
// Persisted slab-support host — see ItemNode.supportSlabId for the rules.
|
|
9
|
+
supportSlabId: z.string().optional(),
|
|
8
10
|
});
|
|
@@ -181,6 +181,7 @@ export declare const StairNode: z.ZodObject<{
|
|
|
181
181
|
slots: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
182
182
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
183
183
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
184
|
+
supportSlabId: z.ZodOptional<z.ZodString>;
|
|
184
185
|
stairType: z.ZodDefault<z.ZodEnum<{
|
|
185
186
|
straight: "straight";
|
|
186
187
|
spiral: "spiral";
|
|
@@ -188,13 +189,14 @@ export declare const StairNode: z.ZodObject<{
|
|
|
188
189
|
}>>;
|
|
189
190
|
fromLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
190
191
|
toLevelId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
192
|
+
deckSlabId: z.ZodOptional<z.ZodString>;
|
|
191
193
|
slabOpeningMode: z.ZodDefault<z.ZodEnum<{
|
|
192
194
|
none: "none";
|
|
193
195
|
destination: "destination";
|
|
194
196
|
}>>;
|
|
195
197
|
openingOffset: z.ZodDefault<z.ZodNumber>;
|
|
196
198
|
width: z.ZodDefault<z.ZodNumber>;
|
|
197
|
-
totalRise: z.
|
|
199
|
+
totalRise: z.ZodOptional<z.ZodNumber>;
|
|
198
200
|
stepCount: z.ZodDefault<z.ZodNumber>;
|
|
199
201
|
thickness: z.ZodDefault<z.ZodNumber>;
|
|
200
202
|
fillToFloor: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"stair.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/stair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,eAAO,MAAM,gBAAgB;;;;;EAA4C,CAAA;AACzE,eAAO,MAAM,SAAS;;;;EAA2C,CAAA;AACjE,eAAO,MAAM,mBAAmB;;;EAAiC,CAAA;AACjE,eAAO,MAAM,oBAAoB;;;EAAkC,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AACrE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACvE,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AACnE,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsErB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AASjD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,wBAAwB,GAC7B,wBAAwB,CAmE1B"}
|
|
@@ -24,13 +24,19 @@ export const StairNode = BaseNode.extend({
|
|
|
24
24
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
25
25
|
// Rotation around Y axis in radians
|
|
26
26
|
rotation: z.number().default(0),
|
|
27
|
+
// Persisted slab-support host — see ItemNode.supportSlabId for the rules.
|
|
28
|
+
supportSlabId: z.string().optional(),
|
|
27
29
|
stairType: StairType.default('straight'),
|
|
28
30
|
fromLevelId: z.string().nullable().default(null),
|
|
29
31
|
toLevelId: z.string().nullable().default(null),
|
|
32
|
+
// Destination deck (a slab id). When set, the stair's rise follows that
|
|
33
|
+
// slab's elevation live. An explicit `totalRise` still wins when BOTH are
|
|
34
|
+
// set (edge case — the panel clears the custom rise when attaching).
|
|
35
|
+
deckSlabId: z.string().optional(),
|
|
30
36
|
slabOpeningMode: StairSlabOpeningMode.default('none'),
|
|
31
37
|
openingOffset: z.number().default(0),
|
|
32
38
|
width: z.number().default(1.0),
|
|
33
|
-
totalRise: z.number().
|
|
39
|
+
totalRise: z.number().optional(),
|
|
34
40
|
stepCount: z.number().default(10),
|
|
35
41
|
thickness: z.number().default(0.25),
|
|
36
42
|
fillToFloor: z.boolean().default(true),
|
|
@@ -52,6 +58,7 @@ export const StairNode = BaseNode.extend({
|
|
|
52
58
|
- rotation: rotation around Y axis
|
|
53
59
|
- stairType: straight (segment-based), curved (arc-based), or spiral
|
|
54
60
|
- fromLevelId / toLevelId: source and destination levels used for auto slab cutouts
|
|
61
|
+
- deckSlabId: destination deck (slab) — the rise derives from its elevation while set
|
|
55
62
|
- slabOpeningMode: whether a destination-level slab opening is generated for this stair
|
|
56
63
|
- openingOffset: extra opening expansion applied after the cutout polygon is computed
|
|
57
64
|
- width: stair width
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const StructuralGridNode: z.ZodObject<{
|
|
3
|
+
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
|
+
name: z.ZodOptional<z.ZodString>;
|
|
5
|
+
parentId: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
6
|
+
visible: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
7
|
+
camera: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
9
|
+
target: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
10
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
11
|
+
perspective: "perspective";
|
|
12
|
+
orthographic: "orthographic";
|
|
13
|
+
}>>;
|
|
14
|
+
fov: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
zoom: z.ZodOptional<z.ZodNumber>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
18
|
+
id: z.ZodDefault<z.ZodTemplateLiteral<`structural-grid_${string}`>>;
|
|
19
|
+
type: z.ZodDefault<z.ZodLiteral<"structural-grid">>;
|
|
20
|
+
start: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
21
|
+
end: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
22
|
+
label: z.ZodDefault<z.ZodString>;
|
|
23
|
+
showStartBubble: z.ZodDefault<z.ZodBoolean>;
|
|
24
|
+
showEndBubble: z.ZodDefault<z.ZodBoolean>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export type StructuralGridNode = z.infer<typeof StructuralGridNode>;
|
|
27
|
+
//# sourceMappingURL=structural-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structural-grid.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/structural-grid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;iBAe9B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
+
export const StructuralGridNode = BaseNode.extend({
|
|
5
|
+
id: objectId('structural-grid'),
|
|
6
|
+
type: nodeType('structural-grid'),
|
|
7
|
+
start: z.tuple([z.number(), z.number()]).default([0, 0]),
|
|
8
|
+
end: z.tuple([z.number(), z.number()]).default([0, 5]),
|
|
9
|
+
label: z.string().trim().min(1).max(12).default('1'),
|
|
10
|
+
showStartBubble: z.boolean().default(true),
|
|
11
|
+
showEndBubble: z.boolean().default(true),
|
|
12
|
+
}).describe(dedent `
|
|
13
|
+
Structural grid node - a persistent floor-plan datum axis with identification bubbles
|
|
14
|
+
- start/end: level-local plan coordinates defining the grid axis extent
|
|
15
|
+
- label: axis identifier, commonly numeric in one direction and alphabetic in the other
|
|
16
|
+
- showStartBubble/showEndBubble: independently control the two endpoint identifiers
|
|
17
|
+
`);
|
|
@@ -245,6 +245,9 @@ export declare const WallNode: z.ZodObject<{
|
|
|
245
245
|
thickness: z.ZodOptional<z.ZodNumber>;
|
|
246
246
|
height: z.ZodOptional<z.ZodNumber>;
|
|
247
247
|
curveOffset: z.ZodOptional<z.ZodNumber>;
|
|
248
|
+
supportSlabId: z.ZodOptional<z.ZodString>;
|
|
249
|
+
supportOffset: z.ZodOptional<z.ZodNumber>;
|
|
250
|
+
fillToTerrain: z.ZodOptional<z.ZodBoolean>;
|
|
248
251
|
faceBands: z.ZodOptional<z.ZodPreprocess<z.ZodObject<{
|
|
249
252
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
250
253
|
count: z.ZodDefault<z.ZodNumber>;
|
|
@@ -360,7 +363,7 @@ export type WallSurfaceSide = 'interior' | 'exterior';
|
|
|
360
363
|
export type WallFaceBand = 'lower' | 'middle' | 'upper' | 'top';
|
|
361
364
|
export type WallBandSurfaceSlotId = 'lowerInterior' | 'middleInterior' | 'upperInterior' | 'topInterior' | 'lowerExterior' | 'middleExterior' | 'upperExterior' | 'topExterior';
|
|
362
365
|
export declare const WALL_SLOT_DEFAULT: Record<WallSurfaceSide, string>;
|
|
363
|
-
export declare function getWallFaceBandConfig(wall: Pick<WallNode, 'height' | 'faceBands'
|
|
366
|
+
export declare function getWallFaceBandConfig(wall: Pick<WallNode, 'height' | 'faceBands'>, effectiveWallHeight: number): {
|
|
364
367
|
enabled: boolean;
|
|
365
368
|
count: number;
|
|
366
369
|
lowerHeight: number;
|
|
@@ -370,7 +373,7 @@ export declare function getWallFaceBandConfig(wall: Pick<WallNode, 'height' | 'f
|
|
|
370
373
|
middleTop: number;
|
|
371
374
|
upperTop: number;
|
|
372
375
|
};
|
|
373
|
-
export declare function getWallFaceBandForHeight(wall: Pick<WallNode, 'height' | 'faceBands'>, y: number): WallFaceBand;
|
|
376
|
+
export declare function getWallFaceBandForHeight(wall: Pick<WallNode, 'height' | 'faceBands'>, y: number, effectiveWallHeight: number): WallFaceBand;
|
|
374
377
|
export declare function getWallBandSlotId(side: WallSurfaceSide, band: WallFaceBand): WallBandSurfaceSlotId;
|
|
375
378
|
export declare function buildWallFaceBandCountPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>, count: number): Pick<WallNode, 'faceBands' | 'slots'>;
|
|
376
379
|
export declare function buildEnabledWallFaceBandPatch(wall: Pick<WallNode, 'faceBands' | 'slots'>): Pick<WallNode, 'faceBands' | 'slots'>;
|
|
@@ -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,iBAAiB;;;;EAA2C,CAAA;AACzE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAkB1B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOzB,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAE3D,eAAO,MAAM,qBAAqB,EAAE,cAMnC,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,cAMhC,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,cAOrC,CAAA;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAIrB,CAAA;AAUV,eAAO,MAAM,kBAAkB;;;;;;kBAMJ,CAAA;AAC3B,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEnE,eAAO,MAAM,sBAAsB,EAAE,kBAMpC,CAAA;AAED,eAAO,MAAM,0BAA0B,6BAA6B,CAAA;AACpE,eAAO,MAAM,uBAAuB,yBAAyB,CAAA;AAC7D,eAAO,MAAM,4BAA4B,yBAAyB,CAAA;AAClE,eAAO,MAAM,kCAAkC;;;;;CAKE,CAAA;AAEjD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;CAiB7B,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,0BAA0B,CAAA;AAEvE,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/wall.ts"],"names":[],"mappings":"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"}
|
|
@@ -132,6 +132,14 @@ export const WallNode = BaseNode.extend({
|
|
|
132
132
|
thickness: z.number().optional(),
|
|
133
133
|
height: z.number().optional(),
|
|
134
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(),
|
|
135
143
|
faceBands: WallFaceBandConfig.optional(),
|
|
136
144
|
skirting: WallTrimConfig.optional(),
|
|
137
145
|
crown: WallTrimConfig.optional(),
|
|
@@ -146,6 +154,7 @@ export const WallNode = BaseNode.extend({
|
|
|
146
154
|
Wall node - used to represent a wall in the building
|
|
147
155
|
- thickness: thickness in meters
|
|
148
156
|
- height: height in meters
|
|
157
|
+
- fillToTerrain: extends the wall downward to the terrain without changing its authored height
|
|
149
158
|
- curveOffset: midpoint sagitta offset used to bend the wall into an arc
|
|
150
159
|
- start: start point of the wall in level coordinate system
|
|
151
160
|
- end: end point of the wall in level coordinate system
|
|
@@ -162,8 +171,8 @@ export const WALL_SLOT_DEFAULT = {
|
|
|
162
171
|
interior: WALL_SURFACE_SLOT_DEFAULTS.interior,
|
|
163
172
|
exterior: WALL_SURFACE_SLOT_DEFAULTS.exterior,
|
|
164
173
|
};
|
|
165
|
-
export function getWallFaceBandConfig(wall) {
|
|
166
|
-
const wallHeight =
|
|
174
|
+
export function getWallFaceBandConfig(wall, effectiveWallHeight) {
|
|
175
|
+
const wallHeight = Math.max(0, effectiveWallHeight);
|
|
167
176
|
const raw = { ...WALL_FACE_BAND_DEFAULT, ...(wall.faceBands ?? {}) };
|
|
168
177
|
const count = raw.enabled ? Math.max(1, Math.min(4, Math.round(raw.count ?? 3))) : 1;
|
|
169
178
|
const lowerHeight = count >= 2 ? Math.max(0, Math.min(wallHeight, raw.lowerHeight)) : 0;
|
|
@@ -180,8 +189,8 @@ export function getWallFaceBandConfig(wall) {
|
|
|
180
189
|
upperTop: lowerHeight + middleHeight + upperHeight,
|
|
181
190
|
};
|
|
182
191
|
}
|
|
183
|
-
export function getWallFaceBandForHeight(wall, y) {
|
|
184
|
-
const bands = getWallFaceBandConfig(wall);
|
|
192
|
+
export function getWallFaceBandForHeight(wall, y, effectiveWallHeight) {
|
|
193
|
+
const bands = getWallFaceBandConfig(wall, effectiveWallHeight);
|
|
185
194
|
if (!bands.enabled)
|
|
186
195
|
return 'upper';
|
|
187
196
|
if (y < bands.lowerTop)
|
|
@@ -12,6 +12,18 @@ export declare const WindowType: z.ZodEnum<{
|
|
|
12
12
|
louvered: "louvered";
|
|
13
13
|
}>;
|
|
14
14
|
export type WindowType = z.infer<typeof WindowType>;
|
|
15
|
+
export declare const WindowConstructionType: z.ZodEnum<{
|
|
16
|
+
framed: "framed";
|
|
17
|
+
masonry: "masonry";
|
|
18
|
+
}>;
|
|
19
|
+
export declare const WindowDimensionReference: z.ZodEnum<{
|
|
20
|
+
nominal: "nominal";
|
|
21
|
+
"rough-opening": "rough-opening";
|
|
22
|
+
"masonry-opening": "masonry-opening";
|
|
23
|
+
"finish-opening": "finish-opening";
|
|
24
|
+
}>;
|
|
25
|
+
export type WindowConstructionType = z.infer<typeof WindowConstructionType>;
|
|
26
|
+
export type WindowDimensionReference = z.infer<typeof WindowDimensionReference>;
|
|
15
27
|
export declare const WindowNode: z.ZodObject<{
|
|
16
28
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
17
29
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -79,6 +91,23 @@ export declare const WindowNode: z.ZodObject<{
|
|
|
79
91
|
}>>;
|
|
80
92
|
width: z.ZodDefault<z.ZodNumber>;
|
|
81
93
|
height: z.ZodDefault<z.ZodNumber>;
|
|
94
|
+
mark: z.ZodOptional<z.ZodString>;
|
|
95
|
+
constructionType: z.ZodDefault<z.ZodEnum<{
|
|
96
|
+
framed: "framed";
|
|
97
|
+
masonry: "masonry";
|
|
98
|
+
}>>;
|
|
99
|
+
dimensionReference: z.ZodDefault<z.ZodEnum<{
|
|
100
|
+
nominal: "nominal";
|
|
101
|
+
"rough-opening": "rough-opening";
|
|
102
|
+
"masonry-opening": "masonry-opening";
|
|
103
|
+
"finish-opening": "finish-opening";
|
|
104
|
+
}>>;
|
|
105
|
+
roughOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
106
|
+
roughOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
107
|
+
masonryOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
108
|
+
masonryOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
109
|
+
finishOpeningWidth: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
finishOpeningHeight: z.ZodOptional<z.ZodNumber>;
|
|
82
111
|
openingKind: z.ZodDefault<z.ZodEnum<{
|
|
83
112
|
window: "window";
|
|
84
113
|
opening: "opening";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/window.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;EAWrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAEnD,eAAO,MAAM,sBAAsB;;;EAAgC,CAAA;AACnE,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAA;AACF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAC3E,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAE/E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmFrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA"}
|
|
@@ -14,6 +14,13 @@ export const WindowType = z.enum([
|
|
|
14
14
|
'bow',
|
|
15
15
|
'louvered',
|
|
16
16
|
]);
|
|
17
|
+
export const WindowConstructionType = z.enum(['framed', 'masonry']);
|
|
18
|
+
export const WindowDimensionReference = z.enum([
|
|
19
|
+
'nominal',
|
|
20
|
+
'rough-opening',
|
|
21
|
+
'masonry-opening',
|
|
22
|
+
'finish-opening',
|
|
23
|
+
]);
|
|
17
24
|
export const WindowNode = BaseNode.extend({
|
|
18
25
|
id: objectId('window'),
|
|
19
26
|
type: nodeType('window'),
|
|
@@ -38,6 +45,17 @@ export const WindowNode = BaseNode.extend({
|
|
|
38
45
|
// Overall dimensions
|
|
39
46
|
width: z.number().default(1.5),
|
|
40
47
|
height: z.number().default(1.5),
|
|
48
|
+
// Construction-document identity and optional manufacturer rough opening.
|
|
49
|
+
// Legacy scenes omit these fields and continue to parse unchanged.
|
|
50
|
+
mark: z.string().trim().max(16).optional(),
|
|
51
|
+
constructionType: WindowConstructionType.default('framed'),
|
|
52
|
+
dimensionReference: WindowDimensionReference.default('nominal'),
|
|
53
|
+
roughOpeningWidth: z.number().positive().optional(),
|
|
54
|
+
roughOpeningHeight: z.number().positive().optional(),
|
|
55
|
+
masonryOpeningWidth: z.number().positive().optional(),
|
|
56
|
+
masonryOpeningHeight: z.number().positive().optional(),
|
|
57
|
+
finishOpeningWidth: z.number().positive().optional(),
|
|
58
|
+
finishOpeningHeight: z.number().positive().optional(),
|
|
41
59
|
// Opening mode - when set to "opening", the window is only a shaped cutout
|
|
42
60
|
openingKind: z.enum(['window', 'opening']).default('window'),
|
|
43
61
|
// Window family
|
|
@@ -19,6 +19,26 @@ export declare const ZoneNode: z.ZodObject<{
|
|
|
19
19
|
polygon: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
20
20
|
autoFromWalls: z.ZodDefault<z.ZodBoolean>;
|
|
21
21
|
boundaryWallIds: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>>>;
|
|
22
|
+
spaceRole: z.ZodDefault<z.ZodEnum<{
|
|
23
|
+
generic: "generic";
|
|
24
|
+
room: "room";
|
|
25
|
+
}>>;
|
|
26
|
+
roomNumber: z.ZodDefault<z.ZodString>;
|
|
27
|
+
enclosureStatus: z.ZodDefault<z.ZodEnum<{
|
|
28
|
+
auto: "auto";
|
|
29
|
+
enclosed: "enclosed";
|
|
30
|
+
open: "open";
|
|
31
|
+
}>>;
|
|
32
|
+
floorFinish: z.ZodDefault<z.ZodString>;
|
|
33
|
+
wallFinish: z.ZodDefault<z.ZodString>;
|
|
34
|
+
ceilingFinish: z.ZodDefault<z.ZodString>;
|
|
35
|
+
ceilingHeight: z.ZodDefault<z.ZodNumber>;
|
|
36
|
+
occupancy: z.ZodDefault<z.ZodString>;
|
|
37
|
+
clearDimensionPolicy: z.ZodDefault<z.ZodEnum<{
|
|
38
|
+
none: "none";
|
|
39
|
+
"inside-faces": "inside-faces";
|
|
40
|
+
"finish-faces": "finish-faces";
|
|
41
|
+
}>>;
|
|
22
42
|
color: z.ZodDefault<z.ZodString>;
|
|
23
43
|
metadata: z.ZodDefault<z.ZodOptional<z.ZodJSONSchema>>;
|
|
24
44
|
}, z.core.$strip>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zone.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"zone.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/zone.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA"}
|
|
@@ -11,6 +11,17 @@ export const ZoneNode = BaseNode.extend({
|
|
|
11
11
|
// stored polygon remains a fallback for missing or temporarily open walls.
|
|
12
12
|
autoFromWalls: z.boolean().default(false),
|
|
13
13
|
boundaryWallIds: z.array(objectId('wall')).default([]),
|
|
14
|
+
// Generic zones remain available for sites and analysis. Architectural
|
|
15
|
+
// room documentation is opt-in so legacy zone behavior is unchanged.
|
|
16
|
+
spaceRole: z.enum(['generic', 'room']).default('generic'),
|
|
17
|
+
roomNumber: z.string().trim().max(32).default(''),
|
|
18
|
+
enclosureStatus: z.enum(['auto', 'enclosed', 'open']).default('auto'),
|
|
19
|
+
floorFinish: z.string().trim().max(120).default(''),
|
|
20
|
+
wallFinish: z.string().trim().max(120).default(''),
|
|
21
|
+
ceilingFinish: z.string().trim().max(120).default(''),
|
|
22
|
+
ceilingHeight: z.number().min(0.1).default(2.7),
|
|
23
|
+
occupancy: z.string().trim().max(80).default(''),
|
|
24
|
+
clearDimensionPolicy: z.enum(['none', 'inside-faces', 'finish-faces']).default('none'),
|
|
14
25
|
// Visual styling
|
|
15
26
|
color: z.string().default('#3b82f6'), // Default blue
|
|
16
27
|
metadata: z.json().optional().default({}),
|
|
@@ -23,6 +34,10 @@ export const ZoneNode = BaseNode.extend({
|
|
|
23
34
|
- polygon: array of [x, z] points defining the zone boundary
|
|
24
35
|
- autoFromWalls: whether the boundary follows an enclosed wall loop
|
|
25
36
|
- boundaryWallIds: wall ids that prove the procedural enclosure
|
|
37
|
+
- spaceRole: generic site/analysis zone or architectural room
|
|
38
|
+
- roomNumber/finishes/ceilingHeight/occupancy: construction-document room metadata
|
|
39
|
+
- enclosureStatus: auto-detected, explicitly enclosed, or open
|
|
40
|
+
- clearDimensionPolicy: optional room clear-dimension datum preference
|
|
26
41
|
- color: hex color for visual styling
|
|
27
42
|
- metadata: zone metadata (optional)
|
|
28
43
|
`);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Current authoring and decoding ceiling. */
|
|
3
|
+
export declare const MAX_TERRAIN_SIDE = 257;
|
|
4
|
+
/**
|
|
5
|
+
* The persisted shape of a terrain heightfield.
|
|
6
|
+
*
|
|
7
|
+
* Kept in `schema/` rather than beside the codec because this is the contract
|
|
8
|
+
* the scene graph validates on load, and `lib/terrain-codec.ts` imports the type
|
|
9
|
+
* from here so there is exactly one definition of the wire format.
|
|
10
|
+
*
|
|
11
|
+
* `heights` is base64 of little-endian Int16 — see `lib/terrain-codec.ts` for why
|
|
12
|
+
* that beats a JSON number array, and why it is not compressed. The schema is
|
|
13
|
+
* intentionally loose about the *contents* of that string: validating base64
|
|
14
|
+
* here would duplicate the decoder, and `decodeTerrainField` already returns
|
|
15
|
+
* `null` for anything it cannot read, which is the behaviour a corrupt scene
|
|
16
|
+
* needs (load flat, don't fail the project).
|
|
17
|
+
*/
|
|
18
|
+
export declare const TerrainData: z.ZodObject<{
|
|
19
|
+
type: z.ZodLiteral<"heightfield">;
|
|
20
|
+
origin: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
21
|
+
spacing: z.ZodNumber;
|
|
22
|
+
cols: z.ZodNumber;
|
|
23
|
+
rows: z.ZodNumber;
|
|
24
|
+
step: z.ZodNumber;
|
|
25
|
+
heights: z.ZodString;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export type TerrainData = z.infer<typeof TerrainData>;
|
|
28
|
+
//# sourceMappingURL=terrain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terrain.d.ts","sourceRoot":"","sources":["../../src/schema/terrain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAEnC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW;;;;;;;;iBAYtB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA"}
|