#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);