public static LineSegmentPoint Clamp(this LineSegmentPoint line, int width, int height) { line.P1.X = Math.Clamp(line.P1.X, 0, width); line.P1.Y = Math.Clamp(line.P1.Y, 0, height); line.P2.X = Math.Clamp(line.P2.X, 0, width); line.P2.Y = Math.Clamp(line.P2.Y, 0, height); return(line); }
private void pictureMain_Paint(object sender, PaintEventArgs e) { if (scale > 0) { e.Graphics.ScaleTransform(1 / (float)scale, 1 / (float)scale); } // overlay shapes foreach (ListViewItem it in listOverlay.CheckedItems) { int sn = int.Parse(it.Text); object o = overlayShapes[sn]; switch (o.GetType().Name) { case "LineSegmentPoint": LineSegmentPoint line = (LineSegmentPoint)o; e.Graphics.DrawLine(shapeColors[sn % shapeColors.Length], line.P1.X, line.P1.Y, line.P2.X, line.P2.Y); break; case "CircleSegment": CircleSegment circle = (CircleSegment)o; e.Graphics.DrawEllipse( shapeColors[sn % shapeColors.Length], circle.Center.X - circle.Radius, circle.Center.Y - circle.Radius, circle.Radius * 2, circle.Radius * 2); break; case "Point[]": // polygon contour System.Drawing.Point[] pts = (System.Drawing.Point[])o; if (pts.Length > 2) { e.Graphics.DrawPolygon(shapeColors[sn % shapeColors.Length], (System.Drawing.Point[])o); } break; case "Rectangle": e.Graphics.DrawRectangle(shapeColors[sn % shapeColors.Length], (Rectangle)o); break; default: break; } } // ROI display if (selectROI.X >= 0 || selectROI.Y >= 0 || selectROI.Width > 0 || selectROI.Height > 0) { e.Graphics.DrawRectangle(roiPen, selectROI.X, selectROI.Y, selectROI.Width, selectROI.Height); } }
private void mnu_Vision_HoughLine_Click(object sender, EventArgs e) { if (!GetBinary()) { return; } dlgHoughLine dlg = new dlgHoughLine(); runVisionCommand(dlg, false); LineSegmentPoint[] res = dlg.getLines(); overlayShapes.Clear(); if (res != null && res.Length > 0) { for (int i = 0; i < res.Length; i++) { LineSegmentPoint l = res[i]; overlayShapes[i] = l; } } refreshOverlayListview(); }
private void refreshOverlayListview() { listOverlay.Items.Clear(); foreach (int key in overlayShapes.Keys) { ListViewItem it = listOverlay.Items.Add(key.ToString()); it.Checked = true; it.BackColor = shapeColors[key % shapeColors.Length].Color; object o = overlayShapes[key]; switch (o.GetType().Name) { case "LineSegmentPoint": it.SubItems.Add("直线"); LineSegmentPoint line = (LineSegmentPoint)o; it.SubItems.Add(line.P1.DistanceTo(line.P2).ToString("0.00")); break; case "CircleSegment": it.SubItems.Add("圆"); CircleSegment circle = (CircleSegment)o; it.SubItems.Add(circle.Radius.ToString("0")); break; case "Point[]": it.SubItems.Add("轮廓"); it.SubItems.Add(""); break; case "Rectangle": it.SubItems.Add("矩形"); it.SubItems.Add(""); break; default: break; } } }