#usage "Export drill configuration\n"
"
"
"Generates a drill configuration file for the current board."
"
"
"Units: mm or inches can be chosen."
"
"
"The generated file can be edited before saving."
"
"
"Use this ULP also for checking the drills of a board."
"
"
"Author: support@cadsoft.de"
// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED
/*
* This EAGLE User Language Program generates
* a drill configuration file for the current
* board.
*
* Units can be switched between mm and inch.
*/
string unitName[] = { "mm", "in" };
int Unit, unitPrec[] = { 2, 3 }, RoundFactor = pow(10, unitPrec[Unit]),
Result = 0, imax = 0;
real Drilling[];
string s, fileName, conf = "";
enum { unitMM, unitINCH};
int getunit (void) {
string s;
int Unit = unitMM; // preset unit
Result = dlgDialog("Drill Configuration") {
dlgHBoxLayout {
dlgStretch(0);
dlgGroup("Select unit for output file") {
dlgStretch(0);
dlgGridLayout {
dlgCell(1, 0) dlgRadioButton("&mm", Unit);
dlgCell(2, 0) dlgRadioButton("&inch", Unit);
}
}
dlgStretch(0);
dlgVBoxLayout {
dlgHBoxLayout {
dlgSpacing(20);
dlgStretch(0);
dlgPushButton("+OK") dlgAccept();
dlgStretch(1);
}
dlgHBoxLayout {
dlgSpacing(20);
dlgStretch(0);
dlgPushButton("-Quit") dlgReject();
dlgStretch(1);
}
}
dlgStretch(1);
}
dlgStretch(1);
};
RoundFactor = pow(10, unitPrec[Unit]);
return Unit;
}
void AddDrilling(int Size)
{
real x;
switch (Unit) {
case unitMM: x = round(u2mm(Size) * RoundFactor) / RoundFactor;
break;
case unitINCH: x = round(u2inch(Size) * RoundFactor) / RoundFactor;
break;
}
for (int i = imax; --i >= 0; )
if (Drilling[i] == x)
return;
Drilling[imax++] = x;
}
Unit = getunit();
if (Result == 0) exit(0);
board(B) {
B.holes(H) AddDrilling(H.drill);
B.signals(S) S.vias(V) AddDrilling(V.drill);
B.elements(E) {
E.package.contacts(C) {
if (C.pad)
AddDrilling(C.pad.drill);
}
E.package.holes(H) AddDrilling(H.drill);
}
sort(imax, Drilling);
for (int i = 0; i < imax; ++i) {
sprintf(s, "T%02d %5.*f%s\n", i + 1, unitPrec[Unit], Drilling[i], unitName[Unit]);
conf += s;
}
dlgDialog("Edit Drill Configuration") {
dlgVBoxLayout {
dlgLabel("Edit only if you are sure what you do!");
dlgTextEdit(conf);
dlgPushButton("+Ok") dlgAccept();
dlgPushButton("-Cancel") dlgReject();
}
};
fileName = dlgFileSave("Save Configuration File", filesetext(B.name, ".drl"), "*.drl");
if (fileName == "") exit(0);
output(fileName) {
printf("%s",conf);
}
}