C3204
2025-12-30 4b3a410a5083970bb2e56d2ab459d860c4fa22d0
LB_VisionProcesses/Alogrithms/OpenCvSharp/FindLineTool/FindLineToolEdit.cs
@@ -144,62 +144,61 @@
                if (Subject.InputImage != null && Subject.InputImage is Mat)
                {
                    using (HImage image = TAlgorithm.Mat2HImage((Mat)Subject.InputImage))
                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
                    inputImageHSmartWindowControl.ShowHoImage(image);
                }
                Type type = Subject.Params.ROI?.GetType();
                if (Subject.Params.ROI != null)
                {
                    switch (type)
                    {
                        inputImageHSmartWindowControl.ShowHoImage(image);
                        Type type = Subject.Params.ROI?.GetType();
                        if (Subject.Params.ROI != null)
                        {
                            switch (type)
                            {
                                case Type t when t == typeof(HRectangle2):
                                    cmbTypeRoi.Text = RoiType.Rectangle2.ToString();
                                    break;
                                case Type t when t == typeof(HCircle):
                                    cmbTypeRoi.Text = RoiType.Circle.ToString();
                                    break;
                                case Type t when t == typeof(HSegment):
                                    cmbTypeRoi.Text = RoiType.Segment.ToString();
                                    break;
                                default:
                                    cmbTypeRoi.Text = RoiType.None.ToString();
                                    break;
                            }
                            if (cmbTypeRoi.Text.ToString() != "None")
                                ckbDrawRoi.Checked = true;
                            else
                                ckbDrawRoi.Checked = false;
                            inputImageHSmartWindowControl.oRoi = Subject.Params.ROI;
                        }
                        if (Subject.Params.Fixture != null)
                            cmbFixture.Text = Subject.Params.Fixture.strName;
                        else
                            cmbFixture.Text = "";
                        switch (type)
                        {
                            case Type t when t == typeof(HRectangle2):
                                inputImageHSmartWindowControl.oRoi
                                     = new HRectangle2(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                                     , Subject.Params.ROI.Phi + Subject.Params.Fixture.Phi, ((HRectangle2)Subject.Params.ROI).Width, ((HRectangle2)Subject.Params.ROI).Height);
                                break;
                            case Type t when t == typeof(HCircle):
                                inputImageHSmartWindowControl.oRoi
                                = new HCircle(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                                , ((HCircle)Subject.Params.ROI).Radius);
                                break;
                            case Type t when t == typeof(HSegment):
                                inputImageHSmartWindowControl.oRoi
                                = new HSegment(((HSegment)Subject.Params.ROI).StartX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).StartY + Subject.Params.Fixture.Y
                                , ((HSegment)Subject.Params.ROI).EndX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).EndY + Subject.Params.Fixture.Y);
                                break;
                            default:
                                inputImageHSmartWindowControl.oRoi = null;
                                break;
                        }
                        case Type t when t == typeof(HRectangle2):
                            cmbTypeRoi.Text = RoiType.Rectangle2.ToString();
                            break;
                        case Type t when t == typeof(HCircle):
                            cmbTypeRoi.Text = RoiType.Circle.ToString();
                            break;
                        case Type t when t == typeof(HSegment):
                            cmbTypeRoi.Text = RoiType.Segment.ToString();
                            break;
                        default:
                            cmbTypeRoi.Text = RoiType.None.ToString();
                            break;
                    }
                    if (cmbTypeRoi.Text.ToString() != "None")
                        ckbDrawRoi.Checked = true;
                    else
                        ckbDrawRoi.Checked = false;
                    inputImageHSmartWindowControl.oRoi = Subject.Params.ROI;
                }
                if (Subject.Params.Fixture != null)
                    cmbFixture.Text = Subject.Params.Fixture.strName;
                else
                    cmbFixture.Text = "";
                switch (type)
                {
                    case Type t when t == typeof(HRectangle2):
                        inputImageHSmartWindowControl.oRoi
                             = new HRectangle2(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                             , Subject.Params.ROI.Phi + Subject.Params.Fixture.Phi, ((HRectangle2)Subject.Params.ROI).Width, ((HRectangle2)Subject.Params.ROI).Height);
                        break;
                    case Type t when t == typeof(HCircle):
                        inputImageHSmartWindowControl.oRoi
                        = new HCircle(Subject.Params.ROI.X + Subject.Params.Fixture.X, Subject.Params.ROI.Y + Subject.Params.Fixture.Y
                        , ((HCircle)Subject.Params.ROI).Radius);
                        break;
                    case Type t when t == typeof(HSegment):
                        inputImageHSmartWindowControl.oRoi
                        = new HSegment(((HSegment)Subject.Params.ROI).StartX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).StartY + Subject.Params.Fixture.Y
                        , ((HSegment)Subject.Params.ROI).EndX + Subject.Params.Fixture.X, ((HSegment)Subject.Params.ROI).EndY + Subject.Params.Fixture.Y);
                        break;
                    default:
                        inputImageHSmartWindowControl.oRoi = null;
                        break;
                }
            }));
        }
@@ -259,27 +258,27 @@
                if (Subject.InputImage != null && Subject.InputImage is Mat)
                {
                    using (HImage image = TAlgorithm.Mat2HImage((Mat)Subject.InputImage))
                    {
                        image.GetImageSize(out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
                        recordImageHSmartWindowControl.ShowHoImage(image);
                        //先判断子类再判断父类
                        if (Subject.Record != null && Subject.Record is MsgRecord msgRecord)
                        {
                            recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_OK, true);
                            recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_NG, false);
                            for (int i = 0; i < msgRecord.Msg.Length; i++)
                                recordImageHSmartWindowControl.ShowMsg(msgRecord.Msg[i]
                                    , 1 == msgRecord.Result[i] ? true : false, msgRecord.Column[i], msgRecord.Row[i]);
                        }
                        else if (Subject.Record != null && Subject.Record is ObjectRecord objRecord)
                        {
                            recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_OK, true);
                            recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_NG, false);
                        }
                    }
                    TAlgorithm.Mat2HObject((Mat)Subject.InputImage, out HObject image);
                    HOperatorSet.GetImageSize(image, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
                    recordImageHSmartWindowControl.ShowHoImage(image);
                }
                //先判断子类再判断父类
                if (Subject.Record != null && Subject.Record is MsgRecord msgRecord)
                {
                    recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_OK, true);
                    recordImageHSmartWindowControl.DispObj(msgRecord.RecordObject_NG, false);
                    for (int i = 0; i < msgRecord.Msg.Length; i++)
                        recordImageHSmartWindowControl.ShowMsg(msgRecord.Msg[i]
                            , 1 == msgRecord.Result[i] ? true : false, msgRecord.Column[i], msgRecord.Row[i]);
                }
                else if (Subject.Record != null && Subject.Record is ObjectRecord objRecord)
                {
                    recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_OK, true);
                    recordImageHSmartWindowControl.DispObj(objRecord.RecordObject_NG, false);
                }
                GC.Collect();
            }));
        }
@@ -346,30 +345,28 @@
                    HTuple hv_imageHeight = 0;
                    if (InputImage != null && InputImage is Mat)
                    {
                        using (HImage image=TAlgorithm.Mat2HImage((Mat)InputImage))
                        {
                            image.GetImageSize(out hv_imageWidth, out hv_imageHeight);
                            switch (type)
                            {
                                case RoiType.Rectangle2:
                                    inputImageHSmartWindowControl.oRoi
                                        = new HRectangle2(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, 0
                                        , hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                                    break;
                                case RoiType.Circle:
                                    inputImageHSmartWindowControl.oRoi
                                        = new HCircle(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, hv_imageWidth.TupleReal() / 4);
                                    break;
                                case RoiType.Segment:
                                    inputImageHSmartWindowControl.oRoi
                                        = new HSegment(0, 0, hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                                    break;
                                case RoiType.None:
                                default:
                                    inputImageHSmartWindowControl.oRoi = null;
                                    break;
                            }
                        }
                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
                        HOperatorSet.GetImageSize(image, out hv_imageWidth, out hv_imageHeight);
                    }
                    switch (type)
                    {
                        case RoiType.Rectangle2:
                            inputImageHSmartWindowControl.oRoi
                                = new HRectangle2(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, 0
                                , hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                            break;
                        case RoiType.Circle:
                            inputImageHSmartWindowControl.oRoi
                                = new HCircle(hv_imageWidth.TupleReal() / 2, hv_imageHeight.TupleReal() / 2, hv_imageWidth.TupleReal() / 4);
                            break;
                        case RoiType.Segment:
                            inputImageHSmartWindowControl.oRoi
                                = new HSegment(0, 0, hv_imageWidth.TupleReal() / 4, hv_imageHeight.TupleReal() / 4);
                            break;
                        case RoiType.None:
                        default:
                            inputImageHSmartWindowControl.oRoi = null;
                            break;
                    }
                }
            }
@@ -400,26 +397,25 @@
                    if (InputImage != null && InputImage is Mat)
                    {
                        using (HImage image = TAlgorithm.Mat2HImage((Mat)InputImage))
                        {
                            inputImageHSmartWindowControl.ShowHoImage(image);
                            int hv_Elements = Convert.ToInt16(itxtCaliperCount.Text);
                            double hv_DetectHeight = Convert.ToDouble(dtxtCaliperHeight.Text);
                            double hv_DetectWidth = Convert.ToDouble(dtxtCaliperWidth.Text);
                            double hv_Row1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginRow + Subject.Params.Fixture.Row);
                            double hv_Column1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginColumn + Subject.Params.Fixture.Column);
                            double hv_Row2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndRow + Subject.Params.Fixture.Row);
                            double hv_Column2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndColumn + Subject.Params.Fixture.Column);
                            TAlgorithm.GetRakeRegions(null, out HObject ho_Regions, hv_Elements, hv_DetectHeight, hv_DetectWidth
                                , new HTuple(), new HTuple(), new HTuple(), new HTuple()
                                , hv_Row1, hv_Column1, hv_Row2, hv_Column2
                                , out HTuple hv_ResultRow, out HTuple hv_ResultColumn);
                            inputImageHSmartWindowControl.DispObj(ho_Regions);
                        }
                        TAlgorithm.Mat2HObject((Mat)InputImage, out HObject image);
                        inputImageHSmartWindowControl.ShowHoImage(image);
                    }
                    int hv_Elements = Convert.ToInt16(itxtCaliperCount.Text);
                    double hv_DetectHeight = Convert.ToDouble(dtxtCaliperHeight.Text);
                    double hv_DetectWidth = Convert.ToDouble(dtxtCaliperWidth.Text);
                    double hv_Row1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginRow + Subject.Params.Fixture.Row);
                    double hv_Column1 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).BeginColumn + Subject.Params.Fixture.Column);
                    double hv_Row2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndRow + Subject.Params.Fixture.Row);
                    double hv_Column2 = Convert.ToDouble(((HSegment)inputImageHSmartWindowControl.oRoi).EndColumn + Subject.Params.Fixture.Column);
                    TAlgorithm.GetRakeRegions(null, out HObject ho_Regions, hv_Elements, hv_DetectHeight, hv_DetectWidth
                        , new HTuple(), new HTuple(), new HTuple(), new HTuple()
                        , hv_Row1, hv_Column1, hv_Row2, hv_Column2
                        , out HTuple hv_ResultRow, out HTuple hv_ResultColumn);
                    inputImageHSmartWindowControl.DispObj(ho_Regions);
                }
                catch { }
            }));