From 8cb025ed47bb9d58ffc242af9c5b12ac540fc9a4 Mon Sep 17 00:00:00 2001 From: Peter Clifton Date: Sat, 9 Jan 2016 17:30:12 +0000 Subject: [PATCH] Add hysteresis to grid-snapping --- src/crosshair.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/crosshair.c b/src/crosshair.c index b74e8bb695..970db92e0a 100644 --- a/src/crosshair.c +++ b/src/crosshair.c @@ -901,6 +901,11 @@ FitCrosshairIntoGrid (Coord X, Coord Y) struct snap_data snap_data; int ans; + Coord old_x, old_y; + + old_x = Crosshair.X; + old_y = Crosshair.Y; + Crosshair.X = CLAMP (X, Crosshair.MinX, Crosshair.MaxX); Crosshair.Y = CLAMP (Y, Crosshair.MinY, Crosshair.MaxY); @@ -927,11 +932,26 @@ FitCrosshairIntoGrid (Coord X, Coord Y) } snap_data.crosshair = &Crosshair; - snap_data.nearest_sq_dist = - crosshair_sq_dist (&Crosshair, nearest_grid_x, nearest_grid_y); snap_data.nearest_is_grid = true; snap_data.x = nearest_grid_x; snap_data.y = nearest_grid_y; +#if 0 + snap_data.nearest_sq_dist = crosshair_sq_dist (&Crosshair, snap_data.x, snap_data.y); + + if (snap_data.nearest_sq_dist > PCB->Grid / 3 * PCB->Grid / 3) + { + snap_data.x = old_x; + snap_data.y = old_y; + } +#endif + + if (labs (nearest_grid_x - Crosshair.X) > PCB->Grid / 3) + snap_data.x = old_x; + + if (labs (nearest_grid_y - Crosshair.Y) > PCB->Grid / 3) + snap_data.y = old_y; + + snap_data.nearest_sq_dist = crosshair_sq_dist (&Crosshair, snap_data.x, snap_data.y); ans = NO_TYPE; if (!PCB->RatDraw) -- 2.11.4.GIT