@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
package/dist/window/tool.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { dormerWallFacePointToDormer, emitter, getEffectiveNode, holdHiddenWallPointerEvents, isCurvedWall, sceneRegistry, spatialGridManager, useLiveNodeOverrides, useScene, WallNode as WallNodeSchema, WindowNode, } from '@pascal-app/core';
|
|
2
|
+
import { beginSceneHistoryDraft, dormerWallFacePointToDormer, emitter, getEffectiveNode, holdHiddenWallPointerEvents, isCurvedWall, sceneRegistry, spatialGridManager, useLiveNodeOverrides, useScene, WallNode as WallNodeSchema, WindowNode, } from '@pascal-app/core';
|
|
3
|
+
import { windowTakesStyle } from '@pascal-app/core/building';
|
|
3
4
|
import { calculateItemRotation, clearPlacementSurface, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, publishPlacementSurface, snapToHalf, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, useRegistryToolContext, } from '@pascal-app/editor';
|
|
4
5
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
5
6
|
import { BoxGeometry, EdgesGeometry, Vector3 } from 'three';
|
|
@@ -11,6 +12,7 @@ import { getRoofWallOpeningCursorPose, resolveRoofWallOpeningTarget, worldToSele
|
|
|
11
12
|
import { wallEventFromGrid } from '../shared/wall-event-from-grid';
|
|
12
13
|
import { collectWallOpeningAlignmentCandidates, resolveWallSlideAlignment, } from '../shared/wall-opening-alignment';
|
|
13
14
|
import { WindowFloorProjection } from './floor-projection';
|
|
15
|
+
import { placedWindowFields, useWindowPlacement } from './placement';
|
|
14
16
|
import WindowPreview from './preview';
|
|
15
17
|
import { clampToWall, DEFAULT_WINDOW_SILL_M, hasWallChildOverlap, wallLocalToWorld, } from './window-math';
|
|
16
18
|
// Shared edge material — reuse across renders, just toggle color
|
|
@@ -49,20 +51,50 @@ const WindowTool = () => {
|
|
|
49
51
|
// `floorY` feeds the floor "shadow" projection; `side` carries the R-flip so
|
|
50
52
|
// the floating ghost faces the side that will be committed.
|
|
51
53
|
const [fallbackPose, setFallbackPose] = useState(null);
|
|
52
|
-
|
|
54
|
+
const placedType = useWindowPlacement((state) => state.type);
|
|
55
|
+
const placedStyle = useWindowPlacement((state) => state.style);
|
|
56
|
+
// Ghost preview node — zeroed transform + the live facing side (rebuilds on R) and the
|
|
57
|
+
// chips' type and style (rebuilds on O / L).
|
|
58
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: placedWindowFields reads the chips' store
|
|
53
59
|
const ghostStub = useMemo(() => WindowNode.parse({
|
|
60
|
+
...placedWindowFields(),
|
|
54
61
|
position: [0, 0, 0],
|
|
55
62
|
rotation: [0, 0, 0],
|
|
56
63
|
side: fallbackPose?.side ?? 'front',
|
|
57
|
-
}), [fallbackPose?.side]);
|
|
64
|
+
}), [fallbackPose?.side, placedType, placedStyle]);
|
|
58
65
|
// The frame depth is a fixed parse default (the `side` flip doesn't change
|
|
59
66
|
// it); a ref lets the facing-pose publish inside the setup effect read it
|
|
60
67
|
// without re-subscribing every event listener.
|
|
61
68
|
const frameDepthRef = useRef(ghostStub.frameDepth);
|
|
62
69
|
useEffect(() => {
|
|
63
70
|
useScene.temporal.getState().pause();
|
|
71
|
+
// The draft is a created carry draft: undo history and every save leave it out
|
|
72
|
+
// (core `getSceneDocument`), so a reload mid-placement never finds it in the scene.
|
|
73
|
+
const draftHistoryEnds = new Map();
|
|
74
|
+
const createDraft = (node, parentId) => {
|
|
75
|
+
const end = beginSceneHistoryDraft(node.id, null);
|
|
76
|
+
draftHistoryEnds.set(node.id, end);
|
|
77
|
+
try {
|
|
78
|
+
useScene.getState().createNode(node, parentId);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
end();
|
|
82
|
+
draftHistoryEnds.delete(node.id);
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const deleteDraft = (id) => {
|
|
87
|
+
try {
|
|
88
|
+
useScene.getState().deleteNode(id);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
draftHistoryEnds.get(id)?.();
|
|
92
|
+
draftHistoryEnds.delete(id);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
64
95
|
const ownedPreviewIds = new Set();
|
|
65
|
-
const fallbackPreview = WindowNode.parse({
|
|
96
|
+
const fallbackPreview = () => WindowNode.parse({
|
|
97
|
+
...placedWindowFields(),
|
|
66
98
|
position: [0, 0, 0],
|
|
67
99
|
rotation: [0, 0, 0],
|
|
68
100
|
side: 'front',
|
|
@@ -112,7 +144,7 @@ const WindowTool = () => {
|
|
|
112
144
|
const id = getLevelId();
|
|
113
145
|
return id ? (sceneRegistry.nodes.get(id)?.position.y ?? 0) : 0;
|
|
114
146
|
};
|
|
115
|
-
const getSlabElevationForWall = (wall) => spatialGridManager.getSlabElevationForWall(wall.parentId ?? '', wall.start, wall.end, wall.curveOffset ?? 0, wall.thickness, wall.supportSlabId);
|
|
147
|
+
const getSlabElevationForWall = (wall) => spatialGridManager.getSlabElevationForWall(wall.parentId ?? '', wall.start, wall.end, wall.curveOffset ?? 0, wall.thickness, wall.supportSlabId, wall.justification);
|
|
116
148
|
const markHostDirty = (hostId) => {
|
|
117
149
|
useScene.getState().dirtyNodes.add(hostId);
|
|
118
150
|
};
|
|
@@ -124,7 +156,7 @@ const WindowTool = () => {
|
|
|
124
156
|
}
|
|
125
157
|
const wallId = draft.parentId;
|
|
126
158
|
useLiveNodeOverrides.getState().clear(draft.id);
|
|
127
|
-
|
|
159
|
+
deleteDraft(draft.id);
|
|
128
160
|
draftRef.current = null;
|
|
129
161
|
clearPlacementPreview();
|
|
130
162
|
// Rebuild wall so it removes the cutout from the deleted draft
|
|
@@ -179,7 +211,8 @@ const WindowTool = () => {
|
|
|
179
211
|
floorY,
|
|
180
212
|
side: sideFlip ? 'back' : 'front',
|
|
181
213
|
});
|
|
182
|
-
const
|
|
214
|
+
const preview = fallbackPreview();
|
|
215
|
+
const halfWidth = preview.width / 2 + 0.5;
|
|
183
216
|
const wall = WallNodeSchema.parse({
|
|
184
217
|
end: [position[0] + halfWidth, position[2]],
|
|
185
218
|
id: fallbackWallId,
|
|
@@ -187,10 +220,10 @@ const WindowTool = () => {
|
|
|
187
220
|
thickness: 0.1,
|
|
188
221
|
});
|
|
189
222
|
const ghost = WindowNode.parse({
|
|
190
|
-
...
|
|
223
|
+
...preview,
|
|
191
224
|
metadata: { isTransient: true },
|
|
192
225
|
parentId: wall.id,
|
|
193
|
-
position: [halfWidth, FALLBACK_SILL_LIFT +
|
|
226
|
+
position: [halfWidth, FALLBACK_SILL_LIFT + preview.height / 2, 0],
|
|
194
227
|
rotation: [0, sideFlip ? Math.PI : 0, 0],
|
|
195
228
|
side: sideFlip ? 'back' : 'front',
|
|
196
229
|
wallId: wall.id,
|
|
@@ -219,31 +252,32 @@ const WindowTool = () => {
|
|
|
219
252
|
const itemRotation = sideFlip ? Math.PI : 0;
|
|
220
253
|
if (draftRef.current && draftRef.current.parentId !== event.node.id)
|
|
221
254
|
destroyDraft();
|
|
222
|
-
if (
|
|
223
|
-
|
|
255
|
+
if (draftRef.current) {
|
|
256
|
+
useLiveNodeOverrides.getState().set(draftRef.current.id, {
|
|
224
257
|
position: target.position,
|
|
225
258
|
rotation: [0, itemRotation, 0],
|
|
226
259
|
side,
|
|
227
260
|
parentId: event.node.id,
|
|
228
261
|
dormerId: event.node.id,
|
|
229
262
|
dormerFace: target.face,
|
|
230
|
-
|
|
263
|
+
wallId: undefined,
|
|
264
|
+
roofSegmentId: undefined,
|
|
265
|
+
roofFace: undefined,
|
|
231
266
|
});
|
|
232
|
-
useScene.getState().createNode(node, event.node.id);
|
|
233
|
-
draftRef.current = node;
|
|
234
267
|
}
|
|
235
268
|
else {
|
|
236
|
-
|
|
269
|
+
const node = WindowNode.parse({
|
|
270
|
+
...placedWindowFields(),
|
|
237
271
|
position: target.position,
|
|
238
272
|
rotation: [0, itemRotation, 0],
|
|
239
273
|
side,
|
|
240
274
|
parentId: event.node.id,
|
|
241
275
|
dormerId: event.node.id,
|
|
242
276
|
dormerFace: target.face,
|
|
243
|
-
|
|
244
|
-
roofSegmentId: undefined,
|
|
245
|
-
roofFace: undefined,
|
|
277
|
+
metadata: { isTransient: true },
|
|
246
278
|
});
|
|
279
|
+
createDraft(node, event.node.id);
|
|
280
|
+
draftRef.current = node;
|
|
247
281
|
}
|
|
248
282
|
publishDraftPreview(event.node);
|
|
249
283
|
clearOpeningGuides3D();
|
|
@@ -305,6 +339,7 @@ const WindowTool = () => {
|
|
|
305
339
|
const height = draftRef.current?.height ?? 1.5;
|
|
306
340
|
if (!draftRef.current) {
|
|
307
341
|
const node = WindowNode.parse({
|
|
342
|
+
...placedWindowFields(),
|
|
308
343
|
position: [0, DEFAULT_SILL_CENTER_Y, 0],
|
|
309
344
|
rotation: [0, itemRotation, 0],
|
|
310
345
|
side,
|
|
@@ -312,7 +347,7 @@ const WindowTool = () => {
|
|
|
312
347
|
parentId: wall.id,
|
|
313
348
|
metadata: { isTransient: true },
|
|
314
349
|
});
|
|
315
|
-
|
|
350
|
+
createDraft(node, wall.id);
|
|
316
351
|
draftRef.current = node;
|
|
317
352
|
}
|
|
318
353
|
const { clampedX, clampedY, valid } = resolveWallPlacement(wall, rawLocalX, rawLocalY, width, height, applySnap, draftRef.current.id);
|
|
@@ -364,7 +399,7 @@ const WindowTool = () => {
|
|
|
364
399
|
draftRef.current = null;
|
|
365
400
|
hostKind = null;
|
|
366
401
|
useLiveNodeOverrides.getState().clear(draft.id);
|
|
367
|
-
|
|
402
|
+
deleteDraft(draft.id);
|
|
368
403
|
useScene.temporal.getState().resume();
|
|
369
404
|
const levelId = getLevelId();
|
|
370
405
|
const state = useScene.getState();
|
|
@@ -420,7 +455,7 @@ const WindowTool = () => {
|
|
|
420
455
|
draftRef.current = null;
|
|
421
456
|
hostKind = null;
|
|
422
457
|
useLiveNodeOverrides.getState().clear(draft.id);
|
|
423
|
-
|
|
458
|
+
deleteDraft(draft.id);
|
|
424
459
|
useScene.temporal.getState().resume();
|
|
425
460
|
const state = useScene.getState();
|
|
426
461
|
const windowCount = Object.values(state.nodes).filter((node) => node.type === 'window').length;
|
|
@@ -697,6 +732,7 @@ const WindowTool = () => {
|
|
|
697
732
|
}
|
|
698
733
|
else {
|
|
699
734
|
const node = WindowNode.parse({
|
|
735
|
+
...placedWindowFields(),
|
|
700
736
|
position,
|
|
701
737
|
rotation: [0, 0, 0],
|
|
702
738
|
side: 'front',
|
|
@@ -705,7 +741,7 @@ const WindowTool = () => {
|
|
|
705
741
|
parentId: segment.id,
|
|
706
742
|
metadata: { isTransient: true },
|
|
707
743
|
});
|
|
708
|
-
|
|
744
|
+
createDraft(node, segment.id);
|
|
709
745
|
draftRef.current = node;
|
|
710
746
|
}
|
|
711
747
|
publishDraftPreview(segment);
|
|
@@ -729,7 +765,7 @@ const WindowTool = () => {
|
|
|
729
765
|
draftRef.current = null;
|
|
730
766
|
hostKind = null;
|
|
731
767
|
useLiveNodeOverrides.getState().clear(draft.id);
|
|
732
|
-
|
|
768
|
+
deleteDraft(draft.id);
|
|
733
769
|
useScene.temporal.getState().resume();
|
|
734
770
|
const state = useScene.getState();
|
|
735
771
|
const windowCount = Object.values(state.nodes).filter((n) => n.type === 'window' && n.roofSegmentId !== undefined).length;
|
|
@@ -790,14 +826,28 @@ const WindowTool = () => {
|
|
|
790
826
|
// guard dropped R off-wall / before the first hover). Then re-renders the
|
|
791
827
|
// current preview so the flip shows live and matches commit.
|
|
792
828
|
const onKeyDown = (e) => {
|
|
793
|
-
|
|
829
|
+
const key = e.key.toLowerCase();
|
|
830
|
+
if (key !== 'r' && key !== 'o' && key !== 'l')
|
|
831
|
+
return;
|
|
832
|
+
if (key === 'l' && !windowTakesStyle(useWindowPlacement.getState().type))
|
|
794
833
|
return;
|
|
795
834
|
if (e.repeat)
|
|
796
835
|
return;
|
|
797
836
|
const t = e.target;
|
|
798
837
|
if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable))
|
|
799
838
|
return;
|
|
839
|
+
if (key !== 'r' && (e.metaKey || e.ctrlKey || e.altKey))
|
|
840
|
+
return;
|
|
800
841
|
e.preventDefault();
|
|
842
|
+
if (key !== 'r') {
|
|
843
|
+
// O / L cycle the chips; the store subscription re-previews.
|
|
844
|
+
if (key === 'o')
|
|
845
|
+
useWindowPlacement.getState().cycleType();
|
|
846
|
+
else
|
|
847
|
+
useWindowPlacement.getState().cycleStyle();
|
|
848
|
+
triggerSFX('sfx:item-rotate');
|
|
849
|
+
return;
|
|
850
|
+
}
|
|
801
851
|
sideFlip = !sideFlip;
|
|
802
852
|
triggerSFX('sfx:item-rotate');
|
|
803
853
|
if (lastWallEvent) {
|
|
@@ -832,6 +882,25 @@ const WindowTool = () => {
|
|
|
832
882
|
emitter.on('grid:pointerup', onGridPointerUp);
|
|
833
883
|
emitter.on('tool:cancel', onCancel);
|
|
834
884
|
window.addEventListener('keydown', onKeyDown);
|
|
885
|
+
// A chip changed (key or click): the draft takes the new type and style, then re-previews.
|
|
886
|
+
const unsubscribePlacement = useWindowPlacement.subscribe(() => {
|
|
887
|
+
const draft = draftRef.current;
|
|
888
|
+
if (draft) {
|
|
889
|
+
useScene.getState().updateNode(draft.id, placedWindowFields());
|
|
890
|
+
const live = useScene.getState().nodes[draft.id];
|
|
891
|
+
if (live?.type === 'window')
|
|
892
|
+
draftRef.current = live;
|
|
893
|
+
}
|
|
894
|
+
const parent = draft?.parentId ? useScene.getState().nodes[draft.parentId] : null;
|
|
895
|
+
if (lastWallEvent)
|
|
896
|
+
onWallHover(lastWallEvent);
|
|
897
|
+
else if (lastDormerEvent)
|
|
898
|
+
onDormerHover(lastDormerEvent);
|
|
899
|
+
else if (parent)
|
|
900
|
+
publishDraftPreview(parent);
|
|
901
|
+
else if (lastFloorPoint)
|
|
902
|
+
showGhostAt(lastFloorPoint.pos, lastFloorPoint.floorY);
|
|
903
|
+
});
|
|
835
904
|
// Placement tracks the cursor through wall events; keep walls hidden by
|
|
836
905
|
// the wall-mode pass (X-ray 'down' mode) pointer-targetable while the
|
|
837
906
|
// tool is active so a new window still snaps onto them (see the wall
|
|
@@ -839,6 +908,8 @@ const WindowTool = () => {
|
|
|
839
908
|
const releaseHiddenWallHold = holdHiddenWallPointerEvents();
|
|
840
909
|
return () => {
|
|
841
910
|
destroyDraft();
|
|
911
|
+
for (const end of draftHistoryEnds.values())
|
|
912
|
+
end();
|
|
842
913
|
hideCursor();
|
|
843
914
|
clearPlacementPreview();
|
|
844
915
|
useAlignmentGuides.getState().clear();
|
|
@@ -866,6 +937,7 @@ const WindowTool = () => {
|
|
|
866
937
|
emitter.off('grid:pointerup', onGridPointerUp);
|
|
867
938
|
emitter.off('tool:cancel', onCancel);
|
|
868
939
|
window.removeEventListener('keydown', onKeyDown);
|
|
940
|
+
unsubscribePlacement();
|
|
869
941
|
};
|
|
870
942
|
}, [activeLevelId, isCameraDragging, selectNode]);
|
|
871
943
|
// Cursor geometry: window outline rectangle. Static dims, so build it once and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type WallNode } from '@pascal-app/core';
|
|
2
2
|
/**
|
|
3
3
|
* Default sill height (metres from the floor to the BOTTOM of a window) for a
|
|
4
4
|
* fresh window that has no wall-face height yet — the off-wall ghost and the
|
|
@@ -8,24 +8,16 @@ import { type AnyNode, type AnyNodeId, type WallNode } from '@pascal-app/core';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const DEFAULT_WINDOW_SILL_M = 0.5;
|
|
10
10
|
/**
|
|
11
|
-
* Converts wall-local (X along wall, Y = height above wall base
|
|
11
|
+
* Converts wall-local (X along wall, Y = height above wall base, Z = offset
|
|
12
|
+
* from the wall centre plane along its normal) to world XYZ.
|
|
12
13
|
* Wall XZ uses level-local coordinates (levels only offset in Y, not XZ).
|
|
13
14
|
* Pass levelYOffset (the level group's current world Y) and slabElevation (the
|
|
14
15
|
* wall mesh's Y within the level group) so the cursor lands at the correct world
|
|
15
16
|
* height — matching how WallSystem positions the wall mesh at slabElevation.
|
|
16
17
|
*/
|
|
17
|
-
export declare function wallLocalToWorld(wallNode: WallNode, localX: number, localY: number, levelYOffset?: number, slabElevation?: number): [number, number, number];
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
* ceiling is the wall's RESOLVED top (storey plane for plane-bound walls,
|
|
21
|
-
* stored height for explicit ones, minus the elected slab base) — `nodes` is
|
|
22
|
-
* required because a plane-bound wall's top lives on its level, not on the
|
|
23
|
-
* wall record.
|
|
24
|
-
*/
|
|
25
|
-
export declare function clampToWall(wallNode: WallNode, localX: number, localY: number, width: number, height: number, nodes: Readonly<Record<AnyNodeId, AnyNode>>): {
|
|
26
|
-
clampedX: number;
|
|
27
|
-
clampedY: number;
|
|
28
|
-
};
|
|
18
|
+
export declare function wallLocalToWorld(wallNode: WallNode, localX: number, localY: number, levelYOffset?: number, slabElevation?: number, localZ?: number): [number, number, number];
|
|
19
|
+
/** Window centre on its wall and under its ceiling: the shared rule in core (`clampWindowToWall`). */
|
|
20
|
+
export { clampWindowToWall as clampToWall } from '@pascal-app/core/building';
|
|
29
21
|
/**
|
|
30
22
|
* Wall-child overlap is shared by door + window placement (one source of
|
|
31
23
|
* truth in `shared/wall-attach-target.ts`). Re-exported here so existing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window-math.d.ts","sourceRoot":"","sources":["../../src/window/window-math.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"window-math.d.ts","sourceRoot":"","sources":["../../src/window/window-math.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAEzB;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,YAAY,SAAI,EAChB,aAAa,SAAI,EACjB,MAAM,SAAI,GACT,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAW1B;AAED,sGAAsG;AACtG,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5E;;;;GAIG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
|
|
1
|
+
import { getWallBodyCenterOffset, getWallCurveFrameAt, getWallCurveLength, } from '@pascal-app/core';
|
|
3
2
|
/**
|
|
4
3
|
* Default sill height (metres from the floor to the BOTTOM of a window) for a
|
|
5
4
|
* fresh window that has no wall-face height yet — the off-wall ghost and the
|
|
@@ -9,32 +8,27 @@ import { resolveWallOpeningCeiling } from '../shared/wall-opening-ceiling';
|
|
|
9
8
|
*/
|
|
10
9
|
export const DEFAULT_WINDOW_SILL_M = 0.5;
|
|
11
10
|
/**
|
|
12
|
-
* Converts wall-local (X along wall, Y = height above wall base
|
|
11
|
+
* Converts wall-local (X along wall, Y = height above wall base, Z = offset
|
|
12
|
+
* from the wall centre plane along its normal) to world XYZ.
|
|
13
13
|
* Wall XZ uses level-local coordinates (levels only offset in Y, not XZ).
|
|
14
14
|
* Pass levelYOffset (the level group's current world Y) and slabElevation (the
|
|
15
15
|
* wall mesh's Y within the level group) so the cursor lands at the correct world
|
|
16
16
|
* height — matching how WallSystem positions the wall mesh at slabElevation.
|
|
17
17
|
*/
|
|
18
|
-
export function wallLocalToWorld(wallNode, localX, localY, levelYOffset = 0, slabElevation = 0) {
|
|
18
|
+
export function wallLocalToWorld(wallNode, localX, localY, levelYOffset = 0, slabElevation = 0, localZ = 0) {
|
|
19
19
|
const wallLength = getWallCurveLength(wallNode);
|
|
20
20
|
const frame = getWallCurveFrameAt(wallNode, wallLength > 1e-6 ? localX / wallLength : 0);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
export function clampToWall(wallNode, localX, localY, width, height, nodes) {
|
|
31
|
-
const wallLength = getWallCurveLength(wallNode);
|
|
32
|
-
const wallHeight = resolveWallOpeningCeiling(wallNode, nodes);
|
|
33
|
-
const margin = wallNode.wallType === 'curtain' ? getCurtainWallConfig(wallNode).perimeterWidth : 0;
|
|
34
|
-
const clampedX = Math.max(margin + width / 2, Math.min(wallLength - margin - width / 2, localX));
|
|
35
|
-
const clampedY = Math.max(margin + height / 2, Math.min(wallHeight - margin - height / 2, localY));
|
|
36
|
-
return { clampedX, clampedY };
|
|
21
|
+
// `localZ` is measured from the body's centre plane, which a justified wall
|
|
22
|
+
// sets off its reference line.
|
|
23
|
+
const across = getWallBodyCenterOffset(wallNode) + localZ;
|
|
24
|
+
return [
|
|
25
|
+
frame.point.x + frame.normal.x * across,
|
|
26
|
+
slabElevation + localY + levelYOffset,
|
|
27
|
+
frame.point.y + frame.normal.y * across,
|
|
28
|
+
];
|
|
37
29
|
}
|
|
30
|
+
/** Window centre on its wall and under its ceiling: the shared rule in core (`clampWindowToWall`). */
|
|
31
|
+
export { clampWindowToWall as clampToWall } from '@pascal-app/core/building';
|
|
38
32
|
/**
|
|
39
33
|
* Wall-child overlap is shared by door + window placement (one source of
|
|
40
34
|
* truth in `shared/wall-attach-target.ts`). Re-exported here so existing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextual-dimensions.d.ts","sourceRoot":"","sources":["../../src/zone/contextual-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAEpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"contextual-dimensions.d.ts","sourceRoot":"","sources":["../../src/zone/contextual-dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EAEpB,KAAK,QAAQ,EACd,MAAM,kBAAkB,CAAA;AAGzB,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAgB1B"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { area as footprintArea, polygonInteriorPoint, } from '@pascal-app/core';
|
|
2
2
|
import { formatAreaLabel } from '@pascal-app/editor';
|
|
3
3
|
export function buildZoneContextualDimensions(node, ctx) {
|
|
4
|
-
|
|
4
|
+
if (node.autoFromWalls && node.enclosureStatus === 'open')
|
|
5
|
+
return null;
|
|
6
|
+
const polygon = node.polygon;
|
|
5
7
|
if (polygon.length < 3)
|
|
6
8
|
return null;
|
|
7
|
-
const {
|
|
9
|
+
const area = footprintArea([{ outer: polygon, holes: node.holes ?? [] }]);
|
|
10
|
+
const centroid = polygonInteriorPoint(node, true);
|
|
8
11
|
if (area <= 1e-6)
|
|
9
12
|
return null;
|
|
10
13
|
return {
|
|
@@ -16,28 +19,3 @@ export function buildZoneContextualDimensions(node, ctx) {
|
|
|
16
19
|
angle: 0,
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
|
-
function polygonAreaAndCentroid(points) {
|
|
20
|
-
let twiceSignedArea = 0;
|
|
21
|
-
let weightedX = 0;
|
|
22
|
-
let weightedY = 0;
|
|
23
|
-
for (let index = 0; index < points.length; index += 1) {
|
|
24
|
-
const current = points[index];
|
|
25
|
-
const next = points[(index + 1) % points.length];
|
|
26
|
-
const cross = current[0] * next[1] - next[0] * current[1];
|
|
27
|
-
twiceSignedArea += cross;
|
|
28
|
-
weightedX += (current[0] + next[0]) * cross;
|
|
29
|
-
weightedY += (current[1] + next[1]) * cross;
|
|
30
|
-
}
|
|
31
|
-
const area = Math.abs(twiceSignedArea) / 2;
|
|
32
|
-
if (Math.abs(twiceSignedArea) <= 1e-9) {
|
|
33
|
-
const sum = points.reduce((acc, point) => [acc[0] + point[0], acc[1] + point[1]], [0, 0]);
|
|
34
|
-
return {
|
|
35
|
-
area,
|
|
36
|
-
centroid: [sum[0] / points.length, sum[1] / points.length],
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
return {
|
|
40
|
-
area,
|
|
41
|
-
centroid: [weightedX / (3 * twiceSignedArea), weightedY / (3 * twiceSignedArea)],
|
|
42
|
-
};
|
|
43
|
-
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/zone/definition.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/zone/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAelF,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,QAAQ,CAoF1D,CAAA"}
|
package/dist/zone/definition.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ZoneNode as ZoneNodeSchema } from '@pascal-app/core';
|
|
2
2
|
import { polygonMeasurementFeatures } from '../shared/polygon-measurement';
|
|
3
3
|
import { buildZoneContextualDimensions } from './contextual-dimensions';
|
|
4
4
|
import { buildZoneFloorplan } from './floorplan';
|
|
@@ -46,9 +46,9 @@ export const zoneDefinition = {
|
|
|
46
46
|
featurePrefix: 'zone',
|
|
47
47
|
height: 0,
|
|
48
48
|
label: 'Zone',
|
|
49
|
-
polygon:
|
|
49
|
+
polygon: node.polygon,
|
|
50
50
|
}),
|
|
51
|
-
quickMeasure: (node
|
|
51
|
+
quickMeasure: (node) => zoneQuickMeasurement(node),
|
|
52
52
|
},
|
|
53
53
|
// No dirty consumer rebuilds this kind — see NodeDefinition.dirtyTracking.
|
|
54
54
|
dirtyTracking: false,
|