#usage "Set spin flag on all (smashed) texts\n" "

" "Generates a command sequence which set spin flag at all texts." "RUN spin-all [ON | OFF]
" "If no option used, the default is ON.
" "Option ON OFF are not case sensitive.
" "

" "Author: support@cadsoft.de" // THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED #require 5.1200 string Version = "1.0"; // 2009-01-15 alf@cadsoft.de int test = 0; int onoff = 0; if (strupr(argv[1]) == "ON") onoff = 0; if (strupr(argv[1]) == "OFF") onoff = 1; int tx[], ty[], tl[], ts[], index[]; string tv[]; int cnttext = 0; int cnt_unsmashed = 0; int lVisible[]; int changed = 0; string cmd; string h; string scriptfile; /*** Functions ***/ void header(void) { sprintf(cmd, "# Exported from %s\n# by %s, %s\n", filesetext(scriptfile, ".brd"), filename(argv[0]), EAGLE_SIGNATURE ); cmd += "SET UNDO_LOG OFF;\n"; // advisable for speed reasons cmd += "GRID mm;\n"; } void addlist(UL_TEXT T) { tl[cnttext] = T.layer; tx[cnttext] = T.x; ty[cnttext] = T.y; ts[cnttext] = T.spin; tv[cnttext] = T.value; cnttext++; return; } if (board) board(B) { B.layers(L) lVisible[L.number] = L.visible; scriptfile = filesetext(B.name, ".scr"); header(); B.texts(T) { // Texts in Board addlist(T); } B.elements(E) { E.texts(T) { // *** smased texts in elements *** if (T.value) addlist(T); // only texts with value, } E.package.texts(T) { // *** non smased cnt_unsmashed++; } } sort(cnttext, index, tl); int actlayer = 0; for(int n = 0; n < cnttext; n++) { if (actlayer != tl[index[n]]) { actlayer = tl[index[n]]; sprintf(h, "DISPLAY NONE %d;\n", actlayer); cmd+=h; } if (ts[index[n]] == onoff) { sprintf(h, "ROTATE SR0 (%.4f %.4f);\n", u2mm(tx[index[n]]), u2mm(ty[index[n]]) ); cmd += h; changed++; } } string info; if (cnt_unsmashed) sprintf(info, "%d unsmached texts found.", cnt_unsmashed); if (!changed) { dlgMessageBox("No text found to change the spin flag.\n\n"+info, "OK"); exit(0); } // prepare display mode cmd += "DISPLAY NONE "; for(int l = 1; l < 255; l++) { if (lVisible[l]) { sprintf(h, " %d", l); cmd += h; } } cmd += ";\n"; cmd += "SET UNDO_LOG ON;\n"; cmd += "GRID LAST;\n"; // EditBox if (test) { int Result = dlgDialog("Spin all texts") { dlgHBoxLayout { dlgTextEdit(cmd); dlgVBoxLayout { dlgSpacing(300); } } dlgHBoxLayout { dlgSpacing(500); } dlgLabel(info); dlgHBoxLayout { dlgPushButton("+&Execute") dlgAccept(); dlgPushButton("-&Cancel") dlgReject(); dlgStretch(1); } }; if (Result == 0) exit(0); } output(scriptfile, "wtD") printf("%s", cmd); exit("SCRIPT '" + scriptfile + "';"); } else { dlgMessageBox("Start this ULP in a board.", "OK"); exit(-1); }