Beispiel #1
0
 public string GetComponentName(PadItem pad)
 {
     for (int c = 0; c < this.Cad.Count; c++)
     {
         if (this.Cad[c].CadFileID == pad.CadFileID)
         {
             return(this.Cad[c].CadItems[pad.CadItemIndex].Name);
         }
     }
     return(null);
 }
Beispiel #2
0
        public static List <PadItem> GetPads(string GerberID, Image <Gray, byte> ImgGerber, Rectangle ROI)
        {
            List <PadItem> padItems = new List <PadItem>();

            ImgGerber.ROI = ROI;
            using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint())
            {
                CvInvoke.FindContours(ImgGerber, contours, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);
                for (int i = 0; i < contours.Size; i++)
                {
                    Moments mm = CvInvoke.Moments(contours[i]);
                    if (mm.M00 == 0)
                    {
                        continue;
                    }
                    Point     ctCnt = new Point(Convert.ToInt32(mm.M10 / mm.M00), Convert.ToInt32(mm.M01 / mm.M00));
                    Rectangle bound = CvInvoke.BoundingRectangle(contours[i]);
                    double    area  = CvInvoke.ContourArea(contours[i]);
                    PadItem   pad   = new PadItem();
                    pad.GerberID      = GerberID;
                    bound.X          += ROI.X;
                    bound.Y          += ROI.Y;
                    ctCnt.X          += ROI.X;
                    ctCnt.Y          += ROI.Y;
                    pad.Center        = ctCnt;
                    pad.Bouding       = bound;
                    pad.BoudingAdjust = bound;
                    Point[] cntPoint = contours[i].ToArray();
                    for (int k = 0; k < cntPoint.Length; k++)
                    {
                        cntPoint[k].X += ROI.X;
                        cntPoint[k].Y += ROI.Y;
                    }
                    pad.Contour       = cntPoint;
                    pad.ContourAdjust = new Point[cntPoint.Length];
                    for (int j = 0; j < cntPoint.Length; j++)
                    {
                        pad.ContourAdjust[j] = new Point(cntPoint[j].X, cntPoint[j].Y);
                    }
                    pad.Area         = area;
                    pad.AreaThresh   = new StandardThreshold(260, 60);
                    pad.ShiftXThresh = new StandardThreshold(370, 40);
                    pad.ShiftYThresh = new StandardThreshold(370, 40);
                    pad.FOVs         = new List <int>();
                    pad.CadFileID    = string.Empty;
                    pad.CadItemIndex = -1;
                    pad.NoID         = i;
                    pad.Enable       = true;
                    padItems.Add(pad);
                }
            }
            ImgGerber.ROI = Rectangle.Empty;
            return(padItems);
        }
Beispiel #3
0
 public void UpdatePadItems()
 {
     if (this.PadItems != null)
     {
         for (int i = 0; i < this.PadItems.Count; i++)
         {
             this.PadItems[i].Dispose();
         }
     }
     this.PadItems = PadItem.GetPads(this.GerberID, this.ProcessingGerberImage, this.ROI);
 }
Beispiel #4
0
        public Point[] GetPulseXYFOVs()
        {
            Point[] position  = new Point[this.Gerber.FOVs.Count];
            Point   realMark1 = this.HardwareSettings.MarkPosition;

            for (int i = 0; i < this.Gerber.FOVs.Count; i++)
            {
                PadItem padMark1 = this.Gerber.PadItems[this.Gerber.MarkPoint.PadMark[0]];
                Point   ctMark1  = padMark1.Center;
                Point   ctMark2  = this.Gerber.FOVs[i].Anchor;

                position[i] = GetPLCPoint(realMark1, ctMark1, ctMark2);
            }
            return(position);
        }
Beispiel #5
0
        public Point[] GetPLCMarkPosition()
        {
            Point[] mark      = new Point[2];
            Point   realMark1 = this.HardwareSettings.MarkPosition;

            if (this.Gerber.MarkPoint.PadMark.Count == 2)
            {
                mark[0] = new Point(realMark1.X, realMark1.Y);
                PadItem padMark1 = this.Gerber.PadItems[this.Gerber.MarkPoint.PadMark[0]];
                PadItem padMark2 = this.Gerber.PadItems[this.Gerber.MarkPoint.PadMark[1]];
                Point   ctMark1  = padMark1.Center;
                Point   ctMark2  = padMark2.Center;
                mark[1] = GetPLCPoint(realMark1, ctMark1, ctMark2);
            }
            return(mark);
        }
Beispiel #6
0
        public void DeteleLinkPad(PadItem Pad)
        {
            if (Pad.CadItemIndex < 0)
            {
                return;
            }
            int idPad = this.Gerber.PadItems.IndexOf(Pad);

            for (int i = 0; i < this.Cad.Count; i++)
            {
                if (this.Cad[i].CadFileID == Pad.CadFileID)
                {
                    CadFile cad = this.Cad[i];
                    cad.CadItems[Pad.CadItemIndex].PadsIndex.Remove(idPad);
                    break;
                }
            }
            Pad.CadItemIndex = -1;
            Pad.CadFileID    = string.Empty;
        }
Beispiel #7
0
        public Rectangle GetRectangleComponent(PadItem pad)
        {
            int    Top           = (int)Math.Pow(2, 30);
            int    Left          = (int)Math.Pow(2, 30);
            int    Bot           = 0;
            int    Right         = 0;
            string ComponentName = this.GetComponentName(pad);

            if (ComponentName == "UNDEFINE")
            {
                return(pad.Bouding);
            }
            for (int i = 0; i < this.Gerber.PadItems.Count; i++)
            {
                PadItem item = this.Gerber.PadItems[i];
                if (item.CadFileID == pad.CadFileID && item.CadItemIndex == pad.CadItemIndex)
                {
                    Point[] p = item.Contour.ToArray();
                    for (int j = 0; j < p.Length; j++)
                    {
                        Top   = p[j].Y < Top ? p[j].Y : Top;
                        Left  = p[j].X < Left ? p[j].X : Left;
                        Bot   = p[j].Y > Bot ? p[j].Y : Bot;
                        Right = p[j].X > Right ? p[j].X : Right;
                    }
                }
            }
            if (Top != (int)Math.Pow(2, 30) && Left != (int)Math.Pow(2, 30) && Bot != 0 && Right != 0)
            {
                return(new Rectangle(Left, Top, Right - Left, Bot - Top));
            }
            else
            {
                return(Rectangle.Empty);
            }
        }