From 8bf79754407a0cd840d5a6195e162abe8b57591a Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Fri, 15 Aug 2025 06:34:51 -0700 Subject: [PATCH] Make move tool obey snap settings Fixes https://gitlab.com/kicad/code/kicad/-/issues/21192 --- pcbnew/router/pns_tool_base.cpp | 14 ++++++++++++++ pcbnew/tools/edit_tool_move_fct.cpp | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pcbnew/router/pns_tool_base.cpp b/pcbnew/router/pns_tool_base.cpp index f5b0727277..9b01d408aa 100644 --- a/pcbnew/router/pns_tool_base.cpp +++ b/pcbnew/router/pns_tool_base.cpp @@ -421,6 +421,20 @@ void TOOL_BASE::updateEndItem( const TOOL_EVENT& aEvent ) controls()->ForceCursorPosition( true, m_endSnapPoint ); + if( GetAngleSnapMode() != LEADER_MODE::DIRECT + && ( m_router->GetState() == ROUTER::DRAG_SEGMENT + || m_router->GetState() == ROUTER::DRAG_COMPONENT ) ) + { + VECTOR2I moveVector = m_endSnapPoint - m_startSnapPoint; + + if( GetAngleSnapMode() == LEADER_MODE::DEG45 ) + m_endSnapPoint = m_startSnapPoint + GetVectorSnapped45( moveVector ); + else if( GetAngleSnapMode() == LEADER_MODE::DEG90 ) + m_endSnapPoint = m_startSnapPoint + GetVectorSnapped90( moveVector ); + + controls()->ForceCursorPosition( true, m_endSnapPoint ); + } + if( m_endItem ) { wxLogTrace( wxT( "PNS" ), wxT( "%s, layer : %d" ), diff --git a/pcbnew/tools/edit_tool_move_fct.cpp b/pcbnew/tools/edit_tool_move_fct.cpp index db2b933e18..b98244fb16 100644 --- a/pcbnew/tools/edit_tool_move_fct.cpp +++ b/pcbnew/tools/edit_tool_move_fct.cpp @@ -441,7 +441,7 @@ bool EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, BOARD_COMMIT* aCommit VECTOR2I prevPos; bool enableLocalRatsnest = true; - bool hv45Mode = false; + bool hv45Mode = GetAngleSnapMode() != LEADER_MODE::DIRECT; bool eatFirstMouseUp = true; bool allowRedraw3D = cfg->m_Display.m_Live3DRefresh; bool showCourtyardConflicts = !m_isFootprintEditor && cfg->m_ShowCourtyardCollisions; @@ -780,7 +780,7 @@ bool EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, BOARD_COMMIT* aCommit } else if( evt->IsAction( &PCB_ACTIONS::toggleHV45Mode ) ) { - hv45Mode = !hv45Mode; + hv45Mode = GetAngleSnapMode() != LEADER_MODE::DIRECT; displayConstraintsMessage( hv45Mode ); evt->SetPassEvent( false ); }