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