// THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, // EXPRESSED OR IMPLIED. /* Dieses ULP generiert ein Script "CHNWIDTH.SCR" das die Leiter- * bahnbreite abhaengig vom Signalnamen (SigName-Array) und der * vorgegebenen Min- (minwidth) Max-Breite (maxwidth) in mm aendert. * Das Array SigName kann beliebig erweitert werden. * Das Feld (0 = "_") darf nicht geloescht bzw. benutzt werden. * Das letzte Feld muss einen leeren String ("") enthalten. * * This ULP generates a script file 'CHNWIDTH.SCR' that changes * the wire width of certain signals (SigName array) and do have * a wire width in between the minimum (minwidth) and maximum * (maxwidth) values. * The SigName array can be extended as needed. The entry * (0="_") may not be modified or deleted. The last entry * must contain an empty string (""). * * 10.03.2000 alf@cadsoft.de */ string SigName[] = { // Signal name array "_", // string zero do not change "GND", "VCC", "", "" } ; // Array End real changewidth = 1.0; // real minwidth = 0.30; real maxwidth = 0.75; string grid = "MM" ; // ** change to Inch or Mil change // also u2mm to u2inch or u2mil ** string Version = "CHNWIDTH.ULP Version 1.0"; int index[]; int x1[], y1[], x2[], y2[], layer[]; int usedlayer[]; int n = 1; int found(string fnam) { int fnd = 1; do { if (SigName[fnd] == fnam) { return fnd; } ++fnd; } while (SigName[fnd]); return 0; } real fwidth(real ww) { if (ww <= maxwidth && ww >= minwidth) return 1; return 0; } void disp(int l) { printf("DISPLAY NONE %d ;\n", l); } void clearlay() { for (int ly = 0; ly <= 255; ly++) usedlayer[ly] = 0; } if (board) board(B) { clearlay(); output ("chnwidth.scr") { printf("TEXT '%s\n", Version); printf("TEXT '%s\n\n", EAGLE_SIGNATURE); printf("TEXT 'exported from %s\nTEXT ' at %s\n\n", B.name, t2string(time()) ); printf("TEXT 'This Script chanched Wire Width between %.3f %s and %.3f %s to %.3f %s\n", minwidth, grid, maxwidth, grid, changewidth, grid); printf("EDIT %s\n", B.name); printf("GRID %s;\n", grid); B.signals(S) { if (found(S.name)) { S.wires(W) { if(fwidth(u2mm(W.width))) { // ** change for Inch or Mil x1[n] = W.x1; y1[n] = W.y1; x2[n] = W.x2; y2[n] = W.y2; layer[n] = W.layer; ++n; } } } } sort(n, index, layer); int dl = 0; for (int i = 1; i < n; ++i) { if(dl != layer[index[i]]) { dl = layer[index[i]]; disp(dl); usedlayer[dl] = 1; } printf("CHANGE WIDTH %.3f (%.3f %.3f);\n", changewidth, (u2mm(x1[index[i]]) + u2mm(x2[index[i]])) / 2, (u2mm(y1[index[i]]) + u2mm(y2[index[i]])) / 2 ); } printf("DISPLAY 17 18 20 21 22 "); for (int ly = 0; ly <= 255; ly++) { if( usedlayer[ly]) printf("%d ",ly); } } }