@pascal-app/nodes 1.0.0-beta.4 → 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/flame-index.d.ts +3 -0
- package/dist/cabinet/flame-index.d.ts.map +1 -0
- package/dist/cabinet/flame-index.js +13 -0
- 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/system.d.ts +2 -0
- package/dist/cabinet/system.d.ts.map +1 -1
- package/dist/cabinet/system.js +28 -8
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +616 -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.d.ts.map +1 -1
- package/dist/ceiling/panel.js +8 -2
- 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/placement-guides.d.ts.map +1 -1
- package/dist/dormer/placement-guides.js +5 -4
- 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/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +2 -0
- 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/curve-tool.d.ts.map +1 -1
- package/dist/fence/curve-tool.js +14 -9
- 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/move-control-point-tool.d.ts.map +1 -1
- package/dist/fence/move-control-point-tool.js +13 -8
- package/dist/fence/move-tangent-tool.d.ts.map +1 -1
- package/dist/fence/move-tangent-tool.js +13 -8
- package/dist/fence/parametrics.js +3 -3
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +55 -31
- 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/measurement/renderer.d.ts.map +1 -1
- package/dist/measurement/renderer.js +6 -5
- package/dist/measurement/surface-query.js +5 -5
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +7 -5
- 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/ridge-vent/renderer.d.ts.map +1 -1
- package/dist/ridge-vent/renderer.js +2 -2
- 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-ghost.d.ts.map +1 -1
- package/dist/shared/mep-ghost.js +19 -1
- 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.d.ts.map +1 -1
- 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 +3 -4
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +24 -23
- 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 +62 -27
- 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 +5 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +71 -26
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +29 -27
- 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 +55 -0
- package/dist/wall/wall-batch-system.d.ts.map +1 -0
- package/dist/wall/wall-batch-system.js +486 -0
- package/dist/wall/wall-batch.d.ts +66 -0
- package/dist/wall/wall-batch.d.ts.map +1 -0
- package/dist/wall/wall-batch.js +169 -0
- 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/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +4 -3
- 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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ADDITION, Brush, computeGeometryBoundsTree, csgEvaluator, csgGeometry, csgMaterials, getRoofSegmentBrushes, mapRoofGroupMaterialIndex, prepareBrushForCSG, remapRoofShellFaces, roofCsgDummyMats, SUBTRACTION, } from '@pascal-app/viewer';
|
|
1
|
+
import { dormerWallFacePointToDormer, getDormerWallFaceFrame, getPitchFromActiveRoofHeight, ROOF_SHAPE_DEFAULTS, } from '@pascal-app/core';
|
|
2
|
+
import { ADDITION, Brush, buildOpeningCutoutGeometry, computeGeometryBoundsTree, csgEvaluator, csgGeometry, csgMaterials, getRoofSegmentBrushes, mapRoofGroupMaterialIndex, prepareBrushForCSG, remapRoofShellFaces, roofCsgDummyMats, SUBTRACTION, } from '@pascal-app/viewer';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
|
-
import {
|
|
4
|
+
import { buildDormerShellGeometry, getDormerBodyYaw } from './geometry';
|
|
5
5
|
// Legacy default for the hung-wall (skirt) height. Used as a fallback
|
|
6
6
|
// when `dormer.wallSkirtHeight` is undefined (e.g. old saved scenes).
|
|
7
7
|
const DORMER_DROP_BELOW = 2;
|
|
@@ -17,194 +17,20 @@ const _scale = new THREE.Vector3(1, 1, 1);
|
|
|
17
17
|
* the live preview during slider drags so we don't re-run CSG on every
|
|
18
18
|
* pointer move. Also used by the placement / move-tool ghost.
|
|
19
19
|
*
|
|
20
|
-
* Builds a rectangular body + simple roof in dormer-mesh-local. For
|
|
21
|
-
* `flat` dormers the roof triangle is skipped. Other roof types use
|
|
22
|
-
* the gable approximation — it's a rough silhouette by design.
|
|
23
|
-
*
|
|
24
20
|
* The wall sits at material slot 0 and the roof at slot 3 so it picks
|
|
25
21
|
* up the same material array the renderer passes for the CSG output.
|
|
26
22
|
*/
|
|
27
23
|
export function buildDormerFallbackGeometry(dormer) {
|
|
28
|
-
|
|
29
|
-
const d = Math.max(0.05, dormer.depth);
|
|
30
|
-
const wallH = Math.max(0.05, dormer.height);
|
|
31
|
-
const roofH = Math.max(0, dormer.roofHeight);
|
|
32
|
-
const skirt = dormerSkirtHeight(dormer);
|
|
33
|
-
const isFlat = dormer.roofType === 'flat' || roofH === 0;
|
|
34
|
-
// Body box: foot at y = -skirt, top at y = wallH.
|
|
35
|
-
// BoxGeometry is indexed; ExtrudeGeometry below is not. mergeGeometries
|
|
36
|
-
// refuses mixed input ("index attribute exists among all geometries,
|
|
37
|
-
// or in none of them") — drop the body's index so both inputs match.
|
|
38
|
-
const indexedBody = new THREE.BoxGeometry(w, wallH + skirt, d);
|
|
39
|
-
indexedBody.translate(0, (wallH - skirt) / 2, 0);
|
|
40
|
-
const body = indexedBody.toNonIndexed();
|
|
41
|
-
indexedBody.dispose();
|
|
42
|
-
const bVtx = body.getAttribute('position').count;
|
|
43
|
-
body.clearGroups();
|
|
44
|
-
body.addGroup(0, bVtx, 0);
|
|
45
|
-
if (isFlat) {
|
|
46
|
-
if (!body.getAttribute('normal'))
|
|
47
|
-
body.computeVertexNormals();
|
|
48
|
-
return body;
|
|
49
|
-
}
|
|
50
|
-
// Roof: extruded triangle from eave (y = wallH) to peak (y = wallH + roofH).
|
|
51
|
-
// Apex points along +Y, base spans the width. Extrude along Z (depth).
|
|
52
|
-
const roofShape = new THREE.Shape();
|
|
53
|
-
roofShape.moveTo(-w / 2, 0);
|
|
54
|
-
roofShape.lineTo(w / 2, 0);
|
|
55
|
-
roofShape.lineTo(0, roofH);
|
|
56
|
-
roofShape.lineTo(-w / 2, 0);
|
|
57
|
-
const roof = new THREE.ExtrudeGeometry(roofShape, { depth: d, bevelEnabled: false });
|
|
58
|
-
roof.translate(0, wallH, -d / 2);
|
|
59
|
-
const rVtx = roof.getAttribute('position').count;
|
|
60
|
-
roof.clearGroups();
|
|
61
|
-
roof.addGroup(0, rVtx, 3);
|
|
62
|
-
const merged = mergeGeometries([body, roof], true) ?? body;
|
|
63
|
-
body.dispose();
|
|
64
|
-
roof.dispose();
|
|
65
|
-
if (!merged.getAttribute('normal'))
|
|
66
|
-
merged.computeVertexNormals();
|
|
67
|
-
return merged;
|
|
68
|
-
}
|
|
69
|
-
export function createDormerArchShape(w, h, archHeight) {
|
|
70
|
-
const hw = w / 2;
|
|
71
|
-
const hh = h / 2;
|
|
72
|
-
const clampedArch = Math.min(Math.max(archHeight, 0.01), Math.max(h, 0.01));
|
|
73
|
-
const springY = hh - clampedArch;
|
|
74
|
-
const segments = 32;
|
|
75
|
-
const shape = new THREE.Shape();
|
|
76
|
-
shape.moveTo(-hw, -hh);
|
|
77
|
-
shape.lineTo(hw, -hh);
|
|
78
|
-
shape.lineTo(hw, springY);
|
|
79
|
-
for (let i = 1; i <= segments; i++) {
|
|
80
|
-
const x = hw + (-hw - hw) * (i / segments);
|
|
81
|
-
const t = Math.min(Math.abs(x) / hw, 1);
|
|
82
|
-
const y = springY + clampedArch * Math.sqrt(Math.max(1 - t * t, 0));
|
|
83
|
-
shape.lineTo(x, y);
|
|
84
|
-
}
|
|
85
|
-
shape.lineTo(-hw, -hh);
|
|
86
|
-
shape.closePath();
|
|
87
|
-
return shape;
|
|
88
|
-
}
|
|
89
|
-
export function normalizeDormerCornerRadii(radii, w, h) {
|
|
90
|
-
const r = radii.map((v) => Math.max(v, 0));
|
|
91
|
-
const scale = Math.min(1, Math.max(w, 0) / Math.max(r[0] + r[1], 1e-6), Math.max(w, 0) / Math.max(r[3] + r[2], 1e-6), Math.max(h, 0) / Math.max(r[0] + r[3], 1e-6), Math.max(h, 0) / Math.max(r[1] + r[2], 1e-6));
|
|
92
|
-
if (scale >= 1)
|
|
93
|
-
return r;
|
|
94
|
-
return r.map((v) => v * scale);
|
|
95
|
-
}
|
|
96
|
-
export function createDormerRoundedShape(w, h, radii) {
|
|
97
|
-
const hw = w / 2;
|
|
98
|
-
const hh = h / 2;
|
|
99
|
-
const [tl, tr, br, bl] = normalizeDormerCornerRadii(radii, w, h);
|
|
100
|
-
const shape = new THREE.Shape();
|
|
101
|
-
shape.moveTo(-hw + bl, -hh);
|
|
102
|
-
shape.lineTo(hw - br, -hh);
|
|
103
|
-
if (br > 0)
|
|
104
|
-
shape.absarc(hw - br, -hh + br, br, -Math.PI / 2, 0, false);
|
|
105
|
-
else
|
|
106
|
-
shape.lineTo(hw, -hh);
|
|
107
|
-
shape.lineTo(hw, hh - tr);
|
|
108
|
-
if (tr > 0)
|
|
109
|
-
shape.absarc(hw - tr, hh - tr, tr, 0, Math.PI / 2, false);
|
|
110
|
-
else
|
|
111
|
-
shape.lineTo(hw, hh);
|
|
112
|
-
shape.lineTo(-hw + tl, hh);
|
|
113
|
-
if (tl > 0)
|
|
114
|
-
shape.absarc(-hw + tl, hh - tl, tl, Math.PI / 2, Math.PI, false);
|
|
115
|
-
else
|
|
116
|
-
shape.lineTo(-hw, hh);
|
|
117
|
-
shape.lineTo(-hw, -hh + bl);
|
|
118
|
-
if (bl > 0)
|
|
119
|
-
shape.absarc(-hw + bl, -hh + bl, bl, Math.PI, (3 * Math.PI) / 2, false);
|
|
120
|
-
else
|
|
121
|
-
shape.lineTo(-hw, -hh);
|
|
122
|
-
shape.closePath();
|
|
123
|
-
return shape;
|
|
24
|
+
return buildDormerShellGeometry(dormer);
|
|
124
25
|
}
|
|
125
|
-
function
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
geo.translate(0, 0, -depth / 2);
|
|
134
|
-
return geo;
|
|
135
|
-
}
|
|
136
|
-
if (shape === 'rounded') {
|
|
137
|
-
const radii = resolveDormerRadii(dormer, w, h);
|
|
138
|
-
const s = createDormerRoundedShape(w, h, radii);
|
|
139
|
-
const geo = new THREE.ExtrudeGeometry(s, { depth, bevelEnabled: false, curveSegments: 24 });
|
|
140
|
-
geo.translate(0, 0, -depth / 2);
|
|
141
|
-
return geo;
|
|
142
|
-
}
|
|
143
|
-
return new THREE.BoxGeometry(w, h, depth);
|
|
144
|
-
}
|
|
145
|
-
// Exposure datum: a face shows its window when the window CENTER clears
|
|
146
|
-
// the host's structural surface line (≥ half the window visible).
|
|
147
|
-
// Gating on the window BOTTOM suppressed the default window on the
|
|
148
|
-
// default 40° roof (break-even ≈ 36.7° pitch) and across the whole
|
|
149
|
-
// lower-slope/overhang band. A partially buried window reads as a
|
|
150
|
-
// window meeting the roof line: the host shingle shell occludes the
|
|
151
|
-
// buried frame from outside (the dormer roof cut only clears the inner
|
|
152
|
-
// cavity, 5cm short of the gable face), and the glass panes span the
|
|
153
|
-
// full opening so the wall cut never reads as a see-through hole. The
|
|
154
|
-
// margin only absorbs float noise at the grazing boundary — suppress
|
|
155
|
-
// only when the window is truly unplaceable.
|
|
156
|
-
const WINDOW_CENTER_MIN_CLEARANCE = 0.01;
|
|
157
|
-
/**
|
|
158
|
-
* Which gable faces of a dormer have a visible window opening.
|
|
159
|
-
* "front" = mesh-local +Z, "back" = mesh-local −Z (after the +π/2 yaw
|
|
160
|
-
* bake for non-shed roofs).
|
|
161
|
-
*
|
|
162
|
-
* Each face centre is lifted into segment-local X *and* Z (the yaw
|
|
163
|
-
* matters, and on hip hosts the end slopes fall along X) and compared
|
|
164
|
-
* against the host's canonical per-type surface line via
|
|
165
|
-
* `getRoofSegmentSurfaceY`, which extrapolates past the structural
|
|
166
|
-
* eave instead of plateauing at the wall top — a face hanging in free
|
|
167
|
-
* air past the eave keeps dropping. Gates both the CSG window-cut
|
|
168
|
-
* decision (`generateDormerGeometry`) and the live render
|
|
169
|
-
* (window-assembly.tsx).
|
|
170
|
-
*/
|
|
171
|
-
export function getDormerExposedFaces(dormer, hostSegment) {
|
|
172
|
-
const halfDepth = dormer.depth / 2;
|
|
173
|
-
const dormerX = dormer.position[0] ?? 0;
|
|
174
|
-
const dormerY = dormer.position[1] ?? 0;
|
|
175
|
-
const dormerZ = dormer.position[2] ?? 0;
|
|
176
|
-
const rot = dormer.rotation ?? 0;
|
|
177
|
-
// Gable-face centres in segment-local X/Z (accounts for dormer yaw).
|
|
178
|
-
const faceDX = halfDepth * Math.sin(rot);
|
|
179
|
-
const faceDZ = halfDepth * Math.cos(rot);
|
|
180
|
-
// Window centre in segment-local Y. Mirrors `getDormerSkirtWindowDims`
|
|
181
|
-
// so both functions read the same window position: dormer-local Y=0
|
|
182
|
-
// sits at `dormer.position[1]` and the window centre sits in the
|
|
183
|
-
// skirt at -(skirtH / 2) + windowOffsetY.
|
|
184
|
-
const skirtH = dormerSkirtHeight(dormer);
|
|
185
|
-
const windowCenterSegY = dormerY - skirtH / 2 + (dormer.windowOffsetY ?? 0);
|
|
186
|
-
const clears = (faceX, faceZ) => windowCenterSegY - getRoofSegmentSurfaceY(hostSegment, faceX, faceZ) >
|
|
187
|
-
WINDOW_CENTER_MIN_CLEARANCE;
|
|
188
|
-
return {
|
|
189
|
-
front: clears(dormerX + faceDX, dormerZ + faceDZ),
|
|
190
|
-
back: clears(dormerX - faceDX, dormerZ - faceDZ),
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Computed dimensions for the window opening on a dormer's gable face.
|
|
195
|
-
* The skirt (the wall extension below the eave used for CSG-trim) is
|
|
196
|
-
* `DORMER_DROP_BELOW` tall, so the window sits within that band.
|
|
197
|
-
*/
|
|
198
|
-
export function getDormerSkirtWindowDims(dormer) {
|
|
199
|
-
const skirtH = dormerSkirtHeight(dormer);
|
|
200
|
-
const maxW = Math.max(dormer.width - 0.1, 0.1);
|
|
201
|
-
const maxH = Math.max(skirtH - 0.1, 0.1);
|
|
202
|
-
const width = Math.min(Math.max(dormer.windowWidth ?? 1.2, 0.1), maxW);
|
|
203
|
-
const height = Math.min(Math.max(dormer.windowHeight ?? 1.2, 0.1), maxH);
|
|
204
|
-
const offsetX = dormer.windowOffsetX ?? 0;
|
|
205
|
-
const offsetY = dormer.windowOffsetY ?? 0;
|
|
206
|
-
const centerY = -(skirtH / 2) + offsetY;
|
|
207
|
-
return { width, height, centerY, offsetX };
|
|
26
|
+
function createHostedWindowCutGeometry(window) {
|
|
27
|
+
const depth = 0.4;
|
|
28
|
+
return buildOpeningCutoutGeometry(window, {
|
|
29
|
+
left: -window.width / 2,
|
|
30
|
+
right: window.width / 2,
|
|
31
|
+
bottom: -window.height / 2,
|
|
32
|
+
top: window.height / 2,
|
|
33
|
+
}, depth, 0.05);
|
|
208
34
|
}
|
|
209
35
|
/**
|
|
210
36
|
* Build the trimmed dormer geometry hosted on a roof segment. The
|
|
@@ -213,9 +39,9 @@ export function getDormerSkirtWindowDims(dormer) {
|
|
|
213
39
|
* CSG-subtracted in dormer-mesh-local space. Window openings are then
|
|
214
40
|
* subtracted on each exposed gable face.
|
|
215
41
|
*/
|
|
216
|
-
export function generateDormerGeometry(dormer, hostSegment) {
|
|
42
|
+
export function generateDormerGeometry(dormer, hostSegment, hostedWindows = []) {
|
|
217
43
|
const isShed = dormer.roofType === 'shed';
|
|
218
|
-
const yawBake =
|
|
44
|
+
const yawBake = getDormerBodyYaw(dormer);
|
|
219
45
|
const segWidth = isShed ? dormer.width : dormer.depth;
|
|
220
46
|
const segDepth = isShed ? dormer.depth : dormer.width;
|
|
221
47
|
const skirt = dormerSkirtHeight(dormer);
|
|
@@ -228,7 +54,7 @@ export function generateDormerGeometry(dormer, hostSegment) {
|
|
|
228
54
|
type: 'roof-segment',
|
|
229
55
|
parentId: null,
|
|
230
56
|
visible: true,
|
|
231
|
-
metadata:
|
|
57
|
+
metadata: {},
|
|
232
58
|
children: [],
|
|
233
59
|
position: [0, 0, 0],
|
|
234
60
|
rotation: 0,
|
|
@@ -270,6 +96,9 @@ export function generateDormerGeometry(dormer, hostSegment) {
|
|
|
270
96
|
deckThickness: 0.04,
|
|
271
97
|
overhang: 0.08,
|
|
272
98
|
shingleThickness: 0.02,
|
|
99
|
+
managedByParent: false,
|
|
100
|
+
wallShell: 'auto',
|
|
101
|
+
shedInsetEndPanels: false,
|
|
273
102
|
};
|
|
274
103
|
const dormerBrushes = getRoofSegmentBrushes(virtualSegment);
|
|
275
104
|
if (!dormerBrushes) {
|
|
@@ -332,14 +161,14 @@ export function generateDormerGeometry(dormer, hostSegment) {
|
|
|
332
161
|
hostSolid = null;
|
|
333
162
|
dormerSolid = trimmed;
|
|
334
163
|
}
|
|
335
|
-
// Cut window openings
|
|
336
|
-
const
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
cutGeo.translate(
|
|
164
|
+
// Cut hosted window openings in dormer-local face coordinates.
|
|
165
|
+
const cutWindow = (window) => {
|
|
166
|
+
const face = window.dormerFace ?? 'front';
|
|
167
|
+
const frame = getDormerWallFaceFrame(dormer, face);
|
|
168
|
+
const center = dormerWallFacePointToDormer(dormer, face, window.position);
|
|
169
|
+
const cutGeo = createHostedWindowCutGeometry(window);
|
|
170
|
+
cutGeo.rotateY(frame.yaw);
|
|
171
|
+
cutGeo.translate(center[0], center[1], center[2]);
|
|
343
172
|
if (!cutGeo.getIndex()) {
|
|
344
173
|
const posCount = cutGeo.getAttribute('position').count;
|
|
345
174
|
const idx = new Uint32Array(posCount);
|
|
@@ -359,10 +188,8 @@ export function generateDormerGeometry(dormer, hostSegment) {
|
|
|
359
188
|
brush.geometry.dispose();
|
|
360
189
|
dormerSolid = result;
|
|
361
190
|
};
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
if (exposed.back)
|
|
365
|
-
cutFace(-1);
|
|
191
|
+
for (const window of hostedWindows)
|
|
192
|
+
cutWindow(window);
|
|
366
193
|
resultGeo = csgGeometry(dormerSolid);
|
|
367
194
|
const resultMaterials = csgMaterials(dormerSolid);
|
|
368
195
|
const matToIndex = new Map([
|
|
@@ -414,10 +241,10 @@ export function generateDormerGeometry(dormer, hostSegment) {
|
|
|
414
241
|
* Shapes per roof type:
|
|
415
242
|
* - **flat**: a plain box (top flush with the eave; the
|
|
416
243
|
* dormer body has no roof above wallH).
|
|
417
|
-
* - **shed**: trapezoid in YZ, extruded along X.
|
|
418
|
-
*
|
|
419
|
-
*
|
|
420
|
-
*
|
|
244
|
+
* - **shed**: trapezoid in YZ, extruded along X. The
|
|
245
|
+
* base shape is high at z=-d/2; the caller
|
|
246
|
+
* flips it when the configured high side is
|
|
247
|
+
* the front.
|
|
421
248
|
* - **gable / gambrel**: pentagon (rectangle + symmetric triangle)
|
|
422
249
|
* in XY, extruded along Z. Ridge runs
|
|
423
250
|
* along Z (mesh-Z = virtualSegment-X after
|
|
@@ -675,10 +502,12 @@ export function buildDormerRoofCut(dormer) {
|
|
|
675
502
|
// - hip / dutch / mansard: pyramid (narrows on all 4 sides)
|
|
676
503
|
// - gable / gambrel: pentagon (narrows along width axis)
|
|
677
504
|
const geo = buildDormerCutShape(dormer.roofType, innerW, innerD, skirt, wallH, roofH);
|
|
678
|
-
// Yaw in the geometry's own (un-translated) frame so the cut
|
|
679
|
-
//
|
|
680
|
-
|
|
681
|
-
|
|
505
|
+
// Yaw in the geometry's own (un-translated) frame so the cut follows
|
|
506
|
+
// both the shed pitch direction and the dormer's footprint rotation.
|
|
507
|
+
const shedDirectionYaw = dormer.roofType === 'shed' && dormer.shedHighSide === 'front' ? Math.PI : 0;
|
|
508
|
+
const cutYaw = shedDirectionYaw + dormer.rotation;
|
|
509
|
+
if (Math.abs(cutYaw) > 1e-4) {
|
|
510
|
+
geo.rotateY(cutYaw);
|
|
682
511
|
}
|
|
683
512
|
// Translate into segment-local. position[1] becomes the dormer's
|
|
684
513
|
// local Y = 0 (the wall foot / eave line); the shape's foot at
|
|
@@ -2,19 +2,11 @@ import { type NodeDefinition } from '@pascal-app/core';
|
|
|
2
2
|
import { DormerNode } from './schema';
|
|
3
3
|
/**
|
|
4
4
|
* Dormer — a small house-shaped protrusion sitting on top of a roof
|
|
5
|
-
* segment.
|
|
6
|
-
*
|
|
7
|
-
* a hosted child node — so `relations.hosts` stays unset.
|
|
5
|
+
* segment. Windows are hosted child nodes; the legacy window* fields remain
|
|
6
|
+
* in the schema only so scene migration can preserve older dormers.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
* the
|
|
11
|
-
* full window-opening field set). Geometry renders a simple house
|
|
12
|
-
* silhouette (box body + triangular gable roof) for all `roofType`
|
|
13
|
-
* variants — the archive's variant-specific dormer roof shapes,
|
|
14
|
-
* window opening + frame, sill, and the CSG trim where the dormer
|
|
15
|
-
* meets the host roof are deferred. Per-surface paints (`topMaterial`,
|
|
16
|
-
* `sideMaterial`, `wallMaterial`) resolve via the shared helper from
|
|
17
|
-
* core but only roof / wall surfaces are emitted by the stub geometry.
|
|
8
|
+
* The renderer cuts each hosted window from the dormer shell and mounts
|
|
9
|
+
* the regular WindowNode renderer in the selected wall-face frame.
|
|
18
10
|
*/
|
|
19
11
|
export declare const dormerDefinition: NodeDefinition<typeof DormerNode>;
|
|
20
12
|
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/dormer/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAA;AAKzB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAqPrC;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAAC,OAAO,UAAU,CA8E9D,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DormerNode as DormerNodeSchema, } from '@pascal-app/core';
|
|
2
|
-
import { buildDormerRoofCut
|
|
2
|
+
import { buildDormerRoofCut } from './csg-geometry';
|
|
3
3
|
import { buildDormerFloorplan } from './floorplan';
|
|
4
4
|
import { dormerPaint } from './paint';
|
|
5
5
|
import { dormerParametrics } from './parametrics';
|
|
@@ -16,21 +16,6 @@ const MIN_ROOF_HEIGHT = 0;
|
|
|
16
16
|
const MAX_ROOF_HEIGHT = 2;
|
|
17
17
|
const MIN_SKIRT = 0.2;
|
|
18
18
|
const MAX_SKIRT = 6;
|
|
19
|
-
// Window-handle constants. The window opening is parametric geometry
|
|
20
|
-
// on the dormer's +Z gable face; chevrons sit just outside its rim
|
|
21
|
-
// with a small forward Z offset so they pop in front of the wall plane
|
|
22
|
-
// instead of z-fighting with the frame bars.
|
|
23
|
-
const WINDOW_SIDE_HANDLE_OFFSET = 0.15;
|
|
24
|
-
const WINDOW_HEIGHT_HANDLE_OFFSET = 0.15;
|
|
25
|
-
const WINDOW_FACE_Z_OFFSET = 0.05;
|
|
26
|
-
// The four window-edge arrows latch behind a cube at the window center;
|
|
27
|
-
// they stay hidden until the user clicks that cube to open the group.
|
|
28
|
-
const WINDOW_LATCH_GROUP = 'dormer-window';
|
|
29
|
-
// Lower clamp for window dims matches the geometry's internal clamp
|
|
30
|
-
// in `getDormerSkirtWindowDims` (0.1m). Upper clamps depend on the
|
|
31
|
-
// dormer dimensions and are resolved per-handle via the function form
|
|
32
|
-
// of `max`.
|
|
33
|
-
const MIN_WINDOW_DIM = 0.1;
|
|
34
19
|
// Clamp used for handle Y placement so side chevrons stay reachable on
|
|
35
20
|
// dormers whose wall is flat (`height ≈ 0`). The dormer body is
|
|
36
21
|
// `height + roofHeight` tall; if that collapses too, the side arrows
|
|
@@ -73,8 +58,7 @@ function dormerWidthHandle(side) {
|
|
|
73
58
|
// arrows become visible during selection without us reaching for
|
|
74
59
|
// `portal: 'grandparent'` — which trips the same "Color target has
|
|
75
60
|
// no corresponding fragment stage output" WebGPU pipeline error
|
|
76
|
-
// chimney already documents
|
|
77
|
-
// window-assembly's transparent glazing meshes).
|
|
61
|
+
// chimney already documents.
|
|
78
62
|
min: MIN_DIM,
|
|
79
63
|
currentValue: (n) => n.width,
|
|
80
64
|
apply: (initial, newWidth) => {
|
|
@@ -234,158 +218,6 @@ function dormerRotateHandle() {
|
|
|
234
218
|
},
|
|
235
219
|
};
|
|
236
220
|
}
|
|
237
|
-
// Window-center Y in dormer-local frame. The schema stores
|
|
238
|
-
// `windowOffsetY` as the bottom-relative offset of the window center
|
|
239
|
-
// from the bottom of the skirt; the geometry then maps it to
|
|
240
|
-
// `centerY = -(skirtH / 2) + offsetY`. We mirror that here so handle
|
|
241
|
-
// placements line up with what the inspector + window-assembly use.
|
|
242
|
-
function getWindowCenterY(n) {
|
|
243
|
-
return -(n.wallSkirtHeight / 2) + n.windowOffsetY;
|
|
244
|
-
}
|
|
245
|
-
// Sign of the dormer-local Z direction where the visible window face
|
|
246
|
-
// sits. The dormer renders the window on both +Z (front) and -Z (back)
|
|
247
|
-
// gable faces, but only whichever face actually pokes above the host
|
|
248
|
-
// roof slope is exposed — `getDormerExposedFaces` is the source of
|
|
249
|
-
// truth there. The in-world handles need to attach to that exposed
|
|
250
|
-
// face so the user is editing the window they can see; as the dormer
|
|
251
|
-
// drags across the ridge, the exposed face flips and the chevrons
|
|
252
|
-
// follow.
|
|
253
|
-
//
|
|
254
|
-
// Preference order when both faces are exposed (e.g. a tall gable that
|
|
255
|
-
// pokes above the roof on both ends): keep handles on +Z so the
|
|
256
|
-
// affordance stays put visually instead of flipping when the slope
|
|
257
|
-
// math grazes the threshold from the other side. When neither face is
|
|
258
|
-
// exposed (degenerate — wall buried on both sides), fall back to +Z so
|
|
259
|
-
// the placement still produces a valid vector; the chevrons are just
|
|
260
|
-
// not useful there.
|
|
261
|
-
function getExposedFaceZSign(n, sceneApi) {
|
|
262
|
-
if (!n.roofSegmentId)
|
|
263
|
-
return 1;
|
|
264
|
-
const segment = sceneApi.get(n.roofSegmentId);
|
|
265
|
-
if (!segment)
|
|
266
|
-
return 1;
|
|
267
|
-
const exposed = getDormerExposedFaces(n, segment);
|
|
268
|
-
if (exposed.front)
|
|
269
|
-
return 1;
|
|
270
|
-
if (exposed.back)
|
|
271
|
-
return -1;
|
|
272
|
-
return 1;
|
|
273
|
-
}
|
|
274
|
-
// Window-width chevron on the +X (right) or -X (left) edge of the
|
|
275
|
-
// opening. Asymmetric: dragging one arrow grows the window outward
|
|
276
|
-
// from its own edge while the opposite edge stays put. The framework
|
|
277
|
-
// only knows about the scalar `windowWidth`; we re-emit `windowOffsetX`
|
|
278
|
-
// in `apply` so the anchored edge stays at the same X in dormer-local.
|
|
279
|
-
// Placement sits on the dormer's +Z gable face, where the window opens.
|
|
280
|
-
function dormerWindowWidthHandle(side) {
|
|
281
|
-
const sign = side === 'right' ? 1 : -1;
|
|
282
|
-
return {
|
|
283
|
-
kind: 'linear-resize',
|
|
284
|
-
axis: 'x',
|
|
285
|
-
// Stand the blade up into the gable face so it reads flat-on like the
|
|
286
|
-
// top/bottom window-height arrows instead of edge-on.
|
|
287
|
-
faceNormal: true,
|
|
288
|
-
// Hidden until the user clicks the window-center latch cube.
|
|
289
|
-
latchGroup: WINDOW_LATCH_GROUP,
|
|
290
|
-
anchor: side === 'right' ? 'min' : 'max',
|
|
291
|
-
min: MIN_WINDOW_DIM,
|
|
292
|
-
// Cap at the dormer's window field — keep a 0.1m gap on each side
|
|
293
|
-
// to match the geometry's interior clamp (`maxW = width - 0.1`).
|
|
294
|
-
max: (n) => Math.max(MIN_WINDOW_DIM, n.width - 0.1),
|
|
295
|
-
currentValue: (n) => n.windowWidth,
|
|
296
|
-
apply: (initial, newWidth) => {
|
|
297
|
-
// Anchored edge stays fixed: anchor X = initial.windowOffsetX -
|
|
298
|
-
// sign * initial.windowWidth/2. New center = anchor + sign *
|
|
299
|
-
// newWidth/2 → new windowOffsetX.
|
|
300
|
-
const anchorX = initial.windowOffsetX - sign * (initial.windowWidth / 2);
|
|
301
|
-
const newOffsetX = anchorX + sign * (newWidth / 2);
|
|
302
|
-
return {
|
|
303
|
-
windowWidth: newWidth,
|
|
304
|
-
windowOffsetX: newOffsetX,
|
|
305
|
-
};
|
|
306
|
-
},
|
|
307
|
-
placement: {
|
|
308
|
-
position: (n, sceneApi) => {
|
|
309
|
-
const faceSign = getExposedFaceZSign(n, sceneApi);
|
|
310
|
-
return [
|
|
311
|
-
n.windowOffsetX + sign * (n.windowWidth / 2 + WINDOW_SIDE_HANDLE_OFFSET),
|
|
312
|
-
getWindowCenterY(n),
|
|
313
|
-
faceSign * (n.depth / 2 + WINDOW_FACE_Z_OFFSET),
|
|
314
|
-
];
|
|
315
|
-
},
|
|
316
|
-
// Left chevron points -X; right points +X. LinearArrow doesn't
|
|
317
|
-
// auto-orient axis 'x' — descriptor handles the flip.
|
|
318
|
-
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
319
|
-
},
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
// Window-height chevron on the +Y (top) or -Y (bottom) edge of the
|
|
323
|
-
// opening. Same asymmetric pattern as the width handle, projected onto
|
|
324
|
-
// the Y axis. The schema stores the window's vertical position as
|
|
325
|
-
// `windowOffsetY` (distance from the BOTTOM of the skirt to the window
|
|
326
|
-
// CENTER), not as a centerY in dormer-local — so `apply` translates
|
|
327
|
-
// back through that mapping when it re-emits the offset.
|
|
328
|
-
function dormerWindowHeightHandle(side) {
|
|
329
|
-
const sign = side === 'top' ? 1 : -1;
|
|
330
|
-
return {
|
|
331
|
-
kind: 'linear-resize',
|
|
332
|
-
axis: 'y',
|
|
333
|
-
// Hidden until the user clicks the window-center latch cube.
|
|
334
|
-
latchGroup: WINDOW_LATCH_GROUP,
|
|
335
|
-
// 'min' = bottom edge anchored (top arrow grows the top edge up).
|
|
336
|
-
// 'max' = top edge anchored (bottom arrow drops the bottom edge).
|
|
337
|
-
anchor: side === 'top' ? 'min' : 'max',
|
|
338
|
-
min: MIN_WINDOW_DIM,
|
|
339
|
-
// Cap at the skirt with a 0.1m interior margin — matches
|
|
340
|
-
// `maxH = skirtH - 0.1` from `getDormerSkirtWindowDims`.
|
|
341
|
-
max: (n) => Math.max(MIN_WINDOW_DIM, n.wallSkirtHeight - 0.1),
|
|
342
|
-
currentValue: (n) => n.windowHeight,
|
|
343
|
-
apply: (initial, newHeight) => {
|
|
344
|
-
// Compute the anchored edge in dormer-local Y, derive the new
|
|
345
|
-
// centerY, then map back to schema-form `windowOffsetY`.
|
|
346
|
-
const initialCenterY = -(initial.wallSkirtHeight / 2) + initial.windowOffsetY;
|
|
347
|
-
const anchorY = initialCenterY - sign * (initial.windowHeight / 2);
|
|
348
|
-
const newCenterY = anchorY + sign * (newHeight / 2);
|
|
349
|
-
const newOffsetY = newCenterY + initial.wallSkirtHeight / 2;
|
|
350
|
-
return {
|
|
351
|
-
windowHeight: newHeight,
|
|
352
|
-
windowOffsetY: newOffsetY,
|
|
353
|
-
};
|
|
354
|
-
},
|
|
355
|
-
placement: {
|
|
356
|
-
position: (n, sceneApi) => {
|
|
357
|
-
const faceSign = getExposedFaceZSign(n, sceneApi);
|
|
358
|
-
return [
|
|
359
|
-
n.windowOffsetX,
|
|
360
|
-
getWindowCenterY(n) + sign * (n.windowHeight / 2 + WINDOW_HEIGHT_HANDLE_OFFSET),
|
|
361
|
-
faceSign * (n.depth / 2 + WINDOW_FACE_Z_OFFSET),
|
|
362
|
-
];
|
|
363
|
-
},
|
|
364
|
-
},
|
|
365
|
-
};
|
|
366
|
-
}
|
|
367
|
-
// Window-center latch cube. Sits at the window center on the exposed
|
|
368
|
-
// gable face; clicking it reveals / hides the four window edge arrows
|
|
369
|
-
// (width L/R + height top/bottom) tagged with `WINDOW_LATCH_GROUP`.
|
|
370
|
-
// Mirrors the duct-fitting selection cube but driven by the shared
|
|
371
|
-
// latch descriptor so the dense window cluster stays collapsed behind
|
|
372
|
-
// one grip until the user opts in.
|
|
373
|
-
function dormerWindowLatchHandle() {
|
|
374
|
-
return {
|
|
375
|
-
kind: 'latch',
|
|
376
|
-
group: WINDOW_LATCH_GROUP,
|
|
377
|
-
placement: {
|
|
378
|
-
position: (n, sceneApi) => {
|
|
379
|
-
const faceSign = getExposedFaceZSign(n, sceneApi);
|
|
380
|
-
return [
|
|
381
|
-
n.windowOffsetX,
|
|
382
|
-
getWindowCenterY(n),
|
|
383
|
-
faceSign * (n.depth / 2 + WINDOW_FACE_Z_OFFSET),
|
|
384
|
-
];
|
|
385
|
-
},
|
|
386
|
-
},
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
221
|
const dormerHandles = [
|
|
390
222
|
dormerWidthHandle('right'),
|
|
391
223
|
dormerWidthHandle('left'),
|
|
@@ -393,11 +225,6 @@ const dormerHandles = [
|
|
|
393
225
|
dormerDepthHandle('back'),
|
|
394
226
|
dormerWallHeightHandle(),
|
|
395
227
|
dormerRotateHandle(),
|
|
396
|
-
dormerWindowLatchHandle(),
|
|
397
|
-
dormerWindowWidthHandle('right'),
|
|
398
|
-
dormerWindowWidthHandle('left'),
|
|
399
|
-
dormerWindowHeightHandle('top'),
|
|
400
|
-
dormerWindowHeightHandle('bottom'),
|
|
401
228
|
// The wall-skirt (downward chevron), roof-height (peak chevron), and
|
|
402
229
|
// the asymmetric front/back depth split stay out for now. Re-adding
|
|
403
230
|
// any of them previously fired the "Color target has no
|
|
@@ -406,30 +233,22 @@ const dormerHandles = [
|
|
|
406
233
|
// extras — only reproducible while `portal: 'grandparent'` was set,
|
|
407
234
|
// which we no longer rely on (RoofEditSystem reveals the wrapper
|
|
408
235
|
// instead). The shapes themselves are valid; if the count budget
|
|
409
|
-
// turns out to also be sensitive without grandparent portal,
|
|
410
|
-
// the
|
|
236
|
+
// turns out to also be sensitive without grandparent portal, keep
|
|
237
|
+
// the current compact set.
|
|
411
238
|
// dormerWallSkirtHandle(),
|
|
412
239
|
// dormerRoofHeightHandle(),
|
|
413
240
|
];
|
|
414
241
|
/**
|
|
415
242
|
* Dormer — a small house-shaped protrusion sitting on top of a roof
|
|
416
|
-
* segment.
|
|
417
|
-
*
|
|
418
|
-
* a hosted child node — so `relations.hosts` stays unset.
|
|
243
|
+
* segment. Windows are hosted child nodes; the legacy window* fields remain
|
|
244
|
+
* in the schema only so scene migration can preserve older dormers.
|
|
419
245
|
*
|
|
420
|
-
*
|
|
421
|
-
* the
|
|
422
|
-
* full window-opening field set). Geometry renders a simple house
|
|
423
|
-
* silhouette (box body + triangular gable roof) for all `roofType`
|
|
424
|
-
* variants — the archive's variant-specific dormer roof shapes,
|
|
425
|
-
* window opening + frame, sill, and the CSG trim where the dormer
|
|
426
|
-
* meets the host roof are deferred. Per-surface paints (`topMaterial`,
|
|
427
|
-
* `sideMaterial`, `wallMaterial`) resolve via the shared helper from
|
|
428
|
-
* core but only roof / wall surfaces are emitted by the stub geometry.
|
|
246
|
+
* The renderer cuts each hosted window from the dormer shell and mounts
|
|
247
|
+
* the regular WindowNode renderer in the selected wall-face frame.
|
|
429
248
|
*/
|
|
430
249
|
export const dormerDefinition = {
|
|
431
250
|
kind: 'dormer',
|
|
432
|
-
schemaVersion:
|
|
251
|
+
schemaVersion: 4,
|
|
433
252
|
schema: DormerNode,
|
|
434
253
|
category: 'structure',
|
|
435
254
|
surfaceRole: 'roof',
|
|
@@ -443,7 +262,9 @@ export const dormerDefinition = {
|
|
|
443
262
|
},
|
|
444
263
|
capabilities: {
|
|
445
264
|
selectable: { hitVolume: 'bbox' },
|
|
446
|
-
|
|
265
|
+
// Dormers own their WindowNode children. Duplicate the complete subtree
|
|
266
|
+
// so the copied dormer never aliases windows from the source dormer.
|
|
267
|
+
duplicable: { subtree: true },
|
|
447
268
|
deletable: true,
|
|
448
269
|
// Mounts on a roof segment via `roofSegmentId`. Dirty marks
|
|
449
270
|
// cascade to the host segment's parent roof so its merged shell
|
|
@@ -458,6 +279,10 @@ export const dormerDefinition = {
|
|
|
458
279
|
// arm.
|
|
459
280
|
paint: dormerPaint,
|
|
460
281
|
},
|
|
282
|
+
relations: {
|
|
283
|
+
hosts: ['window'],
|
|
284
|
+
cascadeDelete: 'descendants',
|
|
285
|
+
},
|
|
461
286
|
affordanceTools: {
|
|
462
287
|
// Drag-to-place tool for duplicate + move. Reuses the placement
|
|
463
288
|
// ghost preview but seeds it from the moving (cloned) node so the
|
|
@@ -482,11 +307,11 @@ export const dormerDefinition = {
|
|
|
482
307
|
presentation: {
|
|
483
308
|
label: 'Dormer',
|
|
484
309
|
description: 'House-shaped protrusion on a roof segment.',
|
|
485
|
-
icon: { kind: 'url', src: '/icons/
|
|
310
|
+
icon: { kind: 'url', src: '/icons/dormer.webp' },
|
|
486
311
|
paletteSection: 'structure',
|
|
487
312
|
paletteOrder: 125,
|
|
488
313
|
},
|
|
489
314
|
mcp: {
|
|
490
|
-
description: 'A dormer on a roof segment.
|
|
315
|
+
description: 'A dormer on a roof segment. Its windows are hosted WindowNode children.',
|
|
491
316
|
},
|
|
492
317
|
};
|
|
@@ -15,9 +15,9 @@ import type { DormerNode, FloorplanGeometry, GeometryContext } from '@pascal-app
|
|
|
15
15
|
*
|
|
16
16
|
* Per-type roof linework follows the dormer's own roof geometry
|
|
17
17
|
* (`buildDormerCutShape` in csg-geometry.ts): gable ridge runs along Z,
|
|
18
|
-
* shed
|
|
19
|
-
* longer axis. Gambrel falls back to gable; dutch/mansard to
|
|
20
|
-
* same fallbacks the 3D cut uses.
|
|
18
|
+
* shed arrows follow the configured high-to-low direction, and hip ridges
|
|
19
|
+
* run along the longer axis. Gambrel falls back to gable; dutch/mansard to
|
|
20
|
+
* hip — the same fallbacks the 3D cut uses.
|
|
21
21
|
*/
|
|
22
22
|
export declare function buildDormerFloorplan(node: DormerNode, ctx: GeometryContext): FloorplanGeometry | null;
|
|
23
23
|
//# sourceMappingURL=floorplan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/dormer/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAEjB,eAAe,EAGhB,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/dormer/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,UAAU,EACV,iBAAiB,EAEjB,eAAe,EAGhB,MAAM,kBAAkB,CAAA;AAEzB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAuK1B"}
|