// Snap Function for Packages in Library Editor // // This ULP generates a script file which adjusts the pads and smds of a package // to a user defined mil or mic grid // // Usage: // // 1. Set value of GridDist and unitmil according to your needs. // Example for 2.5 mm grid: GridDist = 2500, // unitmil = 0; // // // 2. Set path for script files to design path. // // 3. Load package into library editor. // // 4. Run this ULP // // 5. Execute script file SNAP.SCR // int GridDist = 50, // changed to the grid wanted !!! unitmil = 1; // = 1 in case of a mil grid // = 0 in case of a micron grid (1/10000 mm) int snapmil(int n) // returns next grid point !!! { return round(u2mil(n) / GridDist) * GridDist; } int snapmic(int n) // returns next grid point !!! { return round(u2mic(n) / GridDist) * GridDist; } output("snap.scr") { if (unitmil) { printf("grid finest mil on;\n"); // change to mm, if mm grid wanted !!! } else { printf("grid finest mic on;\n"); // change to mm, if mm grid wanted !!! } library(L) { if (package) package(P) { P.contacts(C) if (unitmil) { printf("MOVE (%f %f) (%d %d);\n", u2mil(C.x), u2mil(C.y), snapmil(C.x), snapmil(C.y)); } else { printf("MOVE (%f %f) (%d %d);\n", u2mic(C.x), u2mic(C.y), snapmic(C.x), snapmic(C.y)); } } } printf("grid last;\n"); }