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); }
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); }
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); }
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); }
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); }
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; }
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); } }