@pascal-app/nodes 0.1.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 +34 -0
- package/dist/building/definition.js +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +809 -72
- package/dist/cabinet/geometry.d.ts.map +1 -1
- package/dist/cabinet/geometry.js +4 -0
- package/dist/cabinet/move-frame.js +3 -3
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +1 -0
- package/dist/cabinet/placement-snap.d.ts +8 -0
- package/dist/cabinet/placement-snap.d.ts.map +1 -0
- package/dist/cabinet/placement-snap.js +19 -0
- package/dist/cabinet/presets.js +8 -8
- package/dist/cabinet/quick-actions.d.ts.map +1 -1
- package/dist/cabinet/quick-actions.js +9 -3
- package/dist/cabinet/resize-limits.d.ts +11 -0
- package/dist/cabinet/resize-limits.d.ts.map +1 -0
- package/dist/cabinet/resize-limits.js +22 -0
- package/dist/cabinet/run-layout.d.ts +8 -2
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +59 -7
- package/dist/cabinet/run-ops.d.ts +44 -3
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-ops.js +646 -110
- package/dist/cabinet/run-panel.d.ts +2 -1
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +38 -4
- package/dist/cabinet/stack-transitions.js +4 -4
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +95 -17
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +2 -6
- package/dist/ceiling/boundary-editor.d.ts.map +1 -1
- package/dist/ceiling/boundary-editor.js +2 -2
- package/dist/ceiling/definition.d.ts +1 -1
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +36 -5
- package/dist/ceiling/floorplan-affordances.d.ts +4 -4
- package/dist/ceiling/floorplan-move.d.ts +4 -4
- package/dist/ceiling/floorplan-move.d.ts.map +1 -1
- package/dist/ceiling/floorplan-move.js +5 -4
- package/dist/ceiling/hole-editor.d.ts.map +1 -1
- package/dist/ceiling/hole-editor.js +2 -2
- package/dist/ceiling/move-tool.d.ts.map +1 -1
- package/dist/ceiling/move-tool.js +4 -3
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +65 -3
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +6 -2
- package/dist/ceiling/tool.d.ts.map +1 -1
- package/dist/ceiling/tool.js +12 -1
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- package/dist/chimney/tool.d.ts.map +1 -1
- package/dist/chimney/tool.js +16 -1
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +14 -2
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +19 -14
- package/dist/column/floorplan-move.d.ts.map +1 -1
- package/dist/column/floorplan-move.js +7 -2
- package/dist/column/floorplan.d.ts +9 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +59 -4
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +33 -7
- package/dist/construction-dimension/definition.d.ts +4 -0
- package/dist/construction-dimension/definition.d.ts.map +1 -0
- package/dist/construction-dimension/definition.js +83 -0
- package/dist/construction-dimension/drawing-coordination.d.ts +7 -0
- package/dist/construction-dimension/drawing-coordination.d.ts.map +1 -0
- package/dist/construction-dimension/drawing-coordination.js +54 -0
- package/dist/construction-dimension/floorplan-affordances.d.ts +4 -0
- package/dist/construction-dimension/floorplan-affordances.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan-affordances.js +114 -0
- package/dist/construction-dimension/floorplan-tool.d.ts +21 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan-tool.js +557 -0
- package/dist/construction-dimension/floorplan.d.ts +3 -0
- package/dist/construction-dimension/floorplan.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan.js +457 -0
- package/dist/construction-dimension/geometry.d.ts +31 -0
- package/dist/construction-dimension/geometry.d.ts.map +1 -0
- package/dist/construction-dimension/geometry.js +144 -0
- package/dist/construction-dimension/index.d.ts +4 -0
- package/dist/construction-dimension/index.d.ts.map +1 -0
- package/dist/construction-dimension/index.js +3 -0
- package/dist/construction-dimension/panel.d.ts +2 -0
- package/dist/construction-dimension/panel.d.ts.map +1 -0
- package/dist/construction-dimension/panel.js +128 -0
- package/dist/construction-dimension/parametrics.d.ts +3 -0
- package/dist/construction-dimension/parametrics.d.ts.map +1 -0
- package/dist/construction-dimension/parametrics.js +4 -0
- package/dist/construction-dimension/schema.d.ts +2 -0
- package/dist/construction-dimension/schema.d.ts.map +1 -0
- package/dist/construction-dimension/schema.js +1 -0
- package/dist/door/contextual-dimensions.d.ts +3 -0
- package/dist/door/contextual-dimensions.d.ts.map +1 -0
- package/dist/door/contextual-dimensions.js +7 -0
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +13 -8
- package/dist/door/floorplan-affordances.d.ts +2 -5
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +9 -18
- package/dist/door/floorplan.d.ts +3 -4
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +88 -6
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +2 -2
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +3 -1
- package/dist/door/schema.d.ts +1 -1
- package/dist/door/schema.d.ts.map +1 -1
- package/dist/door/schema.js +1 -1
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +63 -6
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -0
- package/dist/dormer/tool.d.ts.map +1 -1
- package/dist/dormer/tool.js +23 -1
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +20 -9
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +9 -6
- package/dist/elevator/floorplan-affordances.d.ts +2 -6
- package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
- package/dist/elevator/floorplan-affordances.js +13 -12
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
- package/dist/fence/actions/move-endpoint.js +29 -1
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +67 -14
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +48 -11
- package/dist/fence/floorplan-move.d.ts.map +1 -1
- package/dist/fence/floorplan-move.js +38 -3
- package/dist/fence/geometry.d.ts.map +1 -1
- package/dist/fence/geometry.js +9 -1
- package/dist/fence/lift.d.ts +15 -0
- package/dist/fence/lift.d.ts.map +1 -0
- package/dist/fence/lift.js +23 -0
- package/dist/fence/move-tool.d.ts.map +1 -1
- package/dist/fence/move-tool.js +25 -5
- package/dist/fence/system.d.ts +3 -0
- package/dist/fence/system.d.ts.map +1 -0
- package/dist/fence/system.js +41 -0
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +103 -32
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +7 -1
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +50 -43
- package/dist/item/floorplan.d.ts +1 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +49 -0
- package/dist/item/renderer.d.ts +3 -0
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +96 -8
- package/dist/level/definition.d.ts.map +1 -1
- package/dist/level/definition.js +7 -3
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +5 -1
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +7 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +5 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +11 -10
- package/dist/measurement/index.d.ts +1 -1
- package/dist/measurement/index.d.ts.map +1 -1
- package/dist/measurement/index.js +1 -1
- package/dist/measurement/resolve.d.ts +5 -0
- package/dist/measurement/resolve.d.ts.map +1 -1
- package/dist/measurement/resolve.js +2 -2
- package/dist/measurement/surface-query.js +5 -5
- package/dist/measurement/tool.d.ts +6 -1
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +7 -11
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +22 -19
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +14 -8
- package/dist/shared/construction-dimension-standards.d.ts +34 -0
- package/dist/shared/construction-dimension-standards.d.ts.map +1 -0
- package/dist/shared/construction-dimension-standards.js +18 -0
- package/dist/shared/construction-length.d.ts +10 -0
- package/dist/shared/construction-length.d.ts.map +1 -0
- package/dist/shared/construction-length.js +57 -0
- package/dist/shared/dimension-string.d.ts +20 -0
- package/dist/shared/dimension-string.d.ts.map +1 -0
- package/dist/shared/dimension-string.js +19 -0
- package/dist/shared/draft-axis-guides.d.ts +36 -0
- package/dist/shared/draft-axis-guides.d.ts.map +1 -0
- package/dist/shared/draft-axis-guides.js +107 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -1
- package/dist/shared/move-roof-tool.js +17 -3
- package/dist/shared/opening-documentation-fields.d.ts +16 -0
- package/dist/shared/opening-documentation-fields.d.ts.map +1 -0
- package/dist/shared/opening-documentation-fields.js +54 -0
- package/dist/shared/opening-documentation.d.ts +47 -0
- package/dist/shared/opening-documentation.d.ts.map +1 -0
- package/dist/shared/opening-documentation.js +300 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +3 -2
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +14 -5
- package/dist/shared/wall-opening-ceiling.d.ts +30 -0
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -0
- package/dist/shared/wall-opening-ceiling.js +29 -0
- package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
- package/dist/shelf/floorplan-affordances.js +10 -5
- package/dist/shelf/floorplan-move.d.ts +2 -16
- package/dist/shelf/floorplan-move.d.ts.map +1 -1
- package/dist/shelf/floorplan-move.js +19 -40
- package/dist/shelf/tool.d.ts.map +1 -1
- package/dist/shelf/tool.js +8 -3
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
- package/dist/site/recessed-slab-ground-holes.js +1 -4
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +118 -28
- package/dist/site/terrain-drape.d.ts +91 -0
- package/dist/site/terrain-drape.d.ts.map +1 -0
- package/dist/site/terrain-drape.js +205 -0
- package/dist/site/terrain-geometry.d.ts +131 -0
- package/dist/site/terrain-geometry.d.ts.map +1 -0
- package/dist/site/terrain-geometry.js +259 -0
- package/dist/site/terrain-mesh.d.ts +49 -0
- package/dist/site/terrain-mesh.d.ts.map +1 -0
- package/dist/site/terrain-mesh.js +122 -0
- package/dist/site/terrain-renderer.d.ts +28 -0
- package/dist/site/terrain-renderer.d.ts.map +1 -0
- package/dist/site/terrain-renderer.js +69 -0
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- package/dist/skylight/tool.d.ts.map +1 -1
- package/dist/skylight/tool.js +16 -1
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +87 -10
- package/dist/slab/elevation-limit.d.ts +43 -0
- package/dist/slab/elevation-limit.d.ts.map +1 -0
- package/dist/slab/elevation-limit.js +124 -0
- package/dist/slab/floorplan-affordances.d.ts +16 -0
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +98 -5
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +82 -4
- package/dist/slab/parametrics.d.ts +1 -1
- package/dist/slab/parametrics.d.ts.map +1 -1
- package/dist/slab/parametrics.js +13 -1
- package/dist/slab/placement-ownership.d.ts +3 -0
- package/dist/slab/placement-ownership.d.ts.map +1 -0
- package/dist/slab/placement-ownership.js +3 -0
- package/dist/slab/quick-measurement.d.ts.map +1 -1
- package/dist/slab/quick-measurement.js +3 -2
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +14 -4
- package/dist/slab/tool.d.ts.map +1 -1
- package/dist/slab/tool.js +81 -23
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/solar-panel/tool.d.ts.map +1 -1
- package/dist/solar-panel/tool.js +17 -1
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- package/dist/spawn/floorplan-affordances.d.ts.map +1 -1
- package/dist/spawn/floorplan-affordances.js +7 -4
- package/dist/spawn/floorplan-move.d.ts.map +1 -1
- package/dist/spawn/floorplan-move.js +8 -6
- package/dist/spawn/renderer.d.ts +4 -0
- package/dist/spawn/renderer.d.ts.map +1 -1
- package/dist/spawn/renderer.js +32 -18
- package/dist/spawn/tool.d.ts +2 -2
- package/dist/spawn/tool.d.ts.map +1 -1
- package/dist/spawn/tool.js +78 -11
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +15 -7
- package/dist/stair/destination.d.ts +16 -0
- package/dist/stair/destination.d.ts.map +1 -0
- package/dist/stair/destination.js +24 -0
- package/dist/stair/documentation.d.ts +8 -0
- package/dist/stair/documentation.d.ts.map +1 -0
- package/dist/stair/documentation.js +245 -0
- package/dist/stair/floor-stack.d.ts.map +1 -1
- package/dist/stair/floor-stack.js +38 -0
- package/dist/stair/floorplan-affordances.d.ts.map +1 -1
- package/dist/stair/floorplan-affordances.js +28 -9
- package/dist/stair/floorplan-move.d.ts +3 -5
- package/dist/stair/floorplan-move.d.ts.map +1 -1
- package/dist/stair/floorplan-move.js +14 -16
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +27 -14
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +35 -2
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +4 -3
- package/dist/structural-grid/coordination.d.ts +16 -0
- package/dist/structural-grid/coordination.d.ts.map +1 -0
- package/dist/structural-grid/coordination.js +105 -0
- package/dist/structural-grid/definition.d.ts +4 -0
- package/dist/structural-grid/definition.d.ts.map +1 -0
- package/dist/structural-grid/definition.js +51 -0
- package/dist/structural-grid/floorplan-tool.d.ts +16 -0
- package/dist/structural-grid/floorplan-tool.d.ts.map +1 -0
- package/dist/structural-grid/floorplan-tool.js +183 -0
- package/dist/structural-grid/floorplan.d.ts +3 -0
- package/dist/structural-grid/floorplan.d.ts.map +1 -0
- package/dist/structural-grid/floorplan.js +61 -0
- package/dist/structural-grid/index.d.ts +2 -0
- package/dist/structural-grid/index.d.ts.map +1 -0
- package/dist/structural-grid/index.js +1 -0
- package/dist/structural-grid/schema.d.ts +2 -0
- package/dist/structural-grid/schema.d.ts.map +1 -0
- package/dist/structural-grid/schema.js +1 -0
- package/dist/wall/construction-dimensions.d.ts +32 -0
- package/dist/wall/construction-dimensions.d.ts.map +1 -0
- package/dist/wall/construction-dimensions.js +1031 -0
- package/dist/wall/contextual-dimensions.d.ts +13 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -0
- package/dist/wall/contextual-dimensions.js +221 -0
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +20 -1
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +23 -8
- package/dist/wall/floorplan-overrides.d.ts +9 -6
- package/dist/wall/floorplan-overrides.d.ts.map +1 -1
- package/dist/wall/floorplan-overrides.js +20 -11
- package/dist/wall/floorplan.d.ts +12 -3
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +121 -79
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +17 -4
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +74 -27
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +3 -2
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +15 -3
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +10 -6
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +32 -5
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +2 -0
- package/dist/wall/preview.d.ts +8 -0
- package/dist/wall/preview.d.ts.map +1 -0
- package/dist/wall/preview.js +39 -0
- package/dist/wall/quick-measurement.d.ts.map +1 -1
- package/dist/wall/quick-measurement.js +3 -2
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +7 -5
- package/dist/wall/system.d.ts +1 -1
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +37 -2
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +148 -96
- package/dist/wall/treatment-level-data.d.ts +14 -0
- package/dist/wall/treatment-level-data.d.ts.map +1 -0
- package/dist/wall/treatment-level-data.js +31 -0
- package/dist/wall/treatments.d.ts +8 -2
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +58 -15
- package/dist/window/contextual-dimensions.d.ts +3 -0
- package/dist/window/contextual-dimensions.d.ts.map +1 -0
- package/dist/window/contextual-dimensions.js +7 -0
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +15 -10
- package/dist/window/floorplan-affordances.d.ts +2 -5
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +9 -15
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +1 -1
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +7 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +3 -3
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +4 -1
- package/dist/window/schema.d.ts +1 -1
- package/dist/window/schema.d.ts.map +1 -1
- package/dist/window/schema.js +1 -1
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +64 -7
- package/dist/window/window-math.d.ts +7 -3
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +8 -3
- package/dist/zone/contextual-dimensions.d.ts +3 -0
- package/dist/zone/contextual-dimensions.d.ts.map +1 -0
- package/dist/zone/contextual-dimensions.js +43 -0
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +9 -1
- package/dist/zone/floorplan-affordances.d.ts +36 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +59 -3
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +48 -4
- package/dist/zone/room-clear-dimensions.d.ts +3 -0
- package/dist/zone/room-clear-dimensions.d.ts.map +1 -0
- package/dist/zone/room-clear-dimensions.js +406 -0
- package/dist/zone/room-documentation.d.ts +11 -0
- package/dist/zone/room-documentation.d.ts.map +1 -0
- package/dist/zone/room-documentation.js +97 -0
- package/package.json +7 -7
package/dist/wall/paint.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getEffectiveWallSurfaceMaterial, getWallBandSlotId, getWallFaceBandConfig, getWallFaceBandForHeight, getWallSurfaceSideFromBandSlot, parseMaterialRef, sceneRegistry, useScene, WALL_SURFACE_SLOT_DEFAULTS, } from '@pascal-app/core';
|
|
2
2
|
import { Raycaster } from 'three';
|
|
3
3
|
import { buildSlotPreviewMaterial, createSlotPaintCapability, previewSlotByUserData, } from '../shared/slot-paint';
|
|
4
|
+
import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
|
|
4
5
|
const WALL_SLOT_IDS = new Set(Object.keys(WALL_SURFACE_SLOT_DEFAULTS));
|
|
5
6
|
const WALL_ARRAY_SLOT_INDEX = {
|
|
6
7
|
interior: 1,
|
|
@@ -68,10 +69,11 @@ export function resolveWallRole(args) {
|
|
|
68
69
|
return indexedSlotId;
|
|
69
70
|
}
|
|
70
71
|
if (sideFromIndex && localPosition) {
|
|
71
|
-
const
|
|
72
|
+
const effectiveWallHeight = resolveWallOpeningCeiling(node, useScene.getState().nodes);
|
|
73
|
+
const bands = getWallFaceBandConfig(node, effectiveWallHeight);
|
|
72
74
|
if (!bands.enabled)
|
|
73
75
|
return sideFromIndex;
|
|
74
|
-
return getWallBandSlotId(sideFromIndex, getWallFaceBandForHeight(node, localPosition[1]));
|
|
76
|
+
return getWallBandSlotId(sideFromIndex, getWallFaceBandForHeight(node, localPosition[1], effectiveWallHeight));
|
|
75
77
|
}
|
|
76
78
|
if (sideFromIndex)
|
|
77
79
|
return sideFromIndex;
|
|
@@ -88,16 +90,18 @@ export function resolveWallRole(args) {
|
|
|
88
90
|
const hitFace = localZ >= 0 ? 'front' : 'back';
|
|
89
91
|
const semantic = hitFace === 'front' ? node.frontSide : node.backSide;
|
|
90
92
|
if (semantic === 'interior' || semantic === 'exterior') {
|
|
91
|
-
const
|
|
93
|
+
const effectiveWallHeight = resolveWallOpeningCeiling(node, useScene.getState().nodes);
|
|
94
|
+
const bands = getWallFaceBandConfig(node, effectiveWallHeight);
|
|
92
95
|
if (!bands.enabled)
|
|
93
96
|
return semantic;
|
|
94
|
-
return getWallBandSlotId(semantic, getWallFaceBandForHeight(node, localPosition[1]));
|
|
97
|
+
return getWallBandSlotId(semantic, getWallFaceBandForHeight(node, localPosition[1], effectiveWallHeight));
|
|
95
98
|
}
|
|
96
99
|
const side = hitFace === 'front' ? 'interior' : 'exterior';
|
|
97
|
-
const
|
|
100
|
+
const effectiveWallHeight = resolveWallOpeningCeiling(node, useScene.getState().nodes);
|
|
101
|
+
const bands = getWallFaceBandConfig(node, effectiveWallHeight);
|
|
98
102
|
if (!bands.enabled)
|
|
99
103
|
return side;
|
|
100
|
-
return getWallBandSlotId(side, getWallFaceBandForHeight(node, localPosition[1]));
|
|
104
|
+
return getWallBandSlotId(side, getWallFaceBandForHeight(node, localPosition[1], effectiveWallHeight));
|
|
101
105
|
}
|
|
102
106
|
/**
|
|
103
107
|
* Preview a wall paint by swapping just the painted face's entry in the wall
|
package/dist/wall/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/wall/panel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/wall/panel.tsx"],"names":[],"mappings":"AAoEA,MAAM,CAAC,OAAO,UAAU,SAAS,uCAwRhC"}
|
package/dist/wall/panel.js
CHANGED
|
@@ -5,6 +5,7 @@ import { ActionButton, ActionGroup, curveReshapeScope, getLinearUnitLabel, linea
|
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Spline } from 'lucide-react';
|
|
7
7
|
import { useCallback, useMemo, useRef } from 'react';
|
|
8
|
+
import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
|
|
8
9
|
const WALL_TRIM_PROFILE_OPTIONS = {
|
|
9
10
|
skirting: [
|
|
10
11
|
{ label: 'Flat', value: 'flat' },
|
|
@@ -63,6 +64,15 @@ export default function WallPanel() {
|
|
|
63
64
|
return false;
|
|
64
65
|
});
|
|
65
66
|
});
|
|
67
|
+
// Existing plane-bound walls have no stored height. Resolve their current
|
|
68
|
+
// body height for display and materialize it if the user edits height or
|
|
69
|
+
// enables terrain infill.
|
|
70
|
+
const resolvedHeightMeters = useScene((s) => {
|
|
71
|
+
const wall = selectedId ? s.nodes[selectedId] : undefined;
|
|
72
|
+
if (wall?.type !== 'wall')
|
|
73
|
+
return undefined;
|
|
74
|
+
return resolveWallOpeningCeiling(wall, s.nodes);
|
|
75
|
+
});
|
|
66
76
|
// Mirror the latest node into a ref so the slider handlers below have
|
|
67
77
|
// stable identities across re-renders. Without this, every store tick
|
|
68
78
|
// (one per pointermove during a slider drag) rebuilt the handler
|
|
@@ -93,6 +103,16 @@ export default function WallPanel() {
|
|
|
93
103
|
];
|
|
94
104
|
handleUpdate({ end: newEnd });
|
|
95
105
|
}, [handleUpdate]);
|
|
106
|
+
const handleBaseModeChange = useCallback((mode) => {
|
|
107
|
+
const n = nodeRef.current;
|
|
108
|
+
if (!n)
|
|
109
|
+
return;
|
|
110
|
+
const height = n.height ?? resolveWallOpeningCeiling(n, useScene.getState().nodes);
|
|
111
|
+
handleUpdate({
|
|
112
|
+
height: Math.max(0.1, height),
|
|
113
|
+
fillToTerrain: mode === 'terrain' ? true : undefined,
|
|
114
|
+
});
|
|
115
|
+
}, [handleUpdate]);
|
|
96
116
|
const handleClose = useCallback(() => {
|
|
97
117
|
setSelection({ selectedIds: [] });
|
|
98
118
|
}, [setSelection]);
|
|
@@ -106,7 +126,8 @@ export default function WallPanel() {
|
|
|
106
126
|
if (!(node && node.type === 'wall' && selectedId))
|
|
107
127
|
return null;
|
|
108
128
|
const length = getWallCurveLength(node);
|
|
109
|
-
const
|
|
129
|
+
const followsTerrain = node.fillToTerrain === true;
|
|
130
|
+
const height = node.height ?? resolvedHeightMeters ?? 2.5;
|
|
110
131
|
const thickness = node.thickness ?? 0.1;
|
|
111
132
|
const curveOffset = getClampedWallCurveOffset(node);
|
|
112
133
|
const maxCurveOffset = getMaxWallCurveOffset(node);
|
|
@@ -117,14 +138,20 @@ export default function WallPanel() {
|
|
|
117
138
|
const displayCurveOffset = metersToLinearUnit(curveOffset, unit);
|
|
118
139
|
const displayMaxCurveOffset = metersToLinearUnit(maxCurveOffset, unit);
|
|
119
140
|
const curveOffsetLimit = Math.max(0.01, maxCurveOffset);
|
|
120
|
-
const wallHeightMeters =
|
|
141
|
+
const wallHeightMeters = height;
|
|
121
142
|
const skirting = { ...WALL_SKIRTING_DEFAULT, ...(node.skirting ?? {}) };
|
|
122
143
|
const crown = { ...WALL_CROWN_DEFAULT, ...(node.crown ?? {}) };
|
|
123
144
|
const chairRail = { ...WALL_CHAIR_RAIL_DEFAULT, ...(node.chairRail ?? {}) };
|
|
124
145
|
return (_jsxs(PanelWrapper, { icon: "/icons/wall.webp", onClose: handleClose, title: node.name || 'Wall', width: 280, children: [_jsxs(PanelSection, { title: "Dimensions", children: [_jsx(SliderControl, { label: "Length", max: metersToLinearUnit(20, unit), min: metersToLinearUnit(0.1, unit), onChange: (value) => handleUpdateLength(linearControlValueToMeters(value, unit, { maxMeters: 20, minMeters: 0.1 })), precision: 2, step: unit === 'imperial' ? 0.1 : 0.01, unit: unitLabel, value: displayLength }), _jsx(SliderControl, { label: "Height", max: metersToLinearUnit(6, unit), min: metersToLinearUnit(0.1, unit), onChange: (v) => handleUpdate({
|
|
125
146
|
height: linearControlValueToMeters(v, unit, { maxMeters: 6, minMeters: 0.1 }),
|
|
126
|
-
}), precision: 2, step: 0.1, unit: unitLabel, value: Math.round(displayHeight * 100) / 100 }), _jsx(
|
|
127
|
-
|
|
147
|
+
}), precision: 2, step: 0.1, unit: unitLabel, value: Math.round(displayHeight * 100) / 100 }), _jsx("div", { className: "px-1 font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Base" }), _jsx(SegmentedControl, { onChange: handleBaseModeChange, options: [
|
|
148
|
+
{ label: 'Fixed', value: 'fixed' },
|
|
149
|
+
{ label: 'Follows level', value: 'terrain' },
|
|
150
|
+
], value: followsTerrain ? 'terrain' : 'fixed' }), followsTerrain && (_jsx("div", { className: "px-1 text-[11px] text-muted-foreground", children: "Extends downward to meet the terrain. Height and top stay unchanged." })), _jsx(SliderControl, { label: "Thickness", max: metersToLinearUnit(1, unit), min: metersToLinearUnit(0.05, unit), onChange: (v) => handleUpdate({
|
|
151
|
+
thickness: linearControlValueToMeters(v, unit, {
|
|
152
|
+
maxMeters: 1,
|
|
153
|
+
minMeters: 0.05,
|
|
154
|
+
}),
|
|
128
155
|
}), precision: 3, step: 0.01, unit: unitLabel, value: Math.round(displayThickness * 1000) / 1000 }), !hasWallChildrenBlockingCurve && (_jsx(SliderControl, { label: "Curve", max: Math.max(metersToLinearUnit(0.01, unit), displayMaxCurveOffset), min: -Math.max(metersToLinearUnit(0.01, unit), displayMaxCurveOffset), onChange: (v) => handleUpdate({
|
|
129
156
|
curveOffset: normalizeWallCurveOffset(node, linearControlValueToMeters(v, unit, {
|
|
130
157
|
maxMeters: curveOffsetLimit,
|
|
@@ -133,7 +160,7 @@ export default function WallPanel() {
|
|
|
133
160
|
}), precision: 2, step: 0.1, unit: unitLabel, value: Math.round(displayCurveOffset * 100) / 100 }))] }), _jsx(WallFaceBandSection, { node: node, onUpdate: handleUpdate, unit: unit, unitLabel: unitLabel, wallHeightMeters: wallHeightMeters }), _jsx(WallTrimSection, { node: node, onUpdate: handleUpdate, title: "Skirting", trimKey: "skirting", trimValue: skirting, unit: unit, unitLabel: unitLabel, wallHeightMeters: wallHeightMeters }), _jsx(WallTrimSection, { node: node, onUpdate: handleUpdate, title: "Crown molding", trimKey: "crown", trimValue: crown, unit: unit, unitLabel: unitLabel, wallHeightMeters: wallHeightMeters }), _jsx(WallTrimSection, { node: node, onUpdate: handleUpdate, title: "Chair rail", trimKey: "chairRail", trimValue: chairRail, unit: unit, unitLabel: unitLabel, wallHeightMeters: wallHeightMeters }), !hasWallChildrenBlockingCurve && (_jsx(PanelSection, { title: "Actions", children: _jsx(ActionGroup, { children: _jsx(ActionButton, { icon: _jsx(Spline, { className: "h-3.5 w-3.5" }), label: "Curve", onClick: handleCurve }) }) }))] }));
|
|
134
161
|
}
|
|
135
162
|
function WallFaceBandSection({ node, onUpdate, unit, unitLabel, wallHeightMeters, }) {
|
|
136
|
-
const bandConfig = getWallFaceBandConfig(node);
|
|
163
|
+
const bandConfig = getWallFaceBandConfig(node, wallHeightMeters);
|
|
137
164
|
const bandCount = bandConfig.count;
|
|
138
165
|
const lowerHeight = bandConfig.lowerHeight;
|
|
139
166
|
const middleHeight = bandConfig.middleHeight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/wall/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,oBAAoB,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/wall/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,oBAAoB,CAAC,QAAQ,CAmB1D,CAAA"}
|
package/dist/wall/parametrics.js
CHANGED
|
@@ -16,6 +16,8 @@ export const wallParametrics = {
|
|
|
16
16
|
label: 'Dimensions',
|
|
17
17
|
fields: [
|
|
18
18
|
{ key: 'thickness', kind: 'number', unit: 'm', min: 0.05, max: 0.6, step: 0.01 },
|
|
19
|
+
// `height` may be absent (plane-bound top); the custom panel owns the
|
|
20
|
+
// Follows storey / Custom height mode switch, so this is metadata only.
|
|
19
21
|
{ key: 'height', kind: 'number', unit: 'm', min: 1.5, max: 6, step: 0.05 },
|
|
20
22
|
{ key: 'curveOffset', kind: 'number', unit: 'm', min: -3, max: 3, step: 0.05 },
|
|
21
23
|
],
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type WallNode } from '@pascal-app/core';
|
|
2
|
+
import { ExtrudeGeometry } from 'three';
|
|
3
|
+
export declare function buildWallPreviewGeometry(node: Pick<WallNode, 'start' | 'end' | 'curveOffset' | 'height' | 'thickness'>): ExtrudeGeometry;
|
|
4
|
+
declare const WallPreview: ({ node }: {
|
|
5
|
+
node: WallNode;
|
|
6
|
+
}) => import("react").JSX.Element;
|
|
7
|
+
export default WallPreview;
|
|
8
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/wall/preview.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGvE,OAAO,EAAE,eAAe,EAAS,MAAM,OAAO,CAAA;AAK9C,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,aAAa,GAAG,QAAQ,GAAG,WAAW,CAAC,mBAsB/E;AAED,QAAA,MAAM,WAAW,GAAI,UAAU;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,gCAoBhD,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { getWallSurfacePolygon } from '@pascal-app/core';
|
|
4
|
+
import { EDITOR_LAYER } from '@pascal-app/editor';
|
|
5
|
+
import { useEffect, useMemo } from 'react';
|
|
6
|
+
import { ExtrudeGeometry, Shape } from 'three';
|
|
7
|
+
const WALL_PREVIEW_HEIGHT = 2.5;
|
|
8
|
+
const WALL_PREVIEW_THICKNESS = 0.1;
|
|
9
|
+
export function buildWallPreviewGeometry(node) {
|
|
10
|
+
const polygon = getWallSurfacePolygon({
|
|
11
|
+
start: node.start,
|
|
12
|
+
end: node.end,
|
|
13
|
+
curveOffset: node.curveOffset,
|
|
14
|
+
thickness: node.thickness ?? WALL_PREVIEW_THICKNESS,
|
|
15
|
+
});
|
|
16
|
+
const shape = new Shape();
|
|
17
|
+
polygon.forEach((point, index) => {
|
|
18
|
+
if (index === 0)
|
|
19
|
+
shape.moveTo(point.x, -point.y);
|
|
20
|
+
else
|
|
21
|
+
shape.lineTo(point.x, -point.y);
|
|
22
|
+
});
|
|
23
|
+
shape.closePath();
|
|
24
|
+
const geometry = new ExtrudeGeometry(shape, {
|
|
25
|
+
bevelEnabled: false,
|
|
26
|
+
depth: node.height ?? WALL_PREVIEW_HEIGHT,
|
|
27
|
+
steps: 1,
|
|
28
|
+
});
|
|
29
|
+
geometry.rotateX(-Math.PI / 2);
|
|
30
|
+
geometry.computeBoundingBox();
|
|
31
|
+
return geometry;
|
|
32
|
+
}
|
|
33
|
+
const WallPreview = ({ node }) => {
|
|
34
|
+
const { curveOffset, end, height, start, thickness } = node;
|
|
35
|
+
const geometry = useMemo(() => buildWallPreviewGeometry({ curveOffset, end, height, start, thickness }), [curveOffset, end, height, start, thickness]);
|
|
36
|
+
useEffect(() => () => geometry.dispose(), [geometry]);
|
|
37
|
+
return (_jsx("mesh", { geometry: geometry, layers: EDITOR_LAYER, raycast: () => undefined, renderOrder: 1, children: _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.5, transparent: true }) }));
|
|
38
|
+
};
|
|
39
|
+
export default WallPreview;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quick-measurement.d.ts","sourceRoot":"","sources":["../../src/wall/quick-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"quick-measurement.d.ts","sourceRoot":"","sources":["../../src/wall/quick-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,sBAAsB,EAE3B,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,sBAAsB,CA6B3E"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getWallCurveFrameAt, getWallCurveLength, getWallThickness, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
|
|
2
3
|
export function wallQuickMeasurement(node) {
|
|
3
4
|
const length = getWallCurveLength(node);
|
|
4
|
-
const height = node.
|
|
5
|
+
const height = resolveWallOpeningCeiling(node, useScene.getState().nodes);
|
|
5
6
|
const frame = getWallCurveFrameAt(node, 0.5);
|
|
6
7
|
return {
|
|
7
8
|
title: node.name ?? 'Wall',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/wall/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/wall/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AASzB;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,YAAY,GAAI,UAAU;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,gCAyFjD,CAAA;AAED,eAAe,YAAY,CAAA"}
|
package/dist/wall/renderer.js
CHANGED
|
@@ -3,7 +3,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useRegistry, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { getVisibleWallMaterials, NodeRenderer, useNodeEvents, useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useLayoutEffect, useMemo, useRef } from 'react';
|
|
6
|
+
import { useShallow } from 'zustand/react/shallow';
|
|
6
7
|
import { createPlaceholderGeometry } from '../shared/placeholder-geometry';
|
|
8
|
+
import { useWallTreatmentLevelData } from './treatment-level-data';
|
|
7
9
|
import { createWallExtraSlotMaterials, WallTreatments } from './treatments';
|
|
8
10
|
/**
|
|
9
11
|
* Thin wall renderer.
|
|
@@ -43,10 +45,10 @@ const WallRenderer = ({ node }) => {
|
|
|
43
45
|
const textures = useViewer((s) => s.textures);
|
|
44
46
|
const colorPreset = useViewer((s) => s.colorPreset);
|
|
45
47
|
const sceneTheme = useViewer((s) => s.sceneTheme);
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
.
|
|
49
|
-
|
|
48
|
+
const childNodes = useScene(useShallow((state) => (node.children ?? [])
|
|
49
|
+
.map((childId) => state.nodes[childId])
|
|
50
|
+
.filter((child) => child !== undefined)));
|
|
51
|
+
const treatmentLevelData = useWallTreatmentLevelData((state) => node.parentId ? state.byLevelId.get(node.parentId) : undefined);
|
|
50
52
|
// Subscribe to the scene-material palette so editing a `scene:` material a
|
|
51
53
|
// wall slot references re-renders the wall live (the wall-system geometry
|
|
52
54
|
// dirty loop never fires for a material-only edit). `getMaterialsForWall`'s
|
|
@@ -60,6 +62,6 @@ const WallRenderer = ({ node }) => {
|
|
|
60
62
|
for (const entry of owned)
|
|
61
63
|
entry.dispose();
|
|
62
64
|
}, [baseMaterials, extraMaterials]);
|
|
63
|
-
return (_jsxs("mesh", { castShadow: true, geometry: placeholderGeometry, material: baseMaterials, receiveShadow: true, ref: ref, visible: node.visible, children: [_jsx("mesh", { geometry: collisionPlaceholderGeometry, name: "collision-mesh", visible: false, ...handlers }), _jsx(WallTreatments, { childrenNodes: childNodes, materials: extraMaterials, node: node }), (node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, `${node.id}:${childId}`)))] }));
|
|
65
|
+
return (_jsxs("mesh", { castShadow: true, geometry: placeholderGeometry, material: baseMaterials, receiveShadow: true, ref: ref, visible: node.visible, children: [_jsx("mesh", { geometry: collisionPlaceholderGeometry, name: "collision-mesh", visible: false, ...handlers }), treatmentLevelData && (_jsx(WallTreatments, { childrenNodes: childNodes, levelData: treatmentLevelData, materials: extraMaterials, node: node })), (node.children ?? []).map((childId) => (_jsx(NodeRenderer, { nodeId: childId }, `${node.id}:${childId}`)))] }));
|
|
64
66
|
};
|
|
65
67
|
export default WallRenderer;
|
package/dist/wall/system.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* - **`WallSystem`** — reads `dirtyNodes`, batches by level, runs
|
|
5
5
|
* `calculateLevelMiters(levelWalls)`, rebuilds geometry via
|
|
6
|
-
* `generateExtrudedWall(node, children, miterData, slabElevation, baseElevation, baseSegments)`,
|
|
6
|
+
* `generateExtrudedWall(node, children, miterData, slabElevation, baseElevation, baseSegments, storeyHeight)`,
|
|
7
7
|
* and cascades to adjacent walls that share a junction. This is the
|
|
8
8
|
* bulk of the wall runtime (~820 lines in viewer).
|
|
9
9
|
* - **`WallCutout`** — cutaway-mode hide/show logic based on camera
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/wall/system.tsx"],"names":[],"mappings":"AAyCA;;;;;;;;;;GAUG;AACH,QAAA,MAAM,WAAW,mCAQhB,CAAA;AAED,eAAe,WAAW,CAAA"}
|
package/dist/wall/system.js
CHANGED
|
@@ -1,18 +1,53 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useLiveNodeOverrides, useScene } from '@pascal-app/core';
|
|
3
4
|
import { WallCutout, WallSystem } from '@pascal-app/viewer';
|
|
5
|
+
import { useFrame } from '@react-three/fiber';
|
|
6
|
+
import { buildWallTreatmentLevelData, useWallTreatmentLevelData } from './treatment-level-data';
|
|
7
|
+
import { wallTreatmentProudOffsets } from './treatments';
|
|
8
|
+
function effectiveWall(wall) {
|
|
9
|
+
const override = useLiveNodeOverrides.getState().get(wall.id);
|
|
10
|
+
return override ? { ...wall, ...override } : wall;
|
|
11
|
+
}
|
|
12
|
+
const WallTreatmentMiterSystem = () => {
|
|
13
|
+
useFrame(() => {
|
|
14
|
+
const { dirtyNodes, nodes } = useScene.getState();
|
|
15
|
+
if (dirtyNodes.size === 0)
|
|
16
|
+
return;
|
|
17
|
+
const dirtyLevelIds = new Set();
|
|
18
|
+
for (const id of dirtyNodes) {
|
|
19
|
+
const node = nodes[id];
|
|
20
|
+
if (node?.type === 'wall' && node.parentId)
|
|
21
|
+
dirtyLevelIds.add(node.parentId);
|
|
22
|
+
}
|
|
23
|
+
for (const levelId of dirtyLevelIds) {
|
|
24
|
+
const level = nodes[levelId];
|
|
25
|
+
if (level?.type !== 'level')
|
|
26
|
+
continue;
|
|
27
|
+
const walls = level.children
|
|
28
|
+
.map((id) => nodes[id])
|
|
29
|
+
.filter((node) => node?.type === 'wall')
|
|
30
|
+
.map(effectiveWall);
|
|
31
|
+
const proudOffsets = walls.flatMap(wallTreatmentProudOffsets);
|
|
32
|
+
useWallTreatmentLevelData
|
|
33
|
+
.getState()
|
|
34
|
+
.setLevelData(levelId, buildWallTreatmentLevelData(walls, proudOffsets));
|
|
35
|
+
}
|
|
36
|
+
}, -1);
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
4
39
|
/**
|
|
5
40
|
* Registry-driven wall system bundle.
|
|
6
41
|
*
|
|
7
42
|
* - **`WallSystem`** — reads `dirtyNodes`, batches by level, runs
|
|
8
43
|
* `calculateLevelMiters(levelWalls)`, rebuilds geometry via
|
|
9
|
-
* `generateExtrudedWall(node, children, miterData, slabElevation, baseElevation, baseSegments)`,
|
|
44
|
+
* `generateExtrudedWall(node, children, miterData, slabElevation, baseElevation, baseSegments, storeyHeight)`,
|
|
10
45
|
* and cascades to adjacent walls that share a junction. This is the
|
|
11
46
|
* bulk of the wall runtime (~820 lines in viewer).
|
|
12
47
|
* - **`WallCutout`** — cutaway-mode hide/show logic based on camera
|
|
13
48
|
* direction and `frontSide` / `backSide` interior/exterior tags.
|
|
14
49
|
*/
|
|
15
50
|
const WallSystems = () => {
|
|
16
|
-
return (_jsxs(_Fragment, { children: [_jsx(WallSystem, {}), _jsx(WallCutout, {})] }));
|
|
51
|
+
return (_jsxs(_Fragment, { children: [_jsx(WallTreatmentMiterSystem, {}), _jsx(WallSystem, {}), _jsx(WallCutout, {})] }));
|
|
17
52
|
};
|
|
18
53
|
export default WallSystems;
|
package/dist/wall/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/wall/tool.tsx"],"names":[],"mappings":"AAgcA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA+e5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|