@pascal-app/nodes 1.0.1 → 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 +22 -4
- package/dist/block/face-host.d.ts.map +1 -1
- package/dist/block/face-host.js +19 -2
- 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 +13 -0
- package/dist/block/hosted-edit.d.ts.map +1 -0
- package/dist/block/hosted-edit.js +230 -0
- package/dist/block/last-operation.d.ts +1 -1
- package/dist/block/last-operation.d.ts.map +1 -1
- package/dist/block/last-operation.js +6 -4
- 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/modal-session.d.ts +2 -1
- package/dist/block/modal-session.d.ts.map +1 -1
- package/dist/block/modal-session.js +2 -2
- 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 +83 -25
- package/dist/block/surface.d.ts +4 -0
- package/dist/block/surface.d.ts.map +1 -0
- package/dist/block/surface.js +54 -0
- package/dist/block/use-block-face-operation.d.ts +2 -2
- package/dist/block/use-block-face-operation.d.ts.map +1 -1
- package/dist/block/use-block-face-operation.js +25 -11
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +3 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +5 -28
- package/dist/building/renderer.d.ts.map +1 -1
- package/dist/building/renderer.js +1 -1
- 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 +4 -3
- 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/hosted-resize.d.ts +3 -6
- package/dist/cabinet/hosted-resize.d.ts.map +1 -1
- package/dist/cabinet/hosted-resize.js +9 -153
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +4 -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/surfaces.d.ts +1 -0
- package/dist/cabinet/surfaces.d.ts.map +1 -1
- package/dist/cabinet/surfaces.js +13 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +30 -28
- 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 +20 -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 +43 -6
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- 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 +34 -5
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +11 -1
- package/dist/column/floorplan.d.ts +1 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +69 -12
- package/dist/column/hosted-resize.d.ts +215 -0
- package/dist/column/hosted-resize.d.ts.map +1 -0
- package/dist/column/hosted-resize.js +9 -0
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +153 -149
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +29 -105
- package/dist/column/shape.d.ts +22 -0
- package/dist/column/shape.d.ts.map +1 -0
- package/dist/column/shape.js +120 -0
- package/dist/column/surface.d.ts +4 -0
- package/dist/column/surface.d.ts.map +1 -0
- package/dist/column/surface.js +73 -0
- package/dist/construction-dimension/floorplan.js +7 -3
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +3 -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 +52 -4
- package/dist/door/door-math.d.ts +6 -11
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +13 -17
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +8 -12
- 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 +75 -52
- 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 +54 -308
- 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 +112 -23
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +2 -0
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -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 +3 -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/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +11 -0
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +77 -8
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +3 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +5 -27
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +98 -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 +3 -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 +84 -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 +257 -48
- 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/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.js +1 -0
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +3 -2
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -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 +35 -4
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +209 -130
- package/dist/item/floorplan.d.ts +22 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +95 -6
- 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.d.ts +1 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +19 -11
- 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 +72 -40
- 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/level/renderer.js +1 -1
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +8 -2
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +1 -0
- package/dist/liquid-line/move-tool.d.ts.map +1 -1
- package/dist/liquid-line/move-tool.js +8 -2
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +5 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +2 -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/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +14 -3
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -8
- 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 +77 -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/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.js +1 -0
- 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 +8 -2
- 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 +4 -0
- package/dist/roof/panel-model.d.ts.map +1 -0
- package/dist/roof/panel-model.js +155 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +5 -13
- package/dist/roof/parametrics.d.ts.map +1 -1
- package/dist/roof/parametrics.js +16 -1
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +5 -2
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +1 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +5 -24
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +176 -1
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +17 -8
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +1 -0
- 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/commit-opening-move.d.ts +4 -0
- package/dist/shared/commit-opening-move.d.ts.map +1 -0
- package/dist/shared/commit-opening-move.js +9 -0
- package/dist/shared/curtain-opening-limits.d.ts +14 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
- package/dist/shared/curtain-opening-limits.js +53 -0
- package/dist/shared/draft-axis-guides.d.ts +0 -6
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +1 -8
- 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/hosted-resize.d.ts +12 -0
- package/dist/shared/hosted-resize.d.ts.map +1 -0
- package/dist/shared/hosted-resize.js +166 -0
- 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-grid-follow.d.ts +8 -0
- package/dist/shared/opening-grid-follow.d.ts.map +1 -0
- package/dist/shared/opening-grid-follow.js +12 -0
- 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/opening-property-preview-host.d.ts +3 -0
- package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
- package/dist/shared/opening-property-preview-host.js +21 -0
- package/dist/shared/opening-property-preview.d.ts +19 -0
- package/dist/shared/opening-property-preview.d.ts.map +1 -0
- package/dist/shared/opening-property-preview.js +99 -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/resting-surface-plan.d.ts +2 -1
- package/dist/shared/resting-surface-plan.d.ts.map +1 -1
- package/dist/shared/resting-surface-plan.js +29 -4
- 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-counterparts.d.ts +12 -0
- package/dist/shared/surface-counterparts.d.ts.map +1 -0
- package/dist/shared/surface-counterparts.js +27 -0
- 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 +4 -10
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -63
- package/dist/shared/wall-event-from-grid.d.ts +5 -0
- package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
- package/dist/shared/wall-event-from-grid.js +36 -0
- 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 +4 -2
- package/dist/shelf/floorplan.d.ts.map +1 -1
- package/dist/shelf/floorplan.js +9 -2
- 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 +158 -20
- 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/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- 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 +23 -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/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- 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 +18 -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 +181 -1
- 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 +52 -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 +94 -1
- 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 +3 -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 +3 -0
- package/dist/wall/actions.d.ts.map +1 -0
- package/dist/wall/actions.js +61 -0
- package/dist/wall/construction-dimensions.js +8 -5
- package/dist/wall/contextual-dimensions.js +4 -4
- package/dist/wall/curtain-opening-frame.d.ts +14 -0
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
- package/dist/wall/curtain-opening-frame.js +111 -0
- package/dist/wall/curtain-panel-highlight.d.ts +3 -0
- package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
- package/dist/wall/curtain-panel-highlight.js +113 -0
- package/dist/wall/curtain-wall-adapter.d.ts +3 -0
- package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
- package/dist/wall/curtain-wall-adapter.js +55 -0
- package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
- package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/curtain-wall-floorplan.js +91 -0
- package/dist/wall/curtain-wall-geometry.d.ts +4 -0
- package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-geometry.js +226 -0
- package/dist/wall/curtain-wall-layout.d.ts +16 -0
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
- package/dist/wall/curtain-wall-layout.js +176 -0
- package/dist/wall/curtain-wall-materials.d.ts +5 -0
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
- package/dist/wall/curtain-wall-materials.js +55 -0
- package/dist/wall/curtain-wall-panel.d.ts +14 -0
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
- package/dist/wall/curtain-wall-panel.js +167 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-piece-geometry.js +220 -0
- package/dist/wall/curtain-wall-shadow.d.ts +4 -0
- package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
- package/dist/wall/curtain-wall-shadow.js +15 -0
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +4 -0
- package/dist/wall/definition.d.ts +0 -15
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +92 -7
- 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 +4 -0
- package/dist/wall/floorplan-tool.d.ts.map +1 -0
- package/dist/wall/floorplan-tool.js +106 -0
- package/dist/wall/floorplan.d.ts +3 -1
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +189 -22
- package/dist/wall/length-patch.d.ts +3 -0
- package/dist/wall/length-patch.d.ts.map +1 -0
- package/dist/wall/length-patch.js +14 -0
- 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 +140 -148
- package/dist/wall/paint.d.ts +26 -15
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +339 -115
- package/dist/wall/panel-model.d.ts +22 -0
- package/dist/wall/panel-model.d.ts.map +1 -0
- package/dist/wall/panel-model.js +175 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +233 -61
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +3 -0
- package/dist/wall/property-preview.d.ts +7 -0
- package/dist/wall/property-preview.d.ts.map +1 -0
- package/dist/wall/property-preview.js +31 -0
- package/dist/wall/rectangle-command.d.ts +248 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -0
- package/dist/wall/rectangle-command.js +22 -0
- package/dist/wall/rectangle-tool.d.ts +2 -0
- package/dist/wall/rectangle-tool.d.ts.map +1 -0
- package/dist/wall/rectangle-tool.js +165 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +9 -4
- package/dist/wall/split-floorplan-layer.d.ts +4 -0
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
- package/dist/wall/split-floorplan-layer.js +71 -0
- package/dist/wall/split-pointer.d.ts +3 -0
- package/dist/wall/split-pointer.d.ts.map +1 -0
- package/dist/wall/split-pointer.js +95 -0
- package/dist/wall/split-preview.d.ts +55 -0
- package/dist/wall/split-preview.d.ts.map +1 -0
- package/dist/wall/split-preview.js +106 -0
- package/dist/wall/split-session.d.ts +16 -0
- package/dist/wall/split-session.d.ts.map +1 -0
- package/dist/wall/split-session.js +144 -0
- package/dist/wall/split-store.d.ts +16 -0
- package/dist/wall/split-store.d.ts.map +1 -0
- package/dist/wall/split-store.js +6 -0
- package/dist/wall/split-tool.d.ts +10 -0
- package/dist/wall/split-tool.d.ts.map +1 -0
- package/dist/wall/split-tool.js +95 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +39 -5
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +114 -50
- 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 +38 -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 +60 -5
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +8 -10
- 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 +83 -54
- 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 +50 -144
- 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 +130 -26
- 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 +13 -22
- 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 +4 -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 +6 -33
- 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 +12 -12
- 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/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/shared/opening-documentation-fields.d.ts +0 -16
- package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
- package/dist/shared/opening-documentation-fields.js +0 -54
- 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/slots.d.ts +0 -10
- package/dist/wall/slots.d.ts.map +0 -1
- package/dist/wall/slots.js +0 -84
- 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/wall/paint.js
CHANGED
|
@@ -1,39 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { setSurfaceRaycastLayers } from '@pascal-app/viewer';
|
|
3
|
-
import { Raycaster } from 'three';
|
|
4
|
-
import { buildSlotPreviewMaterial, createSlotPaintCapability, previewSlotByUserData, } from '../shared/slot-paint';
|
|
5
|
-
import {
|
|
1
|
+
import { buildWallFinishLayout, getCurtainWallConfig, getEffectiveWallFaceMaterial, getWallFaceAtLocalPoint, getWallLevelZones, parseWallPaintRole as parseCoreWallPaintRole, parseMaterialRef, plannedWallIds, planWallPaint, resolveWallFaceChain, resolveWallFinish, sceneRegistry, useScene, WALL_SURFACE_SLOT_DEFAULTS, wallRegionRole, wallRoomFaceRole, wallRoomFinishRole, } from '@pascal-app/core';
|
|
2
|
+
import { getWallFaceBaseAt, getWallFinishData, getWallFinishRefs, hasMaterialsForGroups, setSurfaceRaycastLayers, } from '@pascal-app/viewer';
|
|
3
|
+
import { Raycaster, Vector3, } from 'three';
|
|
4
|
+
import { buildSlotPreviewMaterial, createSlotPaintCapability, previewSlotByUserData, resolveSlotPaintMaterialRef, } from '../shared/slot-paint';
|
|
5
|
+
import { swapPreviewMaterial } from '../shared/swap-preview-material';
|
|
6
6
|
const WALL_SLOT_IDS = new Set(Object.keys(WALL_SURFACE_SLOT_DEFAULTS));
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
middleExterior: 8,
|
|
16
|
-
upperExterior: 9,
|
|
17
|
-
topExterior: 10,
|
|
18
|
-
};
|
|
19
|
-
const WALL_INDEX_SLOT = new Map(Object.entries(WALL_ARRAY_SLOT_INDEX).map(([slotId, index]) => [
|
|
20
|
-
index,
|
|
21
|
-
slotId,
|
|
22
|
-
]));
|
|
7
|
+
// A curtain wall paints its frame, glass and solid panels (palette 0..2) instead of faces.
|
|
8
|
+
const CURTAIN_WALL_ROLES = ['curtain-frame', 'curtain-glass', 'curtain-solid'];
|
|
9
|
+
const isCurtainWallRole = (role) => CURTAIN_WALL_ROLES.includes(role);
|
|
10
|
+
const FACE_MATERIAL_INDEX = { a: 1, b: 2 };
|
|
11
|
+
export { wallRegionRole, wallRoomFaceRole, wallRoomFinishRole };
|
|
12
|
+
export function parseWallPaintRole(role) {
|
|
13
|
+
return parseCoreWallPaintRole(role, (slotId) => WALL_SLOT_IDS.has(slotId) || isCurtainWallRole(slotId));
|
|
14
|
+
}
|
|
23
15
|
const wallSlotRaycaster = new Raycaster();
|
|
24
16
|
setSurfaceRaycastLayers(wallSlotRaycaster.layers);
|
|
25
|
-
function resolveSideFromMaterialIndex(materialIndex) {
|
|
26
|
-
const slotId = materialIndex === null ? undefined : WALL_INDEX_SLOT.get(materialIndex);
|
|
27
|
-
if (slotId)
|
|
28
|
-
return getWallSurfaceSideFromBandSlot(slotId);
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
17
|
function resolveWallSlotByRay(node, ray) {
|
|
32
18
|
if (!ray)
|
|
33
19
|
return null;
|
|
34
20
|
const root = sceneRegistry.nodes.get(node.id);
|
|
35
21
|
if (!root)
|
|
36
22
|
return null;
|
|
23
|
+
// A mesh caught between a rebuild and its new palette cannot be raycast (three
|
|
24
|
+
// reads each group's material); no trim answers from it this move.
|
|
25
|
+
let drawable = true;
|
|
26
|
+
root.traverse((object) => {
|
|
27
|
+
drawable &&= hasMaterialsForGroups(object);
|
|
28
|
+
});
|
|
29
|
+
if (!drawable)
|
|
30
|
+
return null;
|
|
37
31
|
wallSlotRaycaster.ray.copy(ray);
|
|
38
32
|
const hits = wallSlotRaycaster.intersectObject(root, true);
|
|
39
33
|
for (const hit of hits) {
|
|
@@ -45,18 +39,20 @@ function resolveWallSlotByRay(node, ray) {
|
|
|
45
39
|
return null;
|
|
46
40
|
}
|
|
47
41
|
/**
|
|
48
|
-
* Resolve which wall
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* groups aren't conclusive. Front/back of the wall maps to the
|
|
52
|
-
* node's `frontSide` / `backSide` semantic; absent that, front
|
|
53
|
-
* → interior, back → exterior.
|
|
54
|
-
*
|
|
55
|
-
* Returns null when the click is too oblique (or lands on the wall's
|
|
56
|
-
* end-cap, etc.) to confidently assign a side.
|
|
42
|
+
* Resolve which wall surface the user clicked: a trim slot, a paint region,
|
|
43
|
+
* the room finish on that face, or the face slot itself. Returns null when the
|
|
44
|
+
* click is too oblique (or lands on the wall's end-cap, etc.) to pick a face.
|
|
57
45
|
*/
|
|
58
46
|
export function resolveWallRole(args) {
|
|
59
|
-
const { node, hitObject,
|
|
47
|
+
const { node, hitObject, localPosition, ray } = args;
|
|
48
|
+
if (node.wallType === 'curtain') {
|
|
49
|
+
const root = sceneRegistry.nodes.get(node.id);
|
|
50
|
+
if (!(root && ray))
|
|
51
|
+
return null;
|
|
52
|
+
wallSlotRaycaster.ray.copy(ray);
|
|
53
|
+
const hit = wallSlotRaycaster.intersectObject(root, false)[0];
|
|
54
|
+
return CURTAIN_WALL_ROLES[hit?.face?.materialIndex ?? -1] ?? null;
|
|
55
|
+
}
|
|
60
56
|
const directSlotId = hitObject?.userData?.slotId;
|
|
61
57
|
if (typeof directSlotId === 'string' && WALL_SLOT_IDS.has(directSlotId)) {
|
|
62
58
|
return directSlotId;
|
|
@@ -64,87 +60,262 @@ export function resolveWallRole(args) {
|
|
|
64
60
|
const raySlotId = resolveWallSlotByRay(node, ray);
|
|
65
61
|
if (raySlotId)
|
|
66
62
|
return raySlotId;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (indexedSlotId && indexedSlotId !== 'interior' && indexedSlotId !== 'exterior') {
|
|
71
|
-
return indexedSlotId;
|
|
72
|
-
}
|
|
73
|
-
if (sideFromIndex && localPosition) {
|
|
74
|
-
const effectiveWallHeight = resolveWallOpeningCeiling(node, useScene.getState().nodes);
|
|
75
|
-
const bands = getWallFaceBandConfig(node, effectiveWallHeight);
|
|
76
|
-
if (!bands.enabled)
|
|
77
|
-
return sideFromIndex;
|
|
78
|
-
return getWallBandSlotId(sideFromIndex, getWallFaceBandForHeight(node, localPosition[1], effectiveWallHeight));
|
|
63
|
+
// The underpinning's stemwall, below the finish carried over the rim.
|
|
64
|
+
if (node.underpinning && localPosition && localPosition[1] < -node.underpinning.rim) {
|
|
65
|
+
return 'foundation';
|
|
79
66
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const localZ = localPosition?.[2];
|
|
84
|
-
const thickness = node.thickness ?? 0.1;
|
|
85
|
-
if (normalZ === undefined ||
|
|
86
|
-
localZ === undefined ||
|
|
87
|
-
localPosition === undefined ||
|
|
88
|
-
Math.abs(normalZ) < 0.65 ||
|
|
89
|
-
Math.abs(localZ) < Math.max(thickness * 0.2, 0.01)) {
|
|
67
|
+
// The physical face comes from where the hit lies, never from the material
|
|
68
|
+
// index: a region can draw with a face slot's material on the other face.
|
|
69
|
+
if (!localPosition)
|
|
90
70
|
return null;
|
|
71
|
+
const face = getWallFaceAtLocalPoint(node, localPosition, args.normal);
|
|
72
|
+
if (!face)
|
|
73
|
+
return null;
|
|
74
|
+
const nodes = args.nodes ?? useScene.getState().nodes;
|
|
75
|
+
const layout = buildWallFinishLayout(node, getWallLevelZones(node, nodes));
|
|
76
|
+
if (layout.plain)
|
|
77
|
+
return face;
|
|
78
|
+
const mesh = sceneRegistry.nodes.get(node.id);
|
|
79
|
+
const u = localPosition[0];
|
|
80
|
+
const v = localPosition[1] - getWallFaceBaseAt(getWallFinishData(mesh?.geometry), face, u);
|
|
81
|
+
const hit = resolveWallFinish(layout, face, u, v);
|
|
82
|
+
if (hit.source === 'region')
|
|
83
|
+
return wallRegionRole(hit.regionId);
|
|
84
|
+
if (hit.source === 'override' || hit.source === 'zone')
|
|
85
|
+
return wallRoomFaceRole(hit.zoneId, face);
|
|
86
|
+
return face;
|
|
87
|
+
}
|
|
88
|
+
function zoneOf(zoneId, nodes = useScene.getState().nodes) {
|
|
89
|
+
const node = nodes[zoneId];
|
|
90
|
+
return node?.type === 'zone' ? node : null;
|
|
91
|
+
}
|
|
92
|
+
/** The finish ref a non-slot role currently shows, if any. */
|
|
93
|
+
function currentRoleRef(wall, role, nodes) {
|
|
94
|
+
if (role.kind === 'region') {
|
|
95
|
+
return wall.faceRegions?.find((region) => region.id === role.regionId)?.finish;
|
|
91
96
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return semantic;
|
|
99
|
-
return getWallBandSlotId(semantic, getWallFaceBandForHeight(node, localPosition[1], effectiveWallHeight));
|
|
97
|
+
if (role.kind === 'room')
|
|
98
|
+
return zoneOf(role.zoneId, nodes)?.wallMaterial;
|
|
99
|
+
if (role.kind === 'room-face') {
|
|
100
|
+
const zone = zoneOf(role.zoneId, nodes);
|
|
101
|
+
return (zone?.wallOverrides?.find((entry) => entry.wallId === wall.id && entry.face === role.face)
|
|
102
|
+
?.finish ?? zone?.wallMaterial);
|
|
100
103
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
return wall.slots?.[role.slotId];
|
|
105
|
+
}
|
|
106
|
+
function refToEffective(ref) {
|
|
107
|
+
const parsed = parseMaterialRef(ref);
|
|
108
|
+
if (parsed?.kind === 'library')
|
|
109
|
+
return { material: undefined, materialPreset: ref };
|
|
110
|
+
if (parsed?.kind === 'scene') {
|
|
111
|
+
const sceneMaterial = useScene.getState().materials[parsed.id];
|
|
112
|
+
if (sceneMaterial)
|
|
113
|
+
return { material: sceneMaterial.material, materialPreset: undefined };
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The wall mesh's palette entry a non-face slot draws with, when it is part of
|
|
119
|
+
* the wall body rather than its own mesh: a curtain wall's frame / glass /
|
|
120
|
+
* solid panels (0..2), or the underpinning's stemwall (a finish ref, 3..).
|
|
121
|
+
*/
|
|
122
|
+
function wallPaletteSlotIndex(wall, slotId, mesh) {
|
|
123
|
+
if (isCurtainWallRole(slotId))
|
|
124
|
+
return CURTAIN_WALL_ROLES.indexOf(slotId);
|
|
125
|
+
if (slotId !== 'foundation' || !wall.underpinning)
|
|
126
|
+
return null;
|
|
127
|
+
const ref = wall.slots?.foundation ?? WALL_SURFACE_SLOT_DEFAULTS.foundation;
|
|
128
|
+
const at = getWallFinishRefs(mesh.geometry).indexOf(ref);
|
|
129
|
+
return at < 0 ? null : 3 + at;
|
|
130
|
+
}
|
|
131
|
+
/** Swap one palette entry of a copy of the wall's material array; cleanup restores it. */
|
|
132
|
+
function previewPaletteEntry(args, mesh, index) {
|
|
133
|
+
const current = mesh.material;
|
|
134
|
+
if (!Array.isArray(current) || index >= current.length)
|
|
135
|
+
return () => { };
|
|
136
|
+
const preview = buildSlotPreviewMaterial(args.material, args.materialPreset);
|
|
137
|
+
if (!preview)
|
|
138
|
+
return () => { };
|
|
139
|
+
const next = current.slice();
|
|
140
|
+
next[index] = preview;
|
|
141
|
+
return swapPreviewMaterial(mesh, next);
|
|
142
|
+
}
|
|
143
|
+
/** The finish the preview plan writes, so the surfaces it lands on can be told apart. */
|
|
144
|
+
const PREVIEW_REF = '__paint-preview__';
|
|
145
|
+
function sameChain(a, b) {
|
|
146
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
107
147
|
}
|
|
108
148
|
/**
|
|
109
|
-
* Preview a wall paint by
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
149
|
+
* Preview a wall paint by drawing the plan the click commits: every face
|
|
150
|
+
* triangle of this wall is resolved again against the planned wall and rooms,
|
|
151
|
+
* and takes the material that resolution draws — the paint where the click
|
|
152
|
+
* paints, what shows once erased where it erases. The material array is copied
|
|
153
|
+
* (never the shared cache) and the triangles are regrouped; cleanup restores
|
|
154
|
+
* both.
|
|
113
155
|
*/
|
|
114
156
|
function applyWallPreview(args) {
|
|
115
157
|
const { role, material, materialPreset } = args;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const index = WALL_ARRAY_SLOT_INDEX[role];
|
|
120
|
-
if (!index)
|
|
121
|
-
return previewSlotByUserData(args);
|
|
158
|
+
const parsed = parseWallPaintRole(role);
|
|
159
|
+
if (!parsed)
|
|
160
|
+
return null;
|
|
122
161
|
const mesh = sceneRegistry.nodes.get(args.node.id);
|
|
123
|
-
if (!(
|
|
162
|
+
if (parsed.kind === 'slot' && !(parsed.slotId === 'a' || parsed.slotId === 'b')) {
|
|
163
|
+
const index = mesh?.isMesh
|
|
164
|
+
? wallPaletteSlotIndex(args.node, parsed.slotId, mesh)
|
|
165
|
+
: null;
|
|
166
|
+
return index === null ? previewSlotByUserData(args) : previewPaletteEntry(args, mesh, index);
|
|
167
|
+
}
|
|
168
|
+
if (!mesh?.isMesh)
|
|
124
169
|
return null;
|
|
125
|
-
const
|
|
126
|
-
const current = wallMesh.material;
|
|
170
|
+
const current = mesh.material;
|
|
127
171
|
if (!Array.isArray(current))
|
|
128
172
|
return null;
|
|
129
|
-
const
|
|
130
|
-
|
|
173
|
+
const erasing = material === undefined && materialPreset === undefined;
|
|
174
|
+
const paint = erasing ? null : buildSlotPreviewMaterial(material, materialPreset);
|
|
175
|
+
if (!(erasing || paint))
|
|
131
176
|
return () => { };
|
|
132
|
-
const
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
177
|
+
const nodes = useScene.getState().nodes;
|
|
178
|
+
const before = (nodes[args.node.id] ?? args.node);
|
|
179
|
+
const plan = planWallPaint(nodes, before, parsed, erasing ? undefined : PREVIEW_REF);
|
|
180
|
+
const after = { ...nodes, ...plan };
|
|
181
|
+
const wall = (after[before.id] ?? before);
|
|
182
|
+
const layout = buildWallFinishLayout(wall, getWallLevelZones(wall, after));
|
|
183
|
+
const refs = getWallFinishRefs(mesh.geometry);
|
|
184
|
+
const chains = {
|
|
185
|
+
before: { a: resolveWallFaceChain(before, 'a'), b: resolveWallFaceChain(before, 'b') },
|
|
186
|
+
after: { a: resolveWallFaceChain(wall, 'a'), b: resolveWallFaceChain(wall, 'b') },
|
|
187
|
+
};
|
|
188
|
+
const materials = current.slice();
|
|
189
|
+
const added = new Map();
|
|
190
|
+
const extra = (key, make) => {
|
|
191
|
+
const known = added.get(key);
|
|
192
|
+
if (known !== undefined)
|
|
193
|
+
return known;
|
|
194
|
+
const made = make();
|
|
195
|
+
if (!made)
|
|
196
|
+
return null;
|
|
197
|
+
materials.push(made);
|
|
198
|
+
added.set(key, materials.length - 1);
|
|
199
|
+
return materials.length - 1;
|
|
200
|
+
};
|
|
201
|
+
const lookIndex = (look) => extra(`look:${JSON.stringify(look)}`, () => buildSlotPreviewMaterial(look.material, look.materialPreset));
|
|
202
|
+
const indexFor = (face, u, v) => {
|
|
203
|
+
const hit = resolveWallFinish(layout, face, u, v);
|
|
204
|
+
if (hit.source !== 'slot') {
|
|
205
|
+
if (hit.ref === PREVIEW_REF)
|
|
206
|
+
return extra('paint', () => paint);
|
|
207
|
+
const at = refs.indexOf(hit.ref);
|
|
208
|
+
return at >= 0 ? 3 + at : lookIndex({ materialPreset: hit.ref });
|
|
209
|
+
}
|
|
210
|
+
const chain = chains.after[face];
|
|
211
|
+
if (sameChain(chain, chains.before[face]))
|
|
212
|
+
return FACE_MATERIAL_INDEX[face];
|
|
213
|
+
if (chain.kind !== 'legacy' && chain.ref === PREVIEW_REF)
|
|
214
|
+
return extra('paint', () => paint);
|
|
215
|
+
return lookIndex(chain.kind === 'legacy' ? chain.spec : { materialPreset: chain.ref });
|
|
216
|
+
};
|
|
217
|
+
const geometry = mesh.geometry;
|
|
218
|
+
const groups = geometry.groups.map((group) => ({ ...group }));
|
|
219
|
+
const regrouped = regroupWallFaces(geometry, before, indexFor);
|
|
220
|
+
if (!regrouped)
|
|
221
|
+
return () => { };
|
|
222
|
+
geometry.groups = regrouped;
|
|
223
|
+
const restoreMaterial = swapPreviewMaterial(mesh, materials);
|
|
136
224
|
return () => {
|
|
137
|
-
|
|
225
|
+
restoreMaterial();
|
|
226
|
+
if (mesh.geometry === geometry)
|
|
227
|
+
geometry.groups = groups;
|
|
138
228
|
};
|
|
139
229
|
}
|
|
140
230
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* whole-side fallback so old scenes still show the current value.
|
|
231
|
+
* The wall's face triangles regrouped by the material index `indexFor` gives
|
|
232
|
+
* each (the face and station its centre lies at); caps keep theirs. Null when
|
|
233
|
+
* nothing moves.
|
|
145
234
|
*/
|
|
146
|
-
export
|
|
235
|
+
export function regroupWallFaces(geometry, wall, indexFor) {
|
|
236
|
+
const position = geometry.getAttribute('position');
|
|
237
|
+
if (!position)
|
|
238
|
+
return null;
|
|
239
|
+
const index = geometry.getIndex();
|
|
240
|
+
const vertex = (at) => (index ? index.getX(at) : at);
|
|
241
|
+
const finish = getWallFinishData(geometry);
|
|
242
|
+
const a = new Vector3();
|
|
243
|
+
const b = new Vector3();
|
|
244
|
+
const c = new Vector3();
|
|
245
|
+
const ab = new Vector3();
|
|
246
|
+
const ac = new Vector3();
|
|
247
|
+
const out = [];
|
|
248
|
+
let changed = false;
|
|
249
|
+
const push = (start, materialIndex) => {
|
|
250
|
+
const last = out[out.length - 1];
|
|
251
|
+
if (last && last.materialIndex === materialIndex && last.start + last.count === start)
|
|
252
|
+
last.count += 3;
|
|
253
|
+
else
|
|
254
|
+
out.push({ start, count: 3, materialIndex });
|
|
255
|
+
};
|
|
256
|
+
for (const group of geometry.groups) {
|
|
257
|
+
const own = group.materialIndex ?? 0;
|
|
258
|
+
for (let at = group.start; at + 2 < group.start + group.count; at += 3) {
|
|
259
|
+
let next = own;
|
|
260
|
+
if (own !== 0) {
|
|
261
|
+
a.fromBufferAttribute(position, vertex(at));
|
|
262
|
+
b.fromBufferAttribute(position, vertex(at + 1));
|
|
263
|
+
c.fromBufferAttribute(position, vertex(at + 2));
|
|
264
|
+
const centre = [
|
|
265
|
+
(a.x + b.x + c.x) / 3,
|
|
266
|
+
(a.y + b.y + c.y) / 3,
|
|
267
|
+
(a.z + b.z + c.z) / 3,
|
|
268
|
+
];
|
|
269
|
+
const normal = ab.subVectors(b, a).cross(ac.subVectors(c, a)).normalize();
|
|
270
|
+
const face = getWallFaceAtLocalPoint(wall, centre, [normal.x, normal.y, normal.z]);
|
|
271
|
+
if (face) {
|
|
272
|
+
const v = centre[1] - getWallFaceBaseAt(finish, face, centre[0]);
|
|
273
|
+
next = indexFor(face, centre[0], v) ?? own;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (next !== own)
|
|
277
|
+
changed = true;
|
|
278
|
+
push(at, next);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return changed ? out : null;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Write a wall paint in one history step through the same plan the preview
|
|
285
|
+
* draws, minting the shared scene material the way `commitSlotPaint` does so a
|
|
286
|
+
* one-off colour is stored once.
|
|
287
|
+
*/
|
|
288
|
+
function commitWallPlan(wallId, role, material, materialPreset) {
|
|
289
|
+
const state = useScene.getState();
|
|
290
|
+
const resolution = resolveSlotPaintMaterialRef(state.materials, material, materialPreset);
|
|
291
|
+
if (!resolution)
|
|
292
|
+
return;
|
|
293
|
+
const { ref, newSceneMaterial } = resolution;
|
|
294
|
+
let touched = [];
|
|
295
|
+
useScene.setState((current) => {
|
|
296
|
+
if (current.readOnly)
|
|
297
|
+
return current;
|
|
298
|
+
const wall = current.nodes[wallId];
|
|
299
|
+
if (wall?.type !== 'wall')
|
|
300
|
+
return current;
|
|
301
|
+
const plan = planWallPaint(current.nodes, wall, role, ref);
|
|
302
|
+
if (!Object.keys(plan).length)
|
|
303
|
+
return current;
|
|
304
|
+
touched = plannedWallIds(current.nodes, plan);
|
|
305
|
+
return {
|
|
306
|
+
...(newSceneMaterial
|
|
307
|
+
? { materials: { ...current.materials, [newSceneMaterial.id]: newSceneMaterial } }
|
|
308
|
+
: {}),
|
|
309
|
+
nodes: { ...current.nodes, ...plan },
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
for (const id of new Set([wallId, ...touched]))
|
|
313
|
+
useScene.getState().markDirty(id);
|
|
314
|
+
}
|
|
315
|
+
const base = createSlotPaintCapability({
|
|
147
316
|
roomScope: true,
|
|
317
|
+
// The preview draws the erase plan itself.
|
|
318
|
+
erasedLook: () => null,
|
|
148
319
|
resolveRole: ({ node, hitObject, materialIndex, normal, localPosition, ray }) => resolveWallRole({
|
|
149
320
|
node: node,
|
|
150
321
|
hitObject: hitObject,
|
|
@@ -155,28 +326,81 @@ export const wallPaint = createSlotPaintCapability({
|
|
|
155
326
|
}),
|
|
156
327
|
applyPreview: applyWallPreview,
|
|
157
328
|
legacyEffective: (node, role) => {
|
|
158
|
-
|
|
159
|
-
|
|
329
|
+
if (node.type === 'wall' && node.wallType === 'curtain') {
|
|
330
|
+
const config = getCurtainWallConfig(node);
|
|
331
|
+
const color = role === 'curtain-frame'
|
|
332
|
+
? config.frameColor
|
|
333
|
+
: role === 'curtain-glass'
|
|
334
|
+
? config.glassColor
|
|
335
|
+
: role === 'curtain-solid'
|
|
336
|
+
? config.solidColor
|
|
337
|
+
: undefined;
|
|
338
|
+
if (!color)
|
|
339
|
+
return null;
|
|
340
|
+
return {
|
|
341
|
+
materialPreset: undefined,
|
|
342
|
+
material: {
|
|
343
|
+
preset: 'custom',
|
|
344
|
+
properties: {
|
|
345
|
+
color,
|
|
346
|
+
roughness: role === 'curtain-glass' ? config.glassRoughness : 0.4,
|
|
347
|
+
metalness: role === 'curtain-frame' ? 0.65 : 0,
|
|
348
|
+
opacity: role === 'curtain-glass' ? config.glassOpacity : 1,
|
|
349
|
+
transparent: role === 'curtain-glass',
|
|
350
|
+
side: 'front',
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
if (role === 'a' || role === 'b') {
|
|
356
|
+
const spec = getEffectiveWallFaceMaterial(node, role);
|
|
357
|
+
if (spec.material === undefined && spec.materialPreset === undefined)
|
|
358
|
+
return null;
|
|
359
|
+
return { material: spec.material, materialPreset: spec.materialPreset };
|
|
360
|
+
}
|
|
361
|
+
if (role in WALL_SURFACE_SLOT_DEFAULTS) {
|
|
160
362
|
return {
|
|
161
363
|
material: undefined,
|
|
162
364
|
materialPreset: WALL_SURFACE_SLOT_DEFAULTS[role],
|
|
163
365
|
};
|
|
164
366
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
367
|
+
return null;
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
/**
|
|
371
|
+
* Capability binding for the wall kind on the unified slot model. Face and trim
|
|
372
|
+
* slots write `node.slots[slotId]` like every other kind; regions write the
|
|
373
|
+
* region's finish and room roles write the zone, because a room's wall finish
|
|
374
|
+
* belongs to the room, not to one of its walls.
|
|
375
|
+
*/
|
|
376
|
+
export const wallPaint = {
|
|
377
|
+
...base,
|
|
378
|
+
roleLabel: (_node, role) => {
|
|
379
|
+
const parsed = parseWallPaintRole(role);
|
|
380
|
+
if (parsed?.kind === 'region' || parsed?.kind === 'room-face')
|
|
381
|
+
return 'Face';
|
|
382
|
+
if (parsed?.kind === 'room')
|
|
383
|
+
return 'Room';
|
|
384
|
+
return null;
|
|
385
|
+
},
|
|
386
|
+
buildPatch: (args) => parseWallPaintRole(args.role)?.kind === 'slot' ? base.buildPatch(args) : {},
|
|
387
|
+
commit: (args) => {
|
|
388
|
+
const parsed = parseWallPaintRole(args.role);
|
|
389
|
+
if (!parsed)
|
|
390
|
+
return;
|
|
391
|
+
// A trim is a slot like any other; faces, regions and rooms go through the plan.
|
|
392
|
+
if (parsed.kind === 'slot' && parsed.slotId !== 'a' && parsed.slotId !== 'b') {
|
|
393
|
+
base.commit?.(args);
|
|
394
|
+
return;
|
|
176
395
|
}
|
|
177
|
-
|
|
178
|
-
|
|
396
|
+
commitWallPlan(args.node.id, parsed, args.material, args.materialPreset);
|
|
397
|
+
},
|
|
398
|
+
getEffectiveMaterial: (args) => {
|
|
399
|
+
const parsed = parseWallPaintRole(args.role);
|
|
400
|
+
if (!parsed)
|
|
179
401
|
return null;
|
|
180
|
-
|
|
402
|
+
if (parsed.kind === 'slot')
|
|
403
|
+
return base.getEffectiveMaterial?.(args) ?? null;
|
|
404
|
+
return refToEffective(currentRoleRef(args.node, parsed, args.nodes));
|
|
181
405
|
},
|
|
182
|
-
}
|
|
406
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type AnyNode, type AnyNodeId, type WallNode } from '@pascal-app/core';
|
|
2
|
+
import { type PanelRow } from '@pascal-app/editor';
|
|
3
|
+
export type WallReferenceValue = 'outside' | 'center' | 'inside' | 'left' | 'right';
|
|
4
|
+
export type WallReferenceOption = {
|
|
5
|
+
label: string;
|
|
6
|
+
value: WallReferenceValue;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The Reference control for one or more walls. The drawn line never moves; the
|
|
10
|
+
* choice picks which face sits on it. Walls with a room on exactly one side read
|
|
11
|
+
* Outside face / Center / Inside face; otherwise Left / Center / Right along the
|
|
12
|
+
* drawing direction (left is face a). A selection shows the room labels only
|
|
13
|
+
* when every wall has them, applies each choice to each wall's own faces, and
|
|
14
|
+
* shows no active option when the walls disagree.
|
|
15
|
+
*/
|
|
16
|
+
export declare function wallReferenceModel(walls: readonly WallNode[], nodes: Record<AnyNodeId, AnyNode>): {
|
|
17
|
+
options: WallReferenceOption[];
|
|
18
|
+
value: WallReferenceValue | null;
|
|
19
|
+
apply: (next: WallReferenceValue) => void;
|
|
20
|
+
};
|
|
21
|
+
export declare function wallSettings(node: WallNode, nodes: Record<AnyNodeId, AnyNode>, update: (patch: Partial<WallNode>) => void, reshape?: () => void): PanelRow[];
|
|
22
|
+
//# sourceMappingURL=panel-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-model.d.ts","sourceRoot":"","sources":["../../src/wall/panel-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAed,KAAK,QAAQ,EAEd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,oBAAoB,CAAA;AAiB3B,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AACnF,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,CAAA;AAqB9E;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;;;kBAsB9E,kBAAkB;EAYnC;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAC1C,OAAO,GAAE,MAAM,IAId,GACA,QAAQ,EAAE,CA8LZ"}
|