// 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 *** 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. * * !! Mit NameOff = 1 kann die Netz-Namen-Ueberpruefung abgeschaltet * werden. * * * 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 (""). * * !! NameOff = 1 switches off the checking of net names * * 05.04.2000 alf@cadsoft.de */ int Gridval = 1; // 1=mm 2=mil 3=inch *** // choose the value for the units you're working with real changewidth = 0.90; // gewuenschte Breite in *** // enter desired width here real minwidth = 0.00; // Auswahl-Min-Breite in *** // minimum width and real maxwidth = 130.75; // Auswahl-Max-Breite in *** // maximum width of tracks that will be taken into consideration. int NameOff = 0; // 0 = Breite abhaengig vom Netznamen aendern // 0 = change width by name // 1 = Breite unabhaengig vom Netznamen aendern // 1 = change width without name string SigName[] = { // Signal name array "_", // String [0] darf nicht geaendert werden // string [0] must not be change "GND", "VCC", "", // Das Array kann beliebig erweitert werden. "", // Array may be modified here. "", "" } ; // Der Letzte String muss LEER sein ! NICHT AENDERN ! // DON'T CHANGE LAST STRING HERE string grid[] = { "MIC", "MM", "MIL", "INCH" }; string Version = "CHNWIDTH.ULP Version 1.1"; 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 changed Wire Width between %.3f %s and %.3f %s to %.3f %s\n", minwidth, grid[Gridval], maxwidth, grid[Gridval], changewidth, grid[Gridval]); printf("EDIT %s\n", B.name); printf("GRID %s;\n", grid[Gridval]); B.signals(S) { if (found(S.name) || NameOff) { real Wwidth = 0; S.wires(W) { switch (Gridval) { case 1: Wwidth = u2mm(W.width); break; case 2: Wwidth = u2mil(W.width); break; case 3: Wwidth = u2inch(W.width); break; } if(fwidth(Wwidth)) { 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; } switch (Gridval) { case 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 ); break; case 2: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n", changewidth, (u2mil(x1[index[i]]) + u2mil(x2[index[i]])) / 2, (u2mil(y1[index[i]]) + u2mil(y2[index[i]])) / 2 ); break; case 3: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n", changewidth, (u2inch(x1[index[i]]) + u2inch(x2[index[i]])) / 2, (u2inch(y1[index[i]]) + u2inch(y2[index[i]])) / 2 ); break; } } printf("DISPLAY 17 18 20 21 22 "); for (int ly = 0; ly <= 255; ly++) { if( usedlayer[ly]) printf("%d ",ly); } } }