From 46431fb658701489f8d5de4475b02df728c51f36 Mon Sep 17 00:00:00 2001
From: chunxiaqiu <1057644574@qq.com>
Date: 星期三, 18 三月 2026 15:48:26 +0800
Subject: [PATCH] 新增:读码器功能模块,集成华睿读码器并初步实现读码功能

---
 LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs |  574 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 574 insertions(+), 0 deletions(-)

diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs
new file mode 100644
index 0000000..c41bf2b
--- /dev/null
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementToolEdit.cs
@@ -0,0 +1,574 @@
+锘縰sing HalconDotNet;
+using LB_SmartVisionCommon;
+using LB_VisionControl;
+using LB_VisionProcesses.Alogrithms.Halcon;
+using Microsoft.VisualBasic.ApplicationServices;
+using OpenCvSharp;
+using Sunny.UI.Win32;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace LB_VisionProcesses.Alogrithms.Halcon
+{
+    public partial class HImageEnhancementToolEdit : TAlgorithmEdit
+    {
+        List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>();
+        private int rowriginalHeight;
+        public HImageEnhancementToolEdit(HImageEnhancementTool subject = null)
+        {
+            if (subject != null && subject is HImageEnhancementTool)
+                Subject = subject;
+            else
+                Subject = new HImageEnhancementTool();
+
+            //if (!(Subject.Params.ROI is HSegment))
+            //    Subject.Params.ROI = new HSegment(0, 0, 250, 250);
+
+            this.Dock = DockStyle.Fill;
+            InitializeComponent();
+            // 淇濆瓨鍘熷琛岄珮搴�
+            rowriginalHeight = (int)tableLayoutPanel4.RowStyles[1].Height;
+
+            InitializeComboBox();
+            InitializeDataGridView();
+
+            recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
+            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
+            this.dataGridViewIE.AutoGenerateColumns = true;
+        }
+
+        private void InitializeComboBox()
+        {
+            // 娣诲姞鏉冮檺閫夐」
+            foreach (var item in Enum.GetValues(typeof(ImageEnhancementDataType)))
+            {
+                cmbImageEnhancement.Items.Add(item.ToString());
+            }
+
+            // 璁剧疆榛樿閫夋嫨椤�
+            cmbImageEnhancement.SelectedIndex = 2;
+        }
+        #region 绠楁硶閫夋嫨涓嬫媺妗�
+        private void cmbImageEnhancement_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            System.Windows.Forms.ComboBox cb = sender as System.Windows.Forms.ComboBox;
+
+            if (cb.SelectedIndex == 0)
+            {
+                ShowRow();
+            }
+            else if (cb.SelectedIndex == 1)
+            {
+                HideRow();
+            }
+            else
+            {
+                HideRow();
+            }
+        }
+        private void ShowRow()
+        {
+            // 鏄剧ずRow2锛堟仮澶嶉珮搴︼級
+            tableLayoutPanel4.RowStyles[1].SizeType = SizeType.Absolute;
+            tableLayoutPanel4.RowStyles[1].Height = rowriginalHeight;
+
+            // 鏄剧ずRow2涓殑鎺т欢
+            foreach (Control ctrl in tableLayoutPanel4.Controls)
+            {
+                int row = tableLayoutPanel4.GetRow(ctrl);
+                if (row == 1)
+                    ctrl.Visible = true;
+            }
+        }
+
+        private void HideRow()
+        {
+            // 鏄剧ずRow2锛堟仮澶嶉珮搴︼級
+            tableLayoutPanel4.RowStyles[1].SizeType = SizeType.Absolute;
+            tableLayoutPanel4.RowStyles[1].Height = 0;
+
+            // 鏄剧ずRow2涓殑鎺т欢
+            foreach (Control ctrl in tableLayoutPanel4.Controls)
+            {
+                int row = tableLayoutPanel4.GetRow(ctrl);
+                if (row == 1)
+                    ctrl.Visible = false;
+            }
+        }
+        #endregion
+        private void InitializeDataGridView()
+        {
+            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
+
+            // 璁剧疆DataGridView鍒楀
+            dataGridViewIE.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+        }
+
+        /// <summary>
+        /// 鎺т欢鍔犺浇浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void HImageEnhancementToolEdit_Load(object sender, EventArgs e)
+        {
+            pnlInputImage.Controls.Add(inputImageHSmartWindowControl);
+            inputImageHSmartWindowControl.Dock = DockStyle.Fill;
+
+            pnlRecordImage.Controls.Add(recordImageHSmartWindowControl);
+            recordImageHSmartWindowControl.Dock = DockStyle.Fill;
+
+            //閬嶅巻鍙互閫夋嫨鐨凴oi绫诲瀷鏋氫妇
+            foreach (var value in Enum.GetValues(typeof(RoiType)))
+                cmbTypeRoi.Items.Add(value.ToString());
+
+            //閬嶅巻鍙互閫夋嫨鐨勫浘鍍忓寮虹被鍨嬫灇涓�
+            //foreach (var value in Enum.GetValues(typeof(ImageEnhancementType)))
+            //    cmbImageEnhancement.Items.Add(value.ToString());
+
+            //閬嶅巻鍙互閫夋嫨鐨凢ixture鏋氫妇
+            cmbFixture.Items.Add("");
+            foreach (string value in IProcess.dicFixtures.Keys)
+                cmbFixture.Items.Add(value.ToString());
+
+            ckbDrawRoi.Checked = true;
+            cmbTypeRoi.Text = RoiType.Segment.ToString();
+            cmbImageEnhancement.Text = ImageEnhancementType.ScaleMax.ToString();
+            LoadParas();
+
+            if (Subject.Result)
+            {
+                lblResult.BackColor = Color.Green;
+                lblResult.Text = "True";
+            }
+            else
+            {
+                lblResult.BackColor = Color.Red;
+                lblResult.Text = "False";
+            }
+
+            lblMsg.Text = Msg.Length > 50 ? Msg.Substring(0, 50) : Msg;
+            lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg);
+            lblRunTime.Text = $"{Subject.RunTime}ms";
+        }
+        private void ClearInputFields()
+        {
+            txtMaskWidth.Clear();
+            txtMaskHeight.Clear();
+            txtFactor.Clear();
+            cmbImageEnhancement.SelectedIndex = 0;
+        }
+        private void btnAdd_Click(object sender, EventArgs e)
+        {
+            // 楠岃瘉杈撳叆
+            if (cmbImageEnhancement.SelectedIndex == 0)
+            {
+                if (string.IsNullOrWhiteSpace(txtMaskWidth.Text) || string.IsNullOrWhiteSpace(txtMaskHeight.Text) || string.IsNullOrWhiteSpace(txtFactor.Text))
+                {
+                    MessageBox.Show("璇峰~鍐欐墍鏈夊繀濉瓧娈碉紒", "鎻愮ず",
+                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                    return;
+                }
+            }
+
+            RecordImageEnhancementData filter = new RecordImageEnhancementData();
+            filter.MaskWidth = this.txtMaskWidth.Text;
+            filter.MaskHight = this.txtMaskHeight.Text;
+            filter.Factor = this.txtFactor.Text;
+            filter.FilterName = (ImageEnhancementDataType)this.cmbImageEnhancement.SelectedIndex;
+            // 娣诲姞鍒� UserManager
+            bool success = ImageEnhancementManager.Instance.AddUser(filter);
+            if (success)
+            {
+                recordImageEnhancementDatas.Add(filter);
+                //MessageBox.Show("鐢ㄦ埛娣诲姞鎴愬姛锛�", "鎻愮ず",
+                //    MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+                // 娓呯┖杈撳叆妗�
+                ClearInputFields();
+            }
+            else
+            {
+                MessageBox.Show("娣诲姞鐢ㄦ埛澶辫触锛�", "閿欒",
+                    MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+            recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
+            this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
+            this.dataGridViewIE.AutoGenerateColumns = true;
+        }
+
+        private void btnDel_Click(object sender, EventArgs e)
+        {
+            // 妫�鏌ユ槸鍚︽湁閫変腑鐨勬护娉㈢被鍨�
+            if (cmbImageEnhancement.SelectedIndex < 0)
+            {
+                MessageBox.Show("璇烽�夋嫨瑕佸垹闄ょ殑婊ゆ尝绫诲瀷锛�", "鎻愮ず",
+                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                return;
+            }
+
+            try
+            {
+                DataGridViewRow selectedRow = dataGridViewIE.SelectedRows[0];
+                string filterToDel = selectedRow.Cells[0].Value?.ToString();
+
+                ImageEnhancementDataType filterToDelete = (ImageEnhancementDataType)cmbImageEnhancement.SelectedIndex;
+
+                // 鏌ユ壘瀵瑰簲鐨勮褰�
+                RecordImageEnhancementData filterToRemove = null;
+
+                // 浠庢湰鍦板垪琛ㄤ腑鏌ユ壘
+                foreach (var filter in recordImageEnhancementDatas)
+                {
+                    if (filter.FilterName.ToString() == filterToDel)
+                    {
+                        filterToRemove = filter;
+                        break;
+                    }
+                }
+
+                if (filterToRemove == null)
+                {
+                    MessageBox.Show("鏈壘鍒板搴旂殑璁板綍锛�", "鎻愮ず",
+                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                    return;
+                }
+
+                // 纭鍒犻櫎
+                DialogResult result = MessageBox.Show(
+                    $"纭畾瑕佸垹闄� '{filterToDel}' 璁板綍鍚楋紵",
+                    "纭鍒犻櫎",
+                    MessageBoxButtons.YesNo,
+                    MessageBoxIcon.Question,
+                    MessageBoxDefaultButton.Button2); // 榛樿閫夋嫨"鍚�"
+
+                if (result == DialogResult.No)
+                    return;
+
+                // 浠庣鐞嗗櫒涓垹闄�
+                bool success = ImageEnhancementManager.Instance.DeleteUser(filterToRemove);
+
+                if (success)
+                {
+                    // 浠庢湰鍦板垪琛ㄤ腑鍒犻櫎
+                    recordImageEnhancementDatas.Remove(filterToRemove);
+
+                    MessageBox.Show("鍒犻櫎鎴愬姛锛�", "鎻愮ず",
+                        MessageBoxButtons.OK, MessageBoxIcon.Information);
+                }
+                else
+                {
+                    MessageBox.Show("鍒犻櫎澶辫触锛�", "閿欒",
+                        MessageBoxButtons.OK, MessageBoxIcon.Error);
+                }
+                recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
+                this.dataGridViewIE.DataSource = recordImageEnhancementDatas;
+                this.dataGridViewIE.AutoGenerateColumns = true;
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show("璇烽�夋嫨瑕佸垹闄ょ殑绠楀瓙");
+            }
+        }
+        /// <summary>
+        /// 鏇存柊杩愯鍙傛暟
+        /// </summary>
+        public override void UpdataInputs()
+        {
+            //璁剧疆杩愯鍙傛暟
+            double dResult = 0;
+            int iResult = 0;
+
+            if (cmbFixture.Text == "")
+                Subject.Params.Fixture = new Fixture();
+            else if (IProcess.dicFixtures.ContainsKey(cmbFixture.Text))
+                Subject.Params.Fixture = IProcess.dicFixtures[cmbFixture.Text];
+
+            Type type = inputImageHSmartWindowControl.oRoi?.GetType();
+            switch (type)
+            {
+                case Type t when t == typeof(HRectangle2):
+                    HRectangle2 hRectangle2 = (HRectangle2)inputImageHSmartWindowControl.oRoi;
+                    Subject.Params.ROI
+                        = new HRectangle2(hRectangle2.X - Subject.Params.Fixture.X, hRectangle2.Y - Subject.Params.Fixture.Y
+                        , hRectangle2.Phi - Subject.Params.Fixture.Phi, hRectangle2.Width, hRectangle2.Height);
+                    break;
+                case Type t when t == typeof(HCircle):
+                    HCircle hCircle = (HCircle)inputImageHSmartWindowControl.oRoi;
+                    Subject.Params.ROI
+                        = new HCircle(hCircle.X - Subject.Params.Fixture.X, hCircle.Y - Subject.Params.Fixture.Y, hCircle.Radius);
+                    break;
+                case Type t when t == typeof(HSegment):
+                    HSegment hSegment = (HSegment)inputImageHSmartWindowControl.oRoi;
+                    Subject.Params.ROI
+                        = new HSegment(hSegment.StartX - Subject.Params.Fixture.X, hSegment.StartY - Subject.Params.Fixture.Y
+                        , hSegment.EndX - Subject.Params.Fixture.X, hSegment.EndY - Subject.Params.Fixture.Y);
+                    break;
+                default:
+                    Subject.Params.ROI = new ROI();
+                    break;
+            }
+        }
+
+        /// <summary>
+        /// 鍔犺浇杩愯鍙傛暟
+        /// </summary>
+        public override void LoadParas()
+        {
+            this.BeginInvoke(new Action(() =>
+            {
+
+                if (Subject.InputImage != null && Subject.InputImage is HObject)
+                    inputImageHSmartWindowControl.ShowHoImage((HObject)Subject.InputImage);
+
+                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;
+                }
+            }));
+        }
+
+        #region 宸ュ叿鏍忔寜閽簨浠�
+        /// <summary>
+        /// 鐐瑰嚮杩愯
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void btnRun_Click(object sender, EventArgs e)
+        {
+            if (Subject.InputImage != null)
+                InputImage = Subject.InputImage;
+
+            DateTime StartTime = DateTime.Now;
+            Run();
+
+            //鏇存柊鏃ュ織涓庣粨鏋�
+            this.BeginInvoke(new Action(() =>
+            {
+                if (Subject.Result)
+                {
+                    lblResult.BackColor = Color.Green;
+                    lblResult.Text = "True";
+                    recordImageHSmartWindowControl.SetColor("green");
+                }
+                else
+                {
+                    lblResult.BackColor = Color.Red;
+                    lblResult.Text = "False";
+                    recordImageHSmartWindowControl.SetColor("red");
+                }
+
+                lblMsg.Text = Msg.Length > 50 ? Msg.Substring(0, 50) : Msg;
+                lblMsgToolTip.SetToolTip(BtmStatusStrip, Msg);
+                lblRunTime.Text = $"{(DateTime.Now - StartTime).TotalMilliseconds}ms";
+
+                UpdataOutputs();
+                imgTabControl.SelectedTab = tabPageRecordImage;
+
+                if (Subject.InputImage != null && Subject.InputImage is HObject)
+                {
+                    HOperatorSet.GetImageSize((HObject)Subject.InputImage, out HTuple ho_ImageWidth, out HTuple ho_ImageHeight);
+                    recordImageHSmartWindowControl.ShowHoImage((HObject)Subject.InputImage);
+                }
+
+                //鍏堝垽鏂瓙绫诲啀鍒ゆ柇鐖剁被
+                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();
+            }));
+        }
+
+        /// <summary>
+        /// 宸ュ叿鏍忊�滃鍥锯��
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void btnLoadImage_Click(object sender, EventArgs e)
+        {
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+
+            // 璁剧疆鏂囦欢瀵硅瘽妗嗙殑灞炴��
+            openFileDialog.Multiselect = false; // 涓嶅厑璁稿閫�
+            // 璁剧疆鏂囦欢杩囨护鍣紝鏀寔澶氱鏂囦欢绫诲瀷
+            openFileDialog.Filter = "Image Files (*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp|All Files (*.*)|*.*";
+            // 鏄剧ず鏂囦欢瀵硅瘽妗�
+            DialogResult result = openFileDialog.ShowDialog();
+
+            // 澶勭悊瀵硅瘽妗嗚繑鍥炵粨鏋�
+            if (result == DialogResult.OK)
+            {
+                // 鑾峰彇鐢ㄦ埛閫夋嫨鐨勬枃浠跺悕
+                string[] selectedFiles = openFileDialog.FileNames;
+                if (selectedFiles.Length > 0)
+                {
+                    HOperatorSet.ReadImage(out HObject ho_Image, selectedFiles[0]);
+                    //鍒ゆ柇鏄惁涓虹伆搴﹀浘
+                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
+                    {
+                        HOperatorSet.CountChannels(ho_Image, out HTuple hv_Channels);
+                        if (hv_Channels.TupleInt() != 1)
+                        {
+                            HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);
+                            //鏇存柊鏃ュ織涓庣粨鏋�
+                            this.BeginInvoke(new Action(() =>
+                            {
+                                lblMsg.Text = "瀵煎叆鍥剧墖闈炵伆搴﹀浘,鑷姩杞崲涓虹伆搴﹀浘";
+                            }));
+                        }
+                        InputImage = ho_Image;
+                        imgTabControl.SelectedTab = tabPageInputImage;
+                        inputImageHSmartWindowControl.oRoi = inputImageHSmartWindowControl.oRoi;
+                    }
+                }
+            }
+        }
+        /// <summary>
+        /// 宸ュ叿鏍忊�滀繚瀛樷��
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void btnSaveParas_Click(object sender, EventArgs e) { base.btnSaveParas_Click(sender, e); }
+        #endregion
+        #region ROI鍔熻兘
+        /// <summary>
+        /// 鏄惁鍚敤ROI
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void ckbDrawRoi_CheckedChanged(object sender, EventArgs e)
+        {
+            if (ckbDrawRoi.Checked)
+            {
+                inputImageHSmartWindowControl.bAollowDraw = true;
+                imgTabControl.SelectedTab = tabPageInputImage;
+            }
+            else
+            {
+                inputImageHSmartWindowControl.bAollowDraw = false;
+                Subject.Params.ROI = new ROI();
+            }
+        }
+        /// <summary>
+        /// ROI涓嬫媺妗嗘敼鍙樹簨浠�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        public override void cmbTypeRoi_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            try
+            {
+                if (Enum.TryParse(cmbTypeRoi.Text.ToString(), out RoiType type))
+                {
+                    HTuple hv_imageWidth = 0;
+                    HTuple hv_imageHeight = 0;
+                    if (InputImage != null && InputImage is HObject)
+                        HOperatorSet.GetImageSize((HObject)InputImage, 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;
+                    }
+                }
+            }
+            catch { }
+        }
+
+        public override void cmbFixture_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            try
+            {
+                if (IProcess.dicFixtures.ContainsKey(cmbFixture.Text))
+                    Subject.Params.Fixture = IProcess.dicFixtures[cmbFixture.Text];
+                else
+                    Subject.Params.Fixture = new Fixture();
+            }
+            catch { }
+        }
+        #endregion
+
+
+    }
+}

--
Gitblit v1.9.3