@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/gutter/eave-snap.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { computeGutterEaveY, GUTTER_EAVE_TUCK_INWARD, GUTTER_EAVE_TUCK_UP, getRoofShapeEaveSides, } from '@pascal-app/core';
|
|
1
2
|
/**
|
|
2
3
|
* Shared eave-snap math for the gutter's placement + move tools.
|
|
3
4
|
*
|
|
@@ -18,8 +19,8 @@
|
|
|
18
19
|
// drip-edge. These tuck the snap so the gutter reads as "attached to
|
|
19
20
|
// the fascia" rather than "floating at the very tip of the overhang".
|
|
20
21
|
// Tuned by feel — bump them up if the gutter looks too low / outboard.
|
|
21
|
-
export const EAVE_TUCK_INWARD =
|
|
22
|
-
export const EAVE_TUCK_UP =
|
|
22
|
+
export const EAVE_TUCK_INWARD = GUTTER_EAVE_TUCK_INWARD;
|
|
23
|
+
export const EAVE_TUCK_UP = GUTTER_EAVE_TUCK_UP;
|
|
23
24
|
/**
|
|
24
25
|
* Live eave Y from a segment's wallHeight + overhang + pitch. Pulled
|
|
25
26
|
* out as a shared helper because the renderer derives Y from this same
|
|
@@ -28,18 +29,7 @@ export const EAVE_TUCK_UP = 0.04;
|
|
|
28
29
|
* `resolveEaveSnap` uses the same formula at placement.
|
|
29
30
|
*/
|
|
30
31
|
export function computeEaveY(segment) {
|
|
31
|
-
|
|
32
|
-
// Flat roofs have no slope drop and no slope-surface-vs-deck-top
|
|
33
|
-
// offset — the deck top IS the eave line. EAVE_TUCK_UP is a
|
|
34
|
-
// correction that lifts a SLOPED gutter from the slope-surface up to
|
|
35
|
-
// the deck-top line; applying it to a flat deck floats the gutter
|
|
36
|
-
// above the roof and leaves a visible gap between the edge and the
|
|
37
|
-
// gutter. So mount flat gutters right at the deck top.
|
|
38
|
-
if ((segment.roofType ?? 'gable') === 'flat')
|
|
39
|
-
return wallHeight;
|
|
40
|
-
const overhang = segment.overhang ?? 0;
|
|
41
|
-
const pitchRad = ((segment.pitch ?? 0) * Math.PI) / 180;
|
|
42
|
-
return wallHeight - overhang * Math.tan(pitchRad) + EAVE_TUCK_UP;
|
|
32
|
+
return computeGutterEaveY(segment);
|
|
43
33
|
}
|
|
44
34
|
/**
|
|
45
35
|
* Pick which of the segment's eaves is closest to the cursor.
|
|
@@ -49,7 +39,7 @@ export function computeEaveY(segment) {
|
|
|
49
39
|
* regardless of which side the cursor is on — clicking on the high
|
|
50
40
|
* side still rolls the gutter down to the low eave.
|
|
51
41
|
*
|
|
52
|
-
* -
|
|
42
|
+
* - Four-eave roofs: the slope the user is standing
|
|
53
43
|
* on is determined by whichever of `|lx|/halfW` or `|lz|/halfD` is
|
|
54
44
|
* larger — same `max(fx, fz)` discriminator the segment-hit's
|
|
55
45
|
* `analyticalSurfaceY` uses for hip. Sign of the dominant axis
|
|
@@ -57,16 +47,13 @@ export function computeEaveY(segment) {
|
|
|
57
47
|
* lower run has all four eaves at the eave line — it gets the same
|
|
58
48
|
* 4-way snap as hip.
|
|
59
49
|
*
|
|
60
|
-
* - `gable` / `gambrel
|
|
61
|
-
* 4-side eaves in plan, but the segment-hit formula approximates it
|
|
62
|
-
* as 2-slope (depth-only), so we stay consistent here — the user
|
|
63
|
-
* can re-place the gutter manually on a side eave if mansard
|
|
64
|
-
* becomes important.
|
|
50
|
+
* - `gable` / `gambrel`: 2-way `±Z`.
|
|
65
51
|
*/
|
|
66
52
|
function pickEaveSide(roofType, localX, localZ, halfW, halfD) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
const sides = getRoofShapeEaveSides(roofType);
|
|
54
|
+
if (sides.length === 1)
|
|
55
|
+
return sides[0];
|
|
56
|
+
if (sides.includes('+X')) {
|
|
70
57
|
const fx = halfW > 0 ? Math.abs(localX) / halfW : 0;
|
|
71
58
|
const fz = halfD > 0 ? Math.abs(localZ) / halfD : 0;
|
|
72
59
|
if (fx > fz)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/gutter/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAQlD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../src/gutter/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAQlD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,EAAE,KAAK,YAAY,EAAa,MAAM,gBAAgB,CAAA;AAW7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,YAAwB,GAC/B,KAAK,CAAC,cAAc,CA8LtB"}
|
package/dist/gutter/geometry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Brush, csgEvaluator, csgGeometry, prepareBrushForCSG, SUBTRACTION, } from '@pascal-app/viewer';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js';
|
|
4
|
+
import { applyCylinderWorldUvs, applyPlanarWorldUvs, copyUvToSecondaryChannel, } from '../shared/primitive-uv';
|
|
4
5
|
import { NO_MITRES } from './corner-mitre';
|
|
5
6
|
import { OUTLET_STUB_LENGTH, OUTLET_WALL_THICKNESS, outletDims, outletShapeForProfile, profileFloorMidZ, } from './profile-geometry';
|
|
6
7
|
/**
|
|
@@ -78,7 +79,7 @@ export function buildGutterGeometry(node, mitres = NO_MITRES) {
|
|
|
78
79
|
depth: channelLen,
|
|
79
80
|
bevelEnabled: false,
|
|
80
81
|
curveSegments: 16,
|
|
81
|
-
steps:
|
|
82
|
+
steps: gutterArcSteps(node, channelLen),
|
|
82
83
|
});
|
|
83
84
|
// Apply the corner-mitre skew while we're still in the source frame.
|
|
84
85
|
// Source axes (pre-rotation): X_cs = outward, Y_cs = vertical,
|
|
@@ -135,7 +136,7 @@ export function buildGutterGeometry(node, mitres = NO_MITRES) {
|
|
|
135
136
|
depth: capLeftLen,
|
|
136
137
|
bevelEnabled: false,
|
|
137
138
|
curveSegments: 16,
|
|
138
|
-
steps:
|
|
139
|
+
steps: gutterArcSteps(node, capLeftLen),
|
|
139
140
|
});
|
|
140
141
|
leftCap.rotateY(-Math.PI / 2);
|
|
141
142
|
// Left cap spans [-len/2, -len/2 + capLeftLen]: translate by
|
|
@@ -149,7 +150,7 @@ export function buildGutterGeometry(node, mitres = NO_MITRES) {
|
|
|
149
150
|
depth: capRightLen,
|
|
150
151
|
bevelEnabled: false,
|
|
151
152
|
curveSegments: 16,
|
|
152
|
-
steps:
|
|
153
|
+
steps: gutterArcSteps(node, capRightLen),
|
|
153
154
|
});
|
|
154
155
|
rightCap.rotateY(-Math.PI / 2);
|
|
155
156
|
// Right cap spans [+len/2 - capRightLen, +len/2].
|
|
@@ -190,7 +191,11 @@ export function buildGutterGeometry(node, mitres = NO_MITRES) {
|
|
|
190
191
|
// CSG drill — punches each bore through the merged geometry. Runs
|
|
191
192
|
// last so the floor + collars are already in one mesh; each drill
|
|
192
193
|
// cuts both at once, subtracted sequentially.
|
|
193
|
-
|
|
194
|
+
// Subtracting a near-end outlet from an already subdivided curved run makes
|
|
195
|
+
// three-bvh-csg discard the complete cross-section around the drill, leaving
|
|
196
|
+
// a visible break in the fascia. Keep the curved trough watertight; its collar
|
|
197
|
+
// and connected downspout still conceal the floor where the bore would sit.
|
|
198
|
+
if (placements.length > 0 && !node.arc) {
|
|
194
199
|
let workingBrush = new Brush(merged);
|
|
195
200
|
prepareBrushForCSG(workingBrush);
|
|
196
201
|
for (const p of placements) {
|
|
@@ -208,9 +213,115 @@ export function buildGutterGeometry(node, mitres = NO_MITRES) {
|
|
|
208
213
|
}
|
|
209
214
|
const cutGeometry = csgGeometry(workingBrush);
|
|
210
215
|
merged.dispose();
|
|
211
|
-
|
|
216
|
+
const finished = bendGutterGeometryAlongArc(cutGeometry, node, mitres);
|
|
217
|
+
copyUvToSecondaryChannel(finished);
|
|
218
|
+
return finished;
|
|
212
219
|
}
|
|
213
|
-
|
|
220
|
+
const finished = bendGutterGeometryAlongArc(merged, node, mitres);
|
|
221
|
+
copyUvToSecondaryChannel(finished);
|
|
222
|
+
return finished;
|
|
223
|
+
}
|
|
224
|
+
function gutterArcSteps(node, length) {
|
|
225
|
+
if (!node.arc || !Number.isFinite(node.arc.radius))
|
|
226
|
+
return 1;
|
|
227
|
+
return Math.max(1, Math.min(32, Math.ceil(length / 0.4)));
|
|
228
|
+
}
|
|
229
|
+
// Bend the finished straight gutter (length along mesh-+X, outward along mesh-+Z)
|
|
230
|
+
// onto its stored concentric arc. Each vertex keeps its vertical Y; its (x, z) rotate
|
|
231
|
+
// about the arc center by the angle its along-length coordinate subtends, so the trough
|
|
232
|
+
// hugs the same circle as the deck's eave. Absent `arc` is a straight no-op.
|
|
233
|
+
function bendGutterGeometryAlongArc(geometry, node, mitres) {
|
|
234
|
+
const arc = node.arc;
|
|
235
|
+
if (!arc || !Number.isFinite(arc.radius))
|
|
236
|
+
return geometry;
|
|
237
|
+
const signedRef = (Math.sign(arc.centerZ) || 1) * arc.radius;
|
|
238
|
+
const position = geometry.attributes.position;
|
|
239
|
+
const metadata = node.metadata && typeof node.metadata === 'object' && !Array.isArray(node.metadata)
|
|
240
|
+
? node.metadata
|
|
241
|
+
: {};
|
|
242
|
+
const rawStraightEnds = metadata.leanToGutterArcStraightEnds;
|
|
243
|
+
const straightEnds = rawStraightEnds && typeof rawStraightEnds === 'object' && !Array.isArray(rawStraightEnds)
|
|
244
|
+
? rawStraightEnds
|
|
245
|
+
: {};
|
|
246
|
+
const straightEnd = (side) => {
|
|
247
|
+
const raw = straightEnds[side];
|
|
248
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
249
|
+
return null;
|
|
250
|
+
const value = raw;
|
|
251
|
+
return typeof value.startX === 'number' && typeof value.endX === 'number'
|
|
252
|
+
? { startX: value.startX, endX: value.endX }
|
|
253
|
+
: null;
|
|
254
|
+
};
|
|
255
|
+
const leftStraight = straightEnd('left');
|
|
256
|
+
const rightStraight = straightEnd('right');
|
|
257
|
+
const bendPoint = (x, z, phi) => {
|
|
258
|
+
const radial = z - arc.centerZ;
|
|
259
|
+
return {
|
|
260
|
+
x: arc.centerX - radial * Math.sin(phi),
|
|
261
|
+
z: arc.centerZ + radial * Math.cos(phi),
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
const bendMitredEnd = (x, z, endX) => {
|
|
265
|
+
const phi = (endX - arc.centerX) / signedRef;
|
|
266
|
+
const base = bendPoint(endX, z, phi);
|
|
267
|
+
const extension = x - endX;
|
|
268
|
+
return {
|
|
269
|
+
x: base.x + extension * Math.cos(phi),
|
|
270
|
+
z: base.z + extension * Math.sin(phi),
|
|
271
|
+
};
|
|
272
|
+
};
|
|
273
|
+
const bendStraightEnd = (x, z, transition) => {
|
|
274
|
+
const startPhi = (transition.startX - arc.centerX) / signedRef;
|
|
275
|
+
const endPhi = (transition.endX - arc.centerX) / signedRef;
|
|
276
|
+
const start = bendPoint(transition.startX, 0, startPhi);
|
|
277
|
+
const end = bendPoint(transition.endX, 0, endPhi);
|
|
278
|
+
const spanX = transition.endX - transition.startX;
|
|
279
|
+
const direction = Math.sign(spanX) || 1;
|
|
280
|
+
const beyondEnd = Math.max(0, (x - transition.endX) * direction);
|
|
281
|
+
const pathX = x - beyondEnd * direction;
|
|
282
|
+
const ratio = Math.abs(spanX) > 1e-6 ? (pathX - transition.startX) / spanX : 0;
|
|
283
|
+
let centerX = start.x + (end.x - start.x) * ratio;
|
|
284
|
+
let centerZ = start.z + (end.z - start.z) * ratio;
|
|
285
|
+
const chordLength = Math.hypot(end.x - start.x, end.z - start.z);
|
|
286
|
+
const tangentX = chordLength > 1e-6 ? (end.x - start.x) / chordLength : Math.cos(startPhi);
|
|
287
|
+
const tangentZ = chordLength > 1e-6 ? (end.z - start.z) / chordLength : Math.sin(startPhi);
|
|
288
|
+
centerX += beyondEnd * tangentX;
|
|
289
|
+
centerZ += beyondEnd * tangentZ;
|
|
290
|
+
let normalX = -tangentZ;
|
|
291
|
+
let normalZ = tangentX;
|
|
292
|
+
const midPhi = (startPhi + endPhi) / 2;
|
|
293
|
+
if (normalX * -Math.sin(midPhi) + normalZ * Math.cos(midPhi) < 0) {
|
|
294
|
+
normalX = -normalX;
|
|
295
|
+
normalZ = -normalZ;
|
|
296
|
+
}
|
|
297
|
+
return { x: centerX + z * normalX, z: centerZ + z * normalZ };
|
|
298
|
+
};
|
|
299
|
+
const rightTan = Math.tan(mitres.right);
|
|
300
|
+
const leftTan = Math.tan(mitres.left);
|
|
301
|
+
const halfLength = Math.max(0.05, node.length) / 2;
|
|
302
|
+
const endEpsilon = 1e-4;
|
|
303
|
+
for (let index = 0; index < position.count; index++) {
|
|
304
|
+
const x = position.getX(index);
|
|
305
|
+
const z = position.getZ(index);
|
|
306
|
+
const onRightMitre = mitres.right !== 0 && Math.abs(x - (halfLength + z * rightTan)) < endEpsilon;
|
|
307
|
+
const onLeftMitre = mitres.left !== 0 && Math.abs(x - (-halfLength - z * leftTan)) < endEpsilon;
|
|
308
|
+
const onRightStraight = rightStraight && x >= rightStraight.startX - endEpsilon;
|
|
309
|
+
const onLeftStraight = leftStraight && x <= leftStraight.startX + endEpsilon;
|
|
310
|
+
const bent = onRightStraight
|
|
311
|
+
? bendStraightEnd(x, z, rightStraight)
|
|
312
|
+
: onLeftStraight
|
|
313
|
+
? bendStraightEnd(x, z, leftStraight)
|
|
314
|
+
: onRightMitre
|
|
315
|
+
? bendMitredEnd(x, z, halfLength)
|
|
316
|
+
: onLeftMitre
|
|
317
|
+
? bendMitredEnd(x, z, -halfLength)
|
|
318
|
+
: bendPoint(x, z, (x - arc.centerX) / signedRef);
|
|
319
|
+
position.setX(index, bent.x);
|
|
320
|
+
position.setZ(index, bent.z);
|
|
321
|
+
}
|
|
322
|
+
position.needsUpdate = true;
|
|
323
|
+
geometry.computeVertexNormals();
|
|
324
|
+
return geometry;
|
|
214
325
|
}
|
|
215
326
|
// Remove the extrude's cross-section CAP triangles at a mitred end so two
|
|
216
327
|
// gutters meeting at a corner don't leave coincident, z-fighting end
|
|
@@ -431,6 +542,7 @@ function buildHangers(node, len, size, capLeftLen, capRightLen, mitres) {
|
|
|
431
542
|
// not. `mergeGeometries` rejects mixed-index sets, so flatten the
|
|
432
543
|
// box to non-indexed before pushing.
|
|
433
544
|
const bar = new THREE.BoxGeometry(HANGER_BAR_LEN, HANGER_BAR_THICKNESS, strapDepth).toNonIndexed();
|
|
545
|
+
applyPlanarWorldUvs(bar);
|
|
434
546
|
// Center the bar at X = position, Y just above the rim line, Z
|
|
435
547
|
// straddling 0 so the strap covers the full back-to-front span.
|
|
436
548
|
bar.translate(x, HANGER_BAR_THICKNESS / 2 + 0.001, rimWidth / 2);
|
|
@@ -485,9 +597,13 @@ function resolveOutletPlacements(node, len, size, capLeftLen, capRightLen) {
|
|
|
485
597
|
/** Cylinder (round) or box (rect) sized to `dims`, height `h` along Y. */
|
|
486
598
|
function outletSolid(dims, h) {
|
|
487
599
|
if (dims.shape === 'round') {
|
|
488
|
-
|
|
600
|
+
const geometry = new THREE.CylinderGeometry(dims.halfX, dims.halfX, h, OUTLET_RADIAL_SEGMENTS).toNonIndexed();
|
|
601
|
+
applyCylinderWorldUvs(geometry, dims.halfX, h);
|
|
602
|
+
return geometry;
|
|
489
603
|
}
|
|
490
|
-
|
|
604
|
+
const geometry = new THREE.BoxGeometry(2 * dims.halfX, h, 2 * dims.halfZ).toNonIndexed();
|
|
605
|
+
applyPlanarWorldUvs(geometry);
|
|
606
|
+
return geometry;
|
|
491
607
|
}
|
|
492
608
|
/**
|
|
493
609
|
* Solid collar at the OUTER cross-section; the CSG drill hollows out the
|
|
@@ -509,9 +625,11 @@ function buildOutletFunnel(p, size) {
|
|
|
509
625
|
let funnel;
|
|
510
626
|
if (p.shape === 'round') {
|
|
511
627
|
funnel = new THREE.CylinderGeometry(p.outer.halfX * OUTLET_FLARE_SCALE, p.outer.halfX, OUTLET_FLARE_HEIGHT, OUTLET_RADIAL_SEGMENTS).toNonIndexed();
|
|
628
|
+
applyCylinderWorldUvs(funnel, p.outer.halfX * OUTLET_FLARE_SCALE, OUTLET_FLARE_HEIGHT);
|
|
512
629
|
}
|
|
513
630
|
else {
|
|
514
631
|
funnel = new THREE.BoxGeometry(2 * p.outer.halfX * OUTLET_FLARE_SCALE, OUTLET_FLARE_HEIGHT, 2 * p.outer.halfZ * OUTLET_FLARE_SCALE).toNonIndexed();
|
|
632
|
+
applyPlanarWorldUvs(funnel);
|
|
515
633
|
}
|
|
516
634
|
funnel.translate(p.x, centerY, p.z);
|
|
517
635
|
return funnel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outlet-lookup.d.ts","sourceRoot":"","sources":["../../src/gutter/outlet-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,qBAAqB,GAAG;IAClC,uEAAuE;IACvE,CAAC,EAAE,MAAM,CAAA;IACT,uDAAuD;IACvD,CAAC,EAAE,MAAM,CAAA;IACT,8DAA8D;IAC9D,CAAC,EAAE,MAAM,CAAA;IACT,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,yEAAyE;IACzE,KAAK,EAAE,WAAW,CAAA;IAClB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;
|
|
1
|
+
{"version":3,"file":"outlet-lookup.d.ts","sourceRoot":"","sources":["../../src/gutter/outlet-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,qBAAqB,GAAG;IAClC,uEAAuE;IACvE,CAAC,EAAE,MAAM,CAAA;IACT,uDAAuD;IACvD,CAAC,EAAE,MAAM,CAAA;IACT,8DAA8D;IAC9D,CAAC,EAAE,MAAM,CAAA;IACT,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,yEAAyE;IACzE,KAAK,EAAE,WAAW,CAAA;IAClB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AA8DD,2FAA2F;AAC3F,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,qBAAqB,GAAG,IAAI,CAM9B;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,GACjB,KAAK,CAAC,qBAAqB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ/C"}
|
|
@@ -11,10 +11,31 @@ function placeOutlet(gutter, outlet, len, size, t) {
|
|
|
11
11
|
if (maxX <= minX)
|
|
12
12
|
return null;
|
|
13
13
|
const x = Math.max(minX, Math.min(maxX, outlet.offset ?? 0));
|
|
14
|
+
const z = profileFloorMidZ(gutter.profile ?? 'k-style', size);
|
|
15
|
+
// Straight run: the along-length X and outward Z are already the
|
|
16
|
+
// mesh-local center. A managed lean-to gutter following a curved wall
|
|
17
|
+
// carries a concentric arc, so the trough floor bends along its length —
|
|
18
|
+
// remap (x, z) onto the same arc the geometry uses so the drop tube mounts
|
|
19
|
+
// on the actual bent floor rather than the straight chord.
|
|
20
|
+
const arc = gutter.arc;
|
|
21
|
+
if (arc && Number.isFinite(arc.radius)) {
|
|
22
|
+
const signedRef = (Math.sign(arc.centerZ) || 1) * arc.radius;
|
|
23
|
+
const phi = (x - arc.centerX) / signedRef;
|
|
24
|
+
const radial = z - arc.centerZ;
|
|
25
|
+
return {
|
|
26
|
+
x: arc.centerX - radial * Math.sin(phi),
|
|
27
|
+
y: -size,
|
|
28
|
+
z: arc.centerZ + radial * Math.cos(phi),
|
|
29
|
+
bore: inner.halfX,
|
|
30
|
+
shape,
|
|
31
|
+
innerHalfX: inner.halfX,
|
|
32
|
+
innerHalfZ: inner.halfZ,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
14
35
|
return {
|
|
15
36
|
x,
|
|
16
37
|
y: -size,
|
|
17
|
-
z
|
|
38
|
+
z,
|
|
18
39
|
bore: inner.halfX,
|
|
19
40
|
shape,
|
|
20
41
|
innerHalfX: inner.halfX,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paint.d.ts","sourceRoot":"","sources":["../../src/gutter/paint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAGvD,eAAO,MAAM,WAAW,EAAE,eAIzB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/gutter/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"parametrics.d.ts","sourceRoot":"","sources":["../../src/gutter/parametrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,iBAAiB,EAAE,oBAAoB,CAAC,UAAU,CAiE9D,CAAA"}
|
|
@@ -14,7 +14,7 @@ export const gutterParametrics = {
|
|
|
14
14
|
{
|
|
15
15
|
label: 'Dimensions',
|
|
16
16
|
fields: [
|
|
17
|
-
{ key: 'length', kind: 'number', unit: 'm', min: 0.2, max:
|
|
17
|
+
{ key: 'length', kind: 'number', unit: 'm', min: 0.2, max: 1000, step: 0.05 },
|
|
18
18
|
{ key: 'size', kind: 'number', unit: 'm', min: 0.05, max: 0.3, step: 0.005 },
|
|
19
19
|
{
|
|
20
20
|
key: 'thickness',
|
|
@@ -54,6 +54,9 @@ export const gutterParametrics = {
|
|
|
54
54
|
],
|
|
55
55
|
},
|
|
56
56
|
],
|
|
57
|
+
onDeleteCascade: (node, nodes) => Object.values(nodes)
|
|
58
|
+
.filter((candidate) => candidate.type === 'downspout' && candidate.gutterId === node.id)
|
|
59
|
+
.map((candidate) => candidate.id),
|
|
57
60
|
// Lazy-loaded section that lists every downspout attached to this
|
|
58
61
|
// gutter and offers an Add button at the bottom. Outlets are created
|
|
59
62
|
// and removed through this panel (and the downspout placement tool) —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/gutter/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,UAAU,EAKhB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/gutter/renderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,UAAU,EAKhB,MAAM,kBAAkB,CAAA;AAwCzB;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,cAAc,GAAI,qBAAqB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,uCA8PhE,CAAA;AAED,eAAe,cAAc,CAAA"}
|
package/dist/gutter/renderer.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useLiveNodeOverrides, useRegistry, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, useNodeEvents, useViewer, } from '@pascal-app/viewer';
|
|
4
|
+
import { createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, resolveMaterialRef, useNodeEvents, useViewer, } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useMemo, useRef } from 'react';
|
|
6
6
|
import * as THREE from 'three';
|
|
7
7
|
import { useShallow } from 'zustand/react/shallow';
|
|
@@ -10,11 +10,25 @@ import { computeGutterMitres, NO_MITRES } from './corner-mitre';
|
|
|
10
10
|
import { computeSharedEaveY } from './eave-align';
|
|
11
11
|
import { computeEaveY } from './eave-snap';
|
|
12
12
|
import { buildGutterGeometry } from './geometry';
|
|
13
|
+
import { segmentForGutterTrimClip } from './trim-clip';
|
|
13
14
|
const defaultMaterial = new THREE.MeshStandardMaterial({
|
|
14
15
|
color: 0xff_ff_ff,
|
|
15
16
|
roughness: 0.7,
|
|
16
17
|
metalness: 0.25,
|
|
17
18
|
});
|
|
19
|
+
function leanToJointMitres(node) {
|
|
20
|
+
const metadata = node.metadata && typeof node.metadata === 'object' && !Array.isArray(node.metadata)
|
|
21
|
+
? node.metadata
|
|
22
|
+
: {};
|
|
23
|
+
const value = metadata.leanToGutterMitres;
|
|
24
|
+
if (!(value && typeof value === 'object' && !Array.isArray(value)))
|
|
25
|
+
return NO_MITRES;
|
|
26
|
+
const mitres = value;
|
|
27
|
+
return {
|
|
28
|
+
left: typeof mitres.left === 'number' && Number.isFinite(mitres.left) ? mitres.left : 0,
|
|
29
|
+
right: typeof mitres.right === 'number' && Number.isFinite(mitres.right) ? mitres.right : 0,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
18
32
|
/**
|
|
19
33
|
* Gutter renderer. Mounts at the eave of the host roof-segment — the
|
|
20
34
|
* gutter hangs level off the eave line (gravity wins; no slope tilt).
|
|
@@ -39,6 +53,7 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
39
53
|
const textures = useViewer((s) => s.textures);
|
|
40
54
|
const colorPreset = useViewer((s) => s.colorPreset);
|
|
41
55
|
const sceneTheme = useViewer((s) => s.sceneTheme);
|
|
56
|
+
const sceneMaterials = useScene((s) => s.materials);
|
|
42
57
|
const overrides = useLiveNodeOverrides((s) => s.get(storeNode.id));
|
|
43
58
|
const node = overrides ? { ...storeNode, ...overrides } : storeNode;
|
|
44
59
|
const segment = useScene((state) => node.roofSegmentId
|
|
@@ -74,6 +89,9 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
74
89
|
if (!roof)
|
|
75
90
|
return [];
|
|
76
91
|
const out = [];
|
|
92
|
+
const managedByLeanTo = typeof node.metadata?.managedByLeanTo === 'string'
|
|
93
|
+
? node.metadata.managedByLeanTo
|
|
94
|
+
: null;
|
|
77
95
|
for (const sid of roof.children ?? []) {
|
|
78
96
|
const s = state.nodes[sid];
|
|
79
97
|
if (s?.type !== 'roof-segment')
|
|
@@ -85,6 +103,21 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
85
103
|
out.push(g);
|
|
86
104
|
}
|
|
87
105
|
}
|
|
106
|
+
if (managedByLeanTo) {
|
|
107
|
+
for (const candidate of Object.values(state.nodes)) {
|
|
108
|
+
if (candidate?.type !== 'gutter' || candidate.id === storeNode.id)
|
|
109
|
+
continue;
|
|
110
|
+
const candidateMetadata = candidate.metadata;
|
|
111
|
+
if (typeof candidateMetadata?.managedByLeanTo !== 'string')
|
|
112
|
+
continue;
|
|
113
|
+
const segment = candidate.roofSegmentId
|
|
114
|
+
? state.nodes[candidate.roofSegmentId]
|
|
115
|
+
: undefined;
|
|
116
|
+
if (!segment || out.some((node) => node.id === segment.id))
|
|
117
|
+
continue;
|
|
118
|
+
out.push(segment, candidate);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
88
121
|
return out;
|
|
89
122
|
}));
|
|
90
123
|
// Mitres AND the run's shared eave height come from the same sibling
|
|
@@ -133,8 +166,13 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
133
166
|
effectiveSegment?.roofType,
|
|
134
167
|
mitreNodes,
|
|
135
168
|
]);
|
|
169
|
+
const jointMitres = leanToJointMitres(node);
|
|
170
|
+
const renderedMitres = {
|
|
171
|
+
left: jointMitres.left || mitres.left,
|
|
172
|
+
right: jointMitres.right || mitres.right,
|
|
173
|
+
};
|
|
136
174
|
// biome-ignore lint/correctness/useExhaustiveDependencies: deps deliberately list the build inputs; depending on the whole object would rebuild on unrelated field changes.
|
|
137
|
-
const geometry = useMemo(() => buildGutterGeometry(node,
|
|
175
|
+
const geometry = useMemo(() => buildGutterGeometry(node, renderedMitres), [
|
|
138
176
|
node.length,
|
|
139
177
|
node.size,
|
|
140
178
|
node.thickness,
|
|
@@ -143,11 +181,14 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
143
181
|
node.endCapRight,
|
|
144
182
|
node.hangerStyle,
|
|
145
183
|
node.hangerSpacing,
|
|
184
|
+
node.arc?.centerX,
|
|
185
|
+
node.arc?.centerZ,
|
|
186
|
+
node.arc?.radius,
|
|
146
187
|
// Value-compare the outlets array so the CSG drills only rebuild
|
|
147
188
|
// when an outlet's offset / diameter changes or one is added.
|
|
148
189
|
JSON.stringify(node.outlets),
|
|
149
|
-
|
|
150
|
-
|
|
190
|
+
renderedMitres.left,
|
|
191
|
+
renderedMitres.right,
|
|
151
192
|
]);
|
|
152
193
|
useEffect(() => () => geometry.dispose(), [geometry]);
|
|
153
194
|
// Paint surface: explicit material wins, then preset, then the cached
|
|
@@ -162,20 +203,35 @@ const GutterRenderer = ({ node: storeNode }) => {
|
|
|
162
203
|
// visible face. FrontSide is therefore sufficient and DoubleSide is not
|
|
163
204
|
// needed.
|
|
164
205
|
const material = useMemo(() => {
|
|
165
|
-
if (!textures
|
|
206
|
+
if (!textures) {
|
|
207
|
+
return createSurfaceRoleMaterial('roof', colorPreset, THREE.FrontSide, sceneTheme);
|
|
208
|
+
}
|
|
209
|
+
const slotMaterial = resolveMaterialRef(node.slots?.gutter, sceneMaterials, shading);
|
|
210
|
+
if (slotMaterial)
|
|
211
|
+
return slotMaterial;
|
|
212
|
+
if (!node.material && !node.materialPreset) {
|
|
166
213
|
return createSurfaceRoleMaterial('roof', colorPreset, THREE.FrontSide, sceneTheme);
|
|
167
214
|
}
|
|
168
215
|
return node.material
|
|
169
216
|
? createMaterial(node.material, shading)
|
|
170
217
|
: (createMaterialFromPresetRef(node.materialPreset, shading) ?? defaultMaterial);
|
|
171
|
-
}, [
|
|
218
|
+
}, [
|
|
219
|
+
textures,
|
|
220
|
+
colorPreset,
|
|
221
|
+
sceneTheme,
|
|
222
|
+
shading,
|
|
223
|
+
node.slots?.gutter,
|
|
224
|
+
node.material,
|
|
225
|
+
node.materialPreset,
|
|
226
|
+
sceneMaterials,
|
|
227
|
+
]);
|
|
172
228
|
// Map gutter-local geometry into the host segment's local frame (where the
|
|
173
229
|
// trim cut prisms live) — same pose the inner mesh group is mounted with
|
|
174
230
|
// (position [x, liveEaveY, z] + yaw). Computed before the early return so the
|
|
175
231
|
// hook order stays stable.
|
|
176
232
|
const liveEaveYForClip = sharedEaveY ?? (effectiveSegment ? computeEaveY(effectiveSegment) : 0);
|
|
177
233
|
const localToSegment = useMemo(() => new THREE.Matrix4().compose(new THREE.Vector3(node.position[0] ?? 0, liveEaveYForClip, node.position[2] ?? 0), new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), node.rotation ?? 0), new THREE.Vector3(1, 1, 1)), [node.position[0], node.position[2], node.rotation, liveEaveYForClip]);
|
|
178
|
-
const clippedGeometry = useSegmentTrimClippedGeometry(geometry, effectiveSegment, localToSegment);
|
|
234
|
+
const clippedGeometry = useSegmentTrimClippedGeometry(geometry, segmentForGutterTrimClip(node, effectiveSegment), localToSegment);
|
|
179
235
|
if (!segment || !effectiveSegment)
|
|
180
236
|
return null;
|
|
181
237
|
// `node.position` is segment-local — the placement tool resolves the
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim-clip.d.ts","sourceRoot":"","sources":["../../src/gutter/trim-clip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEnE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAC/B,OAAO,EAAE,eAAe,GAAG,SAAS,GACnC,eAAe,GAAG,SAAS,CAI7B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function segmentForGutterTrimClip(gutter, segment) {
|
|
2
|
+
// Segment trim cutters are axis-aligned boxes. On a long arc, the back cutter
|
|
3
|
+
// crosses the gutter twice and removes two unrelated sections of the run.
|
|
4
|
+
return gutter.arc && segment?.arc ? undefined : segment;
|
|
5
|
+
}
|
|
@@ -14,9 +14,9 @@ export const hvacEquipmentParametrics = {
|
|
|
14
14
|
{
|
|
15
15
|
label: 'Cabinet',
|
|
16
16
|
fields: [
|
|
17
|
-
{ key: 'width', kind: 'number', unit: 'm', min: 0.3, max:
|
|
18
|
-
{ key: 'depth', kind: 'number', unit: 'm', min: 0.3, max:
|
|
19
|
-
{ key: 'height', kind: 'number', unit: 'm', min: 0.4, max:
|
|
17
|
+
{ key: 'width', kind: 'number', unit: 'm', min: 0.3, max: 1000, step: 0.05 },
|
|
18
|
+
{ key: 'depth', kind: 'number', unit: 'm', min: 0.3, max: 1000, step: 0.05 },
|
|
19
|
+
{ key: 'height', kind: 'number', unit: 'm', min: 0.4, max: 1000, step: 0.05 },
|
|
20
20
|
],
|
|
21
21
|
},
|
|
22
22
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/hvac-equipment/tool.tsx"],"names":[],"mappings":"AA4BA;;;;;;;GAOG;AACH,QAAA,MAAM,iBAAiB,0CAiHtB,CAAA;AAED,eAAe,iBAAiB,CAAA"}
|
|
@@ -5,6 +5,7 @@ import { isGridSnapActive, isMagneticSnapActive, triggerSFX, useEditor } from '@
|
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { Html } from '@react-three/drei';
|
|
7
7
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import { subscribeAccessorySnapping } from '../shared/accessory-snapping';
|
|
8
9
|
import { alignDrawPoint, clearDrawAlignment } from '../shared/draw-alignment';
|
|
9
10
|
import { LevelOffsetGroup } from '../shared/level-offset-group';
|
|
10
11
|
import { hvacEquipmentDefinition } from './definition';
|
|
@@ -55,9 +56,13 @@ const HvacEquipmentTool = () => {
|
|
|
55
56
|
// it); `'off'` is the no-snap bypass.
|
|
56
57
|
const resolveAligned = (event) => alignDrawPoint(resolve(event), {
|
|
57
58
|
applySnap: isMagneticSnapActive(),
|
|
58
|
-
bypass:
|
|
59
|
+
bypass: !isMagneticSnapActive(),
|
|
59
60
|
});
|
|
60
|
-
|
|
61
|
+
let lastEvent = null;
|
|
62
|
+
const onMove = (event) => {
|
|
63
|
+
lastEvent = event;
|
|
64
|
+
setCursor(resolveAligned(event));
|
|
65
|
+
};
|
|
61
66
|
const onClick = (event) => {
|
|
62
67
|
const position = resolveAligned(event);
|
|
63
68
|
const unit = HvacEquipmentNode.parse({
|
|
@@ -91,10 +96,15 @@ const HvacEquipmentTool = () => {
|
|
|
91
96
|
setYaw(yawRef.current);
|
|
92
97
|
triggerSFX('sfx:item-rotate');
|
|
93
98
|
};
|
|
99
|
+
const unsubscribeSnapping = subscribeAccessorySnapping(() => {
|
|
100
|
+
if (lastEvent)
|
|
101
|
+
onMove(lastEvent);
|
|
102
|
+
});
|
|
94
103
|
emitter.on('grid:move', onMove);
|
|
95
104
|
emitter.on('grid:click', onClick);
|
|
96
105
|
window.addEventListener('keydown', onKeyDown, true);
|
|
97
106
|
return () => {
|
|
107
|
+
unsubscribeSnapping();
|
|
98
108
|
emitter.off('grid:move', onMove);
|
|
99
109
|
emitter.off('grid:click', onClick);
|
|
100
110
|
window.removeEventListener('keydown', onKeyDown, true);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeDefinition } from '@pascal-app/core';
|
|
2
|
+
import { ImportedMeshNode } from './schema';
|
|
3
|
+
/** Format-neutral fallback for imported objects without a parametric node. */
|
|
4
|
+
export declare const importedMeshDefinition: NodeDefinition<typeof ImportedMeshNode>;
|
|
5
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,OAAO,gBAAgB,CAiC1E,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { buildImportedMeshFloorplan } from './floorplan';
|
|
2
|
+
import { buildImportedMeshGeometry } from './geometry';
|
|
3
|
+
import { ImportedMeshNode } from './schema';
|
|
4
|
+
/** Format-neutral fallback for imported objects without a parametric node. */
|
|
5
|
+
export const importedMeshDefinition = {
|
|
6
|
+
kind: 'imported-mesh',
|
|
7
|
+
schemaVersion: 1,
|
|
8
|
+
schema: ImportedMeshNode,
|
|
9
|
+
category: 'structure',
|
|
10
|
+
snapProfile: 'item',
|
|
11
|
+
defaults: () => ({
|
|
12
|
+
object: 'node',
|
|
13
|
+
parentId: null,
|
|
14
|
+
visible: true,
|
|
15
|
+
metadata: {},
|
|
16
|
+
position: [0, 0, 0],
|
|
17
|
+
rotation: [0, 0, 0],
|
|
18
|
+
primitives: [],
|
|
19
|
+
}),
|
|
20
|
+
capabilities: {
|
|
21
|
+
selectable: { hitVolume: 'bbox' },
|
|
22
|
+
duplicable: true,
|
|
23
|
+
deletable: true,
|
|
24
|
+
presettable: false,
|
|
25
|
+
},
|
|
26
|
+
geometryKey: (node) => `${node.id}:${node.primitives.length}`,
|
|
27
|
+
geometry: buildImportedMeshGeometry,
|
|
28
|
+
floorplan: buildImportedMeshFloorplan,
|
|
29
|
+
presentation: {
|
|
30
|
+
label: 'Imported Mesh',
|
|
31
|
+
description: 'Geometry preserved from an imported model when no native Pascal shape exists.',
|
|
32
|
+
icon: { kind: 'url', src: '/icons/item.webp' },
|
|
33
|
+
hidden: true,
|
|
34
|
+
},
|
|
35
|
+
mcp: {
|
|
36
|
+
description: 'Imported triangle geometry with source identity and properties in metadata.',
|
|
37
|
+
},
|
|
38
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FloorplanGeometry, GeometryContext, ImportedMeshNode } from '@pascal-app/core';
|
|
2
|
+
/** A compact plan proxy for imported geometry, derived from its XZ bounds. */
|
|
3
|
+
export declare function buildImportedMeshFloorplan(node: ImportedMeshNode, ctx: GeometryContext): FloorplanGeometry | null;
|
|
4
|
+
//# sourceMappingURL=floorplan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorplan.d.ts","sourceRoot":"","sources":["../../src/imported-mesh/floorplan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,eAAe,GACnB,iBAAiB,GAAG,IAAI,CAgC1B"}
|