using LB_VisionControl; using LB_VisionProcesses.Cameras; using OpenCvSharp.Flann; using System; using System.Collections.Concurrent; using System.Windows.Forms; using System.Xml.Linq; namespace LB_SmartVision.Forms.Pages.CameraPage { public partial class CamerasEditPage : UserControl { public Action LogInfo; public CamerasEditPage() { InitializeComponent(); Name = "CamerasEditPage"; Text = "相机设置"; //this.Font = new Font("Microsoft YaHei UI", 16F, FontStyle.Regular, GraphicsUnit.Point, 0); } private void CamerasEditPage_Paint(object sender, PaintEventArgs e) { uiFlowLayoutPanel1.Controls.Clear(); if (GlobalVar.dicCameras.Count <= 0) return; foreach (var item in GlobalVar.dicCameras) { string CameraSN = item.Key; string CameraBrand = item.Value.Brand.ToString(); if (string.IsNullOrEmpty(CameraSN) || string.IsNullOrEmpty(CameraBrand)) return; UserItem flow = new UserItem(new string[] { "测试", "刷新", "移除" }); flow.Name = CameraSN; flow.Text = $"[{CameraBrand}]"; if (item.Value.isGrabbing) flow.state = State.Pass; else flow.state |= State.Error; LoadFlowEvent(flow); uiFlowLayoutPanel1.Controls.Add(flow); } } private void uiButton1_Click(object sender, System.EventArgs e) { CreateCameraForm createCameraForm = new CreateCameraForm(); createCameraForm.ShowDialog(); if (createCameraForm.bCreate) { BaseCamera camera = createCameraForm.camera; if (GlobalVar.dicCameras.ContainsKey(camera.SN)) { MessageBox.Show($"相机[{camera.SN}]已存在!", "异常"); return; } string CameraSN = camera.SN;//"127.0.0.1" string CameraBrand = camera.Brand.ToString();//"1111" if (string.IsNullOrEmpty(CameraSN) || string.IsNullOrEmpty(CameraBrand)) return; GlobalVar.dicCameras.TryAdd(CameraSN, camera); LogInfo?.Invoke(string.Format("添加相机[{0}][{1}]成功", CameraBrand, CameraSN), LogInfoType.PASS); } this.Invalidate(); } private void uiButton2_Click(object sender, System.EventArgs e) { //清除用Clear方法 uiFlowLayoutPanel1.Controls.Clear(); foreach (var camera in GlobalVar.dicCameras.Values) { camera.CloseDevice(); } GlobalVar.dicCameras.Clear(); } private void LoadFlowEvent(UserItem flow) { //按键1为测试 flow.MenuItem1ClickedEvent += TestEvent; //按键2为刷新 flow.MenuItem2ClickedEvent += ReconnectEvent; //按键3为移除 flow.MenuItem3ClickedEvent += DeleteEvent; } private void RemoveFlowEvent(UserItem flow) { //按键1为测试 flow.MenuItem1ClickedEvent -= TestEvent; //按键2为刷新 flow.MenuItem2ClickedEvent -= ReconnectEvent; //按键3为移除 flow.MenuItem3ClickedEvent += DeleteEvent; } // 测试相机 private void TestEvent(string Name, string Text) { for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++) { UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i]; string name = flow.Name; if (name != Name) continue; if (GlobalVar.dicCameras.ContainsKey(name)) { CameraForm cameraForm = new CameraForm(GlobalVar.dicCameras[name]); cameraForm.Show(); } } } // 移除相机 private void DeleteEvent(string Name, string Text) { for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++) { UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i]; string name = flow.Name; if (name != Name) continue; if (GlobalVar.dicCameras.ContainsKey(name)) { MotionControlPage.MotionControlForm cameraForm = new MotionControlPage.MotionControlForm(GlobalVar.dicCameras[name]); cameraForm.Show(); } } } // 重连相机 private void ReconnectEvent(string Name, string Text) { for (int i = 0; i < uiFlowLayoutPanel1.Controls.Count; i++) { UserItem flow = (UserItem)uiFlowLayoutPanel1.Controls[i]; string name = flow.Name; if (name != Name) continue; GlobalVar.dicCameras[name].CloseDevice(); Thread.Sleep(50); GlobalVar.dicCameras[name].InitDevice(name, this.Handle); if (GlobalVar.dicCameras[name].isGrabbing) { flow.state = State.Pass; LogInfo?.Invoke(string.Format("重连相机[{0}]成功", name), LogInfoType.PASS); } else { flow.state = State.Error; LogInfo?.Invoke(string.Format("重连相机[{0}]失败", name), LogInfoType.ERROR); } flow.Refresh(); } } } }