@pascal-app/nodes 1.0.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -8
- package/dist/agent-operations/index.d.ts +5 -0
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +10 -0
- package/dist/agent-tools/index.d.ts +195 -0
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +82 -2
- package/dist/beam/actions/move-endpoint.d.ts +24 -0
- package/dist/beam/actions/move-endpoint.d.ts.map +1 -0
- package/dist/beam/actions/move-endpoint.js +54 -0
- package/dist/beam/definition.d.ts +65 -0
- package/dist/beam/definition.d.ts.map +1 -0
- package/dist/beam/definition.edit.d.ts +4 -0
- package/dist/beam/definition.edit.d.ts.map +1 -0
- package/dist/beam/definition.edit.js +133 -0
- package/dist/beam/definition.js +4 -0
- package/dist/beam/definition.render.d.ts +6 -0
- package/dist/beam/definition.render.d.ts.map +1 -0
- package/dist/beam/definition.render.js +32 -0
- package/dist/beam/draft-settings.d.ts +17 -0
- package/dist/beam/draft-settings.d.ts.map +1 -0
- package/dist/beam/draft-settings.js +81 -0
- package/dist/beam/drafting.d.ts +35 -0
- package/dist/beam/drafting.d.ts.map +1 -0
- package/dist/beam/drafting.js +103 -0
- package/dist/beam/floorplan-affordances.d.ts +8 -0
- package/dist/beam/floorplan-affordances.d.ts.map +1 -0
- package/dist/beam/floorplan-affordances.js +40 -0
- package/dist/beam/floorplan-move.d.ts +11 -0
- package/dist/beam/floorplan-move.d.ts.map +1 -0
- package/dist/beam/floorplan-move.js +54 -0
- package/dist/beam/floorplan.d.ts +11 -0
- package/dist/beam/floorplan.d.ts.map +1 -0
- package/dist/beam/floorplan.js +91 -0
- package/dist/beam/geometry.d.ts +19 -0
- package/dist/beam/geometry.d.ts.map +1 -0
- package/dist/beam/geometry.js +63 -0
- package/dist/beam/index.d.ts +3 -0
- package/dist/beam/index.d.ts.map +1 -0
- package/dist/beam/index.js +2 -0
- package/dist/beam/move-endpoint-tool.d.ts +21 -0
- package/dist/beam/move-endpoint-tool.d.ts.map +1 -0
- package/dist/beam/move-endpoint-tool.js +49 -0
- package/dist/beam/move-tool.d.ts +12 -0
- package/dist/beam/move-tool.d.ts.map +1 -0
- package/dist/beam/move-tool.js +114 -0
- package/dist/beam/panel-model.d.ts +28 -0
- package/dist/beam/panel-model.d.ts.map +1 -0
- package/dist/beam/panel-model.js +123 -0
- package/dist/beam/panel.d.ts +13 -0
- package/dist/beam/panel.d.ts.map +1 -0
- package/dist/beam/panel.js +107 -0
- package/dist/beam/parametrics.d.ts +3 -0
- package/dist/beam/parametrics.d.ts.map +1 -0
- package/dist/beam/parametrics.js +4 -0
- package/dist/beam/renderer.d.ts +13 -0
- package/dist/beam/renderer.d.ts.map +1 -0
- package/dist/beam/renderer.js +36 -0
- package/dist/beam/schema.d.ts +2 -0
- package/dist/beam/schema.d.ts.map +1 -0
- package/dist/beam/schema.js +1 -0
- package/dist/beam/tool.d.ts +13 -0
- package/dist/beam/tool.d.ts.map +1 -0
- package/dist/beam/tool.js +152 -0
- package/dist/block/definition.d.ts +67 -7
- package/dist/block/definition.d.ts.map +1 -1
- package/dist/block/definition.edit.d.ts +4 -0
- package/dist/block/definition.edit.d.ts.map +1 -0
- package/dist/block/definition.edit.js +28 -0
- package/dist/block/definition.js +5 -144
- package/dist/block/definition.render.d.ts +11 -0
- package/dist/block/definition.render.d.ts.map +1 -0
- package/dist/block/definition.render.js +120 -0
- package/dist/box-vent/definition.d.ts +103 -29
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.edit.d.ts +4 -0
- package/dist/box-vent/definition.edit.d.ts.map +1 -0
- package/dist/box-vent/definition.edit.js +151 -0
- package/dist/box-vent/definition.js +4 -212
- package/dist/box-vent/definition.render.d.ts +6 -0
- package/dist/box-vent/definition.render.d.ts.map +1 -0
- package/dist/box-vent/definition.render.js +40 -0
- package/dist/box-vent/move-tool.d.ts.map +1 -1
- package/dist/box-vent/move-tool.js +6 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +8 -7
- package/dist/building/definition.d.ts +49 -11
- package/dist/building/definition.d.ts.map +1 -1
- package/dist/building/definition.edit.d.ts +4 -0
- package/dist/building/definition.edit.d.ts.map +1 -0
- package/dist/building/definition.edit.js +10 -0
- package/dist/building/definition.js +4 -54
- package/dist/building/definition.render.d.ts +6 -0
- package/dist/building/definition.render.d.ts.map +1 -0
- package/dist/building/definition.render.js +38 -0
- package/dist/builtin-definitions.d.ts +9784 -0
- package/dist/builtin-definitions.d.ts.map +1 -0
- package/dist/builtin-definitions.js +113 -0
- package/dist/builtin-edit-contributions.d.ts +9608 -0
- package/dist/builtin-edit-contributions.d.ts.map +1 -0
- package/dist/builtin-edit-contributions.js +112 -0
- package/dist/builtin-plugin-metadata.d.ts +5 -0
- package/dist/builtin-plugin-metadata.d.ts.map +1 -0
- package/dist/builtin-plugin-metadata.js +1 -0
- package/dist/cabinet/batchable.d.ts +10 -0
- package/dist/cabinet/batchable.d.ts.map +1 -0
- package/dist/cabinet/batchable.js +12 -0
- package/dist/cabinet/compartment-card.d.ts.map +1 -1
- package/dist/cabinet/compartment-card.js +142 -46
- package/dist/cabinet/countertop-layout.d.ts +5 -0
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts +497 -25
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.edit.d.ts +5 -0
- package/dist/cabinet/definition.edit.d.ts.map +1 -0
- package/dist/cabinet/definition.edit.js +1375 -0
- package/dist/cabinet/definition.js +6 -2112
- package/dist/cabinet/definition.render.d.ts +66 -0
- package/dist/cabinet/definition.render.d.ts.map +1 -0
- package/dist/cabinet/definition.render.js +751 -0
- package/dist/cabinet/dimension-input.d.ts +6 -0
- package/dist/cabinet/dimension-input.d.ts.map +1 -0
- package/dist/cabinet/dimension-input.js +8 -0
- package/dist/cabinet/essential-controls.d.ts.map +1 -1
- package/dist/cabinet/essential-controls.js +82 -17
- package/dist/cabinet/index.d.ts +1 -1
- package/dist/cabinet/index.d.ts.map +1 -1
- package/dist/cabinet/index.js +1 -1
- package/dist/cabinet/kitchen-catalog.d.ts +17 -4
- package/dist/cabinet/kitchen-catalog.d.ts.map +1 -1
- package/dist/cabinet/kitchen-catalog.js +45 -7
- package/dist/cabinet/kitchen-collection.d.ts.map +1 -1
- package/dist/cabinet/kitchen-collection.js +21 -5
- package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
- package/dist/cabinet/kitchen-module-actions.js +108 -15
- package/dist/cabinet/neighbor-placement.d.ts +10 -0
- package/dist/cabinet/neighbor-placement.d.ts.map +1 -1
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +127 -50
- package/dist/cabinet/placement-dimensions.d.ts +36 -2
- package/dist/cabinet/placement-dimensions.d.ts.map +1 -1
- package/dist/cabinet/placement-dimensions.js +68 -2
- package/dist/cabinet/run-finishing.d.ts +5 -0
- package/dist/cabinet/run-finishing.d.ts.map +1 -1
- package/dist/cabinet/run-ops.d.ts +5 -0
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +203 -52
- package/dist/cabinet/system.js +1 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +275 -19
- package/dist/cabinet/wall-snap.d.ts +5 -1
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +2 -2
- package/dist/ceiling/build-up-section.d.ts +7 -0
- package/dist/ceiling/build-up-section.d.ts.map +1 -0
- package/dist/ceiling/build-up-section.js +57 -0
- package/dist/ceiling/definition.d.ts +152 -19
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.edit.d.ts +4 -0
- package/dist/ceiling/definition.edit.d.ts.map +1 -0
- package/dist/ceiling/definition.edit.js +125 -0
- package/dist/ceiling/definition.js +4 -205
- package/dist/ceiling/definition.render.d.ts +6 -0
- package/dist/ceiling/definition.render.d.ts.map +1 -0
- package/dist/ceiling/definition.render.js +71 -0
- package/dist/ceiling/floorplan-affordances.d.ts +112 -0
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/materials.d.ts +5 -0
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +17 -0
- package/dist/ceiling/panel-model.d.ts +13 -0
- package/dist/ceiling/panel-model.d.ts.map +1 -0
- package/dist/ceiling/panel-model.js +49 -0
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +82 -18
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +10 -4
- package/dist/ceiling/tool.d.ts.map +1 -1
- package/dist/ceiling/tool.js +24 -4
- package/dist/chimney/definition.d.ts +186 -17
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.edit.d.ts +4 -0
- package/dist/chimney/definition.edit.d.ts.map +1 -0
- package/dist/chimney/definition.edit.js +219 -0
- package/dist/chimney/definition.js +4 -390
- package/dist/chimney/definition.render.d.ts +6 -0
- package/dist/chimney/definition.render.d.ts.map +1 -0
- package/dist/chimney/definition.render.js +59 -0
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +6 -4
- package/dist/chimney/panel.d.ts.map +1 -1
- package/dist/chimney/panel.js +113 -41
- package/dist/column/__bench__/geometry.d.ts +2 -0
- package/dist/column/__bench__/geometry.d.ts.map +1 -0
- package/dist/column/__bench__/geometry.js +36 -0
- package/dist/column/bounds.d.ts +7 -0
- package/dist/column/bounds.d.ts.map +1 -0
- package/dist/column/bounds.js +127 -0
- package/dist/column/definition.d.ts +372 -20
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.edit.d.ts +4 -0
- package/dist/column/definition.edit.d.ts.map +1 -0
- package/dist/column/definition.edit.js +323 -0
- package/dist/column/definition.js +4 -436
- package/dist/column/definition.render.d.ts +6 -0
- package/dist/column/definition.render.d.ts.map +1 -0
- package/dist/column/definition.render.js +81 -0
- package/dist/column/edit-policy.d.ts +5 -0
- package/dist/column/edit-policy.d.ts.map +1 -0
- package/dist/column/edit-policy.js +43 -0
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +2 -0
- package/dist/column/floorplan-move.d.ts.map +1 -1
- package/dist/column/floorplan-move.js +5 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +50 -91
- package/dist/column/geometry.d.ts +13 -0
- package/dist/column/geometry.d.ts.map +1 -0
- package/dist/column/geometry.js +294 -0
- package/dist/column/hosted-resize.d.ts +31 -3
- package/dist/column/hosted-resize.d.ts.map +1 -1
- package/dist/column/hosted-resize.js +7 -1
- package/dist/column/inspector-highlight.d.ts +29 -0
- package/dist/column/inspector-highlight.d.ts.map +1 -0
- package/dist/column/inspector-highlight.js +166 -0
- package/dist/column/paint.d.ts.map +1 -1
- package/dist/column/paint.js +12 -2
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +459 -283
- package/dist/column/parametrics.js +1 -1
- package/dist/column/post-options.d.ts +10 -0
- package/dist/column/post-options.d.ts.map +1 -0
- package/dist/column/post-options.js +71 -0
- package/dist/column/post-placement.d.ts +78 -0
- package/dist/column/post-placement.d.ts.map +1 -0
- package/dist/column/post-placement.js +157 -0
- package/dist/column/post-section.d.ts +17 -0
- package/dist/column/post-section.d.ts.map +1 -0
- package/dist/column/post-section.js +95 -0
- package/dist/column/post-tool.d.ts +11 -0
- package/dist/column/post-tool.d.ts.map +1 -0
- package/dist/column/post-tool.js +94 -0
- package/dist/column/preset-gallery.d.ts +8 -0
- package/dist/column/preset-gallery.d.ts.map +1 -0
- package/dist/column/preset-gallery.js +98 -0
- package/dist/column/presets.d.ts +16 -0
- package/dist/column/presets.d.ts.map +1 -0
- package/dist/column/presets.js +96 -0
- package/dist/column/property-preview.d.ts +8 -0
- package/dist/column/property-preview.d.ts.map +1 -0
- package/dist/column/property-preview.js +50 -0
- package/dist/column/renderer.d.ts +13 -1
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +174 -198
- package/dist/column/shape.d.ts +4 -4
- package/dist/column/shape.d.ts.map +1 -1
- package/dist/column/shape.js +1 -1
- package/dist/column/surface.d.ts.map +1 -1
- package/dist/column/surface.js +15 -8
- package/dist/column/tool.d.ts +3 -10
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +34 -11
- package/dist/construction-dimension/definition.d.ts +129 -3
- package/dist/construction-dimension/definition.d.ts.map +1 -1
- package/dist/construction-dimension/definition.edit.d.ts +4 -0
- package/dist/construction-dimension/definition.edit.d.ts.map +1 -0
- package/dist/construction-dimension/definition.edit.js +32 -0
- package/dist/construction-dimension/definition.js +4 -83
- package/dist/construction-dimension/definition.render.d.ts +6 -0
- package/dist/construction-dimension/definition.render.d.ts.map +1 -0
- package/dist/construction-dimension/definition.render.js +53 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan-tool.js +2 -2
- package/dist/cupola/definition.d.ts +95 -10
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.edit.d.ts +4 -0
- package/dist/cupola/definition.edit.d.ts.map +1 -0
- package/dist/cupola/definition.edit.js +103 -0
- package/dist/cupola/definition.js +4 -148
- package/dist/cupola/definition.render.d.ts +6 -0
- package/dist/cupola/definition.render.d.ts.map +1 -0
- package/dist/cupola/definition.render.js +43 -0
- package/dist/cupola/move-tool.d.ts.map +1 -1
- package/dist/cupola/move-tool.js +6 -5
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +14 -7
- package/dist/definition-contributions.d.ts +14 -0
- package/dist/definition-contributions.d.ts.map +1 -0
- package/dist/definition-contributions.js +8 -0
- package/dist/door/actions.d.ts +7 -0
- package/dist/door/actions.d.ts.map +1 -0
- package/dist/door/actions.js +32 -0
- package/dist/door/contextual-dimensions.d.ts.map +1 -1
- package/dist/door/contextual-dimensions.js +11 -1
- package/dist/door/definition.d.ts +350 -22
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.edit.d.ts +4 -0
- package/dist/door/definition.edit.d.ts.map +1 -0
- package/dist/door/definition.edit.js +246 -0
- package/dist/door/definition.js +4 -314
- package/dist/door/definition.render.d.ts +6 -0
- package/dist/door/definition.render.d.ts.map +1 -0
- package/dist/door/definition.render.js +88 -0
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +5 -2
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +34 -9
- package/dist/door/floorplan.d.ts +2 -0
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +89 -16
- package/dist/door/mechanism.d.ts.map +1 -1
- package/dist/door/mechanism.js +1 -2
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +81 -35
- package/dist/door/paint.d.ts +2 -7
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +26 -2
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +242 -90
- package/dist/door/parametrics.js +1 -1
- package/dist/door/placement.d.ts.map +1 -1
- package/dist/door/placement.js +9 -2
- package/dist/door/swing.d.ts +22 -0
- package/dist/door/swing.d.ts.map +1 -0
- package/dist/door/swing.js +36 -0
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +77 -29
- package/dist/dormer/definition.d.ts +240 -11
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.edit.d.ts +4 -0
- package/dist/dormer/definition.edit.d.ts.map +1 -0
- package/dist/dormer/definition.edit.js +214 -0
- package/dist/dormer/definition.js +4 -319
- package/dist/dormer/definition.render.d.ts +6 -0
- package/dist/dormer/definition.render.d.ts.map +1 -0
- package/dist/dormer/definition.render.js +52 -0
- package/dist/dormer/panel-actions-section.d.ts.map +1 -1
- package/dist/dormer/panel-actions-section.js +3 -1
- package/dist/dormer/panel-position-section.d.ts.map +1 -1
- package/dist/dormer/panel-position-section.js +4 -3
- package/dist/dormer/panel-windows-section.d.ts.map +1 -1
- package/dist/dormer/panel-windows-section.js +38 -1
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +24 -18
- package/dist/downspout/definition.d.ts +108 -16
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.edit.d.ts +4 -0
- package/dist/downspout/definition.edit.d.ts.map +1 -0
- package/dist/downspout/definition.edit.js +134 -0
- package/dist/downspout/definition.js +4 -188
- package/dist/downspout/definition.render.d.ts +6 -0
- package/dist/downspout/definition.render.d.ts.map +1 -0
- package/dist/downspout/definition.render.js +46 -0
- package/dist/downspout/inspector-editors.d.ts.map +1 -1
- package/dist/downspout/inspector-editors.js +3 -2
- package/dist/duct-fitting/definition.d.ts +99 -11
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.edit.d.ts +4 -0
- package/dist/duct-fitting/definition.edit.d.ts.map +1 -0
- package/dist/duct-fitting/definition.edit.js +49 -0
- package/dist/duct-fitting/definition.js +4 -135
- package/dist/duct-fitting/definition.render.d.ts +6 -0
- package/dist/duct-fitting/definition.render.d.ts.map +1 -0
- package/dist/duct-fitting/definition.render.js +82 -0
- package/dist/duct-fitting/floorplan.js +1 -1
- package/dist/duct-fitting/geometry.js +2 -1
- package/dist/duct-fitting/inspector-editors.d.ts.map +1 -1
- package/dist/duct-fitting/inspector-editors.js +6 -1
- package/dist/duct-fitting/move-tool.d.ts.map +1 -1
- package/dist/duct-fitting/move-tool.js +19 -13
- package/dist/duct-fitting/selection.d.ts.map +1 -1
- package/dist/duct-fitting/selection.js +92 -80
- package/dist/duct-fitting/tool.d.ts.map +1 -1
- package/dist/duct-fitting/tool.js +11 -2
- package/dist/duct-segment/continuation.d.ts +2 -2
- package/dist/duct-segment/continuation.d.ts.map +1 -1
- package/dist/duct-segment/continuation.js +53 -2
- package/dist/duct-segment/definition.d.ts +91 -3
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.edit.d.ts +4 -0
- package/dist/duct-segment/definition.edit.d.ts.map +1 -0
- package/dist/duct-segment/definition.edit.js +100 -0
- package/dist/duct-segment/definition.js +4 -181
- package/dist/duct-segment/definition.render.d.ts +6 -0
- package/dist/duct-segment/definition.render.d.ts.map +1 -0
- package/dist/duct-segment/definition.render.js +89 -0
- package/dist/duct-segment/edit-inspector.d.ts +5 -0
- package/dist/duct-segment/edit-inspector.d.ts.map +1 -0
- package/dist/duct-segment/edit-inspector.js +163 -0
- package/dist/duct-segment/edit-operation.d.ts +17 -0
- package/dist/duct-segment/edit-operation.d.ts.map +1 -0
- package/dist/duct-segment/edit-operation.js +283 -0
- package/dist/duct-segment/floorplan.js +1 -1
- package/dist/duct-segment/geometry.d.ts +0 -40
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +2 -77
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +34 -35
- package/dist/duct-segment/parametrics.d.ts.map +1 -1
- package/dist/duct-segment/parametrics.js +2 -35
- package/dist/duct-segment/profile.d.ts +42 -0
- package/dist/duct-segment/profile.d.ts.map +1 -0
- package/dist/duct-segment/profile.js +78 -0
- package/dist/duct-segment/selection.d.ts.map +1 -1
- package/dist/duct-segment/selection.js +112 -53
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +103 -27
- package/dist/duct-terminal/definition.d.ts +68 -12
- package/dist/duct-terminal/definition.d.ts.map +1 -1
- package/dist/duct-terminal/definition.edit.d.ts +4 -0
- package/dist/duct-terminal/definition.edit.d.ts.map +1 -0
- package/dist/duct-terminal/definition.edit.js +14 -0
- package/dist/duct-terminal/definition.js +4 -87
- package/dist/duct-terminal/definition.render.d.ts +6 -0
- package/dist/duct-terminal/definition.render.d.ts.map +1 -0
- package/dist/duct-terminal/definition.render.js +66 -0
- package/dist/duct-terminal/geometry.d.ts.map +1 -1
- package/dist/duct-terminal/geometry.js +2 -1
- package/dist/duct-terminal/parametrics.d.ts.map +1 -1
- package/dist/duct-terminal/parametrics.js +1 -0
- package/dist/duct-terminal/ports.js +1 -1
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +11 -2
- package/dist/elevator/__bench__/runtime.d.ts +2 -0
- package/dist/elevator/__bench__/runtime.d.ts.map +1 -0
- package/dist/elevator/__bench__/runtime.js +38 -0
- package/dist/elevator/definition.d.ts +117 -10
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.edit.d.ts +4 -0
- package/dist/elevator/definition.edit.d.ts.map +1 -0
- package/dist/elevator/definition.edit.js +177 -0
- package/dist/elevator/definition.js +4 -258
- package/dist/elevator/definition.render.d.ts +11 -0
- package/dist/elevator/definition.render.d.ts.map +1 -0
- package/dist/elevator/definition.render.js +96 -0
- package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
- package/dist/elevator/floorplan-affordances.js +11 -9
- package/dist/elevator/floorplan.d.ts +19 -0
- package/dist/elevator/floorplan.d.ts.map +1 -1
- package/dist/elevator/floorplan.js +3 -9
- package/dist/elevator/inspection.d.ts +17 -0
- package/dist/elevator/inspection.d.ts.map +1 -0
- package/dist/elevator/inspection.js +78 -0
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +177 -102
- package/dist/elevator/parametrics.d.ts +1 -1
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +7 -10
- package/dist/elevator/presets.d.ts +17 -0
- package/dist/elevator/presets.d.ts.map +1 -0
- package/dist/elevator/presets.js +52 -0
- package/dist/elevator/renderer.d.ts +2 -1
- package/dist/elevator/renderer.d.ts.map +1 -1
- package/dist/elevator/renderer.edit.d.ts +5 -0
- package/dist/elevator/renderer.edit.d.ts.map +1 -0
- package/dist/elevator/renderer.edit.js +8 -0
- package/dist/elevator/renderer.js +159 -60
- package/dist/elevator/tool.d.ts +2 -0
- package/dist/elevator/tool.d.ts.map +1 -0
- package/dist/elevator/tool.js +250 -0
- package/dist/eyebrow-vent/definition.d.ts +97 -11
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.edit.d.ts +4 -0
- package/dist/eyebrow-vent/definition.edit.d.ts.map +1 -0
- package/dist/eyebrow-vent/definition.edit.js +106 -0
- package/dist/eyebrow-vent/definition.js +4 -152
- package/dist/eyebrow-vent/definition.render.d.ts +6 -0
- package/dist/eyebrow-vent/definition.render.d.ts.map +1 -0
- package/dist/eyebrow-vent/definition.render.js +43 -0
- package/dist/eyebrow-vent/move-tool.d.ts.map +1 -1
- package/dist/eyebrow-vent/move-tool.js +6 -5
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +16 -6
- package/dist/fence/definition.d.ts +186 -17
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.edit.d.ts +4 -0
- package/dist/fence/definition.edit.d.ts.map +1 -0
- package/dist/fence/definition.edit.js +282 -0
- package/dist/fence/definition.js +5 -413
- package/dist/fence/definition.render.d.ts +8 -0
- package/dist/fence/definition.render.d.ts.map +1 -0
- package/dist/fence/definition.render.js +124 -0
- package/dist/fence/drafting.d.ts +2 -3
- package/dist/fence/drafting.d.ts.map +1 -1
- package/dist/fence/drafting.js +2 -3
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +64 -21
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
- package/dist/fence/move-endpoint-tool.js +12 -3
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +13 -0
- package/dist/fence/tool.js +2 -2
- package/dist/fence-feature/actions.d.ts.map +1 -1
- package/dist/fence-feature/actions.js +5 -2
- package/dist/fence-feature/definition.d.ts +270 -3
- package/dist/fence-feature/definition.d.ts.map +1 -1
- package/dist/fence-feature/definition.edit.d.ts +5 -0
- package/dist/fence-feature/definition.edit.d.ts.map +1 -0
- package/dist/fence-feature/definition.edit.js +69 -0
- package/dist/fence-feature/definition.js +5 -116
- package/dist/fence-feature/definition.render.d.ts +9 -0
- package/dist/fence-feature/definition.render.d.ts.map +1 -0
- package/dist/fence-feature/definition.render.js +69 -0
- package/dist/fence-feature/inspector.d.ts.map +1 -1
- package/dist/fence-feature/inspector.js +150 -34
- package/dist/fence-feature/move-session.d.ts +1 -1
- package/dist/floor-opening/definition.d.ts +58 -2
- package/dist/floor-opening/definition.d.ts.map +1 -1
- package/dist/floor-opening/definition.edit.d.ts +4 -0
- package/dist/floor-opening/definition.edit.d.ts.map +1 -0
- package/dist/floor-opening/definition.edit.js +11 -0
- package/dist/floor-opening/definition.js +4 -41
- package/dist/floor-opening/definition.render.d.ts +6 -0
- package/dist/floor-opening/definition.render.d.ts.map +1 -0
- package/dist/floor-opening/definition.render.js +32 -0
- package/dist/floor-opening/floorplan.d.ts +29 -6
- package/dist/floor-opening/floorplan.d.ts.map +1 -1
- package/dist/floor-opening/floorplan.js +172 -14
- package/dist/guide/definition.d.ts +65 -9
- package/dist/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.edit.d.ts +4 -0
- package/dist/guide/definition.edit.d.ts.map +1 -0
- package/dist/guide/definition.edit.js +4 -0
- package/dist/guide/definition.js +4 -53
- package/dist/guide/definition.render.d.ts +6 -0
- package/dist/guide/definition.render.d.ts.map +1 -0
- package/dist/guide/definition.render.js +45 -0
- package/dist/gutter/definition.d.ts +113 -18
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.edit.d.ts +4 -0
- package/dist/gutter/definition.edit.d.ts.map +1 -0
- package/dist/gutter/definition.edit.js +121 -0
- package/dist/gutter/definition.js +4 -176
- package/dist/gutter/definition.render.d.ts +6 -0
- package/dist/gutter/definition.render.d.ts.map +1 -0
- package/dist/gutter/definition.render.js +44 -0
- package/dist/gutter/downspouts-panel.d.ts.map +1 -1
- package/dist/gutter/downspouts-panel.js +14 -2
- package/dist/gutter/move-tool.d.ts.map +1 -1
- package/dist/gutter/move-tool.js +5 -4
- package/dist/hvac-equipment/definition.d.ts +72 -12
- package/dist/hvac-equipment/definition.d.ts.map +1 -1
- package/dist/hvac-equipment/definition.edit.d.ts +4 -0
- package/dist/hvac-equipment/definition.edit.d.ts.map +1 -0
- package/dist/hvac-equipment/definition.edit.js +13 -0
- package/dist/hvac-equipment/definition.js +4 -92
- package/dist/hvac-equipment/definition.render.d.ts +6 -0
- package/dist/hvac-equipment/definition.render.d.ts.map +1 -0
- package/dist/hvac-equipment/definition.render.js +72 -0
- package/dist/hvac-equipment/floorplan.js +1 -1
- package/dist/hvac-equipment/geometry.d.ts.map +1 -1
- package/dist/hvac-equipment/geometry.js +2 -1
- package/dist/hvac-equipment/parametrics.d.ts.map +1 -1
- package/dist/hvac-equipment/parametrics.js +1 -0
- package/dist/hvac-equipment/ports.js +1 -1
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +3 -2
- package/dist/i18n/definition-messages.d.ts +5 -0
- package/dist/i18n/definition-messages.d.ts.map +1 -0
- package/dist/i18n/definition-messages.js +771 -0
- package/dist/imported-mesh/definition.d.ts +54 -4
- package/dist/imported-mesh/definition.d.ts.map +1 -1
- package/dist/imported-mesh/definition.edit.d.ts +4 -0
- package/dist/imported-mesh/definition.edit.d.ts.map +1 -0
- package/dist/imported-mesh/definition.edit.js +5 -0
- package/dist/imported-mesh/definition.js +4 -40
- package/dist/imported-mesh/definition.render.d.ts +6 -0
- package/dist/imported-mesh/definition.render.d.ts.map +1 -0
- package/dist/imported-mesh/definition.render.js +36 -0
- package/dist/index.d.ts +7 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -135
- package/dist/item/authored-params.d.ts.map +1 -1
- package/dist/item/authored-params.js +19 -4
- package/dist/item/definition.d.ts +280 -31
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.edit.d.ts +4 -0
- package/dist/item/definition.edit.d.ts.map +1 -0
- package/dist/item/definition.edit.js +206 -0
- package/dist/item/definition.js +4 -356
- package/dist/item/definition.render.d.ts +6 -0
- package/dist/item/definition.render.d.ts.map +1 -0
- package/dist/item/definition.render.js +128 -0
- package/dist/item/floorplan.d.ts +1 -1
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +2 -2
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +9 -7
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +2 -2
- package/dist/lean-to-extension/definition.d.ts +177 -3
- package/dist/lean-to-extension/definition.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.edit.d.ts +4 -0
- package/dist/lean-to-extension/definition.edit.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.edit.js +392 -0
- package/dist/lean-to-extension/definition.js +4 -433
- package/dist/lean-to-extension/definition.render.d.ts +6 -0
- package/dist/lean-to-extension/definition.render.d.ts.map +1 -0
- package/dist/lean-to-extension/definition.render.js +46 -0
- package/dist/level/definition.d.ts +49 -8
- package/dist/level/definition.d.ts.map +1 -1
- package/dist/level/definition.edit.d.ts +4 -0
- package/dist/level/definition.edit.d.ts.map +1 -0
- package/dist/level/definition.edit.js +4 -0
- package/dist/level/definition.js +4 -60
- package/dist/level/definition.render.d.ts +6 -0
- package/dist/level/definition.render.d.ts.map +1 -0
- package/dist/level/definition.render.js +53 -0
- package/dist/lineset/definition.d.ts +49 -14
- package/dist/lineset/definition.d.ts.map +1 -1
- package/dist/lineset/definition.edit.d.ts +4 -0
- package/dist/lineset/definition.edit.d.ts.map +1 -0
- package/dist/lineset/definition.edit.js +38 -0
- package/dist/lineset/definition.js +4 -119
- package/dist/lineset/definition.render.d.ts +6 -0
- package/dist/lineset/definition.render.d.ts.map +1 -0
- package/dist/lineset/definition.render.js +72 -0
- package/dist/lineset/floorplan.js +1 -1
- package/dist/lineset/geometry.js +1 -1
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +14 -7
- package/dist/liquid-line/definition.d.ts +47 -15
- package/dist/liquid-line/definition.d.ts.map +1 -1
- package/dist/liquid-line/definition.edit.d.ts +4 -0
- package/dist/liquid-line/definition.edit.d.ts.map +1 -0
- package/dist/liquid-line/definition.edit.js +31 -0
- package/dist/liquid-line/definition.js +4 -111
- package/dist/liquid-line/definition.render.d.ts +6 -0
- package/dist/liquid-line/definition.render.d.ts.map +1 -0
- package/dist/liquid-line/definition.render.js +70 -0
- package/dist/liquid-line/floorplan.js +1 -1
- package/dist/liquid-line/geometry.js +1 -1
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +10 -3
- package/dist/measurement/definition.d.ts +126 -3
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.edit.d.ts +4 -0
- package/dist/measurement/definition.edit.d.ts.map +1 -0
- package/dist/measurement/definition.edit.js +26 -0
- package/dist/measurement/definition.js +4 -67
- package/dist/measurement/definition.render.d.ts +6 -0
- package/dist/measurement/definition.render.d.ts.map +1 -0
- package/dist/measurement/definition.render.js +43 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +3 -2
- package/dist/measurement/renderer.d.ts.map +1 -1
- package/dist/measurement/renderer.js +2 -3
- package/dist/measurement/selection.d.ts.map +1 -1
- package/dist/measurement/selection.js +2 -2
- package/dist/measurement/tool.d.ts +3 -3
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +9 -9
- package/dist/pipe-fitting/definition.d.ts +73 -9
- package/dist/pipe-fitting/definition.d.ts.map +1 -1
- package/dist/pipe-fitting/definition.edit.d.ts +4 -0
- package/dist/pipe-fitting/definition.edit.d.ts.map +1 -0
- package/dist/pipe-fitting/definition.edit.js +47 -0
- package/dist/pipe-fitting/definition.js +4 -105
- package/dist/pipe-fitting/definition.render.d.ts +6 -0
- package/dist/pipe-fitting/definition.render.d.ts.map +1 -0
- package/dist/pipe-fitting/definition.render.js +54 -0
- package/dist/pipe-fitting/floorplan.js +1 -1
- package/dist/pipe-fitting/geometry.js +1 -1
- package/dist/pipe-fitting/move-tool.d.ts +1 -1
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
- package/dist/pipe-fitting/move-tool.js +28 -22
- package/dist/pipe-fitting/parametrics.d.ts.map +1 -1
- package/dist/pipe-fitting/parametrics.js +1 -0
- package/dist/pipe-fitting/ports.js +1 -1
- package/dist/pipe-fitting/selection.d.ts.map +1 -1
- package/dist/pipe-fitting/selection.js +73 -29
- package/dist/pipe-fitting/tool.d.ts.map +1 -1
- package/dist/pipe-fitting/tool.js +3 -2
- package/dist/pipe-segment/collar-connection.d.ts +12 -0
- package/dist/pipe-segment/collar-connection.d.ts.map +1 -0
- package/dist/pipe-segment/collar-connection.js +58 -0
- package/dist/pipe-segment/connect-operation.d.ts +9 -0
- package/dist/pipe-segment/connect-operation.d.ts.map +1 -0
- package/dist/pipe-segment/connect-operation.js +44 -0
- package/dist/pipe-segment/continuation.d.ts +3 -2
- package/dist/pipe-segment/continuation.d.ts.map +1 -1
- package/dist/pipe-segment/continuation.js +60 -1
- package/dist/pipe-segment/definition.d.ts +78 -13
- package/dist/pipe-segment/definition.d.ts.map +1 -1
- package/dist/pipe-segment/definition.edit.d.ts +4 -0
- package/dist/pipe-segment/definition.edit.d.ts.map +1 -0
- package/dist/pipe-segment/definition.edit.js +48 -0
- package/dist/pipe-segment/definition.js +4 -132
- package/dist/pipe-segment/definition.render.d.ts +6 -0
- package/dist/pipe-segment/definition.render.d.ts.map +1 -0
- package/dist/pipe-segment/definition.render.js +78 -0
- package/dist/pipe-segment/floorplan.d.ts +1 -1
- package/dist/pipe-segment/floorplan.d.ts.map +1 -1
- package/dist/pipe-segment/floorplan.js +34 -1
- package/dist/pipe-segment/geometry.d.ts.map +1 -1
- package/dist/pipe-segment/geometry.js +2 -1
- package/dist/pipe-segment/grade-affordance.d.ts +8 -0
- package/dist/pipe-segment/grade-affordance.d.ts.map +1 -0
- package/dist/pipe-segment/grade-affordance.js +116 -0
- package/dist/pipe-segment/grade-inspector.d.ts +5 -0
- package/dist/pipe-segment/grade-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/grade-inspector.js +91 -0
- package/dist/pipe-segment/grade-label.d.ts +7 -0
- package/dist/pipe-segment/grade-label.d.ts.map +1 -0
- package/dist/pipe-segment/grade-label.js +32 -0
- package/dist/pipe-segment/grade-operation.d.ts +22 -0
- package/dist/pipe-segment/grade-operation.d.ts.map +1 -0
- package/dist/pipe-segment/grade-operation.js +114 -0
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +38 -15
- package/dist/pipe-segment/offset-inspector.d.ts +5 -0
- package/dist/pipe-segment/offset-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/offset-inspector.js +112 -0
- package/dist/pipe-segment/offset-operation.d.ts +9 -0
- package/dist/pipe-segment/offset-operation.d.ts.map +1 -0
- package/dist/pipe-segment/offset-operation.js +104 -0
- package/dist/pipe-segment/parametrics.d.ts.map +1 -1
- package/dist/pipe-segment/parametrics.js +1 -9
- package/dist/pipe-segment/resize-inspector.d.ts +5 -0
- package/dist/pipe-segment/resize-inspector.d.ts.map +1 -0
- package/dist/pipe-segment/resize-inspector.js +75 -0
- package/dist/pipe-segment/resize-operation.d.ts +8 -0
- package/dist/pipe-segment/resize-operation.d.ts.map +1 -0
- package/dist/pipe-segment/resize-operation.js +143 -0
- package/dist/pipe-segment/run-move.d.ts +65 -0
- package/dist/pipe-segment/run-move.d.ts.map +1 -0
- package/dist/pipe-segment/run-move.js +110 -0
- package/dist/pipe-segment/selection.d.ts.map +1 -1
- package/dist/pipe-segment/selection.js +122 -178
- package/dist/pipe-segment/slope.d.ts +3 -0
- package/dist/pipe-segment/slope.d.ts.map +1 -1
- package/dist/pipe-segment/slope.js +47 -0
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +123 -28
- package/dist/pipe-trap/definition.d.ts +54 -9
- package/dist/pipe-trap/definition.d.ts.map +1 -1
- package/dist/pipe-trap/definition.edit.d.ts +4 -0
- package/dist/pipe-trap/definition.edit.d.ts.map +1 -0
- package/dist/pipe-trap/definition.edit.js +13 -0
- package/dist/pipe-trap/definition.js +4 -59
- package/dist/pipe-trap/definition.render.d.ts +6 -0
- package/dist/pipe-trap/definition.render.d.ts.map +1 -0
- package/dist/pipe-trap/definition.render.js +43 -0
- package/dist/pipe-trap/geometry.d.ts.map +1 -1
- package/dist/pipe-trap/geometry.js +2 -1
- package/dist/pipe-trap/parametrics.d.ts.map +1 -1
- package/dist/pipe-trap/parametrics.js +1 -0
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -2
- package/dist/procedural-item/definition.d.ts +734 -3
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.edit.d.ts +4 -0
- package/dist/procedural-item/definition.edit.d.ts.map +1 -0
- package/dist/procedural-item/definition.edit.js +255 -0
- package/dist/procedural-item/definition.js +4 -325
- package/dist/procedural-item/definition.render.d.ts +6 -0
- package/dist/procedural-item/definition.render.d.ts.map +1 -0
- package/dist/procedural-item/definition.render.js +84 -0
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.edit.d.ts +5 -0
- package/dist/procedural-item/renderer.edit.d.ts.map +1 -0
- package/dist/procedural-item/renderer.edit.js +49 -0
- package/dist/procedural-item/renderer.js +12 -22
- package/dist/render.d.ts +4 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +4 -0
- package/dist/ridge-vent/definition.d.ts +95 -15
- package/dist/ridge-vent/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.edit.d.ts +4 -0
- package/dist/ridge-vent/definition.edit.d.ts.map +1 -0
- package/dist/ridge-vent/definition.edit.js +148 -0
- package/dist/ridge-vent/definition.js +4 -197
- package/dist/ridge-vent/definition.render.d.ts +6 -0
- package/dist/ridge-vent/definition.render.d.ts.map +1 -0
- package/dist/ridge-vent/definition.render.js +42 -0
- package/dist/ridge-vent/move-tool.d.ts.map +1 -1
- package/dist/ridge-vent/move-tool.js +5 -4
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +22 -9
- package/dist/roof/barrel-panel.d.ts.map +1 -1
- package/dist/roof/barrel-panel.js +8 -4
- package/dist/roof/definition.d.ts +325 -8
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.edit.d.ts +4 -0
- package/dist/roof/definition.edit.d.ts.map +1 -0
- package/dist/roof/definition.edit.js +183 -0
- package/dist/roof/definition.js +4 -254
- package/dist/roof/definition.render.d.ts +7 -0
- package/dist/roof/definition.render.d.ts.map +1 -0
- package/dist/roof/definition.render.js +101 -0
- package/dist/roof/floorplan-overrides.d.ts +22 -0
- package/dist/roof/floorplan-overrides.d.ts.map +1 -0
- package/dist/roof/floorplan-overrides.js +46 -0
- package/dist/roof/floorplan-tool.d.ts +9 -0
- package/dist/roof/floorplan-tool.d.ts.map +1 -0
- package/dist/roof/floorplan-tool.js +168 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +131 -41
- package/dist/roof/geometry-notice.d.ts +5 -0
- package/dist/roof/geometry-notice.d.ts.map +1 -0
- package/dist/roof/geometry-notice.js +27 -0
- package/dist/roof/glazing-controls.d.ts +2 -1
- package/dist/roof/glazing-controls.d.ts.map +1 -1
- package/dist/roof/glazing-controls.js +52 -14
- package/dist/roof/glazing-panel-editor.d.ts.map +1 -1
- package/dist/roof/glazing-panel-editor.js +40 -13
- package/dist/roof/glazing-panel.d.ts.map +1 -1
- package/dist/roof/glazing-panel.js +73 -9
- package/dist/roof/paint.d.ts +19 -0
- package/dist/roof/paint.d.ts.map +1 -0
- package/dist/roof/paint.js +158 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +91 -22
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +13 -2
- package/dist/roof/roof-footprint-source.d.ts +17 -0
- package/dist/roof/roof-footprint-source.d.ts.map +1 -1
- package/dist/roof/roof-footprint-source.js +14 -0
- package/dist/roof/roof-footprint.d.ts +36 -2
- package/dist/roof/roof-footprint.d.ts.map +1 -1
- package/dist/roof/roof-footprint.js +124 -2
- package/dist/roof/roof-materials.d.ts.map +1 -1
- package/dist/roof/roof-materials.js +10 -1
- package/dist/roof/roof-placement-mode.d.ts +0 -2
- package/dist/roof/roof-placement-mode.d.ts.map +1 -1
- package/dist/roof/roof-placement-mode.js +8 -6
- package/dist/roof/roof-plan-creases.d.ts +50 -0
- package/dist/roof/roof-plan-creases.d.ts.map +1 -0
- package/dist/roof/roof-plan-creases.js +194 -0
- package/dist/roof/roof-ridge-mode.d.ts +20 -0
- package/dist/roof/roof-ridge-mode.d.ts.map +1 -0
- package/dist/roof/roof-ridge-mode.js +16 -0
- package/dist/roof/tool.d.ts +20 -4
- package/dist/roof/tool.d.ts.map +1 -1
- package/dist/roof/tool.js +264 -280
- package/dist/roof/type-thumbnail-assets.d.ts +3 -0
- package/dist/roof/type-thumbnail-assets.d.ts.map +1 -0
- package/dist/roof/type-thumbnail-assets.js +12 -0
- package/dist/roof/type-thumbnail.d.ts +5 -0
- package/dist/roof/type-thumbnail.d.ts.map +1 -0
- package/dist/roof/type-thumbnail.js +5 -0
- package/dist/roof/wall-catch.d.ts +106 -0
- package/dist/roof/wall-catch.d.ts.map +1 -0
- package/dist/roof/wall-catch.js +267 -0
- package/dist/roof-segment/build-up-section.d.ts +9 -0
- package/dist/roof-segment/build-up-section.d.ts.map +1 -0
- package/dist/roof-segment/build-up-section.js +191 -0
- package/dist/roof-segment/definition.d.ts +564 -9
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.edit.d.ts +4 -0
- package/dist/roof-segment/definition.edit.d.ts.map +1 -0
- package/dist/roof-segment/definition.edit.js +305 -0
- package/dist/roof-segment/definition.js +4 -319
- package/dist/roof-segment/definition.render.d.ts +6 -0
- package/dist/roof-segment/definition.render.d.ts.map +1 -0
- package/dist/roof-segment/definition.render.js +59 -0
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +70 -21
- package/dist/roof-segment/floorplan.d.ts.map +1 -1
- package/dist/roof-segment/floorplan.js +16 -12
- package/dist/roof-segment/paint.d.ts +3 -2
- package/dist/roof-segment/paint.d.ts.map +1 -1
- package/dist/roof-segment/paint.js +43 -3
- package/dist/roof-segment/panel-model.d.ts +23 -0
- package/dist/roof-segment/panel-model.d.ts.map +1 -0
- package/dist/roof-segment/panel-model.js +64 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +117 -37
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +17 -11
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +26 -5
- package/dist/roof-segment/slots.d.ts +2 -0
- package/dist/roof-segment/slots.d.ts.map +1 -0
- package/dist/roof-segment/slots.js +1 -0
- package/dist/scan/definition.d.ts +57 -7
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.edit.d.ts +4 -0
- package/dist/scan/definition.edit.d.ts.map +1 -0
- package/dist/scan/definition.edit.js +4 -0
- package/dist/scan/definition.js +4 -52
- package/dist/scan/definition.render.d.ts +6 -0
- package/dist/scan/definition.render.d.ts.map +1 -0
- package/dist/scan/definition.render.js +46 -0
- package/dist/separator/definition.d.ts +47 -2
- package/dist/separator/definition.d.ts.map +1 -1
- package/dist/separator/definition.edit.d.ts +4 -0
- package/dist/separator/definition.edit.d.ts.map +1 -0
- package/dist/separator/definition.edit.js +13 -0
- package/dist/separator/definition.js +4 -39
- package/dist/separator/definition.render.d.ts +6 -0
- package/dist/separator/definition.render.d.ts.map +1 -0
- package/dist/separator/definition.render.js +27 -0
- package/dist/separator/floorplan-affordances.d.ts +9 -0
- package/dist/separator/floorplan-affordances.d.ts.map +1 -0
- package/dist/separator/floorplan-affordances.js +23 -0
- package/dist/separator/floorplan.d.ts +9 -0
- package/dist/separator/floorplan.d.ts.map +1 -0
- package/dist/separator/floorplan.js +54 -0
- package/dist/separator/renderer.d.ts +6 -1
- package/dist/separator/renderer.d.ts.map +1 -1
- package/dist/separator/renderer.edit.d.ts +5 -0
- package/dist/separator/renderer.edit.d.ts.map +1 -0
- package/dist/separator/renderer.edit.js +8 -0
- package/dist/separator/renderer.js +22 -9
- package/dist/separator/selection.d.ts +10 -0
- package/dist/separator/selection.d.ts.map +1 -0
- package/dist/separator/selection.js +35 -0
- package/dist/shared/accessory-placement.js +1 -1
- package/dist/shared/auto-fitting.js +1 -1
- package/dist/shared/auto-offset-tag.d.ts +1 -1
- package/dist/shared/auto-offset-tag.d.ts.map +1 -1
- package/dist/shared/auto-offset-tag.js +3 -1
- package/dist/shared/automatic-run-end-cap.d.ts +5 -0
- package/dist/shared/automatic-run-end-cap.d.ts.map +1 -1
- package/dist/shared/automatic-run-end-cap.js +17 -9
- package/dist/shared/build-up-controls.d.ts +88 -0
- package/dist/shared/build-up-controls.d.ts.map +1 -0
- package/dist/shared/build-up-controls.js +139 -0
- package/dist/shared/connection-feedback.d.ts +6 -3
- package/dist/shared/connection-feedback.d.ts.map +1 -1
- package/dist/shared/connection-feedback.js +29 -6
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -1
- package/dist/shared/curtain-opening-limits.js +45 -16
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +2 -1
- package/dist/shared/duct-adapter.js +1 -1
- package/dist/shared/duct-collar-inspector.d.ts +5 -0
- package/dist/shared/duct-collar-inspector.d.ts.map +1 -0
- package/dist/shared/duct-collar-inspector.js +36 -0
- package/dist/shared/follower-frames.d.ts +15 -0
- package/dist/shared/follower-frames.d.ts.map +1 -0
- package/dist/shared/follower-frames.js +36 -0
- package/dist/shared/handle-drag-scope.d.ts +14 -0
- package/dist/shared/handle-drag-scope.d.ts.map +1 -0
- package/dist/shared/handle-drag-scope.js +36 -0
- package/dist/shared/hosted-resize.d.ts +3 -1
- package/dist/shared/hosted-resize.d.ts.map +1 -1
- package/dist/shared/hosted-resize.js +10 -8
- package/dist/shared/item-interaction-actions.d.ts.map +1 -1
- package/dist/shared/item-interaction-actions.js +11 -2
- package/dist/shared/layer-thickness.d.ts +2 -0
- package/dist/shared/layer-thickness.d.ts.map +1 -0
- package/dist/shared/layer-thickness.js +3 -0
- package/dist/shared/live-preview.d.ts +16 -0
- package/dist/shared/live-preview.d.ts.map +1 -0
- package/dist/shared/live-preview.js +36 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -1
- package/dist/shared/move-roof-tool.js +100 -5
- package/dist/shared/node-batch/batchable.d.ts +2 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -1
- package/dist/shared/node-batch/batchable.js +4 -0
- package/dist/shared/node-batch/candidates.d.ts +21 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +85 -50
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +24 -15
- package/dist/shared/opening-casing-move.d.ts +16 -0
- package/dist/shared/opening-casing-move.d.ts.map +1 -0
- package/dist/shared/opening-casing-move.js +33 -0
- package/dist/shared/opening-casing-section.d.ts +15 -0
- package/dist/shared/opening-casing-section.d.ts.map +1 -0
- package/dist/shared/opening-casing-section.js +38 -0
- package/dist/shared/opening-casing.d.ts +26 -0
- package/dist/shared/opening-casing.d.ts.map +1 -0
- package/dist/shared/opening-casing.js +80 -0
- package/dist/shared/opening-depth-position.d.ts +13 -0
- package/dist/shared/opening-depth-position.d.ts.map +1 -0
- package/dist/shared/opening-depth-position.js +34 -0
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +17 -8
- package/dist/shared/opening-guides-runtime.d.ts +2 -1
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +13 -9
- package/dist/shared/opening-labels.d.ts +11 -0
- package/dist/shared/opening-labels.d.ts.map +1 -0
- package/dist/shared/opening-labels.js +46 -0
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +12 -10
- package/dist/shared/opening-plane-offset.d.ts +4 -3
- package/dist/shared/opening-plane-offset.d.ts.map +1 -1
- package/dist/shared/opening-plane-offset.js +7 -4
- package/dist/shared/opening-swap.d.ts +8 -0
- package/dist/shared/opening-swap.d.ts.map +1 -0
- package/dist/shared/opening-swap.js +18 -0
- package/dist/shared/path-point-affordance.d.ts.map +1 -1
- package/dist/shared/path-point-affordance.js +19 -24
- package/dist/shared/path-segment-affordance.d.ts +2 -1
- package/dist/shared/path-segment-affordance.d.ts.map +1 -1
- package/dist/shared/path-segment-affordance.js +11 -8
- package/dist/shared/pipe-collar-inspector.d.ts +5 -0
- package/dist/shared/pipe-collar-inspector.d.ts.map +1 -0
- package/dist/shared/pipe-collar-inspector.js +27 -0
- package/dist/shared/polygon-vertex-affordance.d.ts +19 -0
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +65 -6
- package/dist/shared/refrigerant-line-selection.d.ts.map +1 -1
- package/dist/shared/refrigerant-line-selection.js +46 -29
- package/dist/shared/relative-roof-drag.d.ts.map +1 -1
- package/dist/shared/relative-roof-drag.js +5 -4
- package/dist/shared/roof-opening-host.d.ts +2 -1
- package/dist/shared/roof-opening-host.d.ts.map +1 -1
- package/dist/shared/roof-opening-host.js +14 -5
- package/dist/shared/roof-surface.d.ts.map +1 -1
- package/dist/shared/roof-surface.js +2 -0
- package/dist/shared/roof-wall-opening-cut.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-cut.js +14 -6
- package/dist/shared/roof-wall-opening-placement.d.ts +2 -1
- package/dist/shared/roof-wall-opening-placement.d.ts.map +1 -1
- package/dist/shared/roof-wall-opening-placement.js +6 -4
- package/dist/shared/run-hanger-inspector.d.ts.map +1 -1
- package/dist/shared/run-hanger-inspector.js +39 -5
- package/dist/shared/run-hangers.d.ts.map +1 -1
- package/dist/shared/run-hangers.js +2 -2
- package/dist/shared/run-move-connectivity.d.ts +15 -6
- package/dist/shared/run-move-connectivity.d.ts.map +1 -1
- package/dist/shared/run-move-connectivity.js +14 -5
- package/dist/shared/run-tool-options.d.ts +8 -0
- package/dist/shared/run-tool-options.d.ts.map +1 -0
- package/dist/shared/run-tool-options.js +166 -0
- package/dist/shared/system-check-panel.d.ts.map +1 -1
- package/dist/shared/system-check-panel.js +94 -15
- package/dist/shared/system-checks.d.ts.map +1 -1
- package/dist/shared/system-checks.js +2 -1
- package/dist/shared/vertical-offset.js +1 -1
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -3
- package/dist/shared/wall-opening-ceiling.d.ts +6 -0
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
- package/dist/shared/wall-opening-ceiling.js +36 -7
- package/dist/shelf/definition.d.ts +108 -3
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.edit.d.ts +4 -0
- package/dist/shelf/definition.edit.d.ts.map +1 -0
- package/dist/shelf/definition.edit.js +155 -0
- package/dist/shelf/definition.js +4 -270
- package/dist/shelf/definition.render.d.ts +6 -0
- package/dist/shelf/definition.render.d.ts.map +1 -0
- package/dist/shelf/definition.render.js +122 -0
- package/dist/site/definition.d.ts +312 -9
- package/dist/site/definition.d.ts.map +1 -1
- package/dist/site/definition.edit.d.ts +4 -0
- package/dist/site/definition.edit.d.ts.map +1 -0
- package/dist/site/definition.edit.js +4 -0
- package/dist/site/definition.js +4 -55
- package/dist/site/definition.render.d.ts +6 -0
- package/dist/site/definition.render.d.ts.map +1 -0
- package/dist/site/definition.render.js +47 -0
- package/dist/site/ground-hole.d.ts +3 -3
- package/dist/site/ground-hole.js +3 -3
- package/dist/site/ground-veil.d.ts +5 -12
- package/dist/site/ground-veil.d.ts.map +1 -1
- package/dist/site/ground-veil.js +9 -33
- package/dist/site/panel.d.ts.map +1 -1
- package/dist/site/panel.js +52 -12
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +52 -23
- package/dist/skylight/definition.d.ts +158 -9
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.edit.d.ts +4 -0
- package/dist/skylight/definition.edit.d.ts.map +1 -0
- package/dist/skylight/definition.edit.js +218 -0
- package/dist/skylight/definition.js +4 -271
- package/dist/skylight/definition.render.d.ts +6 -0
- package/dist/skylight/definition.render.d.ts.map +1 -0
- package/dist/skylight/definition.render.js +50 -0
- package/dist/skylight/move-tool.d.ts.map +1 -1
- package/dist/skylight/move-tool.js +7 -5
- package/dist/skylight/panel.d.ts.map +1 -1
- package/dist/skylight/panel.js +49 -19
- package/dist/slab/deck-geometry.d.ts +28 -0
- package/dist/slab/deck-geometry.d.ts.map +1 -0
- package/dist/slab/deck-geometry.js +320 -0
- package/dist/slab/definition.d.ts +289 -19
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.edit.d.ts +4 -0
- package/dist/slab/definition.edit.d.ts.map +1 -0
- package/dist/slab/definition.edit.js +230 -0
- package/dist/slab/definition.js +4 -329
- package/dist/slab/definition.render.d.ts +6 -0
- package/dist/slab/definition.render.d.ts.map +1 -0
- package/dist/slab/definition.render.js +92 -0
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +3 -0
- package/dist/slab/floorplan-affordances.d.ts +500 -0
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +46 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +97 -21
- package/dist/slab/renderer.d.ts +11 -0
- package/dist/slab/renderer.d.ts.map +1 -0
- package/dist/slab/renderer.js +19 -0
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +12 -1
- package/dist/solar-panel/definition.d.ts +145 -14
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.edit.d.ts +4 -0
- package/dist/solar-panel/definition.edit.d.ts.map +1 -0
- package/dist/solar-panel/definition.edit.js +213 -0
- package/dist/solar-panel/definition.js +4 -263
- package/dist/solar-panel/definition.render.d.ts +6 -0
- package/dist/solar-panel/definition.render.d.ts.map +1 -0
- package/dist/solar-panel/definition.render.js +42 -0
- package/dist/solar-panel/move-tool.d.ts.map +1 -1
- package/dist/solar-panel/move-tool.js +7 -5
- package/dist/solar-panel/panel.d.ts.map +1 -1
- package/dist/solar-panel/panel.js +49 -14
- package/dist/spawn/definition.d.ts +48 -3
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.edit.d.ts +4 -0
- package/dist/spawn/definition.edit.d.ts.map +1 -0
- package/dist/spawn/definition.edit.js +64 -0
- package/dist/spawn/definition.js +4 -109
- package/dist/spawn/definition.render.d.ts +6 -0
- package/dist/spawn/definition.render.d.ts.map +1 -0
- package/dist/spawn/definition.render.js +48 -0
- package/dist/stair/construction-controls.d.ts +3 -1
- package/dist/stair/construction-controls.d.ts.map +1 -1
- package/dist/stair/construction-controls.js +75 -12
- package/dist/stair/definition.d.ts +334 -8
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.edit.d.ts +4 -0
- package/dist/stair/definition.edit.d.ts.map +1 -0
- package/dist/stair/definition.edit.js +377 -0
- package/dist/stair/definition.js +4 -443
- package/dist/stair/definition.render.d.ts +6 -0
- package/dist/stair/definition.render.d.ts.map +1 -0
- package/dist/stair/definition.render.js +65 -0
- package/dist/stair/paint.d.ts +6 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +244 -52
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +7 -0
- package/dist/stair/placement-defaults.d.ts +18 -0
- package/dist/stair/placement-defaults.d.ts.map +1 -0
- package/dist/stair/placement-defaults.js +27 -0
- package/dist/stair/railing-controls.d.ts.map +1 -1
- package/dist/stair/railing-controls.js +78 -18
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +16 -10
- package/dist/stair/structure-controls.d.ts +18 -0
- package/dist/stair/structure-controls.d.ts.map +1 -0
- package/dist/stair/structure-controls.js +275 -0
- package/dist/stair/tool.d.ts.map +1 -1
- package/dist/stair/tool.js +13 -9
- package/dist/stair/use-stair-render-data.d.ts +41 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -1
- package/dist/stair-segment/definition.d.ts +130 -7
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.edit.d.ts +4 -0
- package/dist/stair-segment/definition.edit.d.ts.map +1 -0
- package/dist/stair-segment/definition.edit.js +135 -0
- package/dist/stair-segment/definition.js +4 -172
- package/dist/stair-segment/definition.render.d.ts +6 -0
- package/dist/stair-segment/definition.render.d.ts.map +1 -0
- package/dist/stair-segment/definition.render.js +38 -0
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +65 -18
- package/dist/structural-grid/definition.d.ts +50 -3
- package/dist/structural-grid/definition.d.ts.map +1 -1
- package/dist/structural-grid/definition.edit.d.ts +4 -0
- package/dist/structural-grid/definition.edit.d.ts.map +1 -0
- package/dist/structural-grid/definition.edit.js +18 -0
- package/dist/structural-grid/definition.js +4 -51
- package/dist/structural-grid/definition.render.d.ts +6 -0
- package/dist/structural-grid/definition.render.d.ts.map +1 -0
- package/dist/structural-grid/definition.render.js +35 -0
- package/dist/turbine-vent/definition.d.ts +97 -23
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.edit.d.ts +4 -0
- package/dist/turbine-vent/definition.edit.d.ts.map +1 -0
- package/dist/turbine-vent/definition.edit.js +66 -0
- package/dist/turbine-vent/definition.js +4 -121
- package/dist/turbine-vent/definition.render.d.ts +6 -0
- package/dist/turbine-vent/definition.render.d.ts.map +1 -0
- package/dist/turbine-vent/definition.render.js +40 -0
- package/dist/turbine-vent/move-tool.d.ts.map +1 -1
- package/dist/turbine-vent/move-tool.js +6 -5
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +14 -5
- package/dist/unit/definition.d.ts +53 -9
- package/dist/unit/definition.d.ts.map +1 -1
- package/dist/unit/definition.edit.d.ts +4 -0
- package/dist/unit/definition.edit.d.ts.map +1 -0
- package/dist/unit/definition.edit.js +4 -0
- package/dist/unit/definition.js +4 -38
- package/dist/unit/definition.render.d.ts +6 -0
- package/dist/unit/definition.render.d.ts.map +1 -0
- package/dist/unit/definition.render.js +30 -0
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +28 -12
- package/dist/wall/actions.d.ts +1 -1
- package/dist/wall/actions.d.ts.map +1 -1
- package/dist/wall/actions.js +17 -13
- package/dist/wall/construction-dimensions.d.ts +6 -0
- package/dist/wall/construction-dimensions.d.ts.map +1 -1
- package/dist/wall/construction-dimensions.js +8 -0
- package/dist/wall/contextual-dimensions.d.ts +6 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +105 -18
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -1
- package/dist/wall/curtain-opening-frame.js +6 -4
- package/dist/wall/curtain-wall-layout.d.ts +1 -1
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -1
- package/dist/wall/curtain-wall-layout.js +6 -4
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -1
- package/dist/wall/curtain-wall-materials.js +8 -3
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
- package/dist/wall/curtain-wall-panel.js +242 -38
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +2 -3
- package/dist/wall/definition.d.ts +809 -3
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.edit.d.ts +4 -0
- package/dist/wall/definition.edit.d.ts.map +1 -0
- package/dist/wall/definition.edit.js +184 -0
- package/dist/wall/definition.js +4 -264
- package/dist/wall/definition.render.d.ts +6 -0
- package/dist/wall/definition.render.d.ts.map +1 -0
- package/dist/wall/definition.render.js +100 -0
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +9 -6
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +66 -16
- package/dist/wall/floorplan.d.ts +4 -5
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +63 -47
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +22 -5
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +4 -3
- package/dist/wall/move-shared.js +1 -1
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +77 -12
- package/dist/wall/paint.d.ts +2 -2
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +11 -4
- package/dist/wall/panel-model.d.ts +17 -2
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +159 -18
- package/dist/wall/panel.d.ts +8 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +240 -159
- package/dist/wall/parametrics.d.ts +1 -1
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +14 -1
- package/dist/wall/quick-measurement.js +1 -1
- package/dist/wall/railing-wall-adapter.d.ts +7 -0
- package/dist/wall/railing-wall-adapter.d.ts.map +1 -0
- package/dist/wall/railing-wall-adapter.js +38 -0
- package/dist/wall/railing-wall-floorplan.d.ts +8 -0
- package/dist/wall/railing-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/railing-wall-floorplan.js +27 -0
- package/dist/wall/railing-wall-geometry.d.ts +12 -0
- package/dist/wall/railing-wall-geometry.d.ts.map +1 -0
- package/dist/wall/railing-wall-geometry.js +51 -0
- package/dist/wall/railing-wall-guard.d.ts +81 -0
- package/dist/wall/railing-wall-guard.d.ts.map +1 -0
- package/dist/wall/railing-wall-guard.js +435 -0
- package/dist/wall/railing-wall-materials.d.ts +11 -0
- package/dist/wall/railing-wall-materials.d.ts.map +1 -0
- package/dist/wall/railing-wall-materials.js +31 -0
- package/dist/wall/railing-wall-panel-model.d.ts +30 -0
- package/dist/wall/railing-wall-panel-model.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel-model.js +117 -0
- package/dist/wall/railing-wall-panel.d.ts +17 -0
- package/dist/wall/railing-wall-panel.d.ts.map +1 -0
- package/dist/wall/railing-wall-panel.js +42 -0
- package/dist/wall/rectangle-command.d.ts +80 -1
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +4 -2
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +3 -1
- package/dist/wall/skirting-floor-gaps.d.ts +8 -0
- package/dist/wall/skirting-floor-gaps.d.ts.map +1 -0
- package/dist/wall/skirting-floor-gaps.js +36 -0
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -1
- package/dist/wall/split-floorplan-layer.js +2 -2
- package/dist/wall/split-tool.d.ts.map +1 -1
- package/dist/wall/split-tool.js +2 -2
- package/dist/wall/system.d.ts +0 -14
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +6 -1
- package/dist/wall/tool.d.ts +16 -0
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +285 -70
- package/dist/wall/treatments.d.ts +3 -0
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +57 -14
- package/dist/window/actions.d.ts +7 -0
- package/dist/window/actions.d.ts.map +1 -0
- package/dist/window/actions.js +29 -0
- package/dist/window/definition.d.ts +356 -15
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.edit.d.ts +4 -0
- package/dist/window/definition.edit.d.ts.map +1 -0
- package/dist/window/definition.edit.js +255 -0
- package/dist/window/definition.js +5 -329
- package/dist/window/definition.render.d.ts +8 -0
- package/dist/window/definition.render.d.ts.map +1 -0
- package/dist/window/definition.render.js +83 -0
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +12 -4
- package/dist/window/floorplan.d.ts +2 -0
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +58 -1
- package/dist/window/mechanism.d.ts.map +1 -1
- package/dist/window/mechanism.js +21 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +17 -14
- package/dist/window/paint.d.ts +2 -7
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +31 -3
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +311 -69
- package/dist/window/placement.d.ts.map +1 -1
- package/dist/window/placement.js +5 -1
- package/dist/window/swing.d.ts +13 -0
- package/dist/window/swing.d.ts.map +1 -0
- package/dist/window/swing.js +16 -0
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +24 -16
- package/dist/zone/contextual-dimensions.d.ts.map +1 -1
- package/dist/zone/contextual-dimensions.js +1 -2
- package/dist/zone/definition.d.ts +264 -9
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.edit.d.ts +4 -0
- package/dist/zone/definition.edit.d.ts.map +1 -0
- package/dist/zone/definition.edit.js +38 -0
- package/dist/zone/definition.js +4 -97
- package/dist/zone/definition.render.d.ts +6 -0
- package/dist/zone/definition.render.d.ts.map +1 -0
- package/dist/zone/definition.render.js +55 -0
- package/dist/zone/floorplan-affordances.d.ts +136 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +34 -9
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +9 -5
- package/package.json +27 -16
- package/dist/site/generic-foundation-geometry.d.ts +0 -16
- package/dist/site/generic-foundation-geometry.d.ts.map +0 -1
- package/dist/site/generic-foundation-geometry.js +0 -75
- package/dist/site/generic-foundation.d.ts +0 -4
- package/dist/site/generic-foundation.d.ts.map +0 -1
- package/dist/site/generic-foundation.js +0 -91
package/dist/roof/tool.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { collectAlignmentAnchors, emitter, getActiveRoofHeight, getWallArcData, getWallBaseElevationForNodes, getWallEffectiveHeightForNodes, isCurvedWall, RoofNode, RoofSegmentNode, RoofType as RoofTypeSchema, resolveBuildingForLevel, resolveLevelId,
|
|
3
|
-
import { CursorSphere, clearSurfacePlanSnapFeedback, EDITOR_LAYER, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, resolveSurfacePlanPointSnap, snapWorldXZForActiveBuilding, triggerSFX, useEditor, useFloorplanDraftPreview, useInteractionScope, useRegistryToolContext, } from '@pascal-app/editor';
|
|
2
|
+
import { collectAlignmentAnchors, emitter, getActiveRoofHeight, getRoofModuleFaces, getRoofShapeRatios, getSegmentSlopeFrame, getWallArcData, getWallBaseElevationForNodes, getWallEffectiveHeightForNodes, getWallThickness, isCurvedWall, RoofNode, RoofSegmentNode, RoofType as RoofTypeSchema, resolveBuildingForLevel, resolveLevelId, wallSegmentAnchors, } from '@pascal-app/core';
|
|
3
|
+
import { CursorSphere, clearSurfacePlanSnapFeedback, EDITOR_LAYER, isGridSnapActive, isMagneticSnapActive, markToolCancelConsumed, resolveSurfacePlanPointSnap, snapWorldXZForActiveBuilding, triggerSFX, useEditor, useFloorplanDraftPreview, useInteractionScope, useRegistryToolContext, visibleScene, } from '@pascal-app/editor';
|
|
4
4
|
import { generateRoofSegmentGeometry, useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
6
6
|
import * as THREE from 'three';
|
|
7
7
|
import { BufferGeometry, DoubleSide, Float32BufferAttribute, Vector3, } from 'three';
|
|
8
8
|
import { createConicalRoofSectorAboveWall } from './conical-roof.js';
|
|
9
9
|
import { resolveConicalRoofPlacement } from './conical-roof-placement.js';
|
|
10
|
-
import { isStandardRoofWallEligible, parseRoofFootprintSource, resolveRoofFootprintElevation, resolveRoofFootprintWorldElevation, resolveRoofWallTopWorldElevation, subscribeToConicalRoofWallClicks, } from './roof-footprint.js';
|
|
10
|
+
import { isStandardRoofWallEligible, parseRoofFootprintSource, pickRoofRoom, resolveRoofFootprintElevation, resolveRoofFootprintWorldElevation, resolveRoofWallTopWorldElevation, roofEdgeAnchors, roofFootprintPreviewIds, roofSnapEdges, subscribeToConicalRoofWallClicks, } from './roof-footprint.js';
|
|
11
11
|
import useRoofFootprintSource from './roof-footprint-source.js';
|
|
12
12
|
import { drawnRoofLevelTarget, drawnRoofSupport, roofLevelTarget, roofLevelTargetOffset, seatedRoofElevation, writeRoofNodes, writeSeatedRoofEdit, } from './roof-level-target.js';
|
|
13
13
|
import useRoofPlacementMode, {} from './roof-placement-mode.js';
|
|
14
|
-
|
|
14
|
+
import useRoofRidgeMode, { ridgeQuarterTurn } from './roof-ridge-mode.js';
|
|
15
|
+
import { bearingWallThickness, roofCatchWalls, segmentWallLine, settleSegmentOnEdges, } from './wall-catch.js';
|
|
16
|
+
// Rafters bear on the top plate, as standard trusses do; a raised heel is the segment's Wall Height.
|
|
17
|
+
const DEFAULT_HEEL_HEIGHT = 0;
|
|
18
|
+
// A cone's curb: it stands on the ground or on another roof, not on a plate.
|
|
19
|
+
const DEFAULT_CONICAL_CURB_HEIGHT = 0.5;
|
|
15
20
|
const DEFAULT_PITCH_DEG = 40;
|
|
16
21
|
const GRID_OFFSET = 0.02;
|
|
17
22
|
function placementOptions(mode) {
|
|
@@ -20,11 +25,21 @@ function placementOptions(mode) {
|
|
|
20
25
|
requireRoofSupport: mode === 'roof',
|
|
21
26
|
};
|
|
22
27
|
}
|
|
23
|
-
|
|
28
|
+
/**
|
|
29
|
+
* A placed segment's quarter turn: given outright, or from a ridge mode, which
|
|
30
|
+
* runs the ridge along the footprint's long side ('long') or across it.
|
|
31
|
+
*/
|
|
32
|
+
function resolveQuarterTurn(ridge, footprintWidth, footprintDepth) {
|
|
33
|
+
return typeof ridge === 'boolean'
|
|
34
|
+
? ridge
|
|
35
|
+
: ridgeQuarterTurn(footprintWidth, footprintDepth, ridge);
|
|
36
|
+
}
|
|
37
|
+
function resolveRoofDraftPlacement(footprintWidth, footprintDepth, ridge, parentRotation = 0, roofType = 'gable') {
|
|
24
38
|
if (roofType === 'conical') {
|
|
25
39
|
const diameter = Math.max(footprintWidth, footprintDepth);
|
|
26
40
|
return { width: diameter, depth: diameter, rotation: -parentRotation };
|
|
27
41
|
}
|
|
42
|
+
const quarterTurn = resolveQuarterTurn(ridge, footprintWidth, footprintDepth);
|
|
28
43
|
return {
|
|
29
44
|
width: quarterTurn ? footprintDepth : footprintWidth,
|
|
30
45
|
depth: quarterTurn ? footprintWidth : footprintDepth,
|
|
@@ -42,47 +57,62 @@ function getLevelWalls(levelId, nodes) {
|
|
|
42
57
|
.map((childId) => nodes[childId])
|
|
43
58
|
.filter((node) => node?.type === 'wall');
|
|
44
59
|
}
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
function
|
|
60
|
+
// The level directly beneath the active one. Levels share the same local XZ
|
|
61
|
+
// origin (they only differ in world Y), so its walls live in the identical
|
|
62
|
+
// coordinate frame and feed straight into both the alignment pool and the
|
|
63
|
+
// magnetic wall-snap pipeline — letting a roof drawn on the upper floor snap
|
|
64
|
+
// onto the wall corners of the floor below.
|
|
65
|
+
function getBelowLevel(currentLevelId, nodes) {
|
|
51
66
|
if (!currentLevelId)
|
|
52
|
-
return
|
|
67
|
+
return undefined;
|
|
53
68
|
const currentLevel = nodes[currentLevelId];
|
|
54
69
|
if (currentLevel?.type !== 'level')
|
|
55
|
-
return
|
|
70
|
+
return undefined;
|
|
56
71
|
const buildingId = resolveBuildingForLevel(currentLevel.id, nodes);
|
|
57
72
|
if (!buildingId)
|
|
58
|
-
return
|
|
73
|
+
return undefined;
|
|
59
74
|
const building = nodes[buildingId];
|
|
60
75
|
if (building?.type !== 'building')
|
|
61
|
-
return
|
|
76
|
+
return undefined;
|
|
62
77
|
const currentIndex = currentLevel.level;
|
|
63
|
-
|
|
78
|
+
return (building.children ?? [])
|
|
64
79
|
.map((childId) => nodes[childId])
|
|
65
80
|
.filter((node) => node?.type === 'level' && node.level < currentIndex)
|
|
66
81
|
.sort((a, b) => b.level - a.level)[0];
|
|
67
|
-
|
|
82
|
+
}
|
|
83
|
+
// Walls on the level directly beneath the active one.
|
|
84
|
+
function getBelowLevelWalls(currentLevelId, nodes) {
|
|
85
|
+
return getLevelWalls(getBelowLevel(currentLevelId, nodes)?.id ?? null, nodes);
|
|
86
|
+
}
|
|
87
|
+
// The active level and the one beneath it, whose rooms' edges a roof draws to.
|
|
88
|
+
function roofEdgeLevelIds(currentLevelId, nodes) {
|
|
89
|
+
const below = getBelowLevel(currentLevelId, nodes);
|
|
90
|
+
return [currentLevelId, below?.id].filter((id) => !!id);
|
|
68
91
|
}
|
|
69
92
|
// Current-level + floor-below walls — the magnetic snap targets the roof draft
|
|
70
93
|
// locks onto (corners, midpoints, crossings, wall bodies), matching the wall
|
|
71
|
-
// tool. Same coordinate frame, so no transform is needed.
|
|
94
|
+
// tool. Same coordinate frame, so no transform is needed. A porch, deck or
|
|
95
|
+
// patio is drawn to as the house is: its invisible walls, and its railings at
|
|
96
|
+
// their outside faces in place of their centre lines (`roofSnapEdges`).
|
|
72
97
|
function getRoofSnapWalls(currentLevelId, nodes, roofType) {
|
|
73
98
|
const walls = [
|
|
74
99
|
...getLevelWalls(currentLevelId, nodes),
|
|
75
100
|
...getBelowLevelWalls(currentLevelId, nodes),
|
|
76
101
|
];
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
102
|
+
if (roofType === 'conical')
|
|
103
|
+
return walls.filter((wall) => isCurvedWall(wall));
|
|
104
|
+
const edges = roofSnapEdges(nodes, roofEdgeLevelIds(currentLevelId, nodes));
|
|
105
|
+
return [...walls.filter((wall) => !edges.faced.has(wall.id)), ...edges.references].filter(isStandardRoofWallEligible);
|
|
80
106
|
}
|
|
81
|
-
// Current-level alignment anchors plus the floor-below wall corners
|
|
82
|
-
|
|
107
|
+
// Current-level alignment anchors plus the floor-below wall corners, and both
|
|
108
|
+
// levels' invisible walls and porch, deck and patio corners.
|
|
109
|
+
export function collectRoofAlignmentAnchors(nodes, currentLevelId, roofType) {
|
|
83
110
|
const anchors = [
|
|
84
111
|
...collectAlignmentAnchors(nodes, '', currentLevelId),
|
|
85
|
-
...getBelowLevelWalls(currentLevelId, nodes).flatMap((wall) => wallSegmentAnchors(wall.id, wall.start, wall.end, wall.thickness)),
|
|
112
|
+
...getBelowLevelWalls(currentLevelId, nodes).flatMap((wall) => wallSegmentAnchors(wall.id, wall.start, wall.end, wall.thickness, wall.justification)),
|
|
113
|
+
...(roofType === 'conical'
|
|
114
|
+
? []
|
|
115
|
+
: roofEdgeAnchors(nodes, roofEdgeLevelIds(currentLevelId, nodes))),
|
|
86
116
|
];
|
|
87
117
|
if (roofType === 'conical') {
|
|
88
118
|
return anchors.filter((anchor) => {
|
|
@@ -96,9 +126,51 @@ function collectRoofAlignmentAnchors(nodes, currentLevelId, roofType) {
|
|
|
96
126
|
});
|
|
97
127
|
}
|
|
98
128
|
/**
|
|
99
|
-
*
|
|
129
|
+
* A grid event's point as the roof tools draft and commit it, the 3D tool and the plan's alike:
|
|
130
|
+
* through the shared surface snap pipeline, magnetic lock onto wall corners / midpoints / crossings
|
|
131
|
+
* / bodies on the active level and the floor below (raising the green beacon), falling back to
|
|
132
|
+
* alignment guides, then to the building-grid snap. The pipeline reads the active snapping mode
|
|
133
|
+
* (grid / lines / angles / off). `levelId` is intentionally omitted so the explicit floor-below
|
|
134
|
+
* `walls` aren't filtered back out.
|
|
100
135
|
*/
|
|
101
|
-
export
|
|
136
|
+
export function resolveRoofDraftPoint(event, levelId, nodes, roofType, candidates) {
|
|
137
|
+
const rawPoint = [event.localPosition[0], event.localPosition[2]];
|
|
138
|
+
const gridFallback = isGridSnapActive()
|
|
139
|
+
? snapWorldXZForActiveBuilding(event.position[0], event.position[2], useEditor.getState().gridSnapStep).local
|
|
140
|
+
: rawPoint;
|
|
141
|
+
return resolveSurfacePlanPointSnap({
|
|
142
|
+
rawPoint,
|
|
143
|
+
fallbackPoint: gridFallback,
|
|
144
|
+
walls: getRoofSnapWalls(levelId, nodes, roofType),
|
|
145
|
+
candidates,
|
|
146
|
+
movingId: '__roof-draft__',
|
|
147
|
+
highlightWalls: true,
|
|
148
|
+
}).point;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* A drawn segment whose gable and heel walls stand flush on the walls it is drawn over, and whose
|
|
152
|
+
* walls' outer faces stand on the rooms' edges it is drawn out to: a porch's invisible walls, a
|
|
153
|
+
* deck's railings at their outside faces (`settleSegmentOnEdges`).
|
|
154
|
+
*/
|
|
155
|
+
function onBearingWalls(segment, roof, walls) {
|
|
156
|
+
const thickness = bearingWallThickness(segmentWallLine(roof, segment), walls);
|
|
157
|
+
const bearing = thickness === null ? segment : { ...segment, wallThickness: thickness };
|
|
158
|
+
return { ...bearing, ...settleSegmentOnEdges(roof, bearing, walls) };
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* A new roof's place, and its one segment centred in it: the segment settled onto a room's edge
|
|
162
|
+
* (`onBearingWalls`) moves off the roof's centre, so the roof moves with it.
|
|
163
|
+
*/
|
|
164
|
+
function centredRoof(roof, segment) {
|
|
165
|
+
const [x, z] = segmentWallLine(roof, segment).center;
|
|
166
|
+
return { center: [x, z], segment: { ...segment, position: [0, segment.position[1], 0] } };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Creates a roof group with one default gable segment. `ridge` is a quarter
|
|
170
|
+
* turn outright, or a ridge mode: 'long' runs the ridge along the drawn
|
|
171
|
+
* rectangle's long side, 'short' across it.
|
|
172
|
+
*/
|
|
173
|
+
export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selectedIds, ridge, placementMode) => {
|
|
102
174
|
const nodes = sceneApi.nodes();
|
|
103
175
|
// A placed roof preset seeds `toolDefaults.roof` with the flattened
|
|
104
176
|
// subtree params (roofType, pitch, wallHeight, overhang, materials, …)
|
|
@@ -114,7 +186,7 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
114
186
|
const footprintDepth = Math.max(Math.abs(corner2[2] - corner1[2]), 1);
|
|
115
187
|
if (roofType === 'conical') {
|
|
116
188
|
const diameter = Math.max(footprintWidth, footprintDepth);
|
|
117
|
-
const curbHeight = typeof defaults.wallHeight === 'number' ? defaults.wallHeight :
|
|
189
|
+
const curbHeight = typeof defaults.wallHeight === 'number' ? defaults.wallHeight : DEFAULT_CONICAL_CURB_HEIGHT;
|
|
118
190
|
const cone = RoofSegmentNode.parse({
|
|
119
191
|
pitch: DEFAULT_PITCH_DEG,
|
|
120
192
|
...defaults,
|
|
@@ -177,34 +249,24 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
177
249
|
}
|
|
178
250
|
if (targetRoofId) {
|
|
179
251
|
const targetRoof = nodes[targetRoofId];
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
localZ = worldVec.z;
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
// Math fallback if mesh isn't ready
|
|
192
|
-
const dx = centerX - targetRoof.position[0];
|
|
193
|
-
const dz = centerZ - targetRoof.position[2];
|
|
194
|
-
const angle = -targetRoof.rotation;
|
|
195
|
-
localX = dx * Math.cos(angle) - dz * Math.sin(angle);
|
|
196
|
-
localZ = dx * Math.sin(angle) + dz * Math.cos(angle);
|
|
197
|
-
}
|
|
198
|
-
const placement = resolveRoofDraftPlacement(footprintWidth, footprintDepth, quarterTurn, targetRoof.rotation, roofType);
|
|
252
|
+
// The corners are in the level's plan, the roof's frame: its own place and turn in it. (Its
|
|
253
|
+
// mesh's world matrix also carries the building's, which would throw the plane off.)
|
|
254
|
+
const dx = centerX - targetRoof.position[0];
|
|
255
|
+
const dz = centerZ - targetRoof.position[2];
|
|
256
|
+
const angle = -targetRoof.rotation;
|
|
257
|
+
const localX = dx * Math.cos(angle) - dz * Math.sin(angle);
|
|
258
|
+
const localZ = dx * Math.sin(angle) + dz * Math.cos(angle);
|
|
259
|
+
const placement = resolveRoofDraftPlacement(footprintWidth, footprintDepth, ridge, targetRoof.rotation, roofType);
|
|
199
260
|
const sibling = targetRoof.children
|
|
200
261
|
.map((id) => nodes[id])
|
|
201
262
|
.find((node) => node?.type === 'roof-segment');
|
|
202
|
-
const
|
|
263
|
+
const drawn = RoofSegmentNode.parse({
|
|
203
264
|
roofSystem: sibling?.type === 'roof-segment' ? sibling.roofSystem : undefined,
|
|
204
265
|
glazing: sibling?.type === 'roof-segment' ? sibling.glazing : undefined,
|
|
205
266
|
barrelRise: sibling?.type === 'roof-segment' ? sibling.barrelRise : undefined,
|
|
206
267
|
barrelSegments: sibling?.type === 'roof-segment' ? sibling.barrelSegments : undefined,
|
|
207
|
-
|
|
268
|
+
// A wing bears where the roof it joins does: on the plate, or on the same raised heel.
|
|
269
|
+
wallHeight: sibling?.type === 'roof-segment' ? sibling.wallHeight : DEFAULT_HEEL_HEIGHT,
|
|
208
270
|
pitch: DEFAULT_PITCH_DEG,
|
|
209
271
|
roofType: 'gable',
|
|
210
272
|
...defaults,
|
|
@@ -213,6 +275,7 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
213
275
|
position: [localX, 0, localZ],
|
|
214
276
|
rotation: placement.rotation,
|
|
215
277
|
});
|
|
278
|
+
const segment = onBearingWalls(drawn, targetRoof, roofCatchWalls(nodes, targetRoof.parentId));
|
|
216
279
|
writeSeatedRoofEdit(sceneApi, {
|
|
217
280
|
create: [{ node: segment, parentId: targetRoofId }],
|
|
218
281
|
});
|
|
@@ -223,10 +286,14 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
223
286
|
const roofCount = Object.values(nodes).filter((n) => n.type === 'roof').length;
|
|
224
287
|
const name = `Roof ${roofCount + 1}`;
|
|
225
288
|
const roofRotation = typeof defaults.rotation === 'number' ? defaults.rotation : 0;
|
|
226
|
-
const placement = resolveRoofDraftPlacement(footprintWidth, footprintDepth,
|
|
289
|
+
const placement = resolveRoofDraftPlacement(footprintWidth, footprintDepth, ridge, roofRotation, roofType);
|
|
227
290
|
// Create the segment first (centered in its new parent)
|
|
228
|
-
const
|
|
229
|
-
|
|
291
|
+
const drawnRoof = {
|
|
292
|
+
position: [centerX, 0, centerZ],
|
|
293
|
+
rotation: roofRotation,
|
|
294
|
+
};
|
|
295
|
+
const { center: [roofX, roofZ], segment, } = centredRoof(drawnRoof, onBearingWalls(RoofSegmentNode.parse({
|
|
296
|
+
wallHeight: DEFAULT_HEEL_HEIGHT,
|
|
230
297
|
pitch: DEFAULT_PITCH_DEG,
|
|
231
298
|
roofType: 'gable',
|
|
232
299
|
...defaults,
|
|
@@ -234,7 +301,7 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
234
301
|
depth: placement.depth,
|
|
235
302
|
position: [0, 0, 0],
|
|
236
303
|
rotation: placement.rotation,
|
|
237
|
-
});
|
|
304
|
+
}), drawnRoof, roofCatchWalls(nodes, levelId)));
|
|
238
305
|
// Drawn over a storey's walls, the roof goes on the level above them.
|
|
239
306
|
const target = drawnRoofLevelTarget(nodes, levelId, segment.wallHeight + getActiveRoofHeight(segment), { center: [centerX, centerZ], width: footprintWidth, depth: footprintDepth, roofType });
|
|
240
307
|
const support = drawnRoofSupport(target, levelId);
|
|
@@ -243,14 +310,14 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
243
310
|
const placed = RoofNode.parse({
|
|
244
311
|
...defaults,
|
|
245
312
|
name,
|
|
246
|
-
position: [
|
|
313
|
+
position: [roofX, 0, roofZ],
|
|
247
314
|
support,
|
|
248
315
|
children: [segment.id],
|
|
249
316
|
});
|
|
250
317
|
const roof = support.kind === 'walls'
|
|
251
318
|
? RoofNode.parse({
|
|
252
319
|
...placed,
|
|
253
|
-
position: [
|
|
320
|
+
position: [roofX, seatedRoofElevation(target, placed, [segment]), roofZ],
|
|
254
321
|
})
|
|
255
322
|
: placed;
|
|
256
323
|
// Create roof first (so segment can be parented to it), then segment
|
|
@@ -261,9 +328,10 @@ export const commitRoofPlacement = (sceneApi, levelId, corner1, corner2, selecte
|
|
|
261
328
|
triggerSFX('sfx:structure-build');
|
|
262
329
|
return roof.id;
|
|
263
330
|
};
|
|
264
|
-
export const commitRoofFootprint = (sceneApi, levelId, target,
|
|
331
|
+
export const commitRoofFootprint = (sceneApi, levelId, target, ridge) => {
|
|
265
332
|
if (!target.rectangular)
|
|
266
333
|
return null;
|
|
334
|
+
const quarterTurn = resolveQuarterTurn(ridge, target.width, target.depth);
|
|
267
335
|
const nodes = sceneApi.nodes();
|
|
268
336
|
const defaults = useEditor.getState().toolDefaults.roof ?? {};
|
|
269
337
|
const parsedRoofType = RoofTypeSchema.safeParse(defaults.roofType);
|
|
@@ -271,10 +339,15 @@ export const commitRoofFootprint = (sceneApi, levelId, target, quarterTurn) => {
|
|
|
271
339
|
if (roofType === 'conical')
|
|
272
340
|
return null;
|
|
273
341
|
const roofCount = Object.values(nodes).filter((node) => node.type === 'roof').length;
|
|
274
|
-
const
|
|
342
|
+
const walls = target.wallIds
|
|
343
|
+
.map((id) => nodes[id])
|
|
344
|
+
.filter((node) => node?.type === 'wall');
|
|
345
|
+
const picked = RoofSegmentNode.parse({
|
|
275
346
|
pitch: DEFAULT_PITCH_DEG,
|
|
276
347
|
roofType: 'gable',
|
|
277
348
|
...defaults,
|
|
349
|
+
// Its gable and heel walls stand flush on the room's walls.
|
|
350
|
+
...(walls.length > 0 && { wallThickness: Math.max(...walls.map(getWallThickness)) }),
|
|
278
351
|
wallHeight: 0,
|
|
279
352
|
width: quarterTurn ? target.depth : target.width,
|
|
280
353
|
depth: quarterTurn ? target.width : target.depth,
|
|
@@ -283,16 +356,27 @@ export const commitRoofFootprint = (sceneApi, levelId, target, quarterTurn) => {
|
|
|
283
356
|
});
|
|
284
357
|
// A roof belongs to the level above the walls it covers, whichever level the tool was armed
|
|
285
358
|
// on: over the top floor, the building's roof level.
|
|
286
|
-
const firstWall =
|
|
287
|
-
const wallsLevelId = (
|
|
359
|
+
const firstWall = walls[0];
|
|
360
|
+
const wallsLevelId = (target.levelId ??
|
|
361
|
+
(firstWall ? resolveLevelId(firstWall, nodes) : levelId));
|
|
362
|
+
// Over a porch, deck or patio, the roof's walls stand their outer faces on the room's outside
|
|
363
|
+
// edge, as a house roof's stand on the walls' outside faces.
|
|
364
|
+
const pickedRoof = {
|
|
365
|
+
position: [target.center[0], 0, target.center[1]],
|
|
366
|
+
rotation: target.rotation,
|
|
367
|
+
};
|
|
368
|
+
const { center, segment } = centredRoof(pickedRoof, {
|
|
369
|
+
...picked,
|
|
370
|
+
...settleSegmentOnEdges(pickedRoof, picked, roofCatchWalls(nodes, wallsLevelId)),
|
|
371
|
+
});
|
|
288
372
|
const level = roofLevelTarget(nodes, wallsLevelId, getActiveRoofHeight(segment));
|
|
289
373
|
const roof = RoofNode.parse({
|
|
290
374
|
...defaults,
|
|
291
375
|
name: `Roof ${roofCount + 1}`,
|
|
292
376
|
position: [
|
|
293
|
-
|
|
377
|
+
center[0],
|
|
294
378
|
resolveRoofFootprintElevation(level.levelId, target, level.nodes),
|
|
295
|
-
|
|
379
|
+
center[1],
|
|
296
380
|
],
|
|
297
381
|
rotation: target.rotation,
|
|
298
382
|
support: { kind: 'walls' },
|
|
@@ -305,157 +389,59 @@ export const commitRoofFootprint = (sceneApi, levelId, target, quarterTurn) => {
|
|
|
305
389
|
triggerSFX('sfx:structure-build');
|
|
306
390
|
return roof.id;
|
|
307
391
|
};
|
|
308
|
-
function buildRoofGhostGeometry(width, depth, wallHeight, pitchDeg, roofType) {
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
const ridgeHeight = wallHeight + Math.tan((pitchDeg * Math.PI) / 180) * halfDepth;
|
|
314
|
-
if (roofType === 'conical') {
|
|
315
|
-
const roofHeight = Math.max(0.001, Math.tan((pitchDeg * Math.PI) / 180) * halfWidth);
|
|
316
|
-
const geometry = new THREE.ConeGeometry(halfWidth, roofHeight, 48);
|
|
317
|
-
geometry.translate(0, wallHeight + roofHeight / 2, 0);
|
|
318
|
-
return geometry;
|
|
319
|
-
}
|
|
320
|
-
const vertices = [
|
|
321
|
-
// Front slope
|
|
322
|
-
-halfWidth,
|
|
323
|
-
wallHeight,
|
|
324
|
-
-halfDepth,
|
|
325
|
-
halfWidth,
|
|
326
|
-
wallHeight,
|
|
327
|
-
-halfDepth,
|
|
328
|
-
halfWidth,
|
|
329
|
-
ridgeHeight,
|
|
330
|
-
0,
|
|
331
|
-
-halfWidth,
|
|
332
|
-
wallHeight,
|
|
333
|
-
-halfDepth,
|
|
334
|
-
halfWidth,
|
|
335
|
-
ridgeHeight,
|
|
336
|
-
0,
|
|
337
|
-
-halfWidth,
|
|
338
|
-
ridgeHeight,
|
|
339
|
-
0,
|
|
340
|
-
// Back slope
|
|
341
|
-
-halfWidth,
|
|
342
|
-
ridgeHeight,
|
|
343
|
-
0,
|
|
344
|
-
halfWidth,
|
|
345
|
-
ridgeHeight,
|
|
346
|
-
0,
|
|
347
|
-
halfWidth,
|
|
348
|
-
wallHeight,
|
|
349
|
-
halfDepth,
|
|
350
|
-
-halfWidth,
|
|
351
|
-
ridgeHeight,
|
|
352
|
-
0,
|
|
353
|
-
halfWidth,
|
|
354
|
-
wallHeight,
|
|
355
|
-
halfDepth,
|
|
356
|
-
-halfWidth,
|
|
357
|
-
wallHeight,
|
|
358
|
-
halfDepth,
|
|
359
|
-
// Left gable
|
|
360
|
-
-halfWidth,
|
|
361
|
-
wallHeight,
|
|
362
|
-
-halfDepth,
|
|
363
|
-
-halfWidth,
|
|
364
|
-
ridgeHeight,
|
|
365
|
-
0,
|
|
366
|
-
-halfWidth,
|
|
367
|
-
wallHeight,
|
|
368
|
-
halfDepth,
|
|
369
|
-
// Right gable
|
|
370
|
-
halfWidth,
|
|
371
|
-
wallHeight,
|
|
372
|
-
-halfDepth,
|
|
373
|
-
halfWidth,
|
|
392
|
+
export function buildRoofGhostGeometry(width, depth, wallHeight, pitchDeg, roofType, defaults = {}) {
|
|
393
|
+
const node = RoofSegmentNode.parse({
|
|
394
|
+
...defaults,
|
|
395
|
+
width: Math.max(width, 0.1),
|
|
396
|
+
depth: Math.max(depth, 0.1),
|
|
374
397
|
wallHeight,
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
+
pitch: pitchDeg,
|
|
399
|
+
roofType,
|
|
400
|
+
});
|
|
401
|
+
const { activeRh, tanTheta } = getSegmentSlopeFrame(node);
|
|
402
|
+
const faces = getRoofModuleFaces({
|
|
403
|
+
type: node.roofType,
|
|
404
|
+
w: node.width,
|
|
405
|
+
d: node.depth,
|
|
406
|
+
wh: node.wallHeight,
|
|
407
|
+
rh: activeRh,
|
|
408
|
+
baseY: 0,
|
|
409
|
+
baseW: node.width,
|
|
410
|
+
baseD: node.depth,
|
|
411
|
+
tanTheta,
|
|
412
|
+
insets: {},
|
|
413
|
+
shapeRatios: getRoofShapeRatios(node),
|
|
414
|
+
dutchTopRakeThickness: node.dutchTopRakeThickness,
|
|
415
|
+
conicalStartAngle: node.conicalFullCircle ? 0 : node.conicalStartAngle,
|
|
416
|
+
conicalSweepAngle: node.conicalFullCircle ? Math.PI * 2 : node.conicalSweepAngle,
|
|
417
|
+
});
|
|
418
|
+
const positions = [];
|
|
419
|
+
for (const face of faces) {
|
|
420
|
+
if (face.length < 3)
|
|
421
|
+
continue;
|
|
422
|
+
const origin = new THREE.Vector3(face[0].x, face[0].y, face[0].z);
|
|
423
|
+
const normal = new THREE.Vector3();
|
|
424
|
+
for (let i = 1; i + 1 < face.length && normal.lengthSq() < 1e-12; i++) {
|
|
425
|
+
normal.crossVectors(new THREE.Vector3(face[i].x, face[i].y, face[i].z).sub(origin), new THREE.Vector3(face[i + 1].x, face[i + 1].y, face[i + 1].z).sub(origin));
|
|
426
|
+
}
|
|
427
|
+
if (normal.lengthSq() < 1e-12)
|
|
428
|
+
continue;
|
|
429
|
+
const axis = Math.abs(normal.y) >= Math.max(Math.abs(normal.x), Math.abs(normal.z))
|
|
430
|
+
? 'y'
|
|
431
|
+
: Math.abs(normal.x) > Math.abs(normal.z)
|
|
432
|
+
? 'x'
|
|
433
|
+
: 'z';
|
|
434
|
+
const contour = face.map((v) => new THREE.Vector2(axis === 'x' ? v.y : v.x, axis === 'z' ? v.y : v.z));
|
|
435
|
+
for (const triangle of THREE.ShapeUtils.triangulateShape(contour, [])) {
|
|
436
|
+
for (const index of triangle) {
|
|
437
|
+
const vertex = face[index];
|
|
438
|
+
positions.push(vertex.x, vertex.y, vertex.z);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
398
441
|
}
|
|
399
|
-
const vertices = [
|
|
400
|
-
// Base rectangle
|
|
401
|
-
-halfWidth,
|
|
402
|
-
wallHeight,
|
|
403
|
-
-halfDepth,
|
|
404
|
-
halfWidth,
|
|
405
|
-
wallHeight,
|
|
406
|
-
-halfDepth,
|
|
407
|
-
halfWidth,
|
|
408
|
-
wallHeight,
|
|
409
|
-
-halfDepth,
|
|
410
|
-
halfWidth,
|
|
411
|
-
wallHeight,
|
|
412
|
-
halfDepth,
|
|
413
|
-
halfWidth,
|
|
414
|
-
wallHeight,
|
|
415
|
-
halfDepth,
|
|
416
|
-
-halfWidth,
|
|
417
|
-
wallHeight,
|
|
418
|
-
halfDepth,
|
|
419
|
-
-halfWidth,
|
|
420
|
-
wallHeight,
|
|
421
|
-
halfDepth,
|
|
422
|
-
-halfWidth,
|
|
423
|
-
wallHeight,
|
|
424
|
-
-halfDepth,
|
|
425
|
-
// Ridge + gable edges
|
|
426
|
-
-halfWidth,
|
|
427
|
-
ridgeHeight,
|
|
428
|
-
0,
|
|
429
|
-
halfWidth,
|
|
430
|
-
ridgeHeight,
|
|
431
|
-
0,
|
|
432
|
-
-halfWidth,
|
|
433
|
-
wallHeight,
|
|
434
|
-
-halfDepth,
|
|
435
|
-
-halfWidth,
|
|
436
|
-
ridgeHeight,
|
|
437
|
-
0,
|
|
438
|
-
-halfWidth,
|
|
439
|
-
ridgeHeight,
|
|
440
|
-
0,
|
|
441
|
-
-halfWidth,
|
|
442
|
-
wallHeight,
|
|
443
|
-
halfDepth,
|
|
444
|
-
halfWidth,
|
|
445
|
-
wallHeight,
|
|
446
|
-
-halfDepth,
|
|
447
|
-
halfWidth,
|
|
448
|
-
ridgeHeight,
|
|
449
|
-
0,
|
|
450
|
-
halfWidth,
|
|
451
|
-
ridgeHeight,
|
|
452
|
-
0,
|
|
453
|
-
halfWidth,
|
|
454
|
-
wallHeight,
|
|
455
|
-
halfDepth,
|
|
456
|
-
];
|
|
457
442
|
const geometry = new BufferGeometry();
|
|
458
|
-
geometry.setAttribute('position', new Float32BufferAttribute(
|
|
443
|
+
geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
|
|
444
|
+
geometry.computeVertexNormals();
|
|
459
445
|
return geometry;
|
|
460
446
|
}
|
|
461
447
|
export const RoofTool = () => {
|
|
@@ -472,16 +458,16 @@ export const RoofTool = () => {
|
|
|
472
458
|
const roofType = parsedRoofType.success ? parsedRoofType.data : 'gable';
|
|
473
459
|
const footprintSourceChoice = useRoofFootprintSource((state) => state.source);
|
|
474
460
|
const footprintSource = parseRoofFootprintSource(footprintSourceChoice, roofType);
|
|
475
|
-
const previewWallHeight = typeof roofDefaults?.wallHeight === 'number'
|
|
461
|
+
const previewWallHeight = typeof roofDefaults?.wallHeight === 'number'
|
|
462
|
+
? roofDefaults.wallHeight
|
|
463
|
+
: roofType === 'conical'
|
|
464
|
+
? DEFAULT_CONICAL_CURB_HEIGHT
|
|
465
|
+
: DEFAULT_HEEL_HEIGHT;
|
|
476
466
|
const previewPitch = typeof roofDefaults?.pitch === 'number' ? roofDefaults.pitch : DEFAULT_PITCH_DEG;
|
|
477
467
|
const selectedIdsRef = useRef(selectedIds);
|
|
478
468
|
useEffect(() => {
|
|
479
469
|
selectedIdsRef.current = selectedIds;
|
|
480
470
|
}, [selectedIds]);
|
|
481
|
-
useEffect(() => {
|
|
482
|
-
useRoofPlacementMode.getState().setConical(roofType === 'conical');
|
|
483
|
-
return () => useRoofPlacementMode.getState().setConical(false);
|
|
484
|
-
}, [roofType]);
|
|
485
471
|
useEffect(() => {
|
|
486
472
|
if (!currentLevelId)
|
|
487
473
|
return;
|
|
@@ -505,13 +491,11 @@ export const RoofTool = () => {
|
|
|
505
491
|
.endIf((scope) => scope.kind === 'placing' && scope.nodeId === draft.id);
|
|
506
492
|
};
|
|
507
493
|
}, [currentLevelId]);
|
|
508
|
-
//
|
|
509
|
-
|
|
510
|
-
useEffect(() => () => useEditor.getState().setToolDefaults('roof', null), []);
|
|
494
|
+
// Each arming starts with the ridge along the long side. Unmount-only.
|
|
495
|
+
useEffect(() => () => useRoofRidgeMode.getState().reset(), []);
|
|
511
496
|
const corner1Ref = useRef(null);
|
|
512
497
|
const previousGridPosRef = useRef(null);
|
|
513
|
-
const
|
|
514
|
-
const [quarterTurn, setQuarterTurn] = useState(false);
|
|
498
|
+
const ridgeMode = useRoofRidgeMode((state) => state.mode);
|
|
515
499
|
const [footprintTarget, setFootprintTarget] = useState(null);
|
|
516
500
|
const previewTargetIdRef = useRef(null);
|
|
517
501
|
const [previewedConicalWallId, setPreviewedConicalWallId] = useState(null);
|
|
@@ -531,41 +515,23 @@ export const RoofTool = () => {
|
|
|
531
515
|
if (!currentLevelId)
|
|
532
516
|
return;
|
|
533
517
|
outlineRef.current.geometry = new BufferGeometry();
|
|
534
|
-
|
|
518
|
+
// The 2D draft's ridge line follows the drawn rectangle and the ridge mode.
|
|
519
|
+
const syncDraftRidge = (corner1, corner2) => useFloorplanDraftPreview
|
|
520
|
+
.getState()
|
|
521
|
+
.setRoofDraftQuarterTurn(ridgeQuarterTurn(Math.abs(corner2[0] - corner1[0]), Math.abs(corner2[2] - corner1[2]), useRoofRidgeMode.getState().mode));
|
|
522
|
+
let lastCursor = null;
|
|
535
523
|
// Alignment candidates — anchors of every alignable object on the active
|
|
536
524
|
// level plus the wall corners of the floor directly below, so a roof drawn
|
|
537
525
|
// on the upper floor aligns to the walls beneath it. Refreshed after each
|
|
538
526
|
// roof commits. Both corners of the rectangle align.
|
|
539
527
|
let alignmentCandidates = collectRoofAlignmentAnchors(sceneApi.nodes(), currentLevelId, roofType);
|
|
540
|
-
|
|
541
|
-
// snap pipeline: magnetic lock onto wall corners / midpoints / crossings /
|
|
542
|
-
// bodies on the active level + floor below (raising the green beacon),
|
|
543
|
-
// falling back to alignment guides, then to the world-grid snap. The same
|
|
544
|
-
// path the slab/ceiling tools use, so the beacon and coloring match. The
|
|
545
|
-
// pipeline reads the active snapping mode (grid / lines / angles / off),
|
|
546
|
-
// so this tool never inspects the flags. `levelId` is intentionally omitted
|
|
547
|
-
// so the explicit floor-below `walls` aren't filtered back out.
|
|
548
|
-
const resolveDraftPoint = (event) => {
|
|
549
|
-
const rawPoint = [event.localPosition[0], event.localPosition[2]];
|
|
550
|
-
const gridFallback = isGridSnapActive()
|
|
551
|
-
? snapWorldXZForActiveBuilding(event.position[0], event.position[2], useEditor.getState().gridSnapStep).local
|
|
552
|
-
: rawPoint;
|
|
553
|
-
const nodes = sceneApi.nodes();
|
|
554
|
-
return resolveSurfacePlanPointSnap({
|
|
555
|
-
rawPoint,
|
|
556
|
-
fallbackPoint: gridFallback,
|
|
557
|
-
walls: getRoofSnapWalls(currentLevelId, nodes, roofType),
|
|
558
|
-
candidates: alignmentCandidates,
|
|
559
|
-
movingId: '__roof-draft__',
|
|
560
|
-
highlightWalls: true,
|
|
561
|
-
}).point;
|
|
562
|
-
};
|
|
528
|
+
const resolveDraftPoint = (event) => resolveRoofDraftPoint(event, currentLevelId, sceneApi.nodes(), roofType, alignmentCandidates);
|
|
563
529
|
const updateFootprintPreview = (target) => {
|
|
564
530
|
setFootprintTarget((previous) => (previous?.id === target?.id ? previous : target));
|
|
565
531
|
if (previewTargetIdRef.current === (target?.id ?? null))
|
|
566
532
|
return;
|
|
567
533
|
previewTargetIdRef.current = target?.id ?? null;
|
|
568
|
-
setPreviewSelectedIds(target
|
|
534
|
+
setPreviewSelectedIds(roofFootprintPreviewIds(target));
|
|
569
535
|
};
|
|
570
536
|
const updateOutline = (corner1, corner2) => {
|
|
571
537
|
let gridY = corner1[1] + GRID_OFFSET;
|
|
@@ -574,7 +540,9 @@ export const RoofTool = () => {
|
|
|
574
540
|
const centerZ = (corner1[2] + corner2[2]) / 2;
|
|
575
541
|
const diameter = Math.max(Math.abs(corner2[0] - corner1[0]), Math.abs(corner2[2] - corner1[2]));
|
|
576
542
|
const defaults = useEditor.getState().toolDefaults.roof;
|
|
577
|
-
const curbHeight = typeof defaults?.wallHeight === 'number'
|
|
543
|
+
const curbHeight = typeof defaults?.wallHeight === 'number'
|
|
544
|
+
? defaults.wallHeight
|
|
545
|
+
: DEFAULT_CONICAL_CURB_HEIGHT;
|
|
578
546
|
const target = drawnRoofLevelTarget(sceneApi.nodes(), currentLevelId, 0, {
|
|
579
547
|
center: [centerX, centerZ],
|
|
580
548
|
width: diameter,
|
|
@@ -619,16 +587,20 @@ export const RoofTool = () => {
|
|
|
619
587
|
outlineRef.current.geometry = new BufferGeometry().setFromPoints(groundPoints);
|
|
620
588
|
outlineRef.current.visible = true;
|
|
621
589
|
};
|
|
590
|
+
// In 2D-only view the plan's own roof tool owns the input (`floorplan-tool.tsx`); this tool,
|
|
591
|
+
// mounted behind the hidden canvas from an earlier visit, still hears the plan's grid events,
|
|
592
|
+
// so it must not also draft or commit (every roof would be made twice).
|
|
593
|
+
const planOwnsInput = () => visibleScene(useEditor.getState()) === '2d';
|
|
622
594
|
const onGridMove = (event) => {
|
|
623
|
-
if (!cursorRef.current)
|
|
595
|
+
if (!cursorRef.current || planOwnsInput())
|
|
624
596
|
return;
|
|
625
597
|
if (footprintSource !== 'draw') {
|
|
626
598
|
const [snappedX, snappedZ] = resolveDraftPoint(event);
|
|
627
599
|
let target = null;
|
|
628
600
|
if (footprintSource === 'room') {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
601
|
+
const room = pickRoofRoom(currentLevelId, sceneApi.nodes(), [snappedX, snappedZ]);
|
|
602
|
+
target = room.target;
|
|
603
|
+
useRoofFootprintSource.getState().setRoomPick(room.pick);
|
|
632
604
|
updateFootprintPreview(target);
|
|
633
605
|
}
|
|
634
606
|
cursorRef.current.position.set(snappedX, target
|
|
@@ -658,20 +630,26 @@ export const RoofTool = () => {
|
|
|
658
630
|
const draftPreview = useFloorplanDraftPreview.getState();
|
|
659
631
|
draftPreview.setRoofDraftStart([corner1Ref.current[0], corner1Ref.current[2]]);
|
|
660
632
|
draftPreview.setRoofDraftEnd([gridX, gridZ]);
|
|
633
|
+
syncDraftRidge(corner1Ref.current, cursorPosition);
|
|
661
634
|
updateOutline(corner1Ref.current, cursorPosition);
|
|
662
635
|
}
|
|
636
|
+
lastCursor = cursorPosition;
|
|
663
637
|
};
|
|
664
638
|
const onGridClick = (event) => {
|
|
665
|
-
if (!currentLevelId)
|
|
639
|
+
if (!currentLevelId || planOwnsInput())
|
|
666
640
|
return;
|
|
667
641
|
if (footprintSource !== 'draw') {
|
|
668
642
|
if (footprintSource !== 'room')
|
|
669
643
|
return;
|
|
670
644
|
const [snappedX, snappedZ] = resolveDraftPoint(event);
|
|
671
|
-
const target =
|
|
645
|
+
const { target, pick } = pickRoofRoom(currentLevelId, sceneApi.nodes(), [
|
|
646
|
+
snappedX,
|
|
647
|
+
snappedZ,
|
|
648
|
+
]);
|
|
649
|
+
useRoofFootprintSource.getState().setRoomPick(pick);
|
|
672
650
|
if (!target)
|
|
673
651
|
return;
|
|
674
|
-
const roofId = commitRoofFootprint(sceneApi, currentLevelId, target,
|
|
652
|
+
const roofId = commitRoofFootprint(sceneApi, currentLevelId, target, useRoofRidgeMode.getState().mode);
|
|
675
653
|
if (roofId)
|
|
676
654
|
selectNode(roofId);
|
|
677
655
|
return;
|
|
@@ -679,7 +657,7 @@ export const RoofTool = () => {
|
|
|
679
657
|
const [gridX, gridZ] = resolveDraftPoint(event);
|
|
680
658
|
const y = event.localPosition[1];
|
|
681
659
|
if (corner1Ref.current) {
|
|
682
|
-
const roofId = commitRoofPlacement(sceneApi, currentLevelId, corner1Ref.current, [gridX, y, gridZ], selectedIdsRef.current,
|
|
660
|
+
const roofId = commitRoofPlacement(sceneApi, currentLevelId, corner1Ref.current, [gridX, y, gridZ], selectedIdsRef.current, useRoofRidgeMode.getState().mode, useRoofPlacementMode.getState().mode);
|
|
683
661
|
if (!roofId)
|
|
684
662
|
return;
|
|
685
663
|
selectNode(roofId);
|
|
@@ -703,21 +681,32 @@ export const RoofTool = () => {
|
|
|
703
681
|
}));
|
|
704
682
|
}
|
|
705
683
|
};
|
|
684
|
+
const dropCorner = () => {
|
|
685
|
+
corner1Ref.current = null;
|
|
686
|
+
outlineRef.current.visible = false;
|
|
687
|
+
setPreview((prev) => ({ ...prev, corner1: null }));
|
|
688
|
+
};
|
|
689
|
+
// A corner opened before the view went 2D-only would end the next rectangle drawn back in
|
|
690
|
+
// split view. The plan's tool clears the shared draft as it takes over.
|
|
691
|
+
const unsubscribeView = useEditor.subscribe((state) => {
|
|
692
|
+
if (corner1Ref.current && visibleScene(state) === '2d')
|
|
693
|
+
dropCorner();
|
|
694
|
+
});
|
|
706
695
|
const onCancel = () => {
|
|
707
696
|
if (corner1Ref.current) {
|
|
708
697
|
markToolCancelConsumed();
|
|
709
|
-
|
|
698
|
+
dropCorner();
|
|
710
699
|
const draftPreview = useFloorplanDraftPreview.getState();
|
|
711
700
|
draftPreview.setRoofDraftStart(null);
|
|
712
701
|
draftPreview.setRoofDraftEnd(null);
|
|
713
|
-
outlineRef.current.visible = false;
|
|
714
|
-
setPreview((prev) => ({ ...prev, corner1: null }));
|
|
715
702
|
}
|
|
716
703
|
clearSurfacePlanSnapFeedback();
|
|
717
704
|
previewTargetIdRef.current = null;
|
|
718
705
|
setPreviewSelectedIds([]);
|
|
719
706
|
};
|
|
720
707
|
const onKeyDown = (event) => {
|
|
708
|
+
if (planOwnsInput())
|
|
709
|
+
return;
|
|
721
710
|
if (event.target instanceof HTMLInputElement ||
|
|
722
711
|
event.target instanceof HTMLTextAreaElement ||
|
|
723
712
|
(event.target instanceof HTMLElement && event.target.isContentEditable)) {
|
|
@@ -743,12 +732,14 @@ export const RoofTool = () => {
|
|
|
743
732
|
return;
|
|
744
733
|
}
|
|
745
734
|
event.preventDefault();
|
|
746
|
-
|
|
747
|
-
quarterTurnRef.current = nextQuarterTurn;
|
|
748
|
-
setQuarterTurn(nextQuarterTurn);
|
|
749
|
-
useFloorplanDraftPreview.getState().setRoofDraftQuarterTurn(nextQuarterTurn);
|
|
735
|
+
useRoofRidgeMode.getState().toggle();
|
|
750
736
|
triggerSFX('sfx:item-rotate');
|
|
751
737
|
};
|
|
738
|
+
// The HUD chip flips the mode too; either way the 2D draft follows.
|
|
739
|
+
const unsubscribeRidgeMode = useRoofRidgeMode.subscribe(() => {
|
|
740
|
+
if (corner1Ref.current && lastCursor)
|
|
741
|
+
syncDraftRidge(corner1Ref.current, lastCursor);
|
|
742
|
+
});
|
|
752
743
|
emitter.on('grid:move', onGridMove);
|
|
753
744
|
emitter.on('grid:click', onGridClick);
|
|
754
745
|
emitter.on('tool:cancel', onCancel);
|
|
@@ -788,11 +779,14 @@ export const RoofTool = () => {
|
|
|
788
779
|
emitter.off('wall:leave', onWallLeave);
|
|
789
780
|
unsubscribeConicalRoofWallClicks();
|
|
790
781
|
window.removeEventListener('keydown', onKeyDown);
|
|
782
|
+
unsubscribeRidgeMode();
|
|
783
|
+
unsubscribeView();
|
|
791
784
|
clearSurfacePlanSnapFeedback();
|
|
792
785
|
previewTargetIdRef.current = null;
|
|
793
786
|
setPreviewedConicalWallId(null);
|
|
794
787
|
setInvalidStandardWallHover(false);
|
|
795
788
|
setPreviewSelectedIds([]);
|
|
789
|
+
useRoofFootprintSource.getState().setRoomPick(null);
|
|
796
790
|
corner1Ref.current = null;
|
|
797
791
|
const draftPreview = useFloorplanDraftPreview.getState();
|
|
798
792
|
draftPreview.setRoofDraftStart(null);
|
|
@@ -869,7 +863,8 @@ export const RoofTool = () => {
|
|
|
869
863
|
arc.center.x,
|
|
870
864
|
currentLevelId
|
|
871
865
|
? resolveRoofWallTopWorldElevation(currentLevelId, wall, nodes)
|
|
872
|
-
: getWallBaseElevationForNodes(wall, nodes) +
|
|
866
|
+
: getWallBaseElevationForNodes(wall, nodes) +
|
|
867
|
+
getWallEffectiveHeightForNodes(wall, nodes, 0),
|
|
873
868
|
arc.center.y,
|
|
874
869
|
],
|
|
875
870
|
};
|
|
@@ -899,33 +894,19 @@ export const RoofTool = () => {
|
|
|
899
894
|
!resolvedPreviewDimensions ||
|
|
900
895
|
(roofType === 'conical' && footprintSource !== 'draw'))
|
|
901
896
|
return null;
|
|
902
|
-
const placement = resolveRoofDraftPlacement(resolvedPreviewDimensions.length, resolvedPreviewDimensions.width,
|
|
903
|
-
return buildRoofGhostGeometry(placement.width, placement.depth, ghostWallHeight, previewPitch, roofType);
|
|
904
|
-
}, [
|
|
905
|
-
footprintSource,
|
|
906
|
-
ghostWallHeight,
|
|
907
|
-
invalidStandardWallHover,
|
|
908
|
-
previewPitch,
|
|
909
|
-
quarterTurn,
|
|
910
|
-
resolvedPreviewDimensions,
|
|
911
|
-
roofType,
|
|
912
|
-
]);
|
|
913
|
-
const roofGhostEdges = useMemo(() => {
|
|
914
|
-
if (invalidStandardWallHover ||
|
|
915
|
-
!resolvedPreviewDimensions ||
|
|
916
|
-
(roofType === 'conical' && footprintSource !== 'draw'))
|
|
917
|
-
return null;
|
|
918
|
-
const placement = resolveRoofDraftPlacement(resolvedPreviewDimensions.length, resolvedPreviewDimensions.width, quarterTurn, 0, roofType);
|
|
919
|
-
return buildRoofGhostEdges(placement.width, placement.depth, ghostWallHeight, previewPitch, roofType);
|
|
897
|
+
const placement = resolveRoofDraftPlacement(resolvedPreviewDimensions.length, resolvedPreviewDimensions.width, ridgeMode, 0, roofType);
|
|
898
|
+
return buildRoofGhostGeometry(placement.width, placement.depth, ghostWallHeight, previewPitch, roofType, roofDefaults);
|
|
920
899
|
}, [
|
|
921
900
|
footprintSource,
|
|
922
901
|
ghostWallHeight,
|
|
923
902
|
invalidStandardWallHover,
|
|
924
903
|
previewPitch,
|
|
925
|
-
|
|
904
|
+
ridgeMode,
|
|
926
905
|
resolvedPreviewDimensions,
|
|
927
906
|
roofType,
|
|
907
|
+
roofDefaults,
|
|
928
908
|
]);
|
|
909
|
+
const roofGhostEdges = useMemo(() => (roofGhostGeometry ? new THREE.EdgesGeometry(roofGhostGeometry, 10) : null), [roofGhostGeometry]);
|
|
929
910
|
useEffect(() => {
|
|
930
911
|
if (invalidStandardWallHover)
|
|
931
912
|
outlineRef.current.visible = false;
|
|
@@ -954,7 +935,10 @@ export const RoofTool = () => {
|
|
|
954
935
|
], rotation: [
|
|
955
936
|
0,
|
|
956
937
|
(footprintSource !== 'draw' ? (footprintTarget?.rotation ?? 0) : 0) +
|
|
957
|
-
(roofType
|
|
938
|
+
(roofType !== 'conical' &&
|
|
939
|
+
ridgeQuarterTurn(resolvedPreviewDimensions.length, resolvedPreviewDimensions.width, ridgeMode)
|
|
940
|
+
? Math.PI / 2
|
|
941
|
+
: 0),
|
|
958
942
|
0,
|
|
959
943
|
], children: [roofGhostGeometry && (_jsx("mesh", { geometry: roofGhostGeometry, layers: EDITOR_LAYER, renderOrder: 1, children: _jsx("meshBasicMaterial", { color: ghostColor, depthTest: false, depthWrite: false, opacity: 0.16, side: DoubleSide, transparent: true }) })), roofGhostEdges && (_jsx("lineSegments", { geometry: roofGhostEdges, layers: EDITOR_LAYER, renderOrder: 2, children: _jsx("lineBasicMaterial", { color: ghostColor, depthTest: false, depthWrite: false, opacity: 0.5, transparent: true }) }))] }))] }));
|
|
960
944
|
};
|