예제 #1
0
 bool isInList(device dev, BindingList <device> lst)
 {
     foreach (device d in lst)
     {
         if (dev.location == d.location)
         {
             return(true);
         }
     }
     return(false);
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
        }