From 45b3ac86565d0104812161e1a8131a6d6849b6df Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期二, 23 十二月 2025 16:15:33 +0800
Subject: [PATCH] Merge branch 'feature/HR_Camera'

---
 LB_VisionProcesses/Cameras/2DCameraForm.cs |  225 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 169 insertions(+), 56 deletions(-)

diff --git a/LB_VisionProcesses/Cameras/2DCameraForm.cs b/LB_VisionProcesses/Cameras/2DCameraForm.cs
index 0d48c1f..361de9b 100644
--- a/LB_VisionProcesses/Cameras/2DCameraForm.cs
+++ b/LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -38,9 +38,9 @@
         {
             InitializeComponent();
             //浼犲叆鐩告満鍙ユ焺鍚庣鐢ㄨ繛鎺�/鏂紑鎸夐敭
-            this.btn_Open.Enabled = false;
-            this.btn_Close.Enabled = false;
-            this.cmb_Brand.Enabled = false;
+            //this.btnOpen.Enabled = false;
+            //this.btnClose.Enabled = false;
+            //this.cmbBrand.Enabled = false;
             this.panel_Picture.Controls.Clear();
 
             this.dicCameras = dicCameras;
@@ -48,7 +48,7 @@
             this.camConfig = camConfig;
 
             foreach (var CamSN in dicCameras.Keys)
-                cmb_SN.Items.Add(CamSN);
+                cmbSN.Items.Add(CamSN);
 
             Enum.TryParse(camConfig.Params.Inputs["瑙﹀彂鏂瑰紡"].ToString(), out TriggerSource TriggerSource);
 
@@ -96,17 +96,23 @@
             var brands = Enum.GetValues(typeof(CameraBrand)).Cast<CameraBrand>();
             foreach (var brand in brands)
             {
-                cmb_Brand.Items.Add(brand.ToString());
+                cmbBrand.Items.Add(brand.ToString());
             }
 
             //閫夋嫨Cam浼氳Е鍙慥alueChanged浜嬩欢锛屾病鏈夎緭鍏ョ浉鏈虹殑鎯呭喌涓嬮�夋嫨鍒�-1
             if (camConfig != null)
             {
                 string SN = camConfig.Params.Inputs["鐩告満SN"].ToString();
-                int Index = cmb_SN.FindString(SN);
+                int Index = cmbSN.FindString(SN);
 
-                cmb_SN.Text = SN;
-                cmb_SN.SelectedIndex = Index;
+                cmbSN.Text = SN;
+                cmbSN.SelectedIndex = Index;
+
+                // 濡傛灉娌℃壘鍒扮储寮曪紙鍙兘鏄柊澧炵殑锛夛紝鎵嬪姩瑙﹀彂涓�娆¢�昏緫浠ユ洿鏂癠I
+                if (Index == -1)
+                {
+                    cmbSN_SelectedIndexChanged(null, null);
+                }
 
                 ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁鏈湴鍙栧浘"].ToString());
                 ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁姣忔鍐欏叆鍙傛暟"].ToString());
@@ -147,9 +153,9 @@
             if (dicCameras != null && dicCameras.Count > 0)
                 return;
 
-            cmb_SN.Items.Clear();
+            cmbSN.Items.Clear();
             // 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
-            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
             {
                 // 浣跨敤 switch 璇彞鏉ュ垽鏂灇涓惧��
                 switch (brand)
@@ -167,8 +173,8 @@
 
                 foreach (var item in camera.GetListEnum())
                 {
-                    if (!cmb_SN.Items.Contains(item))
-                        cmb_SN.Items.Add(item);
+                    if (!cmbSN.Items.Contains(item))
+                        cmbSN.Items.Add(item);
                 }
             }
             else
@@ -179,7 +185,7 @@
 
         private void cmbSN_SelectedIndexChanged(object sender, EventArgs e)
         {
-            btn_Edit.Enabled = false;
+            btnEdit.Enabled = false;
             //camConfig涓嶄负绌猴紙杈撳叆鏈夌浉鏈猴級锛屾洿鏀圭浉鏈洪�夋嫨闇�瑕侀噸鏂板姞杞藉埛鍥句簨浠�
             if (camConfig != null && camera != null)
             {
@@ -192,25 +198,37 @@
                 camera.Dispose();
             }
 
-            if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmb_SN.Text))
-                camera = dicCameras[cmb_SN.Text];
+            if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmbSN.Text))
+                camera = dicCameras[cmbSN.Text];
 
             //璇存槑鐩告満宸茬粡鍒濆鍖栨垚鍔�
-            if (camera != null && camera.isGrabbing)
+            if (camera != null)
             {
-                camera.ImageGrabbed -= GetImageBllComplete;
-                camera.ImageGrabbed += GetImageBllComplete;
+                int Index = cmbBrand.FindString(camera.Brand.ToString());
+                if (Index >= 0)
+                {
+                    cmbBrand.Text = camera.Brand.ToString();
+                    cmbBrand.SelectedIndex = Index;
+                }
 
-                int Index = cmb_Brand.FindString(camera.Brand.ToString()); ;
-                cmb_Brand.Text = camera.Brand.ToString();
-                cmb_Brand.SelectedIndex = Index;
+                if (camera.isGrabbing)
+                {
+                    camera.ImageGrabbed -= GetImageBllComplete;
+                    camera.ImageGrabbed += GetImageBllComplete;
+                    this.btnEdit.Enabled = true;
+                }
+                // 濡傛灉鐩告満瀛樺湪浜庡瓧鍏镐腑锛岃鏄庢槸宸茶繛鎺ョ殑璁惧锛屽厑璁哥紪杈�
+                else if (dicCameras != null && dicCameras.ContainsKey(camera.SN))
+                {
+                    this.btnEdit.Enabled = true;
+                }
             }
         }
 
-        private void btn_Open_Click(object sender, EventArgs e)
+        private void btnOpen_Click(object sender, EventArgs e)
         {
             // 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
-            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
             {
                 if (camera != null)
                 {
@@ -232,11 +250,12 @@
                         return;
                 }
 
-                if (cmb_SN.Items.Count > 0 && camera.InitDevice(cmb_SN.Text.ToString(), this.Handle))
+                if (cmbSN.Items.Count > 0 && camera.InitDevice(cmbSN.Text.ToString(), this.Handle))
                 {
                     camera.ImageGrabbed -= GetImageBllComplete;
                     camera.ImageGrabbed += GetImageBllComplete;
                     MessageBox.Show(camera.SN + "鎵撳紑鎴愬姛");
+                    this.btnEdit.Enabled = true;
                 }
             }
             else
@@ -266,11 +285,11 @@
             }
         }
 
-        private void btn_Close_Click(object sender, EventArgs e)
+        private void btnClose_Click(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
-            this.btn_Edit.Enabled = false;
+            this.btnEdit.Enabled = false;
 
             if (camera.CloseDevice())
             {
@@ -279,10 +298,71 @@
             }
         }
 
-        private void btn_Edit_Click(object sender, EventArgs e)
+        private void btnEdit_Click(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
+
+            using (Form editForm = new Form())
+            {
+                editForm.Text = "楂樼骇鍙傛暟璁剧疆 - " + camera.SN;
+                editForm.Size = new System.Drawing.Size(400, 500);
+                editForm.StartPosition = FormStartPosition.CenterParent;
+                editForm.FormBorderStyle = FormBorderStyle.SizableToolWindow;
+
+                PropertyGrid pg = new PropertyGrid();
+                pg.Dock = DockStyle.Fill;
+                pg.SelectedObject = new CameraAdvancedSettings(camera);
+
+                editForm.Controls.Add(pg);
+                editForm.ShowDialog();
+            }
+        }
+
+        /// <summary>
+        /// 鐩告満楂樼骇璁剧疆鍖呰绫�
+        /// </summary>
+        public class CameraAdvancedSettings
+        {
+            private BaseCamera _camera;
+            public CameraAdvancedSettings(BaseCamera camera)
+            {
+                _camera = camera;
+            }
+
+            [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂婧�")]
+            public TriggerSource TriggerSource
+            {
+                get { _camera.GetTriggerMode(out _, out TriggerSource s); return s; }
+                set { _camera.GetTriggerMode(out TriggerMode m, out _); _camera.SetTriggerMode(m, value); }
+            }
+
+            [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂鏋佹��")]
+            public TriggerPolarity TriggerPolarity
+            {
+                get { _camera.GetTriggerPolarity(out TriggerPolarity p); return p; }
+                set { _camera.SetTriggerPolarity(value); }
+            }
+
+            [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂寤舵椂(us)")]
+            public double TriggerDelay
+            {
+                get { _camera.GetTriggerDelay(out double d); return d; }
+                set { _camera.SetTriggerDelay(value); }
+            }
+
+            [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂婊ゆ尝(us)")]
+            public double TriggerFilter
+            {
+                get { _camera.GetTriggerFliter(out double f); return f; }
+                set { _camera.SetTriggerFliter(value); }
+            }
+
+            [System.ComponentModel.Category("鍥惧儚璁剧疆"), System.ComponentModel.Description("鑷姩鐧藉钩琛�")]
+            public void AutoBalanceWhite()
+            {
+                _camera.AutoBalanceWhite();
+            }
         }
 
         /// <summary>
@@ -324,7 +404,7 @@
         private Pen pen = new Pen(Color.Blue, 3f);
 
         private System.Drawing.Point[] stPointList = new System.Drawing.Point[4];
-        private void btn_GrabOnce_Click(object sender, EventArgs e)
+        private void btnGrabOnce_Click(object sender, EventArgs e)
         {
             DateTime StartTime = DateTime.Now;
             if (camera == null)
@@ -332,7 +412,7 @@
 
             Task.Factory.StartNew(() =>
             {
-                camera.GetCamConfig(out CameraConfig OriCamConfig);
+                //camera.GetCamConfig(out CameraConfig OriCamConfig);
 
                 camera.SetExpouseTime(Convert.ToDouble(txtExp.Text));
                 camera.SetGain(Convert.ToDouble(txtGain.Text));
@@ -348,11 +428,11 @@
                 }));
 
                 //澶嶅師鍘熼�氳鍙h缃�
-                camera.SetCamConfig(OriCamConfig);
+                //camera.SetCamConfig(OriCamConfig);
             });
         }
 
-        private void btn_StartHard_Click(object sender, EventArgs e)
+        private void btnStartHard_Click(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
@@ -360,7 +440,7 @@
             total.Clear();
 
             // 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
-            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
             {
                 camera.StopGrabbing();
                 camera.StartWith_HardTriggerModel();
@@ -368,11 +448,11 @@
 
             startGrabtime = DateTime.Now;
 
-            cmb_SN.Enabled = false;
-            cmb_Brand.Enabled = false;
+            cmbSN.Enabled = false;
+            cmbBrand.Enabled = false;
         }
 
-        private void btn_StartGrab_Click(object sender, EventArgs e)
+        private void btnStartGrab_Click(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
@@ -380,7 +460,7 @@
             total.Clear();
 
             // 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
-            if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+            if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
             {
                 Task.Factory.StartNew(() =>
                 {
@@ -391,11 +471,11 @@
             }
 
             startGrabtime = DateTime.Now;
-            cmb_SN.Enabled = false;
-            cmb_Brand.Enabled = false;
+            cmbSN.Enabled = false;
+            cmbBrand.Enabled = false;
         }
 
-        private void btn_CloseGrab_Click(object sender, EventArgs e)
+        private void btnCloseGrab_Click(object sender, EventArgs e)
         {
             try
             {
@@ -403,7 +483,7 @@
                     return;
 
                 // 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
-                if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+                if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
                 {
                     Task.Factory.StartNew(() =>
                     {
@@ -413,13 +493,13 @@
                     });
                 }
 
-                cmb_SN.Enabled = true;
-                cmb_Brand.Enabled = true;
+                cmbSN.Enabled = true;
+                cmbBrand.Enabled = true;
             }
             catch { }
         }
 
-        private void btn_LocalGrab_Click(object sender, EventArgs e)
+        private void btnLocalGrab_Click(object sender, EventArgs e)
         {
             try
             {
@@ -452,7 +532,7 @@
             catch { }
         }
 
-        private void txt_Exp_TextChanged(object sender, EventArgs e)
+        private void txtExp_TextChanged(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
@@ -462,7 +542,7 @@
                 camera.SetExpouseTime(exp);
         }
 
-        private void txt_Gain_TextChanged(object sender, EventArgs e)
+        private void txtGain_TextChanged(object sender, EventArgs e)
         {
             if (camera == null)
                 return;
@@ -472,7 +552,7 @@
                 camera.SetGain(gain);
         }
 
-        private void btn_AddImages_Click(object sender, EventArgs e)
+        private void btnAddImages_Click(object sender, EventArgs e)
         {
             OpenFileDialog openFileDialog = new OpenFileDialog();
 
@@ -517,9 +597,25 @@
 
             if (res == DialogResult.Yes)  //淇濆瓨VPP
             {
-                camConfig.Params.Inputs.Add("鐩告満SN", cmb_SN.Text);
+                TriggerSource actualSource = TriggerSource.Line0;
+                TriggerPolarity polarity = TriggerPolarity.RisingEdge;
+                double delay = 0;
+                double filter = 0;
+
+                if (camera != null)
+                {
+                    camera.GetTriggerMode(out _, out actualSource);
+                    camera.GetTriggerPolarity(out polarity);
+                    camera.GetTriggerDelay(out delay);
+                    camera.GetTriggerFliter(out filter);
+                }
+
+                camConfig.Params.Inputs.Add("鐩告満SN", cmbSN.Text);
                 camConfig.Params.Inputs.Add("瑙﹀彂妯″紡", TriggerMode.On);
-                camConfig.Params.Inputs.Add("瑙﹀彂鏂瑰紡", radioButtonSoft.Checked ? TriggerSource.Software : TriggerSource.Line0);
+                camConfig.Params.Inputs.Add("瑙﹀彂鏂瑰紡", radioButtonSoft.Checked ? TriggerSource.Software : actualSource);
+                camConfig.Params.Inputs.Add("瑙﹀彂鏋佹��", polarity);
+                camConfig.Params.Inputs.Add("瑙﹀彂寤舵椂", delay);
+                camConfig.Params.Inputs.Add("瑙﹀彂娑堟姈", filter);
                 camConfig.Params.Inputs.Add("鏄惁鏈湴鍙栧浘", ckbLocalTest.Checked);
                 camConfig.Params.Inputs.Add("鏈湴鍙栧浘璺緞", cmbImagesPath.Items.Cast<string>().ToList());
                 camConfig.Params.Inputs.Add("鏄惁澶辫触閲嶆柊鍙栧浘", ckbRegrab.Checked);
@@ -548,10 +644,11 @@
                 camera.ImageGrabbed -= GetImageBllComplete;
                 camera.StopGrabbing();
 
+                camera.GetTriggerMode(out _, out TriggerSource actualSource);
                 if (radioButtonSoft.Checked)
                     camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
                 else
-                    camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+                    camera.SetTriggerMode(TriggerMode.On, actualSource);
 
                 camera.StartGrabbing();
             }
@@ -574,7 +671,7 @@
             };
         }
 
-        private void btn_SaveImage_Click(object sender, EventArgs e)
+        private void btnSaveImage_Click(object sender, EventArgs e)
         {
             if (Bitmap == null)
             {
@@ -614,17 +711,28 @@
 
         private void radioButtonSoft_CheckedChanged(object sender, EventArgs e)
         {
-            btn_GrabOnce.Enabled = radioButtonSoft.Checked;
-            btn_StartGrab.Enabled = radioButtonSoft.Checked;
-            btn_CloseGrab.Enabled = radioButtonSoft.Checked;
+            btnGrabOnce.Enabled = radioButtonSoft.Checked;
+            btnStartGrab.Enabled = radioButtonSoft.Checked;
+            btnCloseGrab.Enabled = radioButtonSoft.Checked;
             btnStartHard.Enabled = !radioButtonSoft.Checked;
 
             if (camera == null)
                 return;
+
+            camera.GetTriggerMode(out _, out TriggerSource currentSource);
+
             if (radioButtonSoft.Checked)
+            {
                 camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
+            }
             else
-                camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+            {
+                // 濡傛灉褰撳墠宸茬粡鏄‖浠惰Е鍙戞簮锛屽垯淇濇寔锛涘惁鍒欓粯璁ine0
+                if (currentSource == TriggerSource.Software)
+                    camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+                else
+                    camera.SetTriggerMode(TriggerMode.On, currentSource);
+            }
         }
 
         System.Windows.Forms.ToolTip ToolTip = new System.Windows.Forms.ToolTip();
@@ -650,12 +758,17 @@
 
         private void controlBox_2DCameraForm_Click(object sender, EventArgs e)
         {
-            
+
         }
 
         private void dungeonControlBox_2DCameraForm_Click(object sender, EventArgs e)
         {
-           // this.Close();
+            // this.Close();
+        }
+
+        private void theme_2DCameraForm_Click(object sender, EventArgs e)
+        {
+
         }
     }
 }

--
Gitblit v1.9.3