@pascal-app/nodes 1.0.7 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/definition.d.ts +64 -13
- package/dist/beam/definition.d.ts.map +1 -1
- 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 +131 -0
- package/dist/beam/definition.js +4 -173
- 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 +34 -0
- package/dist/beam/floorplan.d.ts.map +1 -1
- package/dist/beam/floorplan.js +1 -2
- package/dist/beam/panel.d.ts.map +1 -1
- package/dist/beam/panel.js +2 -2
- package/dist/beam/tool.d.ts.map +1 -1
- package/dist/beam/tool.js +2 -2
- 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 +26 -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 +122 -0
- package/dist/block/floorplan.d.ts.map +1 -1
- package/dist/block/floorplan.js +1 -2
- 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 +149 -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 +42 -0
- package/dist/box-vent/move-tool.d.ts.map +1 -1
- package/dist/box-vent/move-tool.js +6 -5
- 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/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 +1372 -0
- package/dist/cabinet/definition.js +6 -2115
- 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 +754 -0
- package/dist/cabinet/floorplan.js +1 -1
- package/dist/cabinet/kitchen-module-actions.d.ts.map +1 -1
- package/dist/cabinet/kitchen-module-actions.js +2 -2
- 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/system.js +1 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +268 -15
- 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/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 +123 -0
- package/dist/ceiling/definition.js +4 -207
- 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 +73 -0
- package/dist/ceiling/panel.js +2 -2
- 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 +217 -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 +61 -0
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +6 -4
- package/dist/chimney/panel.js +1 -1
- 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 +320 -0
- package/dist/column/definition.js +4 -439
- 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 +84 -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 +34 -93
- 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 +3 -2
- 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 +451 -363
- package/dist/column/parametrics.js +1 -1
- package/dist/column/post-section.d.ts.map +1 -1
- package/dist/column/post-section.js +2 -2
- 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.map +1 -1
- package/dist/column/tool.js +21 -10
- 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 +30 -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 +55 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan-tool.js +2 -2
- package/dist/construction-dimension/floorplan.d.ts.map +1 -1
- package/dist/construction-dimension/floorplan.js +1 -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 +101 -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 +45 -0
- package/dist/cupola/move-tool.d.ts.map +1 -1
- package/dist/cupola/move-tool.js +6 -5
- 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/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 +241 -0
- package/dist/door/definition.js +4 -341
- 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 +94 -0
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +11 -8
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +1 -2
- 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 +25 -23
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +2 -1
- 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 +212 -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 +54 -0
- package/dist/dormer/panel-position-section.js +1 -1
- 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/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 +47 -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 +84 -0
- package/dist/duct-fitting/floorplan.js +1 -1
- package/dist/duct-fitting/geometry.js +2 -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-segment/continuation-handle.d.ts +8 -0
- package/dist/duct-segment/continuation-handle.d.ts.map +1 -0
- package/dist/duct-segment/continuation-handle.js +36 -0
- package/dist/duct-segment/continuation.d.ts +3 -7
- package/dist/duct-segment/continuation.d.ts.map +1 -1
- package/dist/duct-segment/continuation.js +54 -37
- 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 +98 -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 +91 -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 +2 -2
- 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 +114 -54
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +105 -28
- 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 +12 -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 +68 -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/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 +167 -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 +106 -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 +152 -100
- 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 +104 -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 +45 -0
- package/dist/eyebrow-vent/move-tool.d.ts.map +1 -1
- package/dist/eyebrow-vent/move-tool.js +6 -5
- 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 +276 -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 +126 -0
- package/dist/fence/move-endpoint-tool.d.ts.map +1 -1
- package/dist/fence/move-endpoint-tool.js +2 -2
- package/dist/fence/tool.js +2 -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 +66 -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 +72 -0
- 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 +9 -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 +35 -0
- package/dist/floor-opening/floorplan-affordances.d.ts +150 -0
- package/dist/floor-opening/floorplan-affordances.d.ts.map +1 -0
- package/dist/floor-opening/floorplan-affordances.js +67 -0
- package/dist/floor-opening/floorplan.d.ts +2 -151
- package/dist/floor-opening/floorplan.d.ts.map +1 -1
- package/dist/floor-opening/floorplan.js +0 -66
- 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 +119 -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 +46 -0
- 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 +11 -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 +74 -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/i18n/definition-messages.js +1 -1
- 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 +3 -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 +38 -0
- package/dist/index.d.ts +3 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -136
- 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 +203 -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 +132 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +1 -2
- package/dist/item/plan-symbols.js +1 -1
- 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 +390 -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 +48 -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 +36 -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 +74 -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 +29 -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 +72 -0
- package/dist/liquid-line/floorplan.js +1 -1
- package/dist/liquid-line/geometry.js +1 -1
- 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 +24 -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 +45 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +2 -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 +2 -2
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +3 -3
- 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 +45 -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 +56 -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-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-handle.d.ts +9 -0
- package/dist/pipe-segment/continuation-handle.d.ts.map +1 -0
- package/dist/pipe-segment/continuation-handle.js +35 -0
- package/dist/pipe-segment/continuation.d.ts +4 -7
- package/dist/pipe-segment/continuation.d.ts.map +1 -1
- package/dist/pipe-segment/continuation.js +62 -36
- 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 +46 -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 +80 -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 +35 -2
- 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 +124 -179
- 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 +125 -29
- 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 +11 -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 +45 -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/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 +202 -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 +137 -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 +4 -21
- 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 +146 -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 +44 -0
- package/dist/ridge-vent/move-tool.d.ts.map +1 -1
- package/dist/ridge-vent/move-tool.js +5 -4
- package/dist/roof/barrel-panel.d.ts.map +1 -1
- package/dist/roof/barrel-panel.js +2 -2
- 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 +181 -0
- package/dist/roof/definition.js +4 -284
- 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 +112 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +1 -2
- 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.map +1 -1
- package/dist/roof/glazing-controls.js +2 -2
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +4 -3
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +10 -5
- package/dist/roof/tool.d.ts +3 -0
- package/dist/roof/tool.d.ts.map +1 -1
- package/dist/roof/tool.js +56 -170
- 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-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 +303 -0
- package/dist/roof-segment/definition.js +4 -364
- 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 +61 -0
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +2 -2
- package/dist/roof-segment/paint.d.ts +0 -1
- package/dist/roof-segment/paint.d.ts.map +1 -1
- package/dist/roof-segment/paint.js +0 -1
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +32 -34
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +13 -11
- 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 +11 -0
- package/dist/separator/definition.js +4 -37
- 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 +29 -0
- package/dist/separator/floorplan.js +1 -1
- package/dist/separator/renderer.d.ts +2 -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 +3 -5
- package/dist/separator/selection.d.ts.map +1 -1
- package/dist/separator/selection.js +2 -2
- 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/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 +2 -3
- 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/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/opening-documentation.d.ts +1 -1
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +1 -2
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +2 -2
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +2 -3
- 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/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-surface.d.ts.map +1 -1
- package/dist/shared/roof-surface.js +2 -0
- 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-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-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 +153 -0
- package/dist/shelf/definition.js +4 -272
- 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 +124 -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/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 +216 -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 +52 -0
- package/dist/skylight/move-tool.d.ts.map +1 -1
- package/dist/skylight/move-tool.js +7 -5
- package/dist/skylight/panel.js +1 -1
- package/dist/slab/definition.d.ts +289 -20
- 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 +226 -0
- package/dist/slab/definition.js +4 -334
- 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 +96 -0
- package/dist/slab/floorplan.d.ts.map +1 -1
- package/dist/slab/floorplan.js +1 -2
- package/dist/slab/panel.js +2 -2
- 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 +211 -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 +44 -0
- package/dist/solar-panel/move-tool.d.ts.map +1 -1
- package/dist/solar-panel/move-tool.js +7 -5
- 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 +55 -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 +50 -0
- 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 +364 -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 +75 -0
- package/dist/stair/documentation.d.ts.map +1 -1
- package/dist/stair/documentation.js +1 -2
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +1 -2
- package/dist/stair/panel.js +2 -2
- package/dist/stair/plan-entry.d.ts.map +1 -1
- package/dist/stair/plan-entry.js +1 -2
- package/dist/stair/structure-controls.d.ts.map +1 -1
- package/dist/stair/structure-controls.js +2 -2
- 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/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 +16 -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 +37 -0
- package/dist/structural-grid/floorplan.js +1 -1
- 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 +64 -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 +42 -0
- package/dist/turbine-vent/move-tool.d.ts.map +1 -1
- package/dist/turbine-vent/move-tool.js +6 -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 +2 -2
- package/dist/wall/contextual-dimensions.d.ts.map +1 -1
- package/dist/wall/contextual-dimensions.js +1 -2
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -1
- package/dist/wall/curtain-wall-panel.js +2 -2
- 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 +179 -0
- package/dist/wall/definition.js +4 -279
- 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 +105 -0
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +2 -3
- 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 +3 -3
- package/dist/wall/move-shared.js +1 -1
- package/dist/wall/panel-model.d.ts.map +1 -1
- package/dist/wall/panel-model.js +4 -3
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +15 -6
- package/dist/wall/quick-measurement.js +1 -1
- package/dist/wall/rectangle-command.d.ts +1 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -1
- package/dist/wall/rectangle-tool.js +2 -2
- 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/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +138 -36
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +36 -16
- 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 +250 -0
- package/dist/window/definition.js +5 -338
- 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 +89 -0
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +7 -4
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +1 -2
- package/dist/window/mechanism.js +1 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +7 -11
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +5 -2
- 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 +36 -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 +57 -0
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +1 -2
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +2 -2
- package/dist/zone/room-clear-dimensions.d.ts.map +1 -1
- package/dist/zone/room-clear-dimensions.js +1 -2
- package/dist/zone/room-documentation.d.ts +1 -2
- package/dist/zone/room-documentation.d.ts.map +1 -1
- package/dist/zone/room-documentation.js +1 -1
- package/package.json +21 -10
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { getActiveRoofHeight, getPitchFromActiveRoofHeight, getRoofSegmentResizePatch, MAX_ROOF_PITCH, MIN_ROOF_SEGMENT_DIMENSION, snapScalar, } from '@pascal-app/core';
|
|
2
|
+
import { getSegmentGridStep, isGridSnapActive, isMagneticSnapActive, PANEL_MODEL_EXTENSION, } from '@pascal-app/editor';
|
|
3
|
+
import { roofFloorplanAffectedIds } from '../roof/floorplan-overrides.js';
|
|
4
|
+
import { bearingWallThickness, catchRoofSideOnWalls, roofCatchWalls, segmentWallLine, } from '../roof/wall-catch.js';
|
|
5
|
+
import { roofSegmentMoveTarget, roofSegmentResizeAffordance, roofSegmentRotateAffordance, } from './floorplan-affordances.js';
|
|
6
|
+
import { roofSegmentPaint } from './paint.js';
|
|
7
|
+
import { roofSegmentPanelModel } from './panel-model.js';
|
|
8
|
+
import { roofSegmentParametrics } from './parametrics.js';
|
|
9
|
+
const SIDE_HANDLE_OFFSET = 0.3;
|
|
10
|
+
const HEIGHT_HANDLE_OFFSET = 0.3;
|
|
11
|
+
const ROOF_HANDLE_CLEARANCE = 0.15;
|
|
12
|
+
const ROTATE_CORNER_OFFSET = 0.4;
|
|
13
|
+
const ROTATE_RING_OFFSET = 0.08;
|
|
14
|
+
const MIN_ROOF_DIM = MIN_ROOF_SEGMENT_DIMENSION;
|
|
15
|
+
const MIN_WALL_HEIGHT = 0;
|
|
16
|
+
// Clamp used for handle Y placement so arrows stay visible on flat /
|
|
17
|
+
// wall-less segments where `wallHeight ≈ 0` would put them on the floor.
|
|
18
|
+
const MIN_WALL_DISPLAY = 0.3;
|
|
19
|
+
// Pitch is stored in degrees on the schema; same clamp the panel applies.
|
|
20
|
+
const MIN_PITCH = 0;
|
|
21
|
+
const MAX_PITCH = MAX_ROOF_PITCH;
|
|
22
|
+
// Floor-to-peak height of the assembled segment. Pitch drag drives this
|
|
23
|
+
// value directly and back-solves the pitch angle via the slope-frame
|
|
24
|
+
// math in core.
|
|
25
|
+
function getPeakHeight(n) {
|
|
26
|
+
return n.wallHeight + getActiveRoofHeight(n);
|
|
27
|
+
}
|
|
28
|
+
function getSideResizeHandleY(n, localZ) {
|
|
29
|
+
if (n.roofType !== 'shed')
|
|
30
|
+
return Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
|
|
31
|
+
const halfDepth = Math.max(n.depth, MIN_ROOF_DIM) / 2;
|
|
32
|
+
const roofHeight = getActiveRoofHeight(n);
|
|
33
|
+
const t = halfDepth > 0 ? (localZ + halfDepth) / (2 * halfDepth) : 0.5;
|
|
34
|
+
const roofY = n.wallHeight + roofHeight * (1 - Math.max(0, Math.min(1, t)));
|
|
35
|
+
return Math.max(roofY, MIN_WALL_DISPLAY) + ROOF_HANDLE_CLEARANCE;
|
|
36
|
+
}
|
|
37
|
+
function roofOf(n, sceneApi) {
|
|
38
|
+
const roof = n.parentId ? sceneApi?.get(n.parentId) : undefined;
|
|
39
|
+
return roof?.type === 'roof' ? roof : undefined;
|
|
40
|
+
}
|
|
41
|
+
// A dragged side lands on a wall under it in grid and lines, ahead of the grid, as a move does.
|
|
42
|
+
// The arrows leave `gridSnap` off so the catch sees the raw size, and grid it here when nothing
|
|
43
|
+
// catches; Alt skips this hook, so the side follows the cursor.
|
|
44
|
+
function snapSideOntoWalls(axis, side) {
|
|
45
|
+
return (n, value, sceneApi) => {
|
|
46
|
+
const grid = isGridSnapActive();
|
|
47
|
+
if (!grid && !isMagneticSnapActive())
|
|
48
|
+
return value;
|
|
49
|
+
const roof = roofOf(n, sceneApi);
|
|
50
|
+
if (roof) {
|
|
51
|
+
const caught = catchRoofSideOnWalls({
|
|
52
|
+
line: segmentWallLine(roof, n),
|
|
53
|
+
axis,
|
|
54
|
+
side,
|
|
55
|
+
value,
|
|
56
|
+
walls: roofCatchWalls(sceneApi.nodes(), roof.parentId),
|
|
57
|
+
});
|
|
58
|
+
if (caught !== null)
|
|
59
|
+
return caught;
|
|
60
|
+
}
|
|
61
|
+
return grid ? snapScalar(value, getSegmentGridStep()) : value;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Sized onto the walls under it, a segment's gable and heel walls take their thickness; off them,
|
|
65
|
+
// its own (written either way, so a drag back off the walls drops the thickness it previewed).
|
|
66
|
+
function onBearingWalls(n, patch, sceneApi) {
|
|
67
|
+
const roof = roofOf(n, sceneApi);
|
|
68
|
+
if (!(roof && sceneApi))
|
|
69
|
+
return patch;
|
|
70
|
+
const thickness = bearingWallThickness(segmentWallLine(roof, { ...n, ...patch }), roofCatchWalls(sceneApi.nodes(), roof.parentId));
|
|
71
|
+
return { ...patch, wallThickness: thickness ?? n.wallThickness };
|
|
72
|
+
}
|
|
73
|
+
// Width arrow on the +X (right) or -X (left) side. Asymmetric resize:
|
|
74
|
+
// dragging one arrow grows the segment outward from its own edge while
|
|
75
|
+
// the opposite edge stays world-fixed — the same pattern doors use
|
|
76
|
+
// (`door/definition.ts:35-73`). The arrow's chevron points outward
|
|
77
|
+
// (`rotationY: Math.PI` flips the left arrow's chevron to face -X) so
|
|
78
|
+
// you read "this edge is what moves" at a glance.
|
|
79
|
+
//
|
|
80
|
+
// `apply` recomputes `position` so the anchored edge stays at the same
|
|
81
|
+
// world point even when the segment is Y-rotated: project the segment's
|
|
82
|
+
// local +X onto world via (cos r, -sin r), find the anchored edge's
|
|
83
|
+
// world XZ from the pre-drag node, then place the new center half a
|
|
84
|
+
// new-width away from that anchor in the same direction.
|
|
85
|
+
function roofSegmentWidthHandle(side) {
|
|
86
|
+
const sign = side === 'right' ? 1 : -1;
|
|
87
|
+
return {
|
|
88
|
+
kind: 'linear-resize',
|
|
89
|
+
axis: 'x',
|
|
90
|
+
// 'min' = -X edge anchored (right arrow grows the +X edge outward).
|
|
91
|
+
// 'max' = +X edge anchored (left arrow grows the -X edge outward).
|
|
92
|
+
anchor: side === 'right' ? 'min' : 'max',
|
|
93
|
+
min: MIN_ROOF_DIM,
|
|
94
|
+
connectionSnap: snapSideOntoWalls('x', sign),
|
|
95
|
+
currentValue: (n) => n.width,
|
|
96
|
+
apply: (initial, newWidth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'x', sign, newWidth), sceneApi),
|
|
97
|
+
placement: {
|
|
98
|
+
position: (n) => [sign * (n.width / 2 + SIDE_HANDLE_OFFSET), getSideResizeHandleY(n, 0), 0],
|
|
99
|
+
// Flip the left chevron so it points outward toward -X. The
|
|
100
|
+
// generic LinearArrow only auto-orients for axis 'z' (rotates the
|
|
101
|
+
// chevron 90° to face +Z); +X / -X facing is up to the descriptor.
|
|
102
|
+
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Depth arrow on the +Z (front) or -Z (back) side. Asymmetric: the
|
|
107
|
+
// dragged edge follows the pointer, the opposite edge stays world-fixed
|
|
108
|
+
// — mirrors the width-handle pattern (`roofSegmentWidthHandle`). Because
|
|
109
|
+
// segment depth feeds the pitch math via `getActiveRoofHeight`, growing
|
|
110
|
+
// depth at constant pitch ramps the peak up too, which reads as
|
|
111
|
+
// scaling. We hold the peak height constant by back-solving a new pitch
|
|
112
|
+
// for the new depth (same recipe the pitch handle uses, run in
|
|
113
|
+
// reverse). MIN/MAX_PITCH clamps cover degenerate cases where the new
|
|
114
|
+
// depth would demand a negative or beyond-vertical pitch.
|
|
115
|
+
function roofSegmentDepthHandle(side) {
|
|
116
|
+
const sign = side === 'front' ? 1 : -1;
|
|
117
|
+
return {
|
|
118
|
+
kind: 'linear-resize',
|
|
119
|
+
axis: 'z',
|
|
120
|
+
anchor: side === 'front' ? 'min' : 'max',
|
|
121
|
+
min: MIN_ROOF_DIM,
|
|
122
|
+
connectionSnap: snapSideOntoWalls('z', sign),
|
|
123
|
+
currentValue: (n) => n.depth,
|
|
124
|
+
apply: (initial, newDepth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'z', sign, newDepth), sceneApi),
|
|
125
|
+
placement: {
|
|
126
|
+
position: (n) => [
|
|
127
|
+
0,
|
|
128
|
+
getSideResizeHandleY(n, sign * (n.depth / 2)),
|
|
129
|
+
sign * (n.depth / 2 + SIDE_HANDLE_OFFSET),
|
|
130
|
+
],
|
|
131
|
+
// For axis 'z', `LinearArrow` adds -π/2 around Y so the chevron
|
|
132
|
+
// points +Z by default. Flip the back arrow by π so it points -Z.
|
|
133
|
+
rotationY: () => (side === 'front' ? 0 : Math.PI),
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function conicalRoofSegmentRadiusHandle() {
|
|
138
|
+
return {
|
|
139
|
+
kind: 'radial-resize',
|
|
140
|
+
axis: 'x',
|
|
141
|
+
min: MIN_ROOF_DIM / 2,
|
|
142
|
+
currentValue: (n) => n.width / 2,
|
|
143
|
+
apply: (_initial, radius) => ({ width: radius * 2, depth: radius * 2 }),
|
|
144
|
+
placement: {
|
|
145
|
+
position: (n) => [n.width / 2 + SIDE_HANDLE_OFFSET, getSideResizeHandleY(n, 0), 0],
|
|
146
|
+
},
|
|
147
|
+
decoration: {
|
|
148
|
+
kind: 'ring',
|
|
149
|
+
radius: (n) => n.width / 2,
|
|
150
|
+
y: (n) => getSideResizeHandleY(n, 0),
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Wall-height tracker — dashed vertical leader from the floor up to a
|
|
155
|
+
// draggable cube at the wall top, centred on the footprint. Replaces
|
|
156
|
+
// the old -X-side chevron so the wall-top control reads as "the wall is
|
|
157
|
+
// THIS tall" instead of "there's an arrow on the side." Drag math is
|
|
158
|
+
// unchanged: same linear-resize axis='y' / anchor='min' pipeline as
|
|
159
|
+
// every other height handle; the `shape: 'tracker'` flag only swaps the
|
|
160
|
+
// visual. Wall-height clamps to MIN_WALL_DISPLAY for placement so the
|
|
161
|
+
// cube stays grabbable on flat / wall-less segments where the real
|
|
162
|
+
// `wallHeight` is ~0 and the leader would collapse to nothing.
|
|
163
|
+
function roofSegmentWallHeightHandle() {
|
|
164
|
+
return {
|
|
165
|
+
kind: 'linear-resize',
|
|
166
|
+
axis: 'y',
|
|
167
|
+
anchor: 'min',
|
|
168
|
+
shape: 'tracker',
|
|
169
|
+
min: MIN_WALL_HEIGHT,
|
|
170
|
+
gridSnap: true,
|
|
171
|
+
currentValue: (n) => n.wallHeight,
|
|
172
|
+
apply: (_n, newValue) => ({ wallHeight: newValue }),
|
|
173
|
+
placement: {
|
|
174
|
+
position: (n) => [0, Math.max(n.wallHeight, MIN_WALL_DISPLAY), 0],
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// Pitch arrow — drag the peak vertically to steepen / flatten the roof.
|
|
179
|
+
// The handle exposes the floor-to-peak height as its currentValue so the
|
|
180
|
+
// drag delta is a meters value the user can read in the dimension chip;
|
|
181
|
+
// `apply` inverts the slope-frame math (run = primary-slope footprint
|
|
182
|
+
// span, rise fraction depends on roofType) to recover the pitch degrees
|
|
183
|
+
// the new peak corresponds to. Clamped to the schema range [0, 85].
|
|
184
|
+
//
|
|
185
|
+
// Placed at the peak's center so it visually attaches to the ridge for
|
|
186
|
+
// gable / hip / dutch / mansard / gambrel; on shed roofs the geometric
|
|
187
|
+
// peak sits at one edge, so the arrow floats slightly inboard of the
|
|
188
|
+
// ridge — acceptable as a "peak-height" affordance and matches the
|
|
189
|
+
// floorplan-center origin every other handle uses.
|
|
190
|
+
function roofSegmentPitchHandle() {
|
|
191
|
+
return {
|
|
192
|
+
kind: 'linear-resize',
|
|
193
|
+
axis: 'y',
|
|
194
|
+
anchor: 'min',
|
|
195
|
+
min: (n) => n.wallHeight,
|
|
196
|
+
gridSnap: true,
|
|
197
|
+
currentValue: (n) => getPeakHeight(n),
|
|
198
|
+
visible: (n) => !n.managedByParent,
|
|
199
|
+
apply: (initial, newPeakHeight) => {
|
|
200
|
+
const roofHeight = Math.max(0, newPeakHeight - initial.wallHeight);
|
|
201
|
+
if (initial.roofType === 'barrel')
|
|
202
|
+
return { barrelRise: Math.max(0.01, Math.min(initial.depth / 2, roofHeight)) };
|
|
203
|
+
const pitch = getPitchFromActiveRoofHeight({
|
|
204
|
+
roofType: initial.roofType,
|
|
205
|
+
width: initial.width,
|
|
206
|
+
depth: initial.depth,
|
|
207
|
+
roofHeight,
|
|
208
|
+
gambrelLowerWidthRatio: initial.gambrelLowerWidthRatio,
|
|
209
|
+
gambrelLowerHeightRatio: initial.gambrelLowerHeightRatio,
|
|
210
|
+
mansardSteepWidthRatio: initial.mansardSteepWidthRatio,
|
|
211
|
+
mansardSteepHeightRatio: initial.mansardSteepHeightRatio,
|
|
212
|
+
dutchHipWidthRatio: initial.dutchHipWidthRatio,
|
|
213
|
+
dutchHipHeightRatio: initial.dutchHipHeightRatio,
|
|
214
|
+
});
|
|
215
|
+
return { pitch: Math.max(MIN_PITCH, Math.min(MAX_PITCH, pitch)) };
|
|
216
|
+
},
|
|
217
|
+
placement: {
|
|
218
|
+
position: (n) => [0, getPeakHeight(n) + HEIGHT_HANDLE_OFFSET, 0],
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// Whole-segment rotation gizmo — curved two-headed arrow at the +X / +Z
|
|
223
|
+
// corner of the footprint, guide ring traces the corner-diagonal radius
|
|
224
|
+
// on hover / drag. Same pattern as the elevator / column rotate gizmo;
|
|
225
|
+
// roof-segment stores rotation as a scalar (radians) so the apply patch
|
|
226
|
+
// just writes back the new scalar.
|
|
227
|
+
function roofSegmentRotateHandle() {
|
|
228
|
+
return {
|
|
229
|
+
kind: 'arc-resize',
|
|
230
|
+
axis: 'angular',
|
|
231
|
+
shape: 'rotate',
|
|
232
|
+
// Negate the cursor delta to match three.js Y-rotation handedness
|
|
233
|
+
// (cursor atan2 ticks opposite-handed from `rotation-y`).
|
|
234
|
+
apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
|
|
235
|
+
placement: {
|
|
236
|
+
position: (n) => {
|
|
237
|
+
const halfX = n.width / 2;
|
|
238
|
+
const halfZ = n.depth / 2;
|
|
239
|
+
const yMid = Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
|
|
240
|
+
return [halfX, yMid, halfZ + ROTATE_CORNER_OFFSET];
|
|
241
|
+
},
|
|
242
|
+
rotationY: () => -Math.PI / 4,
|
|
243
|
+
},
|
|
244
|
+
decoration: {
|
|
245
|
+
kind: 'ring',
|
|
246
|
+
radius: (n) => Math.hypot(n.width / 2, n.depth / 2) + ROTATE_RING_OFFSET,
|
|
247
|
+
y: (n) => Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2,
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
const roofSegmentHandles = [
|
|
252
|
+
roofSegmentWidthHandle('right'),
|
|
253
|
+
roofSegmentWidthHandle('left'),
|
|
254
|
+
roofSegmentDepthHandle('front'),
|
|
255
|
+
roofSegmentDepthHandle('back'),
|
|
256
|
+
roofSegmentWallHeightHandle(),
|
|
257
|
+
roofSegmentPitchHandle(),
|
|
258
|
+
roofSegmentRotateHandle(),
|
|
259
|
+
];
|
|
260
|
+
const conicalRoofSegmentHandles = [
|
|
261
|
+
conicalRoofSegmentRadiusHandle(),
|
|
262
|
+
roofSegmentWallHeightHandle(),
|
|
263
|
+
roofSegmentPitchHandle(),
|
|
264
|
+
];
|
|
265
|
+
function resolveRoofSegmentHandles(node) {
|
|
266
|
+
if (node.managedByParent)
|
|
267
|
+
return [];
|
|
268
|
+
return node.roofType === 'conical' ? conicalRoofSegmentHandles : roofSegmentHandles;
|
|
269
|
+
}
|
|
270
|
+
export const roofSegmentEditContribution = {
|
|
271
|
+
// Mirrors the parent roof: a body-move resolves the no-angle `polygon`
|
|
272
|
+
// snap context (grid / lines / off), so dragging a segment shows the
|
|
273
|
+
// snapping chip and honours the active mode like every other structural
|
|
274
|
+
// move. Resize / rotate run through their own reshaping scope.
|
|
275
|
+
snapProfile: 'structural',
|
|
276
|
+
extensions: {
|
|
277
|
+
[PANEL_MODEL_EXTENSION]: roofSegmentPanelModel,
|
|
278
|
+
},
|
|
279
|
+
capabilities: {
|
|
280
|
+
paint: roofSegmentPaint,
|
|
281
|
+
},
|
|
282
|
+
// Bespoke move shared with roof / stair / stair-segment via
|
|
283
|
+
// `shared/move-roof-tool` — routed through `MoveTool`'s registry-
|
|
284
|
+
// affordance lookup rather than a hardcoded dispatcher arm.
|
|
285
|
+
affordanceTools: {
|
|
286
|
+
move: () => import('../shared/move-roof-tool.js'),
|
|
287
|
+
},
|
|
288
|
+
parametrics: roofSegmentParametrics,
|
|
289
|
+
handles: resolveRoofSegmentHandles,
|
|
290
|
+
// Its roof draws the outline and creases from it: a live edit rebuilds that roof's plan.
|
|
291
|
+
floorplanAffectedIds: roofFloorplanAffectedIds,
|
|
292
|
+
// Body-move target. The generic Path 2 fallback writes plan coords
|
|
293
|
+
// directly to `position`, which is wrong here because the segment's
|
|
294
|
+
// position is roof-local. `roofSegmentMoveTarget` inverts the parent
|
|
295
|
+
// roof's transform so the segment lands at the world-plan cursor.
|
|
296
|
+
floorplanMoveTarget: roofSegmentMoveTarget,
|
|
297
|
+
// 2D drag affordances for the side resize arrows + corner rotate
|
|
298
|
+
// arrow emitted by `buildRoofSegmentFloorplan`.
|
|
299
|
+
floorplanAffordances: {
|
|
300
|
+
'roof-segment-resize': roofSegmentResizeAffordance,
|
|
301
|
+
'roof-segment-rotate': roofSegmentRotateAffordance,
|
|
302
|
+
},
|
|
303
|
+
};
|
|
@@ -1,364 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { buildRoofSegmentFloorplan } from './floorplan.js';
|
|
6
|
-
import { roofSegmentMoveTarget, roofSegmentResizeAffordance, roofSegmentRotateAffordance, } from './floorplan-affordances.js';
|
|
7
|
-
import { matchRoofSegmentMeasurementFeature, roofSegmentMeasurementFeatures } from './measurement.js';
|
|
8
|
-
import { roofSegmentPaint, roofSegmentSlots } from './paint.js';
|
|
9
|
-
import { roofSegmentPanelModel } from './panel-model.js';
|
|
10
|
-
import { roofSegmentParametrics } from './parametrics.js';
|
|
11
|
-
import { RoofSegmentNode } from './schema.js';
|
|
12
|
-
const SIDE_HANDLE_OFFSET = 0.3;
|
|
13
|
-
const HEIGHT_HANDLE_OFFSET = 0.3;
|
|
14
|
-
const ROOF_HANDLE_CLEARANCE = 0.15;
|
|
15
|
-
const ROTATE_CORNER_OFFSET = 0.4;
|
|
16
|
-
const ROTATE_RING_OFFSET = 0.08;
|
|
17
|
-
const MIN_ROOF_DIM = 1;
|
|
18
|
-
const MIN_WALL_HEIGHT = 0;
|
|
19
|
-
// Clamp used for handle Y placement so arrows stay visible on flat /
|
|
20
|
-
// wall-less segments where `wallHeight ≈ 0` would put them on the floor.
|
|
21
|
-
const MIN_WALL_DISPLAY = 0.3;
|
|
22
|
-
// Pitch is stored in degrees on the schema; same clamp the panel applies.
|
|
23
|
-
const MIN_PITCH = 0;
|
|
24
|
-
const MAX_PITCH = 85;
|
|
25
|
-
// Floor-to-peak height of the assembled segment. Pitch drag drives this
|
|
26
|
-
// value directly and back-solves the pitch angle via the slope-frame
|
|
27
|
-
// math in core.
|
|
28
|
-
function getPeakHeight(n) {
|
|
29
|
-
return n.wallHeight + getActiveRoofHeight(n);
|
|
30
|
-
}
|
|
31
|
-
function getSideResizeHandleY(n, localZ) {
|
|
32
|
-
if (n.roofType !== 'shed')
|
|
33
|
-
return Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
|
|
34
|
-
const halfDepth = Math.max(n.depth, MIN_ROOF_DIM) / 2;
|
|
35
|
-
const roofHeight = getActiveRoofHeight(n);
|
|
36
|
-
const t = halfDepth > 0 ? (localZ + halfDepth) / (2 * halfDepth) : 0.5;
|
|
37
|
-
const roofY = n.wallHeight + roofHeight * (1 - Math.max(0, Math.min(1, t)));
|
|
38
|
-
return Math.max(roofY, MIN_WALL_DISPLAY) + ROOF_HANDLE_CLEARANCE;
|
|
39
|
-
}
|
|
40
|
-
function roofOf(n, sceneApi) {
|
|
41
|
-
const roof = n.parentId ? sceneApi?.get(n.parentId) : undefined;
|
|
42
|
-
return roof?.type === 'roof' ? roof : undefined;
|
|
43
|
-
}
|
|
44
|
-
// A dragged side lands on a wall under it in grid and lines, ahead of the grid, as a move does.
|
|
45
|
-
// The arrows leave `gridSnap` off so the catch sees the raw size, and grid it here when nothing
|
|
46
|
-
// catches; Alt skips this hook, so the side follows the cursor.
|
|
47
|
-
function snapSideOntoWalls(axis, side) {
|
|
48
|
-
return (n, value, sceneApi) => {
|
|
49
|
-
const grid = isGridSnapActive();
|
|
50
|
-
if (!grid && !isMagneticSnapActive())
|
|
51
|
-
return value;
|
|
52
|
-
const roof = roofOf(n, sceneApi);
|
|
53
|
-
if (roof) {
|
|
54
|
-
const caught = catchRoofSideOnWalls({
|
|
55
|
-
line: segmentWallLine(roof, n),
|
|
56
|
-
axis,
|
|
57
|
-
side,
|
|
58
|
-
value,
|
|
59
|
-
walls: roofCatchWalls(sceneApi.nodes(), roof.parentId),
|
|
60
|
-
});
|
|
61
|
-
if (caught !== null)
|
|
62
|
-
return caught;
|
|
63
|
-
}
|
|
64
|
-
return grid ? snapScalar(value, getSegmentGridStep()) : value;
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
// Sized onto the walls under it, a segment's gable and heel walls take their thickness; off them,
|
|
68
|
-
// its own (written either way, so a drag back off the walls drops the thickness it previewed).
|
|
69
|
-
function onBearingWalls(n, patch, sceneApi) {
|
|
70
|
-
const roof = roofOf(n, sceneApi);
|
|
71
|
-
if (!(roof && sceneApi))
|
|
72
|
-
return patch;
|
|
73
|
-
const thickness = bearingWallThickness(segmentWallLine(roof, { ...n, ...patch }), roofCatchWalls(sceneApi.nodes(), roof.parentId));
|
|
74
|
-
return { ...patch, wallThickness: thickness ?? n.wallThickness };
|
|
75
|
-
}
|
|
76
|
-
// Width arrow on the +X (right) or -X (left) side. Asymmetric resize:
|
|
77
|
-
// dragging one arrow grows the segment outward from its own edge while
|
|
78
|
-
// the opposite edge stays world-fixed — the same pattern doors use
|
|
79
|
-
// (`door/definition.ts:35-73`). The arrow's chevron points outward
|
|
80
|
-
// (`rotationY: Math.PI` flips the left arrow's chevron to face -X) so
|
|
81
|
-
// you read "this edge is what moves" at a glance.
|
|
82
|
-
//
|
|
83
|
-
// `apply` recomputes `position` so the anchored edge stays at the same
|
|
84
|
-
// world point even when the segment is Y-rotated: project the segment's
|
|
85
|
-
// local +X onto world via (cos r, -sin r), find the anchored edge's
|
|
86
|
-
// world XZ from the pre-drag node, then place the new center half a
|
|
87
|
-
// new-width away from that anchor in the same direction.
|
|
88
|
-
function roofSegmentWidthHandle(side) {
|
|
89
|
-
const sign = side === 'right' ? 1 : -1;
|
|
90
|
-
return {
|
|
91
|
-
kind: 'linear-resize',
|
|
92
|
-
axis: 'x',
|
|
93
|
-
// 'min' = -X edge anchored (right arrow grows the +X edge outward).
|
|
94
|
-
// 'max' = +X edge anchored (left arrow grows the -X edge outward).
|
|
95
|
-
anchor: side === 'right' ? 'min' : 'max',
|
|
96
|
-
min: MIN_ROOF_DIM,
|
|
97
|
-
connectionSnap: snapSideOntoWalls('x', sign),
|
|
98
|
-
currentValue: (n) => n.width,
|
|
99
|
-
apply: (initial, newWidth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'x', sign, newWidth), sceneApi),
|
|
100
|
-
placement: {
|
|
101
|
-
position: (n) => [sign * (n.width / 2 + SIDE_HANDLE_OFFSET), getSideResizeHandleY(n, 0), 0],
|
|
102
|
-
// Flip the left chevron so it points outward toward -X. The
|
|
103
|
-
// generic LinearArrow only auto-orients for axis 'z' (rotates the
|
|
104
|
-
// chevron 90° to face +Z); +X / -X facing is up to the descriptor.
|
|
105
|
-
rotationY: () => (side === 'right' ? 0 : Math.PI),
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
// Depth arrow on the +Z (front) or -Z (back) side. Asymmetric: the
|
|
110
|
-
// dragged edge follows the pointer, the opposite edge stays world-fixed
|
|
111
|
-
// — mirrors the width-handle pattern (`roofSegmentWidthHandle`). Because
|
|
112
|
-
// segment depth feeds the pitch math via `getActiveRoofHeight`, growing
|
|
113
|
-
// depth at constant pitch ramps the peak up too, which reads as
|
|
114
|
-
// scaling. We hold the peak height constant by back-solving a new pitch
|
|
115
|
-
// for the new depth (same recipe the pitch handle uses, run in
|
|
116
|
-
// reverse). MIN/MAX_PITCH clamps cover degenerate cases where the new
|
|
117
|
-
// depth would demand a negative or beyond-vertical pitch.
|
|
118
|
-
function roofSegmentDepthHandle(side) {
|
|
119
|
-
const sign = side === 'front' ? 1 : -1;
|
|
120
|
-
return {
|
|
121
|
-
kind: 'linear-resize',
|
|
122
|
-
axis: 'z',
|
|
123
|
-
anchor: side === 'front' ? 'min' : 'max',
|
|
124
|
-
min: MIN_ROOF_DIM,
|
|
125
|
-
connectionSnap: snapSideOntoWalls('z', sign),
|
|
126
|
-
currentValue: (n) => n.depth,
|
|
127
|
-
apply: (initial, newDepth, sceneApi) => onBearingWalls(initial, getRoofSegmentResizePatch(initial, 'z', sign, newDepth), sceneApi),
|
|
128
|
-
placement: {
|
|
129
|
-
position: (n) => [
|
|
130
|
-
0,
|
|
131
|
-
getSideResizeHandleY(n, sign * (n.depth / 2)),
|
|
132
|
-
sign * (n.depth / 2 + SIDE_HANDLE_OFFSET),
|
|
133
|
-
],
|
|
134
|
-
// For axis 'z', `LinearArrow` adds -π/2 around Y so the chevron
|
|
135
|
-
// points +Z by default. Flip the back arrow by π so it points -Z.
|
|
136
|
-
rotationY: () => (side === 'front' ? 0 : Math.PI),
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
function conicalRoofSegmentRadiusHandle() {
|
|
141
|
-
return {
|
|
142
|
-
kind: 'radial-resize',
|
|
143
|
-
axis: 'x',
|
|
144
|
-
min: MIN_ROOF_DIM / 2,
|
|
145
|
-
currentValue: (n) => n.width / 2,
|
|
146
|
-
apply: (_initial, radius) => ({ width: radius * 2, depth: radius * 2 }),
|
|
147
|
-
placement: {
|
|
148
|
-
position: (n) => [n.width / 2 + SIDE_HANDLE_OFFSET, getSideResizeHandleY(n, 0), 0],
|
|
149
|
-
},
|
|
150
|
-
decoration: {
|
|
151
|
-
kind: 'ring',
|
|
152
|
-
radius: (n) => n.width / 2,
|
|
153
|
-
y: (n) => getSideResizeHandleY(n, 0),
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
// Wall-height tracker — dashed vertical leader from the floor up to a
|
|
158
|
-
// draggable cube at the wall top, centred on the footprint. Replaces
|
|
159
|
-
// the old -X-side chevron so the wall-top control reads as "the wall is
|
|
160
|
-
// THIS tall" instead of "there's an arrow on the side." Drag math is
|
|
161
|
-
// unchanged: same linear-resize axis='y' / anchor='min' pipeline as
|
|
162
|
-
// every other height handle; the `shape: 'tracker'` flag only swaps the
|
|
163
|
-
// visual. Wall-height clamps to MIN_WALL_DISPLAY for placement so the
|
|
164
|
-
// cube stays grabbable on flat / wall-less segments where the real
|
|
165
|
-
// `wallHeight` is ~0 and the leader would collapse to nothing.
|
|
166
|
-
function roofSegmentWallHeightHandle() {
|
|
167
|
-
return {
|
|
168
|
-
kind: 'linear-resize',
|
|
169
|
-
axis: 'y',
|
|
170
|
-
anchor: 'min',
|
|
171
|
-
shape: 'tracker',
|
|
172
|
-
min: MIN_WALL_HEIGHT,
|
|
173
|
-
gridSnap: true,
|
|
174
|
-
currentValue: (n) => n.wallHeight,
|
|
175
|
-
apply: (_n, newValue) => ({ wallHeight: newValue }),
|
|
176
|
-
placement: {
|
|
177
|
-
position: (n) => [0, Math.max(n.wallHeight, MIN_WALL_DISPLAY), 0],
|
|
178
|
-
},
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
// Pitch arrow — drag the peak vertically to steepen / flatten the roof.
|
|
182
|
-
// The handle exposes the floor-to-peak height as its currentValue so the
|
|
183
|
-
// drag delta is a meters value the user can read in the dimension chip;
|
|
184
|
-
// `apply` inverts the slope-frame math (run = primary-slope footprint
|
|
185
|
-
// span, rise fraction depends on roofType) to recover the pitch degrees
|
|
186
|
-
// the new peak corresponds to. Clamped to the schema range [0, 85].
|
|
187
|
-
//
|
|
188
|
-
// Placed at the peak's center so it visually attaches to the ridge for
|
|
189
|
-
// gable / hip / dutch / mansard / gambrel; on shed roofs the geometric
|
|
190
|
-
// peak sits at one edge, so the arrow floats slightly inboard of the
|
|
191
|
-
// ridge — acceptable as a "peak-height" affordance and matches the
|
|
192
|
-
// floorplan-center origin every other handle uses.
|
|
193
|
-
function roofSegmentPitchHandle() {
|
|
194
|
-
return {
|
|
195
|
-
kind: 'linear-resize',
|
|
196
|
-
axis: 'y',
|
|
197
|
-
anchor: 'min',
|
|
198
|
-
min: (n) => n.wallHeight,
|
|
199
|
-
gridSnap: true,
|
|
200
|
-
currentValue: (n) => getPeakHeight(n),
|
|
201
|
-
visible: (n) => !n.managedByParent,
|
|
202
|
-
apply: (initial, newPeakHeight) => {
|
|
203
|
-
const roofHeight = Math.max(0, newPeakHeight - initial.wallHeight);
|
|
204
|
-
if (initial.roofType === 'barrel')
|
|
205
|
-
return { barrelRise: Math.max(0.01, Math.min(initial.depth / 2, roofHeight)) };
|
|
206
|
-
const pitch = getPitchFromActiveRoofHeight({
|
|
207
|
-
roofType: initial.roofType,
|
|
208
|
-
width: initial.width,
|
|
209
|
-
depth: initial.depth,
|
|
210
|
-
roofHeight,
|
|
211
|
-
gambrelLowerWidthRatio: initial.gambrelLowerWidthRatio,
|
|
212
|
-
gambrelLowerHeightRatio: initial.gambrelLowerHeightRatio,
|
|
213
|
-
mansardSteepWidthRatio: initial.mansardSteepWidthRatio,
|
|
214
|
-
mansardSteepHeightRatio: initial.mansardSteepHeightRatio,
|
|
215
|
-
dutchHipWidthRatio: initial.dutchHipWidthRatio,
|
|
216
|
-
dutchHipHeightRatio: initial.dutchHipHeightRatio,
|
|
217
|
-
});
|
|
218
|
-
return { pitch: Math.max(MIN_PITCH, Math.min(MAX_PITCH, pitch)) };
|
|
219
|
-
},
|
|
220
|
-
placement: {
|
|
221
|
-
position: (n) => [0, getPeakHeight(n) + HEIGHT_HANDLE_OFFSET, 0],
|
|
222
|
-
},
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
// Whole-segment rotation gizmo — curved two-headed arrow at the +X / +Z
|
|
226
|
-
// corner of the footprint, guide ring traces the corner-diagonal radius
|
|
227
|
-
// on hover / drag. Same pattern as the elevator / column rotate gizmo;
|
|
228
|
-
// roof-segment stores rotation as a scalar (radians) so the apply patch
|
|
229
|
-
// just writes back the new scalar.
|
|
230
|
-
function roofSegmentRotateHandle() {
|
|
231
|
-
return {
|
|
232
|
-
kind: 'arc-resize',
|
|
233
|
-
axis: 'angular',
|
|
234
|
-
shape: 'rotate',
|
|
235
|
-
// Negate the cursor delta to match three.js Y-rotation handedness
|
|
236
|
-
// (cursor atan2 ticks opposite-handed from `rotation-y`).
|
|
237
|
-
apply: (initial, delta) => ({ rotation: (initial.rotation ?? 0) - delta }),
|
|
238
|
-
placement: {
|
|
239
|
-
position: (n) => {
|
|
240
|
-
const halfX = n.width / 2;
|
|
241
|
-
const halfZ = n.depth / 2;
|
|
242
|
-
const yMid = Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2;
|
|
243
|
-
return [halfX, yMid, halfZ + ROTATE_CORNER_OFFSET];
|
|
244
|
-
},
|
|
245
|
-
rotationY: () => -Math.PI / 4,
|
|
246
|
-
},
|
|
247
|
-
decoration: {
|
|
248
|
-
kind: 'ring',
|
|
249
|
-
radius: (n) => Math.hypot(n.width / 2, n.depth / 2) + ROTATE_RING_OFFSET,
|
|
250
|
-
y: (n) => Math.max(n.wallHeight, MIN_WALL_DISPLAY) / 2,
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
const roofSegmentHandles = [
|
|
255
|
-
roofSegmentWidthHandle('right'),
|
|
256
|
-
roofSegmentWidthHandle('left'),
|
|
257
|
-
roofSegmentDepthHandle('front'),
|
|
258
|
-
roofSegmentDepthHandle('back'),
|
|
259
|
-
roofSegmentWallHeightHandle(),
|
|
260
|
-
roofSegmentPitchHandle(),
|
|
261
|
-
roofSegmentRotateHandle(),
|
|
262
|
-
];
|
|
263
|
-
const conicalRoofSegmentHandles = [
|
|
264
|
-
conicalRoofSegmentRadiusHandle(),
|
|
265
|
-
roofSegmentWallHeightHandle(),
|
|
266
|
-
roofSegmentPitchHandle(),
|
|
267
|
-
];
|
|
268
|
-
function resolveRoofSegmentHandles(node) {
|
|
269
|
-
if (node.managedByParent)
|
|
270
|
-
return [];
|
|
271
|
-
return node.roofType === 'conical' ? conicalRoofSegmentHandles : roofSegmentHandles;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Roof segment — Stage A. Child of a roof node, owns the per-segment
|
|
275
|
-
* polygon + pitch. Geometry is generated by `RoofSystem` (registered
|
|
276
|
-
* under the parent roof's `def.system`), so the segment kind itself
|
|
277
|
-
* only needs a renderer wrap.
|
|
278
|
-
*/
|
|
279
|
-
export const roofSegmentDefinition = {
|
|
280
|
-
kind: 'roof-segment',
|
|
281
|
-
schemaVersion: 7,
|
|
282
|
-
schema: RoofSegmentNode,
|
|
283
|
-
category: 'structure',
|
|
284
|
-
surfaceRole: 'roof',
|
|
285
|
-
// Mirrors the parent roof: a body-move resolves the no-angle `polygon`
|
|
286
|
-
// snap context (grid / lines / off), so dragging a segment shows the
|
|
287
|
-
// snapping chip and honours the active mode like every other structural
|
|
288
|
-
// move. Resize / rotate run through their own reshaping scope.
|
|
289
|
-
snapProfile: 'structural',
|
|
290
|
-
extensions: {
|
|
291
|
-
[PANEL_MODEL_EXTENSION]: roofSegmentPanelModel,
|
|
292
|
-
},
|
|
293
|
-
defaults: () => {
|
|
294
|
-
const stub = RoofSegmentNodeSchema.parse({
|
|
295
|
-
id: 'roof-segment_default',
|
|
296
|
-
type: 'roof-segment',
|
|
297
|
-
});
|
|
298
|
-
const { id: _id, type: _type, ...rest } = stub;
|
|
299
|
-
return rest;
|
|
300
|
-
},
|
|
301
|
-
capabilities: {
|
|
302
|
-
exterior: true,
|
|
303
|
-
revealOnEdit: [
|
|
304
|
-
'roofType',
|
|
305
|
-
'width',
|
|
306
|
-
'depth',
|
|
307
|
-
'wallHeight',
|
|
308
|
-
'pitch',
|
|
309
|
-
'overhang',
|
|
310
|
-
'wallThickness',
|
|
311
|
-
'deckThickness',
|
|
312
|
-
'barrelRise',
|
|
313
|
-
'barrelSegments',
|
|
314
|
-
'roofSystem',
|
|
315
|
-
'glazing',
|
|
316
|
-
],
|
|
317
|
-
paint: roofSegmentPaint,
|
|
318
|
-
slots: (node) => roofSegmentSlots(node),
|
|
319
|
-
selectable: { hitVolume: 'bbox' },
|
|
320
|
-
duplicable: true,
|
|
321
|
-
deletable: true,
|
|
322
|
-
},
|
|
323
|
-
// Bespoke move shared with roof / stair / stair-segment via
|
|
324
|
-
// `shared/move-roof-tool` — routed through `MoveTool`'s registry-
|
|
325
|
-
// affordance lookup rather than a hardcoded dispatcher arm.
|
|
326
|
-
affordanceTools: {
|
|
327
|
-
move: () => import('../shared/move-roof-tool.js'),
|
|
328
|
-
},
|
|
329
|
-
parametrics: roofSegmentParametrics,
|
|
330
|
-
handles: resolveRoofSegmentHandles,
|
|
331
|
-
rendersChildren: false,
|
|
332
|
-
renderer: {
|
|
333
|
-
kind: 'parametric',
|
|
334
|
-
module: () => import('./renderer.js'),
|
|
335
|
-
},
|
|
336
|
-
floorplan: buildRoofSegmentFloorplan,
|
|
337
|
-
// Its roof draws the outline and creases from it: a live edit rebuilds that roof's plan.
|
|
338
|
-
floorplanAffectedIds: roofFloorplanAffectedIds,
|
|
339
|
-
measurement: {
|
|
340
|
-
features: (node, ctx) => roofSegmentMeasurementFeatures(node, ctx.parent?.type === 'roof' ? ctx.parent : null),
|
|
341
|
-
match: (node, ctx, point, maxDistance) => matchRoofSegmentMeasurementFeature(node, ctx.parent?.type === 'roof' ? ctx.parent : null, point, maxDistance),
|
|
342
|
-
},
|
|
343
|
-
// Body-move target. The generic Path 2 fallback writes plan coords
|
|
344
|
-
// directly to `position`, which is wrong here because the segment's
|
|
345
|
-
// position is roof-local. `roofSegmentMoveTarget` inverts the parent
|
|
346
|
-
// roof's transform so the segment lands at the world-plan cursor.
|
|
347
|
-
floorplanMoveTarget: roofSegmentMoveTarget,
|
|
348
|
-
// 2D drag affordances for the side resize arrows + corner rotate
|
|
349
|
-
// arrow emitted by `buildRoofSegmentFloorplan`.
|
|
350
|
-
floorplanAffordances: {
|
|
351
|
-
'roof-segment-resize': roofSegmentResizeAffordance,
|
|
352
|
-
'roof-segment-rotate': roofSegmentRotateAffordance,
|
|
353
|
-
},
|
|
354
|
-
presentation: {
|
|
355
|
-
label: 'Roof Segment',
|
|
356
|
-
description: 'A single pitched plane of a parent roof.',
|
|
357
|
-
icon: { kind: 'url', src: '/icons/roof.webp' },
|
|
358
|
-
paletteSection: 'structure',
|
|
359
|
-
paletteOrder: 101,
|
|
360
|
-
},
|
|
361
|
-
mcp: {
|
|
362
|
-
description: 'A single roof segment with polygon footprint + pitch.',
|
|
363
|
-
},
|
|
364
|
-
};
|
|
1
|
+
import { composeNodeDefinition } from '../definition-contributions.js';
|
|
2
|
+
import { roofSegmentEditContribution } from './definition.edit.js';
|
|
3
|
+
import { roofSegmentRenderDefinition } from './definition.render.js';
|
|
4
|
+
export const roofSegmentDefinition = composeNodeDefinition(roofSegmentRenderDefinition, roofSegmentEditContribution);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { NodeRenderDefinition } from '../definition-contributions.js';
|
|
2
|
+
import { RoofSegmentNode } from './schema.js';
|
|
3
|
+
export declare const roofSegmentRenderDefinition: NodeRenderDefinition<typeof RoofSegmentNode> & {
|
|
4
|
+
kind: 'roof-segment';
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=definition.render.d.ts.map
|