#usage "This ULP changes the wire width of certain signals and do have " "a wire width in between the minimum (minwidth) and maximum (maxwidth) values.

" "NameOff = 1 switches off the checking of net names.

" string hilfe = "Dieses ULP ändert die Leiterbahnbreite abhaengig vom Signalnamen und " "der vorgegebenen min. max. Breite.

" + "! Mit NameOff kann die Netz-Namen-Ueberpruefung abgeschaltet werden.

"; // "THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED." // * 2005-03-02 alf@cadsoft.de // 2008-06-03 alf@cadsoft.de display the same layers as in the beginning string help = usage; if (language() == "de") help = hilfe; int Gridval = 1; // 1=mm 2=mil 3=inch *** // choose the value for the units you're working with string grid_unit; real changewidth = 0.3; // gewuenschte Breite in *** // enter desired width here real minwidth = 0.0; // Auswahl-Min-Breite in *** // minimum width and real maxwidth = 13.1; // 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 signals[] = { "" }; string chsignals[] = { "" }; int chngsig = 0; int lastSigCh = 0; int decs; string list; string grid[] = { "MIC", "MM", "MIL", "INCH" }; real maxwidthUnit[] = { 13100.0, 13.1, 516.0, 0.516 }; string Version = " Version 1.5"; int index[]; int x1[], y1[], x2[], y2[], layer[]; int usedlayer[]; int n = 1; int lVisible[]; // 2008-06-03 alf@cadsoft.de int found(string fnam) { int fnd = 0; do { if (chsignals[fnd] == fnam) { return 1; break; } ++fnd; } while (chsignals[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); return; } void clearlay() { for (int ly = 0; ly <= 255; ly++) usedlayer[ly] = 0; return; } void clearsig (int selct) { for (int r = selct; r < lastSigCh; r++) { chsignals[r] = chsignals[r + 1]; } chsignals[r + 1] = ""; if (lastSigCh) lastSigCh--; return; } void AddList (string SigName) { int found = 0; for (int r = 0; r < lastSigCh; r++) { if (chsignals[r] == SigName) { found = 1; break; } } if (!found) { chsignals[r] = SigName; lastSigCh++; } return; } void menue() { int cs; int l; int Result = dlgDialog("Change wire with") { string slist[]; dlgLabel(help); dlgSpacing(40); dlgGridLayout { dlgCell (0, 1) dlgSpacing(200); dlgCell (0, 5) dlgSpacing(200); dlgCell (1, 1) dlgLabel("&Signal list"); dlgCell (2, 1) dlgComboBox(signals, chngsig); dlgCell (2, 3) dlgPushButton("&Add -->>") { AddList(signals[chngsig]); } dlgCell (1, 5) dlgLabel("Signals &to change"); dlgCell (2, 5) dlgComboBox(chsignals, decs); dlgCell (2, 6) dlgPushButton("&Delete") { clearsig(decs); } } dlgStretch(1); dlgCheckBox("&Change without Signal name", NameOff); dlgHBoxLayout { dlgGroup("between wire width : " + grid_unit) { dlgHBoxLayout { dlgLabel("Mi&n. "); dlgRealEdit(minwidth, 0.0, maxwidthUnit[Gridval]); dlgLabel(" Ma&x. "); dlgRealEdit(maxwidth, minwidth, maxwidthUnit[Gridval]); } } dlgLabel(" new wire &width "); dlgRealEdit(changewidth); dlgStretch(1); } dlgHBoxLayout { dlgStretch(0); dlgPushButton("&OK") dlgAccept(); dlgStretch(1); dlgPushButton("-Cancel") dlgReject(); dlgStretch(0); } dlgStretch(0); }; if (Result == 0) exit (0); return; } if (board) board(B) { B.layers(L) { lVisible[L.number] = L.visible; } int s = 0; B.signals(S) { signals[s] = S.name; s++; } Gridval = B.grid.unit; grid_unit = "Unit " + grid[Gridval]; maxwidth = maxwidthUnit[Gridval]; menue(); clearlay(); string file = filesetext(B.name, "chnwidth.scr"); output (file, "wtD") { printf("# %s\n", Version); printf("# %s\n\n", EAGLE_SIGNATURE); printf("# exported from %s\n# at %s\n\n", B.name, t2string(time()) ); printf("# 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("GRID %s FINEST;\n", grid[Gridval]); B.signals(S) { if (found(S.name) || NameOff) { real Wwidth; S.wires(W) { switch (Gridval) { case 0: Wwidth = u2mic(W.width); break; 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 0: printf("CHANGE WIDTH %.3f (%.3f %.3f);\n", changewidth, (u2mic(x1[index[i]]) + u2mic(x2[index[i]])) / 2, (u2mic(y1[index[i]]) + u2mic(y2[index[i]])) / 2 ); break; 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(";\n"); printf("DISPLAY NONE "); for(int l = 1; l < 90; l++) { if (lVisible[l]) { printf(" %d", l); } } for(l = 100; l < 256; l++) { if (lVisible[l]) { printf(" %d", l); } } printf(";\nSET DISPLAY_MODE REAL;\nGRID LAST;\n"); } exit ("SCRIPT '" + file + "';"); } else dlgMessageBox("start this ULP in Board", "OK");