@pascal-app/core 1.0.0-beta.5 → 1.0.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/LICENSE +21 -0
- package/README.md +23 -0
- package/dist/capture/index.d.ts +3 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +2 -0
- package/dist/capture/schema.d.ts +417 -0
- package/dist/capture/schema.d.ts.map +1 -0
- package/dist/capture/schema.js +350 -0
- package/dist/capture/source.d.ts +60 -0
- package/dist/capture/source.d.ts.map +1 -0
- package/dist/capture/source.js +254 -0
- package/dist/events/bus.d.ts +58 -7
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/hidden-wall-pointer-hold.d.ts +28 -0
- package/dist/events/hidden-wall-pointer-hold.d.ts.map +1 -0
- package/dist/events/hidden-wall-pointer-hold.js +37 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +4 -4
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +7 -12
- package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts +4 -0
- package/dist/hooks/spatial-grid/floor-placed-footprints.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/floor-placed-footprints.js +7 -0
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +5 -8
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +23 -106
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +2931 -2
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +207 -30
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +45 -1
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +174 -9
- package/dist/hooks/spatial-grid/use-spatial-query.d.ts +1 -1
- package/dist/hooks/spatial-grid/use-spatial-query.js +1 -1
- package/dist/index.d.ts +74 -64
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -61
- package/dist/lib/asset-storage.d.ts.map +1 -1
- package/dist/lib/asset-storage.js +4 -1
- package/dist/lib/door-operation.d.ts +1 -1
- package/dist/lib/item-polygon-overlap.d.ts +6 -0
- package/dist/lib/item-polygon-overlap.d.ts.map +1 -0
- package/dist/lib/item-polygon-overlap.js +67 -0
- package/dist/lib/level-name.d.ts +1 -1
- package/dist/lib/measurement-geometry.d.ts +4 -4
- package/dist/lib/plan-footprint.d.ts +41 -0
- package/dist/lib/plan-footprint.d.ts.map +1 -0
- package/dist/lib/plan-footprint.js +58 -0
- package/dist/lib/polygon-union.d.ts +4 -0
- package/dist/lib/polygon-union.d.ts.map +1 -0
- package/dist/lib/polygon-union.js +306 -0
- package/dist/lib/roof-overlap.d.ts +32 -0
- package/dist/lib/roof-overlap.d.ts.map +1 -0
- package/dist/lib/roof-overlap.js +72 -0
- package/dist/lib/room-topology-index.d.ts +1 -1
- package/dist/lib/room-topology-index.js +1 -1
- package/dist/lib/selection-proxy.d.ts +1 -1
- package/dist/lib/slab-polygon.d.ts +36 -3
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +135 -29
- package/dist/lib/space-detection.d.ts +12 -1
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +58 -25
- package/dist/lib/terrain-brush.d.ts +1 -1
- package/dist/lib/terrain-brush.js +1 -1
- package/dist/lib/terrain-codec.d.ts +2 -2
- package/dist/lib/terrain-codec.js +1 -1
- package/dist/lib/terrain-raycast.d.ts +1 -1
- package/dist/lib/terrain-raycast.js +1 -1
- package/dist/lib/terrain-source.d.ts +3 -3
- package/dist/lib/terrain-source.js +3 -3
- package/dist/lib/terrain-support.d.ts +1 -1
- package/dist/lib/terrain-support.js +3 -3
- package/dist/lib/unit-containment.d.ts +19 -0
- package/dist/lib/unit-containment.d.ts.map +1 -0
- package/dist/lib/unit-containment.js +158 -0
- package/dist/lib/unit-report.d.ts +19 -0
- package/dist/lib/unit-report.d.ts.map +1 -0
- package/dist/lib/unit-report.js +36 -0
- package/dist/lib/wall-distance.d.ts +2 -2
- package/dist/lib/wall-distance.js +1 -1
- package/dist/lib/zone-quantities.d.ts +1 -1
- package/dist/lib/zone-quantities.js +7 -7
- package/dist/material-library.d.ts +1 -1
- package/dist/material-library.js +1 -1
- package/dist/procedural-items/fixtures.d.ts +261 -0
- package/dist/procedural-items/fixtures.d.ts.map +1 -0
- package/dist/procedural-items/fixtures.js +349 -0
- package/dist/procedural-items/index.d.ts +10 -0
- package/dist/procedural-items/index.d.ts.map +1 -0
- package/dist/procedural-items/index.js +9 -0
- package/dist/procedural-items/integration.d.ts +92 -0
- package/dist/procedural-items/integration.d.ts.map +1 -0
- package/dist/procedural-items/integration.js +19 -0
- package/dist/procedural-items/library-colors.d.ts +56 -0
- package/dist/procedural-items/library-colors.d.ts.map +1 -0
- package/dist/procedural-items/library-colors.js +84 -0
- package/dist/procedural-items/materials.d.ts +5 -0
- package/dist/procedural-items/materials.d.ts.map +1 -0
- package/dist/procedural-items/materials.js +47 -0
- package/dist/procedural-items/node.d.ts +280 -0
- package/dist/procedural-items/node.d.ts.map +1 -0
- package/dist/procedural-items/node.js +71 -0
- package/dist/procedural-items/placement.d.ts +7 -0
- package/dist/procedural-items/placement.d.ts.map +1 -0
- package/dist/procedural-items/placement.js +48 -0
- package/dist/procedural-items/query.d.ts +50 -0
- package/dist/procedural-items/query.d.ts.map +1 -0
- package/dist/procedural-items/query.js +298 -0
- package/dist/procedural-items/recipe.d.ts +144 -0
- package/dist/procedural-items/recipe.d.ts.map +1 -0
- package/dist/procedural-items/recipe.js +372 -0
- package/dist/procedural-items/spatial.d.ts +19 -0
- package/dist/procedural-items/spatial.d.ts.map +1 -0
- package/dist/procedural-items/spatial.js +39 -0
- package/dist/registry/__bench__/relations-resolver.bench.js +2 -2
- package/dist/registry/handles.d.ts +36 -7
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +6 -7
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +4 -5
- package/dist/registry/registry.d.ts +13 -6
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +37 -4
- package/dist/registry/relations-resolver.d.ts +2 -2
- package/dist/registry/relations-resolver.js +1 -1
- package/dist/registry/scene-api.d.ts +18 -2
- package/dist/registry/scene-api.d.ts.map +1 -1
- package/dist/registry/scene-api.js +50 -2
- package/dist/registry/subtree.d.ts +1 -1
- package/dist/registry/subtree.js +2 -2
- package/dist/registry/types.d.ts +246 -21
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/use-registry-version.js +1 -1
- package/dist/registry/validate-relations.d.ts +4 -0
- package/dist/registry/validate-relations.d.ts.map +1 -0
- package/dist/registry/validate-relations.js +22 -0
- package/dist/schema/__bench__/node-parsers.bench.d.ts +24 -0
- package/dist/schema/__bench__/node-parsers.bench.d.ts.map +1 -0
- package/dist/schema/__bench__/node-parsers.bench.js +314 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts +28 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -0
- package/dist/schema/__fixtures__/node-fixtures.js +127 -0
- package/dist/schema/base.d.ts +1 -1
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +9 -2
- package/dist/schema/collections.d.ts +1 -1
- package/dist/schema/collections.js +1 -1
- package/dist/schema/compiled-node-parsers.d.ts +40 -0
- package/dist/schema/compiled-node-parsers.d.ts.map +1 -0
- package/dist/schema/compiled-node-parsers.js +95 -0
- package/dist/schema/index.d.ts +73 -66
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +65 -57
- package/dist/schema/material.d.ts +1 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +2 -1
- package/dist/schema/nodes/automatic-downspout.d.ts +17 -0
- package/dist/schema/nodes/automatic-downspout.d.ts.map +1 -0
- package/dist/schema/nodes/automatic-downspout.js +237 -0
- package/dist/schema/nodes/block.d.ts +107 -0
- package/dist/schema/nodes/block.d.ts.map +1 -0
- package/dist/schema/nodes/block.js +206 -0
- package/dist/schema/nodes/box-vent.d.ts +8 -2
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/box-vent.js +4 -2
- package/dist/schema/nodes/building.d.ts +2 -2
- package/dist/schema/nodes/building.d.ts.map +1 -1
- package/dist/schema/nodes/building.js +8 -5
- package/dist/schema/nodes/cabinet.d.ts +26 -4
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +29 -8
- package/dist/schema/nodes/ceiling.d.ts +2 -2
- package/dist/schema/nodes/ceiling.js +5 -5
- package/dist/schema/nodes/chimney.d.ts +2 -2
- package/dist/schema/nodes/chimney.js +2 -2
- package/dist/schema/nodes/column.d.ts +7 -6
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +3 -2
- package/dist/schema/nodes/construction-dimension.d.ts +1 -1
- package/dist/schema/nodes/construction-dimension.js +2 -2
- package/dist/schema/nodes/cupola.d.ts +9 -1
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/cupola.js +4 -2
- package/dist/schema/nodes/door.d.ts +1 -1
- package/dist/schema/nodes/door.js +2 -2
- package/dist/schema/nodes/dormer.d.ts +45 -2
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/dormer.js +133 -9
- package/dist/schema/nodes/downspout.d.ts +11 -1
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.js +26 -2
- package/dist/schema/nodes/duct-fitting.d.ts +18 -1
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/duct-fitting.js +26 -5
- package/dist/schema/nodes/duct-segment.d.ts +23 -1
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -1
- package/dist/schema/nodes/duct-segment.js +21 -1
- package/dist/schema/nodes/duct-terminal.d.ts +1 -1
- package/dist/schema/nodes/duct-terminal.js +1 -1
- package/dist/schema/nodes/elevator.d.ts +1 -1
- package/dist/schema/nodes/elevator.js +2 -2
- package/dist/schema/nodes/eyebrow-vent.d.ts +8 -2
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.js +4 -2
- package/dist/schema/nodes/fence.d.ts +1 -1
- package/dist/schema/nodes/fence.js +2 -2
- package/dist/schema/nodes/guide.d.ts +1 -1
- package/dist/schema/nodes/guide.js +2 -2
- package/dist/schema/nodes/gutter.d.ts +36 -2
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.js +310 -3
- package/dist/schema/nodes/hanger-overrides.d.ts +7 -0
- package/dist/schema/nodes/hanger-overrides.d.ts.map +1 -0
- package/dist/schema/nodes/hanger-overrides.js +6 -0
- package/dist/schema/nodes/hvac-equipment.d.ts +1 -1
- package/dist/schema/nodes/hvac-equipment.js +1 -1
- package/dist/schema/nodes/imported-mesh.d.ts +40 -0
- package/dist/schema/nodes/imported-mesh.d.ts.map +1 -0
- package/dist/schema/nodes/imported-mesh.js +27 -0
- package/dist/schema/nodes/item.d.ts +3 -2
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +8 -3
- package/dist/schema/nodes/lean-to-extension.d.ts +212 -0
- package/dist/schema/nodes/lean-to-extension.d.ts.map +1 -0
- package/dist/schema/nodes/lean-to-extension.js +114 -0
- package/dist/schema/nodes/level.d.ts +2 -2
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +1 -1
- package/dist/schema/nodes/lineset.d.ts +1 -1
- package/dist/schema/nodes/lineset.js +1 -1
- package/dist/schema/nodes/liquid-line.d.ts +1 -1
- package/dist/schema/nodes/liquid-line.js +1 -1
- package/dist/schema/nodes/measurement.d.ts +1 -1
- package/dist/schema/nodes/measurement.js +2 -2
- package/dist/schema/nodes/pipe-fitting.d.ts +10 -2
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-fitting.js +7 -3
- package/dist/schema/nodes/pipe-segment.d.ts +24 -2
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-segment.js +21 -1
- package/dist/schema/nodes/pipe-trap.d.ts +2 -2
- package/dist/schema/nodes/pipe-trap.js +1 -1
- package/dist/schema/nodes/ridge-vent.d.ts +2 -2
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +7 -4
- package/dist/schema/nodes/roof-segment-shape.d.ts +5 -1
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-shape.js +65 -2
- package/dist/schema/nodes/roof-segment-walls.d.ts +4 -2
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-walls.js +2 -2
- package/dist/schema/nodes/roof-segment.d.ts +42 -2
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +81 -4
- package/dist/schema/nodes/roof.d.ts +23 -2
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +17 -3
- package/dist/schema/nodes/scan.d.ts +19 -2
- package/dist/schema/nodes/scan.d.ts.map +1 -1
- package/dist/schema/nodes/scan.js +13 -3
- package/dist/schema/nodes/shelf.d.ts +3 -3
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/shelf.js +3 -4
- package/dist/schema/nodes/site.d.ts +1 -1
- package/dist/schema/nodes/site.js +2 -2
- package/dist/schema/nodes/skylight.d.ts +5 -5
- package/dist/schema/nodes/skylight.js +2 -2
- package/dist/schema/nodes/slab.d.ts +1 -1
- package/dist/schema/nodes/slab.js +3 -3
- package/dist/schema/nodes/solar-panel.d.ts +1 -1
- package/dist/schema/nodes/solar-panel.js +3 -3
- package/dist/schema/nodes/spawn.d.ts +1 -1
- package/dist/schema/nodes/spawn.js +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +1 -1
- package/dist/schema/nodes/stair-segment.js +2 -2
- package/dist/schema/nodes/stair.d.ts +2 -2
- package/dist/schema/nodes/stair.js +3 -3
- package/dist/schema/nodes/structural-grid.d.ts +1 -1
- package/dist/schema/nodes/structural-grid.js +1 -1
- package/dist/schema/nodes/turbine-vent.d.ts +8 -2
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/turbine-vent.js +4 -2
- package/dist/schema/nodes/unit.d.ts +33 -0
- package/dist/schema/nodes/unit.d.ts.map +1 -0
- package/dist/schema/nodes/unit.js +13 -0
- package/dist/schema/nodes/wall.d.ts +5 -5
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +13 -6
- package/dist/schema/nodes/window.d.ts +10 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +6 -2
- package/dist/schema/nodes/zone.d.ts +2 -2
- package/dist/schema/nodes/zone.js +2 -2
- package/dist/schema/scene-material.js +2 -2
- package/dist/schema/types.d.ts +815 -118
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +79 -46
- package/dist/services/alignment-anchors.d.ts +6 -11
- package/dist/services/alignment-anchors.d.ts.map +1 -1
- package/dist/services/alignment-anchors.js +7 -34
- package/dist/services/drag-session.d.ts +4 -4
- package/dist/services/drag-session.js +1 -1
- package/dist/services/hosting.d.ts +4 -10
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +6 -16
- package/dist/services/index.d.ts +16 -13
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +16 -13
- package/dist/services/level-height.d.ts +2 -2
- package/dist/services/level-height.js +3 -3
- package/dist/services/movement.d.ts +3 -3
- package/dist/services/movement.js +2 -2
- package/dist/services/port-connectivity.d.ts +1 -1
- package/dist/services/port-connectivity.js +1 -1
- package/dist/services/riser-diagram.d.ts +1 -1
- package/dist/services/shelf-board.d.ts +5 -0
- package/dist/services/shelf-board.d.ts.map +1 -0
- package/dist/services/shelf-board.js +15 -0
- package/dist/services/storey.d.ts +2 -2
- package/dist/services/storey.js +2 -2
- package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts +13 -0
- package/dist/services/surface-hosting-procedural-parity.fixtures.d.ts.map +1 -0
- package/dist/services/surface-hosting-procedural-parity.fixtures.js +4691 -0
- package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts +1060 -0
- package/dist/services/surface-hosting-shelf-parity.fixtures.d.ts.map +1 -0
- package/dist/services/surface-hosting-shelf-parity.fixtures.js +3127 -0
- package/dist/services/surface-hosting.d.ts +88 -0
- package/dist/services/surface-hosting.d.ts.map +1 -0
- package/dist/services/surface-hosting.js +268 -0
- package/dist/services/surface-region.d.ts +8 -0
- package/dist/services/surface-region.d.ts.map +1 -0
- package/dist/services/surface-region.js +44 -0
- package/dist/services/system-graph.d.ts +12 -1
- package/dist/services/system-graph.d.ts.map +1 -1
- package/dist/services/system-graph.js +36 -6
- package/dist/services/validate-dwv.d.ts +1 -1
- package/dist/services/validate-dwv.js +1 -1
- package/dist/store/actions/node-actions.d.ts +9 -2
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +475 -24
- package/dist/store/history-control.d.ts +3 -3
- package/dist/store/history-invalidation.d.ts +3 -0
- package/dist/store/history-invalidation.d.ts.map +1 -0
- package/dist/store/history-invalidation.js +72 -0
- package/dist/store/scene-hydration.d.ts +5 -0
- package/dist/store/scene-hydration.d.ts.map +1 -0
- package/dist/store/scene-hydration.js +57 -0
- package/dist/store/use-interactive.d.ts +2 -2
- package/dist/store/use-live-terrain.d.ts +1 -1
- package/dist/store/use-scene.d.ts +7 -4
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +361 -87
- package/dist/systems/elevator/elevator-dispatch.d.ts +2 -2
- package/dist/systems/elevator/elevator-dispatch.js +1 -1
- package/dist/systems/elevator/elevator-geometry.d.ts +1 -1
- package/dist/systems/elevator/elevator-opening-sync.d.ts +1 -1
- package/dist/systems/elevator/elevator-opening-sync.js +2 -2
- package/dist/systems/elevator/elevator-opening-system.js +3 -3
- package/dist/systems/elevator/elevator-runtime.d.ts +3 -3
- package/dist/systems/elevator/elevator-runtime.js +3 -3
- package/dist/systems/elevator/elevator-service.d.ts +1 -1
- package/dist/systems/elevator/elevator-service.js +1 -1
- package/dist/systems/fence/fence-centerline.d.ts +2 -2
- package/dist/systems/fence/fence-centerline.js +2 -2
- package/dist/systems/fence/fence-spline.d.ts +2 -2
- package/dist/systems/roof/roof-elevation-system.d.ts +3 -0
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -0
- package/dist/systems/roof/roof-elevation-system.js +94 -0
- package/dist/systems/roof/roof-elevation.d.ts +4 -0
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -0
- package/dist/systems/roof/roof-elevation.js +95 -0
- package/dist/systems/roof/roof-footprint.d.ts +17 -0
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -0
- package/dist/systems/roof/roof-footprint.js +83 -0
- package/dist/systems/slab/slab-placement.d.ts +1 -1
- package/dist/systems/slab/slab-support.d.ts +1 -1
- package/dist/systems/slab/slab-support.js +4 -4
- package/dist/systems/stair/stair-flight.d.ts +17 -0
- package/dist/systems/stair/stair-flight.d.ts.map +1 -0
- package/dist/systems/stair/stair-flight.js +27 -0
- package/dist/systems/stair/stair-footprint.d.ts +1 -1
- package/dist/systems/stair/stair-opening-preview.d.ts +1621 -1267
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-preview.js +2 -2
- package/dist/systems/stair/stair-opening-sync.d.ts +1 -1
- package/dist/systems/stair/stair-opening-sync.js +6 -6
- package/dist/systems/stair/stair-opening-system.d.ts +1 -0
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +100 -103
- package/dist/systems/stair/stair-rise.d.ts +1 -1
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +23 -24
- package/dist/systems/wall/wall-curve.d.ts +3 -2
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +73 -0
- package/dist/systems/wall/wall-footprint.d.ts +3 -2
- package/dist/systems/wall/wall-footprint.d.ts.map +1 -1
- package/dist/systems/wall/wall-footprint.js +3 -2
- package/dist/systems/wall/wall-mitering.d.ts +1 -1
- package/dist/systems/wall/wall-mitering.js +1 -1
- package/dist/systems/wall/wall-move.d.ts +1 -1
- package/dist/systems/wall/wall-top.d.ts +1 -1
- package/dist/systems/wall/wall-topology.d.ts +2 -2
- package/dist/systems/wall/wall-topology.js +4 -4
- package/dist/utils/clone-scene-graph.d.ts +3 -3
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +35 -3
- package/dist/utils/scene-migrations.d.ts +3 -3
- package/dist/utils/scene-migrations.js +3 -3
- package/dist/utils/vertical-scene-migration.js +5 -5
- package/dist/validation/validate-build-json.d.ts +7 -1
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +92 -4
- package/package.json +23 -5
- package/dist/systems/elevator/elevator-runtime-system.d.ts +0 -2
- package/dist/systems/elevator/elevator-runtime-system.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-runtime-system.js +0 -8
|
@@ -28,14 +28,36 @@ export declare const PipeSegmentNode: z.ZodObject<{
|
|
|
28
28
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
29
29
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
30
30
|
}, z.core.$strip>>;
|
|
31
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
31
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
32
32
|
id: z.ZodDefault<z.ZodTemplateLiteral<`pipe-segment_${string}`>>;
|
|
33
33
|
type: z.ZodDefault<z.ZodLiteral<"pipe-segment">>;
|
|
34
34
|
path: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
35
|
+
autoHangers: z.ZodOptional<z.ZodBoolean>;
|
|
36
|
+
hangerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
37
|
+
fraction: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
skipped: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
hostId: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, z.core.$strip>>>;
|
|
41
|
+
hangerStyle: z.ZodOptional<z.ZodEnum<{
|
|
42
|
+
double: "double";
|
|
43
|
+
single: "single";
|
|
44
|
+
}>>;
|
|
45
|
+
hangerSpacing: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
hangerMaxReach: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
wallAttachment: z.ZodOptional<z.ZodObject<{
|
|
48
|
+
wallId: z.ZodDefault<z.ZodTemplateLiteral<`wall_${string}`>>;
|
|
49
|
+
side: z.ZodEnum<{
|
|
50
|
+
front: "front";
|
|
51
|
+
back: "back";
|
|
52
|
+
}>;
|
|
53
|
+
startUV: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
54
|
+
endUV: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
55
|
+
offset: z.ZodNumber;
|
|
56
|
+
}, z.core.$strip>>;
|
|
35
57
|
diameter: z.ZodDefault<z.ZodNumber>;
|
|
36
58
|
pipeMaterial: z.ZodDefault<z.ZodEnum<{
|
|
37
|
-
pvc: "pvc";
|
|
38
59
|
abs: "abs";
|
|
60
|
+
pvc: "pvc";
|
|
39
61
|
"cast-iron": "cast-iron";
|
|
40
62
|
}>>;
|
|
41
63
|
system: z.ZodDefault<z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/pipe-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"pipe-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/pipe-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC3B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC7D,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { BaseNode, nodeType, objectId } from '../base';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base.js';
|
|
4
|
+
import { HangerOverrides } from './hanger-overrides.js';
|
|
4
5
|
/**
|
|
5
6
|
* DWV pipe segment — drain / waste / vent runs in US residential
|
|
6
7
|
* plumbing. Phase 2 of the distribution-system effort: the plumbing
|
|
@@ -20,6 +21,22 @@ export const PipeSegmentNode = BaseNode.extend({
|
|
|
20
21
|
type: nodeType('pipe-segment'),
|
|
21
22
|
// Polyline path in level-local meters. Minimum two points.
|
|
22
23
|
path: z.array(z.tuple([z.number(), z.number(), z.number()])).min(2),
|
|
24
|
+
autoHangers: z.boolean().optional(),
|
|
25
|
+
hangerOverrides: HangerOverrides.optional(),
|
|
26
|
+
hangerStyle: z.enum(['single', 'double']).optional(),
|
|
27
|
+
hangerSpacing: z.number().finite().positive().optional(),
|
|
28
|
+
hangerMaxReach: z.number().finite().positive().optional(),
|
|
29
|
+
// Logical wall host for runs drafted on a wall. The path remains
|
|
30
|
+
// level-local; UV coordinates let wall edits reproject the run later.
|
|
31
|
+
wallAttachment: z
|
|
32
|
+
.object({
|
|
33
|
+
wallId: objectId('wall'),
|
|
34
|
+
side: z.enum(['front', 'back']),
|
|
35
|
+
startUV: z.tuple([z.number(), z.number()]),
|
|
36
|
+
endUV: z.tuple([z.number(), z.number()]),
|
|
37
|
+
offset: z.number().finite().nonnegative(),
|
|
38
|
+
})
|
|
39
|
+
.optional(),
|
|
23
40
|
// Nominal pipe size in inches. Residential DWV: 1¼ (lav tailpiece) to
|
|
24
41
|
// 4 (building drain); 6 covers oversized mains.
|
|
25
42
|
diameter: z.number().min(1.25).max(8).default(2),
|
|
@@ -29,6 +46,9 @@ export const PipeSegmentNode = BaseNode.extend({
|
|
|
29
46
|
system: z.enum(['waste', 'vent']).default('waste'),
|
|
30
47
|
}).describe(dedent `
|
|
31
48
|
DWV pipe segment - drain / waste / vent run as a polyline of 3D points.
|
|
49
|
+
- autoHangers: automatically attach supports to nearby walls or ceilings (off when absent)
|
|
50
|
+
- hangerSpacing: distance between supports in meters (default 1.5)
|
|
51
|
+
- hangerMaxReach: maximum centerline-to-host distance in meters (default 2)
|
|
32
52
|
- path: list of [x, y, z] points in level-local meters (min 2; y may go below the floor)
|
|
33
53
|
- diameter: nominal size in inches (1.5 / 2 / 3 / 4 typical residential)
|
|
34
54
|
- pipeMaterial: pvc | abs | cast-iron
|
|
@@ -25,15 +25,15 @@ export declare const PipeTrapNode: z.ZodObject<{
|
|
|
25
25
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
26
26
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
27
27
|
}, z.core.$strip>>;
|
|
28
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
28
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
29
29
|
id: z.ZodDefault<z.ZodTemplateLiteral<`pipe-trap_${string}`>>;
|
|
30
30
|
type: z.ZodDefault<z.ZodLiteral<"pipe-trap">>;
|
|
31
31
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
32
32
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
33
33
|
diameter: z.ZodDefault<z.ZodNumber>;
|
|
34
34
|
pipeMaterial: z.ZodDefault<z.ZodEnum<{
|
|
35
|
-
pvc: "pvc";
|
|
36
35
|
abs: "abs";
|
|
36
|
+
pvc: "pvc";
|
|
37
37
|
"cast-iron": "cast-iron";
|
|
38
38
|
}>>;
|
|
39
39
|
armLengthM: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { BaseNode, nodeType, objectId } from '../base';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base.js';
|
|
4
4
|
/**
|
|
5
5
|
* DWV trap — the P-trap between a fixture and the waste system. Holds a
|
|
6
6
|
* water seal that blocks sewer gas; every drained fixture has exactly
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { type RoofSegmentNode } from './roof-segment';
|
|
2
|
+
import { type RoofSegmentNode } from './roof-segment.js';
|
|
3
3
|
export type RidgeVentLine = {
|
|
4
4
|
name: string;
|
|
5
5
|
start: [number, number];
|
|
@@ -20,7 +20,7 @@ export declare const RidgeVentNode: z.ZodObject<{
|
|
|
20
20
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
21
21
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
22
22
|
}, z.core.$strip>>;
|
|
23
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
23
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
24
24
|
id: z.ZodDefault<z.ZodTemplateLiteral<`rvent_${string}`>>;
|
|
25
25
|
type: z.ZodDefault<z.ZodLiteral<"ridge-vent">>;
|
|
26
26
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ridge-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/ridge-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,gBAAgB,CAAA;AAyBvB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BzB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"ridge-vent.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/ridge-vent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,gBAAgB,CAAA;AAyBvB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BzB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAEzD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAwJrF;AAQD,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,EAAE,CAiB3F;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,aAAa,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,GACpC,IAAI,IAAI,aAAa,CAyBvB;AASD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GACzC,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,aAAa,EAAE,OAAO,CAAA;KAAE,CAAA;CAC/D,CAEA;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC,EAC9D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAUT"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
import { MaterialSchema } from '../material';
|
|
5
|
-
import { getDutchRoofMetrics, getRoofSegmentVisibleTopBounds, ROOF_SHAPE_DEFAULTS, } from './roof-segment';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base.js';
|
|
4
|
+
import { MaterialSchema } from '../material.js';
|
|
5
|
+
import { getDutchRoofMetrics, getRoofSegmentVisibleTopBounds, ROOF_SHAPE_DEFAULTS, } from './roof-segment.js';
|
|
6
6
|
const MIN_DEFAULT_RIDGE_VENT_LENGTH_M = 0.4;
|
|
7
7
|
const DEFAULT_RIDGE_VENT_GENERATOR = 'default-ridge-vent';
|
|
8
8
|
const AUTO_RIDGE_VENT_METADATA_KEY = 'autoRidgeVent';
|
|
@@ -56,8 +56,11 @@ export function getRidgeVentLinesForSegment(segment) {
|
|
|
56
56
|
trim: UNTRIMMED_RIDGE_VENT_BOUNDS_TRIM,
|
|
57
57
|
});
|
|
58
58
|
const { width, depth, minX, maxX, minZ, maxZ } = bounds;
|
|
59
|
-
if (segment.roofType === 'flat' ||
|
|
59
|
+
if (segment.roofType === 'flat' ||
|
|
60
|
+
segment.roofType === 'shed' ||
|
|
61
|
+
segment.roofType === 'conical') {
|
|
60
62
|
return [];
|
|
63
|
+
}
|
|
61
64
|
const halfW = width / 2;
|
|
62
65
|
const halfD = depth / 2;
|
|
63
66
|
const ridgeZVisible = minZ <= 0 && maxZ >= 0;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { type RoofType } from './roof-segment';
|
|
1
|
+
import { type RoofType } from './roof-segment.js';
|
|
2
2
|
export type RoofShapeFaceVertex = {
|
|
3
3
|
x: number;
|
|
4
4
|
y: number;
|
|
5
5
|
z: number;
|
|
6
6
|
};
|
|
7
|
+
export type RoofShapeEaveSide = '+X' | '-X' | '+Z' | '-Z';
|
|
8
|
+
export declare function getRoofShapeEaveSides(type: RoofType): RoofShapeEaveSide[];
|
|
7
9
|
export type RoofShapeInsets = {
|
|
8
10
|
iF?: number;
|
|
9
11
|
iB?: number;
|
|
@@ -86,5 +88,7 @@ export declare function getRoofModuleFaces(input: {
|
|
|
86
88
|
shapeRatios: RoofShapeRatios;
|
|
87
89
|
excludeDutchEndSlopes?: boolean;
|
|
88
90
|
dutchTopRakeThickness?: number;
|
|
91
|
+
conicalStartAngle?: number;
|
|
92
|
+
conicalSweepAngle?: number;
|
|
89
93
|
}): RoofShapeFaceVertex[][];
|
|
90
94
|
//# sourceMappingURL=roof-segment-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-segment-shape.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEnE,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,eAAe,CAWlB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,eAAe,CAAA;CAC7B,GAAG,qBAAqB,GAAG,IAAI,CAyD/B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"roof-segment-shape.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
import { ROOF_SHAPE_DEFAULTS } from './roof-segment';
|
|
1
|
+
import { ROOF_SHAPE_DEFAULTS } from './roof-segment.js';
|
|
2
|
+
export function getRoofShapeEaveSides(type) {
|
|
3
|
+
switch (type) {
|
|
4
|
+
case 'conical':
|
|
5
|
+
return [];
|
|
6
|
+
case 'shed':
|
|
7
|
+
return ['+Z'];
|
|
8
|
+
case 'gable':
|
|
9
|
+
case 'gambrel':
|
|
10
|
+
return ['+Z', '-Z'];
|
|
11
|
+
default:
|
|
12
|
+
return ['+Z', '-Z', '+X', '-X'];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
2
15
|
export function getRoofShapeRatios(input) {
|
|
3
16
|
return {
|
|
4
17
|
gambrelLowerWidthRatio: input.gambrelLowerWidthRatio ?? ROOF_SHAPE_DEFAULTS.gambrelLowerWidthRatio,
|
|
@@ -61,7 +74,10 @@ export function getRoofShapeInsets(input) {
|
|
|
61
74
|
let iB = 0;
|
|
62
75
|
let iL = 0;
|
|
63
76
|
let iR = 0;
|
|
64
|
-
if (input.roofType === 'hip' ||
|
|
77
|
+
if (input.roofType === 'hip' ||
|
|
78
|
+
input.roofType === 'mansard' ||
|
|
79
|
+
input.roofType === 'dutch' ||
|
|
80
|
+
input.roofType === 'conical') {
|
|
65
81
|
iF = inset;
|
|
66
82
|
iB = inset;
|
|
67
83
|
iL = inset;
|
|
@@ -158,6 +174,53 @@ export function getDutchEndSlopeFaces(input) {
|
|
|
158
174
|
export function getRoofModuleFaces(input) {
|
|
159
175
|
const v = (x, y, z) => ({ x, y, z });
|
|
160
176
|
const { iF = 0, iB = 0, iL = 0, iR = 0 } = input.insets;
|
|
177
|
+
if (input.type === 'conical') {
|
|
178
|
+
const startAngle = Number.isFinite(input.conicalStartAngle) ? input.conicalStartAngle : 0;
|
|
179
|
+
const requestedSweep = Number.isFinite(input.conicalSweepAngle)
|
|
180
|
+
? input.conicalSweepAngle
|
|
181
|
+
: -Math.PI * 2;
|
|
182
|
+
const sweepAngle = Math.max(-Math.PI * 2, Math.min(Math.PI * 2, Math.abs(requestedSweep) < 1e-4 ? 1e-4 : requestedSweep));
|
|
183
|
+
const isFullCone = Math.abs(sweepAngle) >= Math.PI * 2 - 1e-4;
|
|
184
|
+
const radialSegments = isFullCone
|
|
185
|
+
? 48
|
|
186
|
+
: Math.max(1, Math.ceil((48 * Math.abs(sweepAngle)) / (Math.PI * 2)));
|
|
187
|
+
const eaveRadius = Math.max(0.005, input.w / 2);
|
|
188
|
+
const radialInset = (iF + iB + iL + iR) / 4;
|
|
189
|
+
const baseRadius = Math.max(0.005, eaveRadius - radialInset);
|
|
190
|
+
const eaveY = input.wh;
|
|
191
|
+
const peak = v(0, input.wh + Math.max(0.001, input.rh), 0);
|
|
192
|
+
const ringPointCount = isFullCone ? radialSegments : radialSegments + 1;
|
|
193
|
+
const bottomRing = Array.from({ length: ringPointCount }, (_, index) => {
|
|
194
|
+
const angle = startAngle + (index / radialSegments) * sweepAngle;
|
|
195
|
+
return v(Math.cos(angle) * baseRadius, input.baseY, Math.sin(angle) * baseRadius);
|
|
196
|
+
});
|
|
197
|
+
const eaveRing = Array.from({ length: ringPointCount }, (_, index) => {
|
|
198
|
+
const angle = startAngle + (index / radialSegments) * sweepAngle;
|
|
199
|
+
return v(Math.cos(angle) * eaveRadius, eaveY, Math.sin(angle) * eaveRadius);
|
|
200
|
+
});
|
|
201
|
+
const bottomCenter = v(0, input.baseY, 0);
|
|
202
|
+
const eaveCenter = v(0, eaveY, 0);
|
|
203
|
+
const faces = [
|
|
204
|
+
isFullCone ? [...bottomRing].reverse() : [bottomCenter, ...[...bottomRing].reverse()],
|
|
205
|
+
];
|
|
206
|
+
for (let index = 0; index < radialSegments; index += 1) {
|
|
207
|
+
const next = isFullCone ? (index + 1) % radialSegments : index + 1;
|
|
208
|
+
faces.push([bottomRing[index], bottomRing[next], eaveRing[next], eaveRing[index]]);
|
|
209
|
+
}
|
|
210
|
+
if (input.rh === 0) {
|
|
211
|
+
faces.push(isFullCone ? [...eaveRing].reverse() : [eaveCenter, ...[...eaveRing].reverse()]);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
for (let index = 0; index < radialSegments; index += 1) {
|
|
215
|
+
const next = isFullCone ? (index + 1) % radialSegments : index + 1;
|
|
216
|
+
faces.push([eaveRing[index], eaveRing[next], peak]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (!isFullCone) {
|
|
220
|
+
faces.push([bottomCenter, bottomRing[0], eaveRing[0], peak], [bottomCenter, peak, eaveRing.at(-1), bottomRing.at(-1)]);
|
|
221
|
+
}
|
|
222
|
+
return sweepAngle > 0 ? faces.map((face) => [...face].reverse()) : faces;
|
|
223
|
+
}
|
|
161
224
|
const b1 = v(-input.w / 2 + iL, input.baseY, input.d / 2 - iF);
|
|
162
225
|
const b2 = v(input.w / 2 - iR, input.baseY, input.d / 2 - iF);
|
|
163
226
|
const b3 = v(input.w / 2 - iR, input.baseY, -input.d / 2 + iB);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RoofSegmentNode } from './roof-segment';
|
|
1
|
+
import type { RoofSegmentNode } from './roof-segment.js';
|
|
2
2
|
/**
|
|
3
3
|
* Wall-face math for roof segments — the vertical surfaces a wall-mounted
|
|
4
4
|
* opening (door / window) can attach to. A segment's generated volume has
|
|
@@ -14,7 +14,9 @@ import type { RoofSegmentNode } from './roof-segment';
|
|
|
14
14
|
* (`getVol(wallThickness / 2, 0, 0, …)`): the volume is the segment
|
|
15
15
|
* footprint extended outward by `wallThickness / 2`, which drops the eave
|
|
16
16
|
* line by `(wallThickness / 2) · tanθ` and raises the ridge by the same
|
|
17
|
-
* amount so the apex stays at `wallHeight + activeRh
|
|
17
|
+
* amount so the apex stays at `wallHeight + activeRh` unless the eave
|
|
18
|
+
* hits the CSG minimum. The base stays at 0; the eave is raised to at
|
|
19
|
+
* least 0.05 above it to avoid sinking the shell into the supporting wall.
|
|
18
20
|
*/
|
|
19
21
|
export type RoofWallFaceId = 'front' | 'back' | 'right' | 'left';
|
|
20
22
|
export type RoofSegmentWallFace = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-segment-walls.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-walls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD
|
|
1
|
+
{"version":3,"file":"roof-segment-walls.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-walls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAEhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,cAAc,CAAA;IAClB,6CAA6C;IAC7C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;CAC5B,CAAA;AAED,KAAK,iBAAiB,GAAG,IAAI,CAC3B,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,eAAe,GAAG,OAAO,CAC1E,GACC,OAAO,CACL,IAAI,CACF,eAAe,EACb,wBAAwB,GACxB,yBAAyB,GACzB,wBAAwB,GACxB,yBAAyB,GACzB,oBAAoB,GACpB,qBAAqB,GACrB,uBAAuB,CAC1B,CACF,CAAA;AAqJH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,cAAc,GACjB,mBAAmB,CAUrB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,CAStF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9B;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAaxC;AA+CD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,cAAc,GACjB;IAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAYnD;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAO1B;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,CAWR;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,mBAAmB,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,MAAM,CASR;AAID;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,mBAAmB,EACzB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwCjC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { getDutchRoofMetrics, getSegmentSlopeFrame } from './roof-segment';
|
|
1
|
+
import { getDutchRoofMetrics, getSegmentSlopeFrame } from './roof-segment.js';
|
|
2
2
|
function getWallVolumeFrame(node) {
|
|
3
3
|
const { activeRh, tanTheta } = getSegmentSlopeFrame(node);
|
|
4
4
|
const wallThickness = node.wallThickness ?? 0.1;
|
|
5
5
|
const autoDrop = (wallThickness / 2) * tanTheta;
|
|
6
6
|
const wV = Math.max(0.01, node.width + wallThickness);
|
|
7
7
|
const dV = Math.max(0.01, node.depth + wallThickness);
|
|
8
|
-
const eaveY = Math.max(0.
|
|
8
|
+
const eaveY = Math.max(0.05, node.wallHeight - autoDrop);
|
|
9
9
|
let rh = activeRh;
|
|
10
10
|
if (activeRh > 0) {
|
|
11
11
|
rh = activeRh + autoDrop;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type { MaterialSchema as MaterialSchemaType } from '../material';
|
|
2
|
+
import type { MaterialSchema as MaterialSchemaType } from '../material.js';
|
|
3
3
|
export declare const RoofType: z.ZodEnum<{
|
|
4
4
|
flat: "flat";
|
|
5
5
|
hip: "hip";
|
|
@@ -8,6 +8,7 @@ export declare const RoofType: z.ZodEnum<{
|
|
|
8
8
|
gambrel: "gambrel";
|
|
9
9
|
dutch: "dutch";
|
|
10
10
|
mansard: "mansard";
|
|
11
|
+
conical: "conical";
|
|
11
12
|
}>;
|
|
12
13
|
export type RoofType = z.infer<typeof RoofType>;
|
|
13
14
|
export declare const MIN_ROOF_SEGMENT_TRIM_SPAN = 0.1;
|
|
@@ -70,7 +71,7 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
70
71
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
71
72
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
72
73
|
}, z.core.$strip>>;
|
|
73
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
74
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
74
75
|
id: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
75
76
|
type: z.ZodDefault<z.ZodLiteral<"roof-segment">>;
|
|
76
77
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -215,9 +216,13 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
215
216
|
gambrel: "gambrel";
|
|
216
217
|
dutch: "dutch";
|
|
217
218
|
mansard: "mansard";
|
|
219
|
+
conical: "conical";
|
|
218
220
|
}>>;
|
|
219
221
|
width: z.ZodDefault<z.ZodNumber>;
|
|
220
222
|
depth: z.ZodDefault<z.ZodNumber>;
|
|
223
|
+
conicalStartAngle: z.ZodOptional<z.ZodNumber>;
|
|
224
|
+
conicalSweepAngle: z.ZodOptional<z.ZodNumber>;
|
|
225
|
+
conicalFullCircle: z.ZodOptional<z.ZodBoolean>;
|
|
221
226
|
trim: z.ZodDefault<z.ZodObject<{
|
|
222
227
|
left: z.ZodDefault<z.ZodNumber>;
|
|
223
228
|
right: z.ZodDefault<z.ZodNumber>;
|
|
@@ -242,6 +247,33 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
242
247
|
deckThickness: z.ZodDefault<z.ZodNumber>;
|
|
243
248
|
overhang: z.ZodDefault<z.ZodNumber>;
|
|
244
249
|
shingleThickness: z.ZodDefault<z.ZodNumber>;
|
|
250
|
+
arc: z.ZodOptional<z.ZodObject<{
|
|
251
|
+
centerX: z.ZodNumber;
|
|
252
|
+
centerZ: z.ZodNumber;
|
|
253
|
+
radius: z.ZodNumber;
|
|
254
|
+
}, z.core.$strip>>;
|
|
255
|
+
shedSideInfillSpan: z.ZodOptional<z.ZodNumber>;
|
|
256
|
+
shedSideInfillMinX: z.ZodOptional<z.ZodNumber>;
|
|
257
|
+
shedSideInfillMaxX: z.ZodOptional<z.ZodNumber>;
|
|
258
|
+
shedFootprintPieces: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>>>;
|
|
259
|
+
shedOpenEndSides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
260
|
+
right: "right";
|
|
261
|
+
left: "left";
|
|
262
|
+
}>>>;
|
|
263
|
+
shedJointFrame: z.ZodOptional<z.ZodObject<{
|
|
264
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
265
|
+
rotation: z.ZodNumber;
|
|
266
|
+
}, z.core.$strip>>;
|
|
267
|
+
shedJointOwnerId: z.ZodOptional<z.ZodString>;
|
|
268
|
+
shedJointNeighborIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
269
|
+
shedJointScopeId: z.ZodOptional<z.ZodString>;
|
|
270
|
+
managedByParent: z.ZodDefault<z.ZodBoolean>;
|
|
271
|
+
wallShell: z.ZodDefault<z.ZodEnum<{
|
|
272
|
+
omit: "omit";
|
|
273
|
+
auto: "auto";
|
|
274
|
+
include: "include";
|
|
275
|
+
}>>;
|
|
276
|
+
shedInsetEndPanels: z.ZodDefault<z.ZodBoolean>;
|
|
245
277
|
gambrelLowerWidthRatio: z.ZodDefault<z.ZodNumber>;
|
|
246
278
|
gambrelLowerHeightRatio: z.ZodDefault<z.ZodNumber>;
|
|
247
279
|
mansardSteepWidthRatio: z.ZodDefault<z.ZodNumber>;
|
|
@@ -254,6 +286,11 @@ export declare const RoofSegmentNode: z.ZodObject<{
|
|
|
254
286
|
children: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
255
287
|
}, z.core.$strip>;
|
|
256
288
|
export type RoofSegmentNode = z.infer<typeof RoofSegmentNode>;
|
|
289
|
+
export declare function getConicalRoofCoverage(node: Pick<RoofSegmentNode, 'conicalFullCircle' | 'conicalStartAngle' | 'conicalSweepAngle'>): {
|
|
290
|
+
fullCircle: boolean;
|
|
291
|
+
startAngle: number;
|
|
292
|
+
sweepAngle: number;
|
|
293
|
+
};
|
|
257
294
|
export declare function normalizeRoofSegmentTrim(node: Pick<RoofSegmentNode, 'width' | 'depth'> & {
|
|
258
295
|
trim?: Partial<RoofSegmentTrim>;
|
|
259
296
|
}): RoofSegmentTrim;
|
|
@@ -322,6 +359,9 @@ export type RoofSegmentVisibleTopBounds = {
|
|
|
322
359
|
export declare function getRoofSegmentVisibleTopBounds(segment: RoofSegmentNode): RoofSegmentVisibleTopBounds;
|
|
323
360
|
/** Segment-local surface height used by roof accessory placement and hit disambiguation. */
|
|
324
361
|
export declare function getRoofSegmentSurfaceY(node: Pick<RoofSegmentNode, 'roofType' | 'width' | 'depth' | 'wallHeight'> & Parameters<typeof getSegmentSlopeFrame>[0], localX: number, localZ: number): number;
|
|
362
|
+
export declare function isBandedShedSegment(node: Pick<RoofSegmentNode, 'roofType' | 'arc'>): node is Pick<RoofSegmentNode, 'roofType' | 'arc'> & {
|
|
363
|
+
arc: NonNullable<RoofSegmentNode['arc']>;
|
|
364
|
+
};
|
|
325
365
|
/**
|
|
326
366
|
* Inverse of `getActiveRoofHeight` — recover the pitch a legacy
|
|
327
367
|
* `roofHeight` value would correspond to. Used by the scene migration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGvE,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"roof-segment.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
-
import { MaterialSchema } from '../material';
|
|
5
|
-
export const RoofType = z.enum([
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base.js';
|
|
4
|
+
import { MaterialSchema } from '../material.js';
|
|
5
|
+
export const RoofType = z.enum([
|
|
6
|
+
'hip',
|
|
7
|
+
'gable',
|
|
8
|
+
'shed',
|
|
9
|
+
'gambrel',
|
|
10
|
+
'dutch',
|
|
11
|
+
'mansard',
|
|
12
|
+
'flat',
|
|
13
|
+
'conical',
|
|
14
|
+
]);
|
|
6
15
|
export const MIN_ROOF_SEGMENT_TRIM_SPAN = 0.1;
|
|
7
16
|
const DEFAULT_ROOF_SEGMENT_WIDTH = 8;
|
|
8
17
|
const DEFAULT_ROOF_SEGMENT_DEPTH = 6;
|
|
@@ -96,6 +105,18 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
96
105
|
// Footprint dimensions
|
|
97
106
|
width: z.number().default(8),
|
|
98
107
|
depth: z.number().default(6),
|
|
108
|
+
// Angular extent of a conical roof. A full cone uses 2π. A signed
|
|
109
|
+
// sweep preserves the direction of the curved wall used to create a
|
|
110
|
+
// conical sector; other roof types ignore both fields.
|
|
111
|
+
conicalStartAngle: z.number().optional(),
|
|
112
|
+
conicalSweepAngle: z
|
|
113
|
+
.number()
|
|
114
|
+
.min(-Math.PI * 2)
|
|
115
|
+
.max(Math.PI * 2)
|
|
116
|
+
.optional(),
|
|
117
|
+
// Overrides the stored sector angles without discarding them, allowing
|
|
118
|
+
// the panel to switch back to the original clipped wall sweep.
|
|
119
|
+
conicalFullCircle: z.boolean().optional(),
|
|
99
120
|
// Segment-local distances trimmed from each footprint side. The trim
|
|
100
121
|
// boundary is projected vertically through the roof volume, so the
|
|
101
122
|
// resulting edge follows the actual sloped roof surfaces.
|
|
@@ -112,6 +133,34 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
112
133
|
deckThickness: z.number().default(0.1),
|
|
113
134
|
overhang: z.number().default(0.3),
|
|
114
135
|
shingleThickness: z.number().default(0.05),
|
|
136
|
+
arc: z
|
|
137
|
+
.object({
|
|
138
|
+
centerX: z.number(),
|
|
139
|
+
centerZ: z.number(),
|
|
140
|
+
radius: z.number(),
|
|
141
|
+
})
|
|
142
|
+
.optional()
|
|
143
|
+
.describe('Concentric-arc descriptor for a curved shed deck, in segment-local coordinates (center + true radius). Absent for a straight deck.'),
|
|
144
|
+
shedSideInfillSpan: z.number().positive().optional(),
|
|
145
|
+
shedSideInfillMinX: z.number().optional(),
|
|
146
|
+
shedSideInfillMaxX: z.number().optional(),
|
|
147
|
+
shedFootprintPieces: z.array(z.array(z.tuple([z.number(), z.number()])).min(3)).optional(),
|
|
148
|
+
shedOpenEndSides: z.array(z.enum(['left', 'right'])).optional(),
|
|
149
|
+
// Shared scene-scope data for comparing shed seams that live under separate
|
|
150
|
+
// roof parents. Kind-owned assembly code supplies it; the renderer remains
|
|
151
|
+
// independent of the kind that produced the segment.
|
|
152
|
+
shedJointFrame: z
|
|
153
|
+
.object({
|
|
154
|
+
position: z.tuple([z.number(), z.number(), z.number()]),
|
|
155
|
+
rotation: z.number(),
|
|
156
|
+
})
|
|
157
|
+
.optional(),
|
|
158
|
+
shedJointOwnerId: z.string().optional(),
|
|
159
|
+
shedJointNeighborIds: z.array(z.string()).optional(),
|
|
160
|
+
shedJointScopeId: z.string().optional(),
|
|
161
|
+
managedByParent: z.boolean().default(false),
|
|
162
|
+
wallShell: z.enum(['auto', 'include', 'omit']).default('auto'),
|
|
163
|
+
shedInsetEndPanels: z.boolean().default(false),
|
|
115
164
|
// Shape-specific ratios. Only the pair matching `roofType` is read; the
|
|
116
165
|
// rest are inert. Defined on every segment so the panel can flip
|
|
117
166
|
// roofType without losing the previous shape's tuning.
|
|
@@ -169,8 +218,10 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
169
218
|
Roof segment node - an individual roof module within a roof group.
|
|
170
219
|
Each segment generates a complete architectural volume (walls + roof).
|
|
171
220
|
Multiple segments can be combined to form complex roof shapes.
|
|
172
|
-
- roofType: hip, gable, shed, gambrel, dutch, mansard, flat
|
|
221
|
+
- roofType: hip, gable, shed, gambrel, dutch, mansard, flat, conical
|
|
173
222
|
- width/depth: footprint dimensions
|
|
223
|
+
- conicalStartAngle / conicalSweepAngle: angular extent of a conical sector (radians)
|
|
224
|
+
- conicalFullCircle: temporarily render the complete cone while preserving the sector angles
|
|
174
225
|
- trim: segment-local side cut distances
|
|
175
226
|
- wallHeight: height of walls below the roof
|
|
176
227
|
- pitch: roof slope in degrees (angle of the primary slope face)
|
|
@@ -184,6 +235,20 @@ export const RoofSegmentNode = BaseNode.extend({
|
|
|
184
235
|
- dutchGabletRake: gablet barge-board overhang past the gablet end-wall (m, 0 = none)
|
|
185
236
|
- dutchTopRakeThickness: thickness of the top gable rake slab
|
|
186
237
|
`);
|
|
238
|
+
export function getConicalRoofCoverage(node) {
|
|
239
|
+
const storedSweep = node.conicalSweepAngle;
|
|
240
|
+
const inferredFullCircle = storedSweep === undefined || Math.abs(storedSweep) >= Math.PI * 2 - 1e-4;
|
|
241
|
+
const fullCircle = node.conicalFullCircle ?? inferredFullCircle;
|
|
242
|
+
if (fullCircle) {
|
|
243
|
+
return { fullCircle: true, startAngle: 0, sweepAngle: -Math.PI * 2 };
|
|
244
|
+
}
|
|
245
|
+
const hasClippedSweep = storedSweep !== undefined && Math.abs(storedSweep) < Math.PI * 2 - 1e-4;
|
|
246
|
+
return {
|
|
247
|
+
fullCircle: false,
|
|
248
|
+
startAngle: node.conicalStartAngle ?? 0,
|
|
249
|
+
sweepAngle: hasClippedSweep ? storedSweep : -Math.PI,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
187
252
|
function finiteNonNegative(value) {
|
|
188
253
|
return typeof value === 'number' && Number.isFinite(value) ? Math.max(0, value) : 0;
|
|
189
254
|
}
|
|
@@ -323,6 +388,8 @@ export function getDutchRoofMetrics(input) {
|
|
|
323
388
|
function getPrimarySlopeRun(input) {
|
|
324
389
|
const min = Math.min(input.width, input.depth);
|
|
325
390
|
switch (input.roofType) {
|
|
391
|
+
case 'conical':
|
|
392
|
+
return input.width / 2;
|
|
326
393
|
case 'shed':
|
|
327
394
|
return input.depth;
|
|
328
395
|
case 'gable':
|
|
@@ -395,6 +462,7 @@ export function getRoofSegmentVisibleTopBounds(segment) {
|
|
|
395
462
|
let frontExt = deckExt;
|
|
396
463
|
let backExt = deckExt;
|
|
397
464
|
if (segment.roofType === 'hip' ||
|
|
465
|
+
segment.roofType === 'conical' ||
|
|
398
466
|
segment.roofType === 'mansard' ||
|
|
399
467
|
segment.roofType === 'dutch') {
|
|
400
468
|
xExt += shingleOverhang;
|
|
@@ -495,9 +563,18 @@ export function getRoofSegmentSurfaceY(node, localX, localZ) {
|
|
|
495
563
|
const fz = node.depth > 0 ? Math.abs(localZ) / (node.depth / 2) : 0;
|
|
496
564
|
return peakY - Math.max(fx, fz) * activeRh;
|
|
497
565
|
}
|
|
566
|
+
if (node.roofType === 'conical') {
|
|
567
|
+
const radius = Math.max(0.0001, node.width / 2);
|
|
568
|
+
const radialProgress = Math.min(1, Math.hypot(localX, localZ) / radius);
|
|
569
|
+
return peakY - radialProgress * activeRh;
|
|
570
|
+
}
|
|
498
571
|
const t = node.depth > 0 ? Math.abs(localZ) / (node.depth / 2) : 0;
|
|
499
572
|
return peakY - t * activeRh;
|
|
500
573
|
}
|
|
574
|
+
// A shed segment whose deck follows a concentric arc.
|
|
575
|
+
export function isBandedShedSegment(node) {
|
|
576
|
+
return node.roofType === 'shed' && node.arc != null && Number.isFinite(node.arc.radius);
|
|
577
|
+
}
|
|
501
578
|
/**
|
|
502
579
|
* Inverse of `getActiveRoofHeight` — recover the pitch a legacy
|
|
503
580
|
* `roofHeight` value would correspond to. Used by the scene migration.
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type { MaterialSchema as MaterialSchemaType } from '../material';
|
|
2
|
+
import type { MaterialSchema as MaterialSchemaType } from '../material.js';
|
|
3
3
|
export type RoofSurfaceMaterialRole = 'top' | 'edge' | 'wall';
|
|
4
4
|
export type RoofSurfaceMaterialSpec = {
|
|
5
5
|
material?: MaterialSchemaType;
|
|
6
6
|
materialPreset?: string;
|
|
7
7
|
};
|
|
8
|
+
export declare const RoofSupport: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
9
|
+
kind: z.ZodLiteral<"level">;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
kind: z.ZodLiteral<"walls">;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"roof">;
|
|
14
|
+
roofSegmentId: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
15
|
+
localPosition: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
16
|
+
curbHeight: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strip>], "kind">>;
|
|
18
|
+
export type RoofSupport = z.infer<typeof RoofSupport>;
|
|
8
19
|
export declare const RoofNode: z.ZodObject<{
|
|
9
20
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
10
21
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -20,7 +31,7 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
20
31
|
fov: z.ZodOptional<z.ZodNumber>;
|
|
21
32
|
zoom: z.ZodOptional<z.ZodNumber>;
|
|
22
33
|
}, z.core.$strip>>;
|
|
23
|
-
metadata: z.ZodDefault<z.ZodOptional<z.
|
|
34
|
+
metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
24
35
|
id: z.ZodDefault<z.ZodTemplateLiteral<`roof_${string}`>>;
|
|
25
36
|
type: z.ZodDefault<z.ZodLiteral<"roof">>;
|
|
26
37
|
material: z.ZodOptional<z.ZodObject<{
|
|
@@ -157,6 +168,16 @@ export declare const RoofNode: z.ZodObject<{
|
|
|
157
168
|
wallMaterialPreset: z.ZodOptional<z.ZodString>;
|
|
158
169
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
159
170
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
171
|
+
support: z.ZodDefault<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
172
|
+
kind: z.ZodLiteral<"level">;
|
|
173
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
174
|
+
kind: z.ZodLiteral<"walls">;
|
|
175
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
176
|
+
kind: z.ZodLiteral<"roof">;
|
|
177
|
+
roofSegmentId: z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>;
|
|
178
|
+
localPosition: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
|
|
179
|
+
curbHeight: z.ZodDefault<z.ZodNumber>;
|
|
180
|
+
}, z.core.$strip>], "kind">>;
|
|
160
181
|
children: z.ZodDefault<z.ZodArray<z.ZodDefault<z.ZodTemplateLiteral<`rseg_${string}`>>>>;
|
|
161
182
|
}, z.core.$strip>;
|
|
162
183
|
export type RoofNode = z.infer<typeof RoofNode>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"roof.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAIvE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;AAC7D,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;;;4BAWK,CAAA;AAE7B,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAErD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2BpB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAS/C,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,uBAAuB,GAC5B,uBAAuB,CAoCzB"}
|