#usage "Arrange silk screen layer on Library

\n" "

" "Author: Y.Onodera 15-11-2003" "

" "Author: Furutanian 7-2-2005" // Define your own silk screenwidth here real silkwidth = 10.0 ; // in mil real newwidth; int newratio; int newdrill; int source, target; int tplace = 21, bplace = 22, tnames = 25, bnames = 26, tvalues = 27, bvalues = 28, offset = 0; string TextOrientation; string cmd = "SET UNDO_LOG OFF;\n"; // advisable for speed reasons string h; void header(void) { sprintf(h, "set wire_bend 2;\n");cmd += h; sprintf(h, "\nGRID mil;\n\n");cmd += h; } void do_arc(UL_ARC A) { if (A.layer == source) { // sprintf(h, "ARC ccw %s %5.3f (%5.3f %5.3f) (%5.3f%5.3f) (%5.3f %5.3f);\n", // caps[A.cap], NewWidth, // u2mil(A.x1), u2mil(A.y1), // u2mil(2*(A.xc)-A.x1), u2mil(2*(A.yc) - A.y1), // u2mil(A.x2), u2mil(A.y2)); newwidth = u2mil(A.width); if (newwidth < silkwidth){ newwidth = silkwidth; } sprintf(h, "ARC %5.3f ccw (%5.3f %5.3f) (%5.3f %5.3f) (%5.3f %5.3f);\n", newwidth, u2mil(A.x1), u2mil(A.y1),u2mil(2*(A.xc)-A.x1), u2mil(2*(A.yc) - A.y1), u2mil(A.x2), u2mil(A.y2)); cmd += h; } } void delete_arc(UL_ARC A) { if (A.layer == source) { sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(A.x1), u2mil(A.y1)); cmd += h; } } void do_wire(UL_WIRE W) { if (W.layer == source) { //sprintf(h, "Change Style %s;\n",styles[W.style]);cmd +=h; //if(W.arc) do_arc(W.arc); //else { //sprintf(h, "WIRE %5.3f %s (%5.3f %5.3f) (%5.3f %5.3f);\n", // NewWidth, caps[W.cap], // u2mil(W.x1), u2mil(W.y1), u2mil(W.x2), u2mil(W.y2)); //cmd += h; if(W.arc){ do_arc(W.arc); }else{ newwidth = u2mil(W.width); if (newwidth < silkwidth){ newwidth = silkwidth; } sprintf(h, "WIRE %5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", newwidth, u2mil(W.x1), u2mil(W.y1), u2mil(W.x2), u2mil(W.y2)); cmd += h; } } } void delete_wire(UL_WIRE W) { if (W.layer == source) { sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(W.x1), u2mil(W.y1)); cmd += h; } } void do_circle(UL_CIRCLE C) { if (C.layer == source) { newwidth = u2mil(C.width); if (newwidth < silkwidth){ newwidth = silkwidth; } sprintf(h, "CIRCLE %5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", newwidth, u2mil(C.x), u2mil(C.y), u2mil(C.x + C.radius), u2mil(C.y)); cmd += h; } } void delete_circle(UL_CIRCLE C) { if (C.layer == source) { sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(C.x), u2mil(C.y)); cmd += h; } } void do_rectangle(UL_RECTANGLE R){ if (R.layer == source) { sprintf(h, "RECT R%5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", R.angle, u2mil(R.x1), u2mil(R.y1), u2mil(R.x2), u2mil(R.y2)); cmd += h; } } void delete_rectangle(UL_RECTANGLE R) { if (R.layer == source) { sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(R.x1), u2mil(R.y1)); cmd += h; } } void do_polygon(UL_POLYGON P){ if (P.layer == source) { P.wires(WP) { newwidth = u2mil(P.width); if (newwidth < silkwidth){ newwidth = silkwidth; } sprintf(h, "POLYGON %5.3f (%5.3f %5.3f)\n ", newwidth, u2mil(WP.x1), u2mil(WP.y1)); cmd += h; break; } P.wires(WP) { sprintf(h, " (%5.3f %5.3f)", u2mil(WP.x2), u2mil(WP.y2)); cmd += h; } sprintf(h, ";\n"); cmd += h; } } void delete_polygon(UL_POLYGON P) { if (P.layer == source) { P.wires(WP){ sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(WP.x1), u2mil(WP.y1)); cmd += h; } } } void do_text(UL_TEXT T) { if (T.layer == source) { newwidth = u2mil(T.size) * T.ratio / 100; newratio = T.ratio; if (newwidth < silkwidth){ newratio = silkwidth * 100 / u2mil(T.size); } sprintf(h, "Change Size %5.3f;\n", u2mil(T.size)); cmd += h; sprintf(h, "Change Ratio %d;\n", newratio); cmd += h; sprintf(h, "Change Font Vector;\n"); cmd += h; sprintf(h, "TEXT '%s' %s%1.0f (%5.3f %5.3f);\n", T.value, TextOrientation, T.angle, u2mil(T.x), u2mil(T.y)); cmd += h; } } void delete_text(UL_TEXT T) { if (T.layer == source) { sprintf(h, "DELETE (%5.3f %5.3f);\n", u2mil(T.x), u2mil(T.y)); cmd += h; } } void do_pad(UL_PAD PAD) { newdrill = u2mil(PAD.drill); if(u2mil(PAD.drill) <= 130){ newdrill = 130; } if(u2mil(PAD.drill) <= 83){ newdrill = 83; } if(u2mil(PAD.drill) <= 59){ newdrill = 59; } if(u2mil(PAD.drill) <= 51){ newdrill = 51; } if(u2mil(PAD.drill) <= 43){ newdrill = 43; } if(u2mil(PAD.drill) <= 39){ newdrill = 39; } if(u2mil(PAD.drill) <= 35){ newdrill = 35; } if(u2mil(PAD.drill) <= 28){ newdrill = 28; } sprintf(h, "CHANGE DRILL %d (%5.3f %5.3f);\n", newdrill, u2mil(PAD.x), u2mil(PAD.y)); cmd += h; //sprintf(h, "CHANGE SHAPE ROUND (%5.3f %5.3f);\n", u2mil(PAD.x), u2mil(PAD.y)); //cmd += h; } void do_hole(UL_HOLE H) { newdrill = u2mil(H.drill); if(u2mil(H.drill) <= 130){ newdrill = 130; } if(u2mil(H.drill) <= 83){ newdrill = 83; } if(u2mil(H.drill) <= 59){ newdrill = 59; } if(u2mil(H.drill) <= 51){ newdrill = 51; } if(u2mil(H.drill) <= 43){ newdrill = 43; } if(u2mil(H.drill) <= 39){ newdrill = 39; } if(u2mil(H.drill) <= 35){ newdrill = 35; } if(u2mil(H.drill) <= 28){ newdrill = 28; } sprintf(h, "CHANGE DRILL %d (%5.3f %5.3f);\n", newdrill, u2mil(H.x), u2mil(H.y)); cmd += h; //sprintf(h, "CHANGE SHAPE ROUND (%5.3f %5.3f);\n", u2mil(H.x), u2mil(H.y)); //cmd += h; } void do_all(UL_PACKAGE P){ // delete each layer target = source + offset; sprintf(h, "DISPLAY NONE;\n"); cmd += h; sprintf(h, "DISPLAY %d;\n", source); cmd += h; if (source == 21) { sprintf(h, "DISPLAY -23 -25 -27 -51;\n"); cmd += h; } if (source == 22) { sprintf(h, "DISPLAY -24 -26 -28 -52;\n"); cmd += h; } P.circles(C) delete_circle(C); P.polygons(P) delete_polygon(P); P.rectangles(R) delete_rectangle(R); P.texts(T) delete_text(T); P.wires(W) delete_wire(W); // create each layer sprintf(h, "Layer %d;\n", target); cmd += h; P.circles(C) do_circle(C); P.polygons(P) do_polygon(P); P.rectangles(R) do_rectangle(R); P.texts(T) do_text(T); P.wires(W) do_wire(W); } if (package) package(P) { header(); TextOrientation = "R"; source = tplace; do_all(P); TextOrientation = "MR"; source = bplace; do_all(P); TextOrientation = "R"; source = tnames; do_all(P); TextOrientation = "MR"; source = bnames; do_all(P); TextOrientation = "R"; source = tvalues; do_all(P); TextOrientation = "MR"; source = bvalues; do_all(P); TextOrientation = "R"; source = 51; // offset = -30; do_all(P); // offset = 0; sprintf(h, "DISPLAY NONE;\n"); cmd += h; sprintf(h, "DISPLAY 17 18 44 45;\n"); // 44, 45 cmd += h; // Drill hole & pad modefy P.contacts(C) { if (C.pad) { do_pad(C.pad); } } P.holes(H) { do_hole(H); } sprintf(h, "DISPLAY ALL;\n"); cmd += h; sprintf(h, "DISPLAY -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -44 -46 -47;\n"); cmd += h; } cmd += "SET UNDO_LOG ON;\n"; // Dialog int Result = dlgDialog("Script to copy silk screen layer") { dlgTextEdit(cmd); dlgHBoxLayout { dlgPushButton("+Execute") dlgAccept(); dlgPushButton("-Cancel") dlgReject(); } }; if (Result == 0) exit(0); exit(cmd);