Deprecated:  The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#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);