CameraInfo.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Runtime.CompilerServices;
  5. using TeamAAS.Camera.Enums;
  6. namespace TeamAAS.Camera.Models
  7. {
  8. /// <summary>
  9. /// 相机设备注册信息:仅承担设备发现(搜索列表)、UI 列表展示与配置持久化(Cameras.json)。
  10. /// 相机的可编辑参数(曝光/增益/Gamma)不放在本类——属性编辑器直接绑定 ICamera 实例
  11. /// (见 CameraBase),公共参数在接口/基类上,品牌特有参数在子类上自动带出;
  12. /// 本类的 ExposureTime/Gain/Gamma 仅作为启动时下发的持久化快照(null = 使用相机默认值)。
  13. /// </summary>
  14. public class CameraInfo : INotifyPropertyChanged
  15. {
  16. [Browsable(false)]
  17. public Guid Id { get; set; }
  18. [Category("基本"), DisplayName("编号")]
  19. public int CameraNo { get; set; }
  20. [Category("基本"), DisplayName("名称")]
  21. public string CameraName { get; set; }
  22. [Category("只读信息"), DisplayName("型号"), ReadOnly(true)]
  23. public string Model { get; set; }
  24. [Category("只读信息"), DisplayName("序列号"), ReadOnly(true)]
  25. public string SerialNumber { get; set; }
  26. [Category("只读信息"), DisplayName("厂商"), ReadOnly(true)]
  27. public string ManufacturerName { get; set; }
  28. [Browsable(false)]
  29. public CameraType CameraType { get; set; }
  30. [Category("只读信息"), DisplayName("品牌"), ReadOnly(true)]
  31. public string CameraBrand { get; set; }
  32. [Category("网络"), DisplayName("IP地址")]
  33. public string CameraIp { get; set; }
  34. [Category("网络"), DisplayName("通过IP查找")]
  35. public bool IsFindByIp { get; set; }
  36. [Browsable(false)]
  37. public bool IsConnected { get; set; }
  38. [Browsable(false)]
  39. public bool IsGrabbing { get; set; }
  40. // ===== 参数持久化快照(由 CameraManager 从 ICamera 实例回写;null 表示不改用默认值) =====
  41. [Browsable(false)]
  42. public float? ExposureTime { get; set; }
  43. [Browsable(false)]
  44. public float? Gain { get; set; }
  45. [Browsable(false)]
  46. public float? Gamma { get; set; }
  47. public CameraInfo()
  48. {
  49. Id = Guid.NewGuid();
  50. }
  51. public CameraInfo(Guid id, string cameraName, CameraType cameraType, string cameraBrand, string cameraIp)
  52. {
  53. Id = id;
  54. CameraName = cameraName;
  55. CameraType = cameraType;
  56. CameraBrand = cameraBrand;
  57. CameraIp = cameraIp;
  58. if (cameraType == CameraType.GIGE)
  59. {
  60. IsFindByIp = true;
  61. }
  62. }
  63. [Browsable(false)]
  64. public string CameraBrandDisplay => CameraManager.Instance.GetBrandDisplayName(CameraBrand);
  65. public CameraInfo Copy()
  66. {
  67. return new CameraInfo
  68. {
  69. Id = this.Id,
  70. CameraName = this.CameraName,
  71. Model = this.Model,
  72. SerialNumber = this.SerialNumber,
  73. ManufacturerName = this.ManufacturerName,
  74. CameraType = this.CameraType,
  75. CameraBrand = this.CameraBrand,
  76. CameraIp = this.CameraIp,
  77. CameraNo = this.CameraNo,
  78. IsFindByIp = this.IsFindByIp,
  79. IsConnected = this.IsConnected,
  80. IsGrabbing = this.IsGrabbing,
  81. ExposureTime = this.ExposureTime,
  82. Gain = this.Gain,
  83. Gamma = this.Gamma
  84. };
  85. }
  86. #region INotifyPropertyChanged
  87. public event PropertyChangedEventHandler PropertyChanged;
  88. protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
  89. {
  90. if (EqualityComparer<T>.Default.Equals(storage, value)) return false;
  91. storage = value;
  92. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  93. return true;
  94. }
  95. #endregion
  96. }
  97. }