@pascal-app/core 0.9.2 → 1.0.0-beta.2
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 +319 -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 +204 -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 +232 -91
- 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 +85 -0
- package/dist/lib/terrain-support.d.ts.map +1 -0
- package/dist/lib/terrain-support.js +218 -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 +83 -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 +150 -0
- package/dist/systems/slab/slab-support.d.ts.map +1 -0
- package/dist/systems/slab/slab-support.js +575 -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
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ npm install react three @react-three/fiber @react-three/drei
|
|
|
18
18
|
|
|
19
19
|
- **Node Schemas** - Zod schemas for all building primitives (walls, slabs, items, etc.)
|
|
20
20
|
- **Scene State** - Zustand store with IndexedDB persistence and undo/redo
|
|
21
|
-
- **
|
|
21
|
+
- **Registry Contracts** - Plugin and node-definition APIs shared by renderers and editor tools
|
|
22
22
|
- **Scene Registry** - Fast lookup from node IDs to Three.js objects
|
|
23
23
|
- **Spatial Grid** - Collision detection and placement validation
|
|
24
24
|
- **Event Bus** - Typed event emitter for inter-component communication
|
|
@@ -27,11 +27,12 @@ npm install react three @react-three/fiber @react-three/drei
|
|
|
27
27
|
## Usage
|
|
28
28
|
|
|
29
29
|
```typescript
|
|
30
|
-
import { useScene, WallNode
|
|
30
|
+
import { useScene, WallNode } from '@pascal-app/core'
|
|
31
31
|
|
|
32
32
|
// Create a wall
|
|
33
33
|
const wall = WallNode.parse({
|
|
34
|
-
|
|
34
|
+
start: [0, 0],
|
|
35
|
+
end: [5, 0],
|
|
35
36
|
height: 3,
|
|
36
37
|
thickness: 0.2,
|
|
37
38
|
})
|
|
@@ -61,15 +62,21 @@ function MyComponent() {
|
|
|
61
62
|
- `ScanNode` - 3D scan reference
|
|
62
63
|
- `GuideNode` - 2D guide image reference
|
|
63
64
|
|
|
64
|
-
##
|
|
65
|
+
## Built-in Node Definitions
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
Core contains the schemas, scene state, and registry contracts. The built-in node definitions,
|
|
68
|
+
renderers, geometry builders, tools, and systems ship in `@pascal-app/nodes`:
|
|
67
69
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
```typescript
|
|
71
|
+
import { loadPlugin } from '@pascal-app/core'
|
|
72
|
+
import { builtinPlugin } from '@pascal-app/nodes'
|
|
73
|
+
|
|
74
|
+
await loadPlugin(builtinPlugin)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Load the plugin before mounting `@pascal-app/viewer`. See the
|
|
78
|
+
[`@pascal-app/viewer` quick start](https://github.com/pascalorg/editor/tree/main/packages/viewer#usage)
|
|
79
|
+
for a React example.
|
|
73
80
|
|
|
74
81
|
## License
|
|
75
82
|
|
package/dist/events/bus.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ThreeEvent } from '@react-three/fiber';
|
|
2
2
|
import type { Object3D } from 'three';
|
|
3
|
-
import type { BoxVentNode, BuildingNode, CabinetModuleNode, CabinetNode, CeilingNode, ChimneyNode, ColumnNode, CupolaNode, DoorNode, DormerNode, DownspoutNode, DuctFittingNode, DuctSegmentNode, DuctTerminalNode, ElevatorNode, EyebrowVentNode, FenceNode, GuideNode, GutterNode, HvacEquipmentNode, ItemNode, LevelNode, LinesetNode, LiquidLineNode, MeasurementNode, PipeFittingNode, PipeSegmentNode, PipeTrapNode, RidgeVentNode, RoofNode, RoofSegmentNode, ScanNode, ShelfNode, SiteNode, SkylightNode, SlabNode, SolarPanelNode, SpawnNode, StairNode, StairSegmentNode, TurbineVentNode, WallNode, WindowNode, ZoneNode } from '../schema';
|
|
3
|
+
import type { BoxVentNode, BuildingNode, CabinetModuleNode, CabinetNode, CeilingNode, ChimneyNode, ColumnNode, ConstructionDimensionNode, CupolaNode, DoorNode, DormerNode, DownspoutNode, DuctFittingNode, DuctSegmentNode, DuctTerminalNode, ElevatorNode, EyebrowVentNode, FenceNode, GuideNode, GutterNode, HvacEquipmentNode, ItemNode, LevelNode, LinesetNode, LiquidLineNode, MeasurementNode, PipeFittingNode, PipeSegmentNode, PipeTrapNode, RidgeVentNode, RoofNode, RoofSegmentNode, ScanNode, ShelfNode, SiteNode, SkylightNode, SlabNode, SolarPanelNode, SpawnNode, StairNode, StairSegmentNode, StructuralGridNode, TurbineVentNode, WallNode, WindowNode, ZoneNode } from '../schema';
|
|
4
4
|
import type { AnyNode } from '../schema/types';
|
|
5
5
|
export interface GridEvent {
|
|
6
6
|
/** World-space intersection point on the grid plane. */
|
|
@@ -47,10 +47,12 @@ export type SlabEvent = NodeEvent<SlabNode>;
|
|
|
47
47
|
export type SpawnEvent = NodeEvent<SpawnNode>;
|
|
48
48
|
export type CeilingEvent = NodeEvent<CeilingNode>;
|
|
49
49
|
export type ColumnEvent = NodeEvent<ColumnNode>;
|
|
50
|
+
export type ConstructionDimensionEvent = NodeEvent<ConstructionDimensionNode>;
|
|
50
51
|
export type RoofEvent = NodeEvent<RoofNode>;
|
|
51
52
|
export type RoofSegmentEvent = NodeEvent<RoofSegmentNode>;
|
|
52
53
|
export type StairEvent = NodeEvent<StairNode>;
|
|
53
54
|
export type StairSegmentEvent = NodeEvent<StairSegmentNode>;
|
|
55
|
+
export type StructuralGridEvent = NodeEvent<StructuralGridNode>;
|
|
54
56
|
export type WindowEvent = NodeEvent<WindowNode>;
|
|
55
57
|
export type DoorEvent = NodeEvent<DoorNode>;
|
|
56
58
|
export type ElevatorEvent = NodeEvent<ElevatorNode>;
|
|
@@ -134,6 +136,14 @@ export interface CameraControlFitSceneEvent {
|
|
|
134
136
|
size: [number, number];
|
|
135
137
|
};
|
|
136
138
|
}
|
|
139
|
+
export interface CameraPose {
|
|
140
|
+
position: [number, number, number];
|
|
141
|
+
target: [number, number, number];
|
|
142
|
+
projection: 'perspective' | 'orthographic';
|
|
143
|
+
/** Width, in scene units, of the visible plane through `target`. */
|
|
144
|
+
viewWidth?: number;
|
|
145
|
+
fov?: number;
|
|
146
|
+
}
|
|
137
147
|
type CameraControlEvents = {
|
|
138
148
|
'camera-controls:view': CameraControlEvent;
|
|
139
149
|
'camera-controls:focus': CameraControlEvent;
|
|
@@ -143,6 +153,9 @@ type CameraControlEvents = {
|
|
|
143
153
|
'camera-controls:orbit-ccw': undefined;
|
|
144
154
|
'camera-controls:fit-scene': CameraControlFitSceneEvent;
|
|
145
155
|
'camera-controls:generate-thumbnail': ThumbnailGenerateEvent;
|
|
156
|
+
'camera-controls:apply-pose': CameraPose;
|
|
157
|
+
'camera-controls:cancel-pose': undefined;
|
|
158
|
+
'camera-controls:interaction-start': undefined;
|
|
146
159
|
};
|
|
147
160
|
type ToolEvents = {
|
|
148
161
|
'tool:cancel': undefined;
|
|
@@ -195,6 +208,12 @@ type RoomPresetEvents = {
|
|
|
195
208
|
'room-preset:create': RoomPresetCreateEvent;
|
|
196
209
|
};
|
|
197
210
|
type SelectionEvents = {
|
|
211
|
+
/**
|
|
212
|
+
* A node click accepted by an editor canvas selection path after proxy and
|
|
213
|
+
* phase routing. Hosts can react to the user's 2D/3D selection intent
|
|
214
|
+
* without treating programmatic selection changes as canvas clicks.
|
|
215
|
+
*/
|
|
216
|
+
'selection:canvas-node-click': AnyNode;
|
|
198
217
|
/**
|
|
199
218
|
* "Reveal this node" intent — the editor's node action menu emits it with the
|
|
200
219
|
* selected node; whoever owns the node's catalog/panel (host browser, a
|
|
@@ -202,7 +221,7 @@ type SelectionEvents = {
|
|
|
202
221
|
*/
|
|
203
222
|
'selection:find-node': AnyNode;
|
|
204
223
|
};
|
|
205
|
-
type EditorEvents = GridEvents & NodeEvents<'wall', WallEvent> & NodeEvents<'fence', FenceEvent> & NodeEvents<'cabinet', CabinetEvent> & NodeEvents<'cabinet-module', CabinetModuleEvent> & NodeEvents<'item', ItemEvent> & NodeEvents<'site', SiteEvent> & NodeEvents<'building', BuildingEvent> & NodeEvents<'elevator', ElevatorEvent> & NodeEvents<'level', LevelEvent> & NodeEvents<'zone', ZoneEvent> & NodeEvents<'slab', SlabEvent> & NodeEvents<'shelf', ShelfEvent> & NodeEvents<'spawn', SpawnEvent> & NodeEvents<'ceiling', CeilingEvent> & NodeEvents<'column', ColumnEvent> & NodeEvents<'roof', RoofEvent> & NodeEvents<'roof-segment', RoofSegmentEvent> & NodeEvents<'stair', StairEvent> & NodeEvents<'stair-segment', StairSegmentEvent> & NodeEvents<'window', WindowEvent> & NodeEvents<'door', DoorEvent> & NodeEvents<'scan', ScanEvent> & NodeEvents<'guide', GuideEvent> & NodeEvents<'box-vent', BoxVentEvent> & NodeEvents<'ridge-vent', RidgeVentEvent> & NodeEvents<'turbine-vent', TurbineVentEvent> & NodeEvents<'cupola', CupolaEvent> & NodeEvents<'eyebrow-vent', EyebrowVentEvent> & NodeEvents<'gutter', GutterEvent> & NodeEvents<'chimney', ChimneyEvent> & NodeEvents<'solar-panel', SolarPanelEvent> & NodeEvents<'skylight', SkylightEvent> & NodeEvents<'dormer', DormerEvent> & NodeEvents<'downspout', DownspoutEvent> & NodeEvents<'duct-segment', DuctSegmentEvent> & NodeEvents<'duct-fitting', DuctFittingEvent> & NodeEvents<'duct-terminal', DuctTerminalEvent> & NodeEvents<'hvac-equipment', HvacEquipmentEvent> & NodeEvents<'pipe-segment', PipeSegmentEvent> & NodeEvents<'pipe-fitting', PipeFittingEvent> & NodeEvents<'pipe-trap', PipeTrapEvent> & NodeEvents<'lineset', LinesetEvent> & NodeEvents<'liquid-line', LiquidLineEvent> & NodeEvents<'measurement', MeasurementEvent> & CameraControlEvents & ToolEvents & GuideEvents & DoorAnimationEvents & WindowAnimationEvents & ThumbnailEvents & SnapshotEvents & AIChatEvents & RoomPresetEvents & SelectionEvents;
|
|
224
|
+
type EditorEvents = GridEvents & NodeEvents<'wall', WallEvent> & NodeEvents<'fence', FenceEvent> & NodeEvents<'cabinet', CabinetEvent> & NodeEvents<'cabinet-module', CabinetModuleEvent> & NodeEvents<'item', ItemEvent> & NodeEvents<'site', SiteEvent> & NodeEvents<'building', BuildingEvent> & NodeEvents<'elevator', ElevatorEvent> & NodeEvents<'level', LevelEvent> & NodeEvents<'zone', ZoneEvent> & NodeEvents<'slab', SlabEvent> & NodeEvents<'shelf', ShelfEvent> & NodeEvents<'spawn', SpawnEvent> & NodeEvents<'ceiling', CeilingEvent> & NodeEvents<'column', ColumnEvent> & NodeEvents<'construction-dimension', ConstructionDimensionEvent> & NodeEvents<'roof', RoofEvent> & NodeEvents<'roof-segment', RoofSegmentEvent> & NodeEvents<'stair', StairEvent> & NodeEvents<'stair-segment', StairSegmentEvent> & NodeEvents<'structural-grid', StructuralGridEvent> & NodeEvents<'window', WindowEvent> & NodeEvents<'door', DoorEvent> & NodeEvents<'scan', ScanEvent> & NodeEvents<'guide', GuideEvent> & NodeEvents<'box-vent', BoxVentEvent> & NodeEvents<'ridge-vent', RidgeVentEvent> & NodeEvents<'turbine-vent', TurbineVentEvent> & NodeEvents<'cupola', CupolaEvent> & NodeEvents<'eyebrow-vent', EyebrowVentEvent> & NodeEvents<'gutter', GutterEvent> & NodeEvents<'chimney', ChimneyEvent> & NodeEvents<'solar-panel', SolarPanelEvent> & NodeEvents<'skylight', SkylightEvent> & NodeEvents<'dormer', DormerEvent> & NodeEvents<'downspout', DownspoutEvent> & NodeEvents<'duct-segment', DuctSegmentEvent> & NodeEvents<'duct-fitting', DuctFittingEvent> & NodeEvents<'duct-terminal', DuctTerminalEvent> & NodeEvents<'hvac-equipment', HvacEquipmentEvent> & NodeEvents<'pipe-segment', PipeSegmentEvent> & NodeEvents<'pipe-fitting', PipeFittingEvent> & NodeEvents<'pipe-trap', PipeTrapEvent> & NodeEvents<'lineset', LinesetEvent> & NodeEvents<'liquid-line', LiquidLineEvent> & NodeEvents<'measurement', MeasurementEvent> & CameraControlEvents & ToolEvents & GuideEvents & DoorAnimationEvents & WindowAnimationEvents & ThumbnailEvents & SnapshotEvents & AIChatEvents & RoomPresetEvents & SelectionEvents;
|
|
206
225
|
export declare const emitter: import("mitt").Emitter<EditorEvents>;
|
|
207
226
|
export {};
|
|
208
227
|
//# sourceMappingURL=bus.d.ts.map
|
package/dist/events/bus.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/events/bus.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../src/events/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
import type { FloorPlacedConfig, FloorPlacedFootprint, FloorPlacedFootprintContext, FloorPlacedFootprintsResolver } from '../../registry/types';
|
|
2
2
|
import type { AnyNode } from '../../schema';
|
|
3
|
+
export { GROUND_SUPPORT_ID } from './support-host-id';
|
|
4
|
+
/**
|
|
5
|
+
* Sentinel `supportSlabId` meaning "hosted by the level base (ground)".
|
|
6
|
+
* Persisted when a pointer-capped commit elects the ground while one or
|
|
7
|
+
* more slabs (e.g. an elevated deck) still overlap the footprint above the
|
|
8
|
+
* cap — without it, the uncapped per-frame election would lift the
|
|
9
|
+
* committed node back onto the deck.
|
|
10
|
+
*/
|
|
3
11
|
export type FloorPlacedElevationArgs = {
|
|
4
12
|
node: AnyNode;
|
|
5
13
|
nodes: Record<string, AnyNode>;
|
|
6
14
|
position: [number, number, number];
|
|
7
15
|
rotation?: unknown;
|
|
8
16
|
levelId?: string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Pointer-decided support cap (level-local Y): only slabs whose walking
|
|
19
|
+
* surface sits at or below `maxElevation + SUPPORT_ELEVATION_EPSILON`
|
|
20
|
+
* may be elected, and the persisted `supportSlabId` is bypassed — during
|
|
21
|
+
* a drag the pointer, not the stored host, decides the target surface.
|
|
22
|
+
* Omit (or pass null) for the uncapped committed-read behavior.
|
|
23
|
+
*/
|
|
24
|
+
maxElevation?: number | null;
|
|
9
25
|
};
|
|
10
26
|
export declare function getFloorPlacedFootprints(floorPlaced: FloorPlacedConfig, node: AnyNode, ctx?: FloorPlacedFootprintContext): FloorPlacedFootprint[];
|
|
11
|
-
export declare function getFloorPlacedElevation({ node, nodes, position, rotation, levelId, }: FloorPlacedElevationArgs): number;
|
|
27
|
+
export declare function getFloorPlacedElevation({ node, nodes, position, rotation, levelId, maxElevation, }: FloorPlacedElevationArgs): number;
|
|
12
28
|
export declare function getFloorStackedPosition(args: FloorPlacedElevationArgs): [number, number, number];
|
|
13
29
|
export type { FloorPlacedFootprint, FloorPlacedFootprintContext, FloorPlacedFootprintsResolver };
|
|
14
30
|
//# sourceMappingURL=floor-placed-elevation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floor-placed-elevation.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/floor-placed-elevation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"floor-placed-elevation.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/floor-placed-elevation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,CAAA;AAkBD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,OAAO,EACb,GAAG,CAAC,EAAE,2BAA2B,GAChC,oBAAoB,EAAE,CAMxB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,GACb,EAAE,wBAAwB,GAAG,MAAM,CA0FnC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,wBAAwB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAGhG;AAED,YAAY,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,CAAA"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { levelBaseElevationAt } from '../../lib/terrain-support';
|
|
1
2
|
import { nodeRegistry } from '../../registry';
|
|
2
3
|
import { spatialGridManager } from './spatial-grid-manager';
|
|
4
|
+
export { GROUND_SUPPORT_ID } from './support-host-id';
|
|
5
|
+
import { GROUND_SUPPORT_ID } from './support-host-id';
|
|
3
6
|
function finiteSlabElevation(elevation) {
|
|
4
7
|
return Number.isFinite(elevation) ? elevation : 0;
|
|
5
8
|
}
|
|
@@ -17,7 +20,7 @@ export function getFloorPlacedFootprints(floorPlaced, node, ctx) {
|
|
|
17
20
|
const footprint = floorPlaced.footprint?.(node, ctx);
|
|
18
21
|
return footprint ? [footprint] : [];
|
|
19
22
|
}
|
|
20
|
-
export function getFloorPlacedElevation({ node, nodes, position, rotation, levelId, }) {
|
|
23
|
+
export function getFloorPlacedElevation({ node, nodes, position, rotation, levelId, maxElevation, }) {
|
|
21
24
|
const floorPlaced = nodeRegistry.get(node.type)?.capabilities?.floorPlaced;
|
|
22
25
|
if (!floorPlaced)
|
|
23
26
|
return 0;
|
|
@@ -35,15 +38,65 @@ export function getFloorPlacedElevation({ node, nodes, position, rotation, level
|
|
|
35
38
|
const resolvedLevelId = parent?.type === 'level' ? parent.id : levelId;
|
|
36
39
|
if (!resolvedLevelId)
|
|
37
40
|
return 0;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
const footprints = getFloorPlacedFootprints(floorPlaced, effectiveNode, { nodes });
|
|
42
|
+
/**
|
|
43
|
+
* What "the level base" evaluates to: the sculpted ground under this node, or 0
|
|
44
|
+
* when the scene has no terrain / this storey is not at grade.
|
|
45
|
+
*
|
|
46
|
+
* Sampled once at the node's own XZ — not per footprint, and not averaged over
|
|
47
|
+
* the footprint. One sample per node is what keeps a row of columns individually
|
|
48
|
+
* correct on a slope while a composite node (a cabinet run, an L-shaped desk)
|
|
49
|
+
* stays rigid instead of shearing across its own parts. Kinds that need a level
|
|
50
|
+
* pad (stairs, a building's ground slab) get one by flattening the terrain under
|
|
51
|
+
* them, which is a scene edit and therefore visible and undoable — not by
|
|
52
|
+
* silently disagreeing with the ground here.
|
|
53
|
+
*
|
|
54
|
+
* Deliberately called only where level-base support is asserted. The six
|
|
55
|
+
* `0`-returns above mean "do not touch this node's Y" — an attached item, a
|
|
56
|
+
* non-`level` parent, a broken graph — and lifting those would pull wall sconces
|
|
57
|
+
* and cabinet interiors off their hosts.
|
|
58
|
+
*/
|
|
59
|
+
let groundLiftCache = null;
|
|
60
|
+
const groundLift = () => {
|
|
61
|
+
groundLiftCache ??= levelBaseElevationAt(nodes, resolvedLevelId, position[0], position[2]);
|
|
62
|
+
return groundLiftCache;
|
|
63
|
+
};
|
|
64
|
+
// A persisted support host pins the elevation while it still exists and
|
|
65
|
+
// overlaps a footprint — deterministic across stacked slabs. A stale
|
|
66
|
+
// host (deleted or reshaped away) silently falls through to the
|
|
67
|
+
// election below; this per-frame read path never writes the field.
|
|
68
|
+
// Skipped entirely under a pointer cap: the cursor, not the stored
|
|
69
|
+
// host, decides the target surface during a drag.
|
|
70
|
+
const supportSlabId = effectiveNode.supportSlabId;
|
|
71
|
+
if (maxElevation == null && supportSlabId) {
|
|
72
|
+
if (supportSlabId === GROUND_SUPPORT_ID)
|
|
73
|
+
return groundLift();
|
|
74
|
+
for (const footprint of footprints) {
|
|
75
|
+
const hosted = spatialGridManager.getHostSlabElevationForFootprint(resolvedLevelId, supportSlabId, footprint.position ?? position, footprint.dimensions, footprint.rotation);
|
|
76
|
+
if (hosted !== null)
|
|
77
|
+
return finiteSlabElevation(hosted);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Per footprint the support is its winning slab, or the level base when no slab
|
|
81
|
+
// overlaps it; the node rests on the highest of them. The *slab id* is what says
|
|
82
|
+
// which of the two it is — `getSlabSupportForItem` reports a no-winner election
|
|
83
|
+
// as elevation 0, and terrain makes that ambiguous: a slab flush with the storey
|
|
84
|
+
// base and bare ground both read as 0, and only the second follows a hillside.
|
|
85
|
+
//
|
|
86
|
+
// Electing the base per footprint rather than as a whole-node fallback is what
|
|
87
|
+
// keeps this identical on flat ground, where `groundLift()` is 0: a composite node
|
|
88
|
+
// straddling a recessed slab and bare floor still rests on the floor rather than
|
|
89
|
+
// sinking into the recess.
|
|
90
|
+
let elected = Number.NEGATIVE_INFINITY;
|
|
91
|
+
for (const footprint of footprints) {
|
|
92
|
+
const support = spatialGridManager.getSlabSupportForItem(resolvedLevelId, footprint.position ?? position, footprint.dimensions, footprint.rotation, maxElevation);
|
|
93
|
+
const elevation = support.slabId === null ? groundLift() : finiteSlabElevation(support.elevation);
|
|
94
|
+
if (elevation > elected) {
|
|
95
|
+
elected = elevation;
|
|
44
96
|
}
|
|
45
97
|
}
|
|
46
|
-
|
|
98
|
+
// A kind with no footprint at all still rests on the ground.
|
|
99
|
+
return elected === Number.NEGATIVE_INFINITY ? groundLift() : elected;
|
|
47
100
|
}
|
|
48
101
|
export function getFloorStackedPosition(args) {
|
|
49
102
|
const [x, y, z] = args.position;
|
|
@@ -1,73 +1,33 @@
|
|
|
1
|
-
import type { AnyNode,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
export declare function pointInPolygon(px: number, pz: number, polygon: Array<[number, number]>): boolean;
|
|
1
|
+
import type { AnyNode, WallNode } from '../../schema';
|
|
2
|
+
import { type WallSlabSupport } from '../../systems/slab/slab-support';
|
|
3
|
+
export { computeWallSlabElevation, computeWallSlabSupport, pointInPolygon, SUPPORT_ELEVATION_EPSILON, type WallOverlapInput, type WallSlabSupport, type WallSlabSupportSegment, wallOverlapsPolygon, } from '../../systems/slab/slab-support';
|
|
6
4
|
/**
|
|
7
5
|
* Test if an item's footprint overlaps with a polygon.
|
|
8
6
|
* Checks: any item corner inside polygon, or any polygon vertex inside item AABB, or edges intersect.
|
|
9
7
|
*/
|
|
10
8
|
export declare function itemOverlapsPolygon(position: [number, number, number], dimensions: [number, number, number], rotation: [number, number, number], polygon: Array<[number, number]>, inset?: number): boolean;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
curveOffset?: number;
|
|
15
|
-
thickness?: number;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Test whether a wall overlaps a slab polygon along a segment of its length.
|
|
19
|
-
*
|
|
20
|
-
* The wall's centerline and both face lines are clipped against the polygon;
|
|
21
|
-
* the wall overlaps when the longest clipped inside-or-on-boundary length
|
|
22
|
-
* exceeds a threshold (5cm, halved for very short walls). Because interval
|
|
23
|
-
* midpoints classify "on the boundary" as inside explicitly (never by
|
|
24
|
-
* ray-cast tie-breaking), a wall sitting exactly on a slab edge resolves
|
|
25
|
-
* identically on every side of the slab.
|
|
26
|
-
*
|
|
27
|
-
* A wall that only touches the polygon at a point — a perpendicular wall
|
|
28
|
-
* butting into a room's edge, or a corner-to-corner touch — clips to ~zero
|
|
29
|
-
* length and does NOT overlap.
|
|
30
|
-
*/
|
|
31
|
-
export declare function wallOverlapsPolygon(startOrWall: [number, number] | WallOverlapInput, endOrPolygon: [number, number] | Array<[number, number]>, polygonArg?: Array<[number, number]>): boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Base elevation for a wall, decided by which slabs actually SUPPORT it.
|
|
34
|
-
*
|
|
35
|
-
* Support is measured as covered length: the wall's centerline and face
|
|
36
|
-
* lines are clipped against each slab's RENDERED footprint
|
|
37
|
-
* (`getRenderableSlabPolygon` with the level walls + siblings, not the
|
|
38
|
-
* stored polygon — legacy polygons stored at wall faces or with old
|
|
39
|
-
* baked offsets fall short of the wall body, but their band-adopted
|
|
40
|
-
* rendered edge reaches the wall's outer face) minus the slab's stored
|
|
41
|
-
* holes (holes are data, never render-offset). A slab supporting less
|
|
42
|
-
* than `WALL_SLAB_MIN_OVERLAP` of the wall is ignored entirely (point
|
|
43
|
-
* contact, endpoint grazes).
|
|
44
|
-
*
|
|
45
|
-
* Same-elevation slabs pool their coverage. `elevation` preserves the
|
|
46
|
-
* existing wall-relative origin: the highest elevation covering at
|
|
47
|
-
* least `WALL_SLAB_SUPPORT_MAJORITY` of the wall, or the best-covered
|
|
48
|
-
* elevation when none reaches majority. `baseElevation` only fills down
|
|
49
|
-
* where a lower support remains exposed on a wall face after higher,
|
|
50
|
-
* overlapping support is accounted for. Coincident floor/platform slabs
|
|
51
|
-
* therefore keep the wall on the platform, while slabs on opposite wall
|
|
52
|
-
* sides bridge correctly. A slab touching only one endpoint never enters
|
|
53
|
-
* either result. Pure;
|
|
54
|
-
* exported for tests.
|
|
55
|
-
*/
|
|
56
|
-
export type WallSlabSupport = {
|
|
57
|
-
/** Existing wall-relative floor elevation used by hosted children and wall height. */
|
|
9
|
+
/** One slab overlapping a queried footprint, as seen by support election. */
|
|
10
|
+
export type SlabSupportCandidate = {
|
|
11
|
+
slabId: string;
|
|
58
12
|
elevation: number;
|
|
59
|
-
/** Lowest exposed adjacent support; wall geometry fills down to this elevation. */
|
|
60
|
-
baseElevation: number;
|
|
61
|
-
/** Piecewise bottom elevation along the wall centerline, in normalized arc-length units. */
|
|
62
|
-
baseSegments: WallSlabSupportSegment[];
|
|
63
13
|
};
|
|
64
|
-
export type
|
|
65
|
-
start: number;
|
|
66
|
-
end: number;
|
|
14
|
+
export type ItemSlabSupport = {
|
|
67
15
|
elevation: number;
|
|
16
|
+
/** The winning slab, or null when no slab overlaps the footprint. */
|
|
17
|
+
slabId: string | null;
|
|
18
|
+
};
|
|
19
|
+
export type PointedSupportSurface = ItemSlabSupport & {
|
|
20
|
+
/**
|
|
21
|
+
* Level-local XZ where the ray meets the pointed surface's plane, or
|
|
22
|
+
* null when the ray never reaches it (grazing / aimed above the base).
|
|
23
|
+
* This is the plan point the pointer actually indicates: unlike a grid
|
|
24
|
+
* event-plane hit — whose XZ shifts with whatever height the event
|
|
25
|
+
* plane currently rides at — it depends only on the ray and the
|
|
26
|
+
* aimed-at surface, so election/preview at this point cannot flip when
|
|
27
|
+
* the event plane changes storey.
|
|
28
|
+
*/
|
|
29
|
+
point: [number, number] | null;
|
|
68
30
|
};
|
|
69
|
-
export declare function computeWallSlabSupport(wallLike: WallOverlapInput, slabs: readonly SlabNode[], levelWalls: WallNode[]): WallSlabSupport;
|
|
70
|
-
export declare function computeWallSlabElevation(wallLike: WallOverlapInput, slabs: readonly SlabNode[], levelWalls: WallNode[]): number;
|
|
71
31
|
export declare class SpatialGridManager {
|
|
72
32
|
private readonly floorGrids;
|
|
73
33
|
private readonly wallGrids;
|
|
@@ -84,6 +44,45 @@ export declare class SpatialGridManager {
|
|
|
84
44
|
private getWallHeight;
|
|
85
45
|
private getCeilingGrid;
|
|
86
46
|
private getSlabMap;
|
|
47
|
+
/**
|
|
48
|
+
* Per-slab RENDERED polygon cache (`getRenderableSlabPolygon`). Item
|
|
49
|
+
* support queries run per frame and the projection scans the level's
|
|
50
|
+
* walls + sibling slabs, so the result is cached per slab id and
|
|
51
|
+
* dropped for the whole level whenever a slab or wall on that level
|
|
52
|
+
* flows through the manager's create/update/delete handlers.
|
|
53
|
+
*/
|
|
54
|
+
private readonly renderedSlabPolygons;
|
|
55
|
+
private invalidateRenderedSlabPolygons;
|
|
56
|
+
/**
|
|
57
|
+
* True while a slab or wall on `levelId` has a live preview: group drags
|
|
58
|
+
* publish translated slab polygons and wall endpoints to
|
|
59
|
+
* `useLiveNodeOverrides`, and the slab move tool / room-preset stamp
|
|
60
|
+
* publish a translation DELTA to `useLiveTransforms` — either way the
|
|
61
|
+
* scene store commits only on release, so the committed cache and index
|
|
62
|
+
* would elect support against pre-drag footprints (items and walls
|
|
63
|
+
* visibly drop to ground mid-preview). Support queries then read
|
|
64
|
+
* live-effective records and skip the rendered-polygon cache.
|
|
65
|
+
*/
|
|
66
|
+
private levelHasLivePreview;
|
|
67
|
+
/**
|
|
68
|
+
* The live-effective slab record: field overrides merged, then the
|
|
69
|
+
* `useLiveTransforms` DELTA (slab publishers — move tool, room-preset
|
|
70
|
+
* stamp — store a translation, not an absolute position) applied to the
|
|
71
|
+
* polygon, holes, and elevation. Mapping happens exactly ONCE at each
|
|
72
|
+
* public query's loop entry: `slabSupportsFootprint` /
|
|
73
|
+
* `getRenderedSlabPolygon` take the already-effective record and must
|
|
74
|
+
* never re-map, or the delta would apply twice.
|
|
75
|
+
*/
|
|
76
|
+
private effectiveSlabRecord;
|
|
77
|
+
private getRenderedSlabPolygon;
|
|
78
|
+
/**
|
|
79
|
+
* Support test shared by election, candidate listing, and persisted-host
|
|
80
|
+
* validation: the footprint overlaps the slab's RENDERED polygon (what
|
|
81
|
+
* users see — matching the wall election in `computeWallSlabSupport`),
|
|
82
|
+
* with the center-point hole veto kept against the stored holes (holes
|
|
83
|
+
* are data, never render-offset).
|
|
84
|
+
*/
|
|
85
|
+
private slabSupportsFootprint;
|
|
87
86
|
handleNodeCreated(node: AnyNode, levelId: string): void;
|
|
88
87
|
handleNodeUpdated(node: AnyNode, levelId: string): void;
|
|
89
88
|
handleNodeDeleted(nodeId: string, nodeType: string, levelId: string): string[];
|
|
@@ -127,10 +126,50 @@ export declare class SpatialGridManager {
|
|
|
127
126
|
getSlabElevationAt(levelId: string, x: number, z: number): number;
|
|
128
127
|
/**
|
|
129
128
|
* Get the slab elevation for an item using its full footprint (bounding box).
|
|
130
|
-
*
|
|
131
|
-
*
|
|
129
|
+
* Thin wrapper over {@link getSlabSupportForItem} for callers (and tests)
|
|
130
|
+
* that only need the number.
|
|
131
|
+
*/
|
|
132
|
+
getSlabElevationForItem(levelId: string, position: [number, number, number], dimensions: [number, number, number], rotation: [number, number, number], maxElevation?: number | null): number;
|
|
133
|
+
/**
|
|
134
|
+
* Elect the supporting slab for a footprint: the highest-elevation slab
|
|
135
|
+
* whose RENDERED polygon the footprint overlaps (center-point hole veto
|
|
136
|
+
* applies). Returns `{ elevation: 0, slabId: null }` when nothing
|
|
137
|
+
* overlaps.
|
|
138
|
+
*
|
|
139
|
+
* `maxElevation` is the pointer-decided cap: when set, only slabs whose
|
|
140
|
+
* walking surface sits at or below `maxElevation +
|
|
141
|
+
* SUPPORT_ELEVATION_EPSILON` may win — a deck hanging above the surface
|
|
142
|
+
* the cursor ray actually hit never captures the election.
|
|
143
|
+
*/
|
|
144
|
+
getSlabSupportForItem(levelId: string, position: [number, number, number], dimensions: [number, number, number], rotation: [number, number, number], maxElevation?: number | null): ItemSlabSupport;
|
|
145
|
+
/**
|
|
146
|
+
* The walking surface the pointer actually points at: the nearest slab
|
|
147
|
+
* plane the ray crosses INSIDE that slab's rendered polygon (hole veto
|
|
148
|
+
* applies), or the level base (`elevation: 0, slabId: null`) when it
|
|
149
|
+
* crosses none. Ray origin/direction are level-local. Deliberately a
|
|
150
|
+
* point test, not a footprint test — it answers "which surface is under
|
|
151
|
+
* the cursor", which then caps the footprint election so a deck hanging
|
|
152
|
+
* above the aimed-at floor never lifts the placement. `point` is the
|
|
153
|
+
* ray's crossing of that surface's plane — the stable plan point
|
|
154
|
+
* callers should elect/preview at (see {@link PointedSupportSurface}).
|
|
155
|
+
*/
|
|
156
|
+
getPointedSupportSurface(levelId: string, rayOrigin: [number, number, number], rayDirection: [number, number, number]): PointedSupportSurface;
|
|
157
|
+
/**
|
|
158
|
+
* All slabs supporting a footprint, one entry per overlapping slab
|
|
159
|
+
* (highest elevation first; slab id breaks ties deterministically).
|
|
160
|
+
* Commit-side ambiguity check: persist a `supportSlabId` only when the
|
|
161
|
+
* candidates carry ≥ 2 distinct elevations.
|
|
132
162
|
*/
|
|
133
|
-
|
|
163
|
+
getSupportCandidatesForFootprint(levelId: string, position: [number, number, number], dimensions: [number, number, number], rotation: [number, number, number]): SlabSupportCandidate[];
|
|
164
|
+
/**
|
|
165
|
+
* Elevation of a persisted support host for a footprint, or null when
|
|
166
|
+
* the slab no longer exists on the level or no longer overlaps the
|
|
167
|
+
* footprint (same overlap test as election). Deliberately read-only: a
|
|
168
|
+
* host reshaped away is NOT cleared — callers fall back to election and
|
|
169
|
+
* the stale reference resumes hosting if the slab's polygon returns.
|
|
170
|
+
* Slab deletion is the only writer (`deleteNodesAction` strips it).
|
|
171
|
+
*/
|
|
172
|
+
getHostSlabElevationForFootprint(levelId: string, slabId: string, position: [number, number, number], dimensions: [number, number, number], rotation: [number, number, number]): number | null;
|
|
134
173
|
/**
|
|
135
174
|
* Get the slab elevation for a wall by checking if it overlaps with any slab polygon (excluding holes).
|
|
136
175
|
* Returns the highest slab elevation found, or 0 if none.
|
|
@@ -138,8 +177,8 @@ export declare class SpatialGridManager {
|
|
|
138
177
|
* Accepts an optional `curveOffset` so curved walls evaluate overlap
|
|
139
178
|
* against their actual centerline samples, not just the chord.
|
|
140
179
|
*/
|
|
141
|
-
getSlabElevationForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number): number;
|
|
142
|
-
getSlabSupportForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number): WallSlabSupport;
|
|
180
|
+
getSlabElevationForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number, preferredSlabId?: string | null): number;
|
|
181
|
+
getSlabSupportForWall(levelId: string, start: [number, number], end: [number, number], curveOffset?: number, thickness?: number, preferredSlabId?: string | null, maxElevation?: number | null, supportOffset?: number): WallSlabSupport;
|
|
143
182
|
/**
|
|
144
183
|
* Walls on a level, resolved fresh from the scene store (the manager's
|
|
145
184
|
* own wall map is only maintained on create/delete, not on updates).
|
|
@@ -160,4 +199,15 @@ export declare class SpatialGridManager {
|
|
|
160
199
|
clear(): void;
|
|
161
200
|
}
|
|
162
201
|
export declare const spatialGridManager: SpatialGridManager;
|
|
202
|
+
/** Level-local Y where the rendered wall mesh begins. */
|
|
203
|
+
export declare function getWallBaseElevationForNodes(wall: WallNode, nodes: Record<string, AnyNode>): number;
|
|
204
|
+
/**
|
|
205
|
+
* Effective (extruded) height of a wall resolved from a nodes record:
|
|
206
|
+
* {@link resolveWallEffectiveHeight} over the covering-clamped plane top
|
|
207
|
+
* (`getWallPlaneTop`) and the singleton manager's slab election — so the
|
|
208
|
+
* value always agrees with the rendered wall. One shared resolver for the
|
|
209
|
+
* editor overlays (measurement label, action menu, side handles) that used
|
|
210
|
+
* to copy this derivation locally.
|
|
211
|
+
*/
|
|
212
|
+
export declare function getWallEffectiveHeightForNodes(wall: WallNode, nodes: Record<string, AnyNode>): number;
|
|
163
213
|
//# sourceMappingURL=spatial-grid-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-grid-manager.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/spatial-grid-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spatial-grid-manager.d.ts","sourceRoot":"","sources":["../../../src/hooks/spatial-grid/spatial-grid-manager.ts"],"names":[],"mappings":"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"}
|