/* This EAGLE User Language Program generates a script file * maskdata.scr that generates new layers for solder stop mask * and cream frame. See parameter section in this file. * * In these layers each symbol can be edited separately. * * Known limitation: Octagon shaped pads are covered with a * round stop symbol. * * * * Das ULP erzeugt ein Script-File maskdata.scr, das vier * neue Layer fuer die Loetstop- und Lotpastensymbole erzuegt. * Die Definition kann im Abschnitt parameter veraendert werden. * * In diesen Layer kann jedes Symbol einzeln bearbeitet werden. * * Einschraenkungen: Octagon Pads erhalten eine runde Loetstoppmake! * */ // ------------------------------------------------------------------ // ---------- parameter section ------------------------------------- int stopframe = 4; // Defines the parameter STOPFRAME in mil int creamframe = 10; // Defines the parameter CREAMFRAME in mil int tstop_new = 129, // To define the new mask data layers bstop_new = 130, // here you can change the layer numbers tcream_new = 131, // as you like bcream_new = 132; // ------------------------------------------------------------------ // ---------- program section --------------------------------------- board(B) { output("maskdata.scr") { printf("grid mil finest;\n"); printf("Layer %d mytstop;\n", tstop_new); printf("Layer %d mybstop;\n", bstop_new); printf("Layer %d mytcream;\n", tcream_new); printf("Layer %d mybcream;\n", bcream_new); B.elements(E) { E.package.contacts(C) { if (C.pad && (C.pad.shape == PAD_SHAPE_ROUND)) { printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(C.pad.x), u2mil(C.pad.y), u2mil(C.pad.x), stopframe + u2mil((C.pad.y)+((C.pad.diameter)/2))); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(C.pad.x), u2mil(C.pad.y), u2mil(C.pad.x), stopframe + u2mil((C.pad.y)+((C.pad.diameter)/2))); } if (C.pad && (C.pad.shape == PAD_SHAPE_SQUARE)) { printf("Change Layer %d;\n", tstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.pad.x)-(C.pad.diameter/2)) - stopframe, u2mil((C.pad.y)+(C.pad.diameter/2)) + stopframe, u2mil((C.pad.x)+(C.pad.diameter/2)) + stopframe, u2mil((C.pad.y)-(C.pad.diameter/2)) - stopframe); printf("Change Layer %d;\n", bstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.pad.x)-(C.pad.diameter/2)) - stopframe, u2mil((C.pad.y)+(C.pad.diameter/2)) + stopframe, u2mil((C.pad.x)+(C.pad.diameter/2)) + stopframe, u2mil((C.pad.y)-(C.pad.diameter/2)) - stopframe); } if (C.pad && (C.pad.shape == PAD_SHAPE_OCTAGON)) { //the same way like ROUND!! printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(C.pad.x), u2mil(C.pad.y), u2mil(C.pad.x), stopframe + u2mil((C.pad.y)+((C.pad.diameter)/2))); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(C.pad.x), u2mil(C.pad.y), u2mil(C.pad.x), stopframe + u2mil((C.pad.y)+((C.pad.diameter)/2))); } if (C.pad && (C.pad.shape == PAD_SHAPE_XLONGOCT)) { printf("Change Layer %d;\n", tstop_new); printf("Wire %f (%f %f) (%f %f);\n", u2mil((C.pad.diameter)/2) + (2 * stopframe) , //Wirewidth+Uebermass u2mil((C.pad.x)-(C.pad.diameter/4)), u2mil(C.pad.y), u2mil((C.pad.x)+(C.pad.diameter/4)), u2mil(C.pad.y)); printf("Change Layer %d;\n", bstop_new); printf("Wire %f (%f %f) (%f %f);\n", u2mil((C.pad.diameter)/2) + (2 * stopframe) , //Wirewidth+Uebermass u2mil((C.pad.x)-(C.pad.diameter/4)), u2mil(C.pad.y), u2mil((C.pad.x)+(C.pad.diameter/4)), u2mil(C.pad.y)); } // Bei den laenglichen Pads ist der groessere der beiden Durchmesser als Parameter anzugeben. // Das Seitenverhaeltnis ist fest auf 2:1 eingestellt. if (C.pad && (C.pad.shape == PAD_SHAPE_YLONGOCT)) { printf("Change Layer %d;\n", tstop_new); printf("Wire %f (%f %f) (%f %f);\n", u2mil((C.pad.diameter)/2) + (2 * stopframe) , //Wirewidth+Uebermass u2mil(C.pad.x), u2mil((C.pad.y)-(C.pad.diameter/4)), u2mil(C.pad.x), u2mil((C.pad.y)+(C.pad.diameter/4))); printf("Change Layer %d;\n", bstop_new); printf("Wire %f (%f %f) (%f %f);\n", u2mil((C.pad.diameter)/2) + (2 * stopframe) , //Wirewidth+Uebermass u2mil(C.pad.x), u2mil((C.pad.y)-(C.pad.diameter/4)), u2mil(C.pad.x), u2mil((C.pad.y)+(C.pad.diameter/4))); } if (C.smd && (C.smd.layer == 1)) { //solder stop and cream frame for top smds printf("Change Layer %d;\n", tstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.smd.x)-(C.smd.dx/2)) - stopframe, u2mil((C.smd.y)+(C.smd.dy/2)) + stopframe, u2mil((C.smd.x)+(C.smd.dx/2)) + stopframe, u2mil((C.smd.y)-(C.smd.dy/2)) - stopframe); printf("Change Layer %d;\n", tcream_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.smd.x)-(C.smd.dx/2)) - creamframe, u2mil((C.smd.y)+(C.smd.dy/2)) + creamframe, u2mil((C.smd.x)+(C.smd.dx/2)) + creamframe, u2mil((C.smd.y)-(C.smd.dy/2)) - creamframe); } if (C.smd && (C.smd.layer == 16)) { //solder stop and cream frame for top smds printf("Change Layer %d;\n", bstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.smd.x)-(C.smd.dx/2)) - stopframe, u2mil((C.smd.y)+(C.smd.dy/2)) + stopframe, u2mil((C.smd.x)+(C.smd.dx/2)) + stopframe, u2mil((C.smd.y)-(C.smd.dy/2)) - stopframe); printf("Change Layer %d;\n", bcream_new); printf("Rect (%f %f) (%f %f);\n", u2mil((C.smd.x)-(C.smd.dx/2)) - creamframe, u2mil((C.smd.y)+(C.smd.dy/2)) + creamframe, u2mil((C.smd.x)+(C.smd.dx/2)) + creamframe, u2mil((C.smd.y)-(C.smd.dy/2)) - creamframe); } } E.package.holes(H) { printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(H.x), u2mil(H.y), u2mil(H.x), u2mil((H.y)+((H.drill)/2)) + stopframe); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(H.x), u2mil(H.y), u2mil(H.x), u2mil((H.y)+((H.drill)/2)) + stopframe); } } B.holes(HO) { printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(HO.x), u2mil(HO.y), u2mil(HO.x), u2mil((HO.y)+((HO.drill)/2)) + stopframe); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(HO.x), u2mil(HO.y), u2mil(HO.x), u2mil((HO.y)+((HO.drill)/2)) + stopframe); } B.signals(S) { S.vias(V) { if (V.shape == VIA_SHAPE_ROUND) { printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(V.x), u2mil(V.y), u2mil(V.x), stopframe + u2mil((V.y)+((V.diameter)/2))); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(V.x), u2mil(V.y), u2mil(V.x), stopframe + u2mil((V.y)+((V.diameter)/2))); } if (V.shape == VIA_SHAPE_OCTAGON) { //the same way as ROUND printf("Change Layer %d;\n", tstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(V.x), u2mil(V.y), u2mil(V.x), stopframe + u2mil((V.y)+((V.diameter)/2))); printf("Change Layer %d;\n", bstop_new); printf("Circle 0 (%f %f) (%f %f);\n", u2mil(V.x), u2mil(V.y), u2mil(V.x), stopframe + u2mil((V.y)+((V.diameter)/2))); } if (V.shape == VIA_SHAPE_SQUARE) { printf("Change Layer %d;\n", tstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((V.x)-(V.diameter/2)) - stopframe, u2mil((V.y)+(V.diameter/2)) + stopframe, u2mil((V.x)+(V.diameter/2)) + stopframe, u2mil((V.y)-(V.diameter/2)) - stopframe); printf("Change Layer %d;\n", bstop_new); printf("Rect (%f %f) (%f %f);\n", u2mil((V.x)-(V.diameter/2)) - stopframe, u2mil((V.y)+(V.diameter/2)) + stopframe, u2mil((V.x)+(V.diameter/2)) + stopframe, u2mil((V.y)-(V.diameter/2)) - stopframe); } } } printf("grid last;"); } }