using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using TeamAAS.Camera.Enums; namespace TeamAAS.Camera.Models { /// /// 相机设备注册信息:仅承担设备发现(搜索列表)、UI 列表展示与配置持久化(Cameras.json)。 /// 相机的可编辑参数(曝光/增益/Gamma)不放在本类——属性编辑器直接绑定 ICamera 实例 /// (见 CameraBase),公共参数在接口/基类上,品牌特有参数在子类上自动带出; /// 本类的 ExposureTime/Gain/Gamma 仅作为启动时下发的持久化快照(null = 使用相机默认值)。 /// public class CameraInfo : INotifyPropertyChanged { [Browsable(false)] public Guid Id { get; set; } [Category("基本"), DisplayName("编号")] public int CameraNo { get; set; } [Category("基本"), DisplayName("名称")] public string CameraName { get; set; } [Category("只读信息"), DisplayName("型号"), ReadOnly(true)] public string Model { get; set; } [Category("只读信息"), DisplayName("序列号"), ReadOnly(true)] public string SerialNumber { get; set; } [Category("只读信息"), DisplayName("厂商"), ReadOnly(true)] public string ManufacturerName { get; set; } [Browsable(false)] public CameraType CameraType { get; set; } [Category("只读信息"), DisplayName("品牌"), ReadOnly(true)] public string CameraBrand { get; set; } [Category("网络"), DisplayName("IP地址")] public string CameraIp { get; set; } [Category("网络"), DisplayName("通过IP查找")] public bool IsFindByIp { get; set; } [Browsable(false)] public bool IsConnected { get; set; } [Browsable(false)] public bool IsGrabbing { get; set; } // ===== 参数持久化快照(由 CameraManager 从 ICamera 实例回写;null 表示不改用默认值) ===== [Browsable(false)] public float? ExposureTime { get; set; } [Browsable(false)] public float? Gain { get; set; } [Browsable(false)] public float? Gamma { get; set; } public CameraInfo() { Id = Guid.NewGuid(); } public CameraInfo(Guid id, string cameraName, CameraType cameraType, string cameraBrand, string cameraIp) { Id = id; CameraName = cameraName; CameraType = cameraType; CameraBrand = cameraBrand; CameraIp = cameraIp; if (cameraType == CameraType.GIGE) { IsFindByIp = true; } } [Browsable(false)] public string CameraBrandDisplay => CameraManager.Instance.GetBrandDisplayName(CameraBrand); public CameraInfo Copy() { return new CameraInfo { Id = this.Id, CameraName = this.CameraName, Model = this.Model, SerialNumber = this.SerialNumber, ManufacturerName = this.ManufacturerName, CameraType = this.CameraType, CameraBrand = this.CameraBrand, CameraIp = this.CameraIp, CameraNo = this.CameraNo, IsFindByIp = this.IsFindByIp, IsConnected = this.IsConnected, IsGrabbing = this.IsGrabbing, ExposureTime = this.ExposureTime, Gain = this.Gain, Gamma = this.Gamma }; } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null) { if (EqualityComparer.Default.Equals(storage, value)) return false; storage = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); return true; } #endregion } }