bool isInList(device dev, BindingList <device> lst) { foreach (device d in lst) { if (dev.location == d.location) { return(true); } } return(false); }
void readDevices(StreamReader sr, BindingList <device> lst) { while (true) { String s = sr.ReadLine(); if (s == null) { return; } String[] sa = s.Split(new char[] { ',' }); if (sa.Length != 11) { return; } // "Designator","NozzleNum","StackNum","Mid X","Mid Y","Rotation","Height","Speed","Vision","Pressure","Explanation" //String loc, String xi, String yi, String r, String n, String f, //int noz = 1, String sn = "L1", double h = 0.5, int spd = 50, String vis = "None", bool prs = true) for (int i = 0; i < sa.Length; i++) { sa[i] = sa[i].Trim(new char[] { '\"' }); } // Lese footprint, der hinter dem Devicenamen in runden Klammern steht String[] sn = sa[10].Split(new char[] { '(', ')' }); String name = ""; String foot = ""; if (sn.Length >= 2) { name = sn[0]; foot = sn[1]; } // Lese die originale, unkorrigierte, Rotation, welche hinten in geschweiften Klammern steht String[] srotarr = sa[10].Split(new char[] { '{', '}' }); String srot = "0"; if (srotarr.Length >= 2) { srot = srotarr[1]; } else { // noch keine Orig-Rotation Angabe vorhanden srot = sa[5]; } device dev = new device(sa[0], sa[3], sa[4], srot, name, foot, sa[1], sa[2], sa[6], sa[7], sa[8], sa[9]); lst.Add(dev); } }
public int Load() { String filename = info.LastDir + "//" + info.LastFile; String tfilename = filename.Substring(0, filename.Length - 1) + "t"; String bfilename = filename.Substring(0, filename.Length - 1) + "b"; // Lade TOP layer StreamReader sr = null; bool fidfound = false; try { using (sr = new StreamReader(tfilename)) { tdevlist.Clear(); info.tfiducialslist.Clear(); fiducialitem tfi = new fiducialitem(); while (true) { String s = sr.ReadLine(); if (s == null) { break; } String[] sa = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); device dev; if (sa.Length < 6) { dev = new device(sa[0], sa[1], sa[2], sa[3], sa[4], "???"); } else { dev = new device(sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]); } if (dev.location == "FID1") { tfi.mark1x = dev.x; tfi.mark1y = dev.y; fidfound = true; } else if (dev.location == "FID2") { tfi.mark2x = dev.x; tfi.mark2y = dev.y; fidfound = true; } else { tdevlist.Add(dev); } } if (fidfound) { // bei Nutzen müssen alle Real Koordinaten die gleichen sein // trage daher für alle 5 Einzelplatinen das gleiche ein // die Maschinenkoords müssen natürlich auf die jeweiligen FIDs eingemessen werden info.tfiducialslist.Add(tfi); info.tfiducialslist.Add(tfi); info.tfiducialslist.Add(tfi); info.tfiducialslist.Add(tfi); info.tfiducialslist.Add(tfi); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } // Lade Bottom Layer sr = null; fidfound = false; try { using (sr = new StreamReader(bfilename)) { bdevlist.Clear(); info.bfiducialslist.Clear(); fiducialitem bfi = new fiducialitem(); while (true) { String s = sr.ReadLine(); if (s == null) { break; } String[] sa = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); device dev; if (sa.Length < 6) { dev = new device(sa[0], sa[1], sa[2], sa[3], sa[4], "???"); } else { dev = new device(sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]); } if (dev.location == "FID3") { bfi.mark1x = dev.x; bfi.mark1y = dev.y; fidfound = true; } else if (dev.location == "FID4") { bfi.mark2x = dev.x; bfi.mark2y = dev.y; fidfound = true; } else { bdevlist.Add(dev); } } if (fidfound) { // bei Nutzen müssen alle Real Koordinaten die gleichen sein // trage daher für alle 5 Einzelplatinen das gleiche ein // die Maschinenkoords müssen natürlich auf die jeweiligen FIDs eingemessen werden info.bfiducialslist.Add(bfi); info.bfiducialslist.Add(bfi); info.bfiducialslist.Add(bfi); info.bfiducialslist.Add(bfi); info.bfiducialslist.Add(bfi); } } } catch (Exception e) { Console.WriteLine(e.ToString()); } // Spiegle den Bottom Layer am Pad der rechts am weitesten außen liegt double right = -1000000; // suche den rechtesten Punkt foreach (device dev in bdevlist) { if (dev.x > right) { right = dev.x; info.rightmostdevice = "Mitte von " + dev.location + " ist X=0"; } } // schau ob evt einer der FIDs noch weiter rechts außen liegt, wenn ja dann nehme diesen foreach (fiducialitem fi in info.bfiducialslist) { if (fi.mark1x > right) { right = fi.mark1x; } } foreach (fiducialitem fi in info.bfiducialslist) { if (fi.mark2x > right) { right = fi.mark2x; } } // Spiegle SMD Pads foreach (device dev in bdevlist) { dev.x = Math.Round(right - dev.x, 2); // und spiegle auch die Rotation //dev.rot = (360-dev.rot) % 360; nicht erforderlich, da diese von Eagle bereits gespiegelt ist } // Spiegle Fiducials foreach (fiducialitem fi in info.bfiducialslist) { fi.mark1x = Math.Round(right - fi.mark1x, 2); fi.mark2x = Math.Round(right - fi.mark2x, 2); } return(0); }