@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
package/dist/door/panel.js
CHANGED
|
@@ -478,19 +478,19 @@ export default function DoorPanel() {
|
|
|
478
478
|
? 'border-orange-400/60 bg-orange-400/10 text-foreground'
|
|
479
479
|
: 'border-border/50 bg-[#2C2C2E] text-muted-foreground hover:bg-[#3e3e3e] hover:text-foreground', !option.available &&
|
|
480
480
|
'cursor-not-allowed opacity-45 hover:bg-[#2C2C2E] hover:text-muted-foreground'), disabled: !option.available, onClick: () => handleUpdate(getDoorTypeUpdates(option.value)), type: "button", children: [_jsx(DoorOpen, { className: "h-4 w-4 shrink-0" }), _jsx("span", { className: "truncate font-medium", children: option.label })] }, option.value));
|
|
481
|
-
}) }))] }), _jsx(PanelSection, { title: "Documentation", children: _jsx(OpeningDocumentationFields, { constructionType: node.constructionType, dimensionReference: node.dimensionReference, finishOpeningHeight: node.finishOpeningHeight, finishOpeningWidth: node.finishOpeningWidth, mark: node.mark, masonryOpeningHeight: node.masonryOpeningHeight, masonryOpeningWidth: node.masonryOpeningWidth, onChange: handleUpdate, roughOpeningHeight: node.roughOpeningHeight, roughOpeningWidth: node.roughOpeningWidth }) }), _jsxs(PanelSection, { title: "Position", children: [_jsx(SliderControl, { label: _jsxs(_Fragment, { children: ["X", _jsx("sub", { className: "ml-[1px] text-[11px] opacity-70", children: "wall" })] }), max: 10, min: -10, onChange: (v) => handleUpdate({ position: [v, node.position[1], node.position[2]] }), precision: 2, step: 0.1, unit: "m", value:
|
|
481
|
+
}) }))] }), _jsx(PanelSection, { title: "Documentation", children: _jsx(OpeningDocumentationFields, { constructionType: node.constructionType, dimensionReference: node.dimensionReference, finishOpeningHeight: node.finishOpeningHeight, finishOpeningWidth: node.finishOpeningWidth, mark: node.mark, masonryOpeningHeight: node.masonryOpeningHeight, masonryOpeningWidth: node.masonryOpeningWidth, onChange: handleUpdate, roughOpeningHeight: node.roughOpeningHeight, roughOpeningWidth: node.roughOpeningWidth }) }), _jsxs(PanelSection, { title: "Position", children: [_jsx(SliderControl, { label: _jsxs(_Fragment, { children: ["X", _jsx("sub", { className: "ml-[1px] text-[11px] opacity-70", children: "wall" })] }), max: 10, min: -10, onChange: (v) => handleUpdate({ position: [v, node.position[1], node.position[2]] }), precision: 2, step: 0.1, unit: "m", value: node.position[0] }), showFlipSide && (_jsx("div", { className: "px-1 pt-2 pb-1", children: _jsx(ActionButton, { className: "w-full", icon: _jsx(FlipHorizontal2, { className: "h-4 w-4" }), label: "Flip Side", onClick: handleFlip }) }))] }), showFoldSection && (_jsxs(PanelSection, { title: "Fold", children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Panels" }), _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ leafCount: v === '2' ? 2 : 4 }), options: [
|
|
482
482
|
{ label: '2', value: '2' },
|
|
483
483
|
{ label: '4', value: '4' },
|
|
484
484
|
], value: node.leafCount === 2 ? '2' : '4' })] }) }), _jsx(SliderControl, { label: "Open", max: 100, min: 0, onChange: (v) => handleUpdate({ operationState: v / 100 }), precision: 0, restoreOnCommit: false, step: 5, unit: "%", value: Math.round((node.operationState ?? 0) * 100) })] })), showSlideSection && (_jsxs(PanelSection, { title: "Slide", children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: doorType === 'pocket' ? 'Pocket' : doorType === 'barn' ? 'Rail' : 'Panel' }), _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ slideDirection: v }), options: [
|
|
485
485
|
{ label: 'Left', value: 'left' },
|
|
486
486
|
{ label: 'Right', value: 'right' },
|
|
487
|
-
], value: node.slideDirection ?? 'left' })] }) }), _jsx(SliderControl, { label: "Open", max: 100, min: 0, onChange: (v) => handleUpdate({ operationState: v / 100 }), precision: 0, restoreOnCommit: false, step: 5, unit: "%", value: Math.round((node.operationState ?? 0) * 100) })] })), showGarageSection && (_jsxs(PanelSection, { title: "Garage", children: [_jsx(SliderControl, { label: "Open", max: 100, min: 0, onChange: (v) => handleUpdate({ operationState: v / 100 }), precision: 0, restoreOnCommit: false, step: 5, unit: "%", value: Math.round((node.operationState ?? 0) * 100) }), isSectionalGarageDoor && (_jsx(SliderControl, { label: "Panels", max: 8, min: 3, onChange: (v) => handleUpdate({ garagePanelCount: Math.round(v) }), precision: 0, restoreOnCommit: false, step: 1, value: node.garagePanelCount ?? 4 }))] })), _jsxs(PanelSection, { title: "Dimensions", children: [_jsx(SliderControl, { label: "Width", max: maxDoorWidth, min: 0.5, onChange: (v) => handleUpdate({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value:
|
|
487
|
+
], value: node.slideDirection ?? 'left' })] }) }), _jsx(SliderControl, { label: "Open", max: 100, min: 0, onChange: (v) => handleUpdate({ operationState: v / 100 }), precision: 0, restoreOnCommit: false, step: 5, unit: "%", value: Math.round((node.operationState ?? 0) * 100) })] })), showGarageSection && (_jsxs(PanelSection, { title: "Garage", children: [_jsx(SliderControl, { label: "Open", max: 100, min: 0, onChange: (v) => handleUpdate({ operationState: v / 100 }), precision: 0, restoreOnCommit: false, step: 5, unit: "%", value: Math.round((node.operationState ?? 0) * 100) }), isSectionalGarageDoor && (_jsx(SliderControl, { label: "Panels", max: 8, min: 3, onChange: (v) => handleUpdate({ garagePanelCount: Math.round(v) }), precision: 0, restoreOnCommit: false, step: 1, value: node.garagePanelCount ?? 4 }))] })), _jsxs(PanelSection, { title: "Dimensions", children: [_jsx(SliderControl, { label: "Width", max: maxDoorWidth, min: 0.5, onChange: (v) => handleUpdate({ width: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.width }), _jsx(SliderControl, { label: "Height", max: 1000, min: 1.0, onChange: (v) => handleUpdate({
|
|
488
488
|
height: v,
|
|
489
489
|
position: [node.position[0], v / 2, node.position[2]],
|
|
490
490
|
// Keep the handle at the same relative height as the door resizes,
|
|
491
491
|
// matching the height-resize arrow.
|
|
492
492
|
handleHeight: scaleHandleHeight(node.handleHeight, node.height, v),
|
|
493
|
-
}), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value:
|
|
493
|
+
}), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: node.height })] }), showDoorShapeSection && (_jsxs(PanelSection, { title: "Top Shape", children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsx(SegmentedControl, { onChange: (v) => handleUpdate({
|
|
494
494
|
openingShape: v,
|
|
495
495
|
...(v === 'rounded'
|
|
496
496
|
? {
|
|
@@ -508,10 +508,10 @@ export default function DoorPanel() {
|
|
|
508
508
|
], value: doorShape }) }), doorShape === 'rounded' && (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ openingRadiusMode: v }), options: [
|
|
509
509
|
{ label: 'All', value: 'all' },
|
|
510
510
|
{ label: 'Individual', value: 'individual' },
|
|
511
|
-
], value: openingRadiusMode }) }), openingRadiusMode === 'all' ? (_jsx(SliderControl, { label: "Corner Radius", max: maxRoundedRadius, min: 0, onChange: (v) => previewDoorUpdate('cornerRadius', v), onCommit: (v) => commitDoorPreview('cornerRadius', v), precision: 2, step: 0.05, unit: "m", value:
|
|
511
|
+
], value: openingRadiusMode }) }), openingRadiusMode === 'all' ? (_jsx(SliderControl, { label: "Corner Radius", max: maxRoundedRadius, min: 0, onChange: (v) => previewDoorUpdate('cornerRadius', v), onCommit: (v) => commitDoorPreview('cornerRadius', v), precision: 2, step: 0.05, unit: "m", value: cornerRadius })) : (_jsx(_Fragment, { children: [
|
|
512
512
|
['Top Left', 0],
|
|
513
513
|
['Top Right', 1],
|
|
514
|
-
].map(([label, index]) => (_jsx(SliderControl, { label: label, max: maxRoundedRadius, min: 0, onChange: (v) => setOpeningTopRadius(index, v), onCommit: (v) => setOpeningTopRadius(index, v, true), precision: 2, step: 0.05, unit: "m", value:
|
|
514
|
+
].map(([label, index]) => (_jsx(SliderControl, { label: label, max: maxRoundedRadius, min: 0, onChange: (v) => setOpeningTopRadius(index, v), onCommit: (v) => setOpeningTopRadius(index, v, true), precision: 2, step: 0.05, unit: "m", value: openingTopRadii[index] ?? 0 }, label))) })), _jsx(SliderControl, { label: "Reveal Radius", max: 0.08, min: 0, onChange: (v) => previewDoorUpdate('openingRevealRadius', v), onCommit: (v) => commitDoorPreview('openingRevealRadius', v), precision: 3, step: 0.005, unit: "m", value: openingRevealRadius })] })), doorShape === 'arch' && (_jsx(SliderControl, { label: "Arch Height", max: node.height, min: 0.05, onChange: (v) => handleUpdate({ archHeight: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: archHeight }))] })), showOpeningShapeSection && (_jsxs(PanelSection, { title: "Opening Shape", children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsx(SegmentedControl, { onChange: (v) => handleUpdate({
|
|
515
515
|
openingShape: v,
|
|
516
516
|
...(v === 'rounded'
|
|
517
517
|
? { openingRadiusMode, openingTopRadii, cornerRadius, openingRevealRadius }
|
|
@@ -524,19 +524,19 @@ export default function DoorPanel() {
|
|
|
524
524
|
], value: openingShape }) }), openingShape === 'rounded' && (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex flex-col gap-2 px-1 pb-1", children: _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ openingRadiusMode: v }), options: [
|
|
525
525
|
{ label: 'All', value: 'all' },
|
|
526
526
|
{ label: 'Individual', value: 'individual' },
|
|
527
|
-
], value: openingRadiusMode }) }), openingRadiusMode === 'all' ? (_jsx(SliderControl, { label: "Corner Radius", max: maxRoundedRadius, min: 0, onChange: (v) => previewDoorUpdate('cornerRadius', v), onCommit: (v) => commitDoorPreview('cornerRadius', v), precision: 2, step: 0.05, unit: "m", value:
|
|
527
|
+
], value: openingRadiusMode }) }), openingRadiusMode === 'all' ? (_jsx(SliderControl, { label: "Corner Radius", max: maxRoundedRadius, min: 0, onChange: (v) => previewDoorUpdate('cornerRadius', v), onCommit: (v) => commitDoorPreview('cornerRadius', v), precision: 2, step: 0.05, unit: "m", value: cornerRadius })) : (_jsx(_Fragment, { children: [
|
|
528
528
|
['Top Left', 0],
|
|
529
529
|
['Top Right', 1],
|
|
530
|
-
].map(([label, index]) => (_jsx(SliderControl, { label: label, max: maxRoundedRadius, min: 0, onChange: (v) => setOpeningTopRadius(index, v), onCommit: (v) => setOpeningTopRadius(index, v, true), precision: 2, step: 0.05, unit: "m", value:
|
|
530
|
+
].map(([label, index]) => (_jsx(SliderControl, { label: label, max: maxRoundedRadius, min: 0, onChange: (v) => setOpeningTopRadius(index, v), onCommit: (v) => setOpeningTopRadius(index, v, true), precision: 2, step: 0.05, unit: "m", value: openingTopRadii[index] ?? 0 }, label))) })), _jsx(SliderControl, { label: "Reveal Radius", max: 0.08, min: 0, onChange: (v) => previewDoorUpdate('openingRevealRadius', v), onCommit: (v) => commitDoorPreview('openingRevealRadius', v), precision: 3, step: 0.005, unit: "m", value: openingRevealRadius })] })), openingShape === 'arch' && (_jsx(SliderControl, { label: "Arch Height", max: node.height, min: 0.05, onChange: (v) => handleUpdate({ archHeight: v }), precision: 2, restoreOnCommit: false, step: 0.05, unit: "m", value: archHeight }))] })), !isCutoutOnly && (_jsxs(_Fragment, { children: [showFrameSection && (_jsxs(PanelSection, { title: "Frame", children: [_jsx(SliderControl, { label: "Thickness", max: 0.2, min: 0.01, onChange: (v) => handleUpdate({ frameThickness: v }), precision: 3, step: 0.01, unit: "m", value: node.frameThickness }), _jsx(SliderControl, { label: "Depth", max: 0.3, min: 0.01, onChange: (v) => handleUpdate({ frameDepth: v }), precision: 3, step: 0.01, unit: "m", value: node.frameDepth })] })), showContentPaddingSection && (_jsxs(PanelSection, { title: "Content Padding", children: [_jsx(SliderControl, { label: "Horizontal", max: 0.2, min: 0, onChange: (v) => handleUpdate({ contentPadding: [v, node.contentPadding[1]] }), precision: 3, step: 0.005, unit: "m", value: node.contentPadding[0] }), _jsx(SliderControl, { label: "Vertical", max: 0.2, min: 0, onChange: (v) => handleUpdate({ contentPadding: [node.contentPadding[0], v] }), precision: 3, step: 0.005, unit: "m", value: node.contentPadding[1] })] })), showSwingSection && (_jsx(PanelSection, { title: "Swing", children: _jsxs("div", { className: "flex flex-col gap-2 px-1 pb-1", children: [supportsHingeSide && (_jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Hinges Side" }), _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ hingesSide: v }), options: [
|
|
531
531
|
{ label: 'Left', value: 'left' },
|
|
532
532
|
{ label: 'Right', value: 'right' },
|
|
533
533
|
], value: node.hingesSide })] })), _jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Direction" }), _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ swingDirection: v }), options: [
|
|
534
534
|
{ label: 'Inward', value: 'inward' },
|
|
535
535
|
{ label: 'Outward', value: 'outward' },
|
|
536
|
-
], value: node.swingDirection })] })] }) })), showThresholdSection && (_jsxs(PanelSection, { title: "Threshold", children: [_jsx(ToggleControl, { checked: node.threshold, label: "Enable Threshold", onChange: (checked) => handleUpdate({ threshold: checked }) }), node.threshold && (_jsx("div", { className: "mt-1 flex flex-col gap-1", children: _jsx(SliderControl, { label: "Height", max: 0.1, min: 0.005, onChange: (v) => handleUpdate({ thresholdHeight: v }), precision: 3, step: 0.005, unit: "m", value:
|
|
536
|
+
], value: node.swingDirection })] })] }) })), showThresholdSection && (_jsxs(PanelSection, { title: "Threshold", children: [_jsx(ToggleControl, { checked: node.threshold, label: "Enable Threshold", onChange: (checked) => handleUpdate({ threshold: checked }) }), node.threshold && (_jsx("div", { className: "mt-1 flex flex-col gap-1", children: _jsx(SliderControl, { label: "Height", max: 0.1, min: 0.005, onChange: (v) => handleUpdate({ thresholdHeight: v }), precision: 3, step: 0.005, unit: "m", value: node.thresholdHeight }) }))] })), showHandleSection && (_jsxs(PanelSection, { title: "Handle", children: [isSwingDoor && (_jsx(ToggleControl, { checked: node.handle, label: "Enable Handle", onChange: (checked) => handleUpdate({ handle: checked }) })), (node.handle || !isSwingDoor) && (_jsxs("div", { className: "mt-1 flex flex-col gap-1", children: [_jsx(SliderControl, { label: "Height", max: node.height - 0.1, min: 0.5, onChange: (v) => handleUpdate({ handleHeight: v }), precision: 2, step: 0.05, unit: "m", value: node.handleHeight }), supportsHandleSide && (_jsxs("div", { className: "space-y-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Handle Side" }), _jsx(SegmentedControl, { onChange: (v) => handleUpdate({ handleSide: v }), options: [
|
|
537
537
|
{ label: 'Left', value: 'left' },
|
|
538
538
|
{ label: 'Right', value: 'right' },
|
|
539
|
-
], value: node.handleSide })] }))] }))] })), showHardwareSection && (_jsxs(PanelSection, { title: "Hardware", children: [_jsx(ToggleControl, { checked: node.doorCloser, label: "Door Closer", onChange: (checked) => handleUpdate({ doorCloser: checked }) }), _jsx(ToggleControl, { checked: node.panicBar, label: "Panic Bar", onChange: (checked) => handleUpdate({ panicBar: checked }) }), node.panicBar && (_jsx("div", { className: "mt-1 flex flex-col gap-1", children: _jsx(SliderControl, { label: "Bar Height", max: node.height - 0.1, min: 0.5, onChange: (v) => handleUpdate({ panicBarHeight: v }), precision: 2, step: 0.05, unit: "m", value:
|
|
539
|
+
], value: node.handleSide })] }))] }))] })), showHardwareSection && (_jsxs(PanelSection, { title: "Hardware", children: [_jsx(ToggleControl, { checked: node.doorCloser, label: "Door Closer", onChange: (checked) => handleUpdate({ doorCloser: checked }) }), _jsx(ToggleControl, { checked: node.panicBar, label: "Panic Bar", onChange: (checked) => handleUpdate({ panicBar: checked }) }), node.panicBar && (_jsx("div", { className: "mt-1 flex flex-col gap-1", children: _jsx(SliderControl, { label: "Bar Height", max: node.height - 0.1, min: 0.5, onChange: (v) => handleUpdate({ panicBarHeight: v }), precision: 2, step: 0.05, unit: "m", value: node.panicBarHeight }) }))] })), showSegmentsSection && (_jsxs(PanelSection, { title: "Segments", children: [node.segments.map((seg, i) => {
|
|
540
540
|
const numCols = seg.columnRatios.length;
|
|
541
541
|
const colSum = seg.columnRatios.reduce((a, b) => a + b, 0);
|
|
542
542
|
const normCols = seg.columnRatios.map((r) => r / colSum);
|
|
@@ -554,13 +554,13 @@ export default function DoorPanel() {
|
|
|
554
554
|
}, precision: 0, step: 1, value: numCols }), numCols > 1 && (_jsxs("div", { className: "mt-1 border-border/50 border-t pt-1", children: [normCols.map((ratio, ci) => (_jsx(SliderControl, { label: `C${ci + 1}`, max: 95, min: 5, onChange: (v) => setSegmentColumnRatio(i, ci, v / 100), precision: 1, step: 1, unit: "%", value: Math.round(ratio * 100 * 10) / 10 }, `c-${ci}`))), _jsx(SliderControl, { label: "Divider", max: 0.1, min: 0.005, onChange: (v) => {
|
|
555
555
|
const updated = node.segments.map((s, idx) => idx === i ? { ...s, dividerThickness: v } : s);
|
|
556
556
|
handleUpdate({ segments: updated });
|
|
557
|
-
}, precision: 3, step: 0.005, unit: "m", value:
|
|
557
|
+
}, precision: 3, step: 0.005, unit: "m", value: seg.dividerThickness })] })), seg.type === 'panel' && (_jsxs("div", { className: "mt-1 border-border/50 border-t pt-1", children: [_jsx(SliderControl, { label: "Inset", max: 0.1, min: 0, onChange: (v) => {
|
|
558
558
|
const updated = node.segments.map((s, idx) => idx === i ? { ...s, panelInset: v } : s);
|
|
559
559
|
handleUpdate({ segments: updated });
|
|
560
|
-
}, precision: 3, step: 0.005, unit: "m", value:
|
|
560
|
+
}, precision: 3, step: 0.005, unit: "m", value: seg.panelInset }), _jsx(SliderControl, { label: "Depth", max: 0.1, min: 0, onChange: (v) => {
|
|
561
561
|
const updated = node.segments.map((s, idx) => idx === i ? { ...s, panelDepth: v } : s);
|
|
562
562
|
handleUpdate({ segments: updated });
|
|
563
|
-
}, precision: 3, step: 0.005, unit: "m", value:
|
|
563
|
+
}, precision: 3, step: 0.005, unit: "m", value: seg.panelDepth })] }))] }, i));
|
|
564
564
|
}), _jsxs("div", { className: "flex gap-1.5 px-1 pt-1", children: [_jsx(ActionButton, { label: "+ Add Segment", onClick: () => {
|
|
565
565
|
const updated = [
|
|
566
566
|
...node.segments,
|
package/dist/door/parametrics.js
CHANGED
|
@@ -11,8 +11,8 @@ export const doorParametrics = {
|
|
|
11
11
|
{
|
|
12
12
|
label: 'Dimensions',
|
|
13
13
|
fields: [
|
|
14
|
-
{ key: 'width', kind: 'number', unit: 'm', min: 0.5, max:
|
|
15
|
-
{ key: 'height', kind: 'number', unit: 'm', min: 1.0, max:
|
|
14
|
+
{ key: 'width', kind: 'number', unit: 'm', min: 0.5, max: 1000, step: 0.05 },
|
|
15
|
+
{ key: 'height', kind: 'number', unit: 'm', min: 1.0, max: 1000, step: 0.05 },
|
|
16
16
|
],
|
|
17
17
|
},
|
|
18
18
|
{
|
package/dist/door/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/door/tool.tsx"],"names":[],"mappings":"AAiEA;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/door/tool.tsx"],"names":[],"mappings":"AAiEA;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAqsBrB,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/door/tool.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { DoorNode, emitter, isCurvedWall, sceneRegistry, spatialGridManager, useScene, WallNode as WallNodeSchema, } from '@pascal-app/core';
|
|
3
|
-
import {
|
|
2
|
+
import { DoorNode, emitter, holdHiddenWallPointerEvents, isCurvedWall, sceneRegistry, spatialGridManager, useScene, WallNode as WallNodeSchema, } from '@pascal-app/core';
|
|
3
|
+
import { calculateItemRotation, EDITOR_LAYER, getSideFromNormal, isMagneticSnapActive, isValidWallSideFace, triggerSFX, useAlignmentGuides, useEditor, useFacingPose, usePlacementPreview, } from '@pascal-app/editor';
|
|
4
4
|
import { useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import { BoxGeometry, EdgesGeometry, Vector3 } from 'three';
|
|
@@ -210,7 +210,7 @@ const DoorTool = () => {
|
|
|
210
210
|
applySnap,
|
|
211
211
|
});
|
|
212
212
|
const { clampedX, clampedY } = clampToWall(wall, localX, width, height);
|
|
213
|
-
const valid = !hasWallChildOverlap(wall.id, clampedX, clampedY, width, height, ignoreId);
|
|
213
|
+
const valid = !hasWallChildOverlap(wall.id, useScene.getState().nodes, clampedX, clampedY, width, height, ignoreId);
|
|
214
214
|
return { clampedX, clampedY, valid };
|
|
215
215
|
};
|
|
216
216
|
// Shared create/update path for the wall draft — used by the direct
|
|
@@ -350,7 +350,13 @@ const DoorTool = () => {
|
|
|
350
350
|
const side = sideFlip ? (faceSide === 'front' ? 'back' : 'front') : faceSide;
|
|
351
351
|
const flipOffset = sideFlip ? Math.PI : 0;
|
|
352
352
|
const itemRotation = calculateItemRotation(event.normal) + flipOffset;
|
|
353
|
-
const cursorRotation =
|
|
353
|
+
const cursorRotation =
|
|
354
|
+
// World yaw of a wall CHILD (-wallAngle + itemRotation, which already
|
|
355
|
+
// carries the flip) — `calculateCursorRotation` was π off, pointing
|
|
356
|
+
// the facing triangle at the far side of the wall (see
|
|
357
|
+
// MoveDoorTool.applyPreview).
|
|
358
|
+
itemRotation -
|
|
359
|
+
Math.atan2(event.node.end[1] - event.node.start[1], event.node.end[0] - event.node.start[0]);
|
|
354
360
|
applyWallTarget({
|
|
355
361
|
wall: event.node,
|
|
356
362
|
rawLocalX: event.localPosition[0],
|
|
@@ -577,12 +583,18 @@ const DoorTool = () => {
|
|
|
577
583
|
emitter.on('grid:move', onGridFreeFollow);
|
|
578
584
|
emitter.on('tool:cancel', onCancel);
|
|
579
585
|
window.addEventListener('keydown', onKeyDown);
|
|
586
|
+
// Placement tracks the cursor through wall events; keep walls hidden by
|
|
587
|
+
// the wall-mode pass (X-ray 'down' mode) pointer-targetable while the
|
|
588
|
+
// tool is active so a new door still snaps onto them (see the wall
|
|
589
|
+
// renderer's pointer transparency).
|
|
590
|
+
const releaseHiddenWallHold = holdHiddenWallPointerEvents();
|
|
580
591
|
return () => {
|
|
581
592
|
destroyDraft();
|
|
582
593
|
hideCursor();
|
|
583
594
|
clearPlacementPreview();
|
|
584
595
|
useAlignmentGuides.getState().clear();
|
|
585
596
|
clearOpeningGuides3D();
|
|
597
|
+
releaseHiddenWallHold();
|
|
586
598
|
useScene.temporal.getState().resume();
|
|
587
599
|
emitter.off('wall:enter', onWallHover);
|
|
588
600
|
emitter.off('wall:move', onWallHover);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type DormerNode, type RoofSegmentNode } from '@pascal-app/core';
|
|
1
|
+
import { type DormerNode, type RoofSegmentNode, type WindowNode } from '@pascal-app/core';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
export declare const DORMER_GABLE_MATERIAL_INDEX = 4;
|
|
4
4
|
/**
|
|
@@ -7,46 +7,10 @@ export declare const DORMER_GABLE_MATERIAL_INDEX = 4;
|
|
|
7
7
|
* the live preview during slider drags so we don't re-run CSG on every
|
|
8
8
|
* pointer move. Also used by the placement / move-tool ghost.
|
|
9
9
|
*
|
|
10
|
-
* Builds a rectangular body + simple roof in dormer-mesh-local. For
|
|
11
|
-
* `flat` dormers the roof triangle is skipped. Other roof types use
|
|
12
|
-
* the gable approximation — it's a rough silhouette by design.
|
|
13
|
-
*
|
|
14
10
|
* The wall sits at material slot 0 and the roof at slot 3 so it picks
|
|
15
11
|
* up the same material array the renderer passes for the CSG output.
|
|
16
12
|
*/
|
|
17
13
|
export declare function buildDormerFallbackGeometry(dormer: DormerNode): THREE.BufferGeometry;
|
|
18
|
-
export declare function createDormerArchShape(w: number, h: number, archHeight: number): THREE.Shape;
|
|
19
|
-
export declare function normalizeDormerCornerRadii(radii: [number, number, number, number], w: number, h: number): [number, number, number, number];
|
|
20
|
-
export declare function createDormerRoundedShape(w: number, h: number, radii: [number, number, number, number]): THREE.Shape;
|
|
21
|
-
/**
|
|
22
|
-
* Which gable faces of a dormer have a visible window opening.
|
|
23
|
-
* "front" = mesh-local +Z, "back" = mesh-local −Z (after the +π/2 yaw
|
|
24
|
-
* bake for non-shed roofs).
|
|
25
|
-
*
|
|
26
|
-
* Each face centre is lifted into segment-local X *and* Z (the yaw
|
|
27
|
-
* matters, and on hip hosts the end slopes fall along X) and compared
|
|
28
|
-
* against the host's canonical per-type surface line via
|
|
29
|
-
* `getRoofSegmentSurfaceY`, which extrapolates past the structural
|
|
30
|
-
* eave instead of plateauing at the wall top — a face hanging in free
|
|
31
|
-
* air past the eave keeps dropping. Gates both the CSG window-cut
|
|
32
|
-
* decision (`generateDormerGeometry`) and the live render
|
|
33
|
-
* (window-assembly.tsx).
|
|
34
|
-
*/
|
|
35
|
-
export declare function getDormerExposedFaces(dormer: DormerNode, hostSegment: RoofSegmentNode): {
|
|
36
|
-
front: boolean;
|
|
37
|
-
back: boolean;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Computed dimensions for the window opening on a dormer's gable face.
|
|
41
|
-
* The skirt (the wall extension below the eave used for CSG-trim) is
|
|
42
|
-
* `DORMER_DROP_BELOW` tall, so the window sits within that band.
|
|
43
|
-
*/
|
|
44
|
-
export declare function getDormerSkirtWindowDims(dormer: DormerNode): {
|
|
45
|
-
width: number;
|
|
46
|
-
height: number;
|
|
47
|
-
centerY: number;
|
|
48
|
-
offsetX: number;
|
|
49
|
-
};
|
|
50
14
|
/**
|
|
51
15
|
* Build the trimmed dormer geometry hosted on a roof segment. The
|
|
52
16
|
* dormer's own walls+roof are generated via `getRoofSegmentBrushes`
|
|
@@ -54,7 +18,7 @@ export declare function getDormerSkirtWindowDims(dormer: DormerNode): {
|
|
|
54
18
|
* CSG-subtracted in dormer-mesh-local space. Window openings are then
|
|
55
19
|
* subtracted on each exposed gable face.
|
|
56
20
|
*/
|
|
57
|
-
export declare function generateDormerGeometry(dormer: DormerNode, hostSegment: RoofSegmentNode): THREE.BufferGeometry;
|
|
21
|
+
export declare function generateDormerGeometry(dormer: DormerNode, hostSegment: RoofSegmentNode, hostedWindows?: readonly WindowNode[]): THREE.BufferGeometry;
|
|
58
22
|
/**
|
|
59
23
|
* Build the dormer cut shape in dormer-mesh-local coordinates. The
|
|
60
24
|
* returned geometry is centered at X=Z=0 and spans Y ∈ [-skirt, peak]
|
|
@@ -64,10 +28,10 @@ export declare function generateDormerGeometry(dormer: DormerNode, hostSegment:
|
|
|
64
28
|
* Shapes per roof type:
|
|
65
29
|
* - **flat**: a plain box (top flush with the eave; the
|
|
66
30
|
* dormer body has no roof above wallH).
|
|
67
|
-
* - **shed**: trapezoid in YZ, extruded along X.
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
31
|
+
* - **shed**: trapezoid in YZ, extruded along X. The
|
|
32
|
+
* base shape is high at z=-d/2; the caller
|
|
33
|
+
* flips it when the configured high side is
|
|
34
|
+
* the front.
|
|
71
35
|
* - **gable / gambrel**: pentagon (rectangle + symmetric triangle)
|
|
72
36
|
* in XY, extruded along Z. Ridge runs
|
|
73
37
|
* along Z (mesh-Z = virtualSegment-X after
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csg-geometry.d.ts","sourceRoot":"","sources":["../../src/dormer/csg-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"csg-geometry.d.ts","sourceRoot":"","sources":["../../src/dormer/csg-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EAKf,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAA;AAgBzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,eAAO,MAAM,2BAA2B,IAAI,CAAA;AAK5C;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,cAAc,CAEpF;AAiBD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,eAAe,EAC5B,aAAa,GAAE,SAAS,UAAU,EAAO,GACxC,KAAK,CAAC,cAAc,CAsOtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,cAAc,CAmMtB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CA6DlF"}
|
|
@@ -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"}
|