#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; void header(void) { printf("set wire_bend 2;\n"); printf("GRID mil;\n"); } void do_arc(UL_ARC A) { if (A.layer == source) { // printf("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; } printf("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)); } } void delete_arc(UL_ARC A) { if (A.layer == source) { printf("DELETE (%5.3f %5.3f);\n", u2mil(A.x1), u2mil(A.y1)); } } void do_wire(UL_WIRE W) { if (W.layer == source) { //printf("Change Style %s;\n",styles[W.style]); //if(W.arc) do_arc(W.arc); //else { //printf("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)); if(W.arc){ do_arc(W.arc); }else{ newwidth = u2mil(W.width); if (newwidth < silkwidth){ newwidth = silkwidth; } printf("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)); } } } void delete_wire(UL_WIRE W) { if (W.layer == source) { printf("DELETE (%5.3f %5.3f);\n", u2mil(W.x1), u2mil(W.y1)); } } void do_circle(UL_CIRCLE C) { if (C.layer == source) { newwidth = u2mil(C.width); if (newwidth < silkwidth){ newwidth = silkwidth; } printf("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)); } } void delete_circle(UL_CIRCLE C) { if (C.layer == source) { printf("DELETE (%5.3f %5.3f);\n", u2mil(C.x), u2mil(C.y)); } } void do_rectangle(UL_RECTANGLE R){ if (R.layer == source) { printf("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)); } } void delete_rectangle(UL_RECTANGLE R) { if (R.layer == source) { printf("DELETE (%5.3f %5.3f);\n", u2mil(R.x1), u2mil(R.y1)); } } void do_polygon(UL_POLYGON P){ if (P.layer == source) { P.wires(WP) { newwidth = u2mil(P.width); if (newwidth < silkwidth){ newwidth = silkwidth; } printf("POLYGON %5.3f (%5.3f %5.3f)\n ", newwidth, u2mil(WP.x1), u2mil(WP.y1)); break; } P.wires(WP) { printf(" (%5.3f %5.3f)", u2mil(WP.x2), u2mil(WP.y2)); } printf(";\n"); } } void delete_polygon(UL_POLYGON P) { if (P.layer == source) { P.wires(WP){ printf("DELETE (%5.3f %5.3f);\n", u2mil(WP.x1), u2mil(WP.y1)); } } } 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); } printf("Change Size %5.3f;\n", u2mil(T.size)); printf("Change Ratio %d;\n", newratio); printf("Change Font Vector;\n"); printf("TEXT '%s' %s%1.0f (%5.3f %5.3f);\n", T.value, TextOrientation, T.angle, u2mil(T.x), u2mil(T.y)); } } void delete_text(UL_TEXT T) { if (T.layer == source) { printf("DELETE (%5.3f %5.3f);\n", u2mil(T.x), u2mil(T.y)); } } 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; } printf("CHANGE DRILL %d (%5.3f %5.3f);\n", newdrill, u2mil(PAD.x), u2mil(PAD.y)); //printf("CHANGE SHAPE ROUND (%5.3f %5.3f);\n", u2mil(PAD.x), u2mil(PAD.y)); } 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; } printf("CHANGE DRILL %d (%5.3f %5.3f);\n", newdrill, u2mil(H.x), u2mil(H.y)); //printf("CHANGE SHAPE ROUND (%5.3f %5.3f);\n", u2mil(H.x), u2mil(H.y)); } void do_all(UL_PACKAGE P){ // delete each layer target = source + offset; printf("DISPLAY NONE;\n"); printf("DISPLAY %d;\n", source); if (source == 21) { printf("DISPLAY -23 -25 -27 -51;\n"); } if (source == 22) { printf("DISPLAY -24 -26 -28 -52;\n"); } 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 printf("Layer %d;\n", target); 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); } string script_change = ""; if (library) library(L) { script_change = "ulp/temp.scr"; output(script_change, "wt") { printf("SET UNDO_LOG OFF;\n"); header(); L.packages(P) { printf("\nEDIT %s.PAC;\n", P.name); 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; printf("DISPLAY NONE;\n"); printf("DISPLAY 17 18 44 45;\n"); // Drill hole & pad modefy P.contacts(C) { if (C.pad) { do_pad(C.pad); } } P.holes(H) { do_hole(H); } printf("DISPLAY ALL;\n"); printf("DISPLAY -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -44 -46 -47;\n"); } printf("\nSET UNDO_LOG ON;\n"); } exit ("SCRIPT " + script_change + ";\n"); }