@pascal-app/nodes 0.1.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/dist/box-vent/definition.d.ts +30 -0
- package/dist/box-vent/definition.d.ts.map +1 -0
- package/dist/box-vent/definition.js +210 -0
- package/dist/box-vent/floorplan.d.ts +15 -0
- package/dist/box-vent/floorplan.d.ts.map +1 -0
- package/dist/box-vent/floorplan.js +187 -0
- package/dist/box-vent/geometry.d.ts +40 -0
- package/dist/box-vent/geometry.d.ts.map +1 -0
- package/dist/box-vent/geometry.js +421 -0
- package/dist/box-vent/index.d.ts +4 -0
- package/dist/box-vent/index.d.ts.map +1 -0
- package/dist/box-vent/index.js +3 -0
- package/dist/box-vent/move-tool.d.ts +14 -0
- package/dist/box-vent/move-tool.d.ts.map +1 -0
- package/dist/box-vent/move-tool.js +217 -0
- package/dist/box-vent/panel.d.ts +14 -0
- package/dist/box-vent/panel.d.ts.map +1 -0
- package/dist/box-vent/panel.js +143 -0
- package/dist/box-vent/parametrics.d.ts +9 -0
- package/dist/box-vent/parametrics.d.ts.map +1 -0
- package/dist/box-vent/parametrics.js +35 -0
- package/dist/box-vent/preview.d.ts +17 -0
- package/dist/box-vent/preview.d.ts.map +1 -0
- package/dist/box-vent/preview.js +41 -0
- package/dist/box-vent/renderer.d.ts +26 -0
- package/dist/box-vent/renderer.d.ts.map +1 -0
- package/dist/box-vent/renderer.js +127 -0
- package/dist/box-vent/schema.d.ts +2 -0
- package/dist/box-vent/schema.d.ts.map +1 -0
- package/dist/box-vent/schema.js +3 -0
- package/dist/box-vent/tool.d.ts +13 -0
- package/dist/box-vent/tool.d.ts.map +1 -0
- package/dist/box-vent/tool.js +116 -0
- package/dist/building/definition.d.ts +12 -0
- package/dist/building/definition.d.ts.map +1 -0
- package/dist/building/definition.js +53 -0
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -0
- package/dist/building/index.js +1 -0
- package/dist/building/move-tool.d.ts +6 -0
- package/dist/building/move-tool.d.ts.map +1 -0
- package/dist/building/move-tool.js +187 -0
- package/dist/building/parametrics.d.ts +3 -0
- package/dist/building/parametrics.d.ts.map +1 -0
- package/dist/building/parametrics.js +3 -0
- package/dist/building/renderer.d.ts +6 -0
- package/dist/building/renderer.d.ts.map +1 -0
- package/dist/building/renderer.js +12 -0
- package/dist/building/schema.d.ts +2 -0
- package/dist/building/schema.d.ts.map +1 -0
- package/dist/building/schema.js +1 -0
- package/dist/cabinet/animation.d.ts +5 -0
- package/dist/cabinet/animation.d.ts.map +1 -0
- package/dist/cabinet/animation.js +48 -0
- package/dist/cabinet/compartment-card.d.ts +17 -0
- package/dist/cabinet/compartment-card.d.ts.map +1 -0
- package/dist/cabinet/compartment-card.js +145 -0
- package/dist/cabinet/continuous-placement.d.ts +49 -0
- package/dist/cabinet/continuous-placement.d.ts.map +1 -0
- package/dist/cabinet/continuous-placement.js +110 -0
- package/dist/cabinet/cooktop-flame.d.ts +14 -0
- package/dist/cabinet/cooktop-flame.d.ts.map +1 -0
- package/dist/cabinet/cooktop-flame.js +115 -0
- package/dist/cabinet/definition.d.ts +26 -0
- package/dist/cabinet/definition.d.ts.map +1 -0
- package/dist/cabinet/definition.js +1016 -0
- package/dist/cabinet/floorplan-move.d.ts +15 -0
- package/dist/cabinet/floorplan-move.d.ts.map +1 -0
- package/dist/cabinet/floorplan-move.js +192 -0
- package/dist/cabinet/floorplan-overrides.d.ts +16 -0
- package/dist/cabinet/floorplan-overrides.d.ts.map +1 -0
- package/dist/cabinet/floorplan-overrides.js +47 -0
- package/dist/cabinet/floorplan.d.ts +4 -0
- package/dist/cabinet/floorplan.d.ts.map +1 -0
- package/dist/cabinet/floorplan.js +311 -0
- package/dist/cabinet/geometry/cooktop.d.ts +20 -0
- package/dist/cabinet/geometry/cooktop.d.ts.map +1 -0
- package/dist/cabinet/geometry/cooktop.js +269 -0
- package/dist/cabinet/geometry/dishwasher.d.ts +4 -0
- package/dist/cabinet/geometry/dishwasher.d.ts.map +1 -0
- package/dist/cabinet/geometry/dishwasher.js +100 -0
- package/dist/cabinet/geometry/fridge.d.ts +5 -0
- package/dist/cabinet/geometry/fridge.d.ts.map +1 -0
- package/dist/cabinet/geometry/fridge.js +393 -0
- package/dist/cabinet/geometry/fronts.d.ts +9 -0
- package/dist/cabinet/geometry/fronts.d.ts.map +1 -0
- package/dist/cabinet/geometry/fronts.js +468 -0
- package/dist/cabinet/geometry/hood.d.ts +6 -0
- package/dist/cabinet/geometry/hood.d.ts.map +1 -0
- package/dist/cabinet/geometry/hood.js +108 -0
- package/dist/cabinet/geometry/oven-microwave.d.ts +5 -0
- package/dist/cabinet/geometry/oven-microwave.d.ts.map +1 -0
- package/dist/cabinet/geometry/oven-microwave.js +292 -0
- package/dist/cabinet/geometry/pantry.d.ts +5 -0
- package/dist/cabinet/geometry/pantry.d.ts.map +1 -0
- package/dist/cabinet/geometry/pantry.js +80 -0
- package/dist/cabinet/geometry/run.d.ts +6 -0
- package/dist/cabinet/geometry/run.d.ts.map +1 -0
- package/dist/cabinet/geometry/run.js +124 -0
- package/dist/cabinet/geometry/shared.d.ts +46 -0
- package/dist/cabinet/geometry/shared.d.ts.map +1 -0
- package/dist/cabinet/geometry/shared.js +356 -0
- package/dist/cabinet/geometry/sink.d.ts +29 -0
- package/dist/cabinet/geometry/sink.d.ts.map +1 -0
- package/dist/cabinet/geometry/sink.js +262 -0
- package/dist/cabinet/geometry.d.ts +6 -0
- package/dist/cabinet/geometry.d.ts.map +1 -0
- package/dist/cabinet/geometry.js +219 -0
- package/dist/cabinet/index.d.ts +5 -0
- package/dist/cabinet/index.d.ts.map +1 -0
- package/dist/cabinet/index.js +4 -0
- package/dist/cabinet/interaction.d.ts +15 -0
- package/dist/cabinet/interaction.d.ts.map +1 -0
- package/dist/cabinet/interaction.js +109 -0
- package/dist/cabinet/move-frame.d.ts +3 -0
- package/dist/cabinet/move-frame.d.ts.map +1 -0
- package/dist/cabinet/move-frame.js +252 -0
- package/dist/cabinet/paint.d.ts +2 -0
- package/dist/cabinet/paint.d.ts.map +1 -0
- package/dist/cabinet/paint.js +17 -0
- package/dist/cabinet/panel.d.ts +2 -0
- package/dist/cabinet/panel.d.ts.map +1 -0
- package/dist/cabinet/panel.js +356 -0
- package/dist/cabinet/parametrics.d.ts +4 -0
- package/dist/cabinet/parametrics.d.ts.map +1 -0
- package/dist/cabinet/parametrics.js +46 -0
- package/dist/cabinet/placement-status.d.ts +7 -0
- package/dist/cabinet/placement-status.d.ts.map +1 -0
- package/dist/cabinet/placement-status.js +6 -0
- package/dist/cabinet/placement-type.d.ts +9 -0
- package/dist/cabinet/placement-type.d.ts.map +1 -0
- package/dist/cabinet/placement-type.js +13 -0
- package/dist/cabinet/presets.d.ts +10 -0
- package/dist/cabinet/presets.d.ts.map +1 -0
- package/dist/cabinet/presets.js +168 -0
- package/dist/cabinet/quick-action-icons.d.ts +13 -0
- package/dist/cabinet/quick-action-icons.d.ts.map +1 -0
- package/dist/cabinet/quick-action-icons.js +29 -0
- package/dist/cabinet/quick-actions.d.ts +6 -0
- package/dist/cabinet/quick-actions.d.ts.map +1 -0
- package/dist/cabinet/quick-actions.js +203 -0
- package/dist/cabinet/run-layout.d.ts +94 -0
- package/dist/cabinet/run-layout.d.ts.map +1 -0
- package/dist/cabinet/run-layout.js +315 -0
- package/dist/cabinet/run-ops.d.ts +140 -0
- package/dist/cabinet/run-ops.d.ts.map +1 -0
- package/dist/cabinet/run-ops.js +1472 -0
- package/dist/cabinet/run-panel.d.ts +17 -0
- package/dist/cabinet/run-panel.d.ts.map +1 -0
- package/dist/cabinet/run-panel.js +220 -0
- package/dist/cabinet/scene-action.d.ts +8 -0
- package/dist/cabinet/scene-action.d.ts.map +1 -0
- package/dist/cabinet/scene-action.js +130 -0
- package/dist/cabinet/schema.d.ts +2 -0
- package/dist/cabinet/schema.d.ts.map +1 -0
- package/dist/cabinet/schema.js +1 -0
- package/dist/cabinet/slots.d.ts +4 -0
- package/dist/cabinet/slots.d.ts.map +1 -0
- package/dist/cabinet/slots.js +24 -0
- package/dist/cabinet/stack-transitions.d.ts +12 -0
- package/dist/cabinet/stack-transitions.d.ts.map +1 -0
- package/dist/cabinet/stack-transitions.js +112 -0
- package/dist/cabinet/stack.d.ts +102 -0
- package/dist/cabinet/stack.d.ts.map +1 -0
- package/dist/cabinet/stack.js +388 -0
- package/dist/cabinet/system.d.ts +13 -0
- package/dist/cabinet/system.d.ts.map +1 -0
- package/dist/cabinet/system.js +116 -0
- package/dist/cabinet/tool.d.ts +3 -0
- package/dist/cabinet/tool.d.ts.map +1 -0
- package/dist/cabinet/tool.js +850 -0
- package/dist/cabinet/tree-structure.d.ts +13 -0
- package/dist/cabinet/tree-structure.d.ts.map +1 -0
- package/dist/cabinet/tree-structure.js +138 -0
- package/dist/cabinet/wall-snap.d.ts +66 -0
- package/dist/cabinet/wall-snap.d.ts.map +1 -0
- package/dist/cabinet/wall-snap.js +255 -0
- package/dist/ceiling/boundary-editor.d.ts +17 -0
- package/dist/ceiling/boundary-editor.d.ts.map +1 -0
- package/dist/ceiling/boundary-editor.js +118 -0
- package/dist/ceiling/definition.d.ts +20 -0
- package/dist/ceiling/definition.d.ts.map +1 -0
- package/dist/ceiling/definition.js +161 -0
- package/dist/ceiling/floorplan-affordances.d.ts +181 -0
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -0
- package/dist/ceiling/floorplan-affordances.js +28 -0
- package/dist/ceiling/floorplan-move.d.ts +12 -0
- package/dist/ceiling/floorplan-move.d.ts.map +1 -0
- package/dist/ceiling/floorplan-move.js +16 -0
- package/dist/ceiling/floorplan.d.ts +9 -0
- package/dist/ceiling/floorplan.d.ts.map +1 -0
- package/dist/ceiling/floorplan.js +90 -0
- package/dist/ceiling/hole-editor.d.ts +10 -0
- package/dist/ceiling/hole-editor.d.ts.map +1 -0
- package/dist/ceiling/hole-editor.js +45 -0
- package/dist/ceiling/index.d.ts +3 -0
- package/dist/ceiling/index.d.ts.map +1 -0
- package/dist/ceiling/index.js +2 -0
- package/dist/ceiling/materials.d.ts +15 -0
- package/dist/ceiling/materials.d.ts.map +1 -0
- package/dist/ceiling/materials.js +61 -0
- package/dist/ceiling/move-tool.d.ts +6 -0
- package/dist/ceiling/move-tool.d.ts.map +1 -0
- package/dist/ceiling/move-tool.js +264 -0
- package/dist/ceiling/paint.d.ts +9 -0
- package/dist/ceiling/paint.d.ts.map +1 -0
- package/dist/ceiling/paint.js +37 -0
- package/dist/ceiling/panel.d.ts +11 -0
- package/dist/ceiling/panel.d.ts.map +1 -0
- package/dist/ceiling/panel.js +138 -0
- package/dist/ceiling/parametrics.d.ts +11 -0
- package/dist/ceiling/parametrics.d.ts.map +1 -0
- package/dist/ceiling/parametrics.js +16 -0
- package/dist/ceiling/renderer.d.ts +6 -0
- package/dist/ceiling/renderer.d.ts.map +1 -0
- package/dist/ceiling/renderer.js +87 -0
- package/dist/ceiling/schema.d.ts +2 -0
- package/dist/ceiling/schema.d.ts.map +1 -0
- package/dist/ceiling/schema.js +1 -0
- package/dist/ceiling/slots.d.ts +6 -0
- package/dist/ceiling/slots.d.ts.map +1 -0
- package/dist/ceiling/slots.js +7 -0
- package/dist/ceiling/system.d.ts +10 -0
- package/dist/ceiling/system.d.ts.map +1 -0
- package/dist/ceiling/system.js +14 -0
- package/dist/ceiling/tool.d.ts +3 -0
- package/dist/ceiling/tool.d.ts.map +1 -0
- package/dist/ceiling/tool.js +227 -0
- package/dist/chimney/definition.d.ts +18 -0
- package/dist/chimney/definition.d.ts.map +1 -0
- package/dist/chimney/definition.js +387 -0
- package/dist/chimney/floorplan.d.ts +17 -0
- package/dist/chimney/floorplan.d.ts.map +1 -0
- package/dist/chimney/floorplan.js +190 -0
- package/dist/chimney/geometry.d.ts +29 -0
- package/dist/chimney/geometry.d.ts.map +1 -0
- package/dist/chimney/geometry.js +500 -0
- package/dist/chimney/holes.d.ts +30 -0
- package/dist/chimney/holes.d.ts.map +1 -0
- package/dist/chimney/holes.js +310 -0
- package/dist/chimney/index.d.ts +4 -0
- package/dist/chimney/index.d.ts.map +1 -0
- package/dist/chimney/index.js +3 -0
- package/dist/chimney/move-tool.d.ts +19 -0
- package/dist/chimney/move-tool.d.ts.map +1 -0
- package/dist/chimney/move-tool.js +286 -0
- package/dist/chimney/paint.d.ts +24 -0
- package/dist/chimney/paint.d.ts.map +1 -0
- package/dist/chimney/paint.js +96 -0
- package/dist/chimney/panel.d.ts +2 -0
- package/dist/chimney/panel.d.ts.map +1 -0
- package/dist/chimney/panel.js +350 -0
- package/dist/chimney/parametrics.d.ts +4 -0
- package/dist/chimney/parametrics.d.ts.map +1 -0
- package/dist/chimney/parametrics.js +177 -0
- package/dist/chimney/presets.d.ts +27 -0
- package/dist/chimney/presets.d.ts.map +1 -0
- package/dist/chimney/presets.js +93 -0
- package/dist/chimney/preview.d.ts +14 -0
- package/dist/chimney/preview.d.ts.map +1 -0
- package/dist/chimney/preview.js +74 -0
- package/dist/chimney/renderer.d.ts +17 -0
- package/dist/chimney/renderer.d.ts.map +1 -0
- package/dist/chimney/renderer.js +193 -0
- package/dist/chimney/roof-trim.d.ts +23 -0
- package/dist/chimney/roof-trim.d.ts.map +1 -0
- package/dist/chimney/roof-trim.js +94 -0
- package/dist/chimney/schema.d.ts +2 -0
- package/dist/chimney/schema.d.ts.map +1 -0
- package/dist/chimney/schema.js +1 -0
- package/dist/chimney/tool.d.ts +3 -0
- package/dist/chimney/tool.d.ts.map +1 -0
- package/dist/chimney/tool.js +126 -0
- package/dist/column/definition.d.ts +21 -0
- package/dist/column/definition.d.ts.map +1 -0
- package/dist/column/definition.js +375 -0
- package/dist/column/floorplan-affordances.d.ts +32 -0
- package/dist/column/floorplan-affordances.d.ts.map +1 -0
- package/dist/column/floorplan-affordances.js +126 -0
- package/dist/column/floorplan-move.d.ts +11 -0
- package/dist/column/floorplan-move.d.ts.map +1 -0
- package/dist/column/floorplan-move.js +66 -0
- package/dist/column/floorplan.d.ts +15 -0
- package/dist/column/floorplan.d.ts.map +1 -0
- package/dist/column/floorplan.js +238 -0
- package/dist/column/index.d.ts +2 -0
- package/dist/column/index.d.ts.map +1 -0
- package/dist/column/index.js +1 -0
- package/dist/column/paint.d.ts +2 -0
- package/dist/column/paint.d.ts.map +1 -0
- package/dist/column/paint.js +15 -0
- package/dist/column/panel.d.ts +2 -0
- package/dist/column/panel.d.ts.map +1 -0
- package/dist/column/panel.js +414 -0
- package/dist/column/parametrics.d.ts +12 -0
- package/dist/column/parametrics.d.ts.map +1 -0
- package/dist/column/parametrics.js +21 -0
- package/dist/column/renderer.d.ts +20 -0
- package/dist/column/renderer.d.ts.map +1 -0
- package/dist/column/renderer.js +1016 -0
- package/dist/column/schema.d.ts +2 -0
- package/dist/column/schema.d.ts.map +1 -0
- package/dist/column/schema.js +1 -0
- package/dist/column/slots.d.ts +9 -0
- package/dist/column/slots.d.ts.map +1 -0
- package/dist/column/slots.js +19 -0
- package/dist/column/tool.d.ts +14 -0
- package/dist/column/tool.d.ts.map +1 -0
- package/dist/column/tool.js +133 -0
- package/dist/cupola/definition.d.ts +11 -0
- package/dist/cupola/definition.d.ts.map +1 -0
- package/dist/cupola/definition.js +143 -0
- package/dist/cupola/floorplan.d.ts +9 -0
- package/dist/cupola/floorplan.d.ts.map +1 -0
- package/dist/cupola/floorplan.js +89 -0
- package/dist/cupola/geometry.d.ts +23 -0
- package/dist/cupola/geometry.d.ts.map +1 -0
- package/dist/cupola/geometry.js +262 -0
- package/dist/cupola/index.d.ts +4 -0
- package/dist/cupola/index.d.ts.map +1 -0
- package/dist/cupola/index.js +3 -0
- package/dist/cupola/move-tool.d.ts +12 -0
- package/dist/cupola/move-tool.d.ts.map +1 -0
- package/dist/cupola/move-tool.js +206 -0
- package/dist/cupola/panel.d.ts +7 -0
- package/dist/cupola/panel.d.ts.map +1 -0
- package/dist/cupola/panel.js +106 -0
- package/dist/cupola/parametrics.d.ts +9 -0
- package/dist/cupola/parametrics.d.ts.map +1 -0
- package/dist/cupola/parametrics.js +30 -0
- package/dist/cupola/preview.d.ts +13 -0
- package/dist/cupola/preview.d.ts.map +1 -0
- package/dist/cupola/preview.js +37 -0
- package/dist/cupola/renderer.d.ts +12 -0
- package/dist/cupola/renderer.d.ts.map +1 -0
- package/dist/cupola/renderer.js +66 -0
- package/dist/cupola/schema.d.ts +2 -0
- package/dist/cupola/schema.d.ts.map +1 -0
- package/dist/cupola/schema.js +3 -0
- package/dist/cupola/tool.d.ts +8 -0
- package/dist/cupola/tool.d.ts.map +1 -0
- package/dist/cupola/tool.js +105 -0
- package/dist/door/definition.d.ts +23 -0
- package/dist/door/definition.d.ts.map +1 -0
- package/dist/door/definition.js +257 -0
- package/dist/door/door-math.d.ts +23 -0
- package/dist/door/door-math.d.ts.map +1 -0
- package/dist/door/door-math.js +38 -0
- package/dist/door/floorplan-affordances.d.ts +21 -0
- package/dist/door/floorplan-affordances.d.ts.map +1 -0
- package/dist/door/floorplan-affordances.js +102 -0
- package/dist/door/floorplan-move.d.ts +18 -0
- package/dist/door/floorplan-move.d.ts.map +1 -0
- package/dist/door/floorplan-move.js +239 -0
- package/dist/door/floorplan.d.ts +37 -0
- package/dist/door/floorplan.d.ts.map +1 -0
- package/dist/door/floorplan.js +702 -0
- package/dist/door/index.d.ts +3 -0
- package/dist/door/index.d.ts.map +1 -0
- package/dist/door/index.js +2 -0
- package/dist/door/move-tool.d.ts +6 -0
- package/dist/door/move-tool.d.ts.map +1 -0
- package/dist/door/move-tool.js +898 -0
- package/dist/door/paint.d.ts +8 -0
- package/dist/door/paint.d.ts.map +1 -0
- package/dist/door/paint.js +11 -0
- package/dist/door/panel.d.ts +2 -0
- package/dist/door/panel.d.ts.map +1 -0
- package/dist/door/panel.js +576 -0
- package/dist/door/parametrics.d.ts +12 -0
- package/dist/door/parametrics.d.ts.map +1 -0
- package/dist/door/parametrics.js +27 -0
- package/dist/door/preview.d.ts +18 -0
- package/dist/door/preview.d.ts.map +1 -0
- package/dist/door/preview.js +36 -0
- package/dist/door/renderer.d.ts +6 -0
- package/dist/door/renderer.d.ts.map +1 -0
- package/dist/door/renderer.js +26 -0
- package/dist/door/schema.d.ts +2 -0
- package/dist/door/schema.d.ts.map +1 -0
- package/dist/door/schema.js +1 -0
- package/dist/door/slots.d.ts +9 -0
- package/dist/door/slots.d.ts.map +1 -0
- package/dist/door/slots.js +20 -0
- package/dist/door/system.d.ts +18 -0
- package/dist/door/system.d.ts.map +1 -0
- package/dist/door/system.js +22 -0
- package/dist/door/tool.d.ts +15 -0
- package/dist/door/tool.d.ts.map +1 -0
- package/dist/door/tool.js +555 -0
- package/dist/dormer/csg-geometry.d.ts +104 -0
- package/dist/dormer/csg-geometry.d.ts.map +1 -0
- package/dist/dormer/csg-geometry.js +755 -0
- package/dist/dormer/definition.d.ts +20 -0
- package/dist/dormer/definition.d.ts.map +1 -0
- package/dist/dormer/definition.js +491 -0
- package/dist/dormer/floorplan.d.ts +23 -0
- package/dist/dormer/floorplan.d.ts.map +1 -0
- package/dist/dormer/floorplan.js +193 -0
- package/dist/dormer/geometry.d.ts +42 -0
- package/dist/dormer/geometry.d.ts.map +1 -0
- package/dist/dormer/geometry.js +63 -0
- package/dist/dormer/index.d.ts +5 -0
- package/dist/dormer/index.d.ts.map +1 -0
- package/dist/dormer/index.js +3 -0
- package/dist/dormer/move-tool.d.ts +16 -0
- package/dist/dormer/move-tool.d.ts.map +1 -0
- package/dist/dormer/move-tool.js +136 -0
- package/dist/dormer/paint.d.ts +24 -0
- package/dist/dormer/paint.d.ts.map +1 -0
- package/dist/dormer/paint.js +103 -0
- package/dist/dormer/panel-actions-section.d.ts +10 -0
- package/dist/dormer/panel-actions-section.d.ts.map +1 -0
- package/dist/dormer/panel-actions-section.js +11 -0
- package/dist/dormer/panel-position-section.d.ts +17 -0
- package/dist/dormer/panel-position-section.d.ts.map +1 -0
- package/dist/dormer/panel-position-section.js +162 -0
- package/dist/dormer/panel-window-section.d.ts +14 -0
- package/dist/dormer/panel-window-section.d.ts.map +1 -0
- package/dist/dormer/panel-window-section.js +59 -0
- package/dist/dormer/panel.d.ts +2 -0
- package/dist/dormer/panel.d.ts.map +1 -0
- package/dist/dormer/panel.js +134 -0
- package/dist/dormer/parametrics.d.ts +4 -0
- package/dist/dormer/parametrics.d.ts.map +1 -0
- package/dist/dormer/parametrics.js +110 -0
- package/dist/dormer/placement-guides.d.ts +28 -0
- package/dist/dormer/placement-guides.d.ts.map +1 -0
- package/dist/dormer/placement-guides.js +170 -0
- package/dist/dormer/preview.d.ts +7 -0
- package/dist/dormer/preview.d.ts.map +1 -0
- package/dist/dormer/preview.js +29 -0
- package/dist/dormer/renderer.d.ts +8 -0
- package/dist/dormer/renderer.d.ts.map +1 -0
- package/dist/dormer/renderer.js +134 -0
- package/dist/dormer/schema.d.ts +3 -0
- package/dist/dormer/schema.d.ts.map +1 -0
- package/dist/dormer/schema.js +1 -0
- package/dist/dormer/tool.d.ts +11 -0
- package/dist/dormer/tool.d.ts.map +1 -0
- package/dist/dormer/tool.js +69 -0
- package/dist/dormer/use-dormer-placement.d.ts +44 -0
- package/dist/dormer/use-dormer-placement.d.ts.map +1 -0
- package/dist/dormer/use-dormer-placement.js +166 -0
- package/dist/dormer/window-assembly.d.ts +22 -0
- package/dist/dormer/window-assembly.d.ts.map +1 -0
- package/dist/dormer/window-assembly.js +111 -0
- package/dist/dormer/window-frame.d.ts +24 -0
- package/dist/dormer/window-frame.d.ts.map +1 -0
- package/dist/dormer/window-frame.js +100 -0
- package/dist/downspout/definition.d.ts +17 -0
- package/dist/downspout/definition.d.ts.map +1 -0
- package/dist/downspout/definition.js +173 -0
- package/dist/downspout/geometry.d.ts +5 -0
- package/dist/downspout/geometry.d.ts.map +1 -0
- package/dist/downspout/geometry.js +204 -0
- package/dist/downspout/index.d.ts +4 -0
- package/dist/downspout/index.d.ts.map +1 -0
- package/dist/downspout/index.js +3 -0
- package/dist/downspout/inspector-editors.d.ts +25 -0
- package/dist/downspout/inspector-editors.d.ts.map +1 -0
- package/dist/downspout/inspector-editors.js +61 -0
- package/dist/downspout/parametrics.d.ts +4 -0
- package/dist/downspout/parametrics.d.ts.map +1 -0
- package/dist/downspout/parametrics.js +66 -0
- package/dist/downspout/preview.d.ts +19 -0
- package/dist/downspout/preview.d.ts.map +1 -0
- package/dist/downspout/preview.js +48 -0
- package/dist/downspout/renderer.d.ts +22 -0
- package/dist/downspout/renderer.d.ts.map +1 -0
- package/dist/downspout/renderer.js +153 -0
- package/dist/downspout/routing.d.ts +81 -0
- package/dist/downspout/routing.d.ts.map +1 -0
- package/dist/downspout/routing.js +131 -0
- package/dist/downspout/schema.d.ts +2 -0
- package/dist/downspout/schema.d.ts.map +1 -0
- package/dist/downspout/schema.js +3 -0
- package/dist/downspout/tool.d.ts +3 -0
- package/dist/downspout/tool.d.ts.map +1 -0
- package/dist/downspout/tool.js +148 -0
- package/dist/duct-fitting/definition.d.ts +12 -0
- package/dist/duct-fitting/definition.d.ts.map +1 -0
- package/dist/duct-fitting/definition.js +124 -0
- package/dist/duct-fitting/floorplan.d.ts +12 -0
- package/dist/duct-fitting/floorplan.d.ts.map +1 -0
- package/dist/duct-fitting/floorplan.js +59 -0
- package/dist/duct-fitting/geometry.d.ts +26 -0
- package/dist/duct-fitting/geometry.d.ts.map +1 -0
- package/dist/duct-fitting/geometry.js +341 -0
- package/dist/duct-fitting/index.d.ts +5 -0
- package/dist/duct-fitting/index.d.ts.map +1 -0
- package/dist/duct-fitting/index.js +4 -0
- package/dist/duct-fitting/inspector-editors.d.ts +6 -0
- package/dist/duct-fitting/inspector-editors.d.ts.map +1 -0
- package/dist/duct-fitting/inspector-editors.js +16 -0
- package/dist/duct-fitting/move-tool.d.ts +23 -0
- package/dist/duct-fitting/move-tool.d.ts.map +1 -0
- package/dist/duct-fitting/move-tool.js +302 -0
- package/dist/duct-fitting/parametrics.d.ts +4 -0
- package/dist/duct-fitting/parametrics.d.ts.map +1 -0
- package/dist/duct-fitting/parametrics.js +328 -0
- package/dist/duct-fitting/ports.d.ts +32 -0
- package/dist/duct-fitting/ports.d.ts.map +1 -0
- package/dist/duct-fitting/ports.js +140 -0
- package/dist/duct-fitting/schema.d.ts +2 -0
- package/dist/duct-fitting/schema.d.ts.map +1 -0
- package/dist/duct-fitting/schema.js +1 -0
- package/dist/duct-fitting/selection.d.ts +27 -0
- package/dist/duct-fitting/selection.d.ts.map +1 -0
- package/dist/duct-fitting/selection.js +677 -0
- package/dist/duct-fitting/tool.d.ts +18 -0
- package/dist/duct-fitting/tool.d.ts.map +1 -0
- package/dist/duct-fitting/tool.js +160 -0
- package/dist/duct-segment/definition.d.ts +4 -0
- package/dist/duct-segment/definition.d.ts.map +1 -0
- package/dist/duct-segment/definition.js +180 -0
- package/dist/duct-segment/floorplan.d.ts +12 -0
- package/dist/duct-segment/floorplan.d.ts.map +1 -0
- package/dist/duct-segment/floorplan.js +121 -0
- package/dist/duct-segment/geometry.d.ts +99 -0
- package/dist/duct-segment/geometry.d.ts.map +1 -0
- package/dist/duct-segment/geometry.js +368 -0
- package/dist/duct-segment/index.d.ts +4 -0
- package/dist/duct-segment/index.d.ts.map +1 -0
- package/dist/duct-segment/index.js +3 -0
- package/dist/duct-segment/move-tool.d.ts +22 -0
- package/dist/duct-segment/move-tool.d.ts.map +1 -0
- package/dist/duct-segment/move-tool.js +347 -0
- package/dist/duct-segment/parametrics.d.ts +4 -0
- package/dist/duct-segment/parametrics.d.ts.map +1 -0
- package/dist/duct-segment/parametrics.js +165 -0
- package/dist/duct-segment/schema.d.ts +2 -0
- package/dist/duct-segment/schema.d.ts.map +1 -0
- package/dist/duct-segment/schema.js +1 -0
- package/dist/duct-segment/selection.d.ts +34 -0
- package/dist/duct-segment/selection.d.ts.map +1 -0
- package/dist/duct-segment/selection.js +1395 -0
- package/dist/duct-segment/tool.d.ts +3 -0
- package/dist/duct-segment/tool.d.ts.map +1 -0
- package/dist/duct-segment/tool.js +924 -0
- package/dist/duct-terminal/definition.d.ts +13 -0
- package/dist/duct-terminal/definition.d.ts.map +1 -0
- package/dist/duct-terminal/definition.js +87 -0
- package/dist/duct-terminal/floorplan.d.ts +11 -0
- package/dist/duct-terminal/floorplan.d.ts.map +1 -0
- package/dist/duct-terminal/floorplan.js +61 -0
- package/dist/duct-terminal/geometry.d.ts +14 -0
- package/dist/duct-terminal/geometry.d.ts.map +1 -0
- package/dist/duct-terminal/geometry.js +78 -0
- package/dist/duct-terminal/index.d.ts +5 -0
- package/dist/duct-terminal/index.d.ts.map +1 -0
- package/dist/duct-terminal/index.js +4 -0
- package/dist/duct-terminal/parametrics.d.ts +4 -0
- package/dist/duct-terminal/parametrics.d.ts.map +1 -0
- package/dist/duct-terminal/parametrics.js +69 -0
- package/dist/duct-terminal/ports.d.ts +27 -0
- package/dist/duct-terminal/ports.d.ts.map +1 -0
- package/dist/duct-terminal/ports.js +60 -0
- package/dist/duct-terminal/schema.d.ts +2 -0
- package/dist/duct-terminal/schema.d.ts.map +1 -0
- package/dist/duct-terminal/schema.js +1 -0
- package/dist/duct-terminal/tool.d.ts +13 -0
- package/dist/duct-terminal/tool.d.ts.map +1 -0
- package/dist/duct-terminal/tool.js +360 -0
- package/dist/elevator/definition.d.ts +11 -0
- package/dist/elevator/definition.d.ts.map +1 -0
- package/dist/elevator/definition.js +255 -0
- package/dist/elevator/floorplan-affordances.d.ts +21 -0
- package/dist/elevator/floorplan-affordances.d.ts.map +1 -0
- package/dist/elevator/floorplan-affordances.js +94 -0
- package/dist/elevator/floorplan.d.ts +3 -0
- package/dist/elevator/floorplan.d.ts.map +1 -0
- package/dist/elevator/floorplan.js +360 -0
- package/dist/elevator/index.d.ts +2 -0
- package/dist/elevator/index.d.ts.map +1 -0
- package/dist/elevator/index.js +1 -0
- package/dist/elevator/paint.d.ts +2 -0
- package/dist/elevator/paint.d.ts.map +1 -0
- package/dist/elevator/paint.js +6 -0
- package/dist/elevator/panel.d.ts +2 -0
- package/dist/elevator/panel.d.ts.map +1 -0
- package/dist/elevator/panel.js +397 -0
- package/dist/elevator/parametrics.d.ts +3 -0
- package/dist/elevator/parametrics.d.ts.map +1 -0
- package/dist/elevator/parametrics.js +4 -0
- package/dist/elevator/renderer.d.ts +6 -0
- package/dist/elevator/renderer.d.ts.map +1 -0
- package/dist/elevator/renderer.js +583 -0
- package/dist/elevator/schema.d.ts +2 -0
- package/dist/elevator/schema.d.ts.map +1 -0
- package/dist/elevator/schema.js +1 -0
- package/dist/elevator/slots.d.ts +8 -0
- package/dist/elevator/slots.d.ts.map +1 -0
- package/dist/elevator/slots.js +17 -0
- package/dist/elevator/system.d.ts +8 -0
- package/dist/elevator/system.d.ts.map +1 -0
- package/dist/elevator/system.js +13 -0
- package/dist/eyebrow-vent/definition.d.ts +12 -0
- package/dist/eyebrow-vent/definition.d.ts.map +1 -0
- package/dist/eyebrow-vent/definition.js +150 -0
- package/dist/eyebrow-vent/floorplan.d.ts +9 -0
- package/dist/eyebrow-vent/floorplan.d.ts.map +1 -0
- package/dist/eyebrow-vent/floorplan.js +86 -0
- package/dist/eyebrow-vent/geometry.d.ts +25 -0
- package/dist/eyebrow-vent/geometry.d.ts.map +1 -0
- package/dist/eyebrow-vent/geometry.js +313 -0
- package/dist/eyebrow-vent/index.d.ts +4 -0
- package/dist/eyebrow-vent/index.d.ts.map +1 -0
- package/dist/eyebrow-vent/index.js +3 -0
- package/dist/eyebrow-vent/move-tool.d.ts +13 -0
- package/dist/eyebrow-vent/move-tool.d.ts.map +1 -0
- package/dist/eyebrow-vent/move-tool.js +207 -0
- package/dist/eyebrow-vent/panel.d.ts +7 -0
- package/dist/eyebrow-vent/panel.d.ts.map +1 -0
- package/dist/eyebrow-vent/panel.js +106 -0
- package/dist/eyebrow-vent/parametrics.d.ts +9 -0
- package/dist/eyebrow-vent/parametrics.d.ts.map +1 -0
- package/dist/eyebrow-vent/parametrics.js +31 -0
- package/dist/eyebrow-vent/preview.d.ts +13 -0
- package/dist/eyebrow-vent/preview.d.ts.map +1 -0
- package/dist/eyebrow-vent/preview.js +37 -0
- package/dist/eyebrow-vent/renderer.d.ts +12 -0
- package/dist/eyebrow-vent/renderer.d.ts.map +1 -0
- package/dist/eyebrow-vent/renderer.js +68 -0
- package/dist/eyebrow-vent/schema.d.ts +2 -0
- package/dist/eyebrow-vent/schema.d.ts.map +1 -0
- package/dist/eyebrow-vent/schema.js +3 -0
- package/dist/eyebrow-vent/tool.d.ts +9 -0
- package/dist/eyebrow-vent/tool.d.ts.map +1 -0
- package/dist/eyebrow-vent/tool.js +111 -0
- package/dist/fence/actions/move-endpoint.d.ts +32 -0
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -0
- package/dist/fence/actions/move-endpoint.js +201 -0
- package/dist/fence/curve-tool.d.ts +17 -0
- package/dist/fence/curve-tool.d.ts.map +1 -0
- package/dist/fence/curve-tool.js +122 -0
- package/dist/fence/definition.d.ts +17 -0
- package/dist/fence/definition.d.ts.map +1 -0
- package/dist/fence/definition.js +281 -0
- package/dist/fence/floorplan-affordances.d.ts +31 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -0
- package/dist/fence/floorplan-affordances.js +271 -0
- package/dist/fence/floorplan-move.d.ts +10 -0
- package/dist/fence/floorplan-move.d.ts.map +1 -0
- package/dist/fence/floorplan-move.js +162 -0
- package/dist/fence/floorplan.d.ts +4 -0
- package/dist/fence/floorplan.d.ts.map +1 -0
- package/dist/fence/floorplan.js +452 -0
- package/dist/fence/geometry.d.ts +6 -0
- package/dist/fence/geometry.d.ts.map +1 -0
- package/dist/fence/geometry.js +65 -0
- package/dist/fence/index.d.ts +3 -0
- package/dist/fence/index.d.ts.map +1 -0
- package/dist/fence/index.js +2 -0
- package/dist/fence/inspector-editors.d.ts +24 -0
- package/dist/fence/inspector-editors.d.ts.map +1 -0
- package/dist/fence/inspector-editors.js +43 -0
- package/dist/fence/move-control-point-tool.d.ts +9 -0
- package/dist/fence/move-control-point-tool.d.ts.map +1 -0
- package/dist/fence/move-control-point-tool.js +91 -0
- package/dist/fence/move-endpoint-tool.d.ts +27 -0
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -0
- package/dist/fence/move-endpoint-tool.js +190 -0
- package/dist/fence/move-tangent-tool.d.ts +10 -0
- package/dist/fence/move-tangent-tool.d.ts.map +1 -0
- package/dist/fence/move-tangent-tool.js +88 -0
- package/dist/fence/move-tool.d.ts +6 -0
- package/dist/fence/move-tool.d.ts.map +1 -0
- package/dist/fence/move-tool.js +271 -0
- package/dist/fence/paint.d.ts +2 -0
- package/dist/fence/paint.d.ts.map +1 -0
- package/dist/fence/paint.js +17 -0
- package/dist/fence/parametrics.d.ts +16 -0
- package/dist/fence/parametrics.d.ts.map +1 -0
- package/dist/fence/parametrics.js +86 -0
- package/dist/fence/schema.d.ts +10 -0
- package/dist/fence/schema.d.ts.map +1 -0
- package/dist/fence/schema.js +9 -0
- package/dist/fence/slots.d.ts +10 -0
- package/dist/fence/slots.d.ts.map +1 -0
- package/dist/fence/slots.js +23 -0
- package/dist/fence/tool.d.ts +3 -0
- package/dist/fence/tool.d.ts.map +1 -0
- package/dist/fence/tool.js +563 -0
- package/dist/guide/definition.d.ts +10 -0
- package/dist/guide/definition.d.ts.map +1 -0
- package/dist/guide/definition.js +52 -0
- package/dist/guide/index.d.ts +2 -0
- package/dist/guide/index.d.ts.map +1 -0
- package/dist/guide/index.js +1 -0
- package/dist/guide/parametrics.d.ts +3 -0
- package/dist/guide/parametrics.d.ts.map +1 -0
- package/dist/guide/parametrics.js +3 -0
- package/dist/guide/renderer.d.ts +6 -0
- package/dist/guide/renderer.d.ts.map +1 -0
- package/dist/guide/renderer.js +52 -0
- package/dist/guide/schema.d.ts +2 -0
- package/dist/guide/schema.d.ts.map +1 -0
- package/dist/guide/schema.js +1 -0
- package/dist/guide/system.d.ts +3 -0
- package/dist/guide/system.d.ts.map +1 -0
- package/dist/guide/system.js +3 -0
- package/dist/gutter/corner-mitre.d.ts +88 -0
- package/dist/gutter/corner-mitre.d.ts.map +1 -0
- package/dist/gutter/corner-mitre.js +176 -0
- package/dist/gutter/definition.d.ts +19 -0
- package/dist/gutter/definition.d.ts.map +1 -0
- package/dist/gutter/definition.js +164 -0
- package/dist/gutter/downspouts-panel.d.ts +8 -0
- package/dist/gutter/downspouts-panel.d.ts.map +1 -0
- package/dist/gutter/downspouts-panel.js +111 -0
- package/dist/gutter/eave-align.d.ts +33 -0
- package/dist/gutter/eave-align.d.ts.map +1 -0
- package/dist/gutter/eave-align.js +50 -0
- package/dist/gutter/eave-snap.d.ts +45 -0
- package/dist/gutter/eave-snap.d.ts.map +1 -0
- package/dist/gutter/eave-snap.js +128 -0
- package/dist/gutter/floorplan.d.ts +18 -0
- package/dist/gutter/floorplan.d.ts.map +1 -0
- package/dist/gutter/floorplan.js +274 -0
- package/dist/gutter/geometry.d.ts +39 -0
- package/dist/gutter/geometry.d.ts.map +1 -0
- package/dist/gutter/geometry.js +532 -0
- package/dist/gutter/index.d.ts +4 -0
- package/dist/gutter/index.d.ts.map +1 -0
- package/dist/gutter/index.js +3 -0
- package/dist/gutter/length-snap.d.ts +16 -0
- package/dist/gutter/length-snap.d.ts.map +1 -0
- package/dist/gutter/length-snap.js +177 -0
- package/dist/gutter/move-tool.d.ts +21 -0
- package/dist/gutter/move-tool.d.ts.map +1 -0
- package/dist/gutter/move-tool.js +223 -0
- package/dist/gutter/outlet-lookup.d.ts +43 -0
- package/dist/gutter/outlet-lookup.d.ts.map +1 -0
- package/dist/gutter/outlet-lookup.js +50 -0
- package/dist/gutter/parametrics.d.ts +4 -0
- package/dist/gutter/parametrics.d.ts.map +1 -0
- package/dist/gutter/parametrics.js +62 -0
- package/dist/gutter/preview.d.ts +22 -0
- package/dist/gutter/preview.d.ts.map +1 -0
- package/dist/gutter/preview.js +57 -0
- package/dist/gutter/profile-geometry.d.ts +44 -0
- package/dist/gutter/profile-geometry.d.ts.map +1 -0
- package/dist/gutter/profile-geometry.js +56 -0
- package/dist/gutter/renderer.d.ts +22 -0
- package/dist/gutter/renderer.d.ts.map +1 -0
- package/dist/gutter/renderer.js +202 -0
- package/dist/gutter/schema.d.ts +2 -0
- package/dist/gutter/schema.d.ts.map +1 -0
- package/dist/gutter/schema.js +3 -0
- package/dist/gutter/tool.d.ts +25 -0
- package/dist/gutter/tool.d.ts.map +1 -0
- package/dist/gutter/tool.js +124 -0
- package/dist/hvac-equipment/definition.d.ts +13 -0
- package/dist/hvac-equipment/definition.d.ts.map +1 -0
- package/dist/hvac-equipment/definition.js +92 -0
- package/dist/hvac-equipment/floorplan.d.ts +10 -0
- package/dist/hvac-equipment/floorplan.d.ts.map +1 -0
- package/dist/hvac-equipment/floorplan.js +71 -0
- package/dist/hvac-equipment/geometry.d.ts +20 -0
- package/dist/hvac-equipment/geometry.d.ts.map +1 -0
- package/dist/hvac-equipment/geometry.js +701 -0
- package/dist/hvac-equipment/index.d.ts +5 -0
- package/dist/hvac-equipment/index.d.ts.map +1 -0
- package/dist/hvac-equipment/index.js +4 -0
- package/dist/hvac-equipment/parametrics.d.ts +4 -0
- package/dist/hvac-equipment/parametrics.d.ts.map +1 -0
- package/dist/hvac-equipment/parametrics.js +101 -0
- package/dist/hvac-equipment/ports.d.ts +36 -0
- package/dist/hvac-equipment/ports.d.ts.map +1 -0
- package/dist/hvac-equipment/ports.js +91 -0
- package/dist/hvac-equipment/schema.d.ts +2 -0
- package/dist/hvac-equipment/schema.d.ts.map +1 -0
- package/dist/hvac-equipment/schema.js +1 -0
- package/dist/hvac-equipment/tool.d.ts +11 -0
- package/dist/hvac-equipment/tool.d.ts.map +1 -0
- package/dist/hvac-equipment/tool.js +103 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/item/definition.d.ts +32 -0
- package/dist/item/definition.d.ts.map +1 -0
- package/dist/item/definition.js +309 -0
- package/dist/item/floorplan-move.d.ts +3 -0
- package/dist/item/floorplan-move.d.ts.map +1 -0
- package/dist/item/floorplan-move.js +307 -0
- package/dist/item/floorplan.d.ts +3 -0
- package/dist/item/floorplan.d.ts.map +1 -0
- package/dist/item/floorplan.js +204 -0
- package/dist/item/index.d.ts +3 -0
- package/dist/item/index.d.ts.map +1 -0
- package/dist/item/index.js +2 -0
- package/dist/item/model-loader.d.ts +18 -0
- package/dist/item/model-loader.d.ts.map +1 -0
- package/dist/item/model-loader.js +131 -0
- package/dist/item/move-tool.d.ts +6 -0
- package/dist/item/move-tool.d.ts.map +1 -0
- package/dist/item/move-tool.js +150 -0
- package/dist/item/paint.d.ts +3 -0
- package/dist/item/paint.d.ts.map +1 -0
- package/dist/item/paint.js +214 -0
- package/dist/item/panel.d.ts +16 -0
- package/dist/item/panel.d.ts.map +1 -0
- package/dist/item/panel.js +103 -0
- package/dist/item/parametrics.d.ts +12 -0
- package/dist/item/parametrics.d.ts.map +1 -0
- package/dist/item/parametrics.js +12 -0
- package/dist/item/renderer.d.ts +6 -0
- package/dist/item/renderer.d.ts.map +1 -0
- package/dist/item/renderer.js +425 -0
- package/dist/item/schema.d.ts +2 -0
- package/dist/item/schema.d.ts.map +1 -0
- package/dist/item/schema.js +1 -0
- package/dist/item/system.d.ts +11 -0
- package/dist/item/system.d.ts.map +1 -0
- package/dist/item/system.js +15 -0
- package/dist/item/tool.d.ts +3 -0
- package/dist/item/tool.d.ts.map +1 -0
- package/dist/item/tool.js +46 -0
- package/dist/level/definition.d.ts +9 -0
- package/dist/level/definition.d.ts.map +1 -0
- package/dist/level/definition.js +55 -0
- package/dist/level/index.d.ts +2 -0
- package/dist/level/index.d.ts.map +1 -0
- package/dist/level/index.js +1 -0
- package/dist/level/parametrics.d.ts +3 -0
- package/dist/level/parametrics.d.ts.map +1 -0
- package/dist/level/parametrics.js +3 -0
- package/dist/level/renderer.d.ts +6 -0
- package/dist/level/renderer.d.ts.map +1 -0
- package/dist/level/renderer.js +12 -0
- package/dist/level/schema.d.ts +2 -0
- package/dist/level/schema.d.ts.map +1 -0
- package/dist/level/schema.js +1 -0
- package/dist/level/system.d.ts +3 -0
- package/dist/level/system.d.ts.map +1 -0
- package/dist/level/system.js +3 -0
- package/dist/lineset/definition.d.ts +15 -0
- package/dist/lineset/definition.d.ts.map +1 -0
- package/dist/lineset/definition.js +118 -0
- package/dist/lineset/floorplan.d.ts +10 -0
- package/dist/lineset/floorplan.d.ts.map +1 -0
- package/dist/lineset/floorplan.js +78 -0
- package/dist/lineset/geometry.d.ts +20 -0
- package/dist/lineset/geometry.d.ts.map +1 -0
- package/dist/lineset/geometry.js +87 -0
- package/dist/lineset/index.d.ts +4 -0
- package/dist/lineset/index.d.ts.map +1 -0
- package/dist/lineset/index.js +3 -0
- package/dist/lineset/move-tool.d.ts +27 -0
- package/dist/lineset/move-tool.d.ts.map +1 -0
- package/dist/lineset/move-tool.js +256 -0
- package/dist/lineset/parametrics.d.ts +4 -0
- package/dist/lineset/parametrics.d.ts.map +1 -0
- package/dist/lineset/parametrics.js +34 -0
- package/dist/lineset/schema.d.ts +2 -0
- package/dist/lineset/schema.d.ts.map +1 -0
- package/dist/lineset/schema.js +1 -0
- package/dist/lineset/selection.d.ts +3 -0
- package/dist/lineset/selection.d.ts.map +1 -0
- package/dist/lineset/selection.js +3 -0
- package/dist/lineset/tool.d.ts +3 -0
- package/dist/lineset/tool.d.ts.map +1 -0
- package/dist/lineset/tool.js +298 -0
- package/dist/liquid-line/definition.d.ts +16 -0
- package/dist/liquid-line/definition.d.ts.map +1 -0
- package/dist/liquid-line/definition.js +110 -0
- package/dist/liquid-line/floorplan.d.ts +10 -0
- package/dist/liquid-line/floorplan.d.ts.map +1 -0
- package/dist/liquid-line/floorplan.js +66 -0
- package/dist/liquid-line/geometry.d.ts +16 -0
- package/dist/liquid-line/geometry.d.ts.map +1 -0
- package/dist/liquid-line/geometry.js +57 -0
- package/dist/liquid-line/index.d.ts +5 -0
- package/dist/liquid-line/index.d.ts.map +1 -0
- package/dist/liquid-line/index.js +4 -0
- package/dist/liquid-line/move-tool.d.ts +23 -0
- package/dist/liquid-line/move-tool.d.ts.map +1 -0
- package/dist/liquid-line/move-tool.js +231 -0
- package/dist/liquid-line/options.d.ts +16 -0
- package/dist/liquid-line/options.d.ts.map +1 -0
- package/dist/liquid-line/options.js +6 -0
- package/dist/liquid-line/parametrics.d.ts +4 -0
- package/dist/liquid-line/parametrics.d.ts.map +1 -0
- package/dist/liquid-line/parametrics.js +17 -0
- package/dist/liquid-line/schema.d.ts +2 -0
- package/dist/liquid-line/schema.d.ts.map +1 -0
- package/dist/liquid-line/schema.js +1 -0
- package/dist/liquid-line/selection.d.ts +3 -0
- package/dist/liquid-line/selection.d.ts.map +1 -0
- package/dist/liquid-line/selection.js +3 -0
- package/dist/liquid-line/tool.d.ts +3 -0
- package/dist/liquid-line/tool.d.ts.map +1 -0
- package/dist/liquid-line/tool.js +517 -0
- package/dist/measurement/definition.d.ts +4 -0
- package/dist/measurement/definition.d.ts.map +1 -0
- package/dist/measurement/definition.js +61 -0
- package/dist/measurement/edit.d.ts +9 -0
- package/dist/measurement/edit.d.ts.map +1 -0
- package/dist/measurement/edit.js +97 -0
- package/dist/measurement/floorplan-affordance.d.ts +3 -0
- package/dist/measurement/floorplan-affordance.d.ts.map +1 -0
- package/dist/measurement/floorplan-affordance.js +90 -0
- package/dist/measurement/floorplan.d.ts +3 -0
- package/dist/measurement/floorplan.d.ts.map +1 -0
- package/dist/measurement/floorplan.js +195 -0
- package/dist/measurement/index.d.ts +3 -0
- package/dist/measurement/index.d.ts.map +1 -0
- package/dist/measurement/index.js +2 -0
- package/dist/measurement/renderer.d.ts +8 -0
- package/dist/measurement/renderer.d.ts.map +1 -0
- package/dist/measurement/renderer.js +285 -0
- package/dist/measurement/resolve.d.ts +42 -0
- package/dist/measurement/resolve.d.ts.map +1 -0
- package/dist/measurement/resolve.js +207 -0
- package/dist/measurement/schema.d.ts +2 -0
- package/dist/measurement/schema.d.ts.map +1 -0
- package/dist/measurement/schema.js +1 -0
- package/dist/measurement/selection.d.ts +3 -0
- package/dist/measurement/selection.d.ts.map +1 -0
- package/dist/measurement/selection.js +259 -0
- package/dist/measurement/smart-surface.d.ts +4 -0
- package/dist/measurement/smart-surface.d.ts.map +1 -0
- package/dist/measurement/smart-surface.js +21 -0
- package/dist/measurement/smart-tool.d.ts +3 -0
- package/dist/measurement/smart-tool.d.ts.map +1 -0
- package/dist/measurement/smart-tool.js +264 -0
- package/dist/measurement/surface-query.d.ts +90 -0
- package/dist/measurement/surface-query.d.ts.map +1 -0
- package/dist/measurement/surface-query.js +519 -0
- package/dist/measurement/tool-router.d.ts +2 -0
- package/dist/measurement/tool-router.d.ts.map +1 -0
- package/dist/measurement/tool-router.js +9 -0
- package/dist/measurement/tool.d.ts +62 -0
- package/dist/measurement/tool.d.ts.map +1 -0
- package/dist/measurement/tool.js +1342 -0
- package/dist/pipe-fitting/definition.d.ts +10 -0
- package/dist/pipe-fitting/definition.d.ts.map +1 -0
- package/dist/pipe-fitting/definition.js +91 -0
- package/dist/pipe-fitting/floorplan.d.ts +10 -0
- package/dist/pipe-fitting/floorplan.d.ts.map +1 -0
- package/dist/pipe-fitting/floorplan.js +50 -0
- package/dist/pipe-fitting/geometry.d.ts +11 -0
- package/dist/pipe-fitting/geometry.d.ts.map +1 -0
- package/dist/pipe-fitting/geometry.js +31 -0
- package/dist/pipe-fitting/index.d.ts +5 -0
- package/dist/pipe-fitting/index.d.ts.map +1 -0
- package/dist/pipe-fitting/index.js +4 -0
- package/dist/pipe-fitting/move-tool.d.ts +30 -0
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -0
- package/dist/pipe-fitting/move-tool.js +312 -0
- package/dist/pipe-fitting/parametrics.d.ts +4 -0
- package/dist/pipe-fitting/parametrics.d.ts.map +1 -0
- package/dist/pipe-fitting/parametrics.js +105 -0
- package/dist/pipe-fitting/ports.d.ts +26 -0
- package/dist/pipe-fitting/ports.d.ts.map +1 -0
- package/dist/pipe-fitting/ports.js +93 -0
- package/dist/pipe-fitting/schema.d.ts +2 -0
- package/dist/pipe-fitting/schema.d.ts.map +1 -0
- package/dist/pipe-fitting/schema.js +1 -0
- package/dist/pipe-fitting/selection.d.ts +3 -0
- package/dist/pipe-fitting/selection.d.ts.map +1 -0
- package/dist/pipe-fitting/selection.js +579 -0
- package/dist/pipe-fitting/tool.d.ts +19 -0
- package/dist/pipe-fitting/tool.d.ts.map +1 -0
- package/dist/pipe-fitting/tool.js +162 -0
- package/dist/pipe-segment/definition.d.ts +14 -0
- package/dist/pipe-segment/definition.d.ts.map +1 -0
- package/dist/pipe-segment/definition.js +116 -0
- package/dist/pipe-segment/floorplan.d.ts +9 -0
- package/dist/pipe-segment/floorplan.d.ts.map +1 -0
- package/dist/pipe-segment/floorplan.js +87 -0
- package/dist/pipe-segment/geometry.d.ts +16 -0
- package/dist/pipe-segment/geometry.d.ts.map +1 -0
- package/dist/pipe-segment/geometry.js +54 -0
- package/dist/pipe-segment/index.d.ts +4 -0
- package/dist/pipe-segment/index.d.ts.map +1 -0
- package/dist/pipe-segment/index.js +3 -0
- package/dist/pipe-segment/move-tool.d.ts +25 -0
- package/dist/pipe-segment/move-tool.d.ts.map +1 -0
- package/dist/pipe-segment/move-tool.js +254 -0
- package/dist/pipe-segment/parametrics.d.ts +4 -0
- package/dist/pipe-segment/parametrics.d.ts.map +1 -0
- package/dist/pipe-segment/parametrics.js +33 -0
- package/dist/pipe-segment/schema.d.ts +2 -0
- package/dist/pipe-segment/schema.d.ts.map +1 -0
- package/dist/pipe-segment/schema.js +1 -0
- package/dist/pipe-segment/selection.d.ts +31 -0
- package/dist/pipe-segment/selection.d.ts.map +1 -0
- package/dist/pipe-segment/selection.js +841 -0
- package/dist/pipe-segment/tool.d.ts +3 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -0
- package/dist/pipe-segment/tool.js +595 -0
- package/dist/pipe-trap/definition.d.ts +10 -0
- package/dist/pipe-trap/definition.d.ts.map +1 -0
- package/dist/pipe-trap/definition.js +59 -0
- package/dist/pipe-trap/floorplan.d.ts +10 -0
- package/dist/pipe-trap/floorplan.d.ts.map +1 -0
- package/dist/pipe-trap/floorplan.js +41 -0
- package/dist/pipe-trap/geometry.d.ts +16 -0
- package/dist/pipe-trap/geometry.d.ts.map +1 -0
- package/dist/pipe-trap/geometry.js +74 -0
- package/dist/pipe-trap/index.d.ts +5 -0
- package/dist/pipe-trap/index.d.ts.map +1 -0
- package/dist/pipe-trap/index.js +4 -0
- package/dist/pipe-trap/parametrics.d.ts +4 -0
- package/dist/pipe-trap/parametrics.d.ts.map +1 -0
- package/dist/pipe-trap/parametrics.js +16 -0
- package/dist/pipe-trap/ports.d.ts +11 -0
- package/dist/pipe-trap/ports.d.ts.map +1 -0
- package/dist/pipe-trap/ports.js +32 -0
- package/dist/pipe-trap/schema.d.ts +2 -0
- package/dist/pipe-trap/schema.d.ts.map +1 -0
- package/dist/pipe-trap/schema.js +1 -0
- package/dist/pipe-trap/tool.d.ts +9 -0
- package/dist/pipe-trap/tool.d.ts.map +1 -0
- package/dist/pipe-trap/tool.js +99 -0
- package/dist/ridge-vent/definition.d.ts +16 -0
- package/dist/ridge-vent/definition.d.ts.map +1 -0
- package/dist/ridge-vent/definition.js +195 -0
- package/dist/ridge-vent/floorplan.d.ts +15 -0
- package/dist/ridge-vent/floorplan.d.ts.map +1 -0
- package/dist/ridge-vent/floorplan.js +121 -0
- package/dist/ridge-vent/geometry.d.ts +22 -0
- package/dist/ridge-vent/geometry.d.ts.map +1 -0
- package/dist/ridge-vent/geometry.js +526 -0
- package/dist/ridge-vent/index.d.ts +4 -0
- package/dist/ridge-vent/index.d.ts.map +1 -0
- package/dist/ridge-vent/index.js +3 -0
- package/dist/ridge-vent/move-tool.d.ts +12 -0
- package/dist/ridge-vent/move-tool.d.ts.map +1 -0
- package/dist/ridge-vent/move-tool.js +210 -0
- package/dist/ridge-vent/panel.d.ts +7 -0
- package/dist/ridge-vent/panel.d.ts.map +1 -0
- package/dist/ridge-vent/panel.js +118 -0
- package/dist/ridge-vent/parametrics.d.ts +4 -0
- package/dist/ridge-vent/parametrics.d.ts.map +1 -0
- package/dist/ridge-vent/parametrics.js +28 -0
- package/dist/ridge-vent/preview.d.ts +7 -0
- package/dist/ridge-vent/preview.d.ts.map +1 -0
- package/dist/ridge-vent/preview.js +31 -0
- package/dist/ridge-vent/renderer.d.ts +20 -0
- package/dist/ridge-vent/renderer.d.ts.map +1 -0
- package/dist/ridge-vent/renderer.js +205 -0
- package/dist/ridge-vent/schema.d.ts +2 -0
- package/dist/ridge-vent/schema.d.ts.map +1 -0
- package/dist/ridge-vent/schema.js +2 -0
- package/dist/ridge-vent/tool.d.ts +8 -0
- package/dist/ridge-vent/tool.d.ts.map +1 -0
- package/dist/ridge-vent/tool.js +130 -0
- package/dist/roof/definition.d.ts +16 -0
- package/dist/roof/definition.d.ts.map +1 -0
- package/dist/roof/definition.js +170 -0
- package/dist/roof/floorplan.d.ts +21 -0
- package/dist/roof/floorplan.d.ts.map +1 -0
- package/dist/roof/floorplan.js +271 -0
- package/dist/roof/index.d.ts +3 -0
- package/dist/roof/index.d.ts.map +1 -0
- package/dist/roof/index.js +2 -0
- package/dist/roof/panel.d.ts +2 -0
- package/dist/roof/panel.d.ts.map +1 -0
- package/dist/roof/panel.js +214 -0
- package/dist/roof/parametrics.d.ts +3 -0
- package/dist/roof/parametrics.d.ts.map +1 -0
- package/dist/roof/parametrics.js +4 -0
- package/dist/roof/renderer.d.ts +6 -0
- package/dist/roof/renderer.d.ts.map +1 -0
- package/dist/roof/renderer.js +79 -0
- package/dist/roof/roof-materials.d.ts +5 -0
- package/dist/roof/roof-materials.d.ts.map +1 -0
- package/dist/roof/roof-materials.js +43 -0
- package/dist/roof/schema.d.ts +2 -0
- package/dist/roof/schema.d.ts.map +1 -0
- package/dist/roof/schema.js +1 -0
- package/dist/roof/system.d.ts +3 -0
- package/dist/roof/system.d.ts.map +1 -0
- package/dist/roof/system.js +3 -0
- package/dist/roof-segment/definition.d.ts +10 -0
- package/dist/roof-segment/definition.d.ts.map +1 -0
- package/dist/roof-segment/definition.js +305 -0
- package/dist/roof-segment/floorplan-affordances.d.ts +31 -0
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -0
- package/dist/roof-segment/floorplan-affordances.js +170 -0
- package/dist/roof-segment/floorplan.d.ts +41 -0
- package/dist/roof-segment/floorplan.d.ts.map +1 -0
- package/dist/roof-segment/floorplan.js +265 -0
- package/dist/roof-segment/index.d.ts +2 -0
- package/dist/roof-segment/index.d.ts.map +1 -0
- package/dist/roof-segment/index.js +1 -0
- package/dist/roof-segment/measurement.d.ts +4 -0
- package/dist/roof-segment/measurement.d.ts.map +1 -0
- package/dist/roof-segment/measurement.js +64 -0
- package/dist/roof-segment/panel.d.ts +2 -0
- package/dist/roof-segment/panel.d.ts.map +1 -0
- package/dist/roof-segment/panel.js +180 -0
- package/dist/roof-segment/parametrics.d.ts +3 -0
- package/dist/roof-segment/parametrics.d.ts.map +1 -0
- package/dist/roof-segment/parametrics.js +4 -0
- package/dist/roof-segment/renderer.d.ts +6 -0
- package/dist/roof-segment/renderer.d.ts.map +1 -0
- package/dist/roof-segment/renderer.js +93 -0
- package/dist/roof-segment/schema.d.ts +2 -0
- package/dist/roof-segment/schema.d.ts.map +1 -0
- package/dist/roof-segment/schema.js +1 -0
- package/dist/scan/definition.d.ts +9 -0
- package/dist/scan/definition.d.ts.map +1 -0
- package/dist/scan/definition.js +49 -0
- package/dist/scan/index.d.ts +2 -0
- package/dist/scan/index.d.ts.map +1 -0
- package/dist/scan/index.js +1 -0
- package/dist/scan/parametrics.d.ts +3 -0
- package/dist/scan/parametrics.d.ts.map +1 -0
- package/dist/scan/parametrics.js +3 -0
- package/dist/scan/renderer.d.ts +6 -0
- package/dist/scan/renderer.d.ts.map +1 -0
- package/dist/scan/renderer.js +54 -0
- package/dist/scan/schema.d.ts +2 -0
- package/dist/scan/schema.d.ts.map +1 -0
- package/dist/scan/schema.js +1 -0
- package/dist/scan/system.d.ts +3 -0
- package/dist/scan/system.d.ts.map +1 -0
- package/dist/scan/system.js +3 -0
- package/dist/shared/auto-fitting.d.ts +253 -0
- package/dist/shared/auto-fitting.d.ts.map +1 -0
- package/dist/shared/auto-fitting.js +659 -0
- package/dist/shared/auto-offset-tag.d.ts +67 -0
- package/dist/shared/auto-offset-tag.d.ts.map +1 -0
- package/dist/shared/auto-offset-tag.js +94 -0
- package/dist/shared/draw-alignment.d.ts +25 -0
- package/dist/shared/draw-alignment.d.ts.map +1 -0
- package/dist/shared/draw-alignment.js +30 -0
- package/dist/shared/duct-body-paint.d.ts +6 -0
- package/dist/shared/duct-body-paint.d.ts.map +1 -0
- package/dist/shared/duct-body-paint.js +13 -0
- package/dist/shared/fitting-endpoint-reaim.d.ts +72 -0
- package/dist/shared/fitting-endpoint-reaim.d.ts.map +1 -0
- package/dist/shared/fitting-endpoint-reaim.js +123 -0
- package/dist/shared/fitting-rotation.d.ts +21 -0
- package/dist/shared/fitting-rotation.d.ts.map +1 -0
- package/dist/shared/fitting-rotation.js +39 -0
- package/dist/shared/floor-placement.d.ts +25 -0
- package/dist/shared/floor-placement.d.ts.map +1 -0
- package/dist/shared/floor-placement.js +109 -0
- package/dist/shared/floorplan-cursor.d.ts +11 -0
- package/dist/shared/floorplan-cursor.d.ts.map +1 -0
- package/dist/shared/floorplan-cursor.js +17 -0
- package/dist/shared/ghost-alignment.d.ts +31 -0
- package/dist/shared/ghost-alignment.d.ts.map +1 -0
- package/dist/shared/ghost-alignment.js +29 -0
- package/dist/shared/ghost-materials.d.ts +29 -0
- package/dist/shared/ghost-materials.d.ts.map +1 -0
- package/dist/shared/ghost-materials.js +81 -0
- package/dist/shared/level-offset-group.d.ts +18 -0
- package/dist/shared/level-offset-group.d.ts.map +1 -0
- package/dist/shared/level-offset-group.js +31 -0
- package/dist/shared/mep-ghost.d.ts +37 -0
- package/dist/shared/mep-ghost.d.ts.map +1 -0
- package/dist/shared/mep-ghost.js +83 -0
- package/dist/shared/move-roof-tool.d.ts +6 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -0
- package/dist/shared/move-roof-tool.js +420 -0
- package/dist/shared/opening-guides-runtime.d.ts +70 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -0
- package/dist/shared/opening-guides-runtime.js +182 -0
- package/dist/shared/opening-placement-dimensions.d.ts +19 -0
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -0
- package/dist/shared/opening-placement-dimensions.js +152 -0
- package/dist/shared/path-offset.d.ts +10 -0
- package/dist/shared/path-offset.d.ts.map +1 -0
- package/dist/shared/path-offset.js +74 -0
- package/dist/shared/path-point-affordance.d.ts +34 -0
- package/dist/shared/path-point-affordance.d.ts.map +1 -0
- package/dist/shared/path-point-affordance.js +97 -0
- package/dist/shared/path-segment-affordance.d.ts +33 -0
- package/dist/shared/path-segment-affordance.d.ts.map +1 -0
- package/dist/shared/path-segment-affordance.js +77 -0
- package/dist/shared/pipe-run-translation-offset.d.ts +27 -0
- package/dist/shared/pipe-run-translation-offset.d.ts.map +1 -0
- package/dist/shared/pipe-run-translation-offset.js +131 -0
- package/dist/shared/pipe-vertical-offset.d.ts +98 -0
- package/dist/shared/pipe-vertical-offset.d.ts.map +1 -0
- package/dist/shared/pipe-vertical-offset.js +836 -0
- package/dist/shared/placeholder-geometry.d.ts +22 -0
- package/dist/shared/placeholder-geometry.d.ts.map +1 -0
- package/dist/shared/placeholder-geometry.js +31 -0
- package/dist/shared/polygon-centroid-move.d.ts +21 -0
- package/dist/shared/polygon-centroid-move.d.ts.map +1 -0
- package/dist/shared/polygon-centroid-move.js +117 -0
- package/dist/shared/polygon-measurement.d.ts +10 -0
- package/dist/shared/polygon-measurement.d.ts.map +1 -0
- package/dist/shared/polygon-measurement.js +35 -0
- package/dist/shared/polygon-vertex-affordance.d.ts +108 -0
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -0
- package/dist/shared/polygon-vertex-affordance.js +325 -0
- package/dist/shared/ports.d.ts +75 -0
- package/dist/shared/ports.d.ts.map +1 -0
- package/dist/shared/ports.js +164 -0
- package/dist/shared/quick-measurement.d.ts +8 -0
- package/dist/shared/quick-measurement.d.ts.map +1 -0
- package/dist/shared/quick-measurement.js +15 -0
- package/dist/shared/refrigerant-line-selection.d.ts +4 -0
- package/dist/shared/refrigerant-line-selection.d.ts.map +1 -0
- package/dist/shared/refrigerant-line-selection.js +405 -0
- package/dist/shared/relative-roof-drag.d.ts +18 -0
- package/dist/shared/relative-roof-drag.d.ts.map +1 -0
- package/dist/shared/relative-roof-drag.js +83 -0
- package/dist/shared/ridge-snap.d.ts +31 -0
- package/dist/shared/ridge-snap.d.ts.map +1 -0
- package/dist/shared/ridge-snap.js +61 -0
- package/dist/shared/roof-attachment-fallback-preview.d.ts +14 -0
- package/dist/shared/roof-attachment-fallback-preview.d.ts.map +1 -0
- package/dist/shared/roof-attachment-fallback-preview.js +84 -0
- package/dist/shared/roof-face-host.d.ts +17 -0
- package/dist/shared/roof-face-host.d.ts.map +1 -0
- package/dist/shared/roof-face-host.js +24 -0
- package/dist/shared/roof-opening-host.d.ts +66 -0
- package/dist/shared/roof-opening-host.d.ts.map +1 -0
- package/dist/shared/roof-opening-host.js +98 -0
- package/dist/shared/roof-segment-hit.d.ts +34 -0
- package/dist/shared/roof-segment-hit.d.ts.map +1 -0
- package/dist/shared/roof-segment-hit.js +72 -0
- package/dist/shared/roof-surface-placement-guides.d.ts +68 -0
- package/dist/shared/roof-surface-placement-guides.d.ts.map +1 -0
- package/dist/shared/roof-surface-placement-guides.js +716 -0
- package/dist/shared/roof-surface.d.ts +20 -0
- package/dist/shared/roof-surface.d.ts.map +1 -0
- package/dist/shared/roof-surface.js +467 -0
- package/dist/shared/roof-wall-opening-cut.d.ts +16 -0
- package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -0
- package/dist/shared/roof-wall-opening-cut.js +52 -0
- package/dist/shared/roof-wall-opening-placement.d.ts +53 -0
- package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -0
- package/dist/shared/roof-wall-opening-placement.js +58 -0
- package/dist/shared/rotate-affordance.d.ts +16 -0
- package/dist/shared/rotate-affordance.d.ts.map +1 -0
- package/dist/shared/rotate-affordance.js +20 -0
- package/dist/shared/run-move-connectivity.d.ts +52 -0
- package/dist/shared/run-move-connectivity.d.ts.map +1 -0
- package/dist/shared/run-move-connectivity.js +82 -0
- package/dist/shared/run-translation-offset.d.ts +24 -0
- package/dist/shared/run-translation-offset.d.ts.map +1 -0
- package/dist/shared/run-translation-offset.js +140 -0
- package/dist/shared/selection-handles.d.ts +51 -0
- package/dist/shared/selection-handles.d.ts.map +1 -0
- package/dist/shared/selection-handles.js +74 -0
- package/dist/shared/slot-paint.d.ts +46 -0
- package/dist/shared/slot-paint.d.ts.map +1 -0
- package/dist/shared/slot-paint.js +235 -0
- package/dist/shared/surface-paint.d.ts +3 -0
- package/dist/shared/surface-paint.d.ts.map +1 -0
- package/dist/shared/surface-paint.js +41 -0
- package/dist/shared/use-segment-trim-clip.d.ts +44 -0
- package/dist/shared/use-segment-trim-clip.d.ts.map +1 -0
- package/dist/shared/use-segment-trim-clip.js +149 -0
- package/dist/shared/vertical-offset.d.ts +95 -0
- package/dist/shared/vertical-offset.d.ts.map +1 -0
- package/dist/shared/vertical-offset.js +851 -0
- package/dist/shared/wall-attach-target.d.ts +109 -0
- package/dist/shared/wall-attach-target.d.ts.map +1 -0
- package/dist/shared/wall-attach-target.js +192 -0
- package/dist/shared/wall-opening-alignment.d.ts +34 -0
- package/dist/shared/wall-opening-alignment.d.ts.map +1 -0
- package/dist/shared/wall-opening-alignment.js +113 -0
- package/dist/shelf/definition.d.ts +4 -0
- package/dist/shelf/definition.d.ts.map +1 -0
- package/dist/shelf/definition.js +265 -0
- package/dist/shelf/dimensions.d.ts +3 -0
- package/dist/shelf/dimensions.d.ts.map +1 -0
- package/dist/shelf/dimensions.js +15 -0
- package/dist/shelf/floorplan-affordances.d.ts +26 -0
- package/dist/shelf/floorplan-affordances.d.ts.map +1 -0
- package/dist/shelf/floorplan-affordances.js +88 -0
- package/dist/shelf/floorplan-move.d.ts +25 -0
- package/dist/shelf/floorplan-move.d.ts.map +1 -0
- package/dist/shelf/floorplan-move.js +90 -0
- package/dist/shelf/floorplan.d.ts +20 -0
- package/dist/shelf/floorplan.d.ts.map +1 -0
- package/dist/shelf/floorplan.js +124 -0
- package/dist/shelf/geometry.d.ts +15 -0
- package/dist/shelf/geometry.d.ts.map +1 -0
- package/dist/shelf/geometry.js +304 -0
- package/dist/shelf/index.d.ts +4 -0
- package/dist/shelf/index.d.ts.map +1 -0
- package/dist/shelf/index.js +3 -0
- package/dist/shelf/paint.d.ts +3 -0
- package/dist/shelf/paint.d.ts.map +1 -0
- package/dist/shelf/paint.js +181 -0
- package/dist/shelf/parametrics.d.ts +14 -0
- package/dist/shelf/parametrics.d.ts.map +1 -0
- package/dist/shelf/parametrics.js +81 -0
- package/dist/shelf/preview.d.ts +31 -0
- package/dist/shelf/preview.d.ts.map +1 -0
- package/dist/shelf/preview.js +77 -0
- package/dist/shelf/schema.d.ts +2 -0
- package/dist/shelf/schema.d.ts.map +1 -0
- package/dist/shelf/schema.js +6 -0
- package/dist/shelf/slots.d.ts +9 -0
- package/dist/shelf/slots.d.ts.map +1 -0
- package/dist/shelf/slots.js +30 -0
- package/dist/shelf/tool.d.ts +3 -0
- package/dist/shelf/tool.d.ts.map +1 -0
- package/dist/shelf/tool.js +125 -0
- package/dist/site/definition.d.ts +10 -0
- package/dist/site/definition.d.ts.map +1 -0
- package/dist/site/definition.js +54 -0
- package/dist/site/index.d.ts +2 -0
- package/dist/site/index.d.ts.map +1 -0
- package/dist/site/index.js +1 -0
- package/dist/site/parametrics.d.ts +3 -0
- package/dist/site/parametrics.d.ts.map +1 -0
- package/dist/site/parametrics.js +3 -0
- package/dist/site/recessed-slab-ground-holes.d.ts +3 -0
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -0
- package/dist/site/recessed-slab-ground-holes.js +46 -0
- package/dist/site/renderer.d.ts +6 -0
- package/dist/site/renderer.d.ts.map +1 -0
- package/dist/site/renderer.js +196 -0
- package/dist/site/schema.d.ts +2 -0
- package/dist/site/schema.d.ts.map +1 -0
- package/dist/site/schema.js +1 -0
- package/dist/skylight/definition.d.ts +10 -0
- package/dist/skylight/definition.d.ts.map +1 -0
- package/dist/skylight/definition.js +268 -0
- package/dist/skylight/floorplan.d.ts +16 -0
- package/dist/skylight/floorplan.d.ts.map +1 -0
- package/dist/skylight/floorplan.js +129 -0
- package/dist/skylight/frame-csg.d.ts +4 -0
- package/dist/skylight/frame-csg.d.ts.map +1 -0
- package/dist/skylight/frame-csg.js +49 -0
- package/dist/skylight/geometry.d.ts +7 -0
- package/dist/skylight/geometry.d.ts.map +1 -0
- package/dist/skylight/geometry.js +114 -0
- package/dist/skylight/index.d.ts +5 -0
- package/dist/skylight/index.d.ts.map +1 -0
- package/dist/skylight/index.js +4 -0
- package/dist/skylight/interaction.d.ts +11 -0
- package/dist/skylight/interaction.d.ts.map +1 -0
- package/dist/skylight/interaction.js +42 -0
- package/dist/skylight/move-tool.d.ts +5 -0
- package/dist/skylight/move-tool.d.ts.map +1 -0
- package/dist/skylight/move-tool.js +233 -0
- package/dist/skylight/panel.d.ts +2 -0
- package/dist/skylight/panel.d.ts.map +1 -0
- package/dist/skylight/panel.js +253 -0
- package/dist/skylight/parametrics.d.ts +4 -0
- package/dist/skylight/parametrics.d.ts.map +1 -0
- package/dist/skylight/parametrics.js +99 -0
- package/dist/skylight/preview.d.ts +7 -0
- package/dist/skylight/preview.d.ts.map +1 -0
- package/dist/skylight/preview.js +49 -0
- package/dist/skylight/renderer.d.ts +6 -0
- package/dist/skylight/renderer.d.ts.map +1 -0
- package/dist/skylight/renderer.js +303 -0
- package/dist/skylight/roof-cut.d.ts +21 -0
- package/dist/skylight/roof-cut.d.ts.map +1 -0
- package/dist/skylight/roof-cut.js +61 -0
- package/dist/skylight/schema.d.ts +2 -0
- package/dist/skylight/schema.d.ts.map +1 -0
- package/dist/skylight/schema.js +1 -0
- package/dist/skylight/system.d.ts +3 -0
- package/dist/skylight/system.d.ts.map +1 -0
- package/dist/skylight/system.js +49 -0
- package/dist/skylight/tool.d.ts +3 -0
- package/dist/skylight/tool.d.ts.map +1 -0
- package/dist/skylight/tool.js +100 -0
- package/dist/slab/boundary-editor.d.ts +24 -0
- package/dist/slab/boundary-editor.d.ts.map +1 -0
- package/dist/slab/boundary-editor.js +127 -0
- package/dist/slab/definition.d.ts +20 -0
- package/dist/slab/definition.d.ts.map +1 -0
- package/dist/slab/definition.js +218 -0
- package/dist/slab/floorplan-affordances.d.ts +177 -0
- package/dist/slab/floorplan-affordances.d.ts.map +1 -0
- package/dist/slab/floorplan-affordances.js +52 -0
- package/dist/slab/floorplan-move.d.ts +12 -0
- package/dist/slab/floorplan-move.d.ts.map +1 -0
- package/dist/slab/floorplan-move.js +19 -0
- package/dist/slab/floorplan.d.ts +20 -0
- package/dist/slab/floorplan.d.ts.map +1 -0
- package/dist/slab/floorplan.js +144 -0
- package/dist/slab/geometry.d.ts +5 -0
- package/dist/slab/geometry.d.ts.map +1 -0
- package/dist/slab/geometry.js +133 -0
- package/dist/slab/hole-editor.d.ts +14 -0
- package/dist/slab/hole-editor.d.ts.map +1 -0
- package/dist/slab/hole-editor.js +54 -0
- package/dist/slab/index.d.ts +3 -0
- package/dist/slab/index.d.ts.map +1 -0
- package/dist/slab/index.js +2 -0
- package/dist/slab/move-tool.d.ts +6 -0
- package/dist/slab/move-tool.d.ts.map +1 -0
- package/dist/slab/move-tool.js +232 -0
- package/dist/slab/paint.d.ts +8 -0
- package/dist/slab/paint.d.ts.map +1 -0
- package/dist/slab/paint.js +26 -0
- package/dist/slab/panel.d.ts +14 -0
- package/dist/slab/panel.d.ts.map +1 -0
- package/dist/slab/panel.js +144 -0
- package/dist/slab/parametrics.d.ts +14 -0
- package/dist/slab/parametrics.d.ts.map +1 -0
- package/dist/slab/parametrics.js +19 -0
- package/dist/slab/quick-measurement.d.ts +3 -0
- package/dist/slab/quick-measurement.d.ts.map +1 -0
- package/dist/slab/quick-measurement.js +35 -0
- package/dist/slab/schema.d.ts +2 -0
- package/dist/slab/schema.d.ts.map +1 -0
- package/dist/slab/schema.js +1 -0
- package/dist/slab/slots.d.ts +10 -0
- package/dist/slab/slots.d.ts.map +1 -0
- package/dist/slab/slots.js +20 -0
- package/dist/slab/system.d.ts +3 -0
- package/dist/slab/system.d.ts.map +1 -0
- package/dist/slab/system.js +63 -0
- package/dist/slab/tool.d.ts +3 -0
- package/dist/slab/tool.d.ts.map +1 -0
- package/dist/slab/tool.js +204 -0
- package/dist/solar-panel/definition.d.ts +15 -0
- package/dist/solar-panel/definition.d.ts.map +1 -0
- package/dist/solar-panel/definition.js +260 -0
- package/dist/solar-panel/floorplan.d.ts +21 -0
- package/dist/solar-panel/floorplan.d.ts.map +1 -0
- package/dist/solar-panel/floorplan.js +120 -0
- package/dist/solar-panel/geometry.d.ts +29 -0
- package/dist/solar-panel/geometry.d.ts.map +1 -0
- package/dist/solar-panel/geometry.js +196 -0
- package/dist/solar-panel/index.d.ts +5 -0
- package/dist/solar-panel/index.d.ts.map +1 -0
- package/dist/solar-panel/index.js +4 -0
- package/dist/solar-panel/move-tool.d.ts +5 -0
- package/dist/solar-panel/move-tool.d.ts.map +1 -0
- package/dist/solar-panel/move-tool.js +257 -0
- package/dist/solar-panel/panel.d.ts +2 -0
- package/dist/solar-panel/panel.d.ts.map +1 -0
- package/dist/solar-panel/panel.js +146 -0
- package/dist/solar-panel/parametrics.d.ts +4 -0
- package/dist/solar-panel/parametrics.d.ts.map +1 -0
- package/dist/solar-panel/parametrics.js +52 -0
- package/dist/solar-panel/preview.d.ts +7 -0
- package/dist/solar-panel/preview.d.ts.map +1 -0
- package/dist/solar-panel/preview.js +46 -0
- package/dist/solar-panel/renderer.d.ts +26 -0
- package/dist/solar-panel/renderer.d.ts.map +1 -0
- package/dist/solar-panel/renderer.js +162 -0
- package/dist/solar-panel/schema.d.ts +2 -0
- package/dist/solar-panel/schema.d.ts.map +1 -0
- package/dist/solar-panel/schema.js +1 -0
- package/dist/solar-panel/tool.d.ts +11 -0
- package/dist/solar-panel/tool.d.ts.map +1 -0
- package/dist/solar-panel/tool.js +120 -0
- package/dist/spawn/definition.d.ts +4 -0
- package/dist/spawn/definition.d.ts.map +1 -0
- package/dist/spawn/definition.js +107 -0
- package/dist/spawn/floorplan-affordances.d.ts +3 -0
- package/dist/spawn/floorplan-affordances.d.ts.map +1 -0
- package/dist/spawn/floorplan-affordances.js +31 -0
- package/dist/spawn/floorplan-move.d.ts +3 -0
- package/dist/spawn/floorplan-move.d.ts.map +1 -0
- package/dist/spawn/floorplan-move.js +31 -0
- package/dist/spawn/floorplan.d.ts +14 -0
- package/dist/spawn/floorplan.d.ts.map +1 -0
- package/dist/spawn/floorplan.js +135 -0
- package/dist/spawn/index.d.ts +3 -0
- package/dist/spawn/index.d.ts.map +1 -0
- package/dist/spawn/index.js +2 -0
- package/dist/spawn/panel.d.ts +2 -0
- package/dist/spawn/panel.d.ts.map +1 -0
- package/dist/spawn/panel.js +71 -0
- package/dist/spawn/parametrics.d.ts +8 -0
- package/dist/spawn/parametrics.d.ts.map +1 -0
- package/dist/spawn/parametrics.js +23 -0
- package/dist/spawn/renderer.d.ts +16 -0
- package/dist/spawn/renderer.d.ts.map +1 -0
- package/dist/spawn/renderer.js +47 -0
- package/dist/spawn/schema.d.ts +2 -0
- package/dist/spawn/schema.d.ts.map +1 -0
- package/dist/spawn/schema.js +5 -0
- package/dist/spawn/tool.d.ts +10 -0
- package/dist/spawn/tool.d.ts.map +1 -0
- package/dist/spawn/tool.js +109 -0
- package/dist/stair/definition.d.ts +9 -0
- package/dist/stair/definition.d.ts.map +1 -0
- package/dist/stair/definition.js +440 -0
- package/dist/stair/floor-stack.d.ts +10 -0
- package/dist/stair/floor-stack.d.ts.map +1 -0
- package/dist/stair/floor-stack.js +77 -0
- package/dist/stair/floorplan-affordances.d.ts +53 -0
- package/dist/stair/floorplan-affordances.d.ts.map +1 -0
- package/dist/stair/floorplan-affordances.js +266 -0
- package/dist/stair/floorplan-move.d.ts +17 -0
- package/dist/stair/floorplan-move.d.ts.map +1 -0
- package/dist/stair/floorplan-move.js +64 -0
- package/dist/stair/floorplan.d.ts +26 -0
- package/dist/stair/floorplan.d.ts.map +1 -0
- package/dist/stair/floorplan.js +455 -0
- package/dist/stair/index.d.ts +2 -0
- package/dist/stair/index.d.ts.map +1 -0
- package/dist/stair/index.js +1 -0
- package/dist/stair/paint.d.ts +2 -0
- package/dist/stair/paint.d.ts.map +1 -0
- package/dist/stair/paint.js +86 -0
- package/dist/stair/panel.d.ts +2 -0
- package/dist/stair/panel.d.ts.map +1 -0
- package/dist/stair/panel.js +196 -0
- package/dist/stair/parametrics.d.ts +3 -0
- package/dist/stair/parametrics.d.ts.map +1 -0
- package/dist/stair/parametrics.js +4 -0
- package/dist/stair/renderer.d.ts +6 -0
- package/dist/stair/renderer.d.ts.map +1 -0
- package/dist/stair/renderer.js +667 -0
- package/dist/stair/schema.d.ts +2 -0
- package/dist/stair/schema.d.ts.map +1 -0
- package/dist/stair/schema.js +1 -0
- package/dist/stair/slots.d.ts +7 -0
- package/dist/stair/slots.d.ts.map +1 -0
- package/dist/stair/slots.js +13 -0
- package/dist/stair/system.d.ts +3 -0
- package/dist/stair/system.d.ts.map +1 -0
- package/dist/stair/system.js +3 -0
- package/dist/stair-segment/definition.d.ts +8 -0
- package/dist/stair-segment/definition.d.ts.map +1 -0
- package/dist/stair-segment/definition.js +133 -0
- package/dist/stair-segment/index.d.ts +2 -0
- package/dist/stair-segment/index.d.ts.map +1 -0
- package/dist/stair-segment/index.js +1 -0
- package/dist/stair-segment/panel.d.ts +2 -0
- package/dist/stair-segment/panel.d.ts.map +1 -0
- package/dist/stair-segment/panel.js +126 -0
- package/dist/stair-segment/parametrics.d.ts +3 -0
- package/dist/stair-segment/parametrics.d.ts.map +1 -0
- package/dist/stair-segment/parametrics.js +4 -0
- package/dist/stair-segment/renderer.d.ts +6 -0
- package/dist/stair-segment/renderer.d.ts.map +1 -0
- package/dist/stair-segment/renderer.js +55 -0
- package/dist/stair-segment/schema.d.ts +2 -0
- package/dist/stair-segment/schema.d.ts.map +1 -0
- package/dist/stair-segment/schema.js +1 -0
- package/dist/turbine-vent/definition.d.ts +24 -0
- package/dist/turbine-vent/definition.d.ts.map +1 -0
- package/dist/turbine-vent/definition.js +119 -0
- package/dist/turbine-vent/floorplan.d.ts +13 -0
- package/dist/turbine-vent/floorplan.d.ts.map +1 -0
- package/dist/turbine-vent/floorplan.js +111 -0
- package/dist/turbine-vent/geometry.d.ts +6 -0
- package/dist/turbine-vent/geometry.d.ts.map +1 -0
- package/dist/turbine-vent/geometry.js +284 -0
- package/dist/turbine-vent/index.d.ts +4 -0
- package/dist/turbine-vent/index.d.ts.map +1 -0
- package/dist/turbine-vent/index.js +3 -0
- package/dist/turbine-vent/move-tool.d.ts +13 -0
- package/dist/turbine-vent/move-tool.d.ts.map +1 -0
- package/dist/turbine-vent/move-tool.js +207 -0
- package/dist/turbine-vent/panel.d.ts +8 -0
- package/dist/turbine-vent/panel.d.ts.map +1 -0
- package/dist/turbine-vent/panel.js +127 -0
- package/dist/turbine-vent/parametrics.d.ts +9 -0
- package/dist/turbine-vent/parametrics.d.ts.map +1 -0
- package/dist/turbine-vent/parametrics.js +34 -0
- package/dist/turbine-vent/preview.d.ts +14 -0
- package/dist/turbine-vent/preview.d.ts.map +1 -0
- package/dist/turbine-vent/preview.js +38 -0
- package/dist/turbine-vent/renderer.d.ts +18 -0
- package/dist/turbine-vent/renderer.d.ts.map +1 -0
- package/dist/turbine-vent/renderer.js +107 -0
- package/dist/turbine-vent/schema.d.ts +2 -0
- package/dist/turbine-vent/schema.d.ts.map +1 -0
- package/dist/turbine-vent/schema.js +3 -0
- package/dist/turbine-vent/tool.d.ts +9 -0
- package/dist/turbine-vent/tool.d.ts.map +1 -0
- package/dist/turbine-vent/tool.js +111 -0
- package/dist/wall/curve-tool.d.ts +14 -0
- package/dist/wall/curve-tool.d.ts.map +1 -0
- package/dist/wall/curve-tool.js +123 -0
- package/dist/wall/definition.d.ts +19 -0
- package/dist/wall/definition.d.ts.map +1 -0
- package/dist/wall/definition.js +132 -0
- package/dist/wall/floorplan-affordances.d.ts +13 -0
- package/dist/wall/floorplan-affordances.d.ts.map +1 -0
- package/dist/wall/floorplan-affordances.js +241 -0
- package/dist/wall/floorplan-move.d.ts +32 -0
- package/dist/wall/floorplan-move.d.ts.map +1 -0
- package/dist/wall/floorplan-move.js +259 -0
- package/dist/wall/floorplan-overrides.d.ts +22 -0
- package/dist/wall/floorplan-overrides.d.ts.map +1 -0
- package/dist/wall/floorplan-overrides.js +32 -0
- package/dist/wall/floorplan.d.ts +23 -0
- package/dist/wall/floorplan.d.ts.map +1 -0
- package/dist/wall/floorplan.js +249 -0
- package/dist/wall/index.d.ts +3 -0
- package/dist/wall/index.d.ts.map +1 -0
- package/dist/wall/index.js +2 -0
- package/dist/wall/measurement.d.ts +5 -0
- package/dist/wall/measurement.d.ts.map +1 -0
- package/dist/wall/measurement.js +174 -0
- package/dist/wall/move-endpoint-tool.d.ts +22 -0
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -0
- package/dist/wall/move-endpoint-tool.js +450 -0
- package/dist/wall/move-shared.d.ts +48 -0
- package/dist/wall/move-shared.d.ts.map +1 -0
- package/dist/wall/move-shared.js +162 -0
- package/dist/wall/move-tool.d.ts +6 -0
- package/dist/wall/move-tool.d.ts.map +1 -0
- package/dist/wall/move-tool.js +523 -0
- package/dist/wall/paint.d.ts +33 -0
- package/dist/wall/paint.d.ts.map +1 -0
- package/dist/wall/paint.js +176 -0
- package/dist/wall/panel.d.ts +2 -0
- package/dist/wall/panel.d.ts.map +1 -0
- package/dist/wall/panel.js +198 -0
- package/dist/wall/parametrics.d.ts +16 -0
- package/dist/wall/parametrics.d.ts.map +1 -0
- package/dist/wall/parametrics.js +30 -0
- package/dist/wall/quick-measurement.d.ts +3 -0
- package/dist/wall/quick-measurement.d.ts.map +1 -0
- package/dist/wall/quick-measurement.js +30 -0
- package/dist/wall/renderer.d.ts +25 -0
- package/dist/wall/renderer.d.ts.map +1 -0
- package/dist/wall/renderer.js +65 -0
- package/dist/wall/schema.d.ts +12 -0
- package/dist/wall/schema.d.ts.map +1 -0
- package/dist/wall/schema.js +10 -0
- package/dist/wall/slots.d.ts +10 -0
- package/dist/wall/slots.d.ts.map +1 -0
- package/dist/wall/slots.js +84 -0
- package/dist/wall/system.d.ts +14 -0
- package/dist/wall/system.d.ts.map +1 -0
- package/dist/wall/system.js +18 -0
- package/dist/wall/tool.d.ts +3 -0
- package/dist/wall/tool.d.ts.map +1 -0
- package/dist/wall/tool.js +628 -0
- package/dist/wall/treatments.d.ts +26 -0
- package/dist/wall/treatments.d.ts.map +1 -0
- package/dist/wall/treatments.js +503 -0
- package/dist/window/definition.d.ts +15 -0
- package/dist/window/definition.d.ts.map +1 -0
- package/dist/window/definition.js +237 -0
- package/dist/window/floor-projection.d.ts +9 -0
- package/dist/window/floor-projection.d.ts.map +1 -0
- package/dist/window/floor-projection.js +84 -0
- package/dist/window/floorplan-affordances.d.ts +22 -0
- package/dist/window/floorplan-affordances.d.ts.map +1 -0
- package/dist/window/floorplan-affordances.js +82 -0
- package/dist/window/floorplan-move.d.ts +14 -0
- package/dist/window/floorplan-move.d.ts.map +1 -0
- package/dist/window/floorplan-move.js +223 -0
- package/dist/window/floorplan.d.ts +16 -0
- package/dist/window/floorplan.d.ts.map +1 -0
- package/dist/window/floorplan.js +151 -0
- package/dist/window/index.d.ts +3 -0
- package/dist/window/index.d.ts.map +1 -0
- package/dist/window/index.js +2 -0
- package/dist/window/move-tool.d.ts +18 -0
- package/dist/window/move-tool.d.ts.map +1 -0
- package/dist/window/move-tool.js +914 -0
- package/dist/window/paint.d.ts +8 -0
- package/dist/window/paint.d.ts.map +1 -0
- package/dist/window/paint.js +11 -0
- package/dist/window/panel.d.ts +2 -0
- package/dist/window/panel.d.ts.map +1 -0
- package/dist/window/panel.js +384 -0
- package/dist/window/parametrics.d.ts +11 -0
- package/dist/window/parametrics.d.ts.map +1 -0
- package/dist/window/parametrics.js +22 -0
- package/dist/window/preview.d.ts +18 -0
- package/dist/window/preview.d.ts.map +1 -0
- package/dist/window/preview.js +36 -0
- package/dist/window/renderer.d.ts +6 -0
- package/dist/window/renderer.d.ts.map +1 -0
- package/dist/window/renderer.js +37 -0
- package/dist/window/schema.d.ts +2 -0
- package/dist/window/schema.d.ts.map +1 -0
- package/dist/window/schema.js +1 -0
- package/dist/window/slots.d.ts +5 -0
- package/dist/window/slots.d.ts.map +1 -0
- package/dist/window/slots.js +11 -0
- package/dist/window/system.d.ts +12 -0
- package/dist/window/system.d.ts.map +1 -0
- package/dist/window/system.js +16 -0
- package/dist/window/tool.d.ts +13 -0
- package/dist/window/tool.d.ts.map +1 -0
- package/dist/window/tool.js +580 -0
- package/dist/window/window-math.d.ts +31 -0
- package/dist/window/window-math.d.ts.map +1 -0
- package/dist/window/window-math.js +41 -0
- package/dist/zone/definition.d.ts +10 -0
- package/dist/zone/definition.d.ts.map +1 -0
- package/dist/zone/definition.js +80 -0
- package/dist/zone/floorplan-affordances.d.ts +81 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -0
- package/dist/zone/floorplan-affordances.js +19 -0
- package/dist/zone/floorplan-move.d.ts +13 -0
- package/dist/zone/floorplan-move.d.ts.map +1 -0
- package/dist/zone/floorplan-move.js +17 -0
- package/dist/zone/floorplan.d.ts +13 -0
- package/dist/zone/floorplan.d.ts.map +1 -0
- package/dist/zone/floorplan.js +147 -0
- package/dist/zone/index.d.ts +2 -0
- package/dist/zone/index.d.ts.map +1 -0
- package/dist/zone/index.js +1 -0
- package/dist/zone/parametrics.d.ts +3 -0
- package/dist/zone/parametrics.d.ts.map +1 -0
- package/dist/zone/parametrics.js +4 -0
- package/dist/zone/quantities-panel.d.ts +2 -0
- package/dist/zone/quantities-panel.d.ts.map +1 -0
- package/dist/zone/quantities-panel.js +83 -0
- package/dist/zone/quick-measurement.d.ts +3 -0
- package/dist/zone/quick-measurement.d.ts.map +1 -0
- package/dist/zone/quick-measurement.js +29 -0
- package/dist/zone/renderer.d.ts +6 -0
- package/dist/zone/renderer.d.ts.map +1 -0
- package/dist/zone/renderer.js +205 -0
- package/dist/zone/schema.d.ts +2 -0
- package/dist/zone/schema.d.ts.map +1 -0
- package/dist/zone/schema.js +1 -0
- package/dist/zone/system.d.ts +3 -0
- package/dist/zone/system.d.ts.map +1 -0
- package/dist/zone/system.js +3 -0
- package/package.json +61 -0
|
@@ -0,0 +1,924 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { DuctSegmentNode, emitter, getCeilingAt, getCeilingHeightAt, useScene, } from '@pascal-app/core';
|
|
4
|
+
import { CursorSphere, DimensionPill, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, triggerSFX, useEditor, } from '@pascal-app/editor';
|
|
5
|
+
import { useViewer } from '@pascal-app/viewer';
|
|
6
|
+
import { Html } from '@react-three/drei';
|
|
7
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import { DoubleSide, Matrix4, Path, Shape, ShapeGeometry, Vector3, } from 'three';
|
|
9
|
+
import { getDuctFittingPorts } from '../duct-fitting/ports';
|
|
10
|
+
import { planCrossAtRunBody, planElbowAtPort, planElbowRealign, planTeeAtRunBody, } from '../shared/auto-fitting';
|
|
11
|
+
import { alignDrawPoint, clearDrawAlignment } from '../shared/draw-alignment';
|
|
12
|
+
import { LevelOffsetGroup } from '../shared/level-offset-group';
|
|
13
|
+
import { FittingGhost } from '../shared/mep-ghost';
|
|
14
|
+
import { collectScenePorts, DUCT_PORT_SYSTEMS, findNearestPortXZ, findNearestRunBodyXZ, findRunBodyCrossingXZ, } from '../shared/ports';
|
|
15
|
+
import { ductSegmentDefinition } from './definition';
|
|
16
|
+
import { ductPortDiameterIn, rectSectionAxes, rollToContinueAcrossElbow } from './geometry';
|
|
17
|
+
/**
|
|
18
|
+
* Continuous placement tool for duct segments.
|
|
19
|
+
*
|
|
20
|
+
* Mouse-driven model:
|
|
21
|
+
* - **First click** anchors the segment start (port snap joins onto an
|
|
22
|
+
* existing run / fitting collar).
|
|
23
|
+
* - **Second click** commits a two-point duct immediately and keeps the
|
|
24
|
+
* segment end anchored, so the next click continues the run like wall
|
|
25
|
+
* drafting. No polyline accumulation, no finish gesture.
|
|
26
|
+
* - **Auto-elbow**: when either end snapped onto another RUN's open
|
|
27
|
+
* port at an angle (15–90°, vertical turns included), an elbow
|
|
28
|
+
* fitting is minted at the joint and the duct pulls back to its
|
|
29
|
+
* outlet collar — corners get real fittings instead of butt joints.
|
|
30
|
+
* - **Tee tap**: starting OR ending on the SIDE of an existing run
|
|
31
|
+
* (centerline snap) splits the trunk, mints a tee at the tap point,
|
|
32
|
+
* and the branch leaves square from its collar.
|
|
33
|
+
* - **Cross tap**: drawing a run straight THROUGH the side of an
|
|
34
|
+
* existing run (interior crossing) splits the trunk, mints a 4-way
|
|
35
|
+
* cross at the crossing, and the drawn run continues out the far
|
|
36
|
+
* branch — both fittings inherit the trunk's / branch's profile.
|
|
37
|
+
* - The in-flight end follows the active snapping mode: `angles` locks
|
|
38
|
+
* it to the nearest 45° step in XZ from the start (Y stays at the
|
|
39
|
+
* start's height); `grid`/`lines`/`off` leave it free. Shift cycles
|
|
40
|
+
* the snapping mode.
|
|
41
|
+
* - Hold **Alt** → vertical mode. Cursor XZ locks to the start;
|
|
42
|
+
* vertical mouse motion drives Y. Click commits the riser segment.
|
|
43
|
+
* - **[ / ]** step the duct diameter through nominal US sizes; the
|
|
44
|
+
* ghost preview and the committed node both use it.
|
|
45
|
+
* - **C** toggles ceiling-level placement: each point lands just below
|
|
46
|
+
* the ceiling actually covering it (duct top hugging that ceiling)
|
|
47
|
+
* instead of the floor, so a run tracks per-room ceiling heights.
|
|
48
|
+
* Points not under any ceiling fall back to the floor.
|
|
49
|
+
* - Esc clears an anchored start point.
|
|
50
|
+
*/
|
|
51
|
+
const PREVIEW_OPACITY = 0.55;
|
|
52
|
+
/**
|
|
53
|
+
* Nominal US round-duct sizes (inches): 4"–10" in 1" steps, 12"+ in 2"
|
|
54
|
+
* steps — matches what flex and rigid round actually ship in.
|
|
55
|
+
*/
|
|
56
|
+
const DUCT_DIAMETERS_IN = [4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20];
|
|
57
|
+
/** Snap radius (meters) for joining onto an existing duct's start/end. */
|
|
58
|
+
const ENDPOINT_SNAP_RADIUS_M = 0.5;
|
|
59
|
+
/** Snap radius (meters) for tapping the SIDE of an existing run — a tee
|
|
60
|
+
* is minted there. Tighter than the port radius so run ends keep
|
|
61
|
+
* priority near their last stretch. */
|
|
62
|
+
const BODY_SNAP_RADIUS_M = 0.35;
|
|
63
|
+
/** Angle step (radians) for the XZ angle lock — 45°. */
|
|
64
|
+
const ANGLE_STEP_RAD = Math.PI / 4;
|
|
65
|
+
/** Mouse pixels → meters mapping for Alt-vertical drag. 100 px ≈ 1 m. */
|
|
66
|
+
const ALT_PIXELS_PER_METER = 100;
|
|
67
|
+
/** Bounds on Alt-driven Y so a wild fling doesn't fly off. */
|
|
68
|
+
const ALT_Y_MIN_M = -3;
|
|
69
|
+
const ALT_Y_MAX_M = 10;
|
|
70
|
+
/** green-500 — the project's bounding-box / placeable accent. The cursor
|
|
71
|
+
* ring + vertical line recolour to this while the point is snapped onto an
|
|
72
|
+
* existing run, so the coincidence reads with the familiar snap green. */
|
|
73
|
+
const SNAP_CURSOR_COLOR = '#22c55e';
|
|
74
|
+
function snap(value, step) {
|
|
75
|
+
if (step <= 0)
|
|
76
|
+
return value;
|
|
77
|
+
return Math.round(value / step) * step;
|
|
78
|
+
}
|
|
79
|
+
function dist2(a, b) {
|
|
80
|
+
const dx = a[0] - b[0];
|
|
81
|
+
const dy = a[1] - b[1];
|
|
82
|
+
const dz = a[2] - b[2];
|
|
83
|
+
return dx * dx + dy * dy + dz * dz;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Cross-section roll for a new rect run leaving `port` along `newDir`,
|
|
87
|
+
* so its profile stays continuous with whatever it joined: a turn
|
|
88
|
+
* re-derives the roll through the (future) elbow, a straight
|
|
89
|
+
* continuation inherits the source's roll as-is. Sources: a rect run's
|
|
90
|
+
* open end, or a rect fitting's open collar (continuity then comes from
|
|
91
|
+
* the leg on the far side of the junction and the rect run mated
|
|
92
|
+
* there). Null when the port doesn't carry a rect orientation. Shared
|
|
93
|
+
* by the ghost preview and the commit so what you see is what lands.
|
|
94
|
+
*/
|
|
95
|
+
function continuityRollFrom(port, newDir) {
|
|
96
|
+
if (!port)
|
|
97
|
+
return null;
|
|
98
|
+
const nodes = useScene.getState().nodes;
|
|
99
|
+
const owner = nodes[port.nodeId];
|
|
100
|
+
let srcDir = null;
|
|
101
|
+
let srcRoll = 0;
|
|
102
|
+
if ((owner?.type === 'hvac-equipment' || owner?.type === 'duct-terminal') &&
|
|
103
|
+
port.shape &&
|
|
104
|
+
port.shape !== 'round') {
|
|
105
|
+
// The collar mesh is built at the canonical `rectSectionAxes(dir, 0)`
|
|
106
|
+
// basis, so it reads as a source run pointing out along the port with
|
|
107
|
+
// roll 0 — the new leg rolls to continue that across its turn.
|
|
108
|
+
srcDir = new Vector3(...port.direction);
|
|
109
|
+
srcRoll = 0;
|
|
110
|
+
}
|
|
111
|
+
else if (owner?.type === 'duct-segment' && owner.shape !== 'round') {
|
|
112
|
+
srcDir = new Vector3(...port.direction);
|
|
113
|
+
srcRoll = owner.roll;
|
|
114
|
+
}
|
|
115
|
+
else if (owner?.type === 'duct-fitting' &&
|
|
116
|
+
owner.shape !== 'round' &&
|
|
117
|
+
owner.fittingType !== 'reducer' &&
|
|
118
|
+
owner.fittingType !== 'transition') {
|
|
119
|
+
const source = getDuctFittingPorts(owner).find((p) => p.id !== port.id && p.id !== 'branch' && p.id !== 'branch2');
|
|
120
|
+
if (source) {
|
|
121
|
+
srcDir = new Vector3(...source.direction);
|
|
122
|
+
const tol2 = 0.03 * 0.03;
|
|
123
|
+
for (const n of Object.values(nodes)) {
|
|
124
|
+
if (n.type !== 'duct-segment' || n.shape === 'round' || n.path.length < 2)
|
|
125
|
+
continue;
|
|
126
|
+
const ends = [n.path[0], n.path[n.path.length - 1]];
|
|
127
|
+
if (ends.some((e) => dist2(e, source.position) <= tol2)) {
|
|
128
|
+
srcRoll = n.roll;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!srcDir)
|
|
135
|
+
return null;
|
|
136
|
+
const cross = new Vector3().crossVectors(srcDir, newDir);
|
|
137
|
+
if (cross.lengthSq() < 1e-8)
|
|
138
|
+
return srcRoll;
|
|
139
|
+
return rollToContinueAcrossElbow(srcDir, srcRoll, srcDir, newDir);
|
|
140
|
+
}
|
|
141
|
+
function continuityRollForRun(startPort, endPort, dir) {
|
|
142
|
+
return continuityRollFrom(startPort, dir) ?? continuityRollFrom(endPort, dir) ?? 0;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Nearest typed port — duct run ends, fitting collars, anything whose
|
|
146
|
+
* kind registers `def.ports` — within snap range of `point` on the XZ
|
|
147
|
+
* plane. Y is ignored for the distance check (grid events ride the floor
|
|
148
|
+
* while ports hang at duct height); the snap adopts the port's full 3D
|
|
149
|
+
* position. The full port is returned so the commit knows what it joined
|
|
150
|
+
* (auto-elbow insertion needs the port's direction and owner).
|
|
151
|
+
*/
|
|
152
|
+
function findNearbyPort(point) {
|
|
153
|
+
return findNearestPortXZ(point, collectScenePorts({ systems: DUCT_PORT_SYSTEMS }), ENDPOINT_SNAP_RADIUS_M);
|
|
154
|
+
}
|
|
155
|
+
function portPoint(port) {
|
|
156
|
+
return [port.position[0], port.position[1], port.position[2]];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Profile to inherit when the segment start snaps onto `port` — joining
|
|
160
|
+
* means continuing that thing: a rect trunk end keeps its W×H, a round
|
|
161
|
+
* run / fitting collar keeps its diameter. Equipment and terminal
|
|
162
|
+
* collars are round at the port's advertised size.
|
|
163
|
+
*/
|
|
164
|
+
function inheritProfile(port) {
|
|
165
|
+
const owner = useScene.getState().nodes[port.nodeId];
|
|
166
|
+
if (!owner)
|
|
167
|
+
return null;
|
|
168
|
+
if (owner.type === 'duct-segment' || owner.type === 'duct-fitting') {
|
|
169
|
+
return {
|
|
170
|
+
shape: owner.shape,
|
|
171
|
+
diameter: Math.min(48, Math.max(2, owner.type === 'duct-segment' ? owner.diameter : port.diameter)),
|
|
172
|
+
width: owner.width,
|
|
173
|
+
height: owner.height,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (owner.type === 'hvac-equipment' || owner.type === 'duct-terminal') {
|
|
177
|
+
const defaults = ductSegmentDefinition.defaults();
|
|
178
|
+
// Adopt the collar's cross-section so the run leaves a rect / oval
|
|
179
|
+
// plenum as rect / oval (rolled to match in `continuityRollFrom`),
|
|
180
|
+
// falling back to round at the advertised diameter.
|
|
181
|
+
if (port.shape && port.shape !== 'round') {
|
|
182
|
+
return {
|
|
183
|
+
shape: port.shape,
|
|
184
|
+
diameter: Math.min(48, Math.max(2, port.diameter)),
|
|
185
|
+
width: port.width ?? defaults.width,
|
|
186
|
+
height: port.height ?? defaults.height,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
shape: 'round',
|
|
191
|
+
diameter: Math.min(48, Math.max(2, port.diameter)),
|
|
192
|
+
width: defaults.width,
|
|
193
|
+
height: defaults.height,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Project `raw` onto the nearest of the eight 45° rays emanating from
|
|
200
|
+
* `from` in the XZ plane. Y is preserved from `from`. The projection
|
|
201
|
+
* keeps the cursor's *distance* along the chosen ray so the user feels
|
|
202
|
+
* the segment grow with their mouse motion rather than snap to a fixed
|
|
203
|
+
* length.
|
|
204
|
+
*/
|
|
205
|
+
function projectToAngleLock(from, raw) {
|
|
206
|
+
const dx = raw[0] - from[0];
|
|
207
|
+
const dz = raw[2] - from[2];
|
|
208
|
+
const len = Math.hypot(dx, dz);
|
|
209
|
+
if (len < 1e-4)
|
|
210
|
+
return [from[0], from[1], from[2]];
|
|
211
|
+
const theta = Math.atan2(dz, dx);
|
|
212
|
+
const snapped = Math.round(theta / ANGLE_STEP_RAD) * ANGLE_STEP_RAD;
|
|
213
|
+
// Distance along the chosen ray = projection of raw onto that direction.
|
|
214
|
+
const proj = dx * Math.cos(snapped) + dz * Math.sin(snapped);
|
|
215
|
+
const d = Math.max(0, proj);
|
|
216
|
+
return [from[0] + Math.cos(snapped) * d, from[1], from[2] + Math.sin(snapped) * d];
|
|
217
|
+
}
|
|
218
|
+
const elbowPlanFor = (port, awayDir, profile) => {
|
|
219
|
+
if (!port)
|
|
220
|
+
return null;
|
|
221
|
+
const owner = useScene.getState().nodes[port.nodeId];
|
|
222
|
+
if (owner?.type !== 'duct-segment')
|
|
223
|
+
return null;
|
|
224
|
+
const plan = planElbowAtPort(port, awayDir, profile);
|
|
225
|
+
if (!plan)
|
|
226
|
+
return null;
|
|
227
|
+
// Trim the run's snapped endpoint back to the elbow's inlet collar.
|
|
228
|
+
const path = owner.path.map((p) => [...p]);
|
|
229
|
+
const index = port.id === 'start' ? 0 : path.length - 1;
|
|
230
|
+
const neighbor = path[index === 0 ? 1 : index - 1];
|
|
231
|
+
const remaining = Math.hypot(plan.trimmedPortPoint[0] - neighbor[0], plan.trimmedPortPoint[1] - neighbor[1], plan.trimmedPortPoint[2] - neighbor[2]);
|
|
232
|
+
// The trim must leave a real piece of the existing run AND not flip it.
|
|
233
|
+
const original = path[index];
|
|
234
|
+
const originalLen = Math.hypot(original[0] - neighbor[0], original[1] - neighbor[1], original[2] - neighbor[2]);
|
|
235
|
+
if (remaining < 0.08 || remaining >= originalLen)
|
|
236
|
+
return null;
|
|
237
|
+
path[index] = plan.trimmedPortPoint;
|
|
238
|
+
return { ...plan, trim: { id: port.nodeId, data: { path } } };
|
|
239
|
+
};
|
|
240
|
+
const realignPlanFor = (port, awayDir) => {
|
|
241
|
+
if (!port)
|
|
242
|
+
return null;
|
|
243
|
+
const owner = useScene.getState().nodes[port.nodeId];
|
|
244
|
+
if (owner?.type !== 'duct-fitting')
|
|
245
|
+
return null;
|
|
246
|
+
return planElbowRealign(owner, port.id, awayDir);
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Pure planner for a drawn duct segment: given its endpoints and what
|
|
250
|
+
* each end snapped onto (an open port, or a run body for a tee / cross
|
|
251
|
+
* tap), decide every node the commit creates / updates — auto-inserted
|
|
252
|
+
* elbows / tees / crosses, the drawn run (split in two when it crosses a
|
|
253
|
+
* trunk), trunk tails, and trim / realign updates. Reads the live scene
|
|
254
|
+
* graph but mutates nothing, so the live preview can call it each frame
|
|
255
|
+
* to ghost the fittings before the commit applies the identical plan.
|
|
256
|
+
*/
|
|
257
|
+
function planDuctDraw(start, end, startPort, startBody, endPort, endBody, profile) {
|
|
258
|
+
const length = Math.hypot(end[0] - start[0], end[1] - start[1], end[2] - start[2]);
|
|
259
|
+
if (length < 1e-4)
|
|
260
|
+
return null;
|
|
261
|
+
const dir = [
|
|
262
|
+
(end[0] - start[0]) / length,
|
|
263
|
+
(end[1] - start[1]) / length,
|
|
264
|
+
(end[2] - start[2]) / length,
|
|
265
|
+
];
|
|
266
|
+
const startPlan = elbowPlanFor(startPort, dir, profile);
|
|
267
|
+
const endPlan = elbowPlanFor(endPort, [-dir[0], -dir[1], -dir[2]], profile);
|
|
268
|
+
const startRealign = startPlan ? null : realignPlanFor(startPort, dir);
|
|
269
|
+
const endRealign = endPlan ? null : realignPlanFor(endPort, [-dir[0], -dir[1], -dir[2]]);
|
|
270
|
+
const trunkBody = startPlan ? null : startBody;
|
|
271
|
+
const trunkOwner = trunkBody ? useScene.getState().nodes[trunkBody.nodeId] : null;
|
|
272
|
+
const teePlan = trunkBody && trunkOwner?.type === 'duct-segment'
|
|
273
|
+
? planTeeAtRunBody(trunkOwner, trunkBody, dir, profile)
|
|
274
|
+
: null;
|
|
275
|
+
const endTrunkBody = endPlan || endRealign ? null : endBody;
|
|
276
|
+
const endTrunkOwner = endTrunkBody ? useScene.getState().nodes[endTrunkBody.nodeId] : null;
|
|
277
|
+
const endTeePlan = endTrunkBody && endTrunkOwner?.type === 'duct-segment'
|
|
278
|
+
? planTeeAtRunBody(endTrunkOwner, endTrunkBody, [-dir[0], -dir[1], -dir[2]], profile)
|
|
279
|
+
: null;
|
|
280
|
+
let ductStart = startPlan?.collarPoint ?? teePlan?.branchCollar ?? startRealign?.collarPoint ?? start;
|
|
281
|
+
let ductEnd = endPlan?.collarPoint ?? endTeePlan?.branchCollar ?? endRealign?.collarPoint ?? end;
|
|
282
|
+
const remaining = Math.hypot(ductEnd[0] - ductStart[0], ductEnd[1] - ductStart[1], ductEnd[2] - ductStart[2]);
|
|
283
|
+
let plans = [startPlan, endPlan].filter((p) => p !== null);
|
|
284
|
+
let tee = teePlan;
|
|
285
|
+
let endTee = endTeePlan && endTrunkBody?.nodeId === trunkBody?.nodeId ? null : endTeePlan;
|
|
286
|
+
if (!endTee && endTeePlan)
|
|
287
|
+
ductEnd = endRealign?.collarPoint ?? end;
|
|
288
|
+
let realigns = [startRealign, endRealign].filter((p) => p !== null);
|
|
289
|
+
const crossHit = findRunBodyCrossingXZ(start, end, BODY_SNAP_RADIUS_M);
|
|
290
|
+
const crossOwner = crossHit ? useScene.getState().nodes[crossHit.nodeId] : null;
|
|
291
|
+
const crossTappedElsewhere = crossHit?.nodeId === trunkBody?.nodeId || crossHit?.nodeId === endTrunkBody?.nodeId;
|
|
292
|
+
let cross = crossHit && !crossTappedElsewhere && crossOwner?.type === 'duct-segment'
|
|
293
|
+
? planCrossAtRunBody(crossOwner, crossHit, dir, profile)
|
|
294
|
+
: null;
|
|
295
|
+
if (remaining <= 0.08) {
|
|
296
|
+
plans = [];
|
|
297
|
+
tee = null;
|
|
298
|
+
endTee = null;
|
|
299
|
+
realigns = [];
|
|
300
|
+
cross = null;
|
|
301
|
+
ductStart = start;
|
|
302
|
+
ductEnd = end;
|
|
303
|
+
}
|
|
304
|
+
// Rect / oval continuity: roll the new run's cross-section so its
|
|
305
|
+
// profile stays continuous with whatever either end joined.
|
|
306
|
+
let roll = 0;
|
|
307
|
+
if (profile.shape !== 'round') {
|
|
308
|
+
const newDir = new Vector3(...dir);
|
|
309
|
+
roll = continuityRollForRun(startPort, endPort, newDir);
|
|
310
|
+
}
|
|
311
|
+
const defaults = ductSegmentDefinition.defaults();
|
|
312
|
+
const toolDefaults = useEditor.getState().toolDefaults['duct-segment'] ?? {};
|
|
313
|
+
const makeDuct = (from, to) => DuctSegmentNode.parse({
|
|
314
|
+
...defaults,
|
|
315
|
+
...toolDefaults,
|
|
316
|
+
name: profile.shape === 'rect' ? 'Trunk' : 'Duct run',
|
|
317
|
+
path: [from, to],
|
|
318
|
+
shape: profile.shape,
|
|
319
|
+
diameter: profile.diameter,
|
|
320
|
+
width: profile.width,
|
|
321
|
+
height: profile.height,
|
|
322
|
+
roll,
|
|
323
|
+
});
|
|
324
|
+
const ducts = cross
|
|
325
|
+
? [
|
|
326
|
+
dist2(ductStart, cross.branchCollarNear) > 0.08 * 0.08
|
|
327
|
+
? makeDuct(ductStart, cross.branchCollarNear)
|
|
328
|
+
: null,
|
|
329
|
+
dist2(cross.branchCollarFar, ductEnd) > 0.08 * 0.08
|
|
330
|
+
? makeDuct(cross.branchCollarFar, ductEnd)
|
|
331
|
+
: null,
|
|
332
|
+
].filter((d) => d !== null)
|
|
333
|
+
: [makeDuct(ductStart, ductEnd)];
|
|
334
|
+
const fittings = [
|
|
335
|
+
...plans.map((p) => p.fitting),
|
|
336
|
+
...(tee ? [tee.fitting] : []),
|
|
337
|
+
...(endTee ? [endTee.fitting] : []),
|
|
338
|
+
...(cross ? [cross.fitting] : []),
|
|
339
|
+
];
|
|
340
|
+
const tails = [
|
|
341
|
+
...(tee ? [tee.trunkTail] : []),
|
|
342
|
+
...(endTee ? [endTee.trunkTail] : []),
|
|
343
|
+
...(cross ? [cross.trunkTail] : []),
|
|
344
|
+
];
|
|
345
|
+
const updates = [
|
|
346
|
+
...plans.map((p) => p.trim),
|
|
347
|
+
...(tee ? [tee.trunkUpdate] : []),
|
|
348
|
+
...(endTee ? [endTee.trunkUpdate] : []),
|
|
349
|
+
...(cross ? [cross.trunkUpdate] : []),
|
|
350
|
+
...realigns.map((p) => p.update),
|
|
351
|
+
];
|
|
352
|
+
return { fittings, ducts, tails, updates };
|
|
353
|
+
}
|
|
354
|
+
function ductEndPort(duct, id) {
|
|
355
|
+
if (duct.path.length < 2)
|
|
356
|
+
return null;
|
|
357
|
+
const index = id === 'start' ? 0 : duct.path.length - 1;
|
|
358
|
+
const neighborIndex = id === 'start' ? 1 : duct.path.length - 2;
|
|
359
|
+
const position = duct.path[index];
|
|
360
|
+
const neighbor = duct.path[neighborIndex];
|
|
361
|
+
const dx = position[0] - neighbor[0];
|
|
362
|
+
const dy = position[1] - neighbor[1];
|
|
363
|
+
const dz = position[2] - neighbor[2];
|
|
364
|
+
const len = Math.hypot(dx, dy, dz);
|
|
365
|
+
const direction = len < 1e-9 ? [1, 0, 0] : [dx / len, dy / len, dz / len];
|
|
366
|
+
return {
|
|
367
|
+
id,
|
|
368
|
+
nodeId: duct.id,
|
|
369
|
+
position,
|
|
370
|
+
direction,
|
|
371
|
+
diameter: ductPortDiameterIn(duct),
|
|
372
|
+
system: duct.system,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
const DuctSegmentTool = () => {
|
|
376
|
+
const activeLevelId = useViewer((s) => s.selection.levelId);
|
|
377
|
+
const unit = useViewer((s) => s.unit);
|
|
378
|
+
const cursorRef = useRef(null);
|
|
379
|
+
// Cross-section profile for the next committed segment. Q toggles
|
|
380
|
+
// round/rect, [ / ] steps the round diameter, and snapping the start
|
|
381
|
+
// onto an existing run / fitting INHERITS that node's profile — so
|
|
382
|
+
// continuing a 14×8 trunk keeps drawing 14×8, and branching off a
|
|
383
|
+
// round collar keeps its diameter. Seeded from `toolDefaults`.
|
|
384
|
+
const [profile, setProfile] = useState(() => {
|
|
385
|
+
const defaults = ductSegmentDefinition.defaults();
|
|
386
|
+
const seeded = useEditor.getState().toolDefaults['duct-segment'];
|
|
387
|
+
return {
|
|
388
|
+
shape: seeded?.shape ?? defaults.shape,
|
|
389
|
+
diameter: seeded?.diameter ?? defaults.diameter,
|
|
390
|
+
width: seeded?.width ?? defaults.width,
|
|
391
|
+
height: seeded?.height ?? defaults.height,
|
|
392
|
+
};
|
|
393
|
+
});
|
|
394
|
+
const [draftPoints, setDraftPoints] = useState([]);
|
|
395
|
+
const [cursorPos, setCursorPos] = useState(null);
|
|
396
|
+
// Ceiling mode (toggle with C): the first point lands at the level's
|
|
397
|
+
// ceiling height (duct top hugging the ceiling) instead of the floor.
|
|
398
|
+
const [ceilingMode, setCeilingMode] = useState(false);
|
|
399
|
+
// The shared coordinate when the cursor is within snap range of an existing
|
|
400
|
+
// duct (null = free placement). Drives the green cursor highlight so the
|
|
401
|
+
// user sees the next click will join an existing run, not freeform-place.
|
|
402
|
+
const [snapTarget, setSnapTarget] = useState(null);
|
|
403
|
+
// In ceiling mode, the ceiling the cursor is currently under — rendered as
|
|
404
|
+
// a translucent overlay so the duct reads as hung against a real surface
|
|
405
|
+
// rather than a dot floating in space. Null when off-ceiling.
|
|
406
|
+
const [hoverCeiling, setHoverCeiling] = useState(null);
|
|
407
|
+
// True while Alt is held with a last point on the draft — drives the
|
|
408
|
+
// vertical-cylinder ghost and the cursor HUD label.
|
|
409
|
+
const [altActive, setAltActive] = useState(false);
|
|
410
|
+
// What the in-flight cursor end currently snaps onto (port end, or a
|
|
411
|
+
// run body for a tee / cross tap). Drives the auto-fitting GHOST so the
|
|
412
|
+
// user sees the elbow / tee / cross the next click will mint.
|
|
413
|
+
const [endSnap, setEndSnap] = useState({
|
|
414
|
+
port: null,
|
|
415
|
+
body: null,
|
|
416
|
+
});
|
|
417
|
+
// Mirror into refs so emitter callbacks (closing over the first render's
|
|
418
|
+
// setState) read the latest values without re-subscribing.
|
|
419
|
+
const draftRef = useRef(draftPoints);
|
|
420
|
+
draftRef.current = draftPoints;
|
|
421
|
+
const cursorPosRef = useRef(cursorPos);
|
|
422
|
+
cursorPosRef.current = cursorPos;
|
|
423
|
+
const profileRef = useRef(profile);
|
|
424
|
+
profileRef.current = profile;
|
|
425
|
+
const ceilingModeRef = useRef(ceilingMode);
|
|
426
|
+
ceilingModeRef.current = ceilingMode;
|
|
427
|
+
// Port the anchored START point snapped onto (null = free placement).
|
|
428
|
+
// Read at commit so a turn off an existing run mints an elbow there.
|
|
429
|
+
const startPortRef = useRef(null);
|
|
430
|
+
// Centerline hit the anchored START point snapped onto (null = none).
|
|
431
|
+
// Read at commit so a branch off a trunk's side mints a tee there.
|
|
432
|
+
const startBodyRef = useRef(null);
|
|
433
|
+
// Anchor captured when Alt is pressed: screen Y at that moment and the
|
|
434
|
+
// base elevation (= last point's Y). Cleared on Alt release.
|
|
435
|
+
const altAnchorRef = useRef(null);
|
|
436
|
+
// Latest mouse clientY from grid:move; used so the Alt anchor knows where
|
|
437
|
+
// the cursor was at key-press time.
|
|
438
|
+
const lastClientYRef = useRef(null);
|
|
439
|
+
useEffect(() => {
|
|
440
|
+
if (!activeLevelId)
|
|
441
|
+
return;
|
|
442
|
+
// Continuous chain: first click anchors the start, each following
|
|
443
|
+
// click commits one two-point duct and uses that duct's far end as
|
|
444
|
+
// the next anchor. No selection switch or finish gesture.
|
|
445
|
+
//
|
|
446
|
+
// All the auto-fitting decisions (elbow / tee / cross) live in the
|
|
447
|
+
// shared `planDuctDraw` so the live ghost previews exactly what this
|
|
448
|
+
// commit applies.
|
|
449
|
+
const commitSegment = (start, end, endPort = null, endBody = null) => {
|
|
450
|
+
const plan = planDuctDraw(start, end, startPortRef.current, startBodyRef.current, endPort, endBody, profileRef.current);
|
|
451
|
+
if (!plan)
|
|
452
|
+
return;
|
|
453
|
+
// One atomic change: trim / split the joined runs, create the
|
|
454
|
+
// fittings + the new duct. Single undo step.
|
|
455
|
+
useScene.getState().applyNodeChanges({
|
|
456
|
+
create: [
|
|
457
|
+
...plan.fittings.map((node) => ({ node, parentId: activeLevelId })),
|
|
458
|
+
...plan.tails.map((node) => ({ node, parentId: activeLevelId })),
|
|
459
|
+
...plan.ducts.map((node) => ({ node, parentId: activeLevelId })),
|
|
460
|
+
],
|
|
461
|
+
update: plan.updates,
|
|
462
|
+
});
|
|
463
|
+
const nextDuct = plan.ducts.at(-1);
|
|
464
|
+
const nextStart = nextDuct ? nextDuct.path[nextDuct.path.length - 1] : end;
|
|
465
|
+
const nextPort = nextDuct ? ductEndPort(nextDuct, 'end') : endPort;
|
|
466
|
+
triggerSFX('sfx:item-place');
|
|
467
|
+
setDraftPoints([nextStart]);
|
|
468
|
+
setSnapTarget(null);
|
|
469
|
+
setEndSnap({ port: null, body: null });
|
|
470
|
+
startPortRef.current = nextPort;
|
|
471
|
+
startBodyRef.current = nextPort ? null : endBody;
|
|
472
|
+
altAnchorRef.current = null;
|
|
473
|
+
setAltActive(false);
|
|
474
|
+
};
|
|
475
|
+
// Y for a point at level-local `[x, z]`. Floor (0) when ceiling mode is
|
|
476
|
+
// off. In ceiling mode, query the ceiling actually covering that point
|
|
477
|
+
// and hang the duct just below it (centerline = ceiling underside −
|
|
478
|
+
// half the duct's vertical dimension) so its top hugs the ceiling. Each
|
|
479
|
+
// point follows its own ceiling, so a run stepping into a room with a
|
|
480
|
+
// different ceiling height tracks that change. Points not under any
|
|
481
|
+
// ceiling fall back to the floor.
|
|
482
|
+
const resolveCeilingY = (x, z) => {
|
|
483
|
+
if (!ceilingModeRef.current)
|
|
484
|
+
return 0;
|
|
485
|
+
const ceiling = getCeilingHeightAt(activeLevelId, useScene.getState().nodes, x, z);
|
|
486
|
+
if (ceiling === null)
|
|
487
|
+
return 0;
|
|
488
|
+
const p = profileRef.current;
|
|
489
|
+
const verticalIn = p.shape === 'round' ? p.diameter : p.height;
|
|
490
|
+
return Math.max(0, ceiling - (verticalIn * 0.0254) / 2);
|
|
491
|
+
};
|
|
492
|
+
const resolveSnappedPoint = (event) => {
|
|
493
|
+
// Port / body mating is the run's primary affordance; it stays on in
|
|
494
|
+
// every snapping mode except `off` (the raw-cursor bypass).
|
|
495
|
+
const snapEnabled = isGridSnapActive() || isMagneticSnapActive() || isAngleSnapActive();
|
|
496
|
+
const last = draftRef.current.at(-1);
|
|
497
|
+
// First point of the run: grid-snapped placement. Y follows the
|
|
498
|
+
// ceiling under the cursor in ceiling mode (floor otherwise).
|
|
499
|
+
// Endpoint snap can still join an existing run.
|
|
500
|
+
if (!last) {
|
|
501
|
+
const baseY = resolveCeilingY(event.localPosition[0], event.localPosition[2]);
|
|
502
|
+
const raw = [
|
|
503
|
+
event.localPosition[0],
|
|
504
|
+
baseY,
|
|
505
|
+
event.localPosition[2],
|
|
506
|
+
];
|
|
507
|
+
const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
|
|
508
|
+
if (event.nativeEvent?.altKey !== true && snapEnabled) {
|
|
509
|
+
const target = findNearbyPort(raw);
|
|
510
|
+
if (target)
|
|
511
|
+
return {
|
|
512
|
+
point: portPoint(target),
|
|
513
|
+
snapped: portPoint(target),
|
|
514
|
+
port: target,
|
|
515
|
+
body: null,
|
|
516
|
+
};
|
|
517
|
+
// No open end nearby — try the side of a run (tee tap). Probe
|
|
518
|
+
// with a grid-snapped cursor so the tap steps along the duct
|
|
519
|
+
// like every other placement; `off` mode (step 0) rides smoothly.
|
|
520
|
+
const probe = [snap(raw[0], step), baseY, snap(raw[2], step)];
|
|
521
|
+
const body = findNearestRunBodyXZ(probe, BODY_SNAP_RADIUS_M);
|
|
522
|
+
if (body)
|
|
523
|
+
return { point: body.point, snapped: body.point, port: null, body };
|
|
524
|
+
}
|
|
525
|
+
const sx = snap(raw[0], step);
|
|
526
|
+
const sz = snap(raw[2], step);
|
|
527
|
+
return {
|
|
528
|
+
point: [sx, resolveCeilingY(sx, sz), sz],
|
|
529
|
+
snapped: null,
|
|
530
|
+
port: null,
|
|
531
|
+
body: null,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
// Subsequent points: angle-locked to 45° from `last` in `angles` mode.
|
|
535
|
+
// Y inherits `last[1]` for the angle/probe math; the free placement below
|
|
536
|
+
// re-resolves it from the ceiling under the point in ceiling mode, so a run
|
|
537
|
+
// stepping into a room with a different ceiling height tracks that change.
|
|
538
|
+
// Depth changes otherwise come from Alt-vertical risers.
|
|
539
|
+
const rawXZ = [
|
|
540
|
+
event.localPosition[0],
|
|
541
|
+
last[1],
|
|
542
|
+
event.localPosition[2],
|
|
543
|
+
];
|
|
544
|
+
// The 45° lock is now the `angles` snapping mode (Shift cycles to it),
|
|
545
|
+
// not a held key.
|
|
546
|
+
const angled = isAngleSnapActive() ? projectToAngleLock(last, rawXZ) : rawXZ;
|
|
547
|
+
const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
|
|
548
|
+
// Port snap (Alt bypass) — checked against the RAW cursor, not the
|
|
549
|
+
// angle-locked projection, so a port slightly off the 45° ray can
|
|
550
|
+
// still capture the cursor. Joining beats the lock.
|
|
551
|
+
if (event.nativeEvent?.altKey !== true && snapEnabled) {
|
|
552
|
+
const target = findNearbyPort(rawXZ);
|
|
553
|
+
if (target)
|
|
554
|
+
return { point: portPoint(target), snapped: portPoint(target), port: target, body: null };
|
|
555
|
+
// No open end nearby — landing on the side of a run taps a tee
|
|
556
|
+
// there (mirror of the first-point tee tap). Probe with a
|
|
557
|
+
// grid-snapped cursor so the tap steps along the duct instead of
|
|
558
|
+
// sliding smoothly (Shift above frees it). Checked against the
|
|
559
|
+
// cursor, not the 45° projection, so a slightly-off trunk captures.
|
|
560
|
+
const probe = [
|
|
561
|
+
snap(rawXZ[0], step),
|
|
562
|
+
rawXZ[1],
|
|
563
|
+
snap(rawXZ[2], step),
|
|
564
|
+
];
|
|
565
|
+
const body = findNearestRunBodyXZ(probe, BODY_SNAP_RADIUS_M);
|
|
566
|
+
if (body)
|
|
567
|
+
return { point: body.point, snapped: body.point, port: null, body };
|
|
568
|
+
}
|
|
569
|
+
const fx = snap(angled[0], step);
|
|
570
|
+
const fz = snap(angled[2], step);
|
|
571
|
+
const fy = ceilingModeRef.current ? resolveCeilingY(fx, fz) : angled[1];
|
|
572
|
+
return {
|
|
573
|
+
point: [fx, fy, fz],
|
|
574
|
+
snapped: null,
|
|
575
|
+
port: null,
|
|
576
|
+
body: null,
|
|
577
|
+
};
|
|
578
|
+
};
|
|
579
|
+
/**
|
|
580
|
+
* Compute the Alt-mode cursor position: XZ locked to the last point,
|
|
581
|
+
* Y driven by how far the mouse has moved vertically on screen since
|
|
582
|
+
* Alt was pressed. Returns null if there's no anchor (Alt not active).
|
|
583
|
+
*/
|
|
584
|
+
const resolveAltVerticalPoint = (clientY) => {
|
|
585
|
+
const anchor = altAnchorRef.current;
|
|
586
|
+
const last = draftRef.current.at(-1);
|
|
587
|
+
if (!anchor || !last)
|
|
588
|
+
return null;
|
|
589
|
+
const step = isGridSnapActive() ? useEditor.getState().gridSnapStep : 0;
|
|
590
|
+
// Screen +Y points down, so subtract to map "drag up = raise Y".
|
|
591
|
+
const dy = (anchor.clientY - clientY) / ALT_PIXELS_PER_METER;
|
|
592
|
+
const snappedDy = snap(dy, step);
|
|
593
|
+
const y = Math.min(ALT_Y_MAX_M, Math.max(ALT_Y_MIN_M, anchor.baseY + snappedDy));
|
|
594
|
+
return [last[0], y, last[2]];
|
|
595
|
+
};
|
|
596
|
+
// Resolve the cursor point (port / body / grid / angle snap) and then
|
|
597
|
+
// layer Figma-style alignment on top so a run lines up with other runs,
|
|
598
|
+
// fittings, and items as it's drawn. A free point (first vertex, or no
|
|
599
|
+
// angle lock) snaps; an angle-locked continuation shows the guide passively
|
|
600
|
+
// without leaving its 45° ray. Alignment follows the `lines` mode; a
|
|
601
|
+
// port / body snap or Alt-vertical bypasses it.
|
|
602
|
+
const resolveAlignedPoint = (event) => {
|
|
603
|
+
const r = resolveSnappedPoint(event);
|
|
604
|
+
const hasStart = draftRef.current.length > 0;
|
|
605
|
+
const alt = event.nativeEvent?.altKey === true;
|
|
606
|
+
const point = alignDrawPoint(r.point, {
|
|
607
|
+
applySnap: isMagneticSnapActive() && (!hasStart || !isAngleSnapActive()),
|
|
608
|
+
bypass: alt || r.snapped !== null,
|
|
609
|
+
});
|
|
610
|
+
return { ...r, point };
|
|
611
|
+
};
|
|
612
|
+
// The ceiling the cursor is under (ceiling mode only) — drives the
|
|
613
|
+
// translucent surface overlay so the in-flight point reads as hung
|
|
614
|
+
// against a real ceiling. Cleared when off-ceiling or out of mode.
|
|
615
|
+
const updateHoverCeiling = (x, z) => {
|
|
616
|
+
if (!ceilingModeRef.current) {
|
|
617
|
+
setHoverCeiling(null);
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
setHoverCeiling(getCeilingAt(activeLevelId, useScene.getState().nodes, x, z));
|
|
621
|
+
};
|
|
622
|
+
const onMove = (event) => {
|
|
623
|
+
const clientY = event.nativeEvent?.clientY;
|
|
624
|
+
if (typeof clientY === 'number')
|
|
625
|
+
lastClientYRef.current = clientY;
|
|
626
|
+
// Alt vertical mode wins over the XZ logic.
|
|
627
|
+
if (altAnchorRef.current && typeof clientY === 'number') {
|
|
628
|
+
const point = resolveAltVerticalPoint(clientY);
|
|
629
|
+
if (point) {
|
|
630
|
+
clearDrawAlignment();
|
|
631
|
+
setCursorPos(point);
|
|
632
|
+
setSnapTarget(null);
|
|
633
|
+
setEndSnap({ port: null, body: null });
|
|
634
|
+
updateHoverCeiling(point[0], point[2]);
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
const { point, snapped, port, body } = resolveAlignedPoint(event);
|
|
639
|
+
setCursorPos(point);
|
|
640
|
+
setSnapTarget(snapped);
|
|
641
|
+
setEndSnap({ port, body: port ? null : body });
|
|
642
|
+
updateHoverCeiling(point[0], point[2]);
|
|
643
|
+
};
|
|
644
|
+
const onClick = (event) => {
|
|
645
|
+
const start = draftRef.current.at(-1);
|
|
646
|
+
// Vertical mode with a start anchored: the click commits the riser
|
|
647
|
+
// segment right there. Never falls through to the XZ logic — a
|
|
648
|
+
// no-op Alt click (height unchanged) must not place anything.
|
|
649
|
+
if (altAnchorRef.current && start) {
|
|
650
|
+
const clientY = event.nativeEvent?.clientY ?? lastClientYRef.current;
|
|
651
|
+
if (typeof clientY === 'number') {
|
|
652
|
+
const point = resolveAltVerticalPoint(clientY);
|
|
653
|
+
if (point && Math.abs(point[1] - start[1]) >= 1e-4) {
|
|
654
|
+
commitSegment(start, point);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
return;
|
|
658
|
+
}
|
|
659
|
+
const { point, port, body } = resolveAlignedPoint(event);
|
|
660
|
+
if (!start) {
|
|
661
|
+
// First click: anchor the segment start, remembering the port or
|
|
662
|
+
// run body it snapped to so the commit can mint an elbow / tee.
|
|
663
|
+
// Joining a port INHERITS the source's cross-section — continuing
|
|
664
|
+
// a rect trunk keeps drawing rect at its W×H, a round collar its
|
|
665
|
+
// diameter. Body taps (tee branches) keep the tool's own profile.
|
|
666
|
+
triggerSFX('sfx:grid-snap');
|
|
667
|
+
startPortRef.current = port;
|
|
668
|
+
startBodyRef.current = port ? null : body;
|
|
669
|
+
if (port) {
|
|
670
|
+
const inherited = inheritProfile(port);
|
|
671
|
+
if (inherited)
|
|
672
|
+
setProfile(inherited);
|
|
673
|
+
}
|
|
674
|
+
setDraftPoints([point]);
|
|
675
|
+
return;
|
|
676
|
+
}
|
|
677
|
+
// Second click: commit the segment and re-arm. A body hit on the end
|
|
678
|
+
// (no end port) taps a tee into that run's side.
|
|
679
|
+
commitSegment(start, point, port, port ? null : body);
|
|
680
|
+
};
|
|
681
|
+
const enterAltMode = () => {
|
|
682
|
+
const last = draftRef.current.at(-1);
|
|
683
|
+
if (!last || lastClientYRef.current === null)
|
|
684
|
+
return;
|
|
685
|
+
if (altAnchorRef.current)
|
|
686
|
+
return;
|
|
687
|
+
altAnchorRef.current = { clientY: lastClientYRef.current, baseY: last[1] };
|
|
688
|
+
setAltActive(true);
|
|
689
|
+
};
|
|
690
|
+
const exitAltMode = () => {
|
|
691
|
+
if (!altAnchorRef.current)
|
|
692
|
+
return;
|
|
693
|
+
altAnchorRef.current = null;
|
|
694
|
+
setAltActive(false);
|
|
695
|
+
};
|
|
696
|
+
const stepDiameter = (step) => {
|
|
697
|
+
const sizes = DUCT_DIAMETERS_IN;
|
|
698
|
+
const current = profileRef.current.diameter;
|
|
699
|
+
// Nearest catalogue index, then step — handles seeded off-catalogue
|
|
700
|
+
// values (e.g. a preset's 7.5") gracefully.
|
|
701
|
+
let nearest = 0;
|
|
702
|
+
for (let i = 1; i < sizes.length; i++) {
|
|
703
|
+
if (Math.abs(sizes[i] - current) < Math.abs(sizes[nearest] - current))
|
|
704
|
+
nearest = i;
|
|
705
|
+
}
|
|
706
|
+
const next = sizes[Math.min(sizes.length - 1, Math.max(0, nearest + step))];
|
|
707
|
+
if (next === current)
|
|
708
|
+
return;
|
|
709
|
+
setProfile((p) => ({ ...p, diameter: next }));
|
|
710
|
+
triggerSFX('sfx:grid-snap');
|
|
711
|
+
};
|
|
712
|
+
const onKeyDown = (e) => {
|
|
713
|
+
const tag = e.target?.tagName;
|
|
714
|
+
if (tag === 'INPUT' || tag === 'TEXTAREA')
|
|
715
|
+
return;
|
|
716
|
+
if (e.key === 'Alt') {
|
|
717
|
+
e.preventDefault();
|
|
718
|
+
enterAltMode();
|
|
719
|
+
}
|
|
720
|
+
else if (e.key === '[') {
|
|
721
|
+
e.preventDefault();
|
|
722
|
+
stepDiameter(-1);
|
|
723
|
+
}
|
|
724
|
+
else if (e.key === ']') {
|
|
725
|
+
e.preventDefault();
|
|
726
|
+
stepDiameter(1);
|
|
727
|
+
}
|
|
728
|
+
else if (e.key === 'q' || e.key === 'Q') {
|
|
729
|
+
e.preventDefault();
|
|
730
|
+
setProfile((p) => ({ ...p, shape: p.shape === 'round' ? 'rect' : 'round' }));
|
|
731
|
+
triggerSFX('sfx:grid-snap');
|
|
732
|
+
}
|
|
733
|
+
else if (e.key === 'c' || e.key === 'C') {
|
|
734
|
+
// Toggle ceiling mode: points hang from the ceiling above them
|
|
735
|
+
// (duct top hugging the ceiling) instead of sitting on the floor.
|
|
736
|
+
// Only flip while unanchored — already-placed points keep their Y,
|
|
737
|
+
// so a mid-run toggle would split a run across two height regimes.
|
|
738
|
+
if (draftRef.current.length > 0)
|
|
739
|
+
return;
|
|
740
|
+
e.preventDefault();
|
|
741
|
+
setCeilingMode((m) => !m);
|
|
742
|
+
setHoverCeiling(null);
|
|
743
|
+
triggerSFX('sfx:grid-snap');
|
|
744
|
+
}
|
|
745
|
+
};
|
|
746
|
+
const onKeyUp = (e) => {
|
|
747
|
+
if (e.key === 'Alt') {
|
|
748
|
+
e.preventDefault();
|
|
749
|
+
exitAltMode();
|
|
750
|
+
}
|
|
751
|
+
};
|
|
752
|
+
const onCancel = () => {
|
|
753
|
+
clearDrawAlignment();
|
|
754
|
+
if (draftRef.current.length === 0)
|
|
755
|
+
return;
|
|
756
|
+
markToolCancelConsumed();
|
|
757
|
+
setDraftPoints([]);
|
|
758
|
+
setCursorPos(null);
|
|
759
|
+
setSnapTarget(null);
|
|
760
|
+
setEndSnap({ port: null, body: null });
|
|
761
|
+
setHoverCeiling(null);
|
|
762
|
+
startPortRef.current = null;
|
|
763
|
+
startBodyRef.current = null;
|
|
764
|
+
};
|
|
765
|
+
emitter.on('grid:move', onMove);
|
|
766
|
+
emitter.on('grid:click', onClick);
|
|
767
|
+
emitter.on('tool:cancel', onCancel);
|
|
768
|
+
window.addEventListener('keydown', onKeyDown);
|
|
769
|
+
window.addEventListener('keyup', onKeyUp);
|
|
770
|
+
return () => {
|
|
771
|
+
emitter.off('grid:move', onMove);
|
|
772
|
+
emitter.off('grid:click', onClick);
|
|
773
|
+
emitter.off('tool:cancel', onCancel);
|
|
774
|
+
window.removeEventListener('keydown', onKeyDown);
|
|
775
|
+
window.removeEventListener('keyup', onKeyUp);
|
|
776
|
+
altAnchorRef.current = null;
|
|
777
|
+
clearDrawAlignment();
|
|
778
|
+
};
|
|
779
|
+
}, [activeLevelId]);
|
|
780
|
+
if (!activeLevelId)
|
|
781
|
+
return null;
|
|
782
|
+
const previewSegments = [];
|
|
783
|
+
for (let i = 0; i < draftPoints.length - 1; i++) {
|
|
784
|
+
previewSegments.push({ a: draftPoints[i], b: draftPoints[i + 1] });
|
|
785
|
+
}
|
|
786
|
+
const last = draftPoints.at(-1);
|
|
787
|
+
if (last && cursorPos) {
|
|
788
|
+
previewSegments.push({ a: last, b: cursorPos });
|
|
789
|
+
}
|
|
790
|
+
// Ghost the auto-inserted fittings (elbow / tee / cross) the next click
|
|
791
|
+
// will mint, by running the SAME planner the commit uses against the
|
|
792
|
+
// in-flight endpoints. Skipped in Alt-vertical mode (no XZ tap there).
|
|
793
|
+
const ghostFittings = last && cursorPos && !altActive
|
|
794
|
+
? (planDuctDraw(last, cursorPos, startPortRef.current, startBodyRef.current, endSnap.port, endSnap.body, profile)?.fittings ?? [])
|
|
795
|
+
: [];
|
|
796
|
+
// Wall-style dimension pill above the cursor: absolute world coords before
|
|
797
|
+
// the first point, signed per-axis deltas from the last placed point while
|
|
798
|
+
// a segment is in flight. The actively-driven axis is emphasised — Y in
|
|
799
|
+
// Alt-vertical mode, otherwise whichever horizontal axis dominates. A
|
|
800
|
+
// trailing Ø readout shows the diameter the next click commits ([ / ]).
|
|
801
|
+
const pillParts = cursorPos
|
|
802
|
+
? [
|
|
803
|
+
...['x', 'y', 'z'].map((axis, i) => ({
|
|
804
|
+
key: axis,
|
|
805
|
+
prefix: axis.toUpperCase(),
|
|
806
|
+
value: last ? cursorPos[i] - last[i] : cursorPos[i],
|
|
807
|
+
signed: !!last,
|
|
808
|
+
})),
|
|
809
|
+
...(profile.shape === 'round'
|
|
810
|
+
? [{ key: 'diameter', prefix: 'Ø', value: profile.diameter * 0.0254, signed: false }]
|
|
811
|
+
: [
|
|
812
|
+
{ key: 'trunk-w', prefix: 'W', value: profile.width * 0.0254, signed: false },
|
|
813
|
+
{ key: 'trunk-h', prefix: 'H', value: profile.height * 0.0254, signed: false },
|
|
814
|
+
]),
|
|
815
|
+
]
|
|
816
|
+
: null;
|
|
817
|
+
const pillPrimary = last && cursorPos
|
|
818
|
+
? altActive
|
|
819
|
+
? 'y'
|
|
820
|
+
: Math.abs(cursorPos[0] - last[0]) >= Math.abs(cursorPos[2] - last[2])
|
|
821
|
+
? 'x'
|
|
822
|
+
: 'z'
|
|
823
|
+
: undefined;
|
|
824
|
+
// When the in-flight point hangs above the floor (ceiling mode, or an
|
|
825
|
+
// Alt riser), the cursor marker itself rides AT the point (where the
|
|
826
|
+
// mouse is aiming and the next click commits), and a plumb line drops
|
|
827
|
+
// straight down to a faint ground ring on the floor below — so the plan
|
|
828
|
+
// position stays legible from any angle. A floor-level point keeps the
|
|
829
|
+
// standard fixed-height cursor look.
|
|
830
|
+
const cursorElevation = cursorPos ? cursorPos[1] : 0;
|
|
831
|
+
const isElevated = cursorElevation > 0.001;
|
|
832
|
+
const cursorGround = cursorPos
|
|
833
|
+
? [cursorPos[0], 0, cursorPos[2]]
|
|
834
|
+
: null;
|
|
835
|
+
return (_jsxs(LevelOffsetGroup, { children: [ceilingMode && hoverCeiling && _jsx(CeilingHighlight, { ceiling: hoverCeiling }), cursorPos && cursorGround && (_jsxs(_Fragment, { children: [isElevated ? (_jsx(CursorSphere, { color: snapTarget ? SNAP_CURSOR_COLOR : undefined, dotAtTip: true, height: cursorElevation, position: cursorGround, ref: cursorRef })) : (_jsx(CursorSphere, { color: snapTarget ? SNAP_CURSOR_COLOR : undefined, position: cursorPos, ref: cursorRef })), pillParts && (_jsx("group", { position: cursorPos, children: _jsx(Html, { center: true, position: [0, 1.45, 0], style: { pointerEvents: 'none', userSelect: 'none' }, zIndexRange: [100, 0], children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [ceilingMode && !last && (_jsx("div", { className: "whitespace-nowrap rounded-full border border-border/60 bg-background/90 px-3 py-0.5 text-[10px] text-muted-foreground shadow-sm backdrop-blur", children: "Ceiling \u00B7 C to toggle" })), _jsx(DimensionPill, { parts: pillParts, primary: pillPrimary, unit: unit })] }) }) }))] })), draftPoints.map((p, i) => (_jsxs("mesh", { layers: EDITOR_LAYER, position: p, children: [_jsx("sphereGeometry", { args: [0.07, 16, 12] }), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false })] }, `pt-${i}`))), previewSegments.map((seg, i) => (_jsx(PreviewSegment, { a: seg.a, b: seg.b, endPort: endSnap.port, profile: profile, startPort: startPortRef.current }, `seg-${i}`))), ghostFittings.map((fitting) => (_jsx(FittingGhost, { fitting: fitting }, fitting.id)))] }));
|
|
836
|
+
};
|
|
837
|
+
/**
|
|
838
|
+
* Build a horizontal `ShapeGeometry` for a ceiling polygon (with holes) in
|
|
839
|
+
* level-local XZ, laid flat in the XZ plane. Mirrors the ceiling renderer /
|
|
840
|
+
* move-tool convention (Z negated, then rotated onto the floor plane).
|
|
841
|
+
*/
|
|
842
|
+
function buildCeilingShape(polygon, holes) {
|
|
843
|
+
if (polygon.length < 3)
|
|
844
|
+
return null;
|
|
845
|
+
const shape = new Shape();
|
|
846
|
+
const first = polygon[0];
|
|
847
|
+
shape.moveTo(first[0], -first[1]);
|
|
848
|
+
for (let i = 1; i < polygon.length; i++) {
|
|
849
|
+
const pt = polygon[i];
|
|
850
|
+
shape.lineTo(pt[0], -pt[1]);
|
|
851
|
+
}
|
|
852
|
+
shape.closePath();
|
|
853
|
+
for (const holePolygon of holes) {
|
|
854
|
+
if (holePolygon.length < 3)
|
|
855
|
+
continue;
|
|
856
|
+
const hole = new Path();
|
|
857
|
+
const hf = holePolygon[0];
|
|
858
|
+
hole.moveTo(hf[0], -hf[1]);
|
|
859
|
+
for (let i = 1; i < holePolygon.length; i++) {
|
|
860
|
+
const pt = holePolygon[i];
|
|
861
|
+
hole.lineTo(pt[0], -pt[1]);
|
|
862
|
+
}
|
|
863
|
+
hole.closePath();
|
|
864
|
+
shape.holes.push(hole);
|
|
865
|
+
}
|
|
866
|
+
const geometry = new ShapeGeometry(shape);
|
|
867
|
+
geometry.rotateX(-Math.PI / 2);
|
|
868
|
+
return geometry;
|
|
869
|
+
}
|
|
870
|
+
/**
|
|
871
|
+
* Translucent overlay of the ceiling the cursor is under, drawn at the
|
|
872
|
+
* ceiling's own height. Gives the in-flight duct point a real surface to
|
|
873
|
+
* read against, so "hung against the ceiling" is visible from any angle
|
|
874
|
+
* instead of being a dot floating in space.
|
|
875
|
+
*/
|
|
876
|
+
function CeilingHighlight({ ceiling }) {
|
|
877
|
+
const geometry = useMemo(() => buildCeilingShape(ceiling.polygon, ceiling.holes), [ceiling.polygon, ceiling.holes]);
|
|
878
|
+
const outline = useMemo(() => {
|
|
879
|
+
if (ceiling.polygon.length < 2)
|
|
880
|
+
return null;
|
|
881
|
+
const pts = ceiling.polygon.map(([x, z]) => new Vector3(x, 0, z));
|
|
882
|
+
const f = ceiling.polygon[0];
|
|
883
|
+
pts.push(new Vector3(f[0], 0, f[1]));
|
|
884
|
+
return pts;
|
|
885
|
+
}, [ceiling.polygon]);
|
|
886
|
+
if (!geometry)
|
|
887
|
+
return null;
|
|
888
|
+
const y = ceiling.height ?? 2.5;
|
|
889
|
+
return (_jsxs("group", { position: [0, y, 0], children: [_jsx("mesh", { geometry: geometry, layers: EDITOR_LAYER, renderOrder: 1, children: _jsx("meshBasicMaterial", { color: "#818cf8", depthWrite: false, opacity: 0.15, side: DoubleSide, transparent: true }) }), outline && (_jsxs("line", { children: [_jsx("bufferGeometry", { ref: (g) => {
|
|
890
|
+
if (g)
|
|
891
|
+
g.setFromPoints(outline);
|
|
892
|
+
} }), _jsx("lineBasicMaterial", { color: "#818cf8", opacity: 0.6, transparent: true })] }))] }));
|
|
893
|
+
}
|
|
894
|
+
function PreviewSegment({ a, b, profile, startPort, endPort, }) {
|
|
895
|
+
const start = new Vector3(...a);
|
|
896
|
+
const end = new Vector3(...b);
|
|
897
|
+
const dir = new Vector3().subVectors(end, start);
|
|
898
|
+
const length = dir.length();
|
|
899
|
+
if (length < 1e-4)
|
|
900
|
+
return null;
|
|
901
|
+
dir.normalize();
|
|
902
|
+
const mid = new Vector3().addVectors(start, end).multiplyScalar(0.5);
|
|
903
|
+
// Rect AND oval ghost as a box — close enough for a translucent guide.
|
|
904
|
+
if (profile.shape !== 'round') {
|
|
905
|
+
const w = profile.width * 0.0254;
|
|
906
|
+
const h = profile.height * 0.0254;
|
|
907
|
+
return (_jsxs("mesh", { layers: EDITOR_LAYER, position: mid.toArray(), ref: (m) => {
|
|
908
|
+
if (!m)
|
|
909
|
+
return;
|
|
910
|
+
// Same basis AND roll as the commit will use, so the ghost
|
|
911
|
+
// shows the orientation that actually lands.
|
|
912
|
+
const roll = continuityRollForRun(startPort, endPort, dir);
|
|
913
|
+
const { width: x, height: z } = rectSectionAxes(dir, roll);
|
|
914
|
+
m.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(x, dir, z));
|
|
915
|
+
}, children: [_jsx("boxGeometry", { args: [w, length, h] }), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, opacity: PREVIEW_OPACITY, transparent: true })] }));
|
|
916
|
+
}
|
|
917
|
+
const radius = (profile.diameter * 0.0254) / 2;
|
|
918
|
+
return (_jsxs("mesh", { layers: EDITOR_LAYER, position: mid.toArray(), ref: (m) => {
|
|
919
|
+
if (!m)
|
|
920
|
+
return;
|
|
921
|
+
m.quaternion.setFromUnitVectors(new Vector3(0, 1, 0), dir);
|
|
922
|
+
}, children: [_jsx("cylinderGeometry", { args: [radius, radius, length, 24, 1, false] }), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, opacity: PREVIEW_OPACITY, transparent: true })] }));
|
|
923
|
+
}
|
|
924
|
+
export default DuctSegmentTool;
|