/*
* Utility to convert overlapping Excellon drill hits into drill slots.
- * Copyright © 2018 Nick Bowler
+ * Copyright © 2018, 2021 Nick Bowler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
copysign = convsign;
}
- printf("Copyright %s 2018 Nick Bowler.\n", copysign);
+ printf("Copyright %s 2021 Nick Bowler.\n", copysign);
puts("License GPLv3+: GNU GPL version 3 or any later version.");
puts("This is free software: you are free to change and redistribute it.");
puts("There is NO WARRANTY, to the extent permitted by law.");
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)];
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);
}
CNearTreeObjects(t, &holes);
+ if (!holes)
+ goto out;
+
for (i = 0; i < CVectorSize(holes); i++) {
gerbv_net_t *hole;
gerbv_image_delete_net(hole);
}
+out:
CNearTreeFree(&t);
return ret;
}