@pascal-app/nodes 1.0.0-beta.5 → 1.0.1
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 +4 -4
- 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/appliance-layout.d.ts +26 -0
- package/dist/cabinet/appliance-layout.d.ts.map +1 -0
- package/dist/cabinet/appliance-layout.js +52 -0
- 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/countertop-layout.d.ts +173 -0
- package/dist/cabinet/countertop-layout.d.ts.map +1 -0
- package/dist/cabinet/countertop-layout.js +80 -0
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +414 -61
- package/dist/cabinet/floorplan-move.d.ts.map +1 -1
- package/dist/cabinet/floorplan-move.js +91 -22
- package/dist/cabinet/geometry/cooktop.d.ts.map +1 -1
- package/dist/cabinet/geometry/cooktop.js +2 -2
- 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 +28 -71
- package/dist/cabinet/geometry/sink.d.ts +2 -12
- package/dist/cabinet/geometry/sink.d.ts.map +1 -1
- package/dist/cabinet/geometry/sink.js +8 -39
- package/dist/cabinet/geometry.d.ts.map +1 -1
- package/dist/cabinet/geometry.js +63 -1
- package/dist/cabinet/hosted-resize.d.ts +8 -0
- package/dist/cabinet/hosted-resize.d.ts.map +1 -0
- package/dist/cabinet/hosted-resize.js +158 -0
- 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 +98 -5
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +430 -37
- package/dist/cabinet/run-ops.d.ts +204 -12
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-ops.js +523 -36
- 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 +294 -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/surfaces.d.ts +4 -0
- package/dist/cabinet/surfaces.d.ts.map +1 -0
- package/dist/cabinet/surfaces.js +101 -0
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +615 -91
- package/dist/cabinet/tree-structure.d.ts.map +1 -1
- package/dist/cabinet/tree-structure.js +10 -9
- 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 +8 -2
- package/dist/ceiling/floorplan-affordances.d.ts +12 -12
- 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 +9 -9
- 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 +12 -12
- 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-position-section.js +2 -2
- 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 +49 -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 +38 -0
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +306 -677
- 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/inspector-editors.js +1 -1
- 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/imported-mesh/definition.d.ts +5 -0
- package/dist/imported-mesh/definition.d.ts.map +1 -0
- package/dist/imported-mesh/definition.js +38 -0
- package/dist/imported-mesh/floorplan.d.ts +4 -0
- package/dist/imported-mesh/floorplan.d.ts.map +1 -0
- package/dist/imported-mesh/floorplan.js +34 -0
- package/dist/imported-mesh/geometry.d.ts +5 -0
- package/dist/imported-mesh/geometry.d.ts.map +1 -0
- package/dist/imported-mesh/geometry.js +34 -0
- package/dist/imported-mesh/index.d.ts +4 -0
- package/dist/imported-mesh/index.d.ts.map +1 -0
- package/dist/imported-mesh/index.js +3 -0
- package/dist/imported-mesh/schema.d.ts +2 -0
- package/dist/imported-mesh/schema.d.ts.map +1 -0
- package/dist/imported-mesh/schema.js +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +10 -2
- package/dist/item/floorplan-move.d.ts +9 -1
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +74 -2
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +33 -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 +15 -3
- package/dist/item/panel.js +1 -1
- 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 +49 -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/procedural-item/definition.d.ts +4 -0
- package/dist/procedural-item/definition.d.ts.map +1 -0
- package/dist/procedural-item/definition.js +254 -0
- package/dist/procedural-item/geometry.d.ts +31 -0
- package/dist/procedural-item/geometry.d.ts.map +1 -0
- package/dist/procedural-item/geometry.js +88 -0
- package/dist/procedural-item/index.d.ts +3 -0
- package/dist/procedural-item/index.d.ts.map +1 -0
- package/dist/procedural-item/index.js +2 -0
- package/dist/procedural-item/move-session.d.ts +15 -0
- package/dist/procedural-item/move-session.d.ts.map +1 -0
- package/dist/procedural-item/move-session.js +197 -0
- package/dist/procedural-item/move-tool.d.ts +5 -0
- package/dist/procedural-item/move-tool.d.ts.map +1 -0
- package/dist/procedural-item/move-tool.js +193 -0
- package/dist/procedural-item/renderer.d.ts +5 -0
- package/dist/procedural-item/renderer.d.ts.map +1 -0
- package/dist/procedural-item/renderer.js +66 -0
- package/dist/ridge-vent/definition.js +1 -1
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +4 -4
- 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 +26 -25
- 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 +12 -0
- package/dist/shared/automatic-run-end-cap.d.ts.map +1 -0
- package/dist/shared/automatic-run-end-cap.js +169 -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 +117 -0
- package/dist/shared/distribution-run-tool.d.ts.map +1 -0
- package/dist/shared/distribution-run-tool.js +986 -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/panel-fields.d.ts +15 -0
- package/dist/shared/panel-fields.d.ts.map +1 -0
- package/dist/shared/panel-fields.js +31 -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/resting-surface-plan.d.ts +3 -0
- package/dist/shared/resting-surface-plan.d.ts.map +1 -0
- package/dist/shared/resting-surface-plan.js +28 -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/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +2 -1
- package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
- package/dist/shelf/floorplan-affordances.js +5 -3
- package/dist/shelf/floorplan-move.d.ts.map +1 -1
- package/dist/shelf/floorplan-move.js +3 -2
- package/dist/shelf/geometry.d.ts.map +1 -1
- package/dist/shelf/geometry.js +2 -10
- 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 +6 -6
- 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 +2 -2
- package/dist/solar-panel/parametrics.js +2 -2
- package/dist/spawn/panel.js +1 -1
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +23 -16
- 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 +45 -6
- 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/unit/definition.d.ts +10 -0
- package/dist/unit/definition.d.ts.map +1 -0
- package/dist/unit/definition.js +38 -0
- package/dist/unit/index.d.ts +2 -0
- package/dist/unit/index.d.ts.map +1 -0
- package/dist/unit/index.js +1 -0
- package/dist/unit/parametrics.d.ts +3 -0
- package/dist/unit/parametrics.d.ts.map +1 -0
- package/dist/unit/parametrics.js +4 -0
- package/dist/unit/schema.d.ts +2 -0
- package/dist/unit/schema.d.ts.map +1 -0
- package/dist/unit/schema.js +1 -0
- package/dist/unit/unit-panel.d.ts +5 -0
- package/dist/unit/unit-panel.d.ts.map +1 -0
- package/dist/unit/unit-panel.js +61 -0
- 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 +8 -6
- 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/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +7 -1
- package/dist/zone/floorplan-affordances.d.ts +12 -12
- package/dist/zone/floorplan.d.ts +1 -3
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +43 -28
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +33 -29
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +20 -6
- package/dist/zone/unit-membership.d.ts +12 -0
- package/dist/zone/unit-membership.d.ts.map +1 -0
- package/dist/zone/unit-membership.js +22 -0
- package/package.json +16 -8
- 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
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { type AnyNode, type AnyNodeId, LeanToExtensionNode, type WallNode } from '@pascal-app/core';
|
|
2
|
+
import { type LeanToArcFrame } from './arc';
|
|
3
|
+
export declare const MIN_LEAN_TO_POST_HEIGHT = 0.2;
|
|
4
|
+
export declare const MIN_LEAN_TO_WALL_LENGTH = 0.6;
|
|
5
|
+
export declare const LEAN_TO_EXTENSION_GEOMETRY_REVISION = 8;
|
|
6
|
+
export declare const LEAN_TO_EDGE_SNAP_TOLERANCE = 0.25;
|
|
7
|
+
export declare const LEAN_TO_HEIGHT_SNAP_TOLERANCE = 0.15;
|
|
8
|
+
export declare function isDualSlopeLeanToCanopy(form: LeanToExtensionNode['canopyForm']): boolean;
|
|
9
|
+
export type LeanToLayout = {
|
|
10
|
+
canopyForm: LeanToExtensionNode['canopyForm'];
|
|
11
|
+
span: number;
|
|
12
|
+
projection: number;
|
|
13
|
+
roofRun: number;
|
|
14
|
+
roofWidth: number;
|
|
15
|
+
roofCenterX: number;
|
|
16
|
+
slopeLength: number;
|
|
17
|
+
rafterSlopeLength: number;
|
|
18
|
+
pitchRadians: number;
|
|
19
|
+
effectivePitchDegrees: number;
|
|
20
|
+
highEdgeHeight: number;
|
|
21
|
+
lowEdgeHeight: number;
|
|
22
|
+
eaveEdgeHeight: number;
|
|
23
|
+
roofCenterY: number;
|
|
24
|
+
roofCenterZ: number;
|
|
25
|
+
rafterCenterY: number;
|
|
26
|
+
rafterCenterZ: number;
|
|
27
|
+
beamSpan: number;
|
|
28
|
+
beamCenterY: number;
|
|
29
|
+
beamZ: number;
|
|
30
|
+
oppositeBeamZ: number;
|
|
31
|
+
postHeight: number;
|
|
32
|
+
postXs: number[];
|
|
33
|
+
rafterXs: number[];
|
|
34
|
+
postFrames: LeanToArcFrame[];
|
|
35
|
+
rafterFrames: LeanToArcFrame[];
|
|
36
|
+
};
|
|
37
|
+
export declare function leanToLowEdgeHeight(node: Pick<LeanToExtensionNode, 'highEdgeHeight' | 'pitch' | 'projection'>): number;
|
|
38
|
+
export declare function resolveLeanToWallSurfaceHit(wall: WallNode, localPosition: readonly [number, number, number], normal: readonly [number, number, number] | undefined): {
|
|
39
|
+
localX: number;
|
|
40
|
+
side: 'front' | 'back';
|
|
41
|
+
} | null;
|
|
42
|
+
export declare function applyLeanToCurveProjectionLimit(node: LeanToExtensionNode): LeanToExtensionNode;
|
|
43
|
+
export declare function resolveLeanToLayout(node: LeanToExtensionNode): LeanToLayout;
|
|
44
|
+
/**
|
|
45
|
+
* Plan-space center of the rendered lean-to footprint, measured from the node
|
|
46
|
+
* origin. Placement tools use this shared offset so the pointer marks the
|
|
47
|
+
* center of the whole footprint rather than the high-edge origin.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveLeanToPlanCenter(node: LeanToExtensionNode): [number, number];
|
|
50
|
+
export declare function resolveLeanToSpanArc(wall: WallNode, node: Pick<LeanToExtensionNode, 'position' | 'rotation'>): {
|
|
51
|
+
centerZ: number;
|
|
52
|
+
radius: number;
|
|
53
|
+
} | null;
|
|
54
|
+
export declare function resolveLeanToMoveCenterX(node: LeanToExtensionNode, wall: WallNode, rawLocalX: number, snapStep?: number, edgeSnapTargets?: readonly LeanToEdgeSnapTarget[]): number;
|
|
55
|
+
export type LeanToMoveProposal = {
|
|
56
|
+
centerX: number;
|
|
57
|
+
highEdgeHeight: number;
|
|
58
|
+
lowEdgeHeight: number;
|
|
59
|
+
};
|
|
60
|
+
export declare function resolveLeanToMoveProposal({ node, wall, rawLocalX, rawHighEdgeHeight, snapStep, edgeSnapTargets, }: {
|
|
61
|
+
node: LeanToExtensionNode;
|
|
62
|
+
wall: WallNode;
|
|
63
|
+
rawLocalX: number;
|
|
64
|
+
rawHighEdgeHeight: number;
|
|
65
|
+
snapStep?: number;
|
|
66
|
+
edgeSnapTargets?: readonly LeanToEdgeSnapTarget[];
|
|
67
|
+
}): LeanToMoveProposal;
|
|
68
|
+
export type LeanToEdgeSnapTarget = {
|
|
69
|
+
leftEdgeX: number;
|
|
70
|
+
rightEdgeX: number;
|
|
71
|
+
roofEdgeY: number;
|
|
72
|
+
pitch?: number;
|
|
73
|
+
nodeId?: AnyNodeId;
|
|
74
|
+
anchor?: readonly [number, number];
|
|
75
|
+
};
|
|
76
|
+
export type LeanToHeightSnapMatch = {
|
|
77
|
+
highEdgeHeight: number;
|
|
78
|
+
target: LeanToEdgeSnapTarget;
|
|
79
|
+
};
|
|
80
|
+
export type LeanToSpanResizeSide = 'left' | 'right';
|
|
81
|
+
export type LeanToSpanResizeProposal = {
|
|
82
|
+
span: number;
|
|
83
|
+
position: [number, number, number];
|
|
84
|
+
highEdgeHeight: number;
|
|
85
|
+
lowEdgeHeight: number;
|
|
86
|
+
pitch: number;
|
|
87
|
+
target: LeanToEdgeSnapTarget | null;
|
|
88
|
+
};
|
|
89
|
+
export declare function resolveLeanToSpanResizeProposal({ node, wall, rawSpan, side, edgeSnapTargets, tolerance, }: {
|
|
90
|
+
node: LeanToExtensionNode;
|
|
91
|
+
wall: WallNode;
|
|
92
|
+
rawSpan: number;
|
|
93
|
+
side: LeanToSpanResizeSide;
|
|
94
|
+
edgeSnapTargets?: readonly LeanToEdgeSnapTarget[];
|
|
95
|
+
tolerance?: number;
|
|
96
|
+
}): LeanToSpanResizeProposal;
|
|
97
|
+
export declare function resolveLeanToHighEdgeHeightSnap(node: LeanToExtensionNode, rawHighEdgeHeight: number, targets: readonly LeanToEdgeSnapTarget[], tolerance?: number): LeanToHeightSnapMatch | null;
|
|
98
|
+
export declare function resolveLeanToEdgeSnapTargets(node: LeanToExtensionNode, wall: WallNode, nodes: Record<AnyNodeId, AnyNode>): LeanToEdgeSnapTarget[];
|
|
99
|
+
export declare function resolveLeanToWallPlacement(wall: WallNode, rawLocalX: number, side: 'front' | 'back', overrides?: Partial<LeanToExtensionNode>): LeanToExtensionNode | null;
|
|
100
|
+
export declare function leanToWallLocalPose(wall: WallNode, node: LeanToExtensionNode, baseY: number): {
|
|
101
|
+
position: [number, number, number];
|
|
102
|
+
rotationY: number;
|
|
103
|
+
};
|
|
104
|
+
export declare function resolveLeanToParentPose(wall: WallNode, node: LeanToExtensionNode): {
|
|
105
|
+
position: [number, number, number];
|
|
106
|
+
rotationY: number;
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/lean-to-extension/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { getWallArcData, getWallChordFrame, getWallCurveFrameAt, getWallCurveLength, isCurvedWall, LeanToExtensionNode, } from '@pascal-app/core';
|
|
2
|
+
import { EAVE_TUCK_INWARD } from '../gutter/eave-snap';
|
|
3
|
+
import { resolveWallAttachmentAtPlanPoint } from '../shared/wall-attach-target';
|
|
4
|
+
import { leanToArcFrameAtLocalX } from './arc';
|
|
5
|
+
import { isClosedLoopLeanTo } from './conical-host';
|
|
6
|
+
export const MIN_LEAN_TO_POST_HEIGHT = 0.2;
|
|
7
|
+
export const MIN_LEAN_TO_WALL_LENGTH = 0.6;
|
|
8
|
+
export const LEAN_TO_EXTENSION_GEOMETRY_REVISION = 8;
|
|
9
|
+
export const LEAN_TO_EDGE_SNAP_TOLERANCE = 0.25;
|
|
10
|
+
export const LEAN_TO_HEIGHT_SNAP_TOLERANCE = 0.15;
|
|
11
|
+
const CURVED_INNER_EDGE_CLEARANCE = 0.15;
|
|
12
|
+
export function isDualSlopeLeanToCanopy(form) {
|
|
13
|
+
return form === 'gable' || form === 'butterfly';
|
|
14
|
+
}
|
|
15
|
+
export function leanToLowEdgeHeight(node) {
|
|
16
|
+
return node.highEdgeHeight - node.projection * Math.tan((node.pitch * Math.PI) / 180);
|
|
17
|
+
}
|
|
18
|
+
export function resolveLeanToWallSurfaceHit(wall, localPosition, normal) {
|
|
19
|
+
if (!normal)
|
|
20
|
+
return null;
|
|
21
|
+
if (!isCurvedWall(wall)) {
|
|
22
|
+
if (Math.abs(normal[2]) <= 0.7)
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
else if (Math.abs(normal[1]) > 0.7) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const chord = getWallChordFrame(wall);
|
|
29
|
+
if (chord.length <= 1e-6)
|
|
30
|
+
return null;
|
|
31
|
+
const point = [
|
|
32
|
+
chord.start.x + chord.tangent.x * localPosition[0] + chord.normal.x * localPosition[2],
|
|
33
|
+
chord.start.y + chord.tangent.y * localPosition[0] + chord.normal.y * localPosition[2],
|
|
34
|
+
];
|
|
35
|
+
const attachment = resolveWallAttachmentAtPlanPoint(wall, point);
|
|
36
|
+
if (!attachment)
|
|
37
|
+
return null;
|
|
38
|
+
return {
|
|
39
|
+
localX: attachment.localX,
|
|
40
|
+
side: attachment.side,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function applyLeanToCurveProjectionLimit(node) {
|
|
44
|
+
const centerZ = node.spanArcCenterZ;
|
|
45
|
+
if (centerZ == null || centerZ <= 0)
|
|
46
|
+
return node;
|
|
47
|
+
const maximumProjection = centerZ - Math.max(0, node.lowOverhang) - CURVED_INNER_EDGE_CLEARANCE;
|
|
48
|
+
if (maximumProjection < 0.5 || node.projection <= maximumProjection)
|
|
49
|
+
return node;
|
|
50
|
+
const projection = maximumProjection;
|
|
51
|
+
return {
|
|
52
|
+
...node,
|
|
53
|
+
projection,
|
|
54
|
+
lowEdgeHeight: leanToLowEdgeHeight({ ...node, projection }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function resolveLeanToLayout(node) {
|
|
58
|
+
const canopyForm = node.hostKind === 'freestanding' ? node.canopyForm : 'mono';
|
|
59
|
+
const butterfly = canopyForm === 'butterfly';
|
|
60
|
+
const dualSlope = isDualSlopeLeanToCanopy(canopyForm);
|
|
61
|
+
const span = Math.max(0.5, node.span);
|
|
62
|
+
const projection = Math.max(0.5, node.projection);
|
|
63
|
+
const highOverhang = dualSlope ? 0 : Math.max(0, node.highOverhang);
|
|
64
|
+
const lowOverhang = Math.max(0, node.lowOverhang);
|
|
65
|
+
const roofRun = dualSlope ? projection + lowOverhang : highOverhang + projection + lowOverhang;
|
|
66
|
+
const roofWidth = span + Math.max(0, node.leftOverhang) + Math.max(0, node.rightOverhang);
|
|
67
|
+
const roofCenterX = (Math.max(0, node.rightOverhang) - Math.max(0, node.leftOverhang)) / 2;
|
|
68
|
+
const requestedPitch = (Math.max(1, Math.min(45, node.pitch)) * Math.PI) / 180;
|
|
69
|
+
const roofBuildUp = node.roofThickness / Math.max(0.1, Math.cos(requestedPitch)) +
|
|
70
|
+
(node.shingleThickness ?? 0.025) * Math.cos(requestedPitch);
|
|
71
|
+
const minimumLowEdge = MIN_LEAN_TO_POST_HEIGHT + node.beamHeight + node.rafterHeight + roofBuildUp;
|
|
72
|
+
const maximumDrop = Math.max(0, node.highEdgeHeight - minimumLowEdge);
|
|
73
|
+
const maximumPitch = Math.atan2(maximumDrop, projection);
|
|
74
|
+
const pitchRadians = Math.min(requestedPitch, maximumPitch);
|
|
75
|
+
const effectivePitchDegrees = (pitchRadians * 180) / Math.PI;
|
|
76
|
+
const lowEdgeHeight = node.highEdgeHeight - projection * Math.tan(pitchRadians);
|
|
77
|
+
const eaveEdgeHeight = butterfly
|
|
78
|
+
? lowEdgeHeight
|
|
79
|
+
: node.highEdgeHeight - (projection + lowOverhang) * Math.tan(pitchRadians);
|
|
80
|
+
const roofCenterZ = (projection + lowOverhang - highOverhang) / 2;
|
|
81
|
+
const roofCenterY = butterfly
|
|
82
|
+
? lowEdgeHeight + roofCenterZ * Math.tan(pitchRadians)
|
|
83
|
+
: node.highEdgeHeight - roofCenterZ * Math.tan(pitchRadians);
|
|
84
|
+
const effectiveRoofBuildUp = node.roofThickness / Math.max(0.1, Math.cos(pitchRadians)) +
|
|
85
|
+
(node.shingleThickness ?? 0.025) * Math.cos(pitchRadians);
|
|
86
|
+
const gutterBackRun = projection + Math.max(0, lowOverhang - EAVE_TUCK_INWARD);
|
|
87
|
+
const rafterCornerProjection = (node.rafterHeight / 2) * Math.sin(pitchRadians);
|
|
88
|
+
const rafterRun = Math.max(gutterBackRun - rafterCornerProjection, projection + node.beamWidth / 2);
|
|
89
|
+
const rafterCenterZ = rafterRun / 2;
|
|
90
|
+
const rafterCenterY = (butterfly
|
|
91
|
+
? lowEdgeHeight + rafterCenterZ * Math.tan(pitchRadians)
|
|
92
|
+
: node.highEdgeHeight - rafterCenterZ * Math.tan(pitchRadians)) -
|
|
93
|
+
effectiveRoofBuildUp -
|
|
94
|
+
node.rafterHeight / 2;
|
|
95
|
+
const beamZ = Math.max(0, projection - node.lowBeamInset);
|
|
96
|
+
const beamTop = (butterfly
|
|
97
|
+
? lowEdgeHeight + beamZ * Math.tan(pitchRadians)
|
|
98
|
+
: node.highEdgeHeight - beamZ * Math.tan(pitchRadians)) -
|
|
99
|
+
effectiveRoofBuildUp -
|
|
100
|
+
node.rafterHeight;
|
|
101
|
+
const beamCenterY = beamTop - node.beamHeight / 2;
|
|
102
|
+
const postHeight = Math.max(MIN_LEAN_TO_POST_HEIGHT, beamCenterY - node.beamHeight / 2);
|
|
103
|
+
const usablePostSpan = Math.max(0.1, span - 2 * Math.max(0, node.postInset));
|
|
104
|
+
const closedLoop = isClosedLoopLeanTo(node);
|
|
105
|
+
const postCount = node.postLayoutMode === 'target-spacing'
|
|
106
|
+
? Math.max(closedLoop ? 3 : 2, Math.min(20, Math.ceil(usablePostSpan / node.postSpacing) + (closedLoop ? 0 : 1)))
|
|
107
|
+
: node.postCount;
|
|
108
|
+
const postXs = closedLoop
|
|
109
|
+
? evenlySpacedLoopXs(span, postCount)
|
|
110
|
+
: evenlySpacedXs(span, postCount, node.postInset);
|
|
111
|
+
const beamSpan = closedLoop
|
|
112
|
+
? span
|
|
113
|
+
: Math.max(node.postWidth, (postXs.at(-1) ?? 0) - (postXs[0] ?? 0) + node.postWidth);
|
|
114
|
+
const usableRafterSpan = Math.max(0.1, span - 2 * Math.max(0, node.rafterEndInset));
|
|
115
|
+
const rafterCount = Math.max(closedLoop ? 3 : 2, Math.ceil(usableRafterSpan / node.rafterSpacing) + (closedLoop ? 0 : 1));
|
|
116
|
+
const rafterXs = closedLoop
|
|
117
|
+
? evenlySpacedLoopXs(span, rafterCount)
|
|
118
|
+
: evenlySpacedXs(span, rafterCount, node.rafterEndInset);
|
|
119
|
+
return {
|
|
120
|
+
canopyForm,
|
|
121
|
+
span,
|
|
122
|
+
projection,
|
|
123
|
+
roofRun,
|
|
124
|
+
roofWidth,
|
|
125
|
+
roofCenterX,
|
|
126
|
+
slopeLength: roofRun / Math.max(0.001, Math.cos(pitchRadians)),
|
|
127
|
+
rafterSlopeLength: rafterRun / Math.max(0.001, Math.cos(pitchRadians)),
|
|
128
|
+
pitchRadians,
|
|
129
|
+
effectivePitchDegrees,
|
|
130
|
+
highEdgeHeight: node.highEdgeHeight,
|
|
131
|
+
lowEdgeHeight,
|
|
132
|
+
eaveEdgeHeight,
|
|
133
|
+
roofCenterY,
|
|
134
|
+
roofCenterZ,
|
|
135
|
+
rafterCenterY,
|
|
136
|
+
rafterCenterZ,
|
|
137
|
+
beamSpan,
|
|
138
|
+
beamCenterY,
|
|
139
|
+
beamZ,
|
|
140
|
+
oppositeBeamZ: -beamZ,
|
|
141
|
+
postHeight,
|
|
142
|
+
postXs,
|
|
143
|
+
rafterXs,
|
|
144
|
+
postFrames: postXs.map((x) => leanToArcFrameAtLocalX(node, x)),
|
|
145
|
+
rafterFrames: rafterXs.map((x) => leanToArcFrameAtLocalX(node, x)),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Plan-space center of the rendered lean-to footprint, measured from the node
|
|
150
|
+
* origin. Placement tools use this shared offset so the pointer marks the
|
|
151
|
+
* center of the whole footprint rather than the high-edge origin.
|
|
152
|
+
*/
|
|
153
|
+
export function resolveLeanToPlanCenter(node) {
|
|
154
|
+
const layout = resolveLeanToLayout(node);
|
|
155
|
+
return [layout.roofCenterX, isDualSlopeLeanToCanopy(layout.canopyForm) ? 0 : layout.roofCenterZ];
|
|
156
|
+
}
|
|
157
|
+
// The host wall's true circular arc expressed in the lean-to's local frame. The
|
|
158
|
+
// anchor frame is sampled at the lean-to's along-wall position (the span center),
|
|
159
|
+
// so the arc center lies on the local Z axis (local X = 0): `centerZ` is its local
|
|
160
|
+
// Z, `radius` is the wall's true radius. Returns null for a straight wall.
|
|
161
|
+
export function resolveLeanToSpanArc(wall, node) {
|
|
162
|
+
if (!isCurvedWall(wall))
|
|
163
|
+
return null;
|
|
164
|
+
const arc = getWallArcData(wall);
|
|
165
|
+
if (!arc)
|
|
166
|
+
return null;
|
|
167
|
+
const arcLength = getWallCurveLength(wall);
|
|
168
|
+
if (arcLength <= 1e-6)
|
|
169
|
+
return null;
|
|
170
|
+
const t = Math.max(0, Math.min(1, node.position[0] / arcLength));
|
|
171
|
+
const frame = getWallCurveFrameAt(wall, t);
|
|
172
|
+
// Signed radial distance from the anchor wall point to the arc center along the
|
|
173
|
+
// outward normal (= ±radius; the tangent component is zero by construction).
|
|
174
|
+
const d = (arc.center.x - frame.point.x) * frame.normal.x +
|
|
175
|
+
(arc.center.y - frame.point.y) * frame.normal.y;
|
|
176
|
+
const sideSign = Math.cos(node.rotation[1]) >= 0 ? 1 : -1;
|
|
177
|
+
return { centerZ: sideSign * (d - node.position[2]), radius: arc.radius };
|
|
178
|
+
}
|
|
179
|
+
export function resolveLeanToMoveCenterX(node, wall, rawLocalX, snapStep = 0, edgeSnapTargets = []) {
|
|
180
|
+
return resolveLeanToMoveProposal({
|
|
181
|
+
node,
|
|
182
|
+
wall,
|
|
183
|
+
rawLocalX,
|
|
184
|
+
rawHighEdgeHeight: node.highEdgeHeight,
|
|
185
|
+
snapStep,
|
|
186
|
+
edgeSnapTargets,
|
|
187
|
+
}).centerX;
|
|
188
|
+
}
|
|
189
|
+
export function resolveLeanToMoveProposal({ node, wall, rawLocalX, rawHighEdgeHeight, snapStep = 0, edgeSnapTargets = [], }) {
|
|
190
|
+
const wallLength = getWallCurveLength(wall);
|
|
191
|
+
const snapped = snapStep > 0 ? Math.round(rawLocalX / snapStep) * snapStep : rawLocalX;
|
|
192
|
+
const min = node.span / 2 + Math.max(0, node.leftOverhang);
|
|
193
|
+
const max = wallLength - node.span / 2 - Math.max(0, node.rightOverhang);
|
|
194
|
+
const rawHeightDelta = rawHighEdgeHeight - node.highEdgeHeight;
|
|
195
|
+
if (max < min) {
|
|
196
|
+
return {
|
|
197
|
+
centerX: wallLength / 2,
|
|
198
|
+
highEdgeHeight: rawHighEdgeHeight,
|
|
199
|
+
lowEdgeHeight: node.lowEdgeHeight + rawHeightDelta,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const clamped = Math.max(min, Math.min(max, snapped));
|
|
203
|
+
const edgeSnap = snapLeanToMoveCenterToEdges(node, clamped, min, max, edgeSnapTargets);
|
|
204
|
+
const highEdgeHeight = edgeSnap ? edgeSnap.target.roofEdgeY - node.position[1] : rawHighEdgeHeight;
|
|
205
|
+
return {
|
|
206
|
+
centerX: edgeSnap?.centerX ?? clamped,
|
|
207
|
+
highEdgeHeight,
|
|
208
|
+
lowEdgeHeight: node.lowEdgeHeight + highEdgeHeight - node.highEdgeHeight,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function leanToEdgeSnapTarget(node) {
|
|
212
|
+
return {
|
|
213
|
+
leftEdgeX: node.position[0] - node.span / 2 - Math.max(0, node.leftOverhang),
|
|
214
|
+
rightEdgeX: node.position[0] + node.span / 2 + Math.max(0, node.rightOverhang),
|
|
215
|
+
roofEdgeY: node.position[1] + node.highEdgeHeight,
|
|
216
|
+
pitch: node.pitch,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export function resolveLeanToSpanResizeProposal({ node, wall, rawSpan, side, edgeSnapTargets = [], tolerance = LEAN_TO_EDGE_SNAP_TOLERANCE, }) {
|
|
220
|
+
const wallLength = getWallCurveLength(wall);
|
|
221
|
+
const visualSign = side === 'right' ? 1 : -1;
|
|
222
|
+
const wallSign = Math.cos(node.rotation[1]) >= 0 ? visualSign : -visualSign;
|
|
223
|
+
const fixedStructuralEdge = node.position[0] - wallSign * (node.span / 2);
|
|
224
|
+
const draggedOverhang = Math.max(0, wallSign > 0 ? node.rightOverhang : node.leftOverhang);
|
|
225
|
+
const maximumSpan = Math.max(0.5, wallSign > 0
|
|
226
|
+
? wallLength - fixedStructuralEdge - draggedOverhang
|
|
227
|
+
: fixedStructuralEdge - draggedOverhang);
|
|
228
|
+
const boundedSpan = Math.max(0.5, Math.min(maximumSpan, rawSpan));
|
|
229
|
+
const centerX = fixedStructuralEdge + wallSign * (boundedSpan / 2);
|
|
230
|
+
const draggedRoofEdge = centerX + wallSign * (boundedSpan / 2 + draggedOverhang);
|
|
231
|
+
const wallEdgeX = wallSign > 0 ? wallLength : 0;
|
|
232
|
+
let best = {
|
|
233
|
+
edgeX: wallEdgeX,
|
|
234
|
+
distance: Math.abs(draggedRoofEdge - wallEdgeX),
|
|
235
|
+
target: null,
|
|
236
|
+
};
|
|
237
|
+
for (const target of edgeSnapTargets) {
|
|
238
|
+
const edgeX = wallSign > 0 ? target.leftEdgeX : target.rightEdgeX;
|
|
239
|
+
const distance = Math.abs(draggedRoofEdge - edgeX);
|
|
240
|
+
if (distance < best.distance || (Math.abs(distance - best.distance) <= 1e-9 && !best.target)) {
|
|
241
|
+
best = { edgeX, distance, target };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
const snapped = best.distance <= tolerance;
|
|
245
|
+
const span = snapped
|
|
246
|
+
? Math.max(0.5, Math.min(maximumSpan, boundedSpan + wallSign * (best.edgeX - draggedRoofEdge)))
|
|
247
|
+
: boundedSpan;
|
|
248
|
+
const position = [
|
|
249
|
+
fixedStructuralEdge + wallSign * (span / 2),
|
|
250
|
+
node.position[1],
|
|
251
|
+
node.position[2],
|
|
252
|
+
];
|
|
253
|
+
const target = snapped ? best.target : null;
|
|
254
|
+
const pitch = target?.pitch ?? node.pitch;
|
|
255
|
+
const highEdgeHeight = target ? target.roofEdgeY - node.position[1] : node.highEdgeHeight;
|
|
256
|
+
return {
|
|
257
|
+
span,
|
|
258
|
+
position,
|
|
259
|
+
highEdgeHeight,
|
|
260
|
+
lowEdgeHeight: leanToLowEdgeHeight({
|
|
261
|
+
highEdgeHeight,
|
|
262
|
+
pitch,
|
|
263
|
+
projection: node.projection,
|
|
264
|
+
}),
|
|
265
|
+
pitch,
|
|
266
|
+
target,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
function snapLeanToMoveCenterToEdges(node, centerX, min, max, targets) {
|
|
270
|
+
const movingLeft = centerX - node.span / 2 - Math.max(0, node.leftOverhang);
|
|
271
|
+
const movingRight = centerX + node.span / 2 + Math.max(0, node.rightOverhang);
|
|
272
|
+
let best = null;
|
|
273
|
+
for (const target of targets) {
|
|
274
|
+
const leftToRight = Math.abs(movingLeft - target.rightEdgeX);
|
|
275
|
+
if (leftToRight <= LEAN_TO_EDGE_SNAP_TOLERANCE) {
|
|
276
|
+
const snappedCenter = target.rightEdgeX + node.span / 2 + Math.max(0, node.leftOverhang);
|
|
277
|
+
if (snappedCenter >= min && snappedCenter <= max) {
|
|
278
|
+
best =
|
|
279
|
+
!best || leftToRight < best.distance
|
|
280
|
+
? { centerX: snappedCenter, distance: leftToRight, target }
|
|
281
|
+
: best;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const rightToLeft = Math.abs(movingRight - target.leftEdgeX);
|
|
285
|
+
if (rightToLeft <= LEAN_TO_EDGE_SNAP_TOLERANCE) {
|
|
286
|
+
const snappedCenter = target.leftEdgeX - node.span / 2 - Math.max(0, node.rightOverhang);
|
|
287
|
+
if (snappedCenter >= min && snappedCenter <= max) {
|
|
288
|
+
best =
|
|
289
|
+
!best || rightToLeft < best.distance
|
|
290
|
+
? { centerX: snappedCenter, distance: rightToLeft, target }
|
|
291
|
+
: best;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return best ? { centerX: best.centerX, target: best.target } : null;
|
|
296
|
+
}
|
|
297
|
+
export function resolveLeanToHighEdgeHeightSnap(node, rawHighEdgeHeight, targets, tolerance = LEAN_TO_HEIGHT_SNAP_TOLERANCE) {
|
|
298
|
+
const movingLeft = node.position[0] - node.span / 2 - Math.max(0, node.leftOverhang);
|
|
299
|
+
const movingRight = node.position[0] + node.span / 2 + Math.max(0, node.rightOverhang);
|
|
300
|
+
let best = null;
|
|
301
|
+
for (const target of targets) {
|
|
302
|
+
const edgeDistance = Math.min(Math.abs(movingLeft - target.rightEdgeX), Math.abs(movingRight - target.leftEdgeX));
|
|
303
|
+
if (edgeDistance > LEAN_TO_EDGE_SNAP_TOLERANCE)
|
|
304
|
+
continue;
|
|
305
|
+
const targetHeight = target.roofEdgeY - node.position[1];
|
|
306
|
+
const heightDelta = Math.abs(targetHeight - rawHighEdgeHeight);
|
|
307
|
+
if (heightDelta > tolerance)
|
|
308
|
+
continue;
|
|
309
|
+
if (!best ||
|
|
310
|
+
heightDelta < best.heightDelta - 1e-9 ||
|
|
311
|
+
(Math.abs(heightDelta - best.heightDelta) <= 1e-9 && edgeDistance < best.edgeDistance)) {
|
|
312
|
+
best = { heightDelta, edgeDistance, target };
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return best
|
|
316
|
+
? {
|
|
317
|
+
highEdgeHeight: best.target.roofEdgeY - node.position[1],
|
|
318
|
+
target: best.target,
|
|
319
|
+
}
|
|
320
|
+
: null;
|
|
321
|
+
}
|
|
322
|
+
export function resolveLeanToEdgeSnapTargets(node, wall, nodes) {
|
|
323
|
+
const wallLength = getWallCurveLength(wall);
|
|
324
|
+
if (wallLength <= 1e-6)
|
|
325
|
+
return [];
|
|
326
|
+
const wallChordLength = Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
|
|
327
|
+
if (wallChordLength <= 1e-6)
|
|
328
|
+
return [];
|
|
329
|
+
const wallDx = (wall.end[0] - wall.start[0]) / wallChordLength;
|
|
330
|
+
const wallDz = (wall.end[1] - wall.start[1]) / wallChordLength;
|
|
331
|
+
const sameSideSign = Math.sign(Math.cos(node.rotation[1])) || 1;
|
|
332
|
+
const targets = [];
|
|
333
|
+
for (const candidate of Object.values(nodes)) {
|
|
334
|
+
if (candidate.type !== 'lean-to-extension' || candidate.id === node.id)
|
|
335
|
+
continue;
|
|
336
|
+
const host = candidate.parentId ? nodes[candidate.parentId] : undefined;
|
|
337
|
+
if (host?.type !== 'wall')
|
|
338
|
+
continue;
|
|
339
|
+
if (host.parentId !== wall.parentId)
|
|
340
|
+
continue;
|
|
341
|
+
const hostLength = getWallCurveLength(host);
|
|
342
|
+
if (hostLength <= 1e-6)
|
|
343
|
+
continue;
|
|
344
|
+
const hostChordLength = Math.hypot(host.end[0] - host.start[0], host.end[1] - host.start[1]);
|
|
345
|
+
if (hostChordLength <= 1e-6)
|
|
346
|
+
continue;
|
|
347
|
+
const hostDx = (host.end[0] - host.start[0]) / hostChordLength;
|
|
348
|
+
const hostDz = (host.end[1] - host.start[1]) / hostChordLength;
|
|
349
|
+
const parallel = wallDx * hostDx + wallDz * hostDz;
|
|
350
|
+
const candidateTarget = leanToEdgeSnapTarget(candidate);
|
|
351
|
+
const candidatePose = leanToWallLocalPose(host, candidate, 0);
|
|
352
|
+
if (parallel < 0.999) {
|
|
353
|
+
const wallEnds = [
|
|
354
|
+
{ point: wall.start, x: 0, t: 0 },
|
|
355
|
+
{ point: wall.end, x: wallLength, t: 1 },
|
|
356
|
+
];
|
|
357
|
+
const hostEnds = [
|
|
358
|
+
{ point: host.start, x: 0, t: 0 },
|
|
359
|
+
{ point: host.end, x: hostLength, t: 1 },
|
|
360
|
+
];
|
|
361
|
+
for (const wallEnd of wallEnds) {
|
|
362
|
+
for (const hostEnd of hostEnds) {
|
|
363
|
+
if (Math.hypot(wallEnd.point[0] - hostEnd.point[0], wallEnd.point[1] - hostEnd.point[1]) >
|
|
364
|
+
LEAN_TO_EDGE_SNAP_TOLERANCE) {
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const candidateReachesEnd = Math.min(Math.abs(candidateTarget.leftEdgeX - hostEnd.x), Math.abs(candidateTarget.rightEdgeX - hostEnd.x)) <= LEAN_TO_EDGE_SNAP_TOLERANCE;
|
|
368
|
+
if (!candidateReachesEnd)
|
|
369
|
+
continue;
|
|
370
|
+
const wallFrame = getWallCurveFrameAt(wall, wallEnd.t);
|
|
371
|
+
const hostFrame = getWallCurveFrameAt(host, hostEnd.t);
|
|
372
|
+
const candidateSideSign = Math.sign(Math.cos(candidate.rotation[1])) || 1;
|
|
373
|
+
const outwardDot = wallFrame.normal.x * sameSideSign * hostFrame.normal.x * candidateSideSign +
|
|
374
|
+
wallFrame.normal.y * sameSideSign * hostFrame.normal.y * candidateSideSign;
|
|
375
|
+
if (outwardDot < -0.25)
|
|
376
|
+
continue;
|
|
377
|
+
targets.push({
|
|
378
|
+
leftEdgeX: wallEnd.x,
|
|
379
|
+
rightEdgeX: wallEnd.x,
|
|
380
|
+
roofEdgeY: candidateTarget.roofEdgeY,
|
|
381
|
+
pitch: candidate.pitch,
|
|
382
|
+
nodeId: candidate.id,
|
|
383
|
+
anchor: [candidatePose.position[0], candidatePose.position[2]],
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
if ((Math.sign(Math.cos(candidate.rotation[1])) || 1) !== sameSideSign)
|
|
390
|
+
continue;
|
|
391
|
+
const offsetFromWall = (host.start[0] - wall.start[0]) * -wallDz + (host.start[1] - wall.start[1]) * wallDx;
|
|
392
|
+
if (Math.abs(offsetFromWall) > (wall.thickness ?? 0.1) + LEAN_TO_EDGE_SNAP_TOLERANCE) {
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
const hostStartX = (host.start[0] - wall.start[0]) * wallDx + (host.start[1] - wall.start[1]) * wallDz;
|
|
396
|
+
targets.push({
|
|
397
|
+
leftEdgeX: hostStartX + candidateTarget.leftEdgeX,
|
|
398
|
+
rightEdgeX: hostStartX + candidateTarget.rightEdgeX,
|
|
399
|
+
roofEdgeY: candidateTarget.roofEdgeY,
|
|
400
|
+
pitch: candidate.pitch,
|
|
401
|
+
nodeId: candidate.id,
|
|
402
|
+
anchor: [candidatePose.position[0], candidatePose.position[2]],
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
return targets;
|
|
406
|
+
}
|
|
407
|
+
function evenlySpacedXs(span, count, requestedInset) {
|
|
408
|
+
const resolvedCount = Math.max(2, Math.round(count));
|
|
409
|
+
const inset = Math.min(Math.max(0, requestedInset), Math.max(0, span / 2 - 0.05));
|
|
410
|
+
const first = -span / 2 + inset;
|
|
411
|
+
const last = span / 2 - inset;
|
|
412
|
+
const step = (last - first) / (resolvedCount - 1);
|
|
413
|
+
return Array.from({ length: resolvedCount }, (_, index) => first + index * step);
|
|
414
|
+
}
|
|
415
|
+
function evenlySpacedLoopXs(span, count) {
|
|
416
|
+
const resolvedCount = Math.max(3, Math.round(count));
|
|
417
|
+
const step = span / resolvedCount;
|
|
418
|
+
return Array.from({ length: resolvedCount }, (_, index) => -span / 2 + index * step);
|
|
419
|
+
}
|
|
420
|
+
export function resolveLeanToWallPlacement(wall, rawLocalX, side, overrides = {}) {
|
|
421
|
+
const wallLength = getWallCurveLength(wall);
|
|
422
|
+
if (wallLength < MIN_LEAN_TO_WALL_LENGTH)
|
|
423
|
+
return null;
|
|
424
|
+
const requestedSpan = typeof overrides.span === 'number' ? overrides.span : 4;
|
|
425
|
+
const span = Math.max(0.5, Math.min(requestedSpan, wallLength - 0.1));
|
|
426
|
+
const localX = Math.max(span / 2, Math.min(wallLength - span / 2, rawLocalX));
|
|
427
|
+
const thickness = wall.thickness ?? 0.1;
|
|
428
|
+
const positionZ = side === 'front' ? thickness / 2 : -thickness / 2;
|
|
429
|
+
const rotationY = side === 'front' ? 0 : Math.PI;
|
|
430
|
+
const parsed = LeanToExtensionNode.parse({
|
|
431
|
+
...overrides,
|
|
432
|
+
name: overrides.name ?? 'Lean-to Extension',
|
|
433
|
+
parentId: wall.id,
|
|
434
|
+
position: [localX, 0, positionZ],
|
|
435
|
+
rotation: [0, rotationY, 0],
|
|
436
|
+
span,
|
|
437
|
+
highEdgeHeight: overrides.highEdgeHeight ?? Math.max(1.2, (wall.height ?? 2.4) - 0.1),
|
|
438
|
+
});
|
|
439
|
+
const spanArc = resolveLeanToSpanArc(wall, parsed);
|
|
440
|
+
return applyLeanToCurveProjectionLimit({
|
|
441
|
+
...parsed,
|
|
442
|
+
spanArcCenterZ: spanArc?.centerZ,
|
|
443
|
+
spanArcRadius: spanArc?.radius,
|
|
444
|
+
lowEdgeHeight: leanToLowEdgeHeight(parsed),
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
export function leanToWallLocalPose(wall, node, baseY) {
|
|
448
|
+
const [localX, localY, localZ] = node.position;
|
|
449
|
+
const arcLength = getWallCurveLength(wall);
|
|
450
|
+
const t = arcLength > 1e-6 ? Math.max(0, Math.min(1, localX / arcLength)) : 0;
|
|
451
|
+
const frame = getWallCurveFrameAt(wall, t);
|
|
452
|
+
const angle = Math.atan2(frame.tangent.y, frame.tangent.x);
|
|
453
|
+
return {
|
|
454
|
+
position: [
|
|
455
|
+
frame.point.x + frame.normal.x * localZ,
|
|
456
|
+
baseY + localY,
|
|
457
|
+
frame.point.y + frame.normal.y * localZ,
|
|
458
|
+
],
|
|
459
|
+
rotationY: -angle + node.rotation[1],
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
// The wall mesh is rooted at the chord start and rotated to the chord tangent.
|
|
463
|
+
// Curved hosted nodes still store their X coordinate as centerline arc length,
|
|
464
|
+
// so their committed renderer must resolve the actual curve point and tangent,
|
|
465
|
+
// then express that world pose back in the parent wall mesh's local frame.
|
|
466
|
+
export function resolveLeanToParentPose(wall, node) {
|
|
467
|
+
const worldPose = leanToWallLocalPose(wall, node, 0);
|
|
468
|
+
const wallAngle = Math.atan2(wall.end[1] - wall.start[1], wall.end[0] - wall.start[0]);
|
|
469
|
+
const cos = Math.cos(wallAngle);
|
|
470
|
+
const sin = Math.sin(wallAngle);
|
|
471
|
+
const dx = worldPose.position[0] - wall.start[0];
|
|
472
|
+
const dz = worldPose.position[2] - wall.start[1];
|
|
473
|
+
return {
|
|
474
|
+
position: [dx * cos + dz * sin, node.position[1], -dx * sin + dz * cos],
|
|
475
|
+
rotationY: worldPose.rotationY + wallAngle,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { AnyNode, AnyNodeId, LeanToExtensionNode, SceneApi } from '@pascal-app/core';
|
|
2
|
+
export declare function leanToManagedPreviewOverrides(node: LeanToExtensionNode, patch: Partial<LeanToExtensionNode>, sceneApi: SceneApi): ReadonlyArray<readonly [AnyNodeId, Partial<AnyNode>]>;
|
|
3
|
+
//# sourceMappingURL=managed-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-preview.d.ts","sourceRoot":"","sources":["../../src/lean-to-extension/managed-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAsBzF,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,mBAAmB,EACzB,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,EACnC,QAAQ,EAAE,QAAQ,GACjB,aAAa,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAmHvD"}
|