> The crosshair snaps to a grid point or pin center whichever is closer, but > it will snap to a > grid point or the nearest "defining endpoint" of a pad. It will not snap to > a *pad* center. (I wish it still did :( .) Here's a patch I made a few months ago to snap the crosshair to the centre of a pad. But even this didn't seem to work how I wanted it. I think we need to have snap points at all the corners and centers axises, but these would be offset into the pad by some factor, maybe based on the selected line width and minimum touching copper overlap. I've attached an image which shows the possible snap points for square and rounded corner shapes. An extra weighting along the red lines might also be useful. Robert Index: src/crosshair.c =================================================================== RCS file: /cvsroot/pcb/pcb/src/crosshair.c,v retrieving revision 1.33 diff -u -r1.33 crosshair.c --- src/crosshair.c 21 Oct 2007 02:02:16 -0000 1.33 +++ src/crosshair.c 25 Oct 2007 23:01:25 -0000 @@ -832,14 +832,27 @@ { PadTypePtr pad = (PadTypePtr) ptr2; LocationType px, py; + LocationType cpx, cpy; + + cpx = (pad->Point1.X + pad->Point2.X) / 2; + cpy = (pad->Point1.Y + pad->Point2.Y) / 2; + if (SQUARE (pad->Point1.X - Crosshair.X) + SQUARE (pad->Point1.Y - Crosshair.Y) < - SQUARE (pad->Point2.X - Crosshair.X) + SQUARE (pad->Point2.Y - + SQUARE (cpx - Crosshair.X) + SQUARE (cpy - Crosshair.Y)) { px = pad->Point1.X; py = pad->Point1.Y; } + else if (SQUARE (cpx - Crosshair.X) + + SQUARE (cpy - Crosshair.Y) < + SQUARE (pad->Point2.X - Crosshair.X) + SQUARE (pad->Point2.Y - + Crosshair.Y)) + { + px = cpx; + py = cpy; + } else { px = pad->Point2.X;
Attachment:
snappoints.png
Description: PNG image
_______________________________________________ geda-user mailing list geda-user@xxxxxxxxxxxxxx http://www.seul.org/cgi-bin/mailman/listinfo/geda-user