mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 08:28:31 +00:00
feat v1.23.1: openings — hover outline, drag along walls, double-click properties
- Hover: an accent outline hugs the opening's wall strip + grab cursor. - Drag (view mode): re-snaps continuously to the nearest derived wall; snapToWall now normalizes the angle to [-90,90) — neighbouring rooms yield the same wall in opposite directions, which used to flip the hinge while dragging across segment boundaries. setPointerCapture wrapped in try/catch (an inactive pointerId must not kill the drag). - Click still opens the status card (via a 250ms timer); double click opens the properties dialog from view mode. Hit zone is now a slightly thicker strip along the wall instead of the whole swing square (fewer accidental hovers). +1 test (77). Verified live: drag moved a test door exactly along a vertical wall (angle 90 -> -90), click/dblclick/markup-tool paths all работают; the user's 12 real openings untouched.
This commit is contained in:
+7
-1
@@ -97,7 +97,13 @@ export function snapToWall(
|
||||
const d = Math.hypot(p[0] - q[0], p[1] - q[1]);
|
||||
if (d < bestD) {
|
||||
bestD = d;
|
||||
best = { x: q[0], y: q[1], angle: (Math.atan2(dy, dx) * 180) / Math.PI };
|
||||
// normalize to [-90, 90): two rooms sharing a wall yield the same edge in
|
||||
// OPPOSITE directions — without this, dragging an opening across segment
|
||||
// boundaries would flip its hinge side back and forth
|
||||
let angle = (Math.atan2(dy, dx) * 180) / Math.PI;
|
||||
if (angle >= 90) angle -= 180;
|
||||
else if (angle < -90) angle += 180;
|
||||
best = { x: q[0], y: q[1], angle };
|
||||
}
|
||||
}
|
||||
return best;
|
||||
|
||||
Reference in New Issue
Block a user