@pascal-app/core 0.9.1 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -10
- package/dist/events/bus.d.ts +49 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/scene-registry/item-clip-registry.d.ts +18 -0
- package/dist/hooks/scene-registry/item-clip-registry.d.ts.map +1 -0
- package/dist/hooks/scene-registry/item-clip-registry.js +10 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts +8 -1
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/scene-registry/scene-registry.js +27 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts +17 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +61 -8
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +135 -28
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +427 -271
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +46 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +208 -9
- package/dist/hooks/spatial-grid/support-host-id.d.ts +3 -0
- package/dist/hooks/spatial-grid/support-host-id.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-id.js +2 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts +51 -0
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/support-host-patch.js +164 -0
- package/dist/index.d.ts +33 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -10
- package/dist/lib/level-name.d.ts +4 -0
- package/dist/lib/level-name.d.ts.map +1 -0
- package/dist/lib/level-name.js +10 -0
- package/dist/lib/measurement-geometry.d.ts +23 -0
- package/dist/lib/measurement-geometry.d.ts.map +1 -0
- package/dist/lib/measurement-geometry.js +249 -0
- package/dist/lib/polygon-geometry.d.ts +0 -1
- package/dist/lib/polygon-geometry.d.ts.map +1 -1
- package/dist/lib/polygon-geometry.js +0 -18
- package/dist/lib/selection-proxy.d.ts +4 -0
- package/dist/lib/selection-proxy.d.ts.map +1 -0
- package/dist/lib/selection-proxy.js +12 -0
- package/dist/lib/slab-polygon.d.ts +31 -2
- package/dist/lib/slab-polygon.d.ts.map +1 -1
- package/dist/lib/slab-polygon.js +557 -31
- package/dist/lib/slots.d.ts +14 -0
- package/dist/lib/slots.d.ts.map +1 -0
- package/dist/lib/slots.js +26 -0
- package/dist/lib/space-detection.d.ts +40 -6
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +574 -192
- package/dist/lib/terrain-brush.d.ts +163 -0
- package/dist/lib/terrain-brush.d.ts.map +1 -0
- package/dist/lib/terrain-brush.js +359 -0
- package/dist/lib/terrain-codec.d.ts +51 -0
- package/dist/lib/terrain-codec.d.ts.map +1 -0
- package/dist/lib/terrain-codec.js +167 -0
- package/dist/lib/terrain-field.d.ts +150 -0
- package/dist/lib/terrain-field.d.ts.map +1 -0
- package/dist/lib/terrain-field.js +248 -0
- package/dist/lib/terrain-raycast.d.ts +44 -0
- package/dist/lib/terrain-raycast.d.ts.map +1 -0
- package/dist/lib/terrain-raycast.js +188 -0
- package/dist/lib/terrain-source.d.ts +60 -0
- package/dist/lib/terrain-source.d.ts.map +1 -0
- package/dist/lib/terrain-source.js +90 -0
- package/dist/lib/terrain-support.d.ts +60 -0
- package/dist/lib/terrain-support.d.ts.map +1 -0
- package/dist/lib/terrain-support.js +150 -0
- package/dist/lib/wall-distance.d.ts +60 -0
- package/dist/lib/wall-distance.d.ts.map +1 -0
- package/dist/lib/wall-distance.js +85 -0
- package/dist/lib/zone-quantities.d.ts +21 -0
- package/dist/lib/zone-quantities.d.ts.map +1 -0
- package/dist/lib/zone-quantities.js +428 -0
- package/dist/material-library.d.ts +28 -1
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +2233 -441
- package/dist/registry/handles.d.ts +91 -3
- package/dist/registry/handles.d.ts.map +1 -1
- package/dist/registry/index.d.ts +3 -3
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/registry.d.ts +46 -3
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +82 -1
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +8 -1
- package/dist/registry/types.d.ts +781 -39
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/index.d.ts +27 -8
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +23 -6
- package/dist/schema/material.d.ts +3 -2
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +7 -5
- package/dist/schema/nodes/box-vent.d.ts +2 -2
- package/dist/schema/nodes/cabinet.d.ts +536 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -0
- package/dist/schema/nodes/cabinet.js +139 -0
- package/dist/schema/nodes/ceiling.d.ts +4 -3
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +11 -1
- package/dist/schema/nodes/chimney.d.ts +4 -4
- package/dist/schema/nodes/column.d.ts +4 -2
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +5 -0
- package/dist/schema/nodes/construction-dimension.d.ts +195 -0
- package/dist/schema/nodes/construction-dimension.d.ts.map +1 -0
- package/dist/schema/nodes/construction-dimension.js +151 -0
- package/dist/schema/nodes/cupola.d.ts +2 -2
- package/dist/schema/nodes/door.d.ts +42 -5
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +32 -0
- package/dist/schema/nodes/dormer.d.ts +8 -8
- package/dist/schema/nodes/dormer.js +1 -1
- package/dist/schema/nodes/downspout.d.ts +2 -2
- package/dist/schema/nodes/duct-fitting.d.ts +91 -0
- package/dist/schema/nodes/duct-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/duct-fitting.js +92 -0
- package/dist/schema/nodes/duct-segment.d.ts +61 -0
- package/dist/schema/nodes/duct-segment.d.ts.map +1 -0
- package/dist/schema/nodes/duct-segment.js +73 -0
- package/dist/schema/nodes/duct-terminal.d.ts +58 -0
- package/dist/schema/nodes/duct-terminal.d.ts.map +1 -0
- package/dist/schema/nodes/duct-terminal.js +53 -0
- package/dist/schema/nodes/elevator.d.ts +3 -2
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.js +3 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts +2 -2
- package/dist/schema/nodes/fence.d.ts +20 -2
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +33 -2
- package/dist/schema/nodes/gutter.d.ts +2 -2
- package/dist/schema/nodes/hvac-equipment.d.ts +64 -0
- package/dist/schema/nodes/hvac-equipment.d.ts.map +1 -0
- package/dist/schema/nodes/hvac-equipment.js +57 -0
- package/dist/schema/nodes/item.d.ts +9 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +24 -0
- package/dist/schema/nodes/level.d.ts +2 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/level.js +12 -31
- package/dist/schema/nodes/lineset.d.ts +42 -0
- package/dist/schema/nodes/lineset.d.ts.map +1 -0
- package/dist/schema/nodes/lineset.js +38 -0
- package/dist/schema/nodes/liquid-line.d.ts +34 -0
- package/dist/schema/nodes/liquid-line.d.ts.map +1 -0
- package/dist/schema/nodes/liquid-line.js +24 -0
- package/dist/schema/nodes/measurement.d.ts +306 -0
- package/dist/schema/nodes/measurement.d.ts.map +1 -0
- package/dist/schema/nodes/measurement.js +87 -0
- package/dist/schema/nodes/pipe-fitting.d.ts +56 -0
- package/dist/schema/nodes/pipe-fitting.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-fitting.js +45 -0
- package/dist/schema/nodes/pipe-segment.d.ts +48 -0
- package/dist/schema/nodes/pipe-segment.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-segment.js +36 -0
- package/dist/schema/nodes/pipe-trap.d.ts +43 -0
- package/dist/schema/nodes/pipe-trap.d.ts.map +1 -0
- package/dist/schema/nodes/pipe-trap.js +36 -0
- package/dist/schema/nodes/ridge-vent.d.ts +18 -3
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +221 -3
- package/dist/schema/nodes/roof-segment-shape.d.ts +90 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-shape.js +318 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +101 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-walls.js +330 -0
- package/dist/schema/nodes/roof-segment.d.ts +84 -8
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +290 -5
- package/dist/schema/nodes/roof.d.ts +8 -8
- package/dist/schema/nodes/shelf.d.ts +4 -2
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/shelf.js +8 -0
- package/dist/schema/nodes/site.d.ts +9 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +8 -6
- package/dist/schema/nodes/skylight.d.ts +10 -10
- package/dist/schema/nodes/slab.d.ts +8 -2
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +18 -2
- package/dist/schema/nodes/solar-panel.d.ts +4 -4
- package/dist/schema/nodes/spawn.d.ts +1 -0
- package/dist/schema/nodes/spawn.d.ts.map +1 -1
- package/dist/schema/nodes/spawn.js +2 -0
- package/dist/schema/nodes/stair-segment.d.ts +4 -4
- package/dist/schema/nodes/stair.d.ts +16 -13
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +11 -1
- package/dist/schema/nodes/structural-grid.d.ts +27 -0
- package/dist/schema/nodes/structural-grid.d.ts.map +1 -0
- package/dist/schema/nodes/structural-grid.js +17 -0
- package/dist/schema/nodes/turbine-vent.d.ts +2 -2
- package/dist/schema/nodes/wall.d.ts +248 -6
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +266 -0
- package/dist/schema/nodes/window.d.ts +40 -3
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +30 -0
- package/dist/schema/nodes/zone.d.ts +22 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +21 -0
- package/dist/schema/scene-material.d.ts +41 -0
- package/dist/schema/scene-material.d.ts.map +1 -0
- package/dist/schema/scene-material.js +9 -0
- package/dist/schema/terrain.d.ts +28 -0
- package/dist/schema/terrain.d.ts.map +1 -0
- package/dist/schema/terrain.js +30 -0
- package/dist/schema/types.d.ts +1300 -97
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +27 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts +80 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -0
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.js +89 -0
- package/dist/services/alignment-anchors.d.ts.map +1 -1
- package/dist/services/alignment-anchors.js +30 -1
- package/dist/services/alignment.d.ts +5 -0
- package/dist/services/alignment.d.ts.map +1 -1
- package/dist/services/alignment.js +2 -0
- package/dist/services/hosting.d.ts +8 -0
- package/dist/services/hosting.d.ts.map +1 -1
- package/dist/services/hosting.js +13 -4
- package/dist/services/index.d.ts +9 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +9 -2
- package/dist/services/level-height.d.ts +27 -0
- package/dist/services/level-height.d.ts.map +1 -0
- package/dist/services/level-height.js +94 -0
- package/dist/services/opening-guides.d.ts +141 -0
- package/dist/services/opening-guides.d.ts.map +1 -0
- package/dist/services/opening-guides.js +267 -0
- package/dist/services/port-connectivity.d.ts +115 -0
- package/dist/services/port-connectivity.d.ts.map +1 -0
- package/dist/services/port-connectivity.js +300 -0
- package/dist/services/riser-diagram.d.ts +40 -0
- package/dist/services/riser-diagram.d.ts.map +1 -0
- package/dist/services/riser-diagram.js +110 -0
- package/dist/services/snap.d.ts +9 -1
- package/dist/services/snap.d.ts.map +1 -1
- package/dist/services/snap.js +21 -1
- package/dist/services/storey.d.ts +103 -0
- package/dist/services/storey.d.ts.map +1 -0
- package/dist/services/storey.js +296 -0
- package/dist/services/system-graph.d.ts +30 -0
- package/dist/services/system-graph.d.ts.map +1 -0
- package/dist/services/system-graph.js +164 -0
- package/dist/services/validate-dwv.d.ts +32 -0
- package/dist/services/validate-dwv.d.ts.map +1 -0
- package/dist/services/validate-dwv.js +118 -0
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +141 -4
- package/dist/store/history-control.d.ts +31 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +130 -0
- package/dist/store/use-live-terrain.d.ts +65 -0
- package/dist/store/use-live-terrain.d.ts.map +1 -0
- package/dist/store/use-live-terrain.js +31 -0
- package/dist/store/use-live-transforms.d.ts +8 -0
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts +47 -3
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +992 -55
- package/dist/systems/elevator/elevator-opening-system.d.ts +1 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +27 -21
- package/dist/systems/elevator/elevator-service.d.ts +0 -2
- package/dist/systems/elevator/elevator-service.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-service.js +2 -24
- package/dist/systems/fence/fence-centerline.d.ts +12 -0
- package/dist/systems/fence/fence-centerline.d.ts.map +1 -0
- package/dist/systems/fence/fence-centerline.js +37 -0
- package/dist/systems/fence/fence-spline.d.ts +39 -0
- package/dist/systems/fence/fence-spline.d.ts.map +1 -0
- package/dist/systems/fence/fence-spline.js +196 -0
- package/dist/systems/slab/slab-placement.d.ts +11 -0
- package/dist/systems/slab/slab-placement.d.ts.map +1 -0
- package/dist/systems/slab/slab-placement.js +14 -0
- package/dist/systems/slab/slab-support.d.ts +137 -0
- package/dist/systems/slab/slab-support.d.ts.map +1 -0
- package/dist/systems/slab/slab-support.js +557 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +21 -11
- package/dist/systems/stair/stair-opening-preview.d.ts +1300 -505
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-sync.js +19 -33
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +32 -4
- package/dist/systems/stair/stair-rise.d.ts +22 -0
- package/dist/systems/stair/stair-rise.d.ts.map +1 -0
- package/dist/systems/stair/stair-rise.js +79 -0
- package/dist/systems/wall/wall-curve.d.ts +10 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +1 -1
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +44 -8
- package/dist/systems/wall/wall-top.d.ts +40 -0
- package/dist/systems/wall/wall-top.d.ts.map +1 -0
- package/dist/systems/wall/wall-top.js +46 -0
- package/dist/utils/clone-scene-graph.d.ts +1 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +56 -5
- package/dist/utils/heal-scene-graph.d.ts +18 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -0
- package/dist/utils/heal-scene-graph.js +106 -0
- package/dist/validation/validate-build-json.d.ts +3 -0
- package/dist/validation/validate-build-json.d.ts.map +1 -1
- package/dist/validation/validate-build-json.js +90 -5
- package/package.json +4 -4
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts +0 -2
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.d.ts.map +0 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.test.js +0 -273
- package/dist/lib/space-detection-pause.test.d.ts +0 -2
- package/dist/lib/space-detection-pause.test.d.ts.map +0 -1
- package/dist/lib/space-detection-pause.test.js +0 -42
- package/dist/lib/space-detection.test.d.ts +0 -2
- package/dist/lib/space-detection.test.d.ts.map +0 -1
- package/dist/lib/space-detection.test.js +0 -77
- package/dist/registry/registry.test.d.ts +0 -2
- package/dist/registry/registry.test.d.ts.map +0 -1
- package/dist/registry/registry.test.js +0 -183
- package/dist/registry/relations-resolver.test.d.ts +0 -2
- package/dist/registry/relations-resolver.test.d.ts.map +0 -1
- package/dist/registry/relations-resolver.test.js +0 -183
- package/dist/registry/scene-api.test.d.ts +0 -2
- package/dist/registry/scene-api.test.d.ts.map +0 -1
- package/dist/registry/scene-api.test.js +0 -183
- package/dist/registry/subtree.test.d.ts +0 -2
- package/dist/registry/subtree.test.d.ts.map +0 -1
- package/dist/registry/subtree.test.js +0 -133
- package/dist/schema/asset-url.test.d.ts +0 -2
- package/dist/schema/asset-url.test.d.ts.map +0 -1
- package/dist/schema/asset-url.test.js +0 -134
- package/dist/services/alignment-anchors.test.d.ts +0 -2
- package/dist/services/alignment-anchors.test.d.ts.map +0 -1
- package/dist/services/alignment-anchors.test.js +0 -383
- package/dist/services/alignment.test.d.ts +0 -2
- package/dist/services/alignment.test.d.ts.map +0 -1
- package/dist/services/alignment.test.js +0 -92
- package/dist/services/drag-session.test.d.ts +0 -2
- package/dist/services/drag-session.test.d.ts.map +0 -1
- package/dist/services/drag-session.test.js +0 -219
- package/dist/services/hosting.test.d.ts +0 -2
- package/dist/services/hosting.test.d.ts.map +0 -1
- package/dist/services/hosting.test.js +0 -199
- package/dist/services/movement.test.d.ts +0 -2
- package/dist/services/movement.test.d.ts.map +0 -1
- package/dist/services/movement.test.js +0 -133
- package/dist/services/single-undo-dance.test.d.ts +0 -2
- package/dist/services/single-undo-dance.test.d.ts.map +0 -1
- package/dist/services/single-undo-dance.test.js +0 -210
- package/dist/services/snap.test.d.ts +0 -2
- package/dist/services/snap.test.d.ts.map +0 -1
- package/dist/services/snap.test.js +0 -95
- package/dist/store/actions/node-mutation-sanitize.test.d.ts +0 -2
- package/dist/store/actions/node-mutation-sanitize.test.d.ts.map +0 -1
- package/dist/store/actions/node-mutation-sanitize.test.js +0 -147
- package/dist/store/actions/reparent.test.d.ts +0 -2
- package/dist/store/actions/reparent.test.d.ts.map +0 -1
- package/dist/store/actions/reparent.test.js +0 -212
- package/dist/store/use-scene-elevator-migration.test.d.ts +0 -2
- package/dist/store/use-scene-elevator-migration.test.d.ts.map +0 -1
- package/dist/store/use-scene-elevator-migration.test.js +0 -109
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-opening-sync.test.js +0 -146
- package/dist/systems/elevator/elevator-runtime.test.d.ts +0 -2
- package/dist/systems/elevator/elevator-runtime.test.d.ts.map +0 -1
- package/dist/systems/elevator/elevator-runtime.test.js +0 -64
- package/dist/systems/stair/stair-opening-preview.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-preview.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-preview.test.js +0 -80
- package/dist/systems/stair/stair-opening-sync.test.d.ts +0 -2
- package/dist/systems/stair/stair-opening-sync.test.d.ts.map +0 -1
- package/dist/systems/stair/stair-opening-sync.test.js +0 -446
- package/dist/utils/clone-scene-graph.test.d.ts +0 -2
- package/dist/utils/clone-scene-graph.test.d.ts.map +0 -1
- package/dist/utils/clone-scene-graph.test.js +0 -59
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import dedent from 'dedent';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
|
+
/**
|
|
5
|
+
* DWV trap — the P-trap between a fixture and the waste system. Holds a
|
|
6
|
+
* water seal that blocks sewer gas; every drained fixture has exactly
|
|
7
|
+
* one. Modeled as an explicit fitting (not folded into the fixture) so
|
|
8
|
+
* the trap-arm rule (IPC 909.1 max developed length to the vent) has a
|
|
9
|
+
* node to attach to and the inspector can edit size + arm length.
|
|
10
|
+
*
|
|
11
|
+
* Local-frame convention (before `rotation`): inlet faces +Y (up, to
|
|
12
|
+
* the fixture tailpiece), outlet faces +X (the horizontal trap arm
|
|
13
|
+
* toward the vented waste line).
|
|
14
|
+
*/
|
|
15
|
+
export const PipeTrapNode = BaseNode.extend({
|
|
16
|
+
id: objectId('pipe-trap'),
|
|
17
|
+
type: nodeType('pipe-trap'),
|
|
18
|
+
// Level-local meters.
|
|
19
|
+
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
20
|
+
// Yaw in radians (the arm direction in plan).
|
|
21
|
+
rotation: z.number().default(0),
|
|
22
|
+
// Trap size in inches — matches the fixture drain it serves.
|
|
23
|
+
diameter: z.number().min(1.25).max(4).default(2),
|
|
24
|
+
pipeMaterial: z.enum(['pvc', 'abs', 'cast-iron']).default('pvc'),
|
|
25
|
+
// Developed length of the trap arm (trap weir → vent) in meters. The
|
|
26
|
+
// draw tool measures it when the arm is drawn; editable in the
|
|
27
|
+
// inspector. Drives the IPC 909.1 max-trap-arm check.
|
|
28
|
+
armLengthM: z.number().min(0).default(0),
|
|
29
|
+
}).describe(dedent `
|
|
30
|
+
DWV trap (P-trap) - the water-seal fitting between a fixture and the waste line.
|
|
31
|
+
- position: [x, y, z] level-local meters
|
|
32
|
+
- rotation: yaw radians (trap-arm direction in plan)
|
|
33
|
+
- diameter: trap size in inches (matches the fixture drain)
|
|
34
|
+
- pipeMaterial: pvc | abs | cast-iron
|
|
35
|
+
- armLengthM: developed length from trap to vent in meters (IPC 909.1 limited by size)
|
|
36
|
+
`);
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { type RoofSegmentNode } from './roof-segment';
|
|
3
|
+
export type RidgeVentLine = {
|
|
4
|
+
name: string;
|
|
5
|
+
start: [number, number];
|
|
6
|
+
end: [number, number];
|
|
7
|
+
};
|
|
2
8
|
export declare const RidgeVentNode: z.ZodObject<{
|
|
3
9
|
object: z.ZodDefault<z.ZodLiteral<"node">>;
|
|
4
10
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -19,7 +25,7 @@ export declare const RidgeVentNode: z.ZodObject<{
|
|
|
19
25
|
type: z.ZodDefault<z.ZodLiteral<"ridge-vent">>;
|
|
20
26
|
material: z.ZodOptional<z.ZodObject<{
|
|
21
27
|
id: z.ZodOptional<z.ZodString>;
|
|
22
|
-
preset: z.ZodOptional<z.ZodEnum<{
|
|
28
|
+
preset: z.ZodOptional<z.ZodCatch<z.ZodEnum<{
|
|
23
29
|
custom: "custom";
|
|
24
30
|
white: "white";
|
|
25
31
|
brick: "brick";
|
|
@@ -30,7 +36,7 @@ export declare const RidgeVentNode: z.ZodObject<{
|
|
|
30
36
|
plaster: "plaster";
|
|
31
37
|
tile: "tile";
|
|
32
38
|
marble: "marble";
|
|
33
|
-
}
|
|
39
|
+
}>>>;
|
|
34
40
|
properties: z.ZodOptional<z.ZodObject<{
|
|
35
41
|
color: z.ZodDefault<z.ZodString>;
|
|
36
42
|
roughness: z.ZodDefault<z.ZodNumber>;
|
|
@@ -49,7 +55,7 @@ export declare const RidgeVentNode: z.ZodObject<{
|
|
|
49
55
|
scale: z.ZodOptional<z.ZodNumber>;
|
|
50
56
|
}, z.core.$strip>>;
|
|
51
57
|
}, z.core.$strip>>;
|
|
52
|
-
materialPreset: z.
|
|
58
|
+
materialPreset: z.ZodOptional<z.ZodString>;
|
|
53
59
|
roofSegmentId: z.ZodOptional<z.ZodString>;
|
|
54
60
|
position: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
55
61
|
rotation: z.ZodDefault<z.ZodNumber>;
|
|
@@ -64,4 +70,13 @@ export declare const RidgeVentNode: z.ZodObject<{
|
|
|
64
70
|
endCaps: z.ZodDefault<z.ZodBoolean>;
|
|
65
71
|
}, z.core.$strip>;
|
|
66
72
|
export type RidgeVentNode = z.infer<typeof RidgeVentNode>;
|
|
73
|
+
export declare function getRidgeVentLinesForSegment(segment: RoofSegmentNode): RidgeVentLine[];
|
|
74
|
+
export declare function createDefaultRidgeVentsForSegment(segment: RoofSegmentNode): RidgeVentNode[];
|
|
75
|
+
export declare function isDefaultRidgeVentNode(node: unknown, roofSegmentId?: RoofSegmentNode['id']): node is RidgeVentNode;
|
|
76
|
+
export declare function hasAutoRidgeVentMetadata(segment: Pick<RoofSegmentNode, 'metadata'>): segment is Pick<RoofSegmentNode, 'metadata'> & {
|
|
77
|
+
metadata: Record<string, unknown> & {
|
|
78
|
+
autoRidgeVent: boolean;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
export declare function isAutoRidgeVentEnabled(segment: Pick<RoofSegmentNode, 'id' | 'children' | 'metadata'>, nodes?: Record<string, unknown>): boolean;
|
|
67
82
|
//# sourceMappingURL=ridge-vent.d.ts.map
|
|
@@ -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;
|
|
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,CAkJrF;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"}
|
|
@@ -2,13 +2,35 @@ import dedent from 'dedent';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { BaseNode, nodeType, objectId } from '../base';
|
|
4
4
|
import { MaterialSchema } from '../material';
|
|
5
|
+
import { getDutchRoofMetrics, getRoofSegmentVisibleTopBounds, ROOF_SHAPE_DEFAULTS, } from './roof-segment';
|
|
6
|
+
const MIN_DEFAULT_RIDGE_VENT_LENGTH_M = 0.4;
|
|
7
|
+
const DEFAULT_RIDGE_VENT_GENERATOR = 'default-ridge-vent';
|
|
8
|
+
const AUTO_RIDGE_VENT_METADATA_KEY = 'autoRidgeVent';
|
|
9
|
+
const LEGACY_DEFAULT_RIDGE_VENT_PRESET = 'preset-white';
|
|
10
|
+
const UNTRIMMED_RIDGE_VENT_BOUNDS_TRIM = {
|
|
11
|
+
left: 0,
|
|
12
|
+
right: 0,
|
|
13
|
+
front: 0,
|
|
14
|
+
back: 0,
|
|
15
|
+
frontLeft: 0,
|
|
16
|
+
frontRight: 0,
|
|
17
|
+
backLeft: 0,
|
|
18
|
+
backRight: 0,
|
|
19
|
+
frontLeftX: 0,
|
|
20
|
+
frontLeftZ: 0,
|
|
21
|
+
frontRightX: 0,
|
|
22
|
+
frontRightZ: 0,
|
|
23
|
+
backLeftX: 0,
|
|
24
|
+
backLeftZ: 0,
|
|
25
|
+
backRightX: 0,
|
|
26
|
+
backRightZ: 0,
|
|
27
|
+
};
|
|
5
28
|
export const RidgeVentNode = BaseNode.extend({
|
|
6
29
|
id: objectId('rvent'),
|
|
7
30
|
type: nodeType('ridge-vent'),
|
|
8
31
|
material: MaterialSchema.optional(),
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
materialPreset: z.string().default('preset-white'),
|
|
32
|
+
// Unpainted ridge vents inherit the roof top material in the renderer.
|
|
33
|
+
materialPreset: z.string().optional(),
|
|
12
34
|
roofSegmentId: z.string().optional(),
|
|
13
35
|
position: z.tuple([z.number(), z.number(), z.number()]).default([0, 0, 0]),
|
|
14
36
|
rotation: z.number().default(0),
|
|
@@ -28,3 +50,199 @@ export const RidgeVentNode = BaseNode.extend({
|
|
|
28
50
|
- style: standard (curved cap) / shingled / metal
|
|
29
51
|
- endCaps: cap both ends or leave open
|
|
30
52
|
`);
|
|
53
|
+
export function getRidgeVentLinesForSegment(segment) {
|
|
54
|
+
const bounds = getRoofSegmentVisibleTopBounds({
|
|
55
|
+
...segment,
|
|
56
|
+
trim: UNTRIMMED_RIDGE_VENT_BOUNDS_TRIM,
|
|
57
|
+
});
|
|
58
|
+
const { width, depth, minX, maxX, minZ, maxZ } = bounds;
|
|
59
|
+
if (segment.roofType === 'flat' || segment.roofType === 'shed')
|
|
60
|
+
return [];
|
|
61
|
+
const halfW = width / 2;
|
|
62
|
+
const halfD = depth / 2;
|
|
63
|
+
const ridgeZVisible = minZ <= 0 && maxZ >= 0;
|
|
64
|
+
const ridgeXVisible = minX <= 0 && maxX >= 0;
|
|
65
|
+
if (segment.roofType === 'mansard') {
|
|
66
|
+
const inset = Math.min(Math.min(width, depth) *
|
|
67
|
+
(segment.mansardSteepWidthRatio ?? ROOF_SHAPE_DEFAULTS.mansardSteepWidthRatio), Math.max(0, Math.min(width, depth) / 2 - 0.01));
|
|
68
|
+
const shoulderMinX = minX + inset;
|
|
69
|
+
const shoulderMaxX = maxX - inset;
|
|
70
|
+
const shoulderMinZ = minZ + inset;
|
|
71
|
+
const shoulderMaxZ = maxZ - inset;
|
|
72
|
+
const topW = Math.max(0, shoulderMaxX - shoulderMinX);
|
|
73
|
+
const topD = Math.max(0, shoulderMaxZ - shoulderMinZ);
|
|
74
|
+
const lowerSlopeLines = [
|
|
75
|
+
{
|
|
76
|
+
name: 'Slope Ridge Vent',
|
|
77
|
+
start: [shoulderMinX, shoulderMaxZ],
|
|
78
|
+
end: [minX, maxZ],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Slope Ridge Vent',
|
|
82
|
+
start: [shoulderMaxX, shoulderMaxZ],
|
|
83
|
+
end: [maxX, maxZ],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: 'Slope Ridge Vent',
|
|
87
|
+
start: [shoulderMaxX, shoulderMinZ],
|
|
88
|
+
end: [maxX, minZ],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'Slope Ridge Vent',
|
|
92
|
+
start: [shoulderMinX, shoulderMinZ],
|
|
93
|
+
end: [minX, minZ],
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
if (topW >= topD) {
|
|
97
|
+
const leftRidge = [shoulderMinX + topD / 2, 0];
|
|
98
|
+
const rightRidge = [shoulderMaxX - topD / 2, 0];
|
|
99
|
+
return [
|
|
100
|
+
...(ridgeZVisible ? [{ name: 'Ridge Vent', start: leftRidge, end: rightRidge }] : []),
|
|
101
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMaxZ], end: leftRidge },
|
|
102
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMinZ], end: leftRidge },
|
|
103
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMaxZ], end: rightRidge },
|
|
104
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMinZ], end: rightRidge },
|
|
105
|
+
...lowerSlopeLines,
|
|
106
|
+
];
|
|
107
|
+
}
|
|
108
|
+
const frontRidge = [0, shoulderMaxZ - topW / 2];
|
|
109
|
+
const backRidge = [0, shoulderMinZ + topW / 2];
|
|
110
|
+
return [
|
|
111
|
+
...(ridgeXVisible ? [{ name: 'Ridge Vent', start: frontRidge, end: backRidge }] : []),
|
|
112
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMaxZ], end: frontRidge },
|
|
113
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMaxZ], end: frontRidge },
|
|
114
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMinX, shoulderMinZ], end: backRidge },
|
|
115
|
+
{ name: 'Hip Ridge Vent', start: [shoulderMaxX, shoulderMinZ], end: backRidge },
|
|
116
|
+
...lowerSlopeLines,
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
if (segment.roofType === 'dutch') {
|
|
120
|
+
const { axis, inset } = getDutchRoofMetrics(segment);
|
|
121
|
+
// The rendered hip arris and waist come from the EXPANDED (overhang +
|
|
122
|
+
// shingle) rectangle — the same dims the eave corners below use — while
|
|
123
|
+
// the inset is base-derived (matches getDutchRoofMetrics / the brush
|
|
124
|
+
// builder). Deriving the waist from `getDutchRoofMetrics`' own base-dim
|
|
125
|
+
// half-spans would tilt the hip lines off the arris on any roof with
|
|
126
|
+
// overhang, sinking the vents into the slope. Mirror the mansard branch:
|
|
127
|
+
// one coordinate system (expanded bounds) for both eave and waist.
|
|
128
|
+
const waistLengthRatio = segment.dutchWaistLengthRatio ?? ROOF_SHAPE_DEFAULTS.dutchWaistLengthRatio;
|
|
129
|
+
const waistHalfX = axis === 'x' ? Math.max(0, (halfW - inset) * waistLengthRatio) : Math.max(0, halfW - inset);
|
|
130
|
+
const waistHalfZ = axis === 'x' ? Math.max(0, halfD - inset) : Math.max(0, (halfD - inset) * waistLengthRatio);
|
|
131
|
+
if (!(waistHalfX > 0.001 && waistHalfZ > 0.001))
|
|
132
|
+
return [];
|
|
133
|
+
// Dutch lower hip vents should terminate where the lower slope actually
|
|
134
|
+
// meets the gablet rake, not at the inner waist line of the upper gable
|
|
135
|
+
// triangle. Mirror the rendered roof shell's "outer waist" cap with the
|
|
136
|
+
// same expanded-bounds frame we use for the eave corners above.
|
|
137
|
+
const rake = segment.dutchGabletRake ?? ROOF_SHAPE_DEFAULTS.dutchGabletRake;
|
|
138
|
+
const rakeReach = axis === 'x'
|
|
139
|
+
? Math.min(Math.max(0, rake), Math.max(0, halfW - waistHalfX) * 0.98)
|
|
140
|
+
: Math.min(Math.max(0, rake), Math.max(0, halfD - waistHalfZ) * 0.98);
|
|
141
|
+
const rakeEndHalfX = axis === 'x' ? waistHalfX + rakeReach : waistHalfX;
|
|
142
|
+
const rakeEndHalfZ = axis === 'x' ? waistHalfZ : waistHalfZ + rakeReach;
|
|
143
|
+
const mainRidgeVisible = axis === 'x' ? ridgeZVisible : ridgeXVisible;
|
|
144
|
+
const ridgeStart = axis === 'x' ? [-rakeEndHalfX, 0] : [0, rakeEndHalfZ];
|
|
145
|
+
const ridgeEnd = axis === 'x' ? [rakeEndHalfX, 0] : [0, -rakeEndHalfZ];
|
|
146
|
+
return [
|
|
147
|
+
...(mainRidgeVisible ? [{ name: 'Ridge Vent', start: ridgeStart, end: ridgeEnd }] : []),
|
|
148
|
+
{ name: 'Hip Ridge Vent', start: [minX, maxZ], end: [-rakeEndHalfX, rakeEndHalfZ] },
|
|
149
|
+
{ name: 'Hip Ridge Vent', start: [maxX, maxZ], end: [rakeEndHalfX, rakeEndHalfZ] },
|
|
150
|
+
{ name: 'Hip Ridge Vent', start: [maxX, minZ], end: [rakeEndHalfX, -rakeEndHalfZ] },
|
|
151
|
+
{ name: 'Hip Ridge Vent', start: [minX, minZ], end: [-rakeEndHalfX, -rakeEndHalfZ] },
|
|
152
|
+
];
|
|
153
|
+
}
|
|
154
|
+
if (segment.roofType !== 'hip') {
|
|
155
|
+
if (!ridgeZVisible)
|
|
156
|
+
return [];
|
|
157
|
+
return [
|
|
158
|
+
{
|
|
159
|
+
name: 'Ridge Vent',
|
|
160
|
+
start: [minX, 0],
|
|
161
|
+
end: [maxX, 0],
|
|
162
|
+
},
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
if (width >= depth) {
|
|
166
|
+
const leftRidge = [minX + halfD, 0];
|
|
167
|
+
const rightRidge = [maxX - halfD, 0];
|
|
168
|
+
return [
|
|
169
|
+
...(ridgeZVisible ? [{ name: 'Ridge Vent', start: leftRidge, end: rightRidge }] : []),
|
|
170
|
+
{ name: 'Hip Ridge Vent', start: [minX, maxZ], end: leftRidge },
|
|
171
|
+
{ name: 'Hip Ridge Vent', start: [minX, minZ], end: leftRidge },
|
|
172
|
+
{ name: 'Hip Ridge Vent', start: [maxX, maxZ], end: rightRidge },
|
|
173
|
+
{ name: 'Hip Ridge Vent', start: [maxX, minZ], end: rightRidge },
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
const frontRidge = [0, maxZ - halfW];
|
|
177
|
+
const backRidge = [0, minZ + halfW];
|
|
178
|
+
return [
|
|
179
|
+
...(ridgeXVisible ? [{ name: 'Ridge Vent', start: frontRidge, end: backRidge }] : []),
|
|
180
|
+
{ name: 'Hip Ridge Vent', start: [minX, maxZ], end: frontRidge },
|
|
181
|
+
{ name: 'Hip Ridge Vent', start: [maxX, maxZ], end: frontRidge },
|
|
182
|
+
{ name: 'Hip Ridge Vent', start: [minX, minZ], end: backRidge },
|
|
183
|
+
{ name: 'Hip Ridge Vent', start: [maxX, minZ], end: backRidge },
|
|
184
|
+
];
|
|
185
|
+
}
|
|
186
|
+
function getLineYaw(start, end) {
|
|
187
|
+
const dx = end[0] - start[0];
|
|
188
|
+
const dz = end[1] - start[1];
|
|
189
|
+
return Math.atan2(-dz, dx);
|
|
190
|
+
}
|
|
191
|
+
export function createDefaultRidgeVentsForSegment(segment) {
|
|
192
|
+
return getRidgeVentLinesForSegment(segment)
|
|
193
|
+
.map((line) => {
|
|
194
|
+
const length = Math.hypot(line.end[0] - line.start[0], line.end[1] - line.start[1]);
|
|
195
|
+
if (length < MIN_DEFAULT_RIDGE_VENT_LENGTH_M)
|
|
196
|
+
return null;
|
|
197
|
+
return RidgeVentNode.parse({
|
|
198
|
+
name: line.name,
|
|
199
|
+
roofSegmentId: segment.id,
|
|
200
|
+
position: [(line.start[0] + line.end[0]) / 2, 0, (line.start[1] + line.end[1]) / 2],
|
|
201
|
+
rotation: getLineYaw(line.start, line.end),
|
|
202
|
+
length,
|
|
203
|
+
style: 'shingled',
|
|
204
|
+
metadata: { generatedBy: DEFAULT_RIDGE_VENT_GENERATOR },
|
|
205
|
+
});
|
|
206
|
+
})
|
|
207
|
+
.filter((vent) => vent !== null);
|
|
208
|
+
}
|
|
209
|
+
export function isDefaultRidgeVentNode(node, roofSegmentId) {
|
|
210
|
+
const parsed = RidgeVentNode.safeParse(node);
|
|
211
|
+
if (!parsed.success)
|
|
212
|
+
return false;
|
|
213
|
+
const vent = parsed.data;
|
|
214
|
+
if (roofSegmentId && vent.roofSegmentId !== roofSegmentId)
|
|
215
|
+
return false;
|
|
216
|
+
const metadata = vent.metadata;
|
|
217
|
+
if (typeof metadata === 'object' &&
|
|
218
|
+
metadata !== null &&
|
|
219
|
+
metadata.generatedBy === DEFAULT_RIDGE_VENT_GENERATOR) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
const hasDefaultName = vent.name === 'Ridge Vent' ||
|
|
223
|
+
vent.name === 'Hip Ridge Vent' ||
|
|
224
|
+
vent.name === 'Shoulder Ridge Vent' ||
|
|
225
|
+
vent.name === 'Slope Ridge Vent';
|
|
226
|
+
return (hasDefaultName &&
|
|
227
|
+
vent.style === 'shingled' &&
|
|
228
|
+
vent.material === undefined &&
|
|
229
|
+
vent.materialPreset === LEGACY_DEFAULT_RIDGE_VENT_PRESET);
|
|
230
|
+
}
|
|
231
|
+
function metadataRecord(metadata) {
|
|
232
|
+
if (typeof metadata === 'object' && metadata !== null && !Array.isArray(metadata)) {
|
|
233
|
+
return metadata;
|
|
234
|
+
}
|
|
235
|
+
return {};
|
|
236
|
+
}
|
|
237
|
+
export function hasAutoRidgeVentMetadata(segment) {
|
|
238
|
+
return typeof metadataRecord(segment.metadata)[AUTO_RIDGE_VENT_METADATA_KEY] === 'boolean';
|
|
239
|
+
}
|
|
240
|
+
export function isAutoRidgeVentEnabled(segment, nodes) {
|
|
241
|
+
const metadataValue = metadataRecord(segment.metadata)[AUTO_RIDGE_VENT_METADATA_KEY];
|
|
242
|
+
if (typeof metadataValue === 'boolean') {
|
|
243
|
+
return metadataValue;
|
|
244
|
+
}
|
|
245
|
+
if (!nodes)
|
|
246
|
+
return false;
|
|
247
|
+
return (segment.children ?? []).some((childId) => isDefaultRidgeVentNode(nodes[childId], segment.id));
|
|
248
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type RoofType } from './roof-segment';
|
|
2
|
+
export type RoofShapeFaceVertex = {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
z: number;
|
|
6
|
+
};
|
|
7
|
+
export type RoofShapeInsets = {
|
|
8
|
+
iF?: number;
|
|
9
|
+
iB?: number;
|
|
10
|
+
iL?: number;
|
|
11
|
+
iR?: number;
|
|
12
|
+
dutchI?: number;
|
|
13
|
+
};
|
|
14
|
+
export type RoofShapeRatios = {
|
|
15
|
+
gambrelLowerWidthRatio: number;
|
|
16
|
+
mansardSteepWidthRatio: number;
|
|
17
|
+
dutchHipWidthRatio: number;
|
|
18
|
+
dutchHipHeightRatio: number;
|
|
19
|
+
dutchWaistLengthRatio: number;
|
|
20
|
+
dutchGabletRake: number;
|
|
21
|
+
};
|
|
22
|
+
export declare function getRoofShapeRatios(input: {
|
|
23
|
+
gambrelLowerWidthRatio?: number;
|
|
24
|
+
mansardSteepWidthRatio?: number;
|
|
25
|
+
dutchHipWidthRatio?: number;
|
|
26
|
+
dutchHipHeightRatio?: number;
|
|
27
|
+
dutchWaistLengthRatio?: number;
|
|
28
|
+
dutchGabletRake?: number;
|
|
29
|
+
}): RoofShapeRatios;
|
|
30
|
+
export type DutchRoofShapeMetrics = {
|
|
31
|
+
axis: 'width' | 'depth';
|
|
32
|
+
inset: number;
|
|
33
|
+
middleHeight: number;
|
|
34
|
+
peakHeight: number;
|
|
35
|
+
rakeReach: number;
|
|
36
|
+
innerWaistHalfX: number;
|
|
37
|
+
innerWaistHalfZ: number;
|
|
38
|
+
outerWaistHalfX: number;
|
|
39
|
+
outerWaistHalfZ: number;
|
|
40
|
+
};
|
|
41
|
+
export declare function getDutchRoofShapeMetrics(input: {
|
|
42
|
+
w: number;
|
|
43
|
+
d: number;
|
|
44
|
+
wh: number;
|
|
45
|
+
rh: number;
|
|
46
|
+
dutchI?: number;
|
|
47
|
+
baseW: number;
|
|
48
|
+
baseD: number;
|
|
49
|
+
shapeRatios: RoofShapeRatios;
|
|
50
|
+
}): DutchRoofShapeMetrics | null;
|
|
51
|
+
export declare function getRoofShapeInsets(input: {
|
|
52
|
+
roofType: RoofType;
|
|
53
|
+
width: number;
|
|
54
|
+
depth: number;
|
|
55
|
+
wh: number;
|
|
56
|
+
baseY: number;
|
|
57
|
+
isVoid: boolean;
|
|
58
|
+
brushW: number;
|
|
59
|
+
brushD: number;
|
|
60
|
+
tanTheta: number;
|
|
61
|
+
shingleThickness: number;
|
|
62
|
+
dutchHipWidthRatio: number;
|
|
63
|
+
}): RoofShapeInsets;
|
|
64
|
+
export declare function getDutchEndSlopeFaces(input: {
|
|
65
|
+
w: number;
|
|
66
|
+
d: number;
|
|
67
|
+
wh: number;
|
|
68
|
+
rh: number;
|
|
69
|
+
insets: RoofShapeInsets;
|
|
70
|
+
baseW: number;
|
|
71
|
+
baseD: number;
|
|
72
|
+
shapeRatios: RoofShapeRatios;
|
|
73
|
+
dutchTopRakeThickness?: number;
|
|
74
|
+
}): RoofShapeFaceVertex[][];
|
|
75
|
+
export declare function getRoofModuleFaces(input: {
|
|
76
|
+
type: RoofType;
|
|
77
|
+
w: number;
|
|
78
|
+
d: number;
|
|
79
|
+
wh: number;
|
|
80
|
+
rh: number;
|
|
81
|
+
baseY: number;
|
|
82
|
+
insets: RoofShapeInsets;
|
|
83
|
+
baseW: number;
|
|
84
|
+
baseD: number;
|
|
85
|
+
tanTheta: number;
|
|
86
|
+
shapeRatios: RoofShapeRatios;
|
|
87
|
+
excludeDutchEndSlopes?: boolean;
|
|
88
|
+
dutchTopRakeThickness?: number;
|
|
89
|
+
}): RoofShapeFaceVertex[][];
|
|
90
|
+
//# sourceMappingURL=roof-segment-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roof-segment-shape.d.ts","sourceRoot":"","sources":["../../../src/schema/nodes/roof-segment-shape.ts"],"names":[],"mappings":"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"}
|