@pascal-app/nodes 1.0.1 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/block/definition.d.ts.map +1 -1
- package/dist/block/definition.js +22 -4
- package/dist/block/face-host.d.ts.map +1 -1
- package/dist/block/face-host.js +19 -2
- package/dist/block/floorplan.d.ts +11 -1
- package/dist/block/floorplan.d.ts.map +1 -1
- package/dist/block/floorplan.js +81 -13
- package/dist/block/geometry.d.ts +2 -2
- package/dist/block/geometry.d.ts.map +1 -1
- package/dist/block/geometry.js +39 -24
- package/dist/block/hosted-edit.d.ts +13 -0
- package/dist/block/hosted-edit.d.ts.map +1 -0
- package/dist/block/hosted-edit.js +230 -0
- package/dist/block/last-operation.d.ts +1 -1
- package/dist/block/last-operation.d.ts.map +1 -1
- package/dist/block/last-operation.js +6 -4
- package/dist/block/material-slots.d.ts +1 -3
- package/dist/block/material-slots.d.ts.map +1 -1
- package/dist/block/material-slots.js +1 -11
- package/dist/block/modal-session.d.ts +2 -1
- package/dist/block/modal-session.d.ts.map +1 -1
- package/dist/block/modal-session.js +2 -2
- package/dist/block/paint.d.ts.map +1 -1
- package/dist/block/paint.js +4 -10
- package/dist/block/panel.d.ts.map +1 -1
- package/dist/block/panel.js +8 -3
- package/dist/block/selection.d.ts.map +1 -1
- package/dist/block/selection.js +83 -25
- package/dist/block/surface.d.ts +4 -0
- package/dist/block/surface.d.ts.map +1 -0
- package/dist/block/surface.js +54 -0
- package/dist/block/use-block-face-operation.d.ts +2 -2
- package/dist/block/use-block-face-operation.d.ts.map +1 -1
- package/dist/block/use-block-face-operation.js +25 -11
- package/dist/box-vent/definition.d.ts.map +1 -1
- package/dist/box-vent/definition.js +3 -5
- package/dist/box-vent/panel.d.ts.map +1 -1
- package/dist/box-vent/panel.js +5 -28
- package/dist/building/renderer.d.ts.map +1 -1
- package/dist/building/renderer.js +1 -1
- package/dist/cabinet/countertop-layout.d.ts +13 -2
- package/dist/cabinet/countertop-layout.d.ts.map +1 -1
- package/dist/cabinet/definition.d.ts.map +1 -1
- package/dist/cabinet/definition.js +4 -3
- package/dist/cabinet/floorplan.d.ts.map +1 -1
- package/dist/cabinet/floorplan.js +125 -28
- package/dist/cabinet/geometry/shared.d.ts +1 -2
- package/dist/cabinet/geometry/shared.d.ts.map +1 -1
- package/dist/cabinet/geometry/shared.js +1 -2
- package/dist/cabinet/hosted-resize.d.ts +3 -6
- package/dist/cabinet/hosted-resize.d.ts.map +1 -1
- package/dist/cabinet/hosted-resize.js +9 -153
- package/dist/cabinet/placement-snap.d.ts.map +1 -1
- package/dist/cabinet/placement-snap.js +4 -2
- package/dist/cabinet/run-layout.d.ts.map +1 -1
- package/dist/cabinet/run-layout.js +8 -5
- package/dist/cabinet/run-ops.d.ts +13 -2
- package/dist/cabinet/run-ops.d.ts.map +1 -1
- package/dist/cabinet/surfaces.d.ts +1 -0
- package/dist/cabinet/surfaces.d.ts.map +1 -1
- package/dist/cabinet/surfaces.js +13 -1
- package/dist/cabinet/tool.d.ts.map +1 -1
- package/dist/cabinet/tool.js +30 -28
- package/dist/cabinet/wall-snap.d.ts.map +1 -1
- package/dist/cabinet/wall-snap.js +8 -8
- package/dist/ceiling/boundary-editor.d.ts.map +1 -1
- package/dist/ceiling/boundary-editor.js +5 -3
- package/dist/ceiling/definition.d.ts +4 -4
- package/dist/ceiling/definition.d.ts.map +1 -1
- package/dist/ceiling/definition.js +20 -15
- package/dist/ceiling/floorplan-affordances.d.ts +84 -4
- package/dist/ceiling/floorplan-affordances.d.ts.map +1 -1
- package/dist/ceiling/floorplan-affordances.js +0 -1
- package/dist/ceiling/floorplan-move.d.ts.map +1 -1
- package/dist/ceiling/floorplan-move.js +0 -1
- package/dist/ceiling/floorplan.d.ts +1 -1
- package/dist/ceiling/floorplan.d.ts.map +1 -1
- package/dist/ceiling/floorplan.js +2 -1
- package/dist/ceiling/height-bounds.d.ts +19 -0
- package/dist/ceiling/height-bounds.d.ts.map +1 -0
- package/dist/ceiling/height-bounds.js +24 -0
- package/dist/ceiling/hole-editor.d.ts.map +1 -1
- package/dist/ceiling/hole-editor.js +3 -4
- package/dist/ceiling/materials.d.ts +1 -1
- package/dist/ceiling/materials.d.ts.map +1 -1
- package/dist/ceiling/materials.js +10 -3
- package/dist/ceiling/paint.d.ts +2 -8
- package/dist/ceiling/paint.d.ts.map +1 -1
- package/dist/ceiling/paint.js +121 -24
- package/dist/ceiling/panel.d.ts.map +1 -1
- package/dist/ceiling/panel.js +40 -23
- package/dist/ceiling/renderer.d.ts.map +1 -1
- package/dist/ceiling/renderer.js +43 -6
- package/dist/chimney/definition.d.ts.map +1 -1
- package/dist/chimney/definition.js +1 -0
- package/dist/chimney/move-tool.d.ts.map +1 -1
- package/dist/chimney/move-tool.js +8 -2
- package/dist/chimney/paint.d.ts.map +1 -1
- package/dist/chimney/paint.js +3 -10
- package/dist/column/definition.d.ts.map +1 -1
- package/dist/column/definition.js +34 -5
- package/dist/column/floorplan-affordances.d.ts.map +1 -1
- package/dist/column/floorplan-affordances.js +11 -1
- package/dist/column/floorplan.d.ts +1 -1
- package/dist/column/floorplan.d.ts.map +1 -1
- package/dist/column/floorplan.js +69 -12
- package/dist/column/hosted-resize.d.ts +215 -0
- package/dist/column/hosted-resize.d.ts.map +1 -0
- package/dist/column/hosted-resize.js +9 -0
- package/dist/column/panel.d.ts.map +1 -1
- package/dist/column/panel.js +153 -149
- package/dist/column/renderer.d.ts.map +1 -1
- package/dist/column/renderer.js +29 -105
- package/dist/column/shape.d.ts +22 -0
- package/dist/column/shape.d.ts.map +1 -0
- package/dist/column/shape.js +120 -0
- package/dist/column/surface.d.ts +4 -0
- package/dist/column/surface.d.ts.map +1 -0
- package/dist/column/surface.js +73 -0
- package/dist/construction-dimension/floorplan.js +7 -3
- package/dist/cupola/definition.d.ts.map +1 -1
- package/dist/cupola/definition.js +3 -8
- package/dist/cupola/panel.d.ts.map +1 -1
- package/dist/cupola/panel.js +5 -23
- package/dist/door/definition.d.ts.map +1 -1
- package/dist/door/definition.js +52 -4
- package/dist/door/door-math.d.ts +6 -11
- package/dist/door/door-math.d.ts.map +1 -1
- package/dist/door/door-math.js +13 -17
- package/dist/door/floorplan-affordances.d.ts.map +1 -1
- package/dist/door/floorplan-affordances.js +8 -12
- package/dist/door/floorplan-move.d.ts.map +1 -1
- package/dist/door/floorplan-move.js +3 -1
- package/dist/door/floorplan.d.ts.map +1 -1
- package/dist/door/floorplan.js +55 -21
- package/dist/door/mechanism.d.ts +4 -0
- package/dist/door/mechanism.d.ts.map +1 -0
- package/dist/door/mechanism.js +24 -0
- package/dist/door/move-tool.d.ts.map +1 -1
- package/dist/door/move-tool.js +75 -52
- package/dist/door/paint.d.ts.map +1 -1
- package/dist/door/paint.js +3 -0
- package/dist/door/panel.d.ts.map +1 -1
- package/dist/door/panel.js +54 -308
- package/dist/door/placement.d.ts +45 -0
- package/dist/door/placement.d.ts.map +1 -0
- package/dist/door/placement.js +51 -0
- package/dist/door/preview.d.ts.map +1 -1
- package/dist/door/preview.js +2 -0
- package/dist/door/renderer.d.ts.map +1 -1
- package/dist/door/renderer.js +3 -2
- package/dist/door/tool.d.ts.map +1 -1
- package/dist/door/tool.js +112 -23
- package/dist/dormer/csg-geometry.d.ts.map +1 -1
- package/dist/dormer/csg-geometry.js +2 -0
- package/dist/dormer/definition.d.ts.map +1 -1
- package/dist/dormer/definition.js +1 -0
- package/dist/dormer/paint.d.ts.map +1 -1
- package/dist/dormer/paint.js +2 -5
- package/dist/dormer/panel.d.ts.map +1 -1
- package/dist/dormer/panel.js +4 -14
- package/dist/downspout/definition.d.ts.map +1 -1
- package/dist/downspout/definition.js +3 -2
- package/dist/duct-fitting/definition.d.ts.map +1 -1
- package/dist/duct-fitting/definition.js +2 -1
- package/dist/duct-fitting/geometry.d.ts.map +1 -1
- package/dist/duct-fitting/geometry.js +1 -1
- package/dist/duct-fitting/move-tool.d.ts.map +1 -1
- package/dist/duct-fitting/move-tool.js +8 -2
- package/dist/duct-segment/definition.d.ts.map +1 -1
- package/dist/duct-segment/definition.js +2 -2
- package/dist/duct-segment/geometry.d.ts.map +1 -1
- package/dist/duct-segment/geometry.js +1 -1
- package/dist/duct-segment/move-tool.d.ts.map +1 -1
- package/dist/duct-segment/move-tool.js +8 -2
- package/dist/duct-segment/tool.d.ts.map +1 -1
- package/dist/duct-segment/tool.js +11 -0
- package/dist/duct-terminal/tool.d.ts.map +1 -1
- package/dist/duct-terminal/tool.js +77 -8
- package/dist/elevator/definition.d.ts.map +1 -1
- package/dist/elevator/definition.js +3 -2
- package/dist/elevator/panel.d.ts.map +1 -1
- package/dist/elevator/panel.js +5 -27
- package/dist/elevator/parametrics.d.ts.map +1 -1
- package/dist/elevator/parametrics.js +98 -1
- package/dist/elevator/renderer.d.ts.map +1 -1
- package/dist/elevator/renderer.js +3 -4
- package/dist/eyebrow-vent/definition.d.ts.map +1 -1
- package/dist/eyebrow-vent/definition.js +3 -5
- package/dist/eyebrow-vent/paint.d.ts.map +1 -1
- package/dist/eyebrow-vent/paint.js +3 -6
- package/dist/eyebrow-vent/panel.d.ts.map +1 -1
- package/dist/eyebrow-vent/panel.js +5 -23
- package/dist/fence/actions/move-endpoint.d.ts +1 -1
- package/dist/fence/actions/move-endpoint.d.ts.map +1 -1
- package/dist/fence/actions/move-endpoint.js +2 -1
- package/dist/fence/definition.d.ts +2 -1
- package/dist/fence/definition.d.ts.map +1 -1
- package/dist/fence/definition.js +84 -28
- package/dist/fence/drafting.d.ts +36 -0
- package/dist/fence/drafting.d.ts.map +1 -0
- package/dist/fence/drafting.js +210 -0
- package/dist/fence/feature-tool.d.ts +4 -0
- package/dist/fence/feature-tool.d.ts.map +1 -0
- package/dist/fence/feature-tool.js +140 -0
- package/dist/fence/features.d.ts +2 -0
- package/dist/fence/features.d.ts.map +1 -0
- package/dist/fence/features.js +12 -0
- package/dist/fence/floorplan-affordances.d.ts.map +1 -1
- package/dist/fence/floorplan-affordances.js +2 -1
- package/dist/fence/floorplan.d.ts +2 -3
- package/dist/fence/floorplan.d.ts.map +1 -1
- package/dist/fence/floorplan.js +131 -71
- package/dist/fence/geometry-parts.d.ts +50 -0
- package/dist/fence/geometry-parts.d.ts.map +1 -0
- package/dist/fence/geometry-parts.js +1144 -0
- package/dist/fence/geometry.d.ts +2 -3
- package/dist/fence/geometry.d.ts.map +1 -1
- package/dist/fence/geometry.js +84 -7
- package/dist/fence/index.d.ts +1 -0
- package/dist/fence/index.d.ts.map +1 -1
- package/dist/fence/index.js +1 -0
- package/dist/fence/inspector-editors.d.ts +15 -0
- package/dist/fence/inspector-editors.d.ts.map +1 -1
- package/dist/fence/inspector-editors.js +128 -3
- package/dist/fence/lift.d.ts.map +1 -1
- package/dist/fence/lift.js +5 -2
- package/dist/fence/move-tool.js +2 -1
- package/dist/fence/panel-model.d.ts +4 -0
- package/dist/fence/panel-model.d.ts.map +1 -0
- package/dist/fence/panel-model.js +12 -0
- package/dist/fence/parametrics.d.ts +0 -12
- package/dist/fence/parametrics.d.ts.map +1 -1
- package/dist/fence/parametrics.js +185 -18
- package/dist/fence/system.d.ts.map +1 -1
- package/dist/fence/system.js +141 -31
- package/dist/fence/tool.d.ts.map +1 -1
- package/dist/fence/tool.js +257 -48
- package/dist/fence-feature/actions.d.ts +7 -0
- package/dist/fence-feature/actions.d.ts.map +1 -0
- package/dist/fence-feature/actions.js +26 -0
- package/dist/fence-feature/definition.d.ts +4 -0
- package/dist/fence-feature/definition.d.ts.map +1 -0
- package/dist/fence-feature/definition.js +112 -0
- package/dist/fence-feature/floorplan-affordances.d.ts +3 -0
- package/dist/fence-feature/floorplan-affordances.d.ts.map +1 -0
- package/dist/fence-feature/floorplan-affordances.js +37 -0
- package/dist/fence-feature/floorplan.d.ts +4 -0
- package/dist/fence-feature/floorplan.d.ts.map +1 -0
- package/dist/fence-feature/floorplan.js +120 -0
- package/dist/fence-feature/geometry.d.ts +5 -0
- package/dist/fence-feature/geometry.d.ts.map +1 -0
- package/dist/fence-feature/geometry.js +43 -0
- package/dist/fence-feature/handles.d.ts +5 -0
- package/dist/fence-feature/handles.d.ts.map +1 -0
- package/dist/fence-feature/handles.js +84 -0
- package/dist/fence-feature/inspector.d.ts +6 -0
- package/dist/fence-feature/inspector.d.ts.map +1 -0
- package/dist/fence-feature/inspector.js +214 -0
- package/dist/fence-feature/interaction.d.ts +3 -0
- package/dist/fence-feature/interaction.d.ts.map +1 -0
- package/dist/fence-feature/interaction.js +41 -0
- package/dist/fence-feature/move-session.d.ts +9 -0
- package/dist/fence-feature/move-session.d.ts.map +1 -0
- package/dist/fence-feature/move-session.js +48 -0
- package/dist/fence-feature/move-tool.d.ts +5 -0
- package/dist/fence-feature/move-tool.d.ts.map +1 -0
- package/dist/fence-feature/move-tool.js +58 -0
- package/dist/fence-feature/pick-target.d.ts +7 -0
- package/dist/fence-feature/pick-target.d.ts.map +1 -0
- package/dist/fence-feature/pick-target.js +52 -0
- package/dist/floor-opening/definition.d.ts +3 -0
- package/dist/floor-opening/definition.d.ts.map +1 -0
- package/dist/floor-opening/definition.js +41 -0
- package/dist/floor-opening/floorplan.d.ts +156 -0
- package/dist/floor-opening/floorplan.d.ts.map +1 -0
- package/dist/floor-opening/floorplan.js +63 -0
- package/dist/guide/definition.d.ts.map +1 -1
- package/dist/guide/definition.js +1 -0
- package/dist/gutter/definition.d.ts.map +1 -1
- package/dist/gutter/definition.js +3 -2
- package/dist/hvac-equipment/tool.d.ts.map +1 -1
- package/dist/hvac-equipment/tool.js +8 -2
- package/dist/imported-mesh/definition.d.ts.map +1 -1
- package/dist/imported-mesh/definition.js +2 -0
- package/dist/imported-mesh/geometry.d.ts +1 -1
- package/dist/imported-mesh/geometry.d.ts.map +1 -1
- package/dist/imported-mesh/geometry.js +40 -12
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/item/authored-face-host.d.ts +10 -0
- package/dist/item/authored-face-host.d.ts.map +1 -0
- package/dist/item/authored-face-host.js +87 -0
- package/dist/item/authored-params.d.ts +15 -0
- package/dist/item/authored-params.d.ts.map +1 -0
- package/dist/item/authored-params.js +72 -0
- package/dist/item/definition.d.ts +2 -2
- package/dist/item/definition.d.ts.map +1 -1
- package/dist/item/definition.js +35 -4
- package/dist/item/floorplan-move.d.ts.map +1 -1
- package/dist/item/floorplan-move.js +209 -130
- package/dist/item/floorplan.d.ts +22 -0
- package/dist/item/floorplan.d.ts.map +1 -1
- package/dist/item/floorplan.js +95 -6
- package/dist/item/index.d.ts +1 -0
- package/dist/item/index.d.ts.map +1 -1
- package/dist/item/index.js +1 -0
- package/dist/item/model-loader.d.ts +2 -0
- package/dist/item/model-loader.d.ts.map +1 -1
- package/dist/item/model-loader.js +55 -23
- package/dist/item/move-tool.d.ts +1 -1
- package/dist/item/move-tool.d.ts.map +1 -1
- package/dist/item/move-tool.js +19 -11
- package/dist/item/paint.d.ts.map +1 -1
- package/dist/item/paint.js +5 -24
- package/dist/item/panel.d.ts +1 -3
- package/dist/item/panel.d.ts.map +1 -1
- package/dist/item/panel.js +20 -24
- package/dist/item/placement-notice.d.ts +14 -0
- package/dist/item/placement-notice.d.ts.map +1 -0
- package/dist/item/placement-notice.js +38 -0
- package/dist/item/plan-symbols.d.ts +67 -0
- package/dist/item/plan-symbols.d.ts.map +1 -0
- package/dist/item/plan-symbols.js +407 -0
- package/dist/item/renderer.d.ts +10 -0
- package/dist/item/renderer.d.ts.map +1 -1
- package/dist/item/renderer.js +72 -40
- package/dist/item/script-param-defaults.d.ts +12 -0
- package/dist/item/script-param-defaults.d.ts.map +1 -0
- package/dist/item/script-param-defaults.js +34 -0
- package/dist/lean-to-extension/definition.d.ts.map +1 -1
- package/dist/lean-to-extension/definition.js +1 -2
- package/dist/lean-to-extension/geometry.d.ts.map +1 -1
- package/dist/lean-to-extension/geometry.js +1 -1
- package/dist/lean-to-extension/layout.d.ts.map +1 -1
- package/dist/lean-to-extension/layout.js +2 -3
- package/dist/lean-to-extension/placement-validation.d.ts.map +1 -1
- package/dist/lean-to-extension/placement-validation.js +5 -5
- package/dist/lean-to-extension/tool.d.ts.map +1 -1
- package/dist/lean-to-extension/tool.js +5 -5
- package/dist/level/renderer.js +1 -1
- package/dist/lineset/move-tool.d.ts.map +1 -1
- package/dist/lineset/move-tool.js +8 -2
- package/dist/lineset/tool.d.ts.map +1 -1
- package/dist/lineset/tool.js +1 -0
- package/dist/liquid-line/move-tool.d.ts.map +1 -1
- package/dist/liquid-line/move-tool.js +8 -2
- package/dist/liquid-line/tool.d.ts.map +1 -1
- package/dist/liquid-line/tool.js +5 -1
- package/dist/measurement/definition.d.ts.map +1 -1
- package/dist/measurement/definition.js +2 -1
- package/dist/pipe-fitting/move-tool.d.ts.map +1 -1
- package/dist/pipe-fitting/move-tool.js +8 -2
- package/dist/pipe-segment/move-tool.d.ts.map +1 -1
- package/dist/pipe-segment/move-tool.js +8 -2
- package/dist/pipe-segment/tool.d.ts.map +1 -1
- package/dist/pipe-segment/tool.js +14 -3
- package/dist/pipe-trap/tool.d.ts.map +1 -1
- package/dist/pipe-trap/tool.js +7 -8
- package/dist/procedural-item/animation.d.ts +8 -0
- package/dist/procedural-item/animation.d.ts.map +1 -0
- package/dist/procedural-item/animation.js +116 -0
- package/dist/procedural-item/definition.d.ts.map +1 -1
- package/dist/procedural-item/definition.js +77 -8
- package/dist/procedural-item/geometry.d.ts +5 -1
- package/dist/procedural-item/geometry.d.ts.map +1 -1
- package/dist/procedural-item/geometry.js +239 -15
- package/dist/procedural-item/renderer.d.ts.map +1 -1
- package/dist/procedural-item/renderer.js +272 -23
- package/dist/ridge-vent/definition.d.ts.map +1 -1
- package/dist/ridge-vent/definition.js +1 -0
- package/dist/ridge-vent/panel.d.ts.map +1 -1
- package/dist/ridge-vent/panel.js +5 -23
- package/dist/ridge-vent/renderer.d.ts.map +1 -1
- package/dist/ridge-vent/renderer.js +9 -8
- package/dist/roof/definition.d.ts.map +1 -1
- package/dist/roof/definition.js +8 -2
- package/dist/roof/floorplan.d.ts +8 -0
- package/dist/roof/floorplan.d.ts.map +1 -1
- package/dist/roof/floorplan.js +194 -18
- package/dist/roof/panel-model.d.ts +4 -0
- package/dist/roof/panel-model.d.ts.map +1 -0
- package/dist/roof/panel-model.js +155 -0
- package/dist/roof/panel.d.ts.map +1 -1
- package/dist/roof/panel.js +5 -13
- package/dist/roof/parametrics.d.ts.map +1 -1
- package/dist/roof/parametrics.js +16 -1
- package/dist/roof/renderer.d.ts.map +1 -1
- package/dist/roof/renderer.js +5 -2
- package/dist/roof-segment/definition.d.ts.map +1 -1
- package/dist/roof-segment/definition.js +1 -0
- package/dist/roof-segment/panel.d.ts.map +1 -1
- package/dist/roof-segment/panel.js +5 -24
- package/dist/roof-segment/parametrics.d.ts.map +1 -1
- package/dist/roof-segment/parametrics.js +176 -1
- package/dist/roof-segment/renderer.d.ts.map +1 -1
- package/dist/roof-segment/renderer.js +17 -8
- package/dist/scan/definition.d.ts.map +1 -1
- package/dist/scan/definition.js +1 -0
- package/dist/separator/definition.d.ts +3 -0
- package/dist/separator/definition.d.ts.map +1 -0
- package/dist/separator/definition.js +39 -0
- package/dist/separator/renderer.d.ts +5 -0
- package/dist/separator/renderer.d.ts.map +1 -0
- package/dist/separator/renderer.js +36 -0
- package/dist/shared/commit-opening-move.d.ts +4 -0
- package/dist/shared/commit-opening-move.d.ts.map +1 -0
- package/dist/shared/commit-opening-move.js +9 -0
- package/dist/shared/curtain-opening-limits.d.ts +14 -0
- package/dist/shared/curtain-opening-limits.d.ts.map +1 -0
- package/dist/shared/curtain-opening-limits.js +53 -0
- package/dist/shared/draft-axis-guides.d.ts +0 -6
- package/dist/shared/draft-axis-guides.d.ts.map +1 -1
- package/dist/shared/draft-axis-guides.js +1 -8
- package/dist/shared/duct-body-paint.d.ts +0 -4
- package/dist/shared/duct-body-paint.d.ts.map +1 -1
- package/dist/shared/duct-body-paint.js +1 -5
- package/dist/shared/hosted-resize.d.ts +12 -0
- package/dist/shared/hosted-resize.d.ts.map +1 -0
- package/dist/shared/hosted-resize.js +166 -0
- package/dist/shared/item-interaction-actions.d.ts +6 -0
- package/dist/shared/item-interaction-actions.d.ts.map +1 -0
- package/dist/shared/item-interaction-actions.js +27 -0
- package/dist/shared/item-interactions.d.ts +9 -0
- package/dist/shared/item-interactions.d.ts.map +1 -0
- package/dist/shared/item-interactions.js +74 -0
- package/dist/shared/item-light-placement.d.ts +2 -0
- package/dist/shared/item-light-placement.d.ts.map +1 -0
- package/dist/shared/item-light-placement.js +3 -0
- package/dist/shared/move-roof-tool.js +2 -1
- package/dist/shared/node-batch/batchable.d.ts +12 -0
- package/dist/shared/node-batch/batchable.d.ts.map +1 -0
- package/dist/shared/node-batch/batchable.js +41 -0
- package/dist/shared/node-batch/candidates.d.ts +7 -5
- package/dist/shared/node-batch/candidates.d.ts.map +1 -1
- package/dist/shared/node-batch/candidates.js +43 -59
- package/dist/shared/node-batch/release.d.ts +8 -0
- package/dist/shared/node-batch/release.d.ts.map +1 -0
- package/dist/shared/node-batch/release.js +16 -0
- package/dist/shared/node-batch/system.d.ts.map +1 -1
- package/dist/shared/node-batch/system.js +17 -12
- package/dist/shared/node-batch/types.d.ts +4 -1
- package/dist/shared/node-batch/types.d.ts.map +1 -1
- package/dist/shared/opening-documentation.d.ts +13 -1
- package/dist/shared/opening-documentation.d.ts.map +1 -1
- package/dist/shared/opening-documentation.js +245 -59
- package/dist/shared/opening-grid-follow.d.ts +8 -0
- package/dist/shared/opening-grid-follow.d.ts.map +1 -0
- package/dist/shared/opening-grid-follow.js +12 -0
- package/dist/shared/opening-guides-runtime.d.ts.map +1 -1
- package/dist/shared/opening-guides-runtime.js +17 -14
- package/dist/shared/opening-placement-dimensions.d.ts.map +1 -1
- package/dist/shared/opening-placement-dimensions.js +3 -3
- package/dist/shared/opening-plane-offset.d.ts +23 -0
- package/dist/shared/opening-plane-offset.d.ts.map +1 -0
- package/dist/shared/opening-plane-offset.js +24 -0
- package/dist/shared/opening-property-preview-host.d.ts +3 -0
- package/dist/shared/opening-property-preview-host.d.ts.map +1 -0
- package/dist/shared/opening-property-preview-host.js +21 -0
- package/dist/shared/opening-property-preview.d.ts +19 -0
- package/dist/shared/opening-property-preview.d.ts.map +1 -0
- package/dist/shared/opening-property-preview.js +99 -0
- package/dist/shared/polygon-centroid-move.d.ts.map +1 -1
- package/dist/shared/polygon-centroid-move.js +4 -1
- package/dist/shared/polygon-vertex-affordance.d.ts.map +1 -1
- package/dist/shared/polygon-vertex-affordance.js +19 -15
- package/dist/shared/resting-surface-plan.d.ts +2 -1
- package/dist/shared/resting-surface-plan.d.ts.map +1 -1
- package/dist/shared/resting-surface-plan.js +29 -4
- package/dist/shared/run-hangers.d.ts.map +1 -1
- package/dist/shared/run-hangers.js +5 -4
- package/dist/shared/scripted-opening-handles.d.ts +18 -0
- package/dist/shared/scripted-opening-handles.d.ts.map +1 -0
- package/dist/shared/scripted-opening-handles.js +53 -0
- package/dist/shared/scripted-opening.d.ts +25 -0
- package/dist/shared/scripted-opening.d.ts.map +1 -0
- package/dist/shared/scripted-opening.js +72 -0
- package/dist/shared/slot-paint.d.ts +14 -2
- package/dist/shared/slot-paint.d.ts.map +1 -1
- package/dist/shared/slot-paint.js +29 -29
- package/dist/shared/surface-counterparts.d.ts +12 -0
- package/dist/shared/surface-counterparts.d.ts.map +1 -0
- package/dist/shared/surface-counterparts.js +27 -0
- package/dist/shared/surface-paint.d.ts.map +1 -1
- package/dist/shared/surface-paint.js +2 -5
- package/dist/shared/swap-preview-material.d.ts +11 -0
- package/dist/shared/swap-preview-material.d.ts.map +1 -0
- package/dist/shared/swap-preview-material.js +16 -0
- package/dist/shared/system-checks.d.ts.map +1 -1
- package/dist/shared/system-checks.js +5 -3
- package/dist/shared/wall-attach-target.d.ts +4 -10
- package/dist/shared/wall-attach-target.d.ts.map +1 -1
- package/dist/shared/wall-attach-target.js +6 -63
- package/dist/shared/wall-event-from-grid.d.ts +5 -0
- package/dist/shared/wall-event-from-grid.d.ts.map +1 -0
- package/dist/shared/wall-event-from-grid.js +36 -0
- package/dist/shared/wall-opening-ceiling.d.ts +5 -15
- package/dist/shared/wall-opening-ceiling.d.ts.map +1 -1
- package/dist/shared/wall-opening-ceiling.js +10 -18
- package/dist/shelf/definition.d.ts.map +1 -1
- package/dist/shelf/definition.js +4 -2
- package/dist/shelf/floorplan.d.ts.map +1 -1
- package/dist/shelf/floorplan.js +9 -2
- package/dist/shelf/geometry.d.ts.map +1 -1
- package/dist/shelf/geometry.js +1 -2
- package/dist/shelf/paint.d.ts.map +1 -1
- package/dist/shelf/paint.js +4 -10
- package/dist/site/line-ribbon.d.ts +31 -0
- package/dist/site/line-ribbon.d.ts.map +1 -0
- package/dist/site/line-ribbon.js +117 -0
- package/dist/site/lot-mask.d.ts +18 -0
- package/dist/site/lot-mask.d.ts.map +1 -0
- package/dist/site/lot-mask.js +35 -0
- package/dist/site/panel.d.ts +10 -0
- package/dist/site/panel.d.ts.map +1 -0
- package/dist/site/panel.js +155 -0
- package/dist/site/parametrics.d.ts +7 -0
- package/dist/site/parametrics.d.ts.map +1 -1
- package/dist/site/parametrics.js +8 -0
- package/dist/site/recessed-slab-ground-holes.d.ts.map +1 -1
- package/dist/site/recessed-slab-ground-holes.js +5 -2
- package/dist/site/renderer.d.ts.map +1 -1
- package/dist/site/renderer.js +158 -20
- package/dist/site/setbacks.d.ts +33 -0
- package/dist/site/setbacks.d.ts.map +1 -0
- package/dist/site/setbacks.js +204 -0
- package/dist/site/terrain-geometry.d.ts +28 -1
- package/dist/site/terrain-geometry.d.ts.map +1 -1
- package/dist/site/terrain-geometry.js +78 -4
- package/dist/site/terrain-holes.d.ts +15 -0
- package/dist/site/terrain-holes.d.ts.map +1 -0
- package/dist/site/terrain-holes.js +74 -0
- package/dist/site/terrain-mesh.d.ts +9 -2
- package/dist/site/terrain-mesh.d.ts.map +1 -1
- package/dist/site/terrain-mesh.js +36 -9
- package/dist/site/terrain-renderer.d.ts +9 -2
- package/dist/site/terrain-renderer.d.ts.map +1 -1
- package/dist/site/terrain-renderer.js +14 -4
- package/dist/skylight/definition.d.ts.map +1 -1
- package/dist/skylight/definition.js +1 -0
- package/dist/slab/boundary-editor.d.ts +1 -1
- package/dist/slab/boundary-editor.d.ts.map +1 -1
- package/dist/slab/boundary-editor.js +13 -13
- package/dist/slab/definition.d.ts.map +1 -1
- package/dist/slab/definition.js +23 -3
- package/dist/slab/dependency-tracker.d.ts.map +1 -1
- package/dist/slab/dependency-tracker.js +67 -7
- package/dist/slab/elevation-limit.d.ts.map +1 -1
- package/dist/slab/elevation-limit.js +2 -2
- package/dist/slab/floorplan-affordances.d.ts +176 -4
- package/dist/slab/floorplan-affordances.d.ts.map +1 -1
- package/dist/slab/floorplan-affordances.js +0 -1
- package/dist/slab/floorplan-move.d.ts.map +1 -1
- package/dist/slab/floorplan-move.js +3 -4
- package/dist/slab/floorplan.d.ts +7 -0
- package/dist/slab/floorplan.d.ts.map +1 -1
- package/dist/slab/floorplan.js +22 -5
- package/dist/slab/geometry.d.ts.map +1 -1
- package/dist/slab/geometry.js +186 -76
- package/dist/slab/move-tool.js +7 -6
- package/dist/slab/paint.d.ts +18 -5
- package/dist/slab/paint.d.ts.map +1 -1
- package/dist/slab/paint.js +458 -9
- package/dist/slab/panel.d.ts.map +1 -1
- package/dist/slab/panel.js +28 -9
- package/dist/slab/placement-ownership.d.ts +2 -1
- package/dist/slab/placement-ownership.d.ts.map +1 -1
- package/dist/slab/placement-ownership.js +2 -2
- package/dist/slab/surface-split.d.ts +24 -0
- package/dist/slab/surface-split.d.ts.map +1 -0
- package/dist/slab/surface-split.js +389 -0
- package/dist/slab/tool.d.ts.map +1 -1
- package/dist/slab/tool.js +3 -3
- package/dist/solar-panel/definition.d.ts.map +1 -1
- package/dist/solar-panel/definition.js +1 -0
- package/dist/spawn/definition.d.ts.map +1 -1
- package/dist/spawn/definition.js +1 -0
- package/dist/stair/baluster-geometry.d.ts +21 -0
- package/dist/stair/baluster-geometry.d.ts.map +1 -0
- package/dist/stair/baluster-geometry.js +74 -0
- package/dist/stair/baluster-guard.d.ts +50 -0
- package/dist/stair/baluster-guard.d.ts.map +1 -0
- package/dist/stair/baluster-guard.js +71 -0
- package/dist/stair/boards-guard.d.ts +37 -0
- package/dist/stair/boards-guard.d.ts.map +1 -0
- package/dist/stair/boards-guard.js +61 -0
- package/dist/stair/cable-guard.d.ts +39 -0
- package/dist/stair/cable-guard.d.ts.map +1 -0
- package/dist/stair/cable-guard.js +105 -0
- package/dist/stair/construction-controls.d.ts +15 -0
- package/dist/stair/construction-controls.d.ts.map +1 -0
- package/dist/stair/construction-controls.js +29 -0
- package/dist/stair/continuous-railings.d.ts +10 -0
- package/dist/stair/continuous-railings.d.ts.map +1 -0
- package/dist/stair/continuous-railings.js +159 -0
- package/dist/stair/definition.d.ts.map +1 -1
- package/dist/stair/definition.js +18 -37
- package/dist/stair/documentation.d.ts +1 -1
- package/dist/stair/documentation.d.ts.map +1 -1
- package/dist/stair/documentation.js +10 -17
- package/dist/stair/floorplan-affordances.d.ts.map +1 -1
- package/dist/stair/floorplan-affordances.js +9 -25
- package/dist/stair/floorplan.d.ts +1 -23
- package/dist/stair/floorplan.d.ts.map +1 -1
- package/dist/stair/floorplan.js +102 -86
- package/dist/stair/glass-guard.d.ts +72 -0
- package/dist/stair/glass-guard.d.ts.map +1 -0
- package/dist/stair/glass-guard.js +167 -0
- package/dist/stair/guard-path.d.ts +119 -0
- package/dist/stair/guard-path.d.ts.map +1 -0
- package/dist/stair/guard-path.js +208 -0
- package/dist/stair/materials.d.ts +11 -0
- package/dist/stair/materials.d.ts.map +1 -0
- package/dist/stair/materials.js +51 -0
- package/dist/stair/metal-guard.d.ts +38 -0
- package/dist/stair/metal-guard.d.ts.map +1 -0
- package/dist/stair/metal-guard.js +79 -0
- package/dist/stair/paint.d.ts +32 -0
- package/dist/stair/paint.d.ts.map +1 -1
- package/dist/stair/paint.js +75 -36
- package/dist/stair/panel.d.ts.map +1 -1
- package/dist/stair/panel.js +154 -17
- package/dist/stair/parametrics.d.ts +1 -1
- package/dist/stair/parametrics.d.ts.map +1 -1
- package/dist/stair/parametrics.js +181 -1
- package/dist/stair/plan-entry.d.ts +31 -0
- package/dist/stair/plan-entry.d.ts.map +1 -0
- package/dist/stair/plan-entry.js +325 -0
- package/dist/stair/post-and-rail-guard.d.ts +31 -0
- package/dist/stair/post-and-rail-guard.d.ts.map +1 -0
- package/dist/stair/post-and-rail-guard.js +63 -0
- package/dist/stair/railing-controls.d.ts +9 -0
- package/dist/stair/railing-controls.d.ts.map +1 -0
- package/dist/stair/railing-controls.js +49 -0
- package/dist/stair/renderer.d.ts.map +1 -1
- package/dist/stair/renderer.js +259 -259
- package/dist/stair/use-stair-render-data.d.ts +317 -0
- package/dist/stair/use-stair-render-data.d.ts.map +1 -0
- package/dist/stair/use-stair-render-data.js +73 -0
- package/dist/stair-segment/definition.d.ts.map +1 -1
- package/dist/stair-segment/definition.js +52 -10
- package/dist/stair-segment/panel.d.ts.map +1 -1
- package/dist/stair-segment/panel.js +36 -42
- package/dist/stair-segment/parametrics.d.ts +1 -1
- package/dist/stair-segment/parametrics.d.ts.map +1 -1
- package/dist/stair-segment/parametrics.js +94 -1
- package/dist/stair-segment/renderer.d.ts.map +1 -1
- package/dist/stair-segment/renderer.js +16 -28
- package/dist/turbine-vent/definition.d.ts.map +1 -1
- package/dist/turbine-vent/definition.js +3 -5
- package/dist/turbine-vent/paint.d.ts.map +1 -1
- package/dist/turbine-vent/paint.js +2 -5
- package/dist/turbine-vent/panel.d.ts.map +1 -1
- package/dist/turbine-vent/panel.js +5 -23
- package/dist/unit/unit-panel.d.ts.map +1 -1
- package/dist/unit/unit-panel.js +6 -1
- package/dist/wall/actions.d.ts +3 -0
- package/dist/wall/actions.d.ts.map +1 -0
- package/dist/wall/actions.js +61 -0
- package/dist/wall/construction-dimensions.js +8 -5
- package/dist/wall/contextual-dimensions.js +4 -4
- package/dist/wall/curtain-opening-frame.d.ts +14 -0
- package/dist/wall/curtain-opening-frame.d.ts.map +1 -0
- package/dist/wall/curtain-opening-frame.js +111 -0
- package/dist/wall/curtain-panel-highlight.d.ts +3 -0
- package/dist/wall/curtain-panel-highlight.d.ts.map +1 -0
- package/dist/wall/curtain-panel-highlight.js +113 -0
- package/dist/wall/curtain-wall-adapter.d.ts +3 -0
- package/dist/wall/curtain-wall-adapter.d.ts.map +1 -0
- package/dist/wall/curtain-wall-adapter.js +55 -0
- package/dist/wall/curtain-wall-floorplan.d.ts +3 -0
- package/dist/wall/curtain-wall-floorplan.d.ts.map +1 -0
- package/dist/wall/curtain-wall-floorplan.js +91 -0
- package/dist/wall/curtain-wall-geometry.d.ts +4 -0
- package/dist/wall/curtain-wall-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-geometry.js +226 -0
- package/dist/wall/curtain-wall-layout.d.ts +16 -0
- package/dist/wall/curtain-wall-layout.d.ts.map +1 -0
- package/dist/wall/curtain-wall-layout.js +176 -0
- package/dist/wall/curtain-wall-materials.d.ts +5 -0
- package/dist/wall/curtain-wall-materials.d.ts.map +1 -0
- package/dist/wall/curtain-wall-materials.js +55 -0
- package/dist/wall/curtain-wall-panel.d.ts +14 -0
- package/dist/wall/curtain-wall-panel.d.ts.map +1 -0
- package/dist/wall/curtain-wall-panel.js +167 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts +5 -0
- package/dist/wall/curtain-wall-piece-geometry.d.ts.map +1 -0
- package/dist/wall/curtain-wall-piece-geometry.js +220 -0
- package/dist/wall/curtain-wall-shadow.d.ts +4 -0
- package/dist/wall/curtain-wall-shadow.d.ts.map +1 -0
- package/dist/wall/curtain-wall-shadow.js +15 -0
- package/dist/wall/curve-tool.d.ts.map +1 -1
- package/dist/wall/curve-tool.js +4 -0
- package/dist/wall/definition.d.ts +0 -15
- package/dist/wall/definition.d.ts.map +1 -1
- package/dist/wall/definition.js +92 -7
- package/dist/wall/floorplan-move.d.ts +1 -1
- package/dist/wall/floorplan-move.d.ts.map +1 -1
- package/dist/wall/floorplan-move.js +20 -83
- package/dist/wall/floorplan-tool.d.ts +4 -0
- package/dist/wall/floorplan-tool.d.ts.map +1 -0
- package/dist/wall/floorplan-tool.js +106 -0
- package/dist/wall/floorplan.d.ts +3 -1
- package/dist/wall/floorplan.d.ts.map +1 -1
- package/dist/wall/floorplan.js +189 -22
- package/dist/wall/length-patch.d.ts +3 -0
- package/dist/wall/length-patch.d.ts.map +1 -0
- package/dist/wall/length-patch.js +14 -0
- package/dist/wall/measurement.d.ts.map +1 -1
- package/dist/wall/measurement.js +5 -5
- package/dist/wall/move-endpoint-tool.d.ts.map +1 -1
- package/dist/wall/move-endpoint-tool.js +20 -7
- package/dist/wall/move-shared.d.ts.map +1 -1
- package/dist/wall/move-shared.js +11 -7
- package/dist/wall/move-tool.d.ts.map +1 -1
- package/dist/wall/move-tool.js +140 -148
- package/dist/wall/paint.d.ts +26 -15
- package/dist/wall/paint.d.ts.map +1 -1
- package/dist/wall/paint.js +339 -115
- package/dist/wall/panel-model.d.ts +22 -0
- package/dist/wall/panel-model.d.ts.map +1 -0
- package/dist/wall/panel-model.js +175 -0
- package/dist/wall/panel.d.ts.map +1 -1
- package/dist/wall/panel.js +233 -61
- package/dist/wall/parametrics.d.ts.map +1 -1
- package/dist/wall/parametrics.js +3 -0
- package/dist/wall/property-preview.d.ts +7 -0
- package/dist/wall/property-preview.d.ts.map +1 -0
- package/dist/wall/property-preview.js +31 -0
- package/dist/wall/rectangle-command.d.ts +248 -0
- package/dist/wall/rectangle-command.d.ts.map +1 -0
- package/dist/wall/rectangle-command.js +22 -0
- package/dist/wall/rectangle-tool.d.ts +2 -0
- package/dist/wall/rectangle-tool.d.ts.map +1 -0
- package/dist/wall/rectangle-tool.js +165 -0
- package/dist/wall/renderer.d.ts.map +1 -1
- package/dist/wall/renderer.js +9 -4
- package/dist/wall/split-floorplan-layer.d.ts +4 -0
- package/dist/wall/split-floorplan-layer.d.ts.map +1 -0
- package/dist/wall/split-floorplan-layer.js +71 -0
- package/dist/wall/split-pointer.d.ts +3 -0
- package/dist/wall/split-pointer.d.ts.map +1 -0
- package/dist/wall/split-pointer.js +95 -0
- package/dist/wall/split-preview.d.ts +55 -0
- package/dist/wall/split-preview.d.ts.map +1 -0
- package/dist/wall/split-preview.js +106 -0
- package/dist/wall/split-session.d.ts +16 -0
- package/dist/wall/split-session.d.ts.map +1 -0
- package/dist/wall/split-session.js +144 -0
- package/dist/wall/split-store.d.ts +16 -0
- package/dist/wall/split-store.d.ts.map +1 -0
- package/dist/wall/split-store.js +6 -0
- package/dist/wall/split-tool.d.ts +10 -0
- package/dist/wall/split-tool.d.ts.map +1 -0
- package/dist/wall/split-tool.js +95 -0
- package/dist/wall/system.d.ts.map +1 -1
- package/dist/wall/system.js +39 -5
- package/dist/wall/tool.d.ts.map +1 -1
- package/dist/wall/tool.js +114 -50
- package/dist/wall/treatment-level-data.d.ts +3 -2
- package/dist/wall/treatment-level-data.d.ts.map +1 -1
- package/dist/wall/treatment-level-data.js +17 -13
- package/dist/wall/treatments.d.ts +10 -10
- package/dist/wall/treatments.d.ts.map +1 -1
- package/dist/wall/treatments.js +67 -54
- package/dist/wall/wall-batch-system.d.ts +7 -0
- package/dist/wall/wall-batch-system.d.ts.map +1 -1
- package/dist/wall/wall-batch-system.js +38 -3
- package/dist/wall/wall-batch.d.ts +6 -0
- package/dist/wall/wall-batch.d.ts.map +1 -1
- package/dist/wall/wall-batch.js +7 -1
- package/dist/window/definition.d.ts.map +1 -1
- package/dist/window/definition.js +60 -5
- package/dist/window/floorplan-affordances.d.ts.map +1 -1
- package/dist/window/floorplan-affordances.js +8 -10
- package/dist/window/floorplan-move.d.ts.map +1 -1
- package/dist/window/floorplan-move.js +3 -1
- package/dist/window/floorplan.d.ts.map +1 -1
- package/dist/window/floorplan.js +145 -60
- package/dist/window/mechanism.d.ts +4 -0
- package/dist/window/mechanism.d.ts.map +1 -0
- package/dist/window/mechanism.js +20 -0
- package/dist/window/move-tool.d.ts.map +1 -1
- package/dist/window/move-tool.js +83 -54
- package/dist/window/paint.d.ts.map +1 -1
- package/dist/window/paint.js +3 -0
- package/dist/window/panel.d.ts.map +1 -1
- package/dist/window/panel.js +50 -144
- package/dist/window/placement.d.ts +23 -0
- package/dist/window/placement.d.ts.map +1 -0
- package/dist/window/placement.js +66 -0
- package/dist/window/preview.d.ts.map +1 -1
- package/dist/window/preview.js +2 -0
- package/dist/window/renderer.d.ts.map +1 -1
- package/dist/window/renderer.js +3 -2
- package/dist/window/tool.d.ts.map +1 -1
- package/dist/window/tool.js +130 -26
- package/dist/window/window-math.d.ts +6 -14
- package/dist/window/window-math.d.ts.map +1 -1
- package/dist/window/window-math.js +13 -22
- package/dist/zone/contextual-dimensions.d.ts.map +1 -1
- package/dist/zone/contextual-dimensions.js +6 -28
- package/dist/zone/definition.d.ts.map +1 -1
- package/dist/zone/definition.js +4 -3
- package/dist/zone/floorplan-affordances.d.ts +200 -0
- package/dist/zone/floorplan-affordances.d.ts.map +1 -1
- package/dist/zone/floorplan.d.ts +1 -1
- package/dist/zone/floorplan.d.ts.map +1 -1
- package/dist/zone/floorplan.js +93 -53
- package/dist/zone/quantities-panel.d.ts.map +1 -1
- package/dist/zone/quantities-panel.js +6 -33
- package/dist/zone/quick-measurement.d.ts +2 -2
- package/dist/zone/quick-measurement.d.ts.map +1 -1
- package/dist/zone/quick-measurement.js +6 -5
- package/dist/zone/renderer.d.ts +1 -1
- package/dist/zone/renderer.d.ts.map +1 -1
- package/dist/zone/renderer.js +58 -146
- package/dist/zone/room-clear-dimensions.js +3 -3
- package/dist/zone/room-documentation.d.ts.map +1 -1
- package/dist/zone/room-documentation.js +2 -6
- package/package.json +12 -12
- package/dist/block/slots.d.ts +0 -4
- package/dist/block/slots.d.ts.map +0 -1
- package/dist/block/slots.js +0 -17
- package/dist/cabinet/slots.d.ts +0 -4
- package/dist/cabinet/slots.d.ts.map +0 -1
- package/dist/cabinet/slots.js +0 -24
- package/dist/ceiling/slots.d.ts +0 -6
- package/dist/ceiling/slots.d.ts.map +0 -1
- package/dist/ceiling/slots.js +0 -7
- package/dist/column/slots.d.ts +0 -9
- package/dist/column/slots.d.ts.map +0 -1
- package/dist/column/slots.js +0 -19
- package/dist/door/slots.d.ts +0 -9
- package/dist/door/slots.d.ts.map +0 -1
- package/dist/door/slots.js +0 -20
- package/dist/elevator/slots.d.ts +0 -8
- package/dist/elevator/slots.d.ts.map +0 -1
- package/dist/elevator/slots.js +0 -17
- package/dist/fence/slots.d.ts +0 -10
- package/dist/fence/slots.d.ts.map +0 -1
- package/dist/fence/slots.js +0 -23
- package/dist/lean-to-extension/slots.d.ts +0 -5
- package/dist/lean-to-extension/slots.d.ts.map +0 -1
- package/dist/lean-to-extension/slots.js +0 -15
- package/dist/shared/opening-documentation-fields.d.ts +0 -16
- package/dist/shared/opening-documentation-fields.d.ts.map +0 -1
- package/dist/shared/opening-documentation-fields.js +0 -54
- package/dist/shelf/slots.d.ts +0 -9
- package/dist/shelf/slots.d.ts.map +0 -1
- package/dist/shelf/slots.js +0 -30
- package/dist/slab/slots.d.ts +0 -10
- package/dist/slab/slots.d.ts.map +0 -1
- package/dist/slab/slots.js +0 -20
- package/dist/stair/floor-stack.d.ts +0 -10
- package/dist/stair/floor-stack.d.ts.map +0 -1
- package/dist/stair/floor-stack.js +0 -115
- package/dist/stair/slots.d.ts +0 -7
- package/dist/stair/slots.d.ts.map +0 -1
- package/dist/stair/slots.js +0 -13
- package/dist/wall/slots.d.ts +0 -10
- package/dist/wall/slots.d.ts.map +0 -1
- package/dist/wall/slots.js +0 -84
- package/dist/window/slots.d.ts +0 -5
- package/dist/window/slots.d.ts.map +0 -1
- package/dist/window/slots.js +0 -11
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { containsPoint, difference, floorStepRole, intersection, plateSideRuns, union, } from '@pascal-app/core';
|
|
2
|
+
import { BufferGeometry, Float32BufferAttribute, ShapeUtils, Vector2 } from 'three';
|
|
3
|
+
const TOP_NORMAL_THRESHOLD = 0.5;
|
|
4
|
+
function readTriangles(geometry) {
|
|
5
|
+
const position = geometry.getAttribute('position');
|
|
6
|
+
const uv = geometry.getAttribute('uv');
|
|
7
|
+
const index = geometry.getIndex();
|
|
8
|
+
// A collapsed slab builds an empty geometry with no position attribute.
|
|
9
|
+
const count = index ? index.count / 3 : (position?.count ?? 0) / 3;
|
|
10
|
+
const triangles = [];
|
|
11
|
+
for (let t = 0; t < count; t += 1) {
|
|
12
|
+
const corners = [0, 1, 2].map((offset) => {
|
|
13
|
+
const i = index ? index.getX(t * 3 + offset) : t * 3 + offset;
|
|
14
|
+
return {
|
|
15
|
+
x: position.getX(i),
|
|
16
|
+
y: position.getY(i),
|
|
17
|
+
z: position.getZ(i),
|
|
18
|
+
u: uv ? uv.getX(i) : 0,
|
|
19
|
+
v: uv ? uv.getY(i) : 0,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
triangles.push(corners);
|
|
23
|
+
}
|
|
24
|
+
return triangles;
|
|
25
|
+
}
|
|
26
|
+
function faceNormalY(triangle) {
|
|
27
|
+
const [a, b, c] = triangle;
|
|
28
|
+
const abx = b.x - a.x;
|
|
29
|
+
const aby = b.y - a.y;
|
|
30
|
+
const abz = b.z - a.z;
|
|
31
|
+
const acx = c.x - a.x;
|
|
32
|
+
const acy = c.y - a.y;
|
|
33
|
+
const acz = c.z - a.z;
|
|
34
|
+
const nx = aby * acz - abz * acy;
|
|
35
|
+
const ny = abz * acx - abx * acz;
|
|
36
|
+
const nz = abx * acy - aby * acx;
|
|
37
|
+
const length = Math.hypot(nx, ny, nz);
|
|
38
|
+
return length > 1e-12 ? ny / length : 0;
|
|
39
|
+
}
|
|
40
|
+
function buildGeometry(triangles, withUv) {
|
|
41
|
+
const positions = [];
|
|
42
|
+
const uvs = [];
|
|
43
|
+
for (const triangle of triangles) {
|
|
44
|
+
for (const vertex of triangle) {
|
|
45
|
+
positions.push(vertex.x, vertex.y, vertex.z);
|
|
46
|
+
if (withUv)
|
|
47
|
+
uvs.push(vertex.u, vertex.v);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const geometry = new BufferGeometry();
|
|
51
|
+
geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));
|
|
52
|
+
if (uvs.length > 0) {
|
|
53
|
+
geometry.setAttribute('uv', new Float32BufferAttribute(uvs, 2));
|
|
54
|
+
geometry.setAttribute('uv2', new Float32BufferAttribute(uvs.slice(), 2));
|
|
55
|
+
}
|
|
56
|
+
geometry.computeVertexNormals();
|
|
57
|
+
return geometry;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Rebuild a point of the source triangle from its XZ position. Height and UV
|
|
61
|
+
* come from the triangle's own plane, so a clipped piece sits exactly where the
|
|
62
|
+
* original did and keeps the plate's UV mapping.
|
|
63
|
+
*/
|
|
64
|
+
function sampleTriangle(triangle, x, z) {
|
|
65
|
+
const [a, b, c] = triangle;
|
|
66
|
+
const v0x = b.x - a.x;
|
|
67
|
+
const v0z = b.z - a.z;
|
|
68
|
+
const v1x = c.x - a.x;
|
|
69
|
+
const v1z = c.z - a.z;
|
|
70
|
+
const denominator = v0x * v1z - v1x * v0z;
|
|
71
|
+
if (Math.abs(denominator) < 1e-18)
|
|
72
|
+
return { x, y: a.y, z, u: a.u, v: a.v };
|
|
73
|
+
const px = x - a.x;
|
|
74
|
+
const pz = z - a.z;
|
|
75
|
+
const beta = (px * v1z - v1x * pz) / denominator;
|
|
76
|
+
const gamma = (v0x * pz - px * v0z) / denominator;
|
|
77
|
+
const alpha = 1 - beta - gamma;
|
|
78
|
+
return {
|
|
79
|
+
x,
|
|
80
|
+
z,
|
|
81
|
+
y: alpha * a.y + beta * b.y + gamma * c.y,
|
|
82
|
+
u: alpha * a.u + beta * b.u + gamma * c.u,
|
|
83
|
+
v: alpha * a.v + beta * b.v + gamma * c.v,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function triangleRing(triangle) {
|
|
87
|
+
return triangle.map((vertex) => [vertex.x, vertex.z]);
|
|
88
|
+
}
|
|
89
|
+
function bounds(ring) {
|
|
90
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
91
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
92
|
+
let minZ = Number.POSITIVE_INFINITY;
|
|
93
|
+
let maxZ = Number.NEGATIVE_INFINITY;
|
|
94
|
+
for (const [x, z] of ring) {
|
|
95
|
+
minX = Math.min(minX, x);
|
|
96
|
+
maxX = Math.max(maxX, x);
|
|
97
|
+
minZ = Math.min(minZ, z);
|
|
98
|
+
maxZ = Math.max(maxZ, z);
|
|
99
|
+
}
|
|
100
|
+
return { minX, maxX, minZ, maxZ };
|
|
101
|
+
}
|
|
102
|
+
function polygonBounds(polygons) {
|
|
103
|
+
return bounds(polygons.flatMap((polygon) => polygon.outer));
|
|
104
|
+
}
|
|
105
|
+
function disjoint(a, b) {
|
|
106
|
+
return a.minX > b.maxX || a.maxX < b.minX || a.minZ > b.maxZ || a.maxZ < b.minZ;
|
|
107
|
+
}
|
|
108
|
+
/** Triangles of `triangle` that fall inside `polygons`, re-triangulated in 2D. */
|
|
109
|
+
function clipTriangleToPolygons(triangle, polygons) {
|
|
110
|
+
const ring = triangleRing(triangle);
|
|
111
|
+
const pieces = intersection(union([ring]), polygons);
|
|
112
|
+
const result = [];
|
|
113
|
+
for (const piece of pieces) {
|
|
114
|
+
const contour = piece.outer.map(([x, z]) => new Vector2(x, z));
|
|
115
|
+
const holes = piece.holes
|
|
116
|
+
.filter((hole) => hole.length >= 3)
|
|
117
|
+
.map((hole) => hole.map(([x, z]) => new Vector2(x, z)));
|
|
118
|
+
const points = [...contour, ...holes.flat()];
|
|
119
|
+
for (const face of ShapeUtils.triangulateShape(contour, holes)) {
|
|
120
|
+
const corners = face.map((cornerIndex) => {
|
|
121
|
+
const point = points[cornerIndex];
|
|
122
|
+
return sampleTriangle(triangle, point.x, point.y);
|
|
123
|
+
});
|
|
124
|
+
// triangulateShape returns the input winding; the source triangle's
|
|
125
|
+
// orientation is what the renderer culls against, so restore it.
|
|
126
|
+
result.push(faceNormalY(corners) * faceNormalY(triangle) < 0 ? reverse(corners) : corners);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
function reverse(triangle) {
|
|
132
|
+
return [triangle[0], triangle[2], triangle[1]];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Clip a triangle to `s >= limit` (or `s <= limit`), where `s` is the distance
|
|
136
|
+
* along `(dirX, dirZ)` from `origin`. Vertical faces project onto a line, so
|
|
137
|
+
* this is how one side quad is cut at an exposure boundary.
|
|
138
|
+
*/
|
|
139
|
+
function clipTriangleBySlab(triangle, origin, dirX, dirZ, from, to) {
|
|
140
|
+
let polygon = [...triangle];
|
|
141
|
+
for (const [limit, keepGreater] of [
|
|
142
|
+
[from, true],
|
|
143
|
+
[to, false],
|
|
144
|
+
]) {
|
|
145
|
+
const next = [];
|
|
146
|
+
for (const [index, current] of polygon.entries()) {
|
|
147
|
+
const previous = polygon[(index + polygon.length - 1) % polygon.length];
|
|
148
|
+
const sPrevious = (previous.x - origin[0]) * dirX + (previous.z - origin[1]) * dirZ - limit;
|
|
149
|
+
const sCurrent = (current.x - origin[0]) * dirX + (current.z - origin[1]) * dirZ - limit;
|
|
150
|
+
const insidePrevious = keepGreater ? sPrevious >= 0 : sPrevious <= 0;
|
|
151
|
+
const insideCurrent = keepGreater ? sCurrent >= 0 : sCurrent <= 0;
|
|
152
|
+
if (insidePrevious !== insideCurrent) {
|
|
153
|
+
const t = sPrevious / (sPrevious - sCurrent);
|
|
154
|
+
next.push({
|
|
155
|
+
x: previous.x + (current.x - previous.x) * t,
|
|
156
|
+
y: previous.y + (current.y - previous.y) * t,
|
|
157
|
+
z: previous.z + (current.z - previous.z) * t,
|
|
158
|
+
u: previous.u + (current.u - previous.u) * t,
|
|
159
|
+
v: previous.v + (current.v - previous.v) * t,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (insideCurrent)
|
|
163
|
+
next.push(current);
|
|
164
|
+
}
|
|
165
|
+
polygon = next;
|
|
166
|
+
if (polygon.length < 3)
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
const fan = [];
|
|
170
|
+
for (let index = 1; index < polygon.length - 1; index += 1) {
|
|
171
|
+
fan.push([polygon[0], polygon[index], polygon[index + 1]]);
|
|
172
|
+
}
|
|
173
|
+
return fan;
|
|
174
|
+
}
|
|
175
|
+
/** The 2D segment a vertical triangle projects onto, longest extent first. */
|
|
176
|
+
function verticalSpan(triangle) {
|
|
177
|
+
let best = null;
|
|
178
|
+
for (let index = 0; index < 3; index += 1) {
|
|
179
|
+
const a = triangle[index];
|
|
180
|
+
const b = triangle[(index + 1) % 3];
|
|
181
|
+
const length = Math.hypot(b.x - a.x, b.z - a.z);
|
|
182
|
+
if (!best || length > best.length)
|
|
183
|
+
best = { start: [a.x, a.z], end: [b.x, b.z], length };
|
|
184
|
+
}
|
|
185
|
+
return best && best.length > 1e-9 ? best : null;
|
|
186
|
+
}
|
|
187
|
+
function push(buckets, role, triangles) {
|
|
188
|
+
if (role === 'hidden' || !triangles.length)
|
|
189
|
+
return;
|
|
190
|
+
const bucket = buckets.get(role);
|
|
191
|
+
if (bucket)
|
|
192
|
+
bucket.push(...triangles);
|
|
193
|
+
else
|
|
194
|
+
buckets.set(role, [...triangles]);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Split a slab buffer by face orientation only — the pre-plate behaviour, kept
|
|
198
|
+
* verbatim for manual slabs so their two meshes and their paint slots never
|
|
199
|
+
* change.
|
|
200
|
+
*/
|
|
201
|
+
export function splitSlabFacesByFacing(geometry) {
|
|
202
|
+
const top = [];
|
|
203
|
+
const side = [];
|
|
204
|
+
const withUv = geometry.getAttribute('uv') !== undefined;
|
|
205
|
+
for (const triangle of readTriangles(geometry)) {
|
|
206
|
+
;
|
|
207
|
+
(faceNormalY(triangle) > TOP_NORMAL_THRESHOLD ? top : side).push(triangle);
|
|
208
|
+
}
|
|
209
|
+
return { top: buildGeometry(top, withUv), side: buildGeometry(side, withUv) };
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Split a plate buffer into one bucket per rendered role: a top bucket per
|
|
213
|
+
* partition cell, `edge` / `riser` per exposure run, and `underside`. Buckets
|
|
214
|
+
* come back in a stable order (cells in partition order, then the sides) so the
|
|
215
|
+
* mesh order of a plate is the same on every rebuild.
|
|
216
|
+
*/
|
|
217
|
+
export function splitPlateFaces(geometry, partition, slab) {
|
|
218
|
+
const buckets = new Map();
|
|
219
|
+
const withUv = geometry.getAttribute('uv') !== undefined;
|
|
220
|
+
// Cells in partition order, then the sides in a fixed order: a plate's mesh
|
|
221
|
+
// list is then the same on every rebuild, which is what the node batch's
|
|
222
|
+
// per-mesh allocation keys are indexed by.
|
|
223
|
+
// A room-owned riser draws one mesh per doorway, so each paints on its own.
|
|
224
|
+
const sideRole = (side) => side.zoneId && side.role !== 'hidden'
|
|
225
|
+
? side.role === 'riser'
|
|
226
|
+
? floorStepRole(side.zoneId, side.stepKey)
|
|
227
|
+
: `edge:${side.zoneId}`
|
|
228
|
+
: side.role;
|
|
229
|
+
const order = [
|
|
230
|
+
...new Set([
|
|
231
|
+
...partition.cells.map((cell) => cell.role),
|
|
232
|
+
'edge',
|
|
233
|
+
'riser',
|
|
234
|
+
...partition.sides.map(sideRole),
|
|
235
|
+
'underside',
|
|
236
|
+
]),
|
|
237
|
+
];
|
|
238
|
+
const cellBounds = partition.cells.map((cell) => polygonBounds(cell.polygons));
|
|
239
|
+
const soffit = slab.elevation - slab.thickness;
|
|
240
|
+
const downturns = partition.sides.flatMap((side) => {
|
|
241
|
+
if (side.role === 'hidden' || side.dropTo === undefined || side.dropTo >= soffit - 0.001)
|
|
242
|
+
return [];
|
|
243
|
+
const [a, b] = [side.start, side.end];
|
|
244
|
+
const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
245
|
+
const dx = (-(b[1] - a[1]) / length) * slab.thickness, dz = ((b[0] - a[0]) / length) * slab.thickness;
|
|
246
|
+
return [
|
|
247
|
+
{
|
|
248
|
+
bottom: side.dropTo,
|
|
249
|
+
polygon: [a, b, [b[0] + dx, b[1] + dz], [a[0] + dx, a[1] + dz]],
|
|
250
|
+
},
|
|
251
|
+
];
|
|
252
|
+
});
|
|
253
|
+
const downturnCover = union(downturns.map((d) => d.polygon));
|
|
254
|
+
for (const triangle of readTriangles(geometry)) {
|
|
255
|
+
const normalY = faceNormalY(triangle);
|
|
256
|
+
if (normalY > TOP_NORMAL_THRESHOLD) {
|
|
257
|
+
if (partition.plainTop) {
|
|
258
|
+
push(buckets, partition.cells[0]?.role ?? 'surface', [triangle]);
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
// Area a manual slab already draws belongs to no cell, so it is simply
|
|
262
|
+
// never emitted — the plate keeps its body and stops z-fighting the top.
|
|
263
|
+
const triangleBounds = bounds(triangleRing(triangle));
|
|
264
|
+
for (const [index, cell] of partition.cells.entries()) {
|
|
265
|
+
if (disjoint(triangleBounds, cellBounds[index]))
|
|
266
|
+
continue;
|
|
267
|
+
push(buckets, cell.role, clipTriangleToPolygons(triangle, cell.polygons));
|
|
268
|
+
}
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (normalY < -TOP_NORMAL_THRESHOLD) {
|
|
272
|
+
push(buckets, 'underside', downturnCover.length
|
|
273
|
+
? clipTriangleToPolygons(triangle, difference(triangleRing(triangle), downturnCover))
|
|
274
|
+
: [triangle]);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const rings = [slab.polygon, ...slab.holes];
|
|
278
|
+
for (const side of partition.sides) {
|
|
279
|
+
if (side.role === 'hidden')
|
|
280
|
+
continue;
|
|
281
|
+
const bottom = side.bottom ?? side.dropTo ?? slab.elevation - slab.thickness;
|
|
282
|
+
const top = side.top ?? slab.elevation;
|
|
283
|
+
const [ax, az] = side.start, [bx, bz] = side.end;
|
|
284
|
+
const [u0, u1] = sideEdgeUvs(rings, side.start, side.end);
|
|
285
|
+
const a = { x: ax, y: bottom, z: az, u: u0, v: bottom };
|
|
286
|
+
const b = { x: bx, y: bottom, z: bz, u: u1, v: bottom };
|
|
287
|
+
const c = { ...b, y: top, v: top }, d = { ...a, y: top, v: top };
|
|
288
|
+
push(buckets, sideRole(side), [
|
|
289
|
+
[a, c, b],
|
|
290
|
+
[a, d, c],
|
|
291
|
+
]);
|
|
292
|
+
}
|
|
293
|
+
const levels = [...new Set([...downturns.map((d) => d.bottom), soffit])].sort((a, b) => a - b);
|
|
294
|
+
let previous = [];
|
|
295
|
+
for (const [i, low] of levels.slice(0, -1).entries()) {
|
|
296
|
+
const high = levels[i + 1];
|
|
297
|
+
const section = union(downturns.filter((d) => d.bottom <= low + 1e-7).map((d) => d.polygon));
|
|
298
|
+
for (const polygon of difference(section, previous)) {
|
|
299
|
+
const contour = polygon.outer.map(([x, z]) => new Vector2(x, z));
|
|
300
|
+
const holes = polygon.holes.map((ring) => ring.map(([x, z]) => new Vector2(x, z)));
|
|
301
|
+
const points = [...contour, ...holes.flat()];
|
|
302
|
+
for (const face of ShapeUtils.triangulateShape(contour, holes)) {
|
|
303
|
+
const triangle = face.map((index) => ({
|
|
304
|
+
x: points[index].x,
|
|
305
|
+
y: low,
|
|
306
|
+
z: points[index].y,
|
|
307
|
+
u: points[index].x,
|
|
308
|
+
v: points[index].y,
|
|
309
|
+
}));
|
|
310
|
+
push(buckets, 'underside', [faceNormalY(triangle) > 0 ? reverse(triangle) : triangle]);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
for (const polygon of section)
|
|
314
|
+
for (const ring of [polygon.outer, ...polygon.holes])
|
|
315
|
+
for (const [j, a] of ring.entries()) {
|
|
316
|
+
const b = ring[(j + 1) % ring.length];
|
|
317
|
+
const dx = b[0] - a[0], dz = b[1] - a[1], length = Math.hypot(dx, dz);
|
|
318
|
+
const midpoint = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
|
|
319
|
+
const exterior = partition.sides.some((side) => {
|
|
320
|
+
const sx = side.end[0] - side.start[0], sz = side.end[1] - side.start[1];
|
|
321
|
+
const t = ((midpoint[0] - side.start[0]) * sx + (midpoint[1] - side.start[1]) * sz) /
|
|
322
|
+
(sx * sx + sz * sz);
|
|
323
|
+
return (t >= -1e-6 &&
|
|
324
|
+
t <= 1 + 1e-6 &&
|
|
325
|
+
Math.abs((midpoint[0] - side.start[0]) * sz - (midpoint[1] - side.start[1]) * sx) <
|
|
326
|
+
1e-6);
|
|
327
|
+
});
|
|
328
|
+
if (exterior)
|
|
329
|
+
continue;
|
|
330
|
+
const normalInside = containsPoint(section, [
|
|
331
|
+
midpoint[0] + (dz / length) * 0.0001,
|
|
332
|
+
midpoint[1] - (dx / length) * 0.0001,
|
|
333
|
+
]);
|
|
334
|
+
const aa = { x: a[0], y: low, z: a[1], u: 0, v: low }, bb = { x: b[0], y: low, z: b[1], u: length, v: low };
|
|
335
|
+
const cc = { ...bb, y: high, v: high }, dd = { ...aa, y: high, v: high };
|
|
336
|
+
const faces = [
|
|
337
|
+
[aa, cc, bb],
|
|
338
|
+
[aa, dd, cc],
|
|
339
|
+
];
|
|
340
|
+
push(buckets, 'underside', normalInside ? faces.map(reverse) : faces);
|
|
341
|
+
}
|
|
342
|
+
previous = section;
|
|
343
|
+
}
|
|
344
|
+
return order
|
|
345
|
+
.filter((role) => (buckets.get(role)?.length ?? 0) > 0)
|
|
346
|
+
.map((role) => ({ role, geometry: buildGeometry(buckets.get(role), withUv) }));
|
|
347
|
+
}
|
|
348
|
+
function sideEdgeUvs(rings, start, end) {
|
|
349
|
+
for (const ring of rings) {
|
|
350
|
+
for (const [i, a] of ring.entries()) {
|
|
351
|
+
const b = ring[(i + 1) % ring.length];
|
|
352
|
+
const length = Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
353
|
+
if (length < 1e-9)
|
|
354
|
+
continue;
|
|
355
|
+
const dx = (b[0] - a[0]) / length;
|
|
356
|
+
const dz = (b[1] - a[1]) / length;
|
|
357
|
+
const along = (p) => (p[0] - a[0]) * dx + (p[1] - a[1]) * dz;
|
|
358
|
+
const onEdge = (p) => Math.abs((p[0] - a[0]) * dz - (p[1] - a[1]) * dx) < 1e-6 &&
|
|
359
|
+
along(p) >= -1e-6 &&
|
|
360
|
+
along(p) <= length + 1e-6;
|
|
361
|
+
if (onEdge(start) && onEdge(end))
|
|
362
|
+
return [along(start), along(end)];
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
const length = Math.hypot(end[0] - start[0], end[1] - start[1]);
|
|
366
|
+
const dx = (end[0] - start[0]) / length;
|
|
367
|
+
const dz = (end[1] - start[1]) / length;
|
|
368
|
+
return [start[0] * dx + start[1] * dz, end[0] * dx + end[1] * dz];
|
|
369
|
+
}
|
|
370
|
+
export function clipPlateTerrainFill(geometry, partition) {
|
|
371
|
+
const triangles = [];
|
|
372
|
+
for (const triangle of readTriangles(geometry)) {
|
|
373
|
+
// Keep the terrain-following bottom cap, including steep slopes.
|
|
374
|
+
if (Math.abs(faceNormalY(triangle)) > 1e-6) {
|
|
375
|
+
triangles.push(triangle);
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
const span = verticalSpan(triangle);
|
|
379
|
+
if (!span)
|
|
380
|
+
continue;
|
|
381
|
+
const runs = plateSideRuns(partition, span.start, span.end);
|
|
382
|
+
for (const run of runs) {
|
|
383
|
+
if (run.dropTo !== undefined)
|
|
384
|
+
continue;
|
|
385
|
+
triangles.push(...clipTriangleBySlab(triangle, span.start, (span.end[0] - span.start[0]) / span.length, (span.end[1] - span.start[1]) / span.length, run.t0 * span.length, run.t1 * span.length));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return buildGeometry(triangles, geometry.getAttribute('uv') !== undefined);
|
|
389
|
+
}
|
package/dist/slab/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/slab/tool.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/slab/tool.tsx"],"names":[],"mappings":"AA6EA,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA2T5B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
package/dist/slab/tool.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { DEFAULT_ANGLE_STEP, emitter, resolveSlabPlacementElevation, snapPointAlongAngleRay, snapPointToGrid, useScene, } from '@pascal-app/core';
|
|
4
|
-
import { CursorSphere, clearPlacementSurface, clearSlabSnapFeedback, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolveLevelConstructionPlane, resolvePointerSupportSurface, resolveSlabPlanPointSnap, triggerSFX, useEditor, useFloorplanDraftPreview, } from '@pascal-app/editor';
|
|
4
|
+
import { CursorSphere, clearPlacementSurface, clearSlabSnapFeedback, EDITOR_LAYER, isAngleSnapActive, isGridSnapActive, markToolCancelConsumed, publishHorizontalConstructionPlane, publishPlacementSurface, resampleTerrainConstructionPlane, resolveEventConstructionPlane, resolveLevelConstructionPlane, resolvePointerSupportSurface, resolveSlabPlanPointSnap, triggerSFX, useEditor, useFloorplanDraftPreview, visibleScene, } from '@pascal-app/editor';
|
|
5
5
|
import { useViewer } from '@pascal-app/viewer';
|
|
6
6
|
import { useThree } from '@react-three/fiber';
|
|
7
7
|
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
@@ -142,7 +142,7 @@ export const SlabTool = () => {
|
|
|
142
142
|
firstPoint &&
|
|
143
143
|
Math.abs(clickPoint[0] - firstPoint[0]) < 0.25 &&
|
|
144
144
|
Math.abs(clickPoint[1] - firstPoint[1]) < 0.25) {
|
|
145
|
-
if (shouldRegistryCommitSlab(useEditor.getState()
|
|
145
|
+
if (shouldRegistryCommitSlab(visibleScene(useEditor.getState()), 'grid')) {
|
|
146
146
|
const slabId = commitSlabDrawing(currentLevelId, points, constructionPlaneRef.current?.elevation ?? null);
|
|
147
147
|
setSelection({ selectedIds: [slabId] });
|
|
148
148
|
}
|
|
@@ -168,7 +168,7 @@ export const SlabTool = () => {
|
|
|
168
168
|
const finishDrawing = (trigger) => {
|
|
169
169
|
if (points.length < 3)
|
|
170
170
|
return;
|
|
171
|
-
if (shouldRegistryCommitSlab(useEditor.getState()
|
|
171
|
+
if (shouldRegistryCommitSlab(visibleScene(useEditor.getState()), trigger)) {
|
|
172
172
|
const slabId = commitSlabDrawing(currentLevelId, points, constructionPlaneRef.current?.elevation ?? null);
|
|
173
173
|
setSelection({ selectedIds: [slabId] });
|
|
174
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/solar-panel/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAgNzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,OAAO,cAAc,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/solar-panel/definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAgNzC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,CAAC,OAAO,cAAc,CA0DtE,CAAA"}
|
|
@@ -235,6 +235,7 @@ export const solarPanelDefinition = {
|
|
|
235
235
|
parametrics: solarPanelParametrics,
|
|
236
236
|
handles: solarPanelHandles,
|
|
237
237
|
floorplan: buildSolarPanelFloorplan,
|
|
238
|
+
rendersChildren: false,
|
|
238
239
|
renderer: {
|
|
239
240
|
kind: 'parametric',
|
|
240
241
|
module: () => import('./renderer'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAKpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA0CpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/spawn/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,cAAc,EAA8B,MAAM,kBAAkB,CAAA;AAKpG,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AA0CpC,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,OAAO,SAAS,CAwE5D,CAAA"}
|
package/dist/spawn/definition.js
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning the pure `GuardBox` data from `baluster-guard.ts` into Three.js
|
|
3
|
+
* geometry with metre-scale UVs (E-009): 1 UV unit = 1 m on every face, so a
|
|
4
|
+
* finish tiles the same on a rail, a newel and a picket. Both the per-flight
|
|
5
|
+
* guard (`renderer.tsx`) and the continuous guard (`continuous-railings.tsx`)
|
|
6
|
+
* build their boxes through here, so there is one UV convention to maintain.
|
|
7
|
+
*/
|
|
8
|
+
import * as THREE from 'three';
|
|
9
|
+
import type { GuardBox } from './guard-path';
|
|
10
|
+
/** A box whose UVs run in metres (1 unit = 1 m) on each face. */
|
|
11
|
+
export declare function metricBox(length: number, height: number, depth: number): THREE.BoxGeometry;
|
|
12
|
+
/** A round guard member (a cable or its sleeve) as a metre-UV cylinder laid
|
|
13
|
+
* along its direction: `size[0]` is the diameter, `size[2]` the length. UVs run
|
|
14
|
+
* in metres — the circumference across, the length along — so a finish tiles
|
|
15
|
+
* the same as on a rectangular bar. */
|
|
16
|
+
export declare function metricCylinder(diameter: number, length: number): THREE.CylinderGeometry;
|
|
17
|
+
/** One oriented guard box as a metre-UV geometry, z laid along its direction. */
|
|
18
|
+
export declare function guardBoxGeometry(box: GuardBox): THREE.CylinderGeometry | THREE.BoxGeometry;
|
|
19
|
+
/** Merge a guard's boxes into one metre-UV geometry, or null when empty. */
|
|
20
|
+
export declare function mergeGuardBoxes(boxes: GuardBox[]): THREE.BufferGeometry | null;
|
|
21
|
+
//# sourceMappingURL=baluster-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baluster-geometry.d.ts","sourceRoot":"","sources":["../../src/stair/baluster-geometry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,qBAetE;AAED;;;uCAGuC;AACvC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAY9D;AAYD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,8CAW7C;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAM9E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning the pure `GuardBox` data from `baluster-guard.ts` into Three.js
|
|
3
|
+
* geometry with metre-scale UVs (E-009): 1 UV unit = 1 m on every face, so a
|
|
4
|
+
* finish tiles the same on a rail, a newel and a picket. Both the per-flight
|
|
5
|
+
* guard (`renderer.tsx`) and the continuous guard (`continuous-railings.tsx`)
|
|
6
|
+
* build their boxes through here, so there is one UV convention to maintain.
|
|
7
|
+
*/
|
|
8
|
+
import * as THREE from 'three';
|
|
9
|
+
import { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils.js';
|
|
10
|
+
/** A box whose UVs run in metres (1 unit = 1 m) on each face. */
|
|
11
|
+
export function metricBox(length, height, depth) {
|
|
12
|
+
const geometry = new THREE.BoxGeometry(length, height, depth);
|
|
13
|
+
const position = geometry.getAttribute('position'), normal = geometry.getAttribute('normal'), uv = geometry.getAttribute('uv');
|
|
14
|
+
for (let i = 0; i < position.count; i++) {
|
|
15
|
+
const x = position.getX(i), y = position.getY(i), z = position.getZ(i);
|
|
16
|
+
if (Math.abs(normal.getX(i)) > 0.5)
|
|
17
|
+
uv.setXY(i, z, y);
|
|
18
|
+
else if (Math.abs(normal.getY(i)) > 0.5)
|
|
19
|
+
uv.setXY(i, x, z);
|
|
20
|
+
else
|
|
21
|
+
uv.setXY(i, x, y);
|
|
22
|
+
}
|
|
23
|
+
geometry.setAttribute('uv2', geometry.getAttribute('uv').clone());
|
|
24
|
+
return geometry;
|
|
25
|
+
}
|
|
26
|
+
/** A round guard member (a cable or its sleeve) as a metre-UV cylinder laid
|
|
27
|
+
* along its direction: `size[0]` is the diameter, `size[2]` the length. UVs run
|
|
28
|
+
* in metres — the circumference across, the length along — so a finish tiles
|
|
29
|
+
* the same as on a rectangular bar. */
|
|
30
|
+
export function metricCylinder(diameter, length) {
|
|
31
|
+
const radius = diameter / 2;
|
|
32
|
+
const geometry = new THREE.CylinderGeometry(radius, radius, length, 12);
|
|
33
|
+
const position = geometry.getAttribute('position'), normal = geometry.getAttribute('normal'), uv = geometry.getAttribute('uv');
|
|
34
|
+
for (let i = 0; i < uv.count; i++) {
|
|
35
|
+
if (Math.abs(normal.getY(i)) > 0.5)
|
|
36
|
+
uv.setXY(i, position.getX(i), position.getZ(i));
|
|
37
|
+
else
|
|
38
|
+
uv.setXY(i, uv.getX(i) * 2 * Math.PI * radius, uv.getY(i) * length);
|
|
39
|
+
}
|
|
40
|
+
geometry.setAttribute('uv2', uv.clone());
|
|
41
|
+
return geometry;
|
|
42
|
+
}
|
|
43
|
+
function roundGuardBoxGeometry(box) {
|
|
44
|
+
const geometry = metricCylinder(box.size[0], box.size[2]);
|
|
45
|
+
const direction = new THREE.Vector3(...box.direction).normalize();
|
|
46
|
+
geometry.applyQuaternion(new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0), direction));
|
|
47
|
+
geometry.translate(box.center[0], box.center[1], box.center[2]);
|
|
48
|
+
return geometry;
|
|
49
|
+
}
|
|
50
|
+
/** One oriented guard box as a metre-UV geometry, z laid along its direction. */
|
|
51
|
+
export function guardBoxGeometry(box) {
|
|
52
|
+
if (box.round)
|
|
53
|
+
return roundGuardBoxGeometry(box);
|
|
54
|
+
const geometry = metricBox(box.size[0], box.size[1], box.size[2]);
|
|
55
|
+
const z = new THREE.Vector3(...box.direction).normalize();
|
|
56
|
+
let x = new THREE.Vector3().crossVectors(new THREE.Vector3(0, 1, 0), z);
|
|
57
|
+
if (x.lengthSq() < 1e-8)
|
|
58
|
+
x.set(1, 0, 0);
|
|
59
|
+
x = x.normalize();
|
|
60
|
+
const y = new THREE.Vector3().crossVectors(z, x).normalize();
|
|
61
|
+
geometry.applyMatrix4(new THREE.Matrix4().makeBasis(x, y, z));
|
|
62
|
+
geometry.translate(box.center[0], box.center[1], box.center[2]);
|
|
63
|
+
return geometry;
|
|
64
|
+
}
|
|
65
|
+
/** Merge a guard's boxes into one metre-UV geometry, or null when empty. */
|
|
66
|
+
export function mergeGuardBoxes(boxes) {
|
|
67
|
+
if (!boxes.length)
|
|
68
|
+
return null;
|
|
69
|
+
const geometries = boxes.map(guardBoxGeometry);
|
|
70
|
+
const merged = mergeGeometries(geometries, false);
|
|
71
|
+
for (const geometry of geometries)
|
|
72
|
+
geometry.dispose();
|
|
73
|
+
return merged;
|
|
74
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One coherent baluster guard laid out along a rail path, as oriented boxes.
|
|
3
|
+
*
|
|
4
|
+
* A guard is built the way a joiner builds it: a newel at each end (and, when
|
|
5
|
+
* a spacing is given, every bay between), a top rail and a bottom rail that
|
|
6
|
+
* follow the path with a square fitting block closing every interior corner,
|
|
7
|
+
* and square pickets spanning the two rails. The path sampling, corner finding
|
|
8
|
+
* and newel/picket stations are the style-agnostic chassis in `guard-path.ts`,
|
|
9
|
+
* shared with the deck post-and-rail guard; this file only turns those stations
|
|
10
|
+
* into the baluster style's members. The caller renders the boxes
|
|
11
|
+
* (`renderer.tsx`) or merges them into one mesh (`continuous-railings.tsx`),
|
|
12
|
+
* so this stays pure data — no Three.js meshes, no React.
|
|
13
|
+
*
|
|
14
|
+
* `pickets` is a metre pitch sampled along the horizontal run, so the density
|
|
15
|
+
* tracks the run rather than the path's tessellation. Pickets that fall inside
|
|
16
|
+
* a newel are dropped. `reach` runs the rails that far past the top vertex
|
|
17
|
+
* along the final slope to die into a post standing there; `topPost: false`
|
|
18
|
+
* then omits the top newel.
|
|
19
|
+
*/
|
|
20
|
+
import { type GuardBox, type GuardRail, type Vec3 } from './guard-path';
|
|
21
|
+
export type BalusterGuardOptions = {
|
|
22
|
+
railHeight: number;
|
|
23
|
+
/** Metre pitch for pickets, sampled along the horizontal run. */
|
|
24
|
+
pickets: number;
|
|
25
|
+
/** Metres between newels along the run; omit (or Infinity) for ends only. */
|
|
26
|
+
postSpacing?: number;
|
|
27
|
+
topPost?: boolean;
|
|
28
|
+
postThrough?: boolean;
|
|
29
|
+
/** Metres the rails run past the top vertex, along the final slope. */
|
|
30
|
+
reach?: number;
|
|
31
|
+
};
|
|
32
|
+
/** The two rails' section (`across` the run, `vertical`) and `y` off the nosing line. */
|
|
33
|
+
export declare const BALUSTER_RAIL_PROFILE: {
|
|
34
|
+
readonly top: {
|
|
35
|
+
readonly across: 0.062;
|
|
36
|
+
readonly vertical: 0.05;
|
|
37
|
+
readonly y: 0;
|
|
38
|
+
};
|
|
39
|
+
readonly bottom: {
|
|
40
|
+
readonly across: 0.045;
|
|
41
|
+
readonly vertical: 0.045;
|
|
42
|
+
readonly y: 0.08;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** A guard's rails as `{ center y off the nosing line, section across, vertical }`,
|
|
46
|
+
* bottom-to-top. Shared with the flight-to-flight connector so a bridge carries
|
|
47
|
+
* the same rails as the guards it joins. */
|
|
48
|
+
export declare function balusterGuardRails(railHeight: number): GuardRail[];
|
|
49
|
+
export declare function buildBalusterGuard(points: Vec3[], options: BalusterGuardOptions): GuardBox[];
|
|
50
|
+
//# sourceMappingURL=baluster-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baluster-guard.d.ts","sourceRoot":"","sources":["../../src/stair/baluster-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,IAAI,EACV,MAAM,cAAc,CAAA;AAErB,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAWD,yFAAyF;AACzF,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAGxB,CAAA;AAQV;;4CAE4C;AAC5C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAKlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,oBAAoB,GAAG,QAAQ,EAAE,CAkC5F"}
|