@pascal-app/nodes 1.0.3 → 1.0.4
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/dist/block/definition.d.ts.map +1 -1
- package/dist/block/definition.js +18 -3
- package/dist/block/floorplan.d.ts +11 -1
- package/dist/block/floorplan.d.ts.map +1 -1
- package/dist/block/floorplan.js +81 -13
- package/dist/block/geometry.d.ts +2 -2
- package/dist/block/geometry.d.ts.map +1 -1
- package/dist/block/geometry.js +39 -24
- package/dist/block/hosted-edit.d.ts.map +1 -1
- package/dist/block/hosted-edit.js +25 -0
- package/dist/block/material-slots.d.ts +1 -3
- package/dist/block/material-slots.d.ts.map +1 -1
- package/dist/block/material-slots.js +1 -11
- package/dist/block/paint.d.ts.map +1 -1
- package/dist/block/paint.js +4 -10
- package/dist/block/panel.d.ts.map +1 -1
- package/dist/block/panel.js +8 -3
- package/dist/block/selection.d.ts.map +1 -1
- package/dist/block/selection.js +2 -2
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +2 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +5 -28
- package/dist/cabinet/countertop-layout.d.ts +13 -2
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +1 -2
- package/dist/cabinet/floorplan.d.ts.map +1 -1
- package/dist/cabinet/floorplan.js +125 -28
- package/dist/cabinet/geometry/shared.d.ts +1 -2
- package/dist/cabinet/geometry/shared.d.ts.map +1 -1
- package/dist/cabinet/geometry/shared.js +1 -2
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +8 -5
- package/dist/cabinet/run-ops.d.ts +13 -2
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +22 -24
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +8 -8
- package/dist/ceiling/boundary-editor.d.ts.map +1 -1
- package/dist/ceiling/boundary-editor.js +5 -3
- package/dist/ceiling/definition.d.ts +4 -4
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +15 -15
- package/dist/ceiling/floorplan-affordances.d.ts +84 -4
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/floorplan-affordances.js +0 -1
- package/dist/ceiling/floorplan-move.d.ts.map +1 -1
- package/dist/ceiling/floorplan-move.js +0 -1
- package/dist/ceiling/floorplan.d.ts +1 -1
- package/dist/ceiling/floorplan.d.ts.map +1 -1
- package/dist/ceiling/floorplan.js +2 -1
- package/dist/ceiling/height-bounds.d.ts +19 -0
- package/dist/ceiling/height-bounds.d.ts.map +1 -0
- package/dist/ceiling/height-bounds.js +24 -0
- package/dist/ceiling/hole-editor.d.ts.map +1 -1
- package/dist/ceiling/hole-editor.js +3 -4
- package/dist/ceiling/materials.d.ts +1 -1
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +10 -3
- package/dist/ceiling/paint.d.ts +2 -8
- package/dist/ceiling/paint.d.ts.map +1 -1
- package/dist/ceiling/paint.js +121 -24
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +40 -23
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +41 -5
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +8 -2
- package/dist/chimney/paint.d.ts.map +1 -1
- package/dist/chimney/paint.js +3 -10
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +24 -2
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +5 -0
- package/dist/column/floorplan.d.ts +1 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +47 -2
- package/dist/column/hosted-resize.d.ts +101 -2
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +147 -146
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +6 -4
- package/dist/column/surface.d.ts.map +1 -1
- package/dist/column/surface.js +7 -0
- package/dist/construction-dimension/floorplan.js +7 -3
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +2 -8
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +5 -23
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +12 -3
- package/dist/door/door-math.d.ts +5 -10
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +14 -15
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +3 -1
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +55 -21
- package/dist/door/mechanism.d.ts +4 -0
- package/dist/door/mechanism.d.ts.map +1 -0
- package/dist/door/mechanism.js +24 -0
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +72 -48
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +3 -0
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +34 -259
- package/dist/door/placement.d.ts +45 -0
- package/dist/door/placement.d.ts.map +1 -0
- package/dist/door/placement.js +51 -0
- package/dist/door/preview.d.ts.map +1 -1
- package/dist/door/preview.js +2 -0
- package/dist/door/renderer.d.ts.map +1 -1
- package/dist/door/renderer.js +3 -2
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +92 -21
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +2 -0
- package/dist/dormer/paint.d.ts.map +1 -1
- package/dist/dormer/paint.js +2 -5
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +4 -14
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +2 -2
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.js +2 -1
- package/dist/duct-fitting/geometry.d.ts.map +1 -1
- package/dist/duct-fitting/geometry.js +1 -1
- package/dist/duct-fitting/move-tool.d.ts.map +1 -1
- package/dist/duct-fitting/move-tool.js +8 -2
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.js +2 -2
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +1 -1
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +8 -2
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +1 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +5 -27
- package/dist/elevator/parametrics.js +1 -1
- package/dist/elevator/renderer.d.ts.map +1 -1
- package/dist/elevator/renderer.js +3 -4
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +2 -5
- package/dist/eyebrow-vent/paint.d.ts.map +1 -1
- package/dist/eyebrow-vent/paint.js +3 -6
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +5 -23
- package/dist/fence/actions/move-endpoint.d.ts +1 -1
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
- package/dist/fence/actions/move-endpoint.js +2 -1
- package/dist/fence/definition.d.ts +2 -1
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +83 -28
- package/dist/fence/drafting.d.ts +36 -0
- package/dist/fence/drafting.d.ts.map +1 -0
- package/dist/fence/drafting.js +210 -0
- package/dist/fence/feature-tool.d.ts +4 -0
- package/dist/fence/feature-tool.d.ts.map +1 -0
- package/dist/fence/feature-tool.js +140 -0
- package/dist/fence/features.d.ts +2 -0
- package/dist/fence/features.d.ts.map +1 -0
- package/dist/fence/features.js +12 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +2 -1
- package/dist/fence/floorplan.d.ts +2 -3
- package/dist/fence/floorplan.d.ts.map +1 -1
- package/dist/fence/floorplan.js +131 -71
- package/dist/fence/geometry-parts.d.ts +50 -0
- package/dist/fence/geometry-parts.d.ts.map +1 -0
- package/dist/fence/geometry-parts.js +1144 -0
- package/dist/fence/geometry.d.ts +2 -3
- package/dist/fence/geometry.d.ts.map +1 -1
- package/dist/fence/geometry.js +84 -7
- package/dist/fence/index.d.ts +1 -0
- package/dist/fence/index.d.ts.map +1 -1
- package/dist/fence/index.js +1 -0
- package/dist/fence/inspector-editors.d.ts +15 -0
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +128 -3
- package/dist/fence/lift.d.ts.map +1 -1
- package/dist/fence/lift.js +5 -2
- package/dist/fence/move-tool.js +2 -1
- package/dist/fence/panel-model.d.ts +4 -0
- package/dist/fence/panel-model.d.ts.map +1 -0
- package/dist/fence/panel-model.js +12 -0
- package/dist/fence/parametrics.d.ts +0 -12
- package/dist/fence/parametrics.d.ts.map +1 -1
- package/dist/fence/parametrics.js +185 -18
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +141 -31
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +256 -47
- package/dist/fence-feature/actions.d.ts +7 -0
- package/dist/fence-feature/actions.d.ts.map +1 -0
- package/dist/fence-feature/actions.js +26 -0
- package/dist/fence-feature/definition.d.ts +4 -0
- package/dist/fence-feature/definition.d.ts.map +1 -0
- package/dist/fence-feature/definition.js +112 -0
- package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
- package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
- package/dist/fence-feature/floorplan-affordances.js +37 -0
- package/dist/fence-feature/floorplan.d.ts +4 -0
- package/dist/fence-feature/floorplan.d.ts.map +1 -0
- package/dist/fence-feature/floorplan.js +120 -0
- package/dist/fence-feature/geometry.d.ts +5 -0
- package/dist/fence-feature/geometry.d.ts.map +1 -0
- package/dist/fence-feature/geometry.js +43 -0
- package/dist/fence-feature/handles.d.ts +5 -0
- package/dist/fence-feature/handles.d.ts.map +1 -0
- package/dist/fence-feature/handles.js +84 -0
- package/dist/fence-feature/inspector.d.ts +6 -0
- package/dist/fence-feature/inspector.d.ts.map +1 -0
- package/dist/fence-feature/inspector.js +214 -0
- package/dist/fence-feature/interaction.d.ts +3 -0
- package/dist/fence-feature/interaction.d.ts.map +1 -0
- package/dist/fence-feature/interaction.js +41 -0
- package/dist/fence-feature/move-session.d.ts +9 -0
- package/dist/fence-feature/move-session.d.ts.map +1 -0
- package/dist/fence-feature/move-session.js +48 -0
- package/dist/fence-feature/move-tool.d.ts +5 -0
- package/dist/fence-feature/move-tool.d.ts.map +1 -0
- package/dist/fence-feature/move-tool.js +58 -0
- package/dist/fence-feature/pick-target.d.ts +7 -0
- package/dist/fence-feature/pick-target.d.ts.map +1 -0
- package/dist/fence-feature/pick-target.js +52 -0
- package/dist/floor-opening/definition.d.ts +3 -0
- package/dist/floor-opening/definition.d.ts.map +1 -0
- package/dist/floor-opening/definition.js +41 -0
- package/dist/floor-opening/floorplan.d.ts +156 -0
- package/dist/floor-opening/floorplan.d.ts.map +1 -0
- package/dist/floor-opening/floorplan.js +63 -0
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +2 -2
- package/dist/imported-mesh/definition.d.ts.map +1 -1
- package/dist/imported-mesh/definition.js +2 -0
- package/dist/imported-mesh/geometry.d.ts +1 -1
- package/dist/imported-mesh/geometry.d.ts.map +1 -1
- package/dist/imported-mesh/geometry.js +40 -12
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/item/authored-face-host.d.ts +10 -0
- package/dist/item/authored-face-host.d.ts.map +1 -0
- package/dist/item/authored-face-host.js +87 -0
- package/dist/item/authored-params.d.ts +15 -0
- package/dist/item/authored-params.d.ts.map +1 -0
- package/dist/item/authored-params.js +72 -0
- package/dist/item/definition.d.ts +2 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +33 -4
- package/dist/item/floorplan.d.ts +1 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +35 -5
- package/dist/item/index.d.ts +1 -0
- package/dist/item/index.d.ts.map +1 -1
- package/dist/item/index.js +1 -0
- package/dist/item/model-loader.d.ts +2 -0
- package/dist/item/model-loader.d.ts.map +1 -1
- package/dist/item/model-loader.js +55 -23
- package/dist/item/move-tool.js +4 -4
- package/dist/item/paint.d.ts.map +1 -1
- package/dist/item/paint.js +5 -24
- package/dist/item/panel.d.ts +1 -3
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +20 -24
- package/dist/item/placement-notice.d.ts +14 -0
- package/dist/item/placement-notice.d.ts.map +1 -0
- package/dist/item/placement-notice.js +38 -0
- package/dist/item/plan-symbols.d.ts +67 -0
- package/dist/item/plan-symbols.d.ts.map +1 -0
- package/dist/item/plan-symbols.js +407 -0
- package/dist/item/renderer.d.ts +10 -0
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +64 -38
- package/dist/item/script-param-defaults.d.ts +12 -0
- package/dist/item/script-param-defaults.d.ts.map +1 -0
- package/dist/item/script-param-defaults.js +34 -0
- package/dist/lean-to-extension/definition.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.js +1 -2
- package/dist/lean-to-extension/geometry.d.ts.map +1 -1
- package/dist/lean-to-extension/geometry.js +1 -1
- package/dist/lean-to-extension/layout.d.ts.map +1 -1
- package/dist/lean-to-extension/layout.js +2 -3
- package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
- package/dist/lean-to-extension/placement-validation.js +5 -5
- package/dist/lean-to-extension/tool.d.ts.map +1 -1
- package/dist/lean-to-extension/tool.js +5 -5
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +8 -2
- package/dist/liquid-line/move-tool.d.ts.map +1 -1
- package/dist/liquid-line/move-tool.js +8 -2
- package/dist/measurement/definition.js +1 -1
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
- package/dist/pipe-fitting/move-tool.js +8 -2
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +8 -2
- package/dist/procedural-item/animation.d.ts +8 -0
- package/dist/procedural-item/animation.d.ts.map +1 -0
- package/dist/procedural-item/animation.js +116 -0
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.js +74 -8
- package/dist/procedural-item/geometry.d.ts +5 -1
- package/dist/procedural-item/geometry.d.ts.map +1 -1
- package/dist/procedural-item/geometry.js +239 -15
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.js +272 -23
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +5 -23
- package/dist/ridge-vent/renderer.d.ts.map +1 -1
- package/dist/ridge-vent/renderer.js +9 -8
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +4 -1
- package/dist/roof/floorplan.d.ts +8 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +194 -18
- package/dist/roof/panel-model.d.ts.map +1 -1
- package/dist/roof/panel-model.js +10 -6
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +3 -10
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +5 -2
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +5 -24
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +17 -8
- package/dist/separator/definition.d.ts +3 -0
- package/dist/separator/definition.d.ts.map +1 -0
- package/dist/separator/definition.js +39 -0
- package/dist/separator/renderer.d.ts +5 -0
- package/dist/separator/renderer.d.ts.map +1 -0
- package/dist/separator/renderer.js +36 -0
- package/dist/shared/duct-body-paint.d.ts +0 -4
- package/dist/shared/duct-body-paint.d.ts.map +1 -1
- package/dist/shared/duct-body-paint.js +1 -5
- package/dist/shared/item-interaction-actions.d.ts +6 -0
- package/dist/shared/item-interaction-actions.d.ts.map +1 -0
- package/dist/shared/item-interaction-actions.js +27 -0
- package/dist/shared/item-interactions.d.ts +9 -0
- package/dist/shared/item-interactions.d.ts.map +1 -0
- package/dist/shared/item-interactions.js +74 -0
- package/dist/shared/item-light-placement.d.ts +2 -0
- package/dist/shared/item-light-placement.d.ts.map +1 -0
- package/dist/shared/item-light-placement.js +3 -0
- package/dist/shared/move-roof-tool.js +2 -1
- package/dist/shared/node-batch/batchable.d.ts +12 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -0
- package/dist/shared/node-batch/batchable.js +41 -0
- package/dist/shared/node-batch/candidates.d.ts +7 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +43 -59
- package/dist/shared/node-batch/release.d.ts +8 -0
- package/dist/shared/node-batch/release.d.ts.map +1 -0
- package/dist/shared/node-batch/release.js +16 -0
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +17 -12
- package/dist/shared/node-batch/types.d.ts +4 -1
- package/dist/shared/node-batch/types.d.ts.map +1 -1
- package/dist/shared/opening-documentation.d.ts +13 -1
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +245 -59
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +17 -14
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +3 -3
- package/dist/shared/opening-plane-offset.d.ts +23 -0
- package/dist/shared/opening-plane-offset.d.ts.map +1 -0
- package/dist/shared/opening-plane-offset.js +24 -0
- package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
- package/dist/shared/polygon-centroid-move.js +4 -1
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +19 -15
- package/dist/shared/run-hangers.d.ts.map +1 -1
- package/dist/shared/run-hangers.js +5 -4
- package/dist/shared/scripted-opening-handles.d.ts +18 -0
- package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
- package/dist/shared/scripted-opening-handles.js +53 -0
- package/dist/shared/scripted-opening.d.ts +25 -0
- package/dist/shared/scripted-opening.d.ts.map +1 -0
- package/dist/shared/scripted-opening.js +72 -0
- package/dist/shared/slot-paint.d.ts +14 -2
- package/dist/shared/slot-paint.d.ts.map +1 -1
- package/dist/shared/slot-paint.js +29 -29
- package/dist/shared/surface-paint.d.ts.map +1 -1
- package/dist/shared/surface-paint.js +2 -5
- package/dist/shared/swap-preview-material.d.ts +11 -0
- package/dist/shared/swap-preview-material.d.ts.map +1 -0
- package/dist/shared/swap-preview-material.js +16 -0
- package/dist/shared/system-checks.d.ts.map +1 -1
- package/dist/shared/system-checks.js +5 -3
- package/dist/shared/wall-attach-target.d.ts +3 -10
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +3 -63
- package/dist/shared/wall-opening-ceiling.d.ts +5 -15
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
- package/dist/shared/wall-opening-ceiling.js +10 -18
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +1 -1
- package/dist/shelf/geometry.d.ts.map +1 -1
- package/dist/shelf/geometry.js +1 -2
- package/dist/shelf/paint.d.ts.map +1 -1
- package/dist/shelf/paint.js +4 -10
- package/dist/site/line-ribbon.d.ts +31 -0
- package/dist/site/line-ribbon.d.ts.map +1 -0
- package/dist/site/line-ribbon.js +117 -0
- package/dist/site/lot-mask.d.ts +18 -0
- package/dist/site/lot-mask.d.ts.map +1 -0
- package/dist/site/lot-mask.js +35 -0
- package/dist/site/panel.d.ts +10 -0
- package/dist/site/panel.d.ts.map +1 -0
- package/dist/site/panel.js +155 -0
- package/dist/site/parametrics.d.ts +7 -0
- package/dist/site/parametrics.d.ts.map +1 -1
- package/dist/site/parametrics.js +8 -0
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
- package/dist/site/recessed-slab-ground-holes.js +5 -2
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +150 -19
- package/dist/site/setbacks.d.ts +33 -0
- package/dist/site/setbacks.d.ts.map +1 -0
- package/dist/site/setbacks.js +204 -0
- package/dist/site/terrain-geometry.d.ts +28 -1
- package/dist/site/terrain-geometry.d.ts.map +1 -1
- package/dist/site/terrain-geometry.js +78 -4
- package/dist/site/terrain-holes.d.ts +15 -0
- package/dist/site/terrain-holes.d.ts.map +1 -0
- package/dist/site/terrain-holes.js +74 -0
- package/dist/site/terrain-mesh.d.ts +9 -2
- package/dist/site/terrain-mesh.d.ts.map +1 -1
- package/dist/site/terrain-mesh.js +36 -9
- package/dist/site/terrain-renderer.d.ts +9 -2
- package/dist/site/terrain-renderer.d.ts.map +1 -1
- package/dist/site/terrain-renderer.js +14 -4
- package/dist/slab/boundary-editor.d.ts +1 -1
- package/dist/slab/boundary-editor.d.ts.map +1 -1
- package/dist/slab/boundary-editor.js +13 -13
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +19 -3
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +67 -7
- package/dist/slab/elevation-limit.d.ts.map +1 -1
- package/dist/slab/elevation-limit.js +2 -2
- package/dist/slab/floorplan-affordances.d.ts +176 -4
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/floorplan-affordances.js +0 -1
- package/dist/slab/floorplan-move.d.ts.map +1 -1
- package/dist/slab/floorplan-move.js +3 -4
- package/dist/slab/floorplan.d.ts +7 -0
- package/dist/slab/floorplan.d.ts.map +1 -1
- package/dist/slab/floorplan.js +22 -5
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +186 -76
- package/dist/slab/move-tool.js +7 -6
- package/dist/slab/paint.d.ts +18 -5
- package/dist/slab/paint.d.ts.map +1 -1
- package/dist/slab/paint.js +458 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +28 -9
- package/dist/slab/placement-ownership.d.ts +2 -1
- package/dist/slab/placement-ownership.d.ts.map +1 -1
- package/dist/slab/placement-ownership.js +2 -2
- package/dist/slab/surface-split.d.ts +24 -0
- package/dist/slab/surface-split.d.ts.map +1 -0
- package/dist/slab/surface-split.js +389 -0
- package/dist/slab/tool.d.ts.map +1 -1
- package/dist/slab/tool.js +3 -3
- package/dist/stair/baluster-geometry.d.ts +21 -0
- package/dist/stair/baluster-geometry.d.ts.map +1 -0
- package/dist/stair/baluster-geometry.js +74 -0
- package/dist/stair/baluster-guard.d.ts +50 -0
- package/dist/stair/baluster-guard.d.ts.map +1 -0
- package/dist/stair/baluster-guard.js +71 -0
- package/dist/stair/boards-guard.d.ts +37 -0
- package/dist/stair/boards-guard.d.ts.map +1 -0
- package/dist/stair/boards-guard.js +61 -0
- package/dist/stair/cable-guard.d.ts +39 -0
- package/dist/stair/cable-guard.d.ts.map +1 -0
- package/dist/stair/cable-guard.js +105 -0
- package/dist/stair/construction-controls.d.ts +15 -0
- package/dist/stair/construction-controls.d.ts.map +1 -0
- package/dist/stair/construction-controls.js +29 -0
- package/dist/stair/continuous-railings.d.ts +10 -0
- package/dist/stair/continuous-railings.d.ts.map +1 -0
- package/dist/stair/continuous-railings.js +159 -0
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +16 -37
- package/dist/stair/documentation.d.ts +1 -1
- package/dist/stair/documentation.d.ts.map +1 -1
- package/dist/stair/documentation.js +10 -17
- package/dist/stair/floorplan-affordances.d.ts.map +1 -1
- package/dist/stair/floorplan-affordances.js +9 -25
- package/dist/stair/floorplan.d.ts +1 -23
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +102 -86
- package/dist/stair/glass-guard.d.ts +72 -0
- package/dist/stair/glass-guard.d.ts.map +1 -0
- package/dist/stair/glass-guard.js +167 -0
- package/dist/stair/guard-path.d.ts +119 -0
- package/dist/stair/guard-path.d.ts.map +1 -0
- package/dist/stair/guard-path.js +208 -0
- package/dist/stair/materials.d.ts +11 -0
- package/dist/stair/materials.d.ts.map +1 -0
- package/dist/stair/materials.js +51 -0
- package/dist/stair/metal-guard.d.ts +38 -0
- package/dist/stair/metal-guard.d.ts.map +1 -0
- package/dist/stair/metal-guard.js +79 -0
- package/dist/stair/paint.d.ts +32 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/paint.js +75 -36
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +154 -17
- package/dist/stair/parametrics.d.ts +1 -1
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +32 -15
- package/dist/stair/plan-entry.d.ts +31 -0
- package/dist/stair/plan-entry.d.ts.map +1 -0
- package/dist/stair/plan-entry.js +325 -0
- package/dist/stair/post-and-rail-guard.d.ts +31 -0
- package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
- package/dist/stair/post-and-rail-guard.js +63 -0
- package/dist/stair/railing-controls.d.ts +9 -0
- package/dist/stair/railing-controls.d.ts.map +1 -0
- package/dist/stair/railing-controls.js +49 -0
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +259 -259
- package/dist/stair/use-stair-render-data.d.ts +317 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -0
- package/dist/stair/use-stair-render-data.js +73 -0
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.js +51 -10
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +36 -42
- package/dist/stair-segment/parametrics.d.ts +1 -1
- package/dist/stair-segment/parametrics.d.ts.map +1 -1
- package/dist/stair-segment/parametrics.js +21 -8
- package/dist/stair-segment/renderer.d.ts.map +1 -1
- package/dist/stair-segment/renderer.js +16 -28
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +2 -5
- package/dist/turbine-vent/paint.d.ts.map +1 -1
- package/dist/turbine-vent/paint.js +2 -5
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +5 -23
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +6 -1
- package/dist/wall/actions.d.ts.map +1 -1
- package/dist/wall/actions.js +7 -2
- package/dist/wall/construction-dimensions.js +8 -5
- package/dist/wall/contextual-dimensions.js +4 -4
- package/dist/wall/curtain-wall-materials.d.ts +1 -1
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
- package/dist/wall/curtain-wall-materials.js +2 -2
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +4 -0
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +41 -17
- package/dist/wall/floorplan-move.d.ts +1 -1
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +20 -83
- package/dist/wall/floorplan-tool.d.ts.map +1 -1
- package/dist/wall/floorplan-tool.js +10 -11
- package/dist/wall/floorplan.d.ts +3 -1
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +184 -21
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +5 -5
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +20 -7
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +11 -7
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +118 -148
- package/dist/wall/paint.d.ts +26 -15
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +306 -117
- package/dist/wall/panel-model.d.ts +18 -0
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +77 -19
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +217 -41
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +3 -0
- package/dist/wall/rectangle-command.d.ts +111 -12
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +26 -8
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +4 -2
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
- package/dist/wall/split-floorplan-layer.js +7 -7
- package/dist/wall/split-session.d.ts.map +1 -1
- package/dist/wall/split-session.js +7 -1
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +36 -4
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +105 -49
- package/dist/wall/treatment-level-data.d.ts +3 -2
- package/dist/wall/treatment-level-data.d.ts.map +1 -1
- package/dist/wall/treatment-level-data.js +17 -13
- package/dist/wall/treatments.d.ts +10 -10
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +67 -54
- package/dist/wall/wall-batch-system.d.ts +7 -0
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +35 -3
- package/dist/wall/wall-batch.d.ts +6 -0
- package/dist/wall/wall-batch.d.ts.map +1 -1
- package/dist/wall/wall-batch.js +7 -1
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +12 -4
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +3 -1
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +145 -60
- package/dist/window/mechanism.d.ts +4 -0
- package/dist/window/mechanism.d.ts.map +1 -0
- package/dist/window/mechanism.js +20 -0
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +79 -48
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +3 -0
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +32 -88
- package/dist/window/placement.d.ts +23 -0
- package/dist/window/placement.d.ts.map +1 -0
- package/dist/window/placement.js +66 -0
- package/dist/window/preview.d.ts.map +1 -1
- package/dist/window/preview.js +2 -0
- package/dist/window/renderer.d.ts.map +1 -1
- package/dist/window/renderer.js +3 -2
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +96 -24
- package/dist/window/window-math.d.ts +6 -14
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +14 -20
- package/dist/zone/contextual-dimensions.d.ts.map +1 -1
- package/dist/zone/contextual-dimensions.js +6 -28
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +3 -3
- package/dist/zone/floorplan-affordances.d.ts +200 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/floorplan.d.ts +1 -1
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +93 -53
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +3 -14
- package/dist/zone/quick-measurement.d.ts +2 -2
- package/dist/zone/quick-measurement.d.ts.map +1 -1
- package/dist/zone/quick-measurement.js +6 -5
- package/dist/zone/renderer.d.ts +1 -1
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +58 -146
- package/dist/zone/room-clear-dimensions.js +3 -3
- package/dist/zone/room-documentation.d.ts.map +1 -1
- package/dist/zone/room-documentation.js +2 -6
- package/package.json +11 -11
- package/dist/block/slots.d.ts +0 -4
- package/dist/block/slots.d.ts.map +0 -1
- package/dist/block/slots.js +0 -17
- package/dist/cabinet/slots.d.ts +0 -4
- package/dist/cabinet/slots.d.ts.map +0 -1
- package/dist/cabinet/slots.js +0 -24
- package/dist/ceiling/slots.d.ts +0 -6
- package/dist/ceiling/slots.d.ts.map +0 -1
- package/dist/ceiling/slots.js +0 -7
- package/dist/column/slots.d.ts +0 -9
- package/dist/column/slots.d.ts.map +0 -1
- package/dist/column/slots.js +0 -19
- package/dist/door/slots.d.ts +0 -9
- package/dist/door/slots.d.ts.map +0 -1
- package/dist/door/slots.js +0 -20
- package/dist/elevator/slots.d.ts +0 -8
- package/dist/elevator/slots.d.ts.map +0 -1
- package/dist/elevator/slots.js +0 -17
- package/dist/fence/slots.d.ts +0 -10
- package/dist/fence/slots.d.ts.map +0 -1
- package/dist/fence/slots.js +0 -23
- package/dist/item/__fixtures__/main-floorplan.d.ts +0 -26
- package/dist/item/__fixtures__/main-floorplan.d.ts.map +0 -1
- package/dist/item/__fixtures__/main-floorplan.js +0 -297
- package/dist/lean-to-extension/slots.d.ts +0 -5
- package/dist/lean-to-extension/slots.d.ts.map +0 -1
- package/dist/lean-to-extension/slots.js +0 -15
- package/dist/shelf/slots.d.ts +0 -9
- package/dist/shelf/slots.d.ts.map +0 -1
- package/dist/shelf/slots.js +0 -30
- package/dist/slab/slots.d.ts +0 -10
- package/dist/slab/slots.d.ts.map +0 -1
- package/dist/slab/slots.js +0 -20
- package/dist/stair/floor-stack.d.ts +0 -10
- package/dist/stair/floor-stack.d.ts.map +0 -1
- package/dist/stair/floor-stack.js +0 -115
- package/dist/stair/slots.d.ts +0 -7
- package/dist/stair/slots.d.ts.map +0 -1
- package/dist/stair/slots.js +0 -13
- package/dist/wall/drawing-mode.d.ts +0 -12
- package/dist/wall/drawing-mode.d.ts.map +0 -1
- package/dist/wall/drawing-mode.js +0 -38
- package/dist/wall/slots.d.ts +0 -10
- package/dist/wall/slots.d.ts.map +0 -1
- package/dist/wall/slots.js +0 -92
- package/dist/window/slots.d.ts +0 -5
- package/dist/window/slots.d.ts.map +0 -1
- package/dist/window/slots.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-floorplan-layer.d.ts","sourceRoot":"","sources":["../../src/wall/split-floorplan-layer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"split-floorplan-layer.d.ts","sourceRoot":"","sources":["../../src/wall/split-floorplan-layer.tsx"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,oBAAoB,EAG1B,MAAM,oBAAoB,CAAA;AAO3B,iGAAiG;AACjG,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,sCAgG3E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { getWallCurveFrameAt, getWallCurveLength,
|
|
4
|
-
import { clientToPlan,
|
|
3
|
+
import { getWallCurveFrameAt, getWallCurveLength, getWallFaceOffsets, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { clientToPlan, FloorplanDraftMeasurement, formatLinearMeasurement, useFloorplanRender, } from '@pascal-app/editor';
|
|
5
5
|
import { getSceneTheme, useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { useEffect } from 'react';
|
|
7
7
|
import { bindWallSplitPointer } from './split-pointer';
|
|
@@ -26,7 +26,7 @@ export default function WallSplitFloorplanLayer(_props) {
|
|
|
26
26
|
if (!surface)
|
|
27
27
|
return;
|
|
28
28
|
return bindWallSplitPointer(surface, (event) => {
|
|
29
|
-
if (!(event.target instanceof Node
|
|
29
|
+
if (!(event.target instanceof Node && surface.contains(event.target)))
|
|
30
30
|
return null;
|
|
31
31
|
const point = clientToPlan(event.clientX, event.clientY);
|
|
32
32
|
const current = useScene.getState().nodes[wallId];
|
|
@@ -46,15 +46,15 @@ export default function WallSplitFloorplanLayer(_props) {
|
|
|
46
46
|
const half = hitHalfWidth(wall, upp);
|
|
47
47
|
const color = wallSplitMarkerColor(preview.valid);
|
|
48
48
|
const cut = preview.frames[0]?.point;
|
|
49
|
-
return (_jsxs("g", {
|
|
49
|
+
return (_jsxs("g", { "data-testid": "pascal-split-marker-2d", pointerEvents: "none", children: [snap?.kind === 'alignment' && cut && (_jsx("line", { stroke: "#818cf8", strokeDasharray: `${4 * upp} ${3 * upp}`, strokeOpacity: 0.8, strokeWidth: upp, x1: snap.anchor[0], x2: cut.x, y1: snap.anchor[1], y2: cut.y })), preview.frames.map(({ point, normal }, index) => {
|
|
50
50
|
const line = {
|
|
51
51
|
x1: point.x - normal.x * half,
|
|
52
52
|
y1: point.y - normal.y * half,
|
|
53
53
|
x2: point.x + normal.x * half,
|
|
54
54
|
y2: point.y + normal.y * half,
|
|
55
55
|
};
|
|
56
|
-
return (_jsxs("g", { children: [_jsx("line", { ...line, stroke: "#f7f3ed", strokeWidth: 7 * upp
|
|
57
|
-
}), !preview.valid && cut ? (_jsx("text", { fill: color, fontSize: 12 * upp, paintOrder: "stroke", stroke: isDark ? '#0f172a' : '#ffffff', strokeWidth: 3 * upp, textAnchor: "middle", x: cut.x, y: cut.y - half - 6 * upp, children: preview.message })) : (wallSplitSegmentLabels(wall, preview).map((segment, index) => (_jsx(
|
|
56
|
+
return (_jsxs("g", { children: [_jsx("line", { ...line, stroke: "#f7f3ed", strokeLinecap: "round", strokeWidth: 7 * upp }), _jsx("line", { ...line, stroke: color, strokeLinecap: "round", strokeWidth: 3 * upp })] }, index));
|
|
57
|
+
}), !preview.valid && cut ? (_jsx("text", { fill: color, fontSize: 12 * upp, paintOrder: "stroke", stroke: isDark ? '#0f172a' : '#ffffff', strokeWidth: 3 * upp, textAnchor: "middle", x: cut.x, y: cut.y - half - 6 * upp, children: preview.message })) : (wallSplitSegmentLabels(wall, preview).map((segment, index) => (_jsx(FloorplanDraftMeasurement, { labelBackground: isDark ? '#0f172a' : '#ffffff', labelText: isDark ? '#e2e8f0' : '#171717', measurement: {
|
|
58
58
|
lengthLabel: `${formatLinearMeasurement(segment.length, unit, metricNotation)}${segment.count > 1 ? ` × ${segment.count}` : ''}`,
|
|
59
59
|
midpoint: segment.midpoint,
|
|
60
60
|
direction: segment.direction,
|
|
@@ -63,7 +63,7 @@ export default function WallSplitFloorplanLayer(_props) {
|
|
|
63
63
|
}
|
|
64
64
|
/** The wall's stroke plus a finger's width, so the cut can be grabbed at any zoom. */
|
|
65
65
|
function hitHalfWidth(wall, upp) {
|
|
66
|
-
return
|
|
66
|
+
return Math.max(getWallFaceOffsets(wall).a, -getWallFaceOffsets(wall).b) + 8 * upp;
|
|
67
67
|
}
|
|
68
68
|
function frameAt(wall, distance) {
|
|
69
69
|
const length = getWallCurveLength(wall);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-session.d.ts","sourceRoot":"","sources":["../../src/wall/split-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"split-session.d.ts","sourceRoot":"","sources":["../../src/wall/split-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AA4CzB;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,QA8C3C;AAED,wBAAgB,cAAc,SAS7B;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,UAAQ,QAevD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,QAQ5C;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,SAM/B;AAED,wBAAgB,eAAe,SAc9B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getWallCurveLength, planWallDivisions, runAsSingleSceneHistoryStep, useScene, } from '@pascal-app/core';
|
|
2
|
-
import { isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, useInteractionScope, } from '@pascal-app/editor';
|
|
2
|
+
import { captureElementActionOrigin, completeElementAction, isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor, useInteractionScope, } from '@pascal-app/editor';
|
|
3
3
|
import { snapWallSplitDistance, WALL_SPLIT_MAX_CUTS, wallSplitAnchors, wallSplitDistances, wallSplitPreview, } from './split-preview';
|
|
4
4
|
import { useWallSplit } from './split-store';
|
|
5
5
|
// Pointer distance (m) within which a 'lines' alignment target catches the cut.
|
|
@@ -17,6 +17,8 @@ const withPreview = (draft, wall) => ({
|
|
|
17
17
|
preview: wallSplitPreview(useScene.getState().nodes, wall, wallSplitDistances(getWallCurveLength(wall), draft.cuts, draft.distance)),
|
|
18
18
|
});
|
|
19
19
|
let teardown = null;
|
|
20
|
+
// The room the wall was drilled from: a committed split lands back on it.
|
|
21
|
+
let origin = null;
|
|
20
22
|
/**
|
|
21
23
|
* A split session: the wall's `reshaping` scope (so the snapping chip and the
|
|
22
24
|
* kind's HUD hints resolve), one centred cut, and the watchers that end it —
|
|
@@ -27,6 +29,7 @@ export function openWallSplit(wall) {
|
|
|
27
29
|
if (useScene.getState().readOnly)
|
|
28
30
|
return;
|
|
29
31
|
closeWallSplit();
|
|
32
|
+
origin = captureElementActionOrigin([wall.id]);
|
|
30
33
|
useEditor.getState().setMode('select');
|
|
31
34
|
useInteractionScope
|
|
32
35
|
.getState()
|
|
@@ -72,6 +75,7 @@ export function openWallSplit(wall) {
|
|
|
72
75
|
export function closeWallSplit() {
|
|
73
76
|
const stop = teardown;
|
|
74
77
|
teardown = null;
|
|
78
|
+
origin = null;
|
|
75
79
|
stop?.();
|
|
76
80
|
useWallSplit.getState().setDraft(null);
|
|
77
81
|
useInteractionScope
|
|
@@ -132,7 +136,9 @@ export function commitWallSplit() {
|
|
|
132
136
|
if (!checked.preview.valid)
|
|
133
137
|
return useWallSplit.getState().setDraft(checked);
|
|
134
138
|
const plan = planWallDivisions(current.nodes, wall.id, checked.preview.distances);
|
|
139
|
+
const from = origin;
|
|
135
140
|
runAsSingleSceneHistoryStep(useScene, () => current.applyNodeChanges(plan.changes));
|
|
136
141
|
closeWallSplit();
|
|
137
142
|
triggerSFX('sfx:structure-build');
|
|
143
|
+
completeElementAction(from);
|
|
138
144
|
}
|
|
@@ -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":"AAuDA,wBAAgB,wBAAwB,IAAI,IAAI,CAO/C;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CA0FhD;AASD;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,mCAShB,CAAA;AAED,eAAe,WAAW,CAAA"}
|
package/dist/wall/system.js
CHANGED
|
@@ -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 { useLiveNodeOverrides, useScene } from '@pascal-app/core';
|
|
3
|
+
import { spatialGridManager, useLiveNodeOverrides, useLiveTerrain, useScene, } from '@pascal-app/core';
|
|
4
4
|
import { timeSpan, WallCutout, WallSystem } from '@pascal-app/viewer';
|
|
5
5
|
import { useFrame } from '@react-three/fiber';
|
|
6
6
|
import { useEffect } from 'react';
|
|
@@ -50,6 +50,10 @@ export function updateWallTreatmentLevels() {
|
|
|
50
50
|
previousNodes = nodes;
|
|
51
51
|
previousOverrides = overrides;
|
|
52
52
|
}
|
|
53
|
+
const terrain = useLiveTerrain.getState();
|
|
54
|
+
const ancestors = dirtyLevelIds.size
|
|
55
|
+
? Object.values(nodes).filter((node) => node.type === 'site' || node.type === 'building' || node.type === 'level')
|
|
56
|
+
: [];
|
|
53
57
|
for (const levelId of dirtyLevelIds) {
|
|
54
58
|
const level = nodes[levelId];
|
|
55
59
|
if (level?.type !== 'level') {
|
|
@@ -65,13 +69,41 @@ export function updateWallTreatmentLevels() {
|
|
|
65
69
|
const proudOffsets = walls.flatMap(wallTreatmentProudOffsets);
|
|
66
70
|
const proudKey = treatmentProudKeys(proudOffsets).join(',');
|
|
67
71
|
const previous = levelInputs.get(levelId);
|
|
68
|
-
|
|
72
|
+
const sameWalls = previous?.proudKey === proudKey && sameTreatmentWalls(previous.walls, walls);
|
|
73
|
+
const supportInputs = [
|
|
74
|
+
...ancestors,
|
|
75
|
+
...level.children.flatMap((id) => {
|
|
76
|
+
const node = nodes[id];
|
|
77
|
+
return node && (node.type === 'slab' || node.type === 'zone' || node.type === 'separator')
|
|
78
|
+
? [node, overrides.get(id)]
|
|
79
|
+
: [];
|
|
80
|
+
}),
|
|
81
|
+
];
|
|
82
|
+
const sameSupportInputs = previous?.supportInputs.length === supportInputs.length &&
|
|
83
|
+
supportInputs.every((input, i) => input === previous.supportInputs[i]);
|
|
84
|
+
const sameTerrain = previous?.terrain === terrain;
|
|
85
|
+
if (sameWalls && sameSupportInputs && sameTerrain)
|
|
86
|
+
continue;
|
|
87
|
+
const supports = new Map(walls.map((wall) => {
|
|
88
|
+
const cached = sameSupportInputs &&
|
|
89
|
+
(sameTerrain || !dirtyNodes.has(wall.id)) &&
|
|
90
|
+
previous?.walls.includes(wall)
|
|
91
|
+
? previous.supports.get(wall.id)
|
|
92
|
+
: undefined;
|
|
93
|
+
return [
|
|
94
|
+
wall.id,
|
|
95
|
+
cached ??
|
|
96
|
+
spatialGridManager.getSlabSupportForWall(levelId, wall.start, wall.end, wall.curveOffset ?? 0, wall.thickness, wall.supportSlabId, undefined, wall.supportOffset, wall.justification),
|
|
97
|
+
];
|
|
98
|
+
}));
|
|
99
|
+
const supportKey = JSON.stringify([...supports].map(([id, support]) => [id, support.elevation, support.faceDatum]));
|
|
100
|
+
levelInputs.set(levelId, { walls, proudKey, supportKey, supportInputs, supports, terrain });
|
|
101
|
+
if (sameWalls && previous.supportKey === supportKey)
|
|
69
102
|
continue;
|
|
70
103
|
timeSpan('wall-treatment-level', () => {
|
|
71
104
|
useWallTreatmentLevelData
|
|
72
105
|
.getState()
|
|
73
|
-
.setLevelData(levelId, buildWallTreatmentLevelData(levelId, walls, proudOffsets));
|
|
74
|
-
levelInputs.set(levelId, { walls, proudKey });
|
|
106
|
+
.setLevelData(levelId, buildWallTreatmentLevelData(levelId, walls, proudOffsets, supports));
|
|
75
107
|
});
|
|
76
108
|
}
|
|
77
109
|
}
|
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":"AAqhCA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAQ5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/wall/tool.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { calculateLevelMiters, collectAlignmentAnchors, DEFAULT_LEVEL_HEIGHT, emitter, GROUND_SUPPORT_ID, getWallMiterBoundaryPoints, resolveAlignment, resolveBuildingForLevel, sceneRegistry, useScene, wallClosesRoom, } from '@pascal-app/core';
|
|
3
|
-
import { CursorSphere, chainEndJoinsExistingWall, clearPlacementSurface, createWallOnCurrentLevel, DraftMeasurementLabel, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolvePointerSupportSurface, snapWallDraftPointDetailed, triggerSFX, useAlignmentGuides, useEditor, useFloorplanDraftPreview, useSegmentDraftChain, useWallSnapIndicator, WALL_CONNECT_SNAP_RADIUS, WALL_JOIN_SNAP_RADIUS, } from '@pascal-app/editor';
|
|
3
|
+
import { addWallPolygonDraftCorner, CursorSphere, chainEndJoinsExistingWall, clearPlacementSurface, commitWallPolygonDraft, createWallOnCurrentLevel, DraftMeasurementLabel, discardWallPolygonDraft, EDITOR_LAYER, formatAngleRadians, formatLinearMeasurement, getAngleArcToSegmentReference, getAngleToSegmentReference, getSegmentAngleReferenceAtPoint, getWallDrawVariant, isAlignmentGuideActive, isAngleSnapActive, isMagneticSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolvePointerSupportSurface, snapWallDraftPointDetailed, startWallPolygonDraft, triggerSFX, useAlignmentGuides, useEditor, useFloorplanDraftPreview, useSegmentDraftChain, useWallDrawVariant, useWallSnapIndicator, visibleScene, WALL_CONNECT_SNAP_RADIUS, WALL_JOIN_SNAP_RADIUS, wallPolygonDraftWalls, } from '@pascal-app/editor';
|
|
4
4
|
import { getSceneTheme, useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useThree } from '@react-three/fiber';
|
|
6
6
|
import { useEffect, useRef, useState } from 'react';
|
|
7
7
|
import { DoubleSide, Vector3 } from 'three';
|
|
8
8
|
import { DraftAngleArc, DraftAxisGuides, getNearestAxisAngleLabel, } from '../shared/draft-axis-guides';
|
|
9
|
-
import { useWallDrawingMode, useWallDrawingModeKeys } from './drawing-mode';
|
|
10
9
|
import RectangleWallTool from './rectangle-tool';
|
|
11
10
|
/**
|
|
12
11
|
* Phase 5 Stage D — wall placement tool (kind-owned).
|
|
@@ -330,6 +329,8 @@ const LineWallTool = () => {
|
|
|
330
329
|
const flatConstructionBase = useRef(false);
|
|
331
330
|
const buildingState = useRef(0);
|
|
332
331
|
const [draftMeasurement, setDraftMeasurement] = useState(null);
|
|
332
|
+
// Base Y of an open Polygon room's ghost sides (its construction plane).
|
|
333
|
+
const [polygonGhostY, setPolygonGhostY] = useState(0);
|
|
333
334
|
const [axisGuide, setAxisGuide] = useState(null);
|
|
334
335
|
const measurementColor = isDark ? '#ffffff' : '#111111';
|
|
335
336
|
const measurementShadowColor = isDark ? '#111111' : '#ffffff';
|
|
@@ -430,7 +431,10 @@ const LineWallTool = () => {
|
|
|
430
431
|
}
|
|
431
432
|
return resolved;
|
|
432
433
|
};
|
|
434
|
+
// Stopping without committing drops an open Polygon room — its corners
|
|
435
|
+
// were never written. Completing paths commit before they stop.
|
|
433
436
|
const stopDrafting = () => {
|
|
437
|
+
discardWallPolygonDraft();
|
|
434
438
|
buildingState.current = 0;
|
|
435
439
|
constructionPlane.current = null;
|
|
436
440
|
flatConstructionBase.current = false;
|
|
@@ -449,8 +453,12 @@ const LineWallTool = () => {
|
|
|
449
453
|
useSegmentDraftChain.getState().clear('wall');
|
|
450
454
|
clearPlacementSurface();
|
|
451
455
|
};
|
|
456
|
+
// In 2D-only view the plan owns wall drafting; this tool stays mounted
|
|
457
|
+
// behind the hidden canvas and still hears the plan's grid events, so it
|
|
458
|
+
// must not also draft (it would add every corner twice).
|
|
459
|
+
const planOwnsInput = () => visibleScene(useEditor.getState()) === '2d';
|
|
452
460
|
const onGridMove = (event) => {
|
|
453
|
-
if (!(cursorRef.current && wallPreviewRef.current))
|
|
461
|
+
if (!(cursorRef.current && wallPreviewRef.current) || planOwnsInput())
|
|
454
462
|
return;
|
|
455
463
|
// Ride the grid event plane on the pointed surface: aiming at an
|
|
456
464
|
// elevated deck lifts the plane to the deck top, so the draft's XZ
|
|
@@ -468,7 +476,7 @@ const LineWallTool = () => {
|
|
|
468
476
|
// Add walls on the floor below as extra snap references so the new wall
|
|
469
477
|
// can align with the level beneath it. Kept separate from `walls` so the
|
|
470
478
|
// measurement HUD only reports against the active level.
|
|
471
|
-
const snapWalls = [...walls, ...getBelowLevelWalls()];
|
|
479
|
+
const snapWalls = [...walls, ...getBelowLevelWalls(), ...wallPolygonDraftWalls()];
|
|
472
480
|
const localPoint = pointed?.localPoint
|
|
473
481
|
? [pointed.localPoint[0], pointed.localPoint[2]]
|
|
474
482
|
: [event.localPosition[0], event.localPosition[2]];
|
|
@@ -521,14 +529,16 @@ const LineWallTool = () => {
|
|
|
521
529
|
}
|
|
522
530
|
};
|
|
523
531
|
const onGridClick = (event) => {
|
|
524
|
-
if (!wallPreviewRef.current)
|
|
532
|
+
if (!wallPreviewRef.current || planOwnsInput())
|
|
525
533
|
return;
|
|
526
534
|
if (buildingState.current === 1 && event.nativeEvent.detail >= 2) {
|
|
535
|
+
// A double-click finishes the chain and keeps an open Polygon room.
|
|
536
|
+
commitWallPolygonDraft();
|
|
527
537
|
stopDrafting();
|
|
528
538
|
return;
|
|
529
539
|
}
|
|
530
540
|
const walls = getCurrentLevelWalls();
|
|
531
|
-
const snapWalls = [...walls, ...getBelowLevelWalls()];
|
|
541
|
+
const snapWalls = [...walls, ...getBelowLevelWalls(), ...wallPolygonDraftWalls()];
|
|
532
542
|
const pointed = buildingState.current === 0 ? pointedSurfaceFor(event) : null;
|
|
533
543
|
const localClick = pointed?.localPoint
|
|
534
544
|
? [pointed.localPoint[0], pointed.localPoint[2]]
|
|
@@ -564,6 +574,18 @@ const LineWallTool = () => {
|
|
|
564
574
|
angleLabel: null,
|
|
565
575
|
});
|
|
566
576
|
triggerSFX('sfx:structure-build-start');
|
|
577
|
+
const levelId = useViewer.getState().selection.levelId;
|
|
578
|
+
if (getWallDrawVariant() === 'polygon' && levelId) {
|
|
579
|
+
startWallPolygonDraft(levelId, snappedStart, {
|
|
580
|
+
supportCap: plane.elevation ?? null,
|
|
581
|
+
preferredSupportSlabId: plane.supportSlabId ?? null,
|
|
582
|
+
constructionElevation: plane.elevation ?? null,
|
|
583
|
+
constructionHeight: previewHeightRef.current,
|
|
584
|
+
constructionSourceNodeId: plane.sourceNodeId ?? null,
|
|
585
|
+
flatConstructionBase: flatConstructionBase.current,
|
|
586
|
+
});
|
|
587
|
+
setPolygonGhostY(plane.localY);
|
|
588
|
+
}
|
|
567
589
|
// Visibility is owned by `updateWallPreview`. Leave the
|
|
568
590
|
// unit box hidden until the first pointer move scales and
|
|
569
591
|
// positions it for the active segment.
|
|
@@ -586,47 +608,63 @@ const LineWallTool = () => {
|
|
|
586
608
|
// any other chain re-resolves the aimed surface per commit so a later
|
|
587
609
|
// segment can still elect the slab it visibly crosses instead of
|
|
588
610
|
// being capped at the first click's elevation.
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
chainWallIds.current.push(createdWall.id);
|
|
603
|
-
// The new segment is now a real node — make it an alignment target
|
|
604
|
-
// for the next segment, and drop the just-shown guide.
|
|
605
|
-
refreshAlignmentCandidates();
|
|
606
|
-
useAlignmentGuides.getState().clear();
|
|
607
|
-
useWallSnapIndicator.getState().clear();
|
|
608
|
-
if (useEditor.getState().getContinuation('wall') === 'single') {
|
|
609
|
-
stopDrafting();
|
|
610
|
-
return;
|
|
611
|
+
let nextStart;
|
|
612
|
+
if (getWallDrawVariant() === 'polygon') {
|
|
613
|
+
// A Polygon room writes nothing until it completes: the corner joins
|
|
614
|
+
// the draft, and closing / sealing / teeing commits every wall at once.
|
|
615
|
+
const outcome = addWallPolygonDraftCorner(snappedEnd);
|
|
616
|
+
useAlignmentGuides.getState().clear();
|
|
617
|
+
useWallSnapIndicator.getState().clear();
|
|
618
|
+
if (outcome !== 'open') {
|
|
619
|
+
commitWallPolygonDraft();
|
|
620
|
+
stopDrafting();
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
nextStart = snappedEnd;
|
|
611
624
|
}
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
625
|
+
else {
|
|
626
|
+
const draftPlane = constructionPlane.current;
|
|
627
|
+
const commitPointed = draftPlane?.supportSlabId === GROUND_SUPPORT_ID ? null : pointedSurfaceFor(event);
|
|
628
|
+
// Both start and end are building-local ✓
|
|
629
|
+
const createdWall = createWallOnCurrentLevel([startingPoint.current.x, startingPoint.current.z], snappedEnd, {
|
|
630
|
+
supportCap: commitPointed ? commitPointed.elevation : (draftPlane?.elevation ?? null),
|
|
631
|
+
preferredSupportSlabId: draftPlane?.supportSlabId ?? null,
|
|
632
|
+
constructionElevation: draftPlane?.elevation ?? null,
|
|
633
|
+
constructionHeight: previewHeightRef.current,
|
|
634
|
+
constructionSourceNodeId: constructionPlane.current?.sourceNodeId ?? null,
|
|
635
|
+
flatConstructionBase: flatConstructionBase.current,
|
|
636
|
+
});
|
|
637
|
+
if (!createdWall)
|
|
638
|
+
return;
|
|
639
|
+
chainWallIds.current.push(createdWall.id);
|
|
640
|
+
// The new segment is now a real node — make it an alignment target
|
|
641
|
+
// for the next segment, and drop the just-shown guide.
|
|
642
|
+
refreshAlignmentCandidates();
|
|
643
|
+
useAlignmentGuides.getState().clear();
|
|
644
|
+
useWallSnapIndicator.getState().clear();
|
|
645
|
+
if (useEditor.getState().getContinuation('wall') === 'single') {
|
|
646
|
+
stopDrafting();
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
const closedToChainStart = chainFirstVertex.current &&
|
|
650
|
+
isWithinWallJoinSnapRadius(createdWall.end, chainFirstVertex.current);
|
|
651
|
+
// Auto-close also fires when the segment seals a room against the
|
|
652
|
+
// existing wall network (e.g. a bay closed onto the middle of another
|
|
653
|
+
// wall), not just when the chain loops back to its own start. Shares the
|
|
654
|
+
// room graph with auto slab/ceiling detection so the two never disagree.
|
|
655
|
+
// A resolved end that tees into wall geometry outside the chain also
|
|
656
|
+
// terminates even without an enclosed room — nobody continues drawing
|
|
657
|
+
// from a T-junction into an existing wall; a dead end in free space
|
|
658
|
+
// keeps the chain going.
|
|
659
|
+
const levelWalls = getCurrentLevelWalls();
|
|
660
|
+
if (closedToChainStart ||
|
|
661
|
+
chainEndJoinsExistingWall(createdWall.end, levelWalls, chainWallIds.current) ||
|
|
662
|
+
wallClosesRoom(levelWalls, createdWall)) {
|
|
663
|
+
stopDrafting();
|
|
664
|
+
return;
|
|
665
|
+
}
|
|
666
|
+
nextStart = createdWall.end;
|
|
628
667
|
}
|
|
629
|
-
const nextStart = createdWall.end;
|
|
630
668
|
// Publish the resolved chain start so the 2D floor-plan draft
|
|
631
669
|
// chains its next segment from the same point (its own snap
|
|
632
670
|
// pipeline can resolve a slightly different endpoint).
|
|
@@ -665,6 +703,8 @@ const LineWallTool = () => {
|
|
|
665
703
|
emitter.on('grid:click', onGridClick);
|
|
666
704
|
emitter.on('tool:cancel', onCancel);
|
|
667
705
|
return () => {
|
|
706
|
+
// Leaving the tool mid-polygon abandons it (nothing was written).
|
|
707
|
+
discardWallPolygonDraft();
|
|
668
708
|
emitter.off('grid:move', onGridMove);
|
|
669
709
|
emitter.off('grid:click', onGridClick);
|
|
670
710
|
emitter.off('tool:cancel', onCancel);
|
|
@@ -677,14 +717,30 @@ const LineWallTool = () => {
|
|
|
677
717
|
draftPreview.setWallDraftEnd(null);
|
|
678
718
|
};
|
|
679
719
|
}, [unit, metricNotation]);
|
|
680
|
-
return (_jsxs("group", { children: [_jsx(DraftAxisGuides, { guide: axisGuide, labelColor: measurementColor, labelShadowColor: measurementShadowColor }), _jsx(CursorSphere, { height: previewHeight, ref: cursorRef }), _jsxs("mesh", { layers: EDITOR_LAYER, ref: wallPreviewRef, renderOrder: 1, visible: false, children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.5, side: DoubleSide, transparent: true })] }), draftMeasurement && (_jsxs(_Fragment, { children: [_jsx(DraftMeasurementLabel, { color: measurementColor, label: draftMeasurement.lengthLabel, position: draftMeasurement.lengthPosition, shadowColor: measurementShadowColor }), draftMeasurement.angleLabels.map((angleLabel) => (_jsxs("group", { children: [_jsx(DraftAngleArc, { arc: angleLabel.arc, color: measurementColor }), _jsx(DraftMeasurementLabel, { color: measurementColor, label: angleLabel.label, position: angleLabel.position, shadowColor: measurementShadowColor })] }, angleLabel.id)))] }))] }));
|
|
720
|
+
return (_jsxs("group", { children: [_jsx(DraftAxisGuides, { guide: axisGuide, labelColor: measurementColor, labelShadowColor: measurementShadowColor }), _jsx(CursorSphere, { height: previewHeight, ref: cursorRef }), _jsx(PolygonDraftGhosts, { height: previewHeight, thickness: previewThickness, y: polygonGhostY }), _jsxs("mesh", { layers: EDITOR_LAYER, ref: wallPreviewRef, renderOrder: 1, visible: false, children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.5, side: DoubleSide, transparent: true })] }), draftMeasurement && (_jsxs(_Fragment, { children: [_jsx(DraftMeasurementLabel, { color: measurementColor, label: draftMeasurement.lengthLabel, position: draftMeasurement.lengthPosition, shadowColor: measurementShadowColor }), draftMeasurement.angleLabels.map((angleLabel) => (_jsxs("group", { children: [_jsx(DraftAngleArc, { arc: angleLabel.arc, color: measurementColor }), _jsx(DraftMeasurementLabel, { color: measurementColor, label: angleLabel.label, position: angleLabel.position, shadowColor: measurementShadowColor })] }, angleLabel.id)))] }))] }));
|
|
681
721
|
};
|
|
722
|
+
/**
|
|
723
|
+
* The placed sides of an open Polygon room, drawn like the live segment's
|
|
724
|
+
* preview. They are draft state (`wallPolygonDraftPoints`), not scene walls.
|
|
725
|
+
*/
|
|
726
|
+
function PolygonDraftGhosts({ height, thickness, y, }) {
|
|
727
|
+
const corners = useFloorplanDraftPreview((state) => state.wallPolygonDraftPoints);
|
|
728
|
+
return (_jsx(_Fragment, { children: corners.slice(1).map((end, index) => {
|
|
729
|
+
const start = corners[index];
|
|
730
|
+
const dx = end[0] - start[0];
|
|
731
|
+
const dz = end[1] - start[1];
|
|
732
|
+
const length = Math.hypot(dx, dz);
|
|
733
|
+
if (length < 0.01)
|
|
734
|
+
return null;
|
|
735
|
+
return (_jsxs("mesh", { layers: EDITOR_LAYER, position: [(start[0] + end[0]) / 2, y + height / 2, (start[1] + end[1]) / 2], renderOrder: 1, rotation: [0, -Math.atan2(dz, dx), 0], scale: [length, height, thickness], children: [_jsx("boxGeometry", {}), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.5, side: DoubleSide, transparent: true })] }, `${index}:${start[0]},${start[1]}`));
|
|
736
|
+
}) }));
|
|
737
|
+
}
|
|
682
738
|
export const WallTool = () => {
|
|
683
739
|
// Clear preset-seeded defaults on deactivation so a later manual wall draw
|
|
684
740
|
// isn't built with a stale preset's parameters. Unmount-only.
|
|
685
741
|
useEffect(() => () => useEditor.getState().setToolDefaults('wall', null), []);
|
|
686
|
-
|
|
687
|
-
const
|
|
688
|
-
return
|
|
742
|
+
// The drawing variant is picked in the Build panel's Rooms group.
|
|
743
|
+
const variant = useWallDrawVariant();
|
|
744
|
+
return variant === 'rectangle' ? _jsx(RectangleWallTool, {}) : _jsx(LineWallTool, {});
|
|
689
745
|
};
|
|
690
746
|
export default WallTool;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { type WallMiterData, type WallNode } from '@pascal-app/core';
|
|
1
|
+
import { type WallMiterData, type WallNode, type WallSlabSupport } from '@pascal-app/core';
|
|
2
2
|
export declare function treatmentProudKeys(proudOffsets: readonly number[]): number[];
|
|
3
3
|
export declare function sameTreatmentWalls(a: readonly WallNode[], b: readonly WallNode[]): boolean;
|
|
4
4
|
export type WallTreatmentLevelData = {
|
|
5
5
|
walls: readonly WallNode[];
|
|
6
|
+
supports?: ReadonlyMap<string, WallSlabSupport>;
|
|
6
7
|
miterDataByProud: ReadonlyMap<number, WallMiterData>;
|
|
7
8
|
};
|
|
8
9
|
export declare function clearWallTreatmentMiterCache(levelId?: string): void;
|
|
9
|
-
export declare function buildWallTreatmentLevelData(levelId: string, walls: readonly WallNode[], proudOffsets: readonly number[]): WallTreatmentLevelData;
|
|
10
|
+
export declare function buildWallTreatmentLevelData(levelId: string, walls: readonly WallNode[], proudOffsets: readonly number[], supports?: ReadonlyMap<string, WallSlabSupport>): WallTreatmentLevelData;
|
|
10
11
|
export declare function treatmentMiterDataForProud(levelData: WallTreatmentLevelData, proud: number): WallMiterData | undefined;
|
|
11
12
|
type WallTreatmentLevelDataState = {
|
|
12
13
|
byLevelId: ReadonlyMap<string, WallTreatmentLevelData>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treatment-level-data.d.ts","sourceRoot":"","sources":["../../src/wall/treatment-level-data.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"treatment-level-data.d.ts","sourceRoot":"","sources":["../../src/wall/treatment-level-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAA;AAUzB,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE,EAAE,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAE1F;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC/C,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CACrD,CAAA;AAID,wBAAgB,4BAA4B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAC9C,sBAAsB,CAiBxB;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,MAAM,GACZ,aAAa,GAAG,SAAS,CAE3B;AAED,KAAK,2BAA2B,GAAG;IACjC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IACtD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,KAAK,IAAI,CAAA;IACrE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,IASjF,OAAO,2BAA2B,KAAG,sBAAsB,GAAG,SAAS,CA+ChF;AAED,eAAO,MAAM,yBAAyB,0FAenC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { calculateLevelMiters,
|
|
1
|
+
import { calculateLevelMiters, isCurvedWall, pointToKey, } from '@pascal-app/core';
|
|
2
2
|
import { create } from 'zustand';
|
|
3
3
|
import { shallow } from 'zustand/vanilla/shallow';
|
|
4
4
|
const PROUD_KEY_PRECISION = 1e6;
|
|
@@ -18,7 +18,7 @@ export function clearWallTreatmentMiterCache(levelId) {
|
|
|
18
18
|
else
|
|
19
19
|
levelMiterCache.delete(levelId);
|
|
20
20
|
}
|
|
21
|
-
export function buildWallTreatmentLevelData(levelId, walls, proudOffsets) {
|
|
21
|
+
export function buildWallTreatmentLevelData(levelId, walls, proudOffsets, supports) {
|
|
22
22
|
const cached = levelMiterCache.get(levelId);
|
|
23
23
|
const reusable = cached && sameTreatmentWalls(cached.walls, walls) ? cached : undefined;
|
|
24
24
|
const miterDataByProud = new Map();
|
|
@@ -28,15 +28,9 @@ export function buildWallTreatmentLevelData(levelId, walls, proudOffsets) {
|
|
|
28
28
|
miterDataByProud.set(proud, previous);
|
|
29
29
|
continue;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
? [...walls]
|
|
33
|
-
: walls.map((wall) => ({
|
|
34
|
-
...wall,
|
|
35
|
-
thickness: getWallThickness(wall) + proud * 2,
|
|
36
|
-
}));
|
|
37
|
-
miterDataByProud.set(proud, calculateLevelMiters(adjustedWalls));
|
|
31
|
+
miterDataByProud.set(proud, calculateLevelMiters([...walls], proud));
|
|
38
32
|
}
|
|
39
|
-
const data = { walls, miterDataByProud };
|
|
33
|
+
const data = { walls, miterDataByProud, supports };
|
|
40
34
|
levelMiterCache.set(levelId, data);
|
|
41
35
|
return data;
|
|
42
36
|
}
|
|
@@ -59,9 +53,15 @@ export function createWallTreatmentSelector(node, proudOffsets) {
|
|
|
59
53
|
if (!level) {
|
|
60
54
|
previousSlice = undefined;
|
|
61
55
|
previousInputs = [];
|
|
62
|
-
return
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const support = level.supports?.get(node.id);
|
|
59
|
+
const inputs = [support?.elevation];
|
|
60
|
+
for (const face of ['a', 'b']) {
|
|
61
|
+
inputs.push(support?.faceDatum[face].length);
|
|
62
|
+
for (const segment of support?.faceDatum[face] ?? [])
|
|
63
|
+
inputs.push(segment.start, segment.end, segment.elevation, segment.endElevation);
|
|
63
64
|
}
|
|
64
|
-
const inputs = [];
|
|
65
65
|
for (const proud of prouds) {
|
|
66
66
|
const data = level.miterDataByProud.get(proud);
|
|
67
67
|
inputs.push(!!data);
|
|
@@ -87,7 +87,11 @@ export function createWallTreatmentSelector(node, proudOffsets) {
|
|
|
87
87
|
miterDataByProud.set(proud, { junctionData, junctions: new Map() });
|
|
88
88
|
}
|
|
89
89
|
previousInputs = inputs;
|
|
90
|
-
previousSlice = {
|
|
90
|
+
previousSlice = {
|
|
91
|
+
walls: [node],
|
|
92
|
+
miterDataByProud,
|
|
93
|
+
supports: support ? new Map([[node.id, support]]) : undefined,
|
|
94
|
+
};
|
|
91
95
|
return previousSlice;
|
|
92
96
|
};
|
|
93
97
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SceneMaterial, type SceneMaterialId, type WallNode, type WallTrimConfig } from '@pascal-app/core';
|
|
1
|
+
import { type SceneMaterial, type SceneMaterialId, type WallFace, type WallNode, type WallTrimConfig, type WallTrimKind, type WallTrimSlotId } from '@pascal-app/core';
|
|
2
2
|
import { type RenderShading } from '@pascal-app/viewer';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { type WallTreatmentLevelData } from './treatment-level-data';
|
|
@@ -8,20 +8,20 @@ type OpeningLike = {
|
|
|
8
8
|
height?: number;
|
|
9
9
|
position?: [number, number, number];
|
|
10
10
|
};
|
|
11
|
-
type TrimKind =
|
|
12
|
-
type WallSide =
|
|
11
|
+
type TrimKind = WallTrimKind;
|
|
12
|
+
type WallSide = WallFace;
|
|
13
13
|
type SceneMaterials = Record<SceneMaterialId, SceneMaterial>;
|
|
14
|
-
type WallTreatmentSlotId =
|
|
14
|
+
type WallTreatmentSlotId = WallTrimSlotId;
|
|
15
15
|
export declare function hasWallTreatments(node: WallNode): boolean;
|
|
16
16
|
export declare function wallTreatmentProudOffsets(node: WallNode): number[];
|
|
17
17
|
export declare function buildTrimGeometry(node: WallNode, side: WallSide, trim: WallTrimConfig, kind: TrimKind, childrenNodes: OpeningLike[], levelData: WallTreatmentLevelData): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | null;
|
|
18
18
|
export declare function createWallExtraSlotMaterials(node: WallNode, shading: RenderShading, sceneMaterials: SceneMaterials): {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
aSkirting: THREE.Material<THREE.MaterialEventMap>;
|
|
20
|
+
bSkirting: THREE.Material<THREE.MaterialEventMap>;
|
|
21
|
+
aCrown: THREE.Material<THREE.MaterialEventMap>;
|
|
22
|
+
bCrown: THREE.Material<THREE.MaterialEventMap>;
|
|
23
|
+
aChairRail: THREE.Material<THREE.MaterialEventMap>;
|
|
24
|
+
bChairRail: THREE.Material<THREE.MaterialEventMap>;
|
|
25
25
|
};
|
|
26
26
|
export declare const WallTreatments: import("react").MemoExoticComponent<({ node, childrenNodes, levelData, materials, }: {
|
|
27
27
|
node: WallNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treatments.d.ts","sourceRoot":"","sources":["../../src/wall/treatments.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"treatments.d.ts","sourceRoot":"","sources":["../../src/wall/treatments.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,aAAa,EAClB,KAAK,eAAe,EAOpB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAMhG,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC,CAAA;AAED,KAAK,QAAQ,GAAG,YAAY,CAAA;AAC5B,KAAK,QAAQ,GAAG,QAAQ,CAAA;AACxB,KAAK,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE5D,KAAK,mBAAmB,GAAG,cAAc,CAAA;AAoMzC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAMzD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAoBlE;AAwND,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,WAAW,EAAE,EAC5B,SAAS,EAAE,sBAAsB,2FAoGlC;AAkBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc;;;;;;;EAU/B;AAED,eAAO,MAAM,cAAc,uFAKxB;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,EAAE,WAAW,EAAE,CAAA;IAC5B,SAAS,EAAE,sBAAsB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;CACvD,iCA+DC,CAAA"}
|