Files
CheckDevice/Check.Main/Camera/CameraSettings.cs
17860779768 2e46747ba9 视觉修改
2025-08-25 16:33:58 +08:00

183 lines
5.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Check.Main.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Design;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.Design;
namespace Check.Main.Camera
{
// 相机触发方式枚举
public enum TriggerModeType
{
[Description("连续采集")]
Continuous,
[Description("软件触发")]
Software,
[Description("硬件触发")]
Hardware
}
public enum CheckType
{
[Description("传统算法")]
Traditional,
[Description("深度学习")]
DeepLearning
}
/// <summary>
/// 相机配置信息类用于PropertyGrid显示和编辑
/// </summary>
public class CameraSettings : INotifyPropertyChanged, ICloneable
{
// 1. 实现 INotifyPropertyChanged 接口所要求的事件
public event PropertyChangedEventHandler PropertyChanged;
private int _cameraIndex = 0;
private string _name = "Camera-1";
private string _ipAddress = "192.168.1.100";
private string _ipDeviceAddress = "192.168.1.101";
private TriggerModeType _triggerMode = TriggerModeType.Continuous;
private bool _isEnabled = true;
private CheckType _checkType = CheckType.DeepLearning;
private int _modelID = 0;
[Category("基本信息"), DisplayName("相机编号"), Description("相机的唯一标识符,用于与模型编号对应。")]
public int CameraIndex
{
get => _cameraIndex;
set
{
if (_cameraIndex != value)
{
_cameraIndex = value;
OnPropertyChanged();
}
}
}
[Category("基本信息"), DisplayName("相机名称"), Description("给相机起一个唯一的别名")]
public string Name
{
get => _name;
set
{
// 2. 在setter中检查值是否真的改变了
if (_name != value)
{
_name = value;
// 3. 如果改变了就调用通知方法广播“Name”属性已变更的消息
OnPropertyChanged();
}
}
}
[Category("网络信息"), DisplayName("相机IP地址"), Description("相机的IP地址GigE相机需要")]
public string IPAddress
{
get => _ipAddress;
set
{
if (_ipAddress != value)
{
_ipAddress = value;
OnPropertyChanged();
}
}
}
[Category("网络信息"), DisplayName("上位机IP地址"), Description("相机对应的上位机的IP地址GigE相机需要")]
public string IPDeviceAddress
{
get => _ipDeviceAddress;
set
{
if (_ipDeviceAddress != value)
{
_ipDeviceAddress = value;
OnPropertyChanged();
}
}
}
[Category("采集控制"), DisplayName("触发模式"), Description("设置相机的图像采集触发方式")]
[TypeConverter(typeof(EnumDescriptionTypeConverter))]
public TriggerModeType TriggerMode
{
get => _triggerMode;
set
{
if (_triggerMode != value)
{
_triggerMode = value;
OnPropertyChanged();
}
}
}
[Category("采集控制"), DisplayName("是否启用"), Description("是否在程序启动时初始化并使用此相机")]
public bool IsEnabled
{
get => _isEnabled;
set
{
if (_isEnabled != value)
{
_isEnabled = value;
OnPropertyChanged();
}
}
}
[Category("检测配置"), DisplayName("检测类型"), Description("使用传统算法或深度学习")]
[TypeConverter(typeof(EnumDescriptionTypeConverter))]
public CheckType CheckType
{
get => _checkType;
set
{
if (_checkType != value)
{
_checkType = value;
OnPropertyChanged();
}
}
}
[Category("基本信息"), DisplayName("模型编号"), Description("相机调用的模型编号")]
[TypeConverter(typeof(ModelSelectionConverter))]
public int ModelID
{
get => _modelID;
set
{
if (_modelID != value)
{
_modelID = value;
OnPropertyChanged();
}
}
}
/// <summary>
/// 4. 触发 PropertyChanged 事件的辅助方法
/// [CallerMemberName] 特性是一个“语法糖”,它会自动获取调用此方法的属性的名称。
/// 例如在Name属性的setter中调用OnPropertyChanged()C#编译器会自动传入"Name"作为参数。
/// </summary>
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public object Clone()
{
// MemberwiseClone() 会创建一个新对象,并将当前对象的所有非静态字段的值
// 复制到新对象中。对于值类型,这是值的拷贝;对于引用类型,这是引用的拷贝。
// 在本类中,这已经足够了。
return this.MemberwiseClone();
}
}
}