#usage "Change shape, diameter and drill of all pads in a library\n" "

" "Author: support@cadsoft.de" // THIS PROGRAM IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED // Version 4.1 -- 12.06.2003 libraryan@cadsoft.de string ulp_path = ""; string script_change = ""; int Result = 0; string grid = "GRID MM FINEST;\n"; // *** flags for changes int to_change[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; int begin = - 1; // *** pointer of flags int P_shape = begin + 1; int P_diameter = P_shape + 1; int P_drill = P_diameter + 1; int P_stopmask = P_drill + 1; int P_creammask = P_stopmask + 1; int last = P_creammask + 1; int changefrom = P_diameter; int changeto = last - 1; real change_values[] = { 0, // Pad-Shape 0, // Pad-Diameter 0, // Pad-Drill 0, // Pad-Stop-Mask 0, // Pad-Cream-Mask 0 }; string tochange[] = { "Change pad shape", "Change pad diameter", "Change pad drill", "Change pad stop mask ON/OFF", "Change pad cream mask ON/OFF", "" }; real min_val[] = { 0.0, 0.0, 0.0, 0.0, 0.0 }; real max_val[] = { 13.1, 13.1, 13.1, 1, 1, 0 }; string min_max[] = { "in the range of 0.0...13.1 &mm", "in the range of 0.0...13.1 &mm", "in the range of 0.0...13.1 &mm", "in the range of 0 Off / 1 On", "in the range of 0 Off / 1 On", "" }; string stop_onoff = "ON"; string cream_onoff = "ON"; int shape = 0; int shape1 = 0; string pad1, padx; string shape_form[] = { // change Shape "NONE", "SQUARE", "ROUND", "OCTAGON", "" }; void get_changemenue(string lib) { Result = dlgDialog("Change Library") { dlgLabel("(" + lib + ")"); dlgStretch(0); dlgHBoxLayout { dlgGroup("Change") { dlgStretch(0); for (int n = 0; n <= changeto; n++) { dlgCheckBox(tochange[n], to_change[n]); } } dlgStretch(1); } dlgStretch(1); dlgHBoxLayout { dlgStretch(0); dlgPushButton("+Change") dlgAccept(); dlgStretch(1); dlgPushButton("-ESC") dlgReject(); dlgStretch(0); } dlgStretch(0); }; if (Result == 0) exit (0); if (to_change[P_shape]) { Result = dlgDialog("Change pad shape") { dlgHBoxLayout { dlgStretch(0); dlgGroup("Shape pin 1") { dlgStretch(0); dlgGridLayout { dlgCell(1, 1) dlgRadioButton(shape_form[0], shape1); dlgCell(2, 1) dlgRadioButton(shape_form[1], shape1); dlgCell(3, 1) dlgRadioButton(shape_form[2], shape1); dlgCell(4, 1) dlgRadioButton(shape_form[3], shape1); } } dlgStretch(0); dlgLabel(pad1); dlgStretch(0); dlgGroup("Shape") { dlgStretch(0); dlgGridLayout { dlgCell(1, 1) dlgRadioButton(shape_form[0], shape); dlgCell(2, 1) dlgRadioButton(shape_form[1], shape); dlgCell(3, 1) dlgRadioButton(shape_form[2], shape); dlgCell(4, 1) dlgRadioButton(shape_form[3], shape); } } dlgStretch(0); dlgLabel(padx); dlgStretch(1); } dlgHBoxLayout { dlgStretch(0); dlgPushButton("+OK") dlgAccept(); dlgStretch(1); dlgPushButton("-ESC") dlgReject(); dlgStretch(0); } }; if (Result == 0) exit (0); } for (int n = changefrom; n <= changeto; n++) { if (to_change[n]) { Result = dlgDialog(tochange[n]){ dlgLabel(min_max[n]); dlgRealEdit(change_values[n], min_val[n], max_val[n]); dlgVBoxLayout { dlgHBoxLayout { dlgStretch(0); dlgPushButton("+OK") dlgAccept(); dlgStretch(1); dlgSpacing(100); dlgPushButton("-Cancel") dlgReject(); dlgStretch(0); } } }; } if (Result == 0) exit (0); } return; } // change Pad Shape void change_shape(string shape, int x, int y) { printf("Change SHAPE %s (%.4f %.4f);\n", shape, u2mm(x), u2mm(y)); return; } // change Pad Diameter void change_pdiameter(real diameter, int x, int y) { printf("Change DIAMETER %.4f (%.4f %.4f);\n", diameter, u2mm(x), u2mm(y)); return; } // change Drill Diameter void change_prill(real diameter, int x, int y) { printf("Change DRILL %.4f (%.4f %.4f);\n", diameter, u2mm(x), u2mm(y)); return; } // change Stop mask flag void change_mask(string onoff, int x, int y) { printf("Change %s (%.4f %.4f);\n", onoff, u2mm(x), u2mm(y)); return; } if (library) { char bkslash = '/'; int pos = strrchr(argv[0], bkslash); if (pos >= 0) { ulp_path = strsub(argv[0], 0, pos + 1); } pad1 = ""; padx = ""; int n = 0; library(L) { int posb = strrchr(argv[0], bkslash); if (posb >= 0) { ulp_path = strsub(argv[0], 0, posb + 1); } get_changemenue(L.name); if (!to_change[P_shape] && !to_change[P_diameter] && !to_change[P_drill] && !to_change[P_stopmask] && !to_change[P_creammask]) exit (0); if (change_values[P_stopmask]) stop_onoff = "ON"; else stop_onoff = "OFF"; if (change_values[P_creammask]) cream_onoff = "ON"; else cream_onoff = "OFF"; script_change = filesetext(L.name, "~~~.scr"); output(script_change, "wtD") { printf("DISPLAY NONE 1 16 17;\n"); int firstf = 1; L.packages(P) { printf("EDIT %s.PAC;\n", P.name); if (firstf) { printf("%s",grid); firstf = 0; } if (to_change[P_shape] && (shape || shape1)){ P.contacts(C) { if (C.pad) { if (C.name == "1" && shape1) change_shape(shape_form[shape1], C.pad.x, C.pad.y); else { if (shape) change_shape(shape_form[shape], C.pad.x, C.pad.y); } } } } if (to_change[P_diameter]) { P.contacts(C) { if (C.pad) change_pdiameter(change_values[P_diameter], C.pad.x, C.pad.y); } } if (to_change[P_drill]) { P.contacts(C) { if (C.pad) change_prill(change_values[P_drill], C.pad.x, C.pad.y); } } if (to_change[P_stopmask]) { P.contacts(C) { if (C.pad) change_mask("STOP " + stop_onoff, C.pad.x, C.pad.y); if (C.smd) change_mask("STOP " + stop_onoff, C.smd.x, C.smd.y); } } if (to_change[P_creammask]) { P.contacts(C) { if (C.smd) change_mask("CREAM " + cream_onoff, C.smd.x, C.smd.y); } } } printf("GRID DEFAULT;\n"); printf("DISPLAY NONE 1 16 17 21;\n"); } } exit ("SCRIPT '" + script_change + "';\n"); // REMOVE " + script_change + ";\n"); } else { dlgMessageBox("\n*** Start this ULP in a Library ***\n"); exit (0); }