Example #1
0
 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);
 }
Example #2
0
        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);
            }
        }
Example #3
0
        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();
        }
Example #4
0
        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;
                }
            }
        }