| | |
| | | using LB_VisionControl; |
| | | using LB_SmartVision.Forms.Pages.CameraPage; |
| | | using LB_SmartVision.Forms.Pages.MotionControlPage; |
| | | using LB_VisionControl; |
| | | using LB_VisionProcesses.Cameras; |
| | | using OpenCvSharp.Flann; |
| | | using System; |
| | | using System.Collections.Concurrent; |
| | |
| | | { |
| | | public Action<string, LogInfoType> LogInfo; |
| | | |
| | | |
| | | public MotionControlEditPage() |
| | | { |
| | | InitializeComponent(); |
| | |
| | | |
| | | private void MESEditPage_Paint(object sender, PaintEventArgs e) |
| | | { |
| | | uiFlowLayoutPanel1.Controls.Clear(); |
| | | uiMCLayoutPanel1.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); |
| | | |
| | | uiMCLayoutPanel1.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方法 |
| | | uiMCLayoutPanel1.Controls.Clear(); |
| | | foreach (var camera in GlobalVar.dicCameras.Values) |
| | | { |
| | | camera.CloseDevice(); |
| | | } |
| | | GlobalVar.dicCameras.Clear(); |
| | | } |
| | | |
| | | private void LoadFlowEvent(UserItem flow) |
| | | { |
| | | //按键1为测试 |
| | | flow.MenuItem1ClickedEvent += MCEvent; |
| | | //按键2为刷新 |
| | | flow.MenuItem2ClickedEvent += ReconnectEvent; |
| | | //按键3为移除 |
| | | flow.MenuItem3ClickedEvent += DeleteEvent; |
| | | |
| | | } |
| | | |
| | | private void RemoveFlowEvent(UserItem flow) |
| | | { |
| | | //按键1为测试 |
| | | flow.MenuItem1ClickedEvent -= MCEvent; |
| | | //按键2为刷新 |
| | | flow.MenuItem2ClickedEvent -= ReconnectEvent; |
| | | //按键3为移除 |
| | | flow.MenuItem3ClickedEvent -= DeleteEvent; |
| | | } |
| | | |
| | | // 运动控制 |
| | | private void MCEvent(string Name, string Text) |
| | | { |
| | | for (int i = 0; i < uiMCLayoutPanel1.Controls.Count; i++) |
| | | { |
| | | UserItem flow = (UserItem)uiMCLayoutPanel1.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 DeleteEvent(string Name, string Text) |
| | | { |
| | | for (int i = 0; i < uiMCLayoutPanel1.Controls.Count; i++) |
| | | { |
| | | UserItem flow = (UserItem)uiMCLayoutPanel1.Controls[i]; |
| | | string name = flow.Name; |
| | | if (name != Name) |
| | | continue; |
| | | |
| | | RemoveFlowEvent(flow); |
| | | uiMCLayoutPanel1.Controls.Remove(uiMCLayoutPanel1.Controls[i]); |
| | | if (GlobalVar.dicCameras.TryRemove(name, out BaseCamera BaseCamera)) |
| | | { |
| | | BaseCamera.Dispose(); |
| | | LogInfo?.Invoke(string.Format("移除相机[{0}]", name), LogInfoType.INFO); |
| | | } |
| | | else |
| | | LogInfo?.Invoke(string.Format("移除相机[{0}]失败", name), LogInfoType.ERROR); |
| | | |
| | | } |
| | | } |
| | | |
| | | // 重连相机 |
| | | private void ReconnectEvent(string Name, string Text) |
| | | { |
| | | for (int i = 0; i < uiMCLayoutPanel1.Controls.Count; i++) |
| | | { |
| | | UserItem flow = (UserItem)uiMCLayoutPanel1.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(); |
| | | } |
| | | } |
| | | } |
| | | } |