/* ProgrammName: 0tR_AutoV11 ---- Version 1.0 (Eagle 3.x): Autor: Martin Schnell (doc) hey.doc@gmx.de Datum: 1.04.2000 ---- Version 1.1 (Eagle 4.x): Autor: Marc Dressler (dressler@uc-elektronik.de) Datum: 24.03.2001 Aenderungen: Anpassung an Eagle 4.x ---- Version 1.2 (Eagle 4.x): Autor: Marc Dressler (dressler@uc-elektronik.de) Datum: 02.06.2001 Aenderungen: Unterstuetzung von xlongoct und ylongoct Shapes ---- ---- Beschreibung (von Martin Schnell): Dieses ULP ist eine Hilfe für jeden, der vor das Problem gestellt ist, dass er zB Stiftleisten nicht von oben belöten kann. Dieses Programm zeichnet Rechtecke im "tRestrict" um die Pins, die durch ein Rechteck in einem bestimmten Layer markiert sind. Anleitung: (0. Man bestimme eine Ebene für das Markierungs-Rechteck [Standard=100, kann verändert werden, siehe *1]) 1. Man zeichne Rechecke um die Pins, die vom Autorouter nicht in der Top-Ebene verbunden werden sollen. (zB ein Rechteck, dass alle Pins einer Stiftleiste umfasst) 2. Man führe dieses ULP aus. 3. Man führe die gleichnamige Script-Datei aus, die sich im aktuellen Verzeichnis befinden sollte. (siehe auch *2) Hinweise: Es kann die Größe der Rechtecke geändert werden. [siehe *3] Hinweise auf Fehler sind erwünscht! Need English documentation? Send me a mail! */ int tSolderRestrict= 100; // [*1] hier die gewünschte Ebene eintragen if (board) board(B) { output("0tR_Auto.scr", "wt") // [*2] bei Bedarf lässt sich hier auch ein Pfad // angeben: zB output("C:\EAGLE\0tR_Auto.SCR"); { printf("grid mil;\n"); printf("ch layer 41;\n"); real yt1,xt2,xt1,yt2; // temporäre Vars B.rectangles(R) // durchsuche aller Rechtecke { if (R.layer == tSolderRestrict) { B.elements(E) { E.package.contacts(C) { if (C.pad) if ( (C.x > R.x1) && (C.x < R.x2) && (C.y > R.y1) && (C.y < R.y2) ) { xt1 = u2mil(C.x - C.pad.diameter[LAYER_TOP] /2) ; //[*3] yt1 = u2mil(C.y - C.pad.diameter[LAYER_TOP] /2) ; xt2 = u2mil(C.x + C.pad.diameter[LAYER_TOP] /2) ; yt2 = u2mil(C.y + C.pad.diameter[LAYER_TOP] /2) ; if (C.pad.shape[LAYER_TOP] == PAD_SHAPE_XLONGOCT) { xt1 = xt1 - u2mil(C.pad.diameter[LAYER_TOP] /2) ; xt2 = xt2 + u2mil(C.pad.diameter[LAYER_TOP] /2) ; } if (C.pad.shape[LAYER_TOP] == PAD_SHAPE_YLONGOCT) { yt1 = yt1 - u2mil(C.pad.diameter[LAYER_TOP] /2) ; yt2 = yt2 + u2mil(C.pad.diameter[LAYER_TOP] /2) ; } printf("rect (%6.4f %6.4f) (%6.4f %6.4f);\n",xt1, yt1, xt2, yt2); } } } } } printf("grid last;\n"); printf("grid last;\n"); } }