@pascal-app/nodes 0.1.1 → 1.0.0-beta.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 +34 -0
- package/dist/building/definition.js +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +809 -72
- package/dist/cabinet/geometry.d.ts.map +1 -1
- package/dist/cabinet/geometry.js +4 -0
- package/dist/cabinet/move-frame.js +3 -3
- package/dist/cabinet/panel.d.ts.map +1 -1
- package/dist/cabinet/panel.js +1 -0
- package/dist/cabinet/placement-snap.d.ts +8 -0
- package/dist/cabinet/placement-snap.d.ts.map +1 -0
- package/dist/cabinet/placement-snap.js +19 -0
- package/dist/cabinet/presets.js +8 -8
- package/dist/cabinet/quick-actions.d.ts.map +1 -1
- package/dist/cabinet/quick-actions.js +9 -3
- package/dist/cabinet/resize-limits.d.ts +11 -0
- package/dist/cabinet/resize-limits.d.ts.map +1 -0
- package/dist/cabinet/resize-limits.js +22 -0
- package/dist/cabinet/run-layout.d.ts +8 -2
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +59 -7
- package/dist/cabinet/run-ops.d.ts +44 -3
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/run-ops.js +646 -110
- package/dist/cabinet/run-panel.d.ts +2 -1
- package/dist/cabinet/run-panel.d.ts.map +1 -1
- package/dist/cabinet/run-panel.js +38 -4
- package/dist/cabinet/stack-transitions.js +4 -4
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +95 -17
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +2 -6
- package/dist/ceiling/boundary-editor.d.ts.map +1 -1
- package/dist/ceiling/boundary-editor.js +2 -2
- package/dist/ceiling/definition.d.ts +1 -1
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +36 -5
- package/dist/ceiling/floorplan-affordances.d.ts +4 -4
- package/dist/ceiling/floorplan-move.d.ts +4 -4
- package/dist/ceiling/floorplan-move.d.ts.map +1 -1
- package/dist/ceiling/floorplan-move.js +5 -4
- package/dist/ceiling/hole-editor.d.ts.map +1 -1
- package/dist/ceiling/hole-editor.js +2 -2
- package/dist/ceiling/move-tool.d.ts.map +1 -1
- package/dist/ceiling/move-tool.js +4 -3
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +65 -3
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +6 -2
- package/dist/ceiling/tool.d.ts.map +1 -1
- package/dist/ceiling/tool.js +12 -1
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- package/dist/chimney/tool.d.ts.map +1 -1
- package/dist/chimney/tool.js +16 -1
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +14 -2
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +19 -14
- package/dist/column/floorplan-move.d.ts.map +1 -1
- package/dist/column/floorplan-move.js +7 -2
- package/dist/column/floorplan.d.ts +9 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +59 -4
- package/dist/column/tool.d.ts.map +1 -1
- package/dist/column/tool.js +33 -7
- package/dist/construction-dimension/definition.d.ts +4 -0
- package/dist/construction-dimension/definition.d.ts.map +1 -0
- package/dist/construction-dimension/definition.js +83 -0
- package/dist/construction-dimension/drawing-coordination.d.ts +7 -0
- package/dist/construction-dimension/drawing-coordination.d.ts.map +1 -0
- package/dist/construction-dimension/drawing-coordination.js +54 -0
- package/dist/construction-dimension/floorplan-affordances.d.ts +4 -0
- package/dist/construction-dimension/floorplan-affordances.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan-affordances.js +114 -0
- package/dist/construction-dimension/floorplan-tool.d.ts +21 -0
- package/dist/construction-dimension/floorplan-tool.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan-tool.js +557 -0
- package/dist/construction-dimension/floorplan.d.ts +3 -0
- package/dist/construction-dimension/floorplan.d.ts.map +1 -0
- package/dist/construction-dimension/floorplan.js +457 -0
- package/dist/construction-dimension/geometry.d.ts +31 -0
- package/dist/construction-dimension/geometry.d.ts.map +1 -0
- package/dist/construction-dimension/geometry.js +144 -0
- package/dist/construction-dimension/index.d.ts +4 -0
- package/dist/construction-dimension/index.d.ts.map +1 -0
- package/dist/construction-dimension/index.js +3 -0
- package/dist/construction-dimension/panel.d.ts +2 -0
- package/dist/construction-dimension/panel.d.ts.map +1 -0
- package/dist/construction-dimension/panel.js +128 -0
- package/dist/construction-dimension/parametrics.d.ts +3 -0
- package/dist/construction-dimension/parametrics.d.ts.map +1 -0
- package/dist/construction-dimension/parametrics.js +4 -0
- package/dist/construction-dimension/schema.d.ts +2 -0
- package/dist/construction-dimension/schema.d.ts.map +1 -0
- package/dist/construction-dimension/schema.js +1 -0
- package/dist/door/contextual-dimensions.d.ts +3 -0
- package/dist/door/contextual-dimensions.d.ts.map +1 -0
- package/dist/door/contextual-dimensions.js +7 -0
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +13 -8
- package/dist/door/floorplan-affordances.d.ts +2 -5
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +9 -18
- package/dist/door/floorplan.d.ts +3 -4
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +88 -6
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +2 -2
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +3 -1
- package/dist/door/schema.d.ts +1 -1
- package/dist/door/schema.d.ts.map +1 -1
- package/dist/door/schema.js +1 -1
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +63 -6
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -0
- package/dist/dormer/tool.d.ts.map +1 -1
- package/dist/dormer/tool.js +23 -1
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +20 -9
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +9 -6
- package/dist/elevator/floorplan-affordances.d.ts +2 -6
- package/dist/elevator/floorplan-affordances.d.ts.map +1 -1
- package/dist/elevator/floorplan-affordances.js +13 -12
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
- package/dist/fence/actions/move-endpoint.js +29 -1
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +67 -14
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +48 -11
- package/dist/fence/floorplan-move.d.ts.map +1 -1
- package/dist/fence/floorplan-move.js +38 -3
- package/dist/fence/geometry.d.ts.map +1 -1
- package/dist/fence/geometry.js +9 -1
- package/dist/fence/lift.d.ts +15 -0
- package/dist/fence/lift.d.ts.map +1 -0
- package/dist/fence/lift.js +23 -0
- package/dist/fence/move-tool.d.ts.map +1 -1
- package/dist/fence/move-tool.js +25 -5
- package/dist/fence/system.d.ts +3 -0
- package/dist/fence/system.d.ts.map +1 -0
- package/dist/fence/system.js +41 -0
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +103 -32
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +7 -1
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +50 -43
- package/dist/item/floorplan.d.ts +1 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +49 -0
- package/dist/item/renderer.d.ts +3 -0
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +96 -8
- package/dist/level/definition.d.ts.map +1 -1
- package/dist/level/definition.js +7 -3
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +5 -1
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +7 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +5 -0
- package/dist/measurement/floorplan.d.ts.map +1 -1
- package/dist/measurement/floorplan.js +11 -10
- package/dist/measurement/index.d.ts +1 -1
- package/dist/measurement/index.d.ts.map +1 -1
- package/dist/measurement/index.js +1 -1
- package/dist/measurement/resolve.d.ts +5 -0
- package/dist/measurement/resolve.d.ts.map +1 -1
- package/dist/measurement/resolve.js +2 -2
- package/dist/measurement/surface-query.js +5 -5
- package/dist/measurement/tool.d.ts +6 -1
- package/dist/measurement/tool.d.ts.map +1 -1
- package/dist/measurement/tool.js +7 -11
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +22 -19
- package/dist/roof-segment/floorplan-affordances.d.ts.map +1 -1
- package/dist/roof-segment/floorplan-affordances.js +14 -8
- package/dist/shared/construction-dimension-standards.d.ts +34 -0
- package/dist/shared/construction-dimension-standards.d.ts.map +1 -0
- package/dist/shared/construction-dimension-standards.js +18 -0
- package/dist/shared/construction-length.d.ts +10 -0
- package/dist/shared/construction-length.d.ts.map +1 -0
- package/dist/shared/construction-length.js +57 -0
- package/dist/shared/dimension-string.d.ts +20 -0
- package/dist/shared/dimension-string.d.ts.map +1 -0
- package/dist/shared/dimension-string.js +19 -0
- package/dist/shared/draft-axis-guides.d.ts +36 -0
- package/dist/shared/draft-axis-guides.d.ts.map +1 -0
- package/dist/shared/draft-axis-guides.js +107 -0
- package/dist/shared/move-roof-tool.d.ts.map +1 -1
- package/dist/shared/move-roof-tool.js +17 -3
- package/dist/shared/opening-documentation-fields.d.ts +16 -0
- package/dist/shared/opening-documentation-fields.d.ts.map +1 -0
- package/dist/shared/opening-documentation-fields.js +54 -0
- package/dist/shared/opening-documentation.d.ts +47 -0
- package/dist/shared/opening-documentation.d.ts.map +1 -0
- package/dist/shared/opening-documentation.js +300 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +3 -2
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +14 -5
- package/dist/shared/wall-opening-ceiling.d.ts +30 -0
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -0
- package/dist/shared/wall-opening-ceiling.js +29 -0
- package/dist/shelf/floorplan-affordances.d.ts.map +1 -1
- package/dist/shelf/floorplan-affordances.js +10 -5
- package/dist/shelf/floorplan-move.d.ts +2 -16
- package/dist/shelf/floorplan-move.d.ts.map +1 -1
- package/dist/shelf/floorplan-move.js +19 -40
- package/dist/shelf/tool.d.ts.map +1 -1
- package/dist/shelf/tool.js +8 -3
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
- package/dist/site/recessed-slab-ground-holes.js +1 -4
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +118 -28
- package/dist/site/terrain-drape.d.ts +91 -0
- package/dist/site/terrain-drape.d.ts.map +1 -0
- package/dist/site/terrain-drape.js +205 -0
- package/dist/site/terrain-geometry.d.ts +131 -0
- package/dist/site/terrain-geometry.d.ts.map +1 -0
- package/dist/site/terrain-geometry.js +259 -0
- package/dist/site/terrain-mesh.d.ts +49 -0
- package/dist/site/terrain-mesh.d.ts.map +1 -0
- package/dist/site/terrain-mesh.js +122 -0
- package/dist/site/terrain-renderer.d.ts +28 -0
- package/dist/site/terrain-renderer.d.ts.map +1 -0
- package/dist/site/terrain-renderer.js +69 -0
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- package/dist/skylight/tool.d.ts.map +1 -1
- package/dist/skylight/tool.js +16 -1
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +87 -10
- package/dist/slab/elevation-limit.d.ts +43 -0
- package/dist/slab/elevation-limit.d.ts.map +1 -0
- package/dist/slab/elevation-limit.js +124 -0
- package/dist/slab/floorplan-affordances.d.ts +16 -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 +98 -5
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +82 -4
- package/dist/slab/parametrics.d.ts +1 -1
- package/dist/slab/parametrics.d.ts.map +1 -1
- package/dist/slab/parametrics.js +13 -1
- package/dist/slab/placement-ownership.d.ts +3 -0
- package/dist/slab/placement-ownership.d.ts.map +1 -0
- package/dist/slab/placement-ownership.js +3 -0
- package/dist/slab/quick-measurement.d.ts.map +1 -1
- package/dist/slab/quick-measurement.js +3 -2
- package/dist/slab/system.d.ts.map +1 -1
- package/dist/slab/system.js +14 -4
- package/dist/slab/tool.d.ts.map +1 -1
- package/dist/slab/tool.js +81 -23
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/solar-panel/tool.d.ts.map +1 -1
- package/dist/solar-panel/tool.js +17 -1
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- package/dist/spawn/floorplan-affordances.d.ts.map +1 -1
- package/dist/spawn/floorplan-affordances.js +7 -4
- package/dist/spawn/floorplan-move.d.ts.map +1 -1
- package/dist/spawn/floorplan-move.js +8 -6
- package/dist/spawn/renderer.d.ts +4 -0
- package/dist/spawn/renderer.d.ts.map +1 -1
- package/dist/spawn/renderer.js +32 -18
- package/dist/spawn/tool.d.ts +2 -2
- package/dist/spawn/tool.d.ts.map +1 -1
- package/dist/spawn/tool.js +78 -11
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +15 -7
- package/dist/stair/destination.d.ts +16 -0
- package/dist/stair/destination.d.ts.map +1 -0
- package/dist/stair/destination.js +24 -0
- package/dist/stair/documentation.d.ts +8 -0
- package/dist/stair/documentation.d.ts.map +1 -0
- package/dist/stair/documentation.js +245 -0
- package/dist/stair/floor-stack.d.ts.map +1 -1
- package/dist/stair/floor-stack.js +38 -0
- package/dist/stair/floorplan-affordances.d.ts.map +1 -1
- package/dist/stair/floorplan-affordances.js +28 -9
- package/dist/stair/floorplan-move.d.ts +3 -5
- package/dist/stair/floorplan-move.d.ts.map +1 -1
- package/dist/stair/floorplan-move.js +14 -16
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +27 -14
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +35 -2
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +4 -3
- package/dist/structural-grid/coordination.d.ts +16 -0
- package/dist/structural-grid/coordination.d.ts.map +1 -0
- package/dist/structural-grid/coordination.js +105 -0
- package/dist/structural-grid/definition.d.ts +4 -0
- package/dist/structural-grid/definition.d.ts.map +1 -0
- package/dist/structural-grid/definition.js +51 -0
- package/dist/structural-grid/floorplan-tool.d.ts +16 -0
- package/dist/structural-grid/floorplan-tool.d.ts.map +1 -0
- package/dist/structural-grid/floorplan-tool.js +183 -0
- package/dist/structural-grid/floorplan.d.ts +3 -0
- package/dist/structural-grid/floorplan.d.ts.map +1 -0
- package/dist/structural-grid/floorplan.js +61 -0
- package/dist/structural-grid/index.d.ts +2 -0
- package/dist/structural-grid/index.d.ts.map +1 -0
- package/dist/structural-grid/index.js +1 -0
- package/dist/structural-grid/schema.d.ts +2 -0
- package/dist/structural-grid/schema.d.ts.map +1 -0
- package/dist/structural-grid/schema.js +1 -0
- package/dist/wall/construction-dimensions.d.ts +32 -0
- package/dist/wall/construction-dimensions.d.ts.map +1 -0
- package/dist/wall/construction-dimensions.js +1031 -0
- package/dist/wall/contextual-dimensions.d.ts +13 -0
- package/dist/wall/contextual-dimensions.d.ts.map +1 -0
- package/dist/wall/contextual-dimensions.js +221 -0
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +20 -1
- package/dist/wall/floorplan-affordances.d.ts.map +1 -1
- package/dist/wall/floorplan-affordances.js +23 -8
- package/dist/wall/floorplan-overrides.d.ts +9 -6
- package/dist/wall/floorplan-overrides.d.ts.map +1 -1
- package/dist/wall/floorplan-overrides.js +20 -11
- package/dist/wall/floorplan.d.ts +12 -3
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +121 -79
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +17 -4
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +74 -27
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +3 -2
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +15 -3
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +10 -6
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +32 -5
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +2 -0
- package/dist/wall/preview.d.ts +8 -0
- package/dist/wall/preview.d.ts.map +1 -0
- package/dist/wall/preview.js +39 -0
- package/dist/wall/quick-measurement.d.ts.map +1 -1
- package/dist/wall/quick-measurement.js +3 -2
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +7 -5
- package/dist/wall/system.d.ts +1 -1
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +37 -2
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +148 -96
- package/dist/wall/treatment-level-data.d.ts +14 -0
- package/dist/wall/treatment-level-data.d.ts.map +1 -0
- package/dist/wall/treatment-level-data.js +31 -0
- package/dist/wall/treatments.d.ts +8 -2
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +58 -15
- package/dist/window/contextual-dimensions.d.ts +3 -0
- package/dist/window/contextual-dimensions.d.ts.map +1 -0
- package/dist/window/contextual-dimensions.js +7 -0
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +15 -10
- package/dist/window/floorplan-affordances.d.ts +2 -5
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +9 -15
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +1 -1
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +7 -1
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +3 -3
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +4 -1
- package/dist/window/schema.d.ts +1 -1
- package/dist/window/schema.d.ts.map +1 -1
- package/dist/window/schema.js +1 -1
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +64 -7
- package/dist/window/window-math.d.ts +7 -3
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +8 -3
- package/dist/zone/contextual-dimensions.d.ts +3 -0
- package/dist/zone/contextual-dimensions.d.ts.map +1 -0
- package/dist/zone/contextual-dimensions.js +43 -0
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +9 -1
- package/dist/zone/floorplan-affordances.d.ts +36 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +59 -3
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +48 -4
- package/dist/zone/room-clear-dimensions.d.ts +3 -0
- package/dist/zone/room-clear-dimensions.d.ts.map +1 -0
- package/dist/zone/room-clear-dimensions.js +406 -0
- package/dist/zone/room-documentation.d.ts +11 -0
- package/dist/zone/room-documentation.d.ts.map +1 -0
- package/dist/zone/room-documentation.js +97 -0
- package/package.json +7 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { snapScalar, useScene, } from '@pascal-app/core';
|
|
2
|
-
import { getSegmentGridStep } from '@pascal-app/editor';
|
|
1
|
+
import { snapScalar, useLiveNodeOverrides, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { getSegmentGridStep, isAngleSnapActive } from '@pascal-app/editor';
|
|
3
3
|
import { createFloorplanCursorResolver } from '../shared/floorplan-cursor';
|
|
4
4
|
import { rotateAffordanceDelta } from '../shared/rotate-affordance';
|
|
5
5
|
const MIN_ROOF_DIM = 1;
|
|
@@ -67,14 +67,16 @@ export const roofSegmentResizeAffordance = {
|
|
|
67
67
|
const snappedValue = step > 0 ? snapScalar(rawValue, step) : rawValue;
|
|
68
68
|
const newValue = Math.max(MIN_ROOF_DIM, snappedValue);
|
|
69
69
|
lastValue = newValue;
|
|
70
|
-
|
|
70
|
+
useLiveNodeOverrides
|
|
71
71
|
.getState()
|
|
72
|
-
.
|
|
72
|
+
.set(segmentId, axis === 'x' ? { width: newValue } : { depth: newValue });
|
|
73
|
+
useScene.getState().markDirty(segmentId);
|
|
73
74
|
},
|
|
74
75
|
canCommit() {
|
|
75
76
|
return true;
|
|
76
77
|
},
|
|
77
78
|
commit() {
|
|
79
|
+
useLiveNodeOverrides.getState().clear(segmentId);
|
|
78
80
|
useScene
|
|
79
81
|
.getState()
|
|
80
82
|
.updateNode(segmentId, axis === 'x' ? { width: lastValue } : { depth: lastValue });
|
|
@@ -99,20 +101,22 @@ export const roofSegmentRotateAffordance = {
|
|
|
99
101
|
let lastRotation = initialRotation;
|
|
100
102
|
return {
|
|
101
103
|
affectedIds: [segmentId],
|
|
102
|
-
apply({ planPoint
|
|
104
|
+
apply({ planPoint }) {
|
|
103
105
|
const delta = rotateAffordanceDelta({
|
|
104
106
|
center: [cx, cz],
|
|
105
107
|
initialAngle,
|
|
106
108
|
planPoint,
|
|
107
|
-
free:
|
|
109
|
+
free: !isAngleSnapActive(),
|
|
108
110
|
});
|
|
109
111
|
lastRotation = initialRotation - delta;
|
|
110
|
-
|
|
112
|
+
useLiveNodeOverrides.getState().set(segmentId, { rotation: lastRotation });
|
|
113
|
+
useScene.getState().markDirty(segmentId);
|
|
111
114
|
},
|
|
112
115
|
canCommit() {
|
|
113
116
|
return true;
|
|
114
117
|
},
|
|
115
118
|
commit() {
|
|
119
|
+
useLiveNodeOverrides.getState().clear(segmentId);
|
|
116
120
|
useScene.getState().updateNode(segmentId, { rotation: lastRotation });
|
|
117
121
|
},
|
|
118
122
|
};
|
|
@@ -158,12 +162,14 @@ export const roofSegmentMoveTarget = ({ node, nodes }) => {
|
|
|
158
162
|
let localX = dx * cosRoof + dz * sinRoof;
|
|
159
163
|
let localZ = -dx * sinRoof + dz * cosRoof;
|
|
160
164
|
lastLocal = [localX, initialY, localZ];
|
|
161
|
-
|
|
165
|
+
useLiveNodeOverrides.getState().set(segmentId, { position: lastLocal });
|
|
166
|
+
useScene.getState().markDirty(segmentId);
|
|
162
167
|
},
|
|
163
168
|
canCommit() {
|
|
164
169
|
return true;
|
|
165
170
|
},
|
|
166
171
|
commit() {
|
|
172
|
+
useLiveNodeOverrides.getState().clear(segmentId);
|
|
167
173
|
useScene.getState().updateNode(segmentId, { position: lastLocal });
|
|
168
174
|
},
|
|
169
175
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DimensionTerminator, DimensionTextPosition } from '@pascal-app/core';
|
|
2
|
+
import type { ConstructionImperialPrecision, ConstructionMetricNotation } from './construction-length';
|
|
3
|
+
export type ConstructionDimensionDrawingStandard = {
|
|
4
|
+
datumPolicy: 'centerline' | 'wall-face' | 'structural-face' | 'finish-face';
|
|
5
|
+
intersectionReferencePolicy: 'single' | 'both-faces';
|
|
6
|
+
terminator: DimensionTerminator;
|
|
7
|
+
textPosition: DimensionTextPosition;
|
|
8
|
+
imperialPrecision: ConstructionImperialPrecision;
|
|
9
|
+
metricNotation: ConstructionMetricNotation;
|
|
10
|
+
openingChainOffset: number;
|
|
11
|
+
wallSpanOffset: number;
|
|
12
|
+
firstOpeningWidthOffset: number;
|
|
13
|
+
firstGeneralTierOffset: number;
|
|
14
|
+
tierSpacing: number;
|
|
15
|
+
extensionStartGap: number;
|
|
16
|
+
extensionOvershoot: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const DEFAULT_CONSTRUCTION_DIMENSION_STANDARD: {
|
|
19
|
+
datumPolicy: "wall-face";
|
|
20
|
+
intersectionReferencePolicy: "single";
|
|
21
|
+
terminator: "architectural-tick";
|
|
22
|
+
textPosition: "above";
|
|
23
|
+
imperialPrecision: "1/16";
|
|
24
|
+
metricNotation: "meters";
|
|
25
|
+
openingChainOffset: number;
|
|
26
|
+
wallSpanOffset: number;
|
|
27
|
+
firstOpeningWidthOffset: number;
|
|
28
|
+
firstGeneralTierOffset: number;
|
|
29
|
+
tierSpacing: number;
|
|
30
|
+
extensionStartGap: number;
|
|
31
|
+
extensionOvershoot: number;
|
|
32
|
+
};
|
|
33
|
+
export declare function constructionDimensionStandard(overrides?: Partial<ConstructionDimensionDrawingStandard>): ConstructionDimensionDrawingStandard;
|
|
34
|
+
//# sourceMappingURL=construction-dimension-standards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"construction-dimension-standards.d.ts","sourceRoot":"","sources":["../../src/shared/construction-dimension-standards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EACV,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,uBAAuB,CAAA;AAE9B,MAAM,MAAM,oCAAoC,GAAG;IACjD,WAAW,EAAE,YAAY,GAAG,WAAW,GAAG,iBAAiB,GAAG,aAAa,CAAA;IAC3E,2BAA2B,EAAE,QAAQ,GAAG,YAAY,CAAA;IACpD,UAAU,EAAE,mBAAmB,CAAA;IAC/B,YAAY,EAAE,qBAAqB,CAAA;IACnC,iBAAiB,EAAE,6BAA6B,CAAA;IAChD,cAAc,EAAE,0BAA0B,CAAA;IAC1C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,uCAAuC;;;;;;;;;;;;;;CAcJ,CAAA;AAEhD,wBAAgB,6BAA6B,CAC3C,SAAS,GAAE,OAAO,CAAC,oCAAoC,CAAM,GAC5D,oCAAoC,CAEtC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const DEFAULT_CONSTRUCTION_DIMENSION_STANDARD = {
|
|
2
|
+
datumPolicy: 'wall-face',
|
|
3
|
+
intersectionReferencePolicy: 'single',
|
|
4
|
+
terminator: 'architectural-tick',
|
|
5
|
+
textPosition: 'above',
|
|
6
|
+
imperialPrecision: '1/16',
|
|
7
|
+
metricNotation: 'meters',
|
|
8
|
+
openingChainOffset: 0.55,
|
|
9
|
+
wallSpanOffset: 1.05,
|
|
10
|
+
firstOpeningWidthOffset: 0.62,
|
|
11
|
+
firstGeneralTierOffset: 0.55,
|
|
12
|
+
tierSpacing: 0.62,
|
|
13
|
+
extensionStartGap: 0.075,
|
|
14
|
+
extensionOvershoot: 0.12,
|
|
15
|
+
};
|
|
16
|
+
export function constructionDimensionStandard(overrides = {}) {
|
|
17
|
+
return { ...DEFAULT_CONSTRUCTION_DIMENSION_STANDARD, ...overrides };
|
|
18
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ConstructionLinearUnit = 'metric' | 'imperial';
|
|
2
|
+
export type ConstructionLengthProfile = 'editor' | 'document';
|
|
3
|
+
export type ConstructionMetricNotation = 'meters' | 'millimeters';
|
|
4
|
+
export type ConstructionImperialPrecision = '1' | '1/2' | '1/4' | '1/8' | '1/16';
|
|
5
|
+
export type ConstructionLengthFormatOptions = {
|
|
6
|
+
metricNotation?: ConstructionMetricNotation;
|
|
7
|
+
imperialPrecision?: ConstructionImperialPrecision;
|
|
8
|
+
};
|
|
9
|
+
export declare function formatConstructionLength(meters: number, unit: ConstructionLinearUnit, profile?: ConstructionLengthProfile, options?: ConstructionLengthFormatOptions): string;
|
|
10
|
+
//# sourceMappingURL=construction-length.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"construction-length.d.ts","sourceRoot":"","sources":["../../src/shared/construction-length.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAC1D,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,UAAU,CAAA;AAC7D,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,aAAa,CAAA;AACjE,MAAM,MAAM,6BAA6B,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;AAEhF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,cAAc,CAAC,EAAE,0BAA0B,CAAA;IAC3C,iBAAiB,CAAC,EAAE,6BAA6B,CAAA;CAClD,CAAA;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,sBAAsB,EAC5B,OAAO,GAAE,yBAAoC,EAC7C,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CA0BR"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const INCHES_PER_METER = 1 / 0.0254;
|
|
2
|
+
const IMPERIAL_FRACTION_DENOMINATOR = 16;
|
|
3
|
+
export function formatConstructionLength(meters, unit, profile = 'editor', options = {}) {
|
|
4
|
+
if (!Number.isFinite(meters))
|
|
5
|
+
return '--';
|
|
6
|
+
if (unit === 'metric') {
|
|
7
|
+
if (profile === 'document' || options.metricNotation === 'millimeters') {
|
|
8
|
+
return `${Math.round(meters * 1000)}`;
|
|
9
|
+
}
|
|
10
|
+
const rounded = Number.parseFloat(Math.abs(meters).toFixed(2));
|
|
11
|
+
const sign = meters < 0 && rounded !== 0 ? '-' : '';
|
|
12
|
+
return `${sign}${rounded}m`;
|
|
13
|
+
}
|
|
14
|
+
const sign = meters < 0 ? '-' : '';
|
|
15
|
+
const denominator = imperialPrecisionDenominator(options.imperialPrecision);
|
|
16
|
+
const totalFractionUnits = Math.round(Math.abs(meters) * INCHES_PER_METER * denominator);
|
|
17
|
+
const unitsPerFoot = 12 * denominator;
|
|
18
|
+
const feet = Math.floor(totalFractionUnits / unitsPerFoot);
|
|
19
|
+
const remainder = totalFractionUnits - feet * unitsPerFoot;
|
|
20
|
+
const inches = Math.floor(remainder / denominator);
|
|
21
|
+
const numerator = remainder - inches * denominator;
|
|
22
|
+
const fraction = formatFraction(numerator, denominator);
|
|
23
|
+
const inchText = fraction ? `${inches} ${fraction}` : `${inches}`;
|
|
24
|
+
if (feet === 0)
|
|
25
|
+
return `${sign}${inchText}"`;
|
|
26
|
+
return `${sign}${feet}'-${inchText}"`;
|
|
27
|
+
}
|
|
28
|
+
function imperialPrecisionDenominator(precision) {
|
|
29
|
+
switch (precision) {
|
|
30
|
+
case '1':
|
|
31
|
+
return 1;
|
|
32
|
+
case '1/2':
|
|
33
|
+
return 2;
|
|
34
|
+
case '1/4':
|
|
35
|
+
return 4;
|
|
36
|
+
case '1/8':
|
|
37
|
+
return 8;
|
|
38
|
+
default:
|
|
39
|
+
return IMPERIAL_FRACTION_DENOMINATOR;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function formatFraction(numerator, denominator) {
|
|
43
|
+
if (numerator === 0)
|
|
44
|
+
return '';
|
|
45
|
+
const divisor = greatestCommonDivisor(numerator, denominator);
|
|
46
|
+
return `${numerator / divisor}/${denominator / divisor}`;
|
|
47
|
+
}
|
|
48
|
+
function greatestCommonDivisor(a, b) {
|
|
49
|
+
let left = Math.abs(a);
|
|
50
|
+
let right = Math.abs(b);
|
|
51
|
+
while (right !== 0) {
|
|
52
|
+
const next = left % right;
|
|
53
|
+
left = right;
|
|
54
|
+
right = next;
|
|
55
|
+
}
|
|
56
|
+
return left || 1;
|
|
57
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DimensionTerminator, DimensionTextPosition, FloorplanGeometry, FloorplanPoint } from '@pascal-app/core';
|
|
2
|
+
export type DimensionStringSegment = {
|
|
3
|
+
witnessStart: FloorplanPoint;
|
|
4
|
+
witnessEnd: FloorplanPoint;
|
|
5
|
+
dimensionStart?: FloorplanPoint;
|
|
6
|
+
dimensionEnd?: FloorplanPoint;
|
|
7
|
+
text: string;
|
|
8
|
+
};
|
|
9
|
+
export type DimensionStringGeometryInput = {
|
|
10
|
+
segments: readonly DimensionStringSegment[];
|
|
11
|
+
offsetNormal: FloorplanPoint;
|
|
12
|
+
offsetDistance?: number;
|
|
13
|
+
extensionStartGap?: number;
|
|
14
|
+
extensionOvershoot?: number;
|
|
15
|
+
terminator?: DimensionTerminator;
|
|
16
|
+
textPosition?: DimensionTextPosition;
|
|
17
|
+
stroke?: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function buildDimensionStringGeometry(input: DimensionStringGeometryInput): FloorplanGeometry;
|
|
20
|
+
//# sourceMappingURL=dimension-string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimension-string.d.ts","sourceRoot":"","sources":["../../src/shared/dimension-string.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACf,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,cAAc,CAAA;IAC5B,UAAU,EAAE,cAAc,CAAA;IAC1B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAC3C,YAAY,EAAE,cAAc,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,mBAAmB,CAAA;IAChC,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,4BAA4B,GAClC,iBAAiB,CAkBnB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function buildDimensionStringGeometry(input) {
|
|
2
|
+
return {
|
|
3
|
+
kind: 'dimension-string',
|
|
4
|
+
segments: input.segments.map((segment) => ({
|
|
5
|
+
start: segment.witnessStart,
|
|
6
|
+
end: segment.witnessEnd,
|
|
7
|
+
dimensionStart: segment.dimensionStart,
|
|
8
|
+
dimensionEnd: segment.dimensionEnd,
|
|
9
|
+
text: segment.text,
|
|
10
|
+
})),
|
|
11
|
+
offsetNormal: input.offsetNormal,
|
|
12
|
+
offsetDistance: input.offsetDistance ?? 0,
|
|
13
|
+
extensionStartGap: input.extensionStartGap,
|
|
14
|
+
extensionOvershoot: input.extensionOvershoot ?? 0,
|
|
15
|
+
terminator: input.terminator,
|
|
16
|
+
textPosition: input.textPosition,
|
|
17
|
+
stroke: input.stroke,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type WallPlanPoint } from '@pascal-app/editor';
|
|
2
|
+
export type DraftAngleLabel = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
position: [number, number, number];
|
|
6
|
+
arc: {
|
|
7
|
+
center: WallPlanPoint;
|
|
8
|
+
radius: number;
|
|
9
|
+
startAngle: number;
|
|
10
|
+
endAngle: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type DraftAxisGuideState = {
|
|
15
|
+
origin: WallPlanPoint;
|
|
16
|
+
endOrigin: WallPlanPoint | null;
|
|
17
|
+
y: number;
|
|
18
|
+
angleLabel: DraftAngleLabel | null;
|
|
19
|
+
} | null;
|
|
20
|
+
export declare function getNearestAxisAngleLabel(start: WallPlanPoint, end: WallPlanPoint, y: number): DraftAngleLabel | null;
|
|
21
|
+
export declare function DraftAxisGuides({ guide, labelColor, labelShadowColor, }: {
|
|
22
|
+
guide: DraftAxisGuideState;
|
|
23
|
+
labelColor: string;
|
|
24
|
+
labelShadowColor: string;
|
|
25
|
+
}): import("react").JSX.Element | null;
|
|
26
|
+
export declare function DraftAngleArc({ arc, color }: {
|
|
27
|
+
arc: DraftAngleLabel['arc'];
|
|
28
|
+
color: string;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
export declare function DraftMeasurementLabel({ color, label, position, shadowColor, }: {
|
|
31
|
+
color: string;
|
|
32
|
+
label: string;
|
|
33
|
+
position: [number, number, number];
|
|
34
|
+
shadowColor: string;
|
|
35
|
+
}): import("react").JSX.Element;
|
|
36
|
+
//# sourceMappingURL=draft-axis-guides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft-axis-guides.d.ts","sourceRoot":"","sources":["../../src/shared/draft-axis-guides.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAA;AA6B3B,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,GAAG,EAAE;QACH,MAAM,EAAE,aAAa,CAAA;QACrB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,CAAC,EAAE,MAAM,CAAA;KACV,CAAA;CACF,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,EAAE,aAAa,GAAG,IAAI,CAAA;IAC/B,CAAC,EAAE,MAAM,CAAA;IACT,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;CACnC,GAAG,IAAI,CAAA;AAeR,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,EAClB,CAAC,EAAE,MAAM,GACR,eAAe,GAAG,IAAI,CAyCxB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,UAAU,EACV,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,mBAAmB,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;CACzB,sCA2CA;AAoBD,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAAE,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,+BAkC3F;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,KAAK,EACL,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,WAAW,EAAE,MAAM,CAAA;CACpB,+BAmBA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { EDITOR_LAYER, formatAngleRadians, getAngleArcToSegmentReference, getAngleToSegmentReference, } from '@pascal-app/editor';
|
|
3
|
+
import { Html } from '@react-three/drei';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
import { BufferGeometry, Vector3 } from 'three';
|
|
6
|
+
/**
|
|
7
|
+
* Axis guide lines + axis-angle readout shown while drafting linear segments
|
|
8
|
+
* (walls, fences). An X/Z cross of long thin boxes is drawn through the
|
|
9
|
+
* segment start so it can be aligned against the world axes; the moving
|
|
10
|
+
* endpoint gets a single long line PERPENDICULAR to the draft segment (a
|
|
11
|
+
* second cross there would overlap the start cross whenever the segment is
|
|
12
|
+
* axis-aligned). The angle to the nearest axis is shown as an arc + label
|
|
13
|
+
* anchored at the start point only (duplicating it at the endpoint is
|
|
14
|
+
* visual clutter).
|
|
15
|
+
*/
|
|
16
|
+
const DRAFT_AXIS_GUIDE_LENGTH = 2000;
|
|
17
|
+
const DRAFT_AXIS_GUIDE_WIDTH = 0.035;
|
|
18
|
+
const DRAFT_AXIS_GUIDE_HEIGHT = 0.004;
|
|
19
|
+
const DRAFT_AXIS_GUIDE_Y_OFFSET = 0.026;
|
|
20
|
+
const DRAFT_AXIS_ANGLE_ARC_Y_OFFSET = 0.05;
|
|
21
|
+
const DRAFT_AXIS_ANGLE_LABEL_Y_OFFSET = 0.16;
|
|
22
|
+
const DRAFT_AXIS_ANGLE_ARC_MIN_RADIUS = 0.36;
|
|
23
|
+
const DRAFT_AXIS_ANGLE_ARC_MAX_RADIUS = 0.82;
|
|
24
|
+
const DRAFT_ANGLE_ARC_SEGMENTS = 24;
|
|
25
|
+
const AXIS_ANGLE_REFERENCES = [
|
|
26
|
+
{ vector: [1, 0], orientation: 'axis' },
|
|
27
|
+
{ vector: [0, 1], orientation: 'axis' },
|
|
28
|
+
];
|
|
29
|
+
function clamp(value, min, max) {
|
|
30
|
+
return Math.min(max, Math.max(min, value));
|
|
31
|
+
}
|
|
32
|
+
export function getNearestAxisAngleLabel(start, end, y) {
|
|
33
|
+
const dx = end[0] - start[0];
|
|
34
|
+
const dz = end[1] - start[1];
|
|
35
|
+
const length = Math.hypot(dx, dz);
|
|
36
|
+
if (length < 0.01)
|
|
37
|
+
return null;
|
|
38
|
+
const draftVector = [dx, dz];
|
|
39
|
+
const axisCandidates = [];
|
|
40
|
+
for (const reference of AXIS_ANGLE_REFERENCES) {
|
|
41
|
+
const angle = getAngleToSegmentReference(draftVector, reference);
|
|
42
|
+
const arc = getAngleArcToSegmentReference(draftVector, reference);
|
|
43
|
+
if (!(angle === null || arc === null)) {
|
|
44
|
+
axisCandidates.push({ angle, arc });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const nearestAxisAngle = axisCandidates.sort((a, b) => a.angle - b.angle)[0];
|
|
48
|
+
if (!nearestAxisAngle)
|
|
49
|
+
return null;
|
|
50
|
+
const radius = clamp(length * 0.22, DRAFT_AXIS_ANGLE_ARC_MIN_RADIUS, DRAFT_AXIS_ANGLE_ARC_MAX_RADIUS);
|
|
51
|
+
const { angle, arc } = nearestAxisAngle;
|
|
52
|
+
return {
|
|
53
|
+
id: 'axis',
|
|
54
|
+
label: formatAngleRadians(angle),
|
|
55
|
+
position: [
|
|
56
|
+
start[0] + Math.cos(arc.midAngle) * (radius + 0.16),
|
|
57
|
+
y + DRAFT_AXIS_ANGLE_LABEL_Y_OFFSET,
|
|
58
|
+
start[1] + Math.sin(arc.midAngle) * (radius + 0.16),
|
|
59
|
+
],
|
|
60
|
+
arc: {
|
|
61
|
+
center: start,
|
|
62
|
+
radius,
|
|
63
|
+
startAngle: arc.startAngle,
|
|
64
|
+
endAngle: arc.endAngle,
|
|
65
|
+
y: y + DRAFT_AXIS_ANGLE_ARC_Y_OFFSET,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function DraftAxisGuides({ guide, labelColor, labelShadowColor, }) {
|
|
70
|
+
if (!guide)
|
|
71
|
+
return null;
|
|
72
|
+
const [x, z] = guide.origin;
|
|
73
|
+
// Single long line through the endpoint, perpendicular to the draft
|
|
74
|
+
// segment (a full axis cross there would collide with the start cross
|
|
75
|
+
// whenever the segment is axis-aligned).
|
|
76
|
+
let endRotationY = null;
|
|
77
|
+
if (guide.endOrigin) {
|
|
78
|
+
const dx = guide.endOrigin[0] - x;
|
|
79
|
+
const dz = guide.endOrigin[1] - z;
|
|
80
|
+
if (dx * dx + dz * dz >= 0.01 * 0.01) {
|
|
81
|
+
endRotationY = Math.atan2(-dx, -dz);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return (_jsxs(_Fragment, { children: [_jsxs("group", { position: [x, guide.y + DRAFT_AXIS_GUIDE_Y_OFFSET, z], children: [_jsx(DraftAxisGuideLine, { axis: "x" }), _jsx(DraftAxisGuideLine, { axis: "z" })] }), guide.endOrigin && endRotationY !== null && (_jsx("group", { position: [guide.endOrigin[0], guide.y + DRAFT_AXIS_GUIDE_Y_OFFSET, guide.endOrigin[1]], children: _jsx(DraftAxisGuideLine, { rotationY: endRotationY }) })), guide.angleLabel && (_jsxs(_Fragment, { children: [_jsx(DraftAngleArc, { arc: guide.angleLabel.arc, color: "#818cf8" }), _jsx(DraftMeasurementLabel, { color: labelColor, label: guide.angleLabel.label, position: guide.angleLabel.position, shadowColor: labelShadowColor })] }))] }));
|
|
85
|
+
}
|
|
86
|
+
function DraftAxisGuideLine({ axis, rotationY }) {
|
|
87
|
+
const y = rotationY ?? (axis === 'z' ? Math.PI / 2 : 0);
|
|
88
|
+
return (_jsxs("mesh", { frustumCulled: false, layers: EDITOR_LAYER, renderOrder: 0, rotation: [0, y, 0], children: [_jsx("boxGeometry", { args: [DRAFT_AXIS_GUIDE_LENGTH, DRAFT_AXIS_GUIDE_HEIGHT, DRAFT_AXIS_GUIDE_WIDTH] }), _jsx("meshBasicMaterial", { color: "#818cf8", depthTest: false, depthWrite: false, opacity: 0.36, transparent: true })] }));
|
|
89
|
+
}
|
|
90
|
+
export function DraftAngleArc({ arc, color }) {
|
|
91
|
+
const geometry = useMemo(() => {
|
|
92
|
+
const segmentCount = Math.max(8, Math.ceil((Math.abs(arc.endAngle - arc.startAngle) / Math.PI) * DRAFT_ANGLE_ARC_SEGMENTS));
|
|
93
|
+
const points = Array.from({ length: segmentCount + 1 }, (_, index) => {
|
|
94
|
+
const t = index / segmentCount;
|
|
95
|
+
const angle = arc.startAngle + (arc.endAngle - arc.startAngle) * t;
|
|
96
|
+
return new Vector3(arc.center[0] + Math.cos(angle) * arc.radius, arc.y, arc.center[1] + Math.sin(angle) * arc.radius);
|
|
97
|
+
});
|
|
98
|
+
return new BufferGeometry().setFromPoints(points);
|
|
99
|
+
}, [arc]);
|
|
100
|
+
return (_jsx("line", { frustumCulled: false, geometry: geometry, layers: EDITOR_LAYER, renderOrder: 2, children: _jsx("lineBasicNodeMaterial", { color: color, depthTest: false, depthWrite: false, linewidth: 2, opacity: 0.95, transparent: true }) }));
|
|
101
|
+
}
|
|
102
|
+
export function DraftMeasurementLabel({ color, label, position, shadowColor, }) {
|
|
103
|
+
return (_jsx(Html, { center: true, position: position, style: { pointerEvents: 'none', userSelect: 'none' }, zIndexRange: [100, 0], children: _jsx("div", { className: "whitespace-nowrap font-bold font-mono text-[15px]", style: {
|
|
104
|
+
color,
|
|
105
|
+
textShadow: `-1.5px -1.5px 0 ${shadowColor}, 1.5px -1.5px 0 ${shadowColor}, -1.5px 1.5px 0 ${shadowColor}, 1.5px 1.5px 0 ${shadowColor}, 0 0 4px ${shadowColor}, 0 0 4px ${shadowColor}`,
|
|
106
|
+
}, children: label }) }));
|
|
107
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"move-roof-tool.d.ts","sourceRoot":"","sources":["../../src/shared/move-roof-tool.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,QAAQ,EACb,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"move-roof-tool.d.ts","sourceRoot":"","sources":["../../src/shared/move-roof-tool.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,QAAQ,EACb,KAAK,eAAe,EAGpB,KAAK,SAAS,EACd,KAAK,gBAAgB,EAMtB,MAAM,kBAAkB,CAAA;AAwDzB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,IAAI,EAAE,QAAQ,GAAG,eAAe,GAAG,SAAS,GAAG,gBAAgB,CAAA;CAChE,CAofA,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { collectAlignmentAnchors, emitter, movingAlignmentAnchors, nodeRegistry, resolveAlignment, sceneRegistry, useLiveNodeOverrides, useLiveTransforms, useScene, } from '@pascal-app/core';
|
|
2
|
+
import { collectAlignmentAnchors, emitter, movingAlignmentAnchors, nodeRegistry, resolveAlignment, resolveSupportSlabPatch, sceneRegistry, useLiveNodeOverrides, useLiveTransforms, useScene, } from '@pascal-app/core';
|
|
3
3
|
import { CursorSphere, commitFreshPlacementSubtree, consumePlacementDragRelease, DragBoundingBox, getFloorStackPreviewPosition, isMagneticSnapActive, resolvePlanarCursorPosition, snapFenceDraftPoint, stripPlacementMetadataFlags, triggerSFX, useAlignmentGuides, useEditor, useFreshPlacementVisibility, } from '@pascal-app/editor';
|
|
4
4
|
import { useViewer } from '@pascal-app/viewer';
|
|
5
5
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
@@ -283,14 +283,27 @@ export const MoveRoofTool = ({ node: movingNode }) => {
|
|
|
283
283
|
const [localX, , localZ] = lastLocalPosition;
|
|
284
284
|
useAlignmentGuides.getState().clear();
|
|
285
285
|
wasCommitted = true;
|
|
286
|
+
const position = [localX, movingNode.position[1], localZ];
|
|
287
|
+
const effectiveNode = {
|
|
288
|
+
...movingNode,
|
|
289
|
+
position,
|
|
290
|
+
rotation: pendingRotation,
|
|
291
|
+
};
|
|
292
|
+
const supportPatch = isFloorPlaced
|
|
293
|
+
? resolveSupportSlabPatch(effectiveNode, {
|
|
294
|
+
...useScene.getState().nodes,
|
|
295
|
+
[movingNode.id]: effectiveNode,
|
|
296
|
+
})
|
|
297
|
+
: {};
|
|
286
298
|
let committedId = movingNode.id;
|
|
287
299
|
if (isNew) {
|
|
288
300
|
committedId =
|
|
289
301
|
commitFreshPlacementSubtree(movingNode.id, {
|
|
290
|
-
position
|
|
302
|
+
position,
|
|
291
303
|
rotation: pendingRotation,
|
|
292
304
|
metadata: committedMeta,
|
|
293
305
|
visible: true,
|
|
306
|
+
...supportPatch,
|
|
294
307
|
}) ?? committedId;
|
|
295
308
|
}
|
|
296
309
|
else {
|
|
@@ -298,9 +311,10 @@ export const MoveRoofTool = ({ node: movingNode }) => {
|
|
|
298
311
|
// Resume temporal and apply the final state as a single undoable step.
|
|
299
312
|
useScene.temporal.getState().resume();
|
|
300
313
|
useScene.getState().updateNode(movingNode.id, {
|
|
301
|
-
position
|
|
314
|
+
position,
|
|
302
315
|
rotation: pendingRotation,
|
|
303
316
|
metadata: committedMeta,
|
|
317
|
+
...supportPatch,
|
|
304
318
|
});
|
|
305
319
|
useScene.temporal.getState().pause();
|
|
306
320
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type OpeningDocumentationPatch = {
|
|
2
|
+
mark?: string;
|
|
3
|
+
constructionType?: 'framed' | 'masonry';
|
|
4
|
+
dimensionReference?: 'nominal' | 'rough-opening' | 'masonry-opening' | 'finish-opening';
|
|
5
|
+
roughOpeningWidth?: number;
|
|
6
|
+
roughOpeningHeight?: number;
|
|
7
|
+
masonryOpeningWidth?: number;
|
|
8
|
+
masonryOpeningHeight?: number;
|
|
9
|
+
finishOpeningWidth?: number;
|
|
10
|
+
finishOpeningHeight?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function OpeningDocumentationFields({ mark, constructionType, dimensionReference, roughOpeningWidth, roughOpeningHeight, masonryOpeningWidth, masonryOpeningHeight, finishOpeningWidth, finishOpeningHeight, onChange, }: OpeningDocumentationPatch & {
|
|
13
|
+
onChange: (patch: OpeningDocumentationPatch) => void;
|
|
14
|
+
}): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=opening-documentation-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-documentation-fields.d.ts","sourceRoot":"","sources":["../../src/shared/opening-documentation-fields.tsx"],"names":[],"mappings":"AAKA,KAAK,yBAAyB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;IACvC,kBAAkB,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,gBAAgB,CAAA;IACvF,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAED,wBAAgB,0BAA0B,CAAC,EACzC,IAAI,EACJ,gBAA2B,EAC3B,kBAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,GACT,EAAE,yBAAyB,GAAG;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAA;CACrD,+BA+GA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { getLinearUnitLabel, linearUnitToMeters, metersToLinearUnit } from '@pascal-app/editor';
|
|
4
|
+
import { useViewer } from '@pascal-app/viewer';
|
|
5
|
+
export function OpeningDocumentationFields({ mark, constructionType = 'framed', dimensionReference = 'nominal', roughOpeningWidth, roughOpeningHeight, masonryOpeningWidth, masonryOpeningHeight, finishOpeningWidth, finishOpeningHeight, onChange, }) {
|
|
6
|
+
return (_jsxs("div", { className: "flex flex-col gap-2 px-1 pb-1", children: [_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Mark" }), _jsx("input", { className: "h-8 rounded-lg border border-border/50 bg-[#2C2C2E] px-2.5 font-mono text-foreground text-xs outline-none transition-colors placeholder:text-muted-foreground/50 focus:border-orange-400/60", defaultValue: mark ?? '', maxLength: 16, onBlur: (event) => {
|
|
7
|
+
const next = event.currentTarget.value.trim().toLocaleUpperCase();
|
|
8
|
+
if (next !== (mark ?? ''))
|
|
9
|
+
onChange({ mark: next || undefined });
|
|
10
|
+
}, onKeyDown: (event) => {
|
|
11
|
+
if (event.key === 'Enter')
|
|
12
|
+
event.currentTarget.blur();
|
|
13
|
+
if (event.key === 'Escape') {
|
|
14
|
+
event.currentTarget.value = mark ?? '';
|
|
15
|
+
event.currentTarget.blur();
|
|
16
|
+
}
|
|
17
|
+
}, placeholder: "Auto-assigned" }, `mark:${mark ?? ''}`)] }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Construction" }), _jsxs("select", { className: "h-8 rounded-lg border border-border/50 bg-[#2C2C2E] px-2 text-foreground text-xs outline-none focus:border-orange-400/60", onChange: (event) => {
|
|
18
|
+
const next = event.currentTarget.value;
|
|
19
|
+
onChange({
|
|
20
|
+
constructionType: next,
|
|
21
|
+
dimensionReference: next === 'masonry' && dimensionReference === 'nominal'
|
|
22
|
+
? 'masonry-opening'
|
|
23
|
+
: dimensionReference,
|
|
24
|
+
});
|
|
25
|
+
}, value: constructionType, children: [_jsx("option", { value: "framed", children: "Framed" }), _jsx("option", { value: "masonry", children: "Masonry" })] })] }), _jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: "Dimension to" }), _jsxs("select", { className: "h-8 rounded-lg border border-border/50 bg-[#2C2C2E] px-2 text-foreground text-xs outline-none focus:border-orange-400/60", onChange: (event) => onChange({
|
|
26
|
+
dimensionReference: event.currentTarget
|
|
27
|
+
.value,
|
|
28
|
+
}), value: dimensionReference, children: [_jsx("option", { value: "nominal", children: "Nominal" }), _jsx("option", { value: "rough-opening", children: "Rough opening" }), _jsx("option", { value: "masonry-opening", children: "Masonry opening" }), _jsx("option", { value: "finish-opening", children: "Finish opening" })] })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(OptionalMeterInput, { label: "RO Width", onChange: (value) => onChange({ roughOpeningWidth: value }), value: roughOpeningWidth }), _jsx(OptionalMeterInput, { label: "RO Height", onChange: (value) => onChange({ roughOpeningHeight: value }), value: roughOpeningHeight })] }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(OptionalMeterInput, { label: "MO Width", onChange: (value) => onChange({ masonryOpeningWidth: value }), value: masonryOpeningWidth }), _jsx(OptionalMeterInput, { label: "MO Height", onChange: (value) => onChange({ masonryOpeningHeight: value }), value: masonryOpeningHeight })] }), _jsxs("div", { className: "grid grid-cols-2 gap-2", children: [_jsx(OptionalMeterInput, { label: "FO Width", onChange: (value) => onChange({ finishOpeningWidth: value }), value: finishOpeningWidth }), _jsx(OptionalMeterInput, { label: "FO Height", onChange: (value) => onChange({ finishOpeningHeight: value }), value: finishOpeningHeight })] }), _jsx("p", { className: "px-0.5 text-[10px] text-muted-foreground/65 leading-4", children: "Leave RO, MO, and FO values blank until verified by the applicable manufacturer or trade." })] }));
|
|
29
|
+
}
|
|
30
|
+
function OptionalMeterInput({ label, value, onChange, }) {
|
|
31
|
+
const unit = useViewer((state) => state.unit);
|
|
32
|
+
const displayValue = value === undefined ? '' : roundForInput(metersToLinearUnit(value, unit));
|
|
33
|
+
return (_jsxs("label", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "font-medium text-[10px] text-muted-foreground/80 uppercase tracking-wider", children: label }), _jsxs("div", { className: "flex h-8 items-center rounded-lg border border-border/50 bg-[#2C2C2E] focus-within:border-orange-400/60", children: [_jsx("input", { className: "min-w-0 flex-1 bg-transparent px-2 font-mono text-foreground text-xs outline-none placeholder:text-muted-foreground/50", defaultValue: displayValue, min: 0.01, onBlur: (event) => {
|
|
34
|
+
const raw = event.currentTarget.value;
|
|
35
|
+
if (raw === String(displayValue))
|
|
36
|
+
return;
|
|
37
|
+
const parsed = Number.parseFloat(raw);
|
|
38
|
+
const next = raw === '' || !Number.isFinite(parsed) || parsed <= 0
|
|
39
|
+
? undefined
|
|
40
|
+
: linearUnitToMeters(parsed, unit);
|
|
41
|
+
if (next !== value)
|
|
42
|
+
onChange(next);
|
|
43
|
+
}, onKeyDown: (event) => {
|
|
44
|
+
if (event.key === 'Enter')
|
|
45
|
+
event.currentTarget.blur();
|
|
46
|
+
if (event.key === 'Escape') {
|
|
47
|
+
event.currentTarget.value = String(displayValue);
|
|
48
|
+
event.currentTarget.blur();
|
|
49
|
+
}
|
|
50
|
+
}, onWheel: (event) => event.currentTarget.blur(), placeholder: "Verify", step: unit === 'imperial' ? 0.01 : 0.001, type: "number" }, `${label}:${displayValue}`), _jsx("span", { className: "pr-2 font-mono text-[10px] text-muted-foreground", children: getLinearUnitLabel(unit) })] })] }));
|
|
51
|
+
}
|
|
52
|
+
function roundForInput(value) {
|
|
53
|
+
return Math.round(value * 1000) / 1000;
|
|
54
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { AnyNode, DoorNode, FloorplanGeometry, WallNode, WindowNode } from '@pascal-app/core';
|
|
2
|
+
import { type FloorplanSchedule } from '@pascal-app/editor';
|
|
3
|
+
import { type ConstructionLengthProfile, type ConstructionLinearUnit } from './construction-length';
|
|
4
|
+
type OpeningNode = DoorNode | WindowNode;
|
|
5
|
+
export type OpeningConstructionType = 'framed' | 'masonry';
|
|
6
|
+
export type OpeningDimensionReference = 'nominal' | 'rough-opening' | 'masonry-opening' | 'finish-opening';
|
|
7
|
+
export type OpeningDimensionDocumentation = {
|
|
8
|
+
constructionType: OpeningConstructionType;
|
|
9
|
+
reference: OpeningDimensionReference;
|
|
10
|
+
locationPolicy: 'centerline' | 'edge-to-edge';
|
|
11
|
+
width: number | null;
|
|
12
|
+
height: number | null;
|
|
13
|
+
prefix: string;
|
|
14
|
+
verified: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type OpeningFloorplanLevelData = {
|
|
17
|
+
markById: ReadonlyMap<string, string>;
|
|
18
|
+
};
|
|
19
|
+
export declare function computeDoorFloorplanLevelData(args: {
|
|
20
|
+
siblings: ReadonlyArray<DoorNode>;
|
|
21
|
+
nodes: Record<string, AnyNode>;
|
|
22
|
+
}): OpeningFloorplanLevelData;
|
|
23
|
+
export declare function computeWindowFloorplanLevelData(args: {
|
|
24
|
+
siblings: ReadonlyArray<WindowNode>;
|
|
25
|
+
nodes: Record<string, AnyNode>;
|
|
26
|
+
}): OpeningFloorplanLevelData;
|
|
27
|
+
export declare function buildDoorFloorplanSchedule(args: {
|
|
28
|
+
siblings: ReadonlyArray<DoorNode>;
|
|
29
|
+
nodes: Readonly<Record<string, AnyNode>>;
|
|
30
|
+
levelId: string;
|
|
31
|
+
unit: ConstructionLinearUnit;
|
|
32
|
+
profile?: ConstructionLengthProfile;
|
|
33
|
+
}): FloorplanSchedule | null;
|
|
34
|
+
export declare function buildWindowFloorplanSchedule(args: {
|
|
35
|
+
siblings: ReadonlyArray<WindowNode>;
|
|
36
|
+
nodes: Readonly<Record<string, AnyNode>>;
|
|
37
|
+
levelId: string;
|
|
38
|
+
unit: ConstructionLinearUnit;
|
|
39
|
+
profile?: ConstructionLengthProfile;
|
|
40
|
+
}): FloorplanSchedule | null;
|
|
41
|
+
export declare function buildOpeningMarkAnnotation(opening: OpeningNode, wall: WallNode, levelData: OpeningFloorplanLevelData | undefined, { preferredSide, stroke, }?: {
|
|
42
|
+
preferredSide?: -1 | 1;
|
|
43
|
+
stroke?: string;
|
|
44
|
+
}): FloorplanGeometry | null;
|
|
45
|
+
export declare function resolveOpeningDimensionDocumentation(opening: OpeningNode): OpeningDimensionDocumentation;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=opening-documentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opening-documentation.d.ts","sourceRoot":"","sources":["../../src/shared/opening-documentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,EAEjB,QAAQ,EACR,UAAU,EACX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,iBAAiB,EAAiC,MAAM,oBAAoB,CAAA;AAC1F,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,uBAAuB,CAAA;AAE9B,KAAK,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;AAGxC,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,CAAA;AAC1D,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,eAAe,GACf,iBAAiB,GACjB,gBAAgB,CAAA;AAEpB,MAAM,MAAM,6BAA6B,GAAG;IAC1C,gBAAgB,EAAE,uBAAuB,CAAA;IACzC,SAAS,EAAE,yBAAyB,CAAA;IACpC,cAAc,EAAE,YAAY,GAAG,cAAc,CAAA;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAMD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,yBAAyB,CAE5B;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,GAAG,yBAAyB,CAE5B;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IACjC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CA6B3B;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,CAAC,EAAE,yBAAyB,CAAA;CACpC,GAAG,iBAAiB,GAAG,IAAI,CAqC3B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,yBAAyB,GAAG,SAAS,EAChD,EACE,aAAkB,EAClB,MAAkB,GACnB,GAAE;IACD,aAAa,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CACX,GACL,iBAAiB,GAAG,IAAI,CAiE1B;AAED,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,WAAW,GACnB,6BAA6B,CAoB/B"}
|