diff --git a/pcbnew/tools/grid_helper.cpp b/pcbnew/tools/grid_helper.cpp index c55e66aa53..360898fd35 100644 --- a/pcbnew/tools/grid_helper.cpp +++ b/pcbnew/tools/grid_helper.cpp @@ -113,7 +113,7 @@ VECTOR2I GRID_HELPER::Align( const VECTOR2I& aPoint ) const } -VECTOR2I GRID_HELPER::AlignToSegment ( const VECTOR2I& aPoint, const SEG& aSeg ) +VECTOR2I GRID_HELPER::AlignToSegment( const VECTOR2I& aPoint, const SEG& aSeg ) { OPT_VECTOR2I pts[6]; @@ -147,6 +147,7 @@ VECTOR2I GRID_HELPER::AlignToSegment ( const VECTOR2I& aPoint, const SEG& aSeg ) return nearest; } + VECTOR2I GRID_HELPER::BestDragOrigin( const VECTOR2I &aMousePos, BOARD_ITEM* aItem ) { clearAnchors(); @@ -231,12 +232,13 @@ VECTOR2I GRID_HELPER::BestSnapAnchor( const VECTOR2I& aOrigin, BOARD_ITEM* aDrag VECTOR2I nearestGrid = Align( aOrigin ); double gridDist = ( nearestGrid - aOrigin ).EuclideanNorm(); + if( nearest ) { double snapDist = nearest->Distance( aOrigin ); if( nearest && snapDist < gridDist ) - return nearest->pos; + return nearest->pos; } return nearestGrid; @@ -260,7 +262,6 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos ) break; } - case PCB_PAD_T: { D_PAD* pad = static_cast( aItem ); @@ -367,25 +368,25 @@ void GRID_HELPER::computeAnchors( BOARD_ITEM* aItem, const VECTOR2I& aRefPos ) GRID_HELPER::ANCHOR* GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int aFlags, LSET aMatchLayers ) { - double minDist = std::numeric_limits::max(); - ANCHOR* best = NULL; + double minDist = std::numeric_limits::max(); + ANCHOR* best = NULL; - for( ANCHOR& a : m_anchors ) - { - if( !aMatchLayers[a.item->GetLayer()] ) - continue; + for( ANCHOR& a : m_anchors ) + { + if( !aMatchLayers[a.item->GetLayer()] ) + continue; - if( ( aFlags & a.flags ) != aFlags ) - continue; + if( ( aFlags & a.flags ) != aFlags ) + continue; - double dist = a.Distance( aPos ); + double dist = a.Distance( aPos ); - if( dist < minDist ) - { - minDist = dist; - best = &a; - } - } + if( dist < minDist ) + { + minDist = dist; + best = &a; + } + } - return best; + return best; }