From ea3e1e98b733557c81416407cea9baaf791399e9 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 10 Nov 2025 23:21:28 +0100 Subject: [PATCH] Better snapping to vertexes - important for center point snapping --- src/laybasic/laybasic/laySnap.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/laybasic/laybasic/laySnap.cc b/src/laybasic/laybasic/laySnap.cc index c588a1703..186804da9 100644 --- a/src/laybasic/laybasic/laySnap.cc +++ b/src/laybasic/laybasic/laySnap.cc @@ -444,7 +444,10 @@ private: void find_closest_exact (const db::DPoint &p, const db::DEdge &e) { - if (! m_any_exact || m_original.distance (p) < m_original.distance (m_closest_exact)) { + bool was_vertex = m_edge1_exact.is_degenerate () && m_edge2_exact.is_degenerate (); + bool is_vertex = e.is_degenerate (); + + if (! m_any_exact || (! (was_vertex && ! is_vertex) && (m_original.distance (p) < m_original.distance (m_closest_exact) || (! was_vertex && is_vertex)))) { if (m_directed) { for (std::vector::const_iterator cl = m_cutlines.begin (); cl != m_cutlines.end (); ++cl) { @@ -465,7 +468,10 @@ private: void find_closest (const db::DPoint &p, const db::DEdge &e) { - if (! m_any || m_original.distance (p) < m_original.distance (m_closest)) { + bool was_vertex = m_edge1.is_degenerate () && m_edge2.is_degenerate (); + bool is_vertex = e.is_degenerate (); + + if (! m_any || (! (was_vertex && ! is_vertex) && (m_original.distance (p) < m_original.distance (m_closest) || (! was_vertex && is_vertex)))) { if (m_directed) { for (std::vector::const_iterator cl = m_cutlines.begin (); cl != m_cutlines.end (); ++cl) {