#usage "Exports a board layout.\n"
"
"
"This ULP exports all elements of a board layout so that it may be regenerated with a script file."
"
"
"Author: klcallan@yahoo.com, modified by: jared@sharebrained.com"
if (board)
board(B) {
string partlist[]; // holds an array of which reference designators have been ADDed
int partlistindex;
int x;
string key;
string options;
partlistindex = 0;
key = "";
string wirestyle;
string p = "";
string s = "";
string e = "";
s = B.name;
char c = '/';
int pos = strrchr(s, c);
if (pos >= 0) {
p = strsub(s, 0, pos + 1);
}
string fileName = p + "temp.scr";
output(fileName) {
printf("GRID MIC\n");
printf("GRID FINEST\n");
/*
B.layers(LAY) {
printf("LAYER %d %s;\n", LAY.number, LAY.name);
}
*/
B.circles(CIR) {
printf("LAYER %d;\n", CIR.layer);
printf("CIRCLE %5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", u2mic(CIR.width), u2mic(CIR.x), u2mic(CIR.y), u2mic(CIR.x + CIR.radius), u2mic(CIR.y));
}
B.holes(HOL) {
printf("HOLE %5.3f (%5.3f %5.3f);\n", u2mic(HOL.drill), u2mic(HOL.x), u2mic(HOL.y));
}
B.rectangles(REC) {
printf("LAYER %d;\n", REC.layer);
printf("RECT (%5.3f %5.3f) (%5.3f %5.3f);\n", u2mic(REC.x1), u2mic(REC.y1), u2mic(REC.x2), u2mic(REC.y2));
}
B.texts(TEX) {
options = "";
if(TEX.spin) {
options = "S";
}
if(TEX.mirror) {
options += "MR";
}
else {
options += "R";
}
printf("LAYER %d\n", TEX.layer);
printf("TEXT '%s' %s%f (%5.3f %5.3f);\n", TEX.value, options, TEX.angle, u2mic(TEX.x), u2mic(TEX.y));
printf("CHANGE SIZE %5.3f (%5.3f %5.3f);\n", u2mic(TEX.size), u2mic(TEX.x), u2mic(TEX.y));
}
B.wires(WIR) {
printf("LAYER %d\n", WIR.layer);
printf("WIRE %5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", u2mic(WIR.width), u2mic(WIR.x1), u2mic(WIR.y1), u2mic(WIR.x2), u2mic(WIR.y2));
}
B.polygons(POL) {
printf("SET WIRE_BEND 2;\n");
printf("LAYER %d\n", POL.layer);
printf("POLY %5.3f ", u2mic(POL.width));
int first = 1;
POL.contours(CON) {
if (first) {
printf("(%5.3f %5.3f) (%5.3f %5.3f)", u2mic(CON.x1), u2mic(CON.y1), u2mic(CON.x2), u2mic(CON.y2));
first = 0;
}
else {
printf(" (%5.3f %5.3f)", u2mic(CON.x2), u2mic(CON.y2));
}
}
printf(";\n");
}
B.elements(ELE) {
options = "";
if(ELE.spin) {
options = "S";
}
if(ELE.mirror) {
options += "MR";
}
else {
options += "R";
}
printf("MOVE '%s' (%5.3f %5.3f);\n", ELE.name, u2mic(ELE.x), u2mic(ELE.y));
printf("ROTATE %s%5.3f '%s';\n", options, ELE.angle, ELE.name);
}
B.signals(SIG) {
/*
printf("SIGNAL '%s'", SIG.name);
SIG.contactrefs(CON) {
printf(" %s %s", CON.element.name, CON.contact.name);
}
printf(";\n");
*/
SIG.wires(WIR) {
printf("LAYER %d\n", WIR.layer);
if( WIR.width != 0 ) printf("WIRE '%s' %5.3f (%5.3f %5.3f) (%5.3f %5.3f);\n", SIG.name, u2mic(WIR.width), u2mic(WIR.x1), u2mic(WIR.y1), u2mic(WIR.x2), u2mic(WIR.y2));
}
SIG.vias(VIA) {
printf("VIA '%s' ROUND %d-%d (%5.3f %5.3f);\n", SIG.name, /*VIA.shape[],*/ VIA.start, VIA.end, u2mic(VIA.x), u2mic(VIA.y));
}
SIG.polygons(POL) {
printf("SET WIRE_BEND 2;\n");
printf("LAYER %d\n", POL.layer);
printf("POLY '%s' %5.3f ", SIG.name, u2mic(POL.width));
int first = 1;
int x0, y0;
POL.contours(CON) {
if (first) {
printf("(%5.3f %5.3f) (%5.3f %5.3f)", u2mic(CON.x1), u2mic(CON.y1), u2mic(CON.x2), u2mic(CON.y2));
first = 0;
x0 = CON.x1;
y0 = CON.y1;
}
else {
printf(" (%5.3f %5.3f)", u2mic(CON.x2), u2mic(CON.y2));
}
}
printf(";\n");
if (POL.thermals) {
printf("CHANGE THERMALS ON (%5.3f %5.3f);\n", u2mic(x0), u2mic(y0));
}
else {
printf("CHANGE THERMALS OFF (%5.3f %5.3f);\n", u2mic(x0), u2mic(y0));
}
printf("CHANGE ISOLATE %5.3f (%5.3f %5.3f);\n", u2mic(POL.isolate), u2mic(x0), u2mic(y0));
}
}
printf("GRID LAST\n");
}
}
else {
dlgMessageBox("\n Start this ULP in a board\n");
exit(0);
}