X-Git-Url: https://git.draconx.ca/gitweb/slotifier.git/blobdiff_plain/0c9d7fe949b77df0c02dace419eea9e097caf69d..4e1fa5cd8519f2de9bd504e03c0d6394b104692a:/src/slotifier.c diff --git a/src/slotifier.c b/src/slotifier.c index 0165931..3998926 100644 --- a/src/slotifier.c +++ b/src/slotifier.c @@ -221,7 +221,7 @@ static int combine_holes(gerbv_image_t *drill, gerbv_net_t *hole, hole->aperture = -hole->aperture; for (i = 0; i < CVectorSize(group); i++) { - double xy[2], dia; + double xy[2], dia, r; CVectorGetElement(group, &hole, i); tool = drill->aperture[abs(hole->aperture)]; @@ -230,10 +230,13 @@ static int combine_holes(gerbv_image_t *drill, gerbv_net_t *hole, xy[0] = hole->start_x; xy[1] = hole->start_y; dia = tool->parameter[0]; + /* Half a mil slop to decisively include points on boundary. */ + r = dia/2 + 0.0005; + if (drill->aperture[biggest_tool]->parameter[0] < dia) biggest_tool = abs(hole->aperture); - if (CNearTreeFindInSphere(t, dia, 0, tmp, xy, 1) != 0) { + if (CNearTreeFindInSphere(t, r, 0, tmp, xy, 1) != 0) { /* We should always should find at least one hole! */ fprintf(stderr, _("%s: fatal error searching holes\n"), progname); @@ -330,6 +333,9 @@ static int slotify(gerbv_image_t *drill) } CNearTreeObjects(t, &holes); + if (!holes) + goto out; + for (i = 0; i < CVectorSize(holes); i++) { gerbv_net_t *hole; @@ -355,6 +361,7 @@ static int slotify(gerbv_image_t *drill) gerbv_image_delete_net(hole); } +out: CNearTreeFree(&t); return ret; } @@ -432,5 +439,5 @@ int main(int argc, char **argv) ret = EXIT_FAILURE; out: gerbv_destroy_project(gp); - return 0; + return ret; }