Group selection and layout on one wall: an atomic group move preserving relative offsets, Figma-style even distribution driven by handles that sit in the gaps, and quarter/half/three-quarter alignment buttons.
Also called: multi select · distribute · tidy spacing · equal gaps · align quarter half
- 1clampGroupDelta() computes one shared delta clamped against wall ends and every unselected neighbour, direction-aware so the group stops at a blocker rather than teleporting past it.
- 2Group moves resolve absolutely against a snapshot taken at pointer-down, so fast pointermoves cannot stack deltas onto stale state.
- 3distributeOpenings() sets equal gaps, clamped between the required clearance and what fits, landing on the 3in grid.
- 4gapAnchorForJoint() picks the pin: the leftmost joint pins the right end, the rightmost joint pins the left end, a middle joint holds the row's centre.
- 5Vertical group movement applies to windows only — doors stay grounded.
- 6The result is verified against unselected openings and rejected outright rather than producing a violation.
Moving several openings at once computed each step as a nudge against whatever the screen had last drawn and then added it to newer positions, so a fast drag stacked its own corrections and walked windows off the end of the wall into negative offsets. Multi-select now resolves every position absolutely, against the state the drag started from. Select a row of windows, align them or distribute them evenly, and they land where they are shown.
- Even spacing done by arithmetic on offsets.
- Group moves that drift or overshoot under fast dragging.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →