Snapping of rulers: now all points snap when the ruler is moved

This commit is contained in:
Matthias Koefferlein 2026-05-01 18:57:03 +02:00
parent 5d60cfe27d
commit 17f5b4f2da
2 changed files with 21 additions and 4 deletions

View File

@ -1541,6 +1541,19 @@ Service::begin_move (lay::Editable::MoveMode mode, const db::DPoint &p, lay::ang
}
}
static int snap_prio (lay::PointSnapToObjectResult::ObjectSnap os)
{
if (os == lay::PointSnapToObjectResult::ObjectVertex) {
return 3;
} else if (os == lay::PointSnapToObjectResult::ObjectEdge) {
return 2;
} else if (os == lay::PointSnapToObjectResult::ObjectUnspecific) {
return 1;
} else {
return 0;
}
}
void
Service::snap_rulers (lay::angle_constraint_type ac)
{
@ -1566,7 +1579,7 @@ Service::snap_rulers (lay::angle_constraint_type ac)
auto snp = snap2_details (org1, p1, ruler, ac);
double dist = p1.distance (snp.snapped_point);
if (min_dist < 0 || dist < min_dist) {
if (min_dist < 0 || snap_prio (snp.object_snap) > snap_prio (min_snp.object_snap) || (snap_prio (snp.object_snap) == snap_prio (min_snp.object_snap) && dist < min_dist)) {
min_snp = snp;
min_dist = dist;
min_delta = snp.snapped_point - p1;
@ -1575,7 +1588,7 @@ Service::snap_rulers (lay::angle_constraint_type ac)
snp = snap2_details (org2, p2, ruler, ac);
dist = p2.distance (snp.snapped_point);
if (min_dist < 0 || dist < min_dist) {
if (min_dist < 0 || snap_prio (snp.object_snap) > snap_prio (min_snp.object_snap) || (snap_prio (snp.object_snap) == snap_prio (min_snp.object_snap) && dist < min_dist)) {
min_snp = snp;
min_dist = dist;
min_delta = snp.snapped_point - p2;
@ -1631,10 +1644,10 @@ Service::move (const db::DPoint &p, lay::angle_constraint_type ac)
m_trans = db::DTrans (dp + (m_p1 - db::DPoint ()) - m_trans.disp ()) * m_trans * db::DTrans (db::DPoint () - m_p1);
propose_move_transformation (m_trans, 1);
snap_rulers (ac_eff);
propose_move_transformation (m_trans, 1);
for (std::vector<ant::View *>::iterator r = m_rulers.begin (); r != m_rulers.end (); ++r) {
(*r)->transform_by (db::DCplxTrans (m_trans));
}
@ -1834,6 +1847,7 @@ Service::edit_cancel ()
m_move_mode = MoveNone;
m_selected.clear ();
selection_to_view ();
clear_mouse_cursors ();
}
}

View File

@ -437,9 +437,12 @@ MoveService::drag_cancel ()
{
m_shift = db::DPoint ();
if (m_dragging) {
show_toolbox (false);
ui ()->ungrab_mouse (this);
m_dragging = false;
}
}