@pascal-app/nodes 0.1.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +74 -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 +15 -1
- package/dist/fence/lift.d.ts +38 -0
- package/dist/fence/lift.d.ts.map +1 -0
- package/dist/fence/lift.js +51 -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 +46 -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/door/tool.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { DoorNode, emitter, isCurvedWall, sceneRegistry, spatialGridManager, useScene, } from '@pascal-app/core';
|
|
3
|
-
import { calculateCursorRotation, calculateItemRotation, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, } from '@pascal-app/editor';
|
|
2
|
+
import { DoorNode, emitter, isCurvedWall, sceneRegistry, spatialGridManager, useScene, WallNode as WallNodeSchema, } from '@pascal-app/core';
|
|
3
|
+
import { calculateCursorRotation, calculateItemRotation, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, } from '@pascal-app/editor';
|
|
4
4
|
import { useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import { BoxGeometry, EdgesGeometry, Vector3 } from 'three';
|
|
@@ -53,6 +53,36 @@ const DoorTool = () => {
|
|
|
53
53
|
const frameDepthRef = useRef(ghostStub.frameDepth);
|
|
54
54
|
useEffect(() => {
|
|
55
55
|
useScene.temporal.getState().pause();
|
|
56
|
+
const ownedPreviewIds = new Set();
|
|
57
|
+
const fallbackPreview = DoorNode.parse({
|
|
58
|
+
position: [0, 0, 0],
|
|
59
|
+
rotation: [0, 0, 0],
|
|
60
|
+
side: 'front',
|
|
61
|
+
});
|
|
62
|
+
const fallbackWallId = WallNodeSchema.parse({
|
|
63
|
+
end: [1, 0],
|
|
64
|
+
start: [0, 0],
|
|
65
|
+
thickness: 0.1,
|
|
66
|
+
}).id;
|
|
67
|
+
const publishPlacementPreview = (node, parentNode) => {
|
|
68
|
+
ownedPreviewIds.add(node.id);
|
|
69
|
+
usePlacementPreview.getState().set(node, parentNode);
|
|
70
|
+
};
|
|
71
|
+
const clearPlacementPreview = () => {
|
|
72
|
+
const current = usePlacementPreview.getState().node;
|
|
73
|
+
if (current && ownedPreviewIds.has(current.id))
|
|
74
|
+
usePlacementPreview.getState().clear();
|
|
75
|
+
};
|
|
76
|
+
const publishDraftPreview = (parentNode) => {
|
|
77
|
+
const draft = draftRef.current;
|
|
78
|
+
if (!draft)
|
|
79
|
+
return;
|
|
80
|
+
const live = useScene.getState().nodes[draft.id];
|
|
81
|
+
if (live?.type !== 'door')
|
|
82
|
+
return;
|
|
83
|
+
draftRef.current = live;
|
|
84
|
+
publishPlacementPreview(live, parentNode);
|
|
85
|
+
};
|
|
56
86
|
let hostKind = null;
|
|
57
87
|
// timeStamp of the most recent wall/roof mesh event. A wall/roof hover and
|
|
58
88
|
// the grid raycast from the SAME pointermove share the source DOM event's
|
|
@@ -74,16 +104,20 @@ const DoorTool = () => {
|
|
|
74
104
|
const id = getLevelId();
|
|
75
105
|
return id ? (sceneRegistry.nodes.get(id)?.position.y ?? 0) : 0;
|
|
76
106
|
};
|
|
77
|
-
const getSlabElevationForWall = (wall) => spatialGridManager.getSlabElevationForWall(wall.parentId ?? '', wall.start, wall.end);
|
|
107
|
+
const getSlabElevationForWall = (wall) => spatialGridManager.getSlabElevationForWall(wall.parentId ?? '', wall.start, wall.end, wall.curveOffset ?? 0, wall.thickness, wall.supportSlabId);
|
|
78
108
|
const markHostDirty = (hostId) => {
|
|
79
109
|
useScene.getState().dirtyNodes.add(hostId);
|
|
80
110
|
};
|
|
81
111
|
const destroyDraft = () => {
|
|
82
|
-
|
|
112
|
+
const draft = draftRef.current;
|
|
113
|
+
if (!draft) {
|
|
114
|
+
clearPlacementPreview();
|
|
83
115
|
return;
|
|
84
|
-
|
|
85
|
-
|
|
116
|
+
}
|
|
117
|
+
const wallId = draft.parentId;
|
|
118
|
+
useScene.getState().deleteNode(draft.id);
|
|
86
119
|
draftRef.current = null;
|
|
120
|
+
clearPlacementPreview();
|
|
87
121
|
if (wallId)
|
|
88
122
|
markHostDirty(wallId);
|
|
89
123
|
};
|
|
@@ -94,6 +128,7 @@ const DoorTool = () => {
|
|
|
94
128
|
clearOpeningGuides3D();
|
|
95
129
|
setFallbackPose(null);
|
|
96
130
|
useFacingPose.getState().clear();
|
|
131
|
+
clearPlacementPreview();
|
|
97
132
|
};
|
|
98
133
|
// Alignment candidates — anchors of every alignable object; refreshed
|
|
99
134
|
// after each placement. A door aligns by the plan position of its centre.
|
|
@@ -131,6 +166,23 @@ const DoorTool = () => {
|
|
|
131
166
|
rotationY: sideFlip ? Math.PI : 0,
|
|
132
167
|
side: sideFlip ? 'back' : 'front',
|
|
133
168
|
});
|
|
169
|
+
const halfWidth = fallbackPreview.width / 2 + 0.5;
|
|
170
|
+
const wall = WallNodeSchema.parse({
|
|
171
|
+
end: [position[0] + halfWidth, position[2]],
|
|
172
|
+
id: fallbackWallId,
|
|
173
|
+
start: [position[0] - halfWidth, position[2]],
|
|
174
|
+
thickness: 0.1,
|
|
175
|
+
});
|
|
176
|
+
const ghost = DoorNode.parse({
|
|
177
|
+
...fallbackPreview,
|
|
178
|
+
metadata: { isTransient: true },
|
|
179
|
+
parentId: wall.id,
|
|
180
|
+
position: [halfWidth, fallbackPreview.height / 2, 0],
|
|
181
|
+
rotation: [0, sideFlip ? Math.PI : 0, 0],
|
|
182
|
+
side: sideFlip ? 'back' : 'front',
|
|
183
|
+
wallId: wall.id,
|
|
184
|
+
});
|
|
185
|
+
publishPlacementPreview(ghost, wall);
|
|
134
186
|
useAlignmentGuides.getState().clear();
|
|
135
187
|
clearOpeningGuides3D();
|
|
136
188
|
// Off-host (invalid) floating ghost — no direction triangle.
|
|
@@ -202,6 +254,7 @@ const DoorTool = () => {
|
|
|
202
254
|
roofFace: undefined,
|
|
203
255
|
});
|
|
204
256
|
}
|
|
257
|
+
publishDraftPreview(wall);
|
|
205
258
|
updateCursor(wallLocalToWorld(wall, clampedX, clampedY, getLevelYOffset(), getSlabElevationForWall(wall)), cursorRotationY, valid, -clampedY);
|
|
206
259
|
if (draftRef.current) {
|
|
207
260
|
publishOpeningGuidesForWallEvent({
|
|
@@ -224,6 +277,7 @@ const DoorTool = () => {
|
|
|
224
277
|
const draft = draftRef.current;
|
|
225
278
|
if (!draft)
|
|
226
279
|
return;
|
|
280
|
+
clearPlacementPreview();
|
|
227
281
|
draftRef.current = null;
|
|
228
282
|
hostKind = null;
|
|
229
283
|
useScene.getState().deleteNode(draft.id);
|
|
@@ -404,6 +458,7 @@ const DoorTool = () => {
|
|
|
404
458
|
useScene.getState().createNode(node, segment.id);
|
|
405
459
|
draftRef.current = node;
|
|
406
460
|
}
|
|
461
|
+
publishDraftPreview(segment);
|
|
407
462
|
// Opening guides are wall-specific; clear them while over a roof face.
|
|
408
463
|
clearOpeningGuides3D();
|
|
409
464
|
updateRoofCursor(target, event.node);
|
|
@@ -420,6 +475,7 @@ const DoorTool = () => {
|
|
|
420
475
|
return;
|
|
421
476
|
const { segment, face, position } = target;
|
|
422
477
|
const draft = draftRef.current;
|
|
478
|
+
clearPlacementPreview();
|
|
423
479
|
draftRef.current = null;
|
|
424
480
|
hostKind = null;
|
|
425
481
|
useScene.getState().deleteNode(draft.id);
|
|
@@ -524,6 +580,7 @@ const DoorTool = () => {
|
|
|
524
580
|
return () => {
|
|
525
581
|
destroyDraft();
|
|
526
582
|
hideCursor();
|
|
583
|
+
clearPlacementPreview();
|
|
527
584
|
useAlignmentGuides.getState().clear();
|
|
528
585
|
clearOpeningGuides3D();
|
|
529
586
|
useScene.temporal.getState().resume();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAmarC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAmarC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAwE9D,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/dormer/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/dormer/tool.tsx"],"names":[],"mappings":"AA8BA;;;;;;;GAOG;AACH,QAAA,MAAM,UAAU,mCAyFf,CAAA;AAED,eAAe,UAAU,CAAA"}
|
package/dist/dormer/tool.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { DormerNode, useScene } from '@pascal-app/core';
|
|
4
|
+
import { usePlacementPreview } from '@pascal-app/editor';
|
|
4
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
5
|
-
import { useMemo } from 'react';
|
|
6
|
+
import { useEffect, useMemo } from 'react';
|
|
6
7
|
import { RoofAttachmentFallbackPreview } from '../shared/roof-attachment-fallback-preview';
|
|
7
8
|
import { dormerDefinition } from './definition';
|
|
8
9
|
import { DormerPlacementGuides } from './placement-guides';
|
|
@@ -62,8 +63,29 @@ const DormerTool = () => {
|
|
|
62
63
|
state.createNode(dormer, hit.segment.id);
|
|
63
64
|
state.dirtyNodes.add(hit.segment.id);
|
|
64
65
|
setSelection({ selectedIds: [dormer.id] });
|
|
66
|
+
usePlacementPreview.getState().clear();
|
|
65
67
|
},
|
|
66
68
|
});
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
const placementPreview = usePlacementPreview.getState();
|
|
71
|
+
if (!(hitSegment && hitLocal)) {
|
|
72
|
+
if (placementPreview.node?.id === previewNode.id)
|
|
73
|
+
placementPreview.clear();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
placementPreview.set(DormerNode.parse({
|
|
77
|
+
...previewNode,
|
|
78
|
+
parentId: hitSegment.id,
|
|
79
|
+
position: hitLocal,
|
|
80
|
+
roofSegmentId: hitSegment.id,
|
|
81
|
+
rotation: ghostRotation,
|
|
82
|
+
}), hitSegment);
|
|
83
|
+
}, [ghostRotation, hitLocal, hitSegment, previewNode]);
|
|
84
|
+
useEffect(() => () => {
|
|
85
|
+
const placementPreview = usePlacementPreview.getState();
|
|
86
|
+
if (placementPreview.node?.id === previewNode.id)
|
|
87
|
+
placementPreview.clear();
|
|
88
|
+
}, [previewNode.id]);
|
|
67
89
|
return (_jsxs(_Fragment, { children: [_jsx(RoofAttachmentFallbackPreview, { activeBuildingId: activeBuildingId, ghost: _jsx(DormerPreview, { node: previewNode, invalid: true }), onInvalidTarget: clearPreview }), activeBuildingId && segmentXform && hitLocal && (_jsxs("group", { position: segmentXform.position, quaternion: segmentXform.quaternion, children: [hitSegment && (_jsx(DormerPlacementGuides, { center: hitLocal, depth: previewNode.depth, rotation: ghostRotation, segment: hitSegment, width: previewNode.width })), _jsx("group", { position: hitLocal, children: _jsx("group", { "rotation-y": ghostRotation, children: _jsx(DormerPreview, { node: previewNode }) }) })] }))] }));
|
|
68
90
|
};
|
|
69
91
|
export default DormerTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-segment/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-segment/tool.tsx"],"names":[],"mappings":"AAgfA,QAAA,MAAM,eAAe,0CAukBpB,CAAA;AAmJD,eAAe,eAAe,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { DuctSegmentNode, emitter, getCeilingAt, getCeilingHeightAt, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { CursorSphere, DimensionPill, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
3
|
+
import { DuctSegmentNode, emitter, getCeilingAt, getCeilingHeightAt, resolveCeilingHeight, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { CursorSphere, DimensionPill, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, triggerSFX, useEditor, usePathDraftPreview, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Html } from '@react-three/drei';
|
|
7
7
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
@@ -436,6 +436,23 @@ const DuctSegmentTool = () => {
|
|
|
436
436
|
// Latest mouse clientY from grid:move; used so the Alt anchor knows where
|
|
437
437
|
// the cursor was at key-press time.
|
|
438
438
|
const lastClientYRef = useRef(null);
|
|
439
|
+
const ghostFittings = useMemo(() => {
|
|
440
|
+
const last = draftPoints.at(-1);
|
|
441
|
+
if (!(activeLevelId && last && cursorPos) || altActive)
|
|
442
|
+
return [];
|
|
443
|
+
const fittings = planDuctDraw(last, cursorPos, startPortRef.current, startBodyRef.current, endSnap.port, endSnap.body, profile)?.fittings ?? [];
|
|
444
|
+
return fittings.map((fitting, index) => ({
|
|
445
|
+
...fitting,
|
|
446
|
+
id: `duct-fitting_live-draft-${index}`,
|
|
447
|
+
parentId: activeLevelId,
|
|
448
|
+
}));
|
|
449
|
+
}, [activeLevelId, altActive, cursorPos, draftPoints, endSnap, profile]);
|
|
450
|
+
useEffect(() => {
|
|
451
|
+
usePathDraftPreview
|
|
452
|
+
.getState()
|
|
453
|
+
.setDraft('duct-segment', draftPoints, cursorPos, profile, ghostFittings);
|
|
454
|
+
}, [cursorPos, draftPoints, ghostFittings, profile]);
|
|
455
|
+
useEffect(() => () => usePathDraftPreview.getState().clear('duct-segment'), []);
|
|
439
456
|
useEffect(() => {
|
|
440
457
|
if (!activeLevelId)
|
|
441
458
|
return;
|
|
@@ -787,12 +804,6 @@ const DuctSegmentTool = () => {
|
|
|
787
804
|
if (last && cursorPos) {
|
|
788
805
|
previewSegments.push({ a: last, b: cursorPos });
|
|
789
806
|
}
|
|
790
|
-
// Ghost the auto-inserted fittings (elbow / tee / cross) the next click
|
|
791
|
-
// will mint, by running the SAME planner the commit uses against the
|
|
792
|
-
// in-flight endpoints. Skipped in Alt-vertical mode (no XZ tap there).
|
|
793
|
-
const ghostFittings = last && cursorPos && !altActive
|
|
794
|
-
? (planDuctDraw(last, cursorPos, startPortRef.current, startBodyRef.current, endSnap.port, endSnap.body, profile)?.fittings ?? [])
|
|
795
|
-
: [];
|
|
796
807
|
// Wall-style dimension pill above the cursor: absolute world coords before
|
|
797
808
|
// the first point, signed per-axis deltas from the last placed point while
|
|
798
809
|
// a segment is in flight. The actively-driven axis is emphasised — Y in
|
|
@@ -885,7 +896,7 @@ function CeilingHighlight({ ceiling }) {
|
|
|
885
896
|
}, [ceiling.polygon]);
|
|
886
897
|
if (!geometry)
|
|
887
898
|
return null;
|
|
888
|
-
const y = ceiling
|
|
899
|
+
const y = resolveCeilingHeight(ceiling, useScene.getState().nodes);
|
|
889
900
|
return (_jsxs("group", { position: [0, y, 0], children: [_jsx("mesh", { geometry: geometry, layers: EDITOR_LAYER, renderOrder: 1, children: _jsx("meshBasicMaterial", { color: "#818cf8", depthWrite: false, opacity: 0.15, side: DoubleSide, transparent: true }) }), outline && (_jsxs("line", { children: [_jsx("bufferGeometry", { ref: (g) => {
|
|
890
901
|
if (g)
|
|
891
902
|
g.setFromPoints(outline);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/duct-terminal/tool.tsx"],"names":[],"mappings":"AA6IA;;;;;;;;;GASG;AACH,QAAA,MAAM,gBAAgB,0CAwSrB,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { DuctTerminalNode, emitter, pointInPolygon, resolveLevelId, sceneRegistry, useScene, } from '@pascal-app/core';
|
|
3
|
+
import { DuctTerminalNode, emitter, pointInPolygon, resolveCeilingHeight, resolveLevelId, resolveSupportSlabPatch, sceneRegistry, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { CursorSphere, getFloorStackPreviewPosition, isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Html } from '@react-three/drei';
|
|
@@ -16,8 +16,6 @@ import { COLLAR_LENGTH, mountQuaternion } from './ports';
|
|
|
16
16
|
const PREVIEW_OPACITY = 0.55;
|
|
17
17
|
/** R/T yaw step — 45°. */
|
|
18
18
|
const ROTATE_STEP_RAD = Math.PI / 4;
|
|
19
|
-
/** Fallback height (meters) for a ceiling node that carries no `height`. */
|
|
20
|
-
const DEFAULT_CEILING_HEIGHT = 2.5;
|
|
21
19
|
/** Snap radius (meters) for mating the collar onto a nearby duct port. */
|
|
22
20
|
const PORT_SNAP_RADIUS_M = 0.5;
|
|
23
21
|
const MOUNT_CYCLE = ['floor', 'ceiling', 'wall'];
|
|
@@ -177,7 +175,7 @@ const DuctTerminalTool = () => {
|
|
|
177
175
|
if (resolveLevelId(node, nodes) !== activeLevelId)
|
|
178
176
|
continue;
|
|
179
177
|
const ceiling = node;
|
|
180
|
-
const height = ceiling
|
|
178
|
+
const height = resolveCeilingHeight(ceiling, nodes);
|
|
181
179
|
const hit = hitLocalPlane(nativeEvent, height);
|
|
182
180
|
if (!hit)
|
|
183
181
|
continue;
|
|
@@ -239,9 +237,14 @@ const DuctTerminalTool = () => {
|
|
|
239
237
|
mount: p.mount,
|
|
240
238
|
position: p.position,
|
|
241
239
|
rotation: p.yaw,
|
|
240
|
+
parentId: activeLevelId,
|
|
242
241
|
});
|
|
243
|
-
|
|
244
|
-
|
|
242
|
+
const committedTerminal = DuctTerminalNode.parse({
|
|
243
|
+
...terminal,
|
|
244
|
+
...resolveSupportSlabPatch(terminal, useScene.getState().nodes),
|
|
245
|
+
});
|
|
246
|
+
useScene.getState().createNode(committedTerminal, activeLevelId);
|
|
247
|
+
useViewer.getState().setSelection({ selectedIds: [committedTerminal.id] });
|
|
245
248
|
triggerSFX('sfx:item-place');
|
|
246
249
|
};
|
|
247
250
|
// ---- Floor / ceiling: own raycast against a horizontal plane ----
|
|
@@ -4,18 +4,14 @@ import { type ElevatorNode, type FloorplanAffordance } from '@pascal-app/core';
|
|
|
4
4
|
* `linear-resize` handles declared in `definition.ts` — `anchor: 'center'`
|
|
5
5
|
* means dragging outward on either +X or -X edge grows `width` by 2×
|
|
6
6
|
* the elevator-local cursor offset while `position` stays put. Same for
|
|
7
|
-
* +Z / -Z and `depth`.
|
|
8
|
-
* the registry dispatcher snapshots / pauses history at start so the
|
|
9
|
-
* per-tick writes collapse into one undoable entry on commit.
|
|
7
|
+
* +Z / -Z and `depth`.
|
|
10
8
|
*/
|
|
11
9
|
export declare const elevatorResizeAffordance: FloorplanAffordance<ElevatorNode>;
|
|
12
10
|
/**
|
|
13
11
|
* Elevator rotation drag (floor-plan). Sister to the 3D `arc-resize`
|
|
14
12
|
* handle declared in `definition.ts`. Same `- delta` sign convention as
|
|
15
13
|
* the 3D path so dragging the cursor in the same direction in both views
|
|
16
|
-
* produces the same rotation.
|
|
17
|
-
* the registry dispatcher captures a snapshot first and re-applies the
|
|
18
|
-
* single tracked update on pointer-up.
|
|
14
|
+
* produces the same rotation.
|
|
19
15
|
*/
|
|
20
16
|
export declare const elevatorRotateAffordance: FloorplanAffordance<ElevatorNode>;
|
|
21
17
|
//# sourceMappingURL=floorplan-affordances.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/elevator/floorplan-affordances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"floorplan-affordances.d.ts","sourceRoot":"","sources":["../../src/elevator/floorplan-affordances.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,kBAAkB,CAAA;AAQzB;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,CAAC,YAAY,CA8CtE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,CAAC,YAAY,CAgCtE,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { useScene, } from '@pascal-app/core';
|
|
1
|
+
import { useLiveNodeOverrides, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { isAngleSnapActive } from '@pascal-app/editor';
|
|
2
3
|
import { rotateAffordanceDelta } from '../shared/rotate-affordance';
|
|
3
4
|
const MIN_ELEVATOR_DIM = 0.6;
|
|
4
5
|
/**
|
|
@@ -6,9 +7,7 @@ const MIN_ELEVATOR_DIM = 0.6;
|
|
|
6
7
|
* `linear-resize` handles declared in `definition.ts` — `anchor: 'center'`
|
|
7
8
|
* means dragging outward on either +X or -X edge grows `width` by 2×
|
|
8
9
|
* the elevator-local cursor offset while `position` stays put. Same for
|
|
9
|
-
* +Z / -Z and `depth`.
|
|
10
|
-
* the registry dispatcher snapshots / pauses history at start so the
|
|
11
|
-
* per-tick writes collapse into one undoable entry on commit.
|
|
10
|
+
* +Z / -Z and `depth`.
|
|
12
11
|
*/
|
|
13
12
|
export const elevatorResizeAffordance = {
|
|
14
13
|
start({ node, payload, initialPlanPoint }) {
|
|
@@ -39,14 +38,16 @@ export const elevatorResizeAffordance = {
|
|
|
39
38
|
const delta = (currentLocal - initialLocal) * side;
|
|
40
39
|
const newValue = Math.max(MIN_ELEVATOR_DIM, initialValue + 2 * delta);
|
|
41
40
|
lastValue = newValue;
|
|
42
|
-
|
|
41
|
+
useLiveNodeOverrides
|
|
43
42
|
.getState()
|
|
44
|
-
.
|
|
43
|
+
.set(elevatorId, axis === 'x' ? { width: newValue } : { depth: newValue });
|
|
44
|
+
useScene.getState().markDirty(elevatorId);
|
|
45
45
|
},
|
|
46
46
|
canCommit() {
|
|
47
47
|
return true;
|
|
48
48
|
},
|
|
49
49
|
commit() {
|
|
50
|
+
useLiveNodeOverrides.getState().clear(elevatorId);
|
|
50
51
|
useScene
|
|
51
52
|
.getState()
|
|
52
53
|
.updateNode(elevatorId, axis === 'x' ? { width: lastValue } : { depth: lastValue });
|
|
@@ -58,9 +59,7 @@ export const elevatorResizeAffordance = {
|
|
|
58
59
|
* Elevator rotation drag (floor-plan). Sister to the 3D `arc-resize`
|
|
59
60
|
* handle declared in `definition.ts`. Same `- delta` sign convention as
|
|
60
61
|
* the 3D path so dragging the cursor in the same direction in both views
|
|
61
|
-
* produces the same rotation.
|
|
62
|
-
* the registry dispatcher captures a snapshot first and re-applies the
|
|
63
|
-
* single tracked update on pointer-up.
|
|
62
|
+
* produces the same rotation.
|
|
64
63
|
*/
|
|
65
64
|
export const elevatorRotateAffordance = {
|
|
66
65
|
start({ node, initialPlanPoint }) {
|
|
@@ -72,21 +71,23 @@ export const elevatorRotateAffordance = {
|
|
|
72
71
|
let lastRotation = initialRotation;
|
|
73
72
|
return {
|
|
74
73
|
affectedIds: [elevatorId],
|
|
75
|
-
apply({ planPoint
|
|
74
|
+
apply({ planPoint }) {
|
|
76
75
|
const delta = rotateAffordanceDelta({
|
|
77
76
|
center: [cx, cz],
|
|
78
77
|
initialAngle,
|
|
79
78
|
planPoint,
|
|
80
|
-
free:
|
|
79
|
+
free: !isAngleSnapActive(),
|
|
81
80
|
});
|
|
82
81
|
const newRotation = initialRotation - delta;
|
|
83
82
|
lastRotation = newRotation;
|
|
84
|
-
|
|
83
|
+
useLiveNodeOverrides.getState().set(elevatorId, { rotation: newRotation });
|
|
84
|
+
useScene.getState().markDirty(elevatorId);
|
|
85
85
|
},
|
|
86
86
|
canCommit() {
|
|
87
87
|
return true;
|
|
88
88
|
},
|
|
89
89
|
commit() {
|
|
90
|
+
useLiveNodeOverrides.getState().clear(elevatorId);
|
|
90
91
|
useScene.getState().updateNode(elevatorId, { rotation: lastRotation });
|
|
91
92
|
},
|
|
92
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-endpoint.d.ts","sourceRoot":"","sources":["../../../src/fence/actions/move-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"move-endpoint.d.ts","sourceRoot":"","sources":["../../../src/fence/actions/move-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,SAAS,EAId,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,KAAK,cAAc,EAOpB,MAAM,oBAAoB,CAAA;AA2C3B,KAAK,mBAAmB,GAAG;IACzB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IACnB,KAAK,EAAE,cAAc,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,OAAO,GAAG,KAAK,CAAA;IACzB,aAAa,EAAE,cAAc,CAAA;IAC7B,WAAW,EAAE,cAAc,CAAA;IAC3B,mBAAmB,EAAE,cAAc,CAAA;IACnC,UAAU,EAAE,cAAc,CAAA;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,eAAe,EAAE,mBAAmB,EAAE,CAAA;IACtC,UAAU,EAAE,QAAQ,EAAE,CAAA;IACtB,WAAW,EAAE,SAAS,EAAE,CAAA;IACxB;4DACwD;IACxD,eAAe,EAAE,eAAe,EAAE,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,cAAc,CAAA;IAC3B,KAAK,EAAE,cAAc,CAAA;IACrB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,mBAAmB,EAAE,CAAA;IACpC,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAuDD,eAAO,MAAM,2BAA2B,EAAE,UAAU,CAAC,oBAAoB,EAAE,sBAAsB,CA6J9F,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { collectAlignmentAnchors, resolveAlignment, useScene, } from '@pascal-app/core';
|
|
1
|
+
import { collectAlignmentAnchors, resolveAlignment, resolveFenceSupportSlabPatch, useScene, } from '@pascal-app/core';
|
|
2
2
|
import { isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, isSegmentLongEnough, snapFenceDraftPoint, useAlignmentGuides, } from '@pascal-app/editor';
|
|
3
3
|
/**
|
|
4
4
|
* Phase 5 Stage D — move-fence-endpoint drag affordance.
|
|
@@ -55,6 +55,23 @@ function snapshotLinked(fenceId, parentId, linkedPoint) {
|
|
|
55
55
|
}
|
|
56
56
|
return out;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Re-elect the slab lift host for the given fences from their CURRENT
|
|
60
|
+
* store state (call after the endpoint writes). Only writes when the host
|
|
61
|
+
* actually changes, so unaffected drags stay patch-free.
|
|
62
|
+
*/
|
|
63
|
+
function applyFenceSupportPatches(ids, scene) {
|
|
64
|
+
const nodes = useScene.getState().nodes;
|
|
65
|
+
for (const id of ids) {
|
|
66
|
+
const fence = nodes[id];
|
|
67
|
+
if (fence?.type !== 'fence')
|
|
68
|
+
continue;
|
|
69
|
+
const patch = resolveFenceSupportSlabPatch(fence, nodes);
|
|
70
|
+
if (patch.supportSlabId !== fence.supportSlabId) {
|
|
71
|
+
scene.update(id, patch);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
58
75
|
function linkedCascade(linked, origin, next) {
|
|
59
76
|
return linked.map((l) => ({
|
|
60
77
|
id: l.id,
|
|
@@ -164,6 +181,10 @@ export const moveFenceEndpointDragAction = {
|
|
|
164
181
|
});
|
|
165
182
|
dirty.push(linked.id);
|
|
166
183
|
}
|
|
184
|
+
// Re-elect the lift host live: a fence dragged onto / off an elevated
|
|
185
|
+
// deck rises or drops with the pointer instead of waiting for commit
|
|
186
|
+
// (fences run no per-frame election — `supportSlabId` IS the lift).
|
|
187
|
+
applyFenceSupportPatches(dirty, scene);
|
|
167
188
|
return dirty;
|
|
168
189
|
},
|
|
169
190
|
commit: (draft, ctx, scene) => {
|
|
@@ -183,14 +204,21 @@ export const moveFenceEndpointDragAction = {
|
|
|
183
204
|
scene.restoreAll();
|
|
184
205
|
scene.resumeHistory();
|
|
185
206
|
scene.update(ctx.fenceId, { start: draft.start, end: draft.end });
|
|
207
|
+
const patched = [ctx.fenceId];
|
|
186
208
|
if (!draft.detached) {
|
|
187
209
|
for (const linked of draft.linkedUpdates) {
|
|
188
210
|
scene.update(linked.id, {
|
|
189
211
|
start: linked.start,
|
|
190
212
|
end: linked.end,
|
|
191
213
|
});
|
|
214
|
+
patched.push(linked.id);
|
|
192
215
|
}
|
|
193
216
|
}
|
|
217
|
+
// The restoreAll above reverted any live host patch — re-run the
|
|
218
|
+
// election against the final endpoints so the committed fence stands
|
|
219
|
+
// on (or leaves) its deck. Uncapped: an endpoint drag has no commit
|
|
220
|
+
// pointer ray worth trusting, matching the wall move commits.
|
|
221
|
+
applyFenceSupportPatches(patched, scene);
|
|
194
222
|
return true;
|
|
195
223
|
},
|
|
196
224
|
cancel: (_ctx, _scene) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/fence/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/fence/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AAkBzB,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAgPpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAyH5D,CAAA"}
|