@pascal-app/nodes 1.0.0-beta.5 → 1.0.0
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/LICENSE +21 -0
- package/dist/block/commands.d.ts +68 -0
- package/dist/block/commands.d.ts.map +1 -0
- package/dist/block/commands.js +1144 -0
- package/dist/block/contextual-help.d.ts +3 -0
- package/dist/block/contextual-help.d.ts.map +1 -0
- package/dist/block/contextual-help.js +38 -0
- package/dist/block/definition.d.ts +8 -0
- package/dist/block/definition.d.ts.map +1 -0
- package/dist/block/definition.js +126 -0
- package/dist/block/edit-session.d.ts +16 -0
- package/dist/block/edit-session.d.ts.map +1 -0
- package/dist/block/edit-session.js +32 -0
- package/dist/block/face-host.d.ts +3 -0
- package/dist/block/face-host.d.ts.map +1 -0
- package/dist/block/face-host.js +178 -0
- package/dist/block/floorplan.d.ts +3 -0
- package/dist/block/floorplan.d.ts.map +1 -0
- package/dist/block/floorplan.js +43 -0
- package/dist/block/geometry-snap.d.ts +18 -0
- package/dist/block/geometry-snap.d.ts.map +1 -0
- package/dist/block/geometry-snap.js +137 -0
- package/dist/block/geometry.d.ts +11 -0
- package/dist/block/geometry.d.ts.map +1 -0
- package/dist/block/geometry.js +146 -0
- package/dist/block/gesture-wheel.d.ts +8 -0
- package/dist/block/gesture-wheel.d.ts.map +1 -0
- package/dist/block/gesture-wheel.js +7 -0
- package/dist/block/interaction-sfx.d.ts +3 -0
- package/dist/block/interaction-sfx.d.ts.map +1 -0
- package/dist/block/interaction-sfx.js +16 -0
- package/dist/block/last-operation.d.ts +48 -0
- package/dist/block/last-operation.d.ts.map +1 -0
- package/dist/block/last-operation.js +120 -0
- package/dist/block/loop-cut-interaction.d.ts +5 -0
- package/dist/block/loop-cut-interaction.d.ts.map +1 -0
- package/dist/block/loop-cut-interaction.js +13 -0
- package/dist/block/material-slots.d.ts +61 -0
- package/dist/block/material-slots.d.ts.map +1 -0
- package/dist/block/material-slots.js +131 -0
- package/dist/block/modal-face-operation.d.ts +13 -0
- package/dist/block/modal-face-operation.d.ts.map +1 -0
- package/dist/block/modal-face-operation.js +40 -0
- package/dist/block/modal-session.d.ts +15 -0
- package/dist/block/modal-session.d.ts.map +1 -0
- package/dist/block/modal-session.js +40 -0
- package/dist/block/modal-transform.d.ts +30 -0
- package/dist/block/modal-transform.d.ts.map +1 -0
- package/dist/block/modal-transform.js +144 -0
- package/dist/block/paint.d.ts +3 -0
- package/dist/block/paint.d.ts.map +1 -0
- package/dist/block/paint.js +136 -0
- package/dist/block/panel.d.ts +2 -0
- package/dist/block/panel.d.ts.map +1 -0
- package/dist/block/panel.js +234 -0
- package/dist/block/parametrics.d.ts +4 -0
- package/dist/block/parametrics.d.ts.map +1 -0
- package/dist/block/parametrics.js +9 -0
- package/dist/block/preview.d.ts +6 -0
- package/dist/block/preview.d.ts.map +1 -0
- package/dist/block/preview.js +46 -0
- package/dist/block/rotation-drag.d.ts +5 -0
- package/dist/block/rotation-drag.d.ts.map +1 -0
- package/dist/block/rotation-drag.js +18 -0
- package/dist/block/schema.d.ts +2 -0
- package/dist/block/schema.d.ts.map +1 -0
- package/dist/block/schema.js +1 -0
- package/dist/block/selection-geometry.d.ts +9 -0
- package/dist/block/selection-geometry.d.ts.map +1 -0
- package/dist/block/selection-geometry.js +31 -0
- package/dist/block/selection-model.d.ts +17 -0
- package/dist/block/selection-model.d.ts.map +1 -0
- package/dist/block/selection-model.js +84 -0
- package/dist/block/selection.d.ts +4 -0
- package/dist/block/selection.d.ts.map +1 -0
- package/dist/block/selection.js +2570 -0
- package/dist/block/slots.d.ts +4 -0
- package/dist/block/slots.d.ts.map +1 -0
- package/dist/block/slots.js +17 -0
- package/dist/block/tool.d.ts +3 -0
- package/dist/block/tool.d.ts.map +1 -0
- package/dist/block/tool.js +174 -0
- package/dist/block/toolbar-state.d.ts +46 -0
- package/dist/block/toolbar-state.d.ts.map +1 -0
- package/dist/block/toolbar-state.js +67 -0
- package/dist/block/use-block-face-operation.d.ts +39 -0
- package/dist/block/use-block-face-operation.d.ts.map +1 -0
- package/dist/block/use-block-face-operation.js +218 -0
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +8 -5
- package/dist/box-vent/geometry.d.ts +4 -0
- package/dist/box-vent/geometry.d.ts.map +1 -1
- package/dist/box-vent/geometry.js +76 -44
- package/dist/box-vent/paint.d.ts +4 -0
- package/dist/box-vent/paint.d.ts.map +1 -0
- package/dist/box-vent/paint.js +40 -0
- package/dist/box-vent/panel.js +1 -1
- package/dist/box-vent/parametrics.js +3 -3
- package/dist/box-vent/renderer.d.ts.map +1 -1
- package/dist/box-vent/renderer.js +29 -10
- package/dist/cabinet/compartment-card.d.ts.map +1 -1
- package/dist/cabinet/compartment-card.js +11 -3
- package/dist/cabinet/continuous-placement.d.ts +3 -0
- package/dist/cabinet/continuous-placement.d.ts.map +1 -1
- package/dist/cabinet/continuous-placement.js +6 -0
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +400 -54
- package/dist/cabinet/floorplan-move.d.ts.map +1 -1
- package/dist/cabinet/floorplan-move.js +91 -22
- package/dist/cabinet/geometry/fridge.d.ts.map +1 -1
- package/dist/cabinet/geometry/fridge.js +25 -1
- package/dist/cabinet/geometry/fronts.d.ts +4 -0
- package/dist/cabinet/geometry/fronts.d.ts.map +1 -1
- package/dist/cabinet/geometry/fronts.js +1 -1
- package/dist/cabinet/geometry/run.d.ts.map +1 -1
- package/dist/cabinet/geometry/run.js +19 -1
- package/dist/cabinet/geometry.d.ts.map +1 -1
- package/dist/cabinet/geometry.js +63 -1
- package/dist/cabinet/index.d.ts +1 -0
- package/dist/cabinet/index.d.ts.map +1 -1
- package/dist/cabinet/index.js +1 -0
- package/dist/cabinet/insertion.d.ts +19 -0
- package/dist/cabinet/insertion.d.ts.map +1 -0
- package/dist/cabinet/insertion.js +49 -0
- package/dist/cabinet/move-frame.d.ts.map +1 -1
- package/dist/cabinet/move-frame.js +68 -2
- package/dist/cabinet/panel-context.d.ts +7 -0
- package/dist/cabinet/panel-context.d.ts.map +1 -0
- package/dist/cabinet/panel-context.js +16 -0
- package/dist/cabinet/panel-visibility.d.ts +9 -0
- package/dist/cabinet/panel-visibility.d.ts.map +1 -0
- package/dist/cabinet/panel-visibility.js +26 -0
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +221 -37
- package/dist/cabinet/placement-dimensions.d.ts +42 -0
- package/dist/cabinet/placement-dimensions.d.ts.map +1 -0
- package/dist/cabinet/placement-dimensions.js +227 -0
- package/dist/cabinet/placement-snap.d.ts +21 -1
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +48 -6
- package/dist/cabinet/preset-width-debt.d.ts +7 -0
- package/dist/cabinet/preset-width-debt.d.ts.map +1 -0
- package/dist/cabinet/preset-width-debt.js +45 -0
- package/dist/cabinet/presets.d.ts.map +1 -1
- package/dist/cabinet/presets.js +14 -13
- package/dist/cabinet/profiles.d.ts +14 -0
- package/dist/cabinet/profiles.d.ts.map +1 -0
- package/dist/cabinet/profiles.js +30 -0
- package/dist/cabinet/quick-actions.d.ts.map +1 -1
- package/dist/cabinet/quick-actions.js +8 -24
- package/dist/cabinet/reveals.d.ts +37 -0
- package/dist/cabinet/reveals.d.ts.map +1 -0
- package/dist/cabinet/reveals.js +13 -0
- package/dist/cabinet/run-layout.d.ts +90 -4
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +408 -23
- package/dist/cabinet/run-ops.d.ts +202 -10
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-ops.js +520 -33
- package/dist/cabinet/run-panel.d.ts +6 -2
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +285 -108
- package/dist/cabinet/stack-transitions.d.ts.map +1 -1
- package/dist/cabinet/stack-transitions.js +35 -24
- package/dist/cabinet/stack.d.ts +169 -1
- package/dist/cabinet/stack.d.ts.map +1 -1
- package/dist/cabinet/stack.js +57 -18
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +615 -91
- package/dist/cabinet/validation.d.ts +27 -0
- package/dist/cabinet/validation.d.ts.map +1 -0
- package/dist/cabinet/validation.js +56 -0
- package/dist/cabinet/wall-height-presets.d.ts +12 -0
- package/dist/cabinet/wall-height-presets.d.ts.map +1 -0
- package/dist/cabinet/wall-height-presets.js +15 -0
- package/dist/cabinet/wall-snap.d.ts +27 -3
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +278 -62
- package/dist/cabinet/widths.d.ts +10 -0
- package/dist/cabinet/widths.d.ts.map +1 -0
- package/dist/cabinet/widths.js +13 -0
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +7 -1
- package/dist/ceiling/floorplan-affordances.d.ts +8 -8
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +0 -1
- package/dist/ceiling/panel.js +1 -1
- package/dist/ceiling/parametrics.js +1 -1
- package/dist/chimney/definition.js +1 -1
- package/dist/chimney/panel.js +1 -1
- package/dist/chimney/parametrics.js +3 -3
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +22 -4
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +37 -7
- package/dist/column/parametrics.d.ts.map +1 -1
- package/dist/column/parametrics.js +5 -3
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +50 -14
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +15 -6
- package/dist/cupola/geometry.d.ts +6 -0
- package/dist/cupola/geometry.d.ts.map +1 -1
- package/dist/cupola/geometry.js +60 -13
- package/dist/cupola/paint.d.ts +4 -0
- package/dist/cupola/paint.d.ts.map +1 -0
- package/dist/cupola/paint.js +39 -0
- package/dist/cupola/panel.js +1 -1
- package/dist/cupola/parametrics.js +3 -3
- package/dist/cupola/renderer.d.ts.map +1 -1
- package/dist/cupola/renderer.js +27 -8
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +1 -1
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +86 -32
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +1 -1
- package/dist/door/parametrics.js +2 -2
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +16 -4
- package/dist/dormer/csg-geometry.d.ts +6 -42
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +38 -209
- package/dist/dormer/definition.d.ts +4 -12
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +18 -193
- package/dist/dormer/floorplan.d.ts +3 -3
- package/dist/dormer/floorplan.d.ts.map +1 -1
- package/dist/dormer/floorplan.js +6 -17
- package/dist/dormer/geometry.d.ts +5 -24
- package/dist/dormer/geometry.d.ts.map +1 -1
- package/dist/dormer/geometry.js +64 -41
- package/dist/dormer/index.d.ts +1 -1
- package/dist/dormer/index.d.ts.map +1 -1
- package/dist/dormer/index.js +1 -1
- package/dist/dormer/move-tool.d.ts.map +1 -1
- package/dist/dormer/move-tool.js +31 -3
- package/dist/dormer/panel-windows-section.d.ts +9 -0
- package/dist/dormer/panel-windows-section.d.ts.map +1 -0
- package/dist/dormer/panel-windows-section.js +7 -0
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +100 -18
- package/dist/dormer/parametrics.d.ts.map +1 -1
- package/dist/dormer/parametrics.js +8 -77
- package/dist/dormer/preview.d.ts.map +1 -1
- package/dist/dormer/preview.js +9 -1
- package/dist/dormer/renderer.d.ts.map +1 -1
- package/dist/dormer/renderer.js +24 -26
- package/dist/dormer/tool.d.ts.map +1 -1
- package/dist/dormer/tool.js +3 -1
- package/dist/dormer/window-layout.d.ts +15 -0
- package/dist/dormer/window-layout.d.ts.map +1 -0
- package/dist/dormer/window-layout.js +59 -0
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +17 -4
- package/dist/downspout/geometry.d.ts.map +1 -1
- package/dist/downspout/geometry.js +10 -0
- package/dist/downspout/inspector-editors.d.ts.map +1 -1
- package/dist/downspout/inspector-editors.js +9 -1
- package/dist/downspout/parametrics.d.ts.map +1 -1
- package/dist/downspout/parametrics.js +2 -1
- package/dist/downspout/renderer.d.ts.map +1 -1
- package/dist/downspout/renderer.js +19 -3
- package/dist/downspout/system.d.ts +7 -0
- package/dist/downspout/system.d.ts.map +1 -0
- package/dist/downspout/system.js +114 -0
- package/dist/duct-fitting/accessory-geometry.d.ts +4 -0
- package/dist/duct-fitting/accessory-geometry.d.ts.map +1 -0
- package/dist/duct-fitting/accessory-geometry.js +47 -0
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.js +11 -1
- package/dist/duct-fitting/floorplan.d.ts.map +1 -1
- package/dist/duct-fitting/floorplan.js +8 -0
- package/dist/duct-fitting/geometry.d.ts.map +1 -1
- package/dist/duct-fitting/geometry.js +52 -38
- package/dist/duct-fitting/parametrics.d.ts.map +1 -1
- package/dist/duct-fitting/parametrics.js +78 -15
- package/dist/duct-fitting/ports.d.ts +1 -0
- package/dist/duct-fitting/ports.d.ts.map +1 -1
- package/dist/duct-fitting/ports.js +46 -0
- package/dist/duct-fitting/tool.d.ts +19 -0
- package/dist/duct-fitting/tool.d.ts.map +1 -1
- package/dist/duct-fitting/tool.js +126 -34
- package/dist/duct-segment/continuation.d.ts +21 -0
- package/dist/duct-segment/continuation.d.ts.map +1 -0
- package/dist/duct-segment/continuation.js +167 -0
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.js +19 -18
- package/dist/duct-segment/floorplan.d.ts.map +1 -1
- package/dist/duct-segment/floorplan.js +43 -0
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +3 -0
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +33 -6
- package/dist/duct-segment/parametrics.d.ts.map +1 -1
- package/dist/duct-segment/parametrics.js +45 -1
- package/dist/duct-segment/selection.d.ts +3 -4
- package/dist/duct-segment/selection.d.ts.map +1 -1
- package/dist/duct-segment/selection.js +186 -158
- package/dist/duct-segment/tool.d.ts +37 -0
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +305 -678
- package/dist/duct-terminal/parametrics.js +2 -2
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +37 -7
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +7 -7
- package/dist/elevator/system.d.ts.map +1 -1
- package/dist/elevator/system.js +10 -1
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +8 -5
- package/dist/eyebrow-vent/geometry.d.ts +4 -0
- package/dist/eyebrow-vent/geometry.d.ts.map +1 -1
- package/dist/eyebrow-vent/geometry.js +60 -15
- package/dist/eyebrow-vent/paint.d.ts +4 -0
- package/dist/eyebrow-vent/paint.d.ts.map +1 -0
- package/dist/eyebrow-vent/paint.js +33 -0
- package/dist/eyebrow-vent/panel.js +1 -1
- package/dist/eyebrow-vent/parametrics.js +3 -3
- package/dist/eyebrow-vent/renderer.d.ts.map +1 -1
- package/dist/eyebrow-vent/renderer.js +27 -8
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +2 -1
- package/dist/fence/floorplan-affordances.d.ts +1 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +30 -1
- package/dist/fence/floorplan.d.ts.map +1 -1
- package/dist/fence/floorplan.js +14 -0
- package/dist/fence/parametrics.js +3 -3
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +47 -20
- package/dist/gutter/corner-mitre.d.ts.map +1 -1
- package/dist/gutter/corner-mitre.js +47 -7
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +23 -13
- package/dist/gutter/eave-align.d.ts.map +1 -1
- package/dist/gutter/eave-align.js +10 -0
- package/dist/gutter/eave-snap.d.ts +1 -1
- package/dist/gutter/eave-snap.d.ts.map +1 -1
- package/dist/gutter/eave-snap.js +10 -23
- package/dist/gutter/geometry.d.ts.map +1 -1
- package/dist/gutter/geometry.js +126 -8
- package/dist/gutter/outlet-lookup.d.ts.map +1 -1
- package/dist/gutter/outlet-lookup.js +22 -1
- package/dist/gutter/paint.d.ts +3 -0
- package/dist/gutter/paint.d.ts.map +1 -0
- package/dist/gutter/paint.js +6 -0
- package/dist/gutter/parametrics.d.ts.map +1 -1
- package/dist/gutter/parametrics.js +4 -1
- package/dist/gutter/renderer.d.ts.map +1 -1
- package/dist/gutter/renderer.js +63 -7
- package/dist/gutter/trim-clip.d.ts +3 -0
- package/dist/gutter/trim-clip.d.ts.map +1 -0
- package/dist/gutter/trim-clip.js +5 -0
- package/dist/hvac-equipment/parametrics.js +3 -3
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +12 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +10 -2
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +20 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +22 -1
- package/dist/item/move-tool.d.ts +28 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +14 -2
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +16 -6
- package/dist/item/system.d.ts +5 -0
- package/dist/item/system.d.ts.map +1 -1
- package/dist/item/system.js +7 -1
- package/dist/lean-to-extension/arc.d.ts +14 -0
- package/dist/lean-to-extension/arc.d.ts.map +1 -0
- package/dist/lean-to-extension/arc.js +56 -0
- package/dist/lean-to-extension/assembly.d.ts +61 -0
- package/dist/lean-to-extension/assembly.d.ts.map +1 -0
- package/dist/lean-to-extension/assembly.js +761 -0
- package/dist/lean-to-extension/canopy-joint.d.ts +35 -0
- package/dist/lean-to-extension/canopy-joint.d.ts.map +1 -0
- package/dist/lean-to-extension/canopy-joint.js +234 -0
- package/dist/lean-to-extension/conical-host.d.ts +15 -0
- package/dist/lean-to-extension/conical-host.d.ts.map +1 -0
- package/dist/lean-to-extension/conical-host.js +113 -0
- package/dist/lean-to-extension/corner-joint.d.ts +29 -0
- package/dist/lean-to-extension/corner-joint.d.ts.map +1 -0
- package/dist/lean-to-extension/corner-joint.js +1202 -0
- package/dist/lean-to-extension/definition.d.ts +4 -0
- package/dist/lean-to-extension/definition.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.js +433 -0
- package/dist/lean-to-extension/floorplan-affordances.d.ts +4 -0
- package/dist/lean-to-extension/floorplan-affordances.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-affordances.js +144 -0
- package/dist/lean-to-extension/floorplan-move.d.ts +3 -0
- package/dist/lean-to-extension/floorplan-move.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-move.js +157 -0
- package/dist/lean-to-extension/floorplan-tool.d.ts +4 -0
- package/dist/lean-to-extension/floorplan-tool.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan-tool.js +385 -0
- package/dist/lean-to-extension/floorplan.d.ts +3 -0
- package/dist/lean-to-extension/floorplan.d.ts.map +1 -0
- package/dist/lean-to-extension/floorplan.js +373 -0
- package/dist/lean-to-extension/geometry.d.ts +7 -0
- package/dist/lean-to-extension/geometry.d.ts.map +1 -0
- package/dist/lean-to-extension/geometry.js +662 -0
- package/dist/lean-to-extension/index.d.ts +8 -0
- package/dist/lean-to-extension/index.d.ts.map +1 -0
- package/dist/lean-to-extension/index.js +7 -0
- package/dist/lean-to-extension/layout.d.ts +108 -0
- package/dist/lean-to-extension/layout.d.ts.map +1 -0
- package/dist/lean-to-extension/layout.js +477 -0
- package/dist/lean-to-extension/managed-preview.d.ts +3 -0
- package/dist/lean-to-extension/managed-preview.d.ts.map +1 -0
- package/dist/lean-to-extension/managed-preview.js +93 -0
- package/dist/lean-to-extension/move-tool.d.ts +8 -0
- package/dist/lean-to-extension/move-tool.d.ts.map +1 -0
- package/dist/lean-to-extension/move-tool.js +202 -0
- package/dist/lean-to-extension/paint.d.ts +2 -0
- package/dist/lean-to-extension/paint.d.ts.map +1 -0
- package/dist/lean-to-extension/paint.js +16 -0
- package/dist/lean-to-extension/parametrics.d.ts +4 -0
- package/dist/lean-to-extension/parametrics.d.ts.map +1 -0
- package/dist/lean-to-extension/parametrics.js +570 -0
- package/dist/lean-to-extension/placement-scope.d.ts +3 -0
- package/dist/lean-to-extension/placement-scope.d.ts.map +1 -0
- package/dist/lean-to-extension/placement-scope.js +4 -0
- package/dist/lean-to-extension/placement-validation.d.ts +4 -0
- package/dist/lean-to-extension/placement-validation.d.ts.map +1 -0
- package/dist/lean-to-extension/placement-validation.js +324 -0
- package/dist/lean-to-extension/placement.d.ts +59 -0
- package/dist/lean-to-extension/placement.d.ts.map +1 -0
- package/dist/lean-to-extension/placement.js +331 -0
- package/dist/lean-to-extension/plan-footprint.d.ts +10 -0
- package/dist/lean-to-extension/plan-footprint.d.ts.map +1 -0
- package/dist/lean-to-extension/plan-footprint.js +27 -0
- package/dist/lean-to-extension/preview-geometry.d.ts +7 -0
- package/dist/lean-to-extension/preview-geometry.d.ts.map +1 -0
- package/dist/lean-to-extension/preview-geometry.js +40 -0
- package/dist/lean-to-extension/preview.d.ts +7 -0
- package/dist/lean-to-extension/preview.d.ts.map +1 -0
- package/dist/lean-to-extension/preview.js +20 -0
- package/dist/lean-to-extension/renderer.d.ts +6 -0
- package/dist/lean-to-extension/renderer.d.ts.map +1 -0
- package/dist/lean-to-extension/renderer.js +34 -0
- package/dist/lean-to-extension/roof-attachment.d.ts +28 -0
- package/dist/lean-to-extension/roof-attachment.d.ts.map +1 -0
- package/dist/lean-to-extension/roof-attachment.js +376 -0
- package/dist/lean-to-extension/schema.d.ts +2 -0
- package/dist/lean-to-extension/schema.d.ts.map +1 -0
- package/dist/lean-to-extension/schema.js +1 -0
- package/dist/lean-to-extension/slots.d.ts +5 -0
- package/dist/lean-to-extension/slots.d.ts.map +1 -0
- package/dist/lean-to-extension/slots.js +15 -0
- package/dist/lean-to-extension/system.d.ts +7 -0
- package/dist/lean-to-extension/system.d.ts.map +1 -0
- package/dist/lean-to-extension/system.js +726 -0
- package/dist/lean-to-extension/tool.d.ts +3 -0
- package/dist/lean-to-extension/tool.d.ts.map +1 -0
- package/dist/lean-to-extension/tool.js +580 -0
- package/dist/lean-to-extension/wall-target.d.ts +10 -0
- package/dist/lean-to-extension/wall-target.d.ts.map +1 -0
- package/dist/lean-to-extension/wall-target.js +29 -0
- package/dist/lineset/definition.d.ts.map +1 -1
- package/dist/lineset/definition.js +1 -0
- package/dist/liquid-line/definition.d.ts.map +1 -1
- package/dist/liquid-line/definition.js +1 -0
- package/dist/pipe-fitting/definition.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.js +16 -2
- package/dist/pipe-fitting/floorplan.d.ts.map +1 -1
- package/dist/pipe-fitting/floorplan.js +4 -0
- package/dist/pipe-fitting/geometry.d.ts +3 -5
- package/dist/pipe-fitting/geometry.d.ts.map +1 -1
- package/dist/pipe-fitting/geometry.js +154 -21
- package/dist/pipe-fitting/inline-insertion.d.ts +13 -0
- package/dist/pipe-fitting/inline-insertion.d.ts.map +1 -0
- package/dist/pipe-fitting/inline-insertion.js +96 -0
- package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
- package/dist/pipe-fitting/parametrics.js +17 -3
- package/dist/pipe-fitting/ports.d.ts.map +1 -1
- package/dist/pipe-fitting/ports.js +8 -1
- package/dist/pipe-fitting/tool.d.ts +26 -0
- package/dist/pipe-fitting/tool.d.ts.map +1 -1
- package/dist/pipe-fitting/tool.js +182 -37
- package/dist/pipe-segment/continuation.d.ts +22 -0
- package/dist/pipe-segment/continuation.d.ts.map +1 -0
- package/dist/pipe-segment/continuation.js +146 -0
- package/dist/pipe-segment/definition.d.ts.map +1 -1
- package/dist/pipe-segment/definition.js +23 -7
- package/dist/pipe-segment/floorplan.d.ts.map +1 -1
- package/dist/pipe-segment/floorplan.js +42 -0
- package/dist/pipe-segment/geometry.d.ts +2 -1
- package/dist/pipe-segment/geometry.d.ts.map +1 -1
- package/dist/pipe-segment/geometry.js +4 -1
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +25 -5
- package/dist/pipe-segment/parametrics.d.ts.map +1 -1
- package/dist/pipe-segment/parametrics.js +45 -0
- package/dist/pipe-segment/selection.d.ts +3 -4
- package/dist/pipe-segment/selection.d.ts.map +1 -1
- package/dist/pipe-segment/selection.js +169 -105
- package/dist/pipe-segment/slope.d.ts +5 -0
- package/dist/pipe-segment/slope.d.ts.map +1 -0
- package/dist/pipe-segment/slope.js +10 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +325 -545
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +15 -2
- package/dist/ridge-vent/definition.js +1 -1
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +2 -2
- package/dist/ridge-vent/parametrics.js +1 -1
- package/dist/roof/conical-roof-placement.d.ts +36 -0
- package/dist/roof/conical-roof-placement.d.ts.map +1 -0
- package/dist/roof/conical-roof-placement.js +134 -0
- package/dist/roof/conical-roof.d.ts +3 -0
- package/dist/roof/conical-roof.d.ts.map +1 -0
- package/dist/roof/conical-roof.js +53 -0
- package/dist/roof/definition.d.ts +3 -10
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +83 -13
- package/dist/roof/floorplan.d.ts +3 -10
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +139 -165
- package/dist/roof/index.d.ts +1 -0
- package/dist/roof/index.d.ts.map +1 -1
- package/dist/roof/index.js +1 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +22 -23
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/roof-footprint-source.d.ts +16 -0
- package/dist/roof/roof-footprint-source.d.ts.map +1 -0
- package/dist/roof/roof-footprint-source.js +14 -0
- package/dist/roof/roof-footprint.d.ts +25 -0
- package/dist/roof/roof-footprint.d.ts.map +1 -0
- package/dist/roof/roof-footprint.js +94 -0
- package/dist/roof/roof-placement-mode.d.ts +18 -0
- package/dist/roof/roof-placement-mode.d.ts.map +1 -0
- package/dist/roof/roof-placement-mode.js +24 -0
- package/dist/roof/tool.d.ts +10 -0
- package/dist/roof/tool.d.ts.map +1 -0
- package/dist/roof/tool.js +922 -0
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +52 -8
- package/dist/roof-segment/floorplan-affordances.d.ts +5 -6
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +64 -18
- package/dist/roof-segment/floorplan.d.ts +3 -2
- package/dist/roof-segment/floorplan.d.ts.map +1 -1
- package/dist/roof-segment/floorplan.js +95 -46
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +122 -27
- package/dist/scan/definition.d.ts +2 -3
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +9 -7
- package/dist/scan/parametrics.d.ts.map +1 -1
- package/dist/scan/parametrics.js +13 -1
- package/dist/scan/renderer.d.ts.map +1 -1
- package/dist/scan/renderer.js +8 -2
- package/dist/shared/accessory-cursor.d.ts +7 -0
- package/dist/shared/accessory-cursor.d.ts.map +1 -0
- package/dist/shared/accessory-cursor.js +83 -0
- package/dist/shared/accessory-floorplan.d.ts +4 -0
- package/dist/shared/accessory-floorplan.d.ts.map +1 -0
- package/dist/shared/accessory-floorplan.js +51 -0
- package/dist/shared/accessory-geometry.d.ts +7 -0
- package/dist/shared/accessory-geometry.d.ts.map +1 -0
- package/dist/shared/accessory-geometry.js +79 -0
- package/dist/shared/accessory-placement.d.ts +10 -0
- package/dist/shared/accessory-placement.d.ts.map +1 -0
- package/dist/shared/accessory-placement.js +126 -0
- package/dist/shared/accessory-snapping.d.ts +5 -0
- package/dist/shared/accessory-snapping.d.ts.map +1 -0
- package/dist/shared/accessory-snapping.js +40 -0
- package/dist/shared/automatic-run-end-cap.d.ts +11 -0
- package/dist/shared/automatic-run-end-cap.d.ts.map +1 -0
- package/dist/shared/automatic-run-end-cap.js +159 -0
- package/dist/shared/block-face-host.d.ts +15 -0
- package/dist/shared/block-face-host.d.ts.map +1 -0
- package/dist/shared/block-face-host.js +36 -0
- package/dist/shared/connection-compatibility.d.ts +8 -0
- package/dist/shared/connection-compatibility.d.ts.map +1 -0
- package/dist/shared/connection-compatibility.js +28 -0
- package/dist/shared/connection-feedback.d.ts +10 -0
- package/dist/shared/connection-feedback.d.ts.map +1 -0
- package/dist/shared/connection-feedback.js +17 -0
- package/dist/shared/distribution-run-contract.d.ts +49 -0
- package/dist/shared/distribution-run-contract.d.ts.map +1 -0
- package/dist/shared/distribution-run-contract.js +30 -0
- package/dist/shared/distribution-run-tool.d.ts +107 -0
- package/dist/shared/distribution-run-tool.d.ts.map +1 -0
- package/dist/shared/distribution-run-tool.js +941 -0
- package/dist/shared/dormer-wall-opening-placement.d.ts +21 -0
- package/dist/shared/dormer-wall-opening-placement.d.ts.map +1 -0
- package/dist/shared/dormer-wall-opening-placement.js +101 -0
- package/dist/shared/duct-adapter.d.ts +10 -0
- package/dist/shared/duct-adapter.d.ts.map +1 -0
- package/dist/shared/duct-adapter.js +43 -0
- package/dist/shared/elbow-branch-continuation.d.ts +20 -0
- package/dist/shared/elbow-branch-continuation.d.ts.map +1 -0
- package/dist/shared/elbow-branch-continuation.js +200 -0
- package/dist/shared/fitting-clearance.d.ts +5 -0
- package/dist/shared/fitting-clearance.d.ts.map +1 -0
- package/dist/shared/fitting-clearance.js +11 -0
- package/dist/shared/fitting-deletion-cleanup.d.ts +14 -0
- package/dist/shared/fitting-deletion-cleanup.d.ts.map +1 -0
- package/dist/shared/fitting-deletion-cleanup.js +297 -0
- package/dist/shared/fitting-surface-support.d.ts +5 -0
- package/dist/shared/fitting-surface-support.d.ts.map +1 -0
- package/dist/shared/fitting-surface-support.js +42 -0
- package/dist/shared/fitting-tool-options.d.ts +4 -0
- package/dist/shared/fitting-tool-options.d.ts.map +1 -0
- package/dist/shared/fitting-tool-options.js +175 -0
- package/dist/shared/floor-placement.d.ts +1 -1
- package/dist/shared/floor-placement.d.ts.map +1 -1
- package/dist/shared/floor-placement.js +13 -33
- package/dist/shared/ghost-materials.d.ts.map +1 -1
- package/dist/shared/ghost-materials.js +2 -1
- package/dist/shared/lean-to-post-omissions.d.ts +8 -0
- package/dist/shared/lean-to-post-omissions.d.ts.map +1 -0
- package/dist/shared/lean-to-post-omissions.js +51 -0
- package/dist/shared/mep-fitting-actions.d.ts +5 -0
- package/dist/shared/mep-fitting-actions.d.ts.map +1 -0
- package/dist/shared/mep-fitting-actions.js +16 -0
- package/dist/shared/mep-presets.d.ts +11 -0
- package/dist/shared/mep-presets.d.ts.map +1 -0
- package/dist/shared/mep-presets.js +34 -0
- package/dist/shared/node-batch/candidates.d.ts +29 -0
- package/dist/shared/node-batch/candidates.d.ts.map +1 -0
- package/dist/shared/node-batch/candidates.js +260 -0
- package/dist/shared/node-batch/store.d.ts +26 -0
- package/dist/shared/node-batch/store.d.ts.map +1 -0
- package/dist/shared/node-batch/store.js +319 -0
- package/dist/shared/node-batch/system.d.ts +8 -0
- package/dist/shared/node-batch/system.d.ts.map +1 -0
- package/dist/shared/node-batch/system.js +569 -0
- package/dist/shared/node-batch/types.d.ts +99 -0
- package/dist/shared/node-batch/types.d.ts.map +1 -0
- package/dist/shared/node-batch/types.js +4 -0
- package/dist/shared/opening-move-history.d.ts +47 -0
- package/dist/shared/opening-move-history.d.ts.map +1 -0
- package/dist/shared/opening-move-history.js +18 -0
- package/dist/shared/opening-move-wall-gate.d.ts +55 -0
- package/dist/shared/opening-move-wall-gate.d.ts.map +1 -0
- package/dist/shared/opening-move-wall-gate.js +44 -0
- package/dist/shared/path-point-affordance.d.ts +2 -2
- package/dist/shared/path-point-affordance.d.ts.map +1 -1
- package/dist/shared/path-point-affordance.js +30 -6
- package/dist/shared/placeholder-geometry.d.ts.map +1 -1
- package/dist/shared/placeholder-geometry.js +4 -0
- package/dist/shared/ports.d.ts +20 -3
- package/dist/shared/ports.d.ts.map +1 -1
- package/dist/shared/ports.js +148 -7
- package/dist/shared/primitive-uv.d.ts +17 -0
- package/dist/shared/primitive-uv.d.ts.map +1 -0
- package/dist/shared/primitive-uv.js +107 -0
- package/dist/shared/reducer-size.d.ts +2 -0
- package/dist/shared/reducer-size.d.ts.map +1 -0
- package/dist/shared/reducer-size.js +12 -0
- package/dist/shared/ridge-snap.js +1 -1
- package/dist/shared/roof-surface.d.ts.map +1 -1
- package/dist/shared/roof-surface.js +17 -2
- package/dist/shared/run-cursor.d.ts +22 -0
- package/dist/shared/run-cursor.d.ts.map +1 -0
- package/dist/shared/run-cursor.js +19 -0
- package/dist/shared/run-direction-feedback.d.ts +20 -0
- package/dist/shared/run-direction-feedback.d.ts.map +1 -0
- package/dist/shared/run-direction-feedback.js +139 -0
- package/dist/shared/run-hanger-controls.d.ts +7 -0
- package/dist/shared/run-hanger-controls.d.ts.map +1 -0
- package/dist/shared/run-hanger-controls.js +44 -0
- package/dist/shared/run-hanger-inspector.d.ts +5 -0
- package/dist/shared/run-hanger-inspector.d.ts.map +1 -0
- package/dist/shared/run-hanger-inspector.js +43 -0
- package/dist/shared/run-hanger-mode.d.ts +11 -0
- package/dist/shared/run-hanger-mode.d.ts.map +1 -0
- package/dist/shared/run-hanger-mode.js +32 -0
- package/dist/shared/run-hanger-system.d.ts +3 -0
- package/dist/shared/run-hanger-system.d.ts.map +1 -0
- package/dist/shared/run-hanger-system.js +39 -0
- package/dist/shared/run-hangers.d.ts +25 -0
- package/dist/shared/run-hangers.d.ts.map +1 -0
- package/dist/shared/run-hangers.js +261 -0
- package/dist/shared/run-port-snap.d.ts +11 -0
- package/dist/shared/run-port-snap.d.ts.map +1 -0
- package/dist/shared/run-port-snap.js +19 -0
- package/dist/shared/run-screen-direction.d.ts +5 -0
- package/dist/shared/run-screen-direction.d.ts.map +1 -0
- package/dist/shared/run-screen-direction.js +24 -0
- package/dist/shared/selection-handles.d.ts +4 -0
- package/dist/shared/selection-handles.d.ts.map +1 -1
- package/dist/shared/selection-handles.js +10 -0
- package/dist/shared/slot-paint.d.ts +8 -1
- package/dist/shared/slot-paint.d.ts.map +1 -1
- package/dist/shared/slot-paint.js +120 -27
- package/dist/shared/surface-paint.d.ts +1 -2
- package/dist/shared/surface-paint.d.ts.map +1 -1
- package/dist/shared/surface-paint.js +9 -20
- package/dist/shared/system-check-panel.d.ts +6 -0
- package/dist/shared/system-check-panel.d.ts.map +1 -0
- package/dist/shared/system-check-panel.js +62 -0
- package/dist/shared/system-checks.d.ts +9 -0
- package/dist/shared/system-checks.d.ts.map +1 -0
- package/dist/shared/system-checks.js +131 -0
- package/dist/shared/wall-attach-target.d.ts +14 -2
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +108 -4
- package/dist/shared/wall-opening-clearance.d.ts +19 -0
- package/dist/shared/wall-opening-clearance.d.ts.map +1 -0
- package/dist/shared/wall-opening-clearance.js +28 -0
- package/dist/shared/wall-run-move.d.ts +17 -0
- package/dist/shared/wall-run-move.d.ts.map +1 -0
- package/dist/shared/wall-run-move.js +56 -0
- package/dist/shelf/parametrics.js +4 -4
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +40 -28
- package/dist/site/terrain-geometry.d.ts +1 -1
- package/dist/site/terrain-geometry.d.ts.map +1 -1
- package/dist/site/terrain-geometry.js +35 -9
- package/dist/site/terrain-mesh.d.ts +5 -0
- package/dist/site/terrain-mesh.d.ts.map +1 -1
- package/dist/site/terrain-mesh.js +63 -34
- package/dist/skylight/definition.js +1 -1
- package/dist/skylight/panel.js +1 -1
- package/dist/skylight/parametrics.js +2 -2
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +6 -1
- package/dist/slab/dependency-tracker.d.ts +3 -0
- package/dist/slab/dependency-tracker.d.ts.map +1 -0
- package/dist/slab/dependency-tracker.js +104 -0
- package/dist/slab/floorplan-affordances.d.ts +8 -8
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +16 -2
- package/dist/slab/panel.js +1 -1
- package/dist/slab/parametrics.js +1 -1
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +8 -64
- package/dist/solar-panel/definition.js +1 -1
- package/dist/solar-panel/panel.js +1 -1
- package/dist/solar-panel/parametrics.js +2 -2
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +18 -13
- package/dist/stair/stair-type.d.ts +18 -0
- package/dist/stair/stair-type.d.ts.map +1 -0
- package/dist/stair/stair-type.js +25 -0
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +44 -5
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +8 -5
- package/dist/turbine-vent/geometry.d.ts.map +1 -1
- package/dist/turbine-vent/geometry.js +48 -18
- package/dist/turbine-vent/paint.d.ts +4 -0
- package/dist/turbine-vent/paint.d.ts.map +1 -0
- package/dist/turbine-vent/paint.js +35 -0
- package/dist/turbine-vent/panel.js +1 -1
- package/dist/turbine-vent/parametrics.js +2 -2
- package/dist/turbine-vent/renderer.d.ts.map +1 -1
- package/dist/turbine-vent/renderer.js +31 -9
- package/dist/wall/curve-eligibility.d.ts +3 -0
- package/dist/wall/curve-eligibility.d.ts.map +1 -0
- package/dist/wall/curve-eligibility.js +10 -0
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +8 -11
- package/dist/wall/definition.d.ts +1 -1
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +36 -13
- package/dist/wall/floorplan-affordances.d.ts +1 -0
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +46 -7
- package/dist/wall/floorplan-move.d.ts +3 -4
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +122 -9
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +19 -23
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +10 -7
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +2 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +10 -17
- package/dist/wall/parametrics.js +2 -2
- package/dist/wall/pointer-transparency.d.ts +128 -0
- package/dist/wall/pointer-transparency.d.ts.map +1 -0
- package/dist/wall/pointer-transparency.js +147 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +65 -8
- package/dist/wall/selection-hit-owner.d.ts +53 -0
- package/dist/wall/selection-hit-owner.d.ts.map +1 -0
- package/dist/wall/selection-hit-owner.js +79 -0
- package/dist/wall/system.d.ts +2 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +66 -25
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +5 -0
- package/dist/wall/treatment-level-data.d.ts +6 -1
- package/dist/wall/treatment-level-data.d.ts.map +1 -1
- package/dist/wall/treatment-level-data.js +82 -5
- package/dist/wall/treatments.d.ts +1 -0
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +5 -0
- package/dist/wall/wall-batch-system.d.ts +38 -6
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +122 -25
- package/dist/wall/wall-batch.js +2 -2
- package/dist/window/definition.d.ts +2 -1
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +51 -24
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +1 -1
- package/dist/window/move-tool.d.ts +7 -5
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +344 -58
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +2 -0
- package/dist/window/parametrics.js +2 -2
- package/dist/window/renderer.d.ts.map +1 -1
- package/dist/window/renderer.js +5 -7
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +227 -13
- package/dist/zone/floorplan-affordances.d.ts +12 -12
- package/package.json +11 -9
- package/dist/dormer/panel-window-section.d.ts +0 -14
- package/dist/dormer/panel-window-section.d.ts.map +0 -1
- package/dist/dormer/panel-window-section.js +0 -59
- package/dist/dormer/window-assembly.d.ts +0 -22
- package/dist/dormer/window-assembly.d.ts.map +0 -1
- package/dist/dormer/window-assembly.js +0 -111
- package/dist/dormer/window-frame.d.ts +0 -24
- package/dist/dormer/window-frame.d.ts.map +0 -1
- package/dist/dormer/window-frame.js +0 -100
|
@@ -1,13 +1,33 @@
|
|
|
1
|
-
import { calculateLevelMiters, getWallThickness, } from '@pascal-app/core';
|
|
1
|
+
import { calculateLevelMiters, getWallThickness, isCurvedWall, pointToKey, } from '@pascal-app/core';
|
|
2
2
|
import { create } from 'zustand';
|
|
3
|
+
import { shallow } from 'zustand/vanilla/shallow';
|
|
3
4
|
const PROUD_KEY_PRECISION = 1e6;
|
|
4
5
|
function proudKey(proud) {
|
|
5
6
|
return Math.round(proud * PROUD_KEY_PRECISION) / PROUD_KEY_PRECISION;
|
|
6
7
|
}
|
|
7
|
-
export function
|
|
8
|
-
|
|
8
|
+
export function treatmentProudKeys(proudOffsets) {
|
|
9
|
+
return [...new Set([0, ...proudOffsets.map(proudKey)])].sort((a, b) => a - b);
|
|
10
|
+
}
|
|
11
|
+
export function sameTreatmentWalls(a, b) {
|
|
12
|
+
return a.length === b.length && a.every((wall, index) => wall === b[index]);
|
|
13
|
+
}
|
|
14
|
+
const levelMiterCache = new Map();
|
|
15
|
+
export function clearWallTreatmentMiterCache(levelId) {
|
|
16
|
+
if (levelId === undefined)
|
|
17
|
+
levelMiterCache.clear();
|
|
18
|
+
else
|
|
19
|
+
levelMiterCache.delete(levelId);
|
|
20
|
+
}
|
|
21
|
+
export function buildWallTreatmentLevelData(levelId, walls, proudOffsets) {
|
|
22
|
+
const cached = levelMiterCache.get(levelId);
|
|
23
|
+
const reusable = cached && sameTreatmentWalls(cached.walls, walls) ? cached : undefined;
|
|
9
24
|
const miterDataByProud = new Map();
|
|
10
|
-
for (const proud of
|
|
25
|
+
for (const proud of treatmentProudKeys(proudOffsets)) {
|
|
26
|
+
const previous = reusable?.miterDataByProud.get(proud);
|
|
27
|
+
if (previous) {
|
|
28
|
+
miterDataByProud.set(proud, previous);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
11
31
|
const adjustedWalls = proud === 0
|
|
12
32
|
? [...walls]
|
|
13
33
|
: walls.map((wall) => ({
|
|
@@ -16,11 +36,61 @@ export function buildWallTreatmentLevelData(walls, proudOffsets) {
|
|
|
16
36
|
}));
|
|
17
37
|
miterDataByProud.set(proud, calculateLevelMiters(adjustedWalls));
|
|
18
38
|
}
|
|
19
|
-
|
|
39
|
+
const data = { walls, miterDataByProud };
|
|
40
|
+
levelMiterCache.set(levelId, data);
|
|
41
|
+
return data;
|
|
20
42
|
}
|
|
21
43
|
export function treatmentMiterDataForProud(levelData, proud) {
|
|
22
44
|
return levelData.miterDataByProud.get(proudKey(proud));
|
|
23
45
|
}
|
|
46
|
+
export function createWallTreatmentSelector(node, proudOffsets) {
|
|
47
|
+
const keys = isCurvedWall(node)
|
|
48
|
+
? []
|
|
49
|
+
: [...new Set([node.start, node.end].map(([x, y]) => pointToKey({ x, y })))];
|
|
50
|
+
const prouds = treatmentProudKeys(proudOffsets);
|
|
51
|
+
let previousLevel;
|
|
52
|
+
let previousSlice;
|
|
53
|
+
let previousInputs = [];
|
|
54
|
+
return (state) => {
|
|
55
|
+
const level = node.parentId ? state.byLevelId.get(node.parentId) : undefined;
|
|
56
|
+
if (level === previousLevel)
|
|
57
|
+
return previousSlice;
|
|
58
|
+
previousLevel = level;
|
|
59
|
+
if (!level) {
|
|
60
|
+
previousSlice = undefined;
|
|
61
|
+
previousInputs = [];
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const inputs = [];
|
|
65
|
+
for (const proud of prouds) {
|
|
66
|
+
const data = level.miterDataByProud.get(proud);
|
|
67
|
+
inputs.push(!!data);
|
|
68
|
+
for (const key of keys) {
|
|
69
|
+
const entry = data?.junctionData.get(key)?.get(node.id);
|
|
70
|
+
inputs.push(entry?.left?.x, entry?.left?.y, entry?.right?.x, entry?.right?.y);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (previousSlice && shallow(previousInputs, inputs))
|
|
74
|
+
return previousSlice;
|
|
75
|
+
const miterDataByProud = new Map();
|
|
76
|
+
for (const proud of prouds) {
|
|
77
|
+
const data = level.miterDataByProud.get(proud);
|
|
78
|
+
if (!data)
|
|
79
|
+
continue;
|
|
80
|
+
const junctionData = new Map();
|
|
81
|
+
for (const key of keys) {
|
|
82
|
+
const entry = data.junctionData.get(key)?.get(node.id);
|
|
83
|
+
if (entry)
|
|
84
|
+
junctionData.set(key, new Map([[node.id, entry]]));
|
|
85
|
+
}
|
|
86
|
+
// Trim boundaries read only this wall's endpoint intersections, never junction membership.
|
|
87
|
+
miterDataByProud.set(proud, { junctionData, junctions: new Map() });
|
|
88
|
+
}
|
|
89
|
+
previousInputs = inputs;
|
|
90
|
+
previousSlice = { walls: [node], miterDataByProud };
|
|
91
|
+
return previousSlice;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
24
94
|
export const useWallTreatmentLevelData = create((set) => ({
|
|
25
95
|
byLevelId: new Map(),
|
|
26
96
|
setLevelData: (levelId, data) => set((state) => {
|
|
@@ -28,4 +98,11 @@ export const useWallTreatmentLevelData = create((set) => ({
|
|
|
28
98
|
byLevelId.set(levelId, data);
|
|
29
99
|
return { byLevelId };
|
|
30
100
|
}),
|
|
101
|
+
removeLevelData: (levelId) => set((state) => {
|
|
102
|
+
if (!state.byLevelId.has(levelId))
|
|
103
|
+
return state;
|
|
104
|
+
const byLevelId = new Map(state.byLevelId);
|
|
105
|
+
byLevelId.delete(levelId);
|
|
106
|
+
return { byLevelId };
|
|
107
|
+
}),
|
|
31
108
|
}));
|
|
@@ -12,6 +12,7 @@ type TrimKind = 'skirting' | 'crown' | 'chairRail';
|
|
|
12
12
|
type WallSide = 'interior' | 'exterior';
|
|
13
13
|
type SceneMaterials = Record<SceneMaterialId, SceneMaterial>;
|
|
14
14
|
type WallTreatmentSlotId = 'skirtingInterior' | 'skirtingExterior' | 'crownInterior' | 'crownExterior' | 'chairRailInterior' | 'chairRailExterior';
|
|
15
|
+
export declare function hasWallTreatments(node: WallNode): boolean;
|
|
15
16
|
export declare function wallTreatmentProudOffsets(node: WallNode): number[];
|
|
16
17
|
export declare function buildTrimGeometry(node: WallNode, side: WallSide, trim: WallTrimConfig, kind: TrimKind, childrenNodes: OpeningLike[], levelData: WallTreatmentLevelData): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap> | null;
|
|
17
18
|
export declare function createWallExtraSlotMaterials(node: WallNode, shading: RenderShading, sceneMaterials: SceneMaterials): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treatments.d.ts","sourceRoot":"","sources":["../../src/wall/treatments.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EAMpB,KAAK,QAAQ,EAEb,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAMhG,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC,CAAA;AAED,KAAK,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAA;AAClD,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AACvC,KAAK,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE5D,KAAK,mBAAmB,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CAAA;AAmNvB,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAoBlE;AAuND,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,WAAW,EAAE,EAC5B,SAAS,EAAE,sBAAsB,2FAsDlC;AAkBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc;;;;;;;EAU/B;AAED,eAAO,MAAM,cAAc,uFAKxB;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,EAAE,WAAW,EAAE,CAAA;IAC5B,SAAS,EAAE,sBAAsB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;CACvD,iCAmEC,CAAA"}
|
|
1
|
+
{"version":3,"file":"treatments.d.ts","sourceRoot":"","sources":["../../src/wall/treatments.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EAMpB,KAAK,QAAQ,EAEb,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAMhG,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACpC,CAAA;AAED,KAAK,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAA;AAClD,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAA;AACvC,KAAK,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;AAE5D,KAAK,mBAAmB,GACpB,kBAAkB,GAClB,kBAAkB,GAClB,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CAAA;AAmNvB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAMzD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAoBlE;AAuND,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,WAAW,EAAE,EAC5B,SAAS,EAAE,sBAAsB,2FAsDlC;AAkBD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc;;;;;;;EAU/B;AAED,eAAO,MAAM,cAAc,uFAKxB;IACD,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,EAAE,WAAW,EAAE,CAAA;IAC5B,SAAS,EAAE,sBAAsB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;CACvD,iCAmEC,CAAA"}
|
package/dist/wall/treatments.js
CHANGED
|
@@ -221,6 +221,11 @@ function resolveTrimProfile(kind, trim) {
|
|
|
221
221
|
TRIM_PROFILES[kind][defaultProfile] ??
|
|
222
222
|
TRIM_PROFILES[kind].flat);
|
|
223
223
|
}
|
|
224
|
+
export function hasWallTreatments(node) {
|
|
225
|
+
return !!((node.skirting?.enabled ?? WALL_SKIRTING_DEFAULT.enabled) ||
|
|
226
|
+
(node.crown?.enabled ?? WALL_CROWN_DEFAULT.enabled) ||
|
|
227
|
+
(node.chairRail?.enabled ?? WALL_CHAIR_RAIL_DEFAULT.enabled));
|
|
228
|
+
}
|
|
224
229
|
export function wallTreatmentProudOffsets(node) {
|
|
225
230
|
const offsets = new Set();
|
|
226
231
|
const configs = [
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type WallMode } from '@pascal-app/viewer';
|
|
2
2
|
import { type Material, Mesh } from 'three';
|
|
3
|
+
export declare function revealBatchedWallsForCapture(): void;
|
|
4
|
+
export declare function holdBatchedWallsAfterCapture(): void;
|
|
3
5
|
export type WallBatchCandidate = {
|
|
4
6
|
nodeId: string;
|
|
5
7
|
mesh: Mesh;
|
|
@@ -10,14 +12,44 @@ export type WallBatchCandidate = {
|
|
|
10
12
|
*
|
|
11
13
|
* The merged mesh captures one material set when it is sewn and nothing
|
|
12
14
|
* re-reads it, so batching is only sound while every batched wall's materials
|
|
13
|
-
* hold still. That is true in
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* mesh hangs off, which would leave a focused batched wall drawn by nobody.
|
|
15
|
+
* hold still. That is true in `up`; in `cutaway`, walls stamped `wallHidden`
|
|
16
|
+
* are released per wall in the same frame because WallCutout runs at priority
|
|
17
|
+
* 0 and this system at 5. `down` and `translucent` make every wall see-through.
|
|
18
|
+
* Isolation is the other stand-down: it hides the level root the merged mesh
|
|
19
|
+
* hangs off, which would leave a focused batched wall drawn by nobody.
|
|
19
20
|
*/
|
|
20
21
|
export declare function canBatchWalls(wallMode: WallMode, isolationActive: boolean): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Walls the viewer is currently lighting up — a selection, or any hover.
|
|
24
|
+
*
|
|
25
|
+
* A selection or delete hover paints the wall by swapping the materials on its
|
|
26
|
+
* own mesh, which the merged mesh does not follow. Every other hover draws an
|
|
27
|
+
* outline instead, and that needs the same thing for a different reason: the
|
|
28
|
+
* outline node renders `outliner.hoveredObjects` through the main camera, which
|
|
29
|
+
* enables no batched layer, so a sewn wall reaches neither mask pass and
|
|
30
|
+
* hovering it lights up nothing at all — in select mode, and in paint mode
|
|
31
|
+
* where the outline is the only signal for which surface the next click lands
|
|
32
|
+
* on.
|
|
33
|
+
*
|
|
34
|
+
* Both wants are the same one: a lit wall goes back to drawing its own
|
|
35
|
+
* geometry. Only ever a handful are lit at once, and a handful of extra draw
|
|
36
|
+
* calls is what lighting them costs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function collectTintedWalls(wallIds: ReadonlySet<string>): Set<string>;
|
|
21
39
|
export declare function collectWallBatchCandidates(levelId: string, excludedNodeIds?: ReadonlySet<string>): Map<string, WallBatchCandidate[]>;
|
|
22
40
|
export declare const WallBatchSystem: () => null;
|
|
41
|
+
/**
|
|
42
|
+
* Follows the scene's dirty tracking rather than watching the walls itself.
|
|
43
|
+
*
|
|
44
|
+
* A wall changes for exactly one reason the merged mesh cares about: the wall
|
|
45
|
+
* system rebuilt its geometry. That system already runs off `dirtyNodes`, so
|
|
46
|
+
* this reads the same signal from both ends — the marks still standing when
|
|
47
|
+
* this frame reaches us, and the rebuild notices the wall system left behind
|
|
48
|
+
* for the walls whose marks it has already cleared. Nothing here re-derives
|
|
49
|
+
* "did this wall move" on its own, and the per-frame cost is the size of the
|
|
50
|
+
* dirty set rather than the size of the floor.
|
|
51
|
+
*/
|
|
52
|
+
export declare function runBatchFrame(invalidate: () => void, wakeRef: {
|
|
53
|
+
current: ReturnType<typeof setTimeout> | null;
|
|
54
|
+
}): void;
|
|
23
55
|
//# sourceMappingURL=wall-batch-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wall-batch-system.d.ts","sourceRoot":"","sources":["../../src/wall/wall-batch-system.tsx"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,KAAK,QAAQ,EAAW,IAAI,EAAiB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"wall-batch-system.d.ts","sourceRoot":"","sources":["../../src/wall/wall-batch-system.tsx"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,KAAK,QAAQ,EAAW,IAAI,EAAiB,MAAM,OAAO,CAAA;AAkGnE,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAKnD;AA6BD,MAAM,MAAM,kBAAkB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AA+BtF;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAEnF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAW5E;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,eAAe,GAAE,WAAW,CAAC,MAAM,CAAa,GAC/C,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAoBnC;AAsFD,eAAO,MAAM,eAAe,YAmE3B,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE;IAAE,OAAO,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;CAAE,QAyI3D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sceneRegistry, useScene } from '@pascal-app/core';
|
|
2
|
+
import { emitter, sceneRegistry, useScene } from '@pascal-app/core';
|
|
3
3
|
import { drainRebuiltWalls, getPendingWallRebuildCount, isIsolationActive, SCENE_LAYER, useViewer, } from '@pascal-app/viewer';
|
|
4
4
|
import { useFrame, useThree } from '@react-three/fiber';
|
|
5
5
|
import { useEffect, useRef } from 'react';
|
|
@@ -40,6 +40,7 @@ const batchByNode = new Map();
|
|
|
40
40
|
const staleLevels = new Set();
|
|
41
41
|
const changedWalls = new Set();
|
|
42
42
|
const EMPTY_IDS = new Set();
|
|
43
|
+
let lastCutawayHiddenWalls = EMPTY_IDS;
|
|
43
44
|
let knownWallCount = -1;
|
|
44
45
|
let lastWallChangeAtMs = 0;
|
|
45
46
|
let batchingSuspended = false;
|
|
@@ -56,6 +57,17 @@ function showOwnGeometry(nodeId) {
|
|
|
56
57
|
if (mesh)
|
|
57
58
|
revealBatchedWall(mesh);
|
|
58
59
|
}
|
|
60
|
+
export function revealBatchedWallsForCapture() {
|
|
61
|
+
for (const nodeId of batchByNode.keys())
|
|
62
|
+
showOwnGeometry(nodeId);
|
|
63
|
+
}
|
|
64
|
+
export function holdBatchedWallsAfterCapture() {
|
|
65
|
+
for (const nodeId of batchByNode.keys()) {
|
|
66
|
+
const mesh = sceneRegistry.nodes.get(nodeId);
|
|
67
|
+
if (mesh)
|
|
68
|
+
hideBatchedWall(mesh);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
59
71
|
/** Hands a wall back to itself: the merged mesh stops drawing it, it resumes. */
|
|
60
72
|
function releaseWall(nodeId) {
|
|
61
73
|
const record = batchByNode.get(nodeId);
|
|
@@ -94,6 +106,8 @@ function toCandidate(nodeId, node, excludedNodeIds = EMPTY_IDS) {
|
|
|
94
106
|
const mesh = sceneRegistry.nodes.get(nodeId);
|
|
95
107
|
if (!mesh?.visible)
|
|
96
108
|
return null;
|
|
109
|
+
if (mesh.userData.wallHidden === true)
|
|
110
|
+
return null;
|
|
97
111
|
// Solo's shadow-caster-only pass and the viewer's isolation filter both
|
|
98
112
|
// hide a wall by taking it off the scene layer. Sewing it in would put it
|
|
99
113
|
// back on screen through the merged mesh, which neither asked for.
|
|
@@ -113,25 +127,32 @@ function toCandidate(nodeId, node, excludedNodeIds = EMPTY_IDS) {
|
|
|
113
127
|
*
|
|
114
128
|
* The merged mesh captures one material set when it is sewn and nothing
|
|
115
129
|
* re-reads it, so batching is only sound while every batched wall's materials
|
|
116
|
-
* hold still. That is true in
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* mesh hangs off, which would leave a focused batched wall drawn by nobody.
|
|
130
|
+
* hold still. That is true in `up`; in `cutaway`, walls stamped `wallHidden`
|
|
131
|
+
* are released per wall in the same frame because WallCutout runs at priority
|
|
132
|
+
* 0 and this system at 5. `down` and `translucent` make every wall see-through.
|
|
133
|
+
* Isolation is the other stand-down: it hides the level root the merged mesh
|
|
134
|
+
* hangs off, which would leave a focused batched wall drawn by nobody.
|
|
122
135
|
*/
|
|
123
136
|
export function canBatchWalls(wallMode, isolationActive) {
|
|
124
|
-
return !isolationActive && wallMode === 'up';
|
|
137
|
+
return !isolationActive && (wallMode === 'up' || wallMode === 'cutaway');
|
|
125
138
|
}
|
|
126
139
|
/**
|
|
127
|
-
* Walls the
|
|
140
|
+
* Walls the viewer is currently lighting up — a selection, or any hover.
|
|
141
|
+
*
|
|
142
|
+
* A selection or delete hover paints the wall by swapping the materials on its
|
|
143
|
+
* own mesh, which the merged mesh does not follow. Every other hover draws an
|
|
144
|
+
* outline instead, and that needs the same thing for a different reason: the
|
|
145
|
+
* outline node renders `outliner.hoveredObjects` through the main camera, which
|
|
146
|
+
* enables no batched layer, so a sewn wall reaches neither mask pass and
|
|
147
|
+
* hovering it lights up nothing at all — in select mode, and in paint mode
|
|
148
|
+
* where the outline is the only signal for which surface the next click lands
|
|
149
|
+
* on.
|
|
128
150
|
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* costs.
|
|
151
|
+
* Both wants are the same one: a lit wall goes back to drawing its own
|
|
152
|
+
* geometry. Only ever a handful are lit at once, and a handful of extra draw
|
|
153
|
+
* calls is what lighting them costs.
|
|
133
154
|
*/
|
|
134
|
-
function collectTintedWalls(wallIds) {
|
|
155
|
+
export function collectTintedWalls(wallIds) {
|
|
135
156
|
const viewer = useViewer.getState();
|
|
136
157
|
const tinted = new Set();
|
|
137
158
|
for (const id of viewer.selection.selectedIds)
|
|
@@ -140,7 +161,7 @@ function collectTintedWalls(wallIds) {
|
|
|
140
161
|
for (const id of viewer.previewSelectedIds)
|
|
141
162
|
if (wallIds.has(id))
|
|
142
163
|
tinted.add(id);
|
|
143
|
-
const hovered = viewer.
|
|
164
|
+
const hovered = viewer.hoveredId;
|
|
144
165
|
if (hovered && wallIds.has(hovered))
|
|
145
166
|
tinted.add(hovered);
|
|
146
167
|
return tinted;
|
|
@@ -223,6 +244,7 @@ function mergeLevel(levelId, excludedNodeIds = EMPTY_IDS) {
|
|
|
223
244
|
continue;
|
|
224
245
|
const mesh = new Mesh(batch.geometry, candidates[0].materials);
|
|
225
246
|
mesh.name = 'wall-batch';
|
|
247
|
+
mesh.userData.pascalExport = 'strip';
|
|
226
248
|
mesh.castShadow = true;
|
|
227
249
|
mesh.receiveShadow = true;
|
|
228
250
|
mesh.matrixAutoUpdate = false;
|
|
@@ -248,6 +270,49 @@ export const WallBatchSystem = () => {
|
|
|
248
270
|
const invalidate = useThree((state) => state.invalidate);
|
|
249
271
|
const wakeRef = useRef(null);
|
|
250
272
|
useFrame(() => runBatchFrame(invalidate, wakeRef), 5);
|
|
273
|
+
// Captures and exports clone the scene and prune whatever is off the scene
|
|
274
|
+
// layer, so the sources come back for the capture and go under again after
|
|
275
|
+
// it. The node batch used to reveal them as a side effect of its own sweep
|
|
276
|
+
// (shared hold reason) and nothing ever re-hid them: every batched wall
|
|
277
|
+
// drew twice for the rest of the session.
|
|
278
|
+
useEffect(() => {
|
|
279
|
+
emitter.on('thumbnail:before-capture', revealBatchedWallsForCapture);
|
|
280
|
+
emitter.on('thumbnail:after-capture', holdBatchedWallsAfterCapture);
|
|
281
|
+
return () => {
|
|
282
|
+
emitter.off('thumbnail:before-capture', revealBatchedWallsForCapture);
|
|
283
|
+
emitter.off('thumbnail:after-capture', holdBatchedWallsAfterCapture);
|
|
284
|
+
};
|
|
285
|
+
}, []);
|
|
286
|
+
// Scripted-probe hook, ?perf sessions only (mirrors __itemBatch): the
|
|
287
|
+
// panel has no row for the merged wall batch, so probes read it here.
|
|
288
|
+
useEffect(() => {
|
|
289
|
+
if (!new URLSearchParams(window.location.search).has('perf'))
|
|
290
|
+
return;
|
|
291
|
+
const probe = {
|
|
292
|
+
stats: () => {
|
|
293
|
+
let batches = 0;
|
|
294
|
+
for (const records of batchesByLevel.values())
|
|
295
|
+
batches += records.length;
|
|
296
|
+
let hidden = 0;
|
|
297
|
+
for (const nodeId of sceneRegistry.byType.wall ?? EMPTY_IDS) {
|
|
298
|
+
if (sceneRegistry.nodes.get(nodeId)?.userData.wallHidden === true)
|
|
299
|
+
hidden++;
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
walls: batchByNode.size,
|
|
303
|
+
batches,
|
|
304
|
+
levels: batchesByLevel.size,
|
|
305
|
+
hidden,
|
|
306
|
+
suspended: batchingSuspended,
|
|
307
|
+
wallMode: useViewer.getState().wallMode,
|
|
308
|
+
};
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
window.__wallBatch = probe;
|
|
312
|
+
return () => {
|
|
313
|
+
delete window.__wallBatch;
|
|
314
|
+
};
|
|
315
|
+
}, []);
|
|
251
316
|
useEffect(() => () => {
|
|
252
317
|
if (wakeRef.current)
|
|
253
318
|
clearTimeout(wakeRef.current);
|
|
@@ -255,6 +320,7 @@ export const WallBatchSystem = () => {
|
|
|
255
320
|
disposeLevelBatches(levelId);
|
|
256
321
|
changedWalls.clear();
|
|
257
322
|
staleLevels.clear();
|
|
323
|
+
lastCutawayHiddenWalls = EMPTY_IDS;
|
|
258
324
|
knownWallCount = -1;
|
|
259
325
|
batchingSuspended = false;
|
|
260
326
|
lastAppearance.shading = undefined;
|
|
@@ -276,7 +342,7 @@ export const WallBatchSystem = () => {
|
|
|
276
342
|
* "did this wall move" on its own, and the per-frame cost is the size of the
|
|
277
343
|
* dirty set rather than the size of the floor.
|
|
278
344
|
*/
|
|
279
|
-
function runBatchFrame(invalidate, wakeRef) {
|
|
345
|
+
export function runBatchFrame(invalidate, wakeRef) {
|
|
280
346
|
const wallIds = sceneRegistry.byType.wall ?? EMPTY_IDS;
|
|
281
347
|
const nodes = useScene.getState().nodes;
|
|
282
348
|
// Walls the wall system rebuilt: it clears each mark as it goes, so by the
|
|
@@ -313,6 +379,39 @@ function runBatchFrame(invalidate, wakeRef) {
|
|
|
313
379
|
releaseWall(nodeId);
|
|
314
380
|
changed = true;
|
|
315
381
|
}
|
|
382
|
+
// Only cutaway hides walls one by one; `up` hides none and the other modes
|
|
383
|
+
// stand the batch down, so the stamp scan is worth a frame only there.
|
|
384
|
+
const cutawayHiddenWalls = new Set();
|
|
385
|
+
if (useViewer.getState().wallMode === 'cutaway') {
|
|
386
|
+
for (const nodeId of wallIds) {
|
|
387
|
+
const mesh = sceneRegistry.nodes.get(nodeId);
|
|
388
|
+
if (mesh?.userData.wallHidden === true)
|
|
389
|
+
cutawayHiddenWalls.add(nodeId);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
for (const nodeId of cutawayHiddenWalls) {
|
|
393
|
+
const record = batchByNode.get(nodeId);
|
|
394
|
+
if (!record)
|
|
395
|
+
continue;
|
|
396
|
+
releaseWall(nodeId);
|
|
397
|
+
staleLevels.add(record.levelId);
|
|
398
|
+
changed = true;
|
|
399
|
+
}
|
|
400
|
+
// A stamp that lifts hands the wall back to its own draw call, and nothing
|
|
401
|
+
// else marks the level — so the flip itself has to, or the wall would stay
|
|
402
|
+
// out of the merged mesh until an unrelated edit re-sews the floor.
|
|
403
|
+
for (const nodeId of lastCutawayHiddenWalls) {
|
|
404
|
+
if (cutawayHiddenWalls.has(nodeId))
|
|
405
|
+
continue;
|
|
406
|
+
const node = nodes[nodeId];
|
|
407
|
+
if (node?.type === 'wall' && node.parentId)
|
|
408
|
+
staleLevels.add(node.parentId);
|
|
409
|
+
changed = true;
|
|
410
|
+
}
|
|
411
|
+
lastCutawayHiddenWalls = cutawayHiddenWalls;
|
|
412
|
+
const excludedNodeIds = new Set(cutawayHiddenWalls);
|
|
413
|
+
for (const nodeId of tintedWalls)
|
|
414
|
+
excludedNodeIds.add(nodeId);
|
|
316
415
|
// A theme, texture or material-library switch re-makes every wall's
|
|
317
416
|
// materials without marking a single node, so the merged copies have to be
|
|
318
417
|
// sewn again from the new ones. See `appearanceChanged`.
|
|
@@ -336,13 +435,11 @@ function runBatchFrame(invalidate, wakeRef) {
|
|
|
336
435
|
changed = true;
|
|
337
436
|
}
|
|
338
437
|
}
|
|
339
|
-
//
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
// Every wall mode but `up` re-assigns wall materials the merged mesh does not
|
|
345
|
-
// follow. See `canBatchWalls`.
|
|
438
|
+
// Isolation, `down` and `translucent` make batching unsound, so the batch
|
|
439
|
+
// stands down while they hold and sews the floors back together once they
|
|
440
|
+
// lift. `cutaway` stays live because WallCutout stamps hidden walls at
|
|
441
|
+
// priority 0 and this system releases them per wall at priority 5 in the
|
|
442
|
+
// same frame. See `canBatchWalls`.
|
|
346
443
|
const suspended = !canBatchWalls(useViewer.getState().wallMode, isIsolationActive());
|
|
347
444
|
if (suspended !== batchingSuspended) {
|
|
348
445
|
batchingSuspended = suspended;
|
|
@@ -381,8 +478,8 @@ function runBatchFrame(invalidate, wakeRef) {
|
|
|
381
478
|
return;
|
|
382
479
|
}
|
|
383
480
|
for (const levelId of staleLevels) {
|
|
384
|
-
if (unbatchedWallCount(levelId,
|
|
385
|
-
mergeLevel(levelId,
|
|
481
|
+
if (unbatchedWallCount(levelId, excludedNodeIds) >= MIN_BATCH_WALLS) {
|
|
482
|
+
mergeLevel(levelId, excludedNodeIds);
|
|
386
483
|
}
|
|
387
484
|
}
|
|
388
485
|
staleLevels.clear();
|
package/dist/wall/wall-batch.js
CHANGED
|
@@ -161,9 +161,9 @@ export function applyWallBatchGroups(batch, hidden) {
|
|
|
161
161
|
* its subtree keeps rendering and picking.
|
|
162
162
|
*/
|
|
163
163
|
export function hideBatchedWall(mesh) {
|
|
164
|
-
hideFromScene(mesh, 'batched');
|
|
164
|
+
hideFromScene(mesh, 'wall-batched');
|
|
165
165
|
}
|
|
166
166
|
/** Hands a wall back its own draw call — unless solo or isolation still hide it. */
|
|
167
167
|
export function revealBatchedWall(mesh) {
|
|
168
|
-
showInScene(mesh, 'batched');
|
|
168
|
+
showInScene(mesh, 'wall-batched');
|
|
169
169
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { NodeDefinition } from '@pascal-app/core';
|
|
1
|
+
import type { AnyNodeId, NodeDefinition, SceneApi, WindowNode as WindowNodeType } from '@pascal-app/core';
|
|
2
2
|
import { WindowNode } from './schema';
|
|
3
|
+
export declare function resolveWindowHandlePortalTarget(window: WindowNodeType, scene: Pick<SceneApi, 'get'>): AnyNodeId | null;
|
|
3
4
|
/**
|
|
4
5
|
* Window — Phase 5 batch kind. Mirrors door's shape: hosted on walls,
|
|
5
6
|
* cuts holes in them, animated open/close state for opening windows.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/window/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/window/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,cAAc,EAEd,QAAQ,EAER,UAAU,IAAI,cAAc,EAC7B,MAAM,kBAAkB,CAAA;AAqBzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAQrC,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAC3B,SAAS,GAAG,IAAI,CAWlB;AA0JD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CAqG9D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getDormerWallHorizontalBoundsAtHeight, getDormerWallOpeningVerticalBounds, } from '@pascal-app/core';
|
|
1
2
|
import { buildWindowFloorplanSchedule, computeWindowFloorplanLevelData, } from '../shared/opening-documentation';
|
|
2
3
|
import { publishOpeningResizeGuides } from '../shared/opening-guides-runtime';
|
|
3
4
|
import { readRoofFaceHeightMax, readRoofFaceWidthMax } from '../shared/roof-opening-host';
|
|
@@ -16,9 +17,19 @@ const SIDE_HANDLE_OFFSET = 0.24;
|
|
|
16
17
|
const HEIGHT_HANDLE_OFFSET = 0.24;
|
|
17
18
|
const MIN_WINDOW_HEIGHT = 0.3;
|
|
18
19
|
const MIN_WINDOW_WIDTH = 0.3;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
export function resolveWindowHandlePortalTarget(window, scene) {
|
|
21
|
+
const parentId = window.parentId;
|
|
22
|
+
if (!parentId)
|
|
23
|
+
return null;
|
|
24
|
+
const grandparentId = scene.get(parentId)
|
|
25
|
+
?.parentId;
|
|
26
|
+
if (!grandparentId)
|
|
27
|
+
return null;
|
|
28
|
+
if (window.dormerId !== parentId)
|
|
29
|
+
return grandparentId;
|
|
30
|
+
return (scene.get(grandparentId)?.parentId ??
|
|
31
|
+
grandparentId);
|
|
32
|
+
}
|
|
22
33
|
function readWallLength(w, scene) {
|
|
23
34
|
if (!w.wallId)
|
|
24
35
|
return Number.POSITIVE_INFINITY;
|
|
@@ -27,6 +38,30 @@ function readWallLength(w, scene) {
|
|
|
27
38
|
return Number.POSITIVE_INFINITY;
|
|
28
39
|
return Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
|
|
29
40
|
}
|
|
41
|
+
function resolveDormerHost(window, scene) {
|
|
42
|
+
const dormerId = window.dormerId ?? window.parentId;
|
|
43
|
+
if (!dormerId)
|
|
44
|
+
return null;
|
|
45
|
+
const dormer = scene.get(dormerId);
|
|
46
|
+
return dormer?.type === 'dormer' ? dormer : null;
|
|
47
|
+
}
|
|
48
|
+
function readDormerFaceWidthMax(window, scene, localGrowSign) {
|
|
49
|
+
const dormer = resolveDormerHost(window, scene);
|
|
50
|
+
if (!dormer)
|
|
51
|
+
return null;
|
|
52
|
+
const bounds = getDormerWallHorizontalBoundsAtHeight(dormer, window.dormerFace ?? 'front', window.position[1] + window.height / 2);
|
|
53
|
+
const faceGrowSign = Math.cos(window.rotation[1]) >= 0 ? localGrowSign : -localGrowSign;
|
|
54
|
+
const anchorX = window.position[0] - (faceGrowSign * window.width) / 2;
|
|
55
|
+
return faceGrowSign > 0 ? bounds.max - anchorX : anchorX - bounds.min;
|
|
56
|
+
}
|
|
57
|
+
function readDormerFaceHeightMax(window, scene, growSign) {
|
|
58
|
+
const dormer = resolveDormerHost(window, scene);
|
|
59
|
+
if (!dormer)
|
|
60
|
+
return null;
|
|
61
|
+
const bounds = getDormerWallOpeningVerticalBounds(dormer, window.dormerFace ?? 'front', window.position[0], window.width);
|
|
62
|
+
const anchorY = window.position[1] - (growSign * window.height) / 2;
|
|
63
|
+
return growSign > 0 ? bounds.max - anchorY : anchorY - bounds.min;
|
|
64
|
+
}
|
|
30
65
|
function windowWidthHandle(side) {
|
|
31
66
|
const sign = side === 'right' ? 1 : -1;
|
|
32
67
|
return {
|
|
@@ -36,8 +71,12 @@ function windowWidthHandle(side) {
|
|
|
36
71
|
// front instead of edge-on (the window sits on a vertical wall).
|
|
37
72
|
faceNormal: true,
|
|
38
73
|
anchor: side === 'right' ? 'min' : 'max',
|
|
74
|
+
gridSnap: true,
|
|
39
75
|
min: MIN_WINDOW_WIDTH,
|
|
40
76
|
max: (n, scene) => {
|
|
77
|
+
const dormerMax = readDormerFaceWidthMax(n, scene, sign);
|
|
78
|
+
if (dormerMax !== null)
|
|
79
|
+
return Math.max(MIN_WINDOW_WIDTH, dormerMax);
|
|
41
80
|
// Roof-hosted windows clamp against the face profile (the
|
|
42
81
|
// wall-based limits read Infinity when wallId is unset).
|
|
43
82
|
const roofMax = readRoofFaceWidthMax(n, scene, sign);
|
|
@@ -67,6 +106,7 @@ function windowWidthHandle(side) {
|
|
|
67
106
|
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
68
107
|
},
|
|
69
108
|
portal: 'grandparent',
|
|
109
|
+
portalTarget: resolveWindowHandlePortalTarget,
|
|
70
110
|
};
|
|
71
111
|
}
|
|
72
112
|
// Window height has two arrows (top + bottom edge) — each anchors at the
|
|
@@ -79,8 +119,12 @@ function windowHeightHandle(edge) {
|
|
|
79
119
|
axis: 'y',
|
|
80
120
|
// top arrow anchors at -Y (bottom stays fixed); bottom at +Y (top stays).
|
|
81
121
|
anchor: edge === 'top' ? 'min' : 'max',
|
|
122
|
+
gridSnap: true,
|
|
82
123
|
min: MIN_WINDOW_HEIGHT,
|
|
83
124
|
max: (n, scene) => {
|
|
125
|
+
const dormerMax = readDormerFaceHeightMax(n, scene, sign);
|
|
126
|
+
if (dormerMax !== null)
|
|
127
|
+
return Math.max(MIN_WINDOW_HEIGHT, dormerMax);
|
|
84
128
|
const roofMax = readRoofFaceHeightMax(n, scene, sign);
|
|
85
129
|
if (roofMax !== null)
|
|
86
130
|
return Math.max(MIN_WINDOW_HEIGHT, roofMax);
|
|
@@ -110,27 +154,10 @@ function windowHeightHandle(edge) {
|
|
|
110
154
|
position: (n) => [0, sign * (n.height / 2 + HEIGHT_HANDLE_OFFSET), 0],
|
|
111
155
|
},
|
|
112
156
|
portal: 'grandparent',
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
// Press-drag move grip at the window centre, standing in the wall face. Routes
|
|
116
|
-
// through the same move tool as the floating Move button (3D
|
|
117
|
-
// `affordanceTools.move`, 2D `floorplanMoveTarget`) — slide within the wall
|
|
118
|
-
// plane + re-host onto another wall — committing on release, no second click.
|
|
119
|
-
function windowMoveHandle() {
|
|
120
|
-
return {
|
|
121
|
-
kind: 'tap-action',
|
|
122
|
-
shape: 'move-cross',
|
|
123
|
-
plane: 'node-normal',
|
|
124
|
-
portal: 'grandparent',
|
|
125
|
-
cursor: 'move',
|
|
126
|
-
onActivate: (node, _scene, editor) => editor.engageMoveDrag(node),
|
|
127
|
-
placement: {
|
|
128
|
-
position: () => [0, 0, MOVE_HANDLE_LIFT],
|
|
129
|
-
},
|
|
157
|
+
portalTarget: resolveWindowHandlePortalTarget,
|
|
130
158
|
};
|
|
131
159
|
}
|
|
132
160
|
const windowHandles = [
|
|
133
|
-
windowMoveHandle(),
|
|
134
161
|
windowWidthHandle('left'),
|
|
135
162
|
windowWidthHandle('right'),
|
|
136
163
|
windowHeightHandle('top'),
|
|
@@ -151,7 +178,7 @@ export const windowDefinition = {
|
|
|
151
178
|
kind: 'window',
|
|
152
179
|
snapProfile: 'item',
|
|
153
180
|
facingIndicator: true,
|
|
154
|
-
schemaVersion:
|
|
181
|
+
schemaVersion: 3,
|
|
155
182
|
schema: WindowNode,
|
|
156
183
|
category: 'structure',
|
|
157
184
|
extensions: {
|
|
@@ -180,9 +207,9 @@ export const windowDefinition = {
|
|
|
180
207
|
cutScope: 'wall',
|
|
181
208
|
dirtyHandledByOwnSystem: true,
|
|
182
209
|
},
|
|
183
|
-
// `wallId` / `roofSegmentId` are re-derived from the surface under
|
|
210
|
+
// `wallId` / `roofSegmentId` / `dormerId` are re-derived from the surface under
|
|
184
211
|
// the cursor at preset placement time — see door for the pattern.
|
|
185
|
-
hostRefFields: ['wallId', 'roofSegmentId', 'roofFace'],
|
|
212
|
+
hostRefFields: ['wallId', 'roofSegmentId', 'roofFace', 'dormerId', 'dormerFace'],
|
|
186
213
|
// Frame / glass slots painted through the registry. The window system tags
|
|
187
214
|
// each mesh with its `userData.slotId`; paint writes `node.slots`.
|
|
188
215
|
slots: () => windowSlots(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/window/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAOxB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAmBzB;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,yBAAyB,EAAE,mBAAmB,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"floorplan-move.d.ts","sourceRoot":"","sources":["../../src/window/floorplan-move.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAOxB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAmBzB;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,yBAAyB,EAAE,mBAAmB,CAAC,UAAU,CAkPrE,CAAA"}
|
|
@@ -198,7 +198,7 @@ export const windowFloorplanMoveTarget = ({ node }) => {
|
|
|
198
198
|
return false;
|
|
199
199
|
// Block on overlap UNLESS Alt force-places — same `placeable` rule as
|
|
200
200
|
// the 3D move + the shared `resolveOpeningPlacement`.
|
|
201
|
-
const collides = hasWallChildOverlap(lastValid.parentId, lastValid.position[0], lastValid.position[1], live.width, live.height, live.id);
|
|
201
|
+
const collides = hasWallChildOverlap(lastValid.parentId, useScene.getState().nodes, lastValid.position[0], lastValid.position[1], live.width, live.height, live.id);
|
|
202
202
|
return resolveOpeningPlacement({ collides, forcePlace }).placeable;
|
|
203
203
|
},
|
|
204
204
|
commit() {
|