|
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<string, LogInfoType> 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;
|
|
RemoveFlowEvent(flow);
|
uiFlowLayoutPanel1.Controls.Remove(uiFlowLayoutPanel1.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 < 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();
|
}
|
}
|
}
|
}
|