Enhanced object snapping for box edit mode - other corners snap too second order

This commit is contained in:
Matthias Koefferlein 2025-09-09 21:49:40 +02:00
parent 879df5a85b
commit e4789f7f1b
3 changed files with 34 additions and 5 deletions

View File

@ -108,10 +108,37 @@ BoxService::do_mouse_move_inactive (const db::DPoint &p)
void
BoxService::do_mouse_move (const db::DPoint &p)
{
do_mouse_move_inactive (p);
lay::PointSnapToObjectResult snap_details = snap2_details (p);
db::DPoint ps = snap_details.snapped_point;
if (snap_details.object_snap == lay::PointSnapToObjectResult::NoObject) {
clear_mouse_cursors ();
db::DPoint px (p.x (), m_p1.y ());
lay::PointSnapToObjectResult snap_details_x = snap2_details (px);
db::DPoint py (m_p1.x (), p.y ());
lay::PointSnapToObjectResult snap_details_y = snap2_details (py);
if (snap_details_x.object_snap != lay::PointSnapToObjectResult::NoObject) {
ps = db::DPoint (snap_details_x.snapped_point.x (), ps.y ());
mouse_cursor_from_snap_details (snap_details_x, true /*add*/);
}
if (snap_details_y.object_snap != lay::PointSnapToObjectResult::NoObject) {
ps = db::DPoint (ps.x (), snap_details_y.snapped_point.y ());
mouse_cursor_from_snap_details (snap_details_y, true /*add*/);
}
add_mouse_cursor (ps);
} else {
mouse_cursor_from_snap_details (snap_details);
}
set_cursor (lay::Cursor::cross);
m_p2 = snap2 (p);
m_p2 = ps;
update_marker ();
}

View File

@ -277,9 +277,11 @@ EditorServiceBase::clear_mouse_cursors ()
}
void
EditorServiceBase::mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details)
EditorServiceBase::mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details, bool noclear)
{
clear_mouse_cursors ();
if (! noclear) {
clear_mouse_cursors ();
}
add_mouse_cursor (snap_details.snapped_point,
snap_details.object_snap == lay::PointSnapToObjectResult::ObjectVertex ||

View File

@ -110,7 +110,7 @@ public:
/**
* @brief Provides a nice mouse tracking cursor from the given snap details
*/
void mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details);
void mouse_cursor_from_snap_details (const lay::PointSnapToObjectResult &snap_details, bool noclear = false);
/**
* @brief Gets the tracking cursor color