FastLineSeries.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. 
  2. using System;
  3. using System.ComponentModel;
  4. using System.Runtime.CompilerServices;
  5. using System.Windows.Media;
  6. using MECF.Framework.UI.Client.ClientBase.Tree;
  7. using SciChart.Charting.Visuals.RenderableSeries;
  8. namespace MECF.Framework.UI.Client.ClientBase.Charting
  9. {
  10. public class FastLineSeries : FastLineRenderableSeries, INotifyPropertyChanged
  11. {
  12. private double _dataFactor = 1.0;
  13. private double _dataOffset = 0.0;
  14. public event PropertyChangedEventHandler PropertyChanged;
  15. #region Constructors
  16. public FastLineSeries(string dataName)
  17. : this(dataName, dataName, Colors.Black)
  18. {
  19. }
  20. public FastLineSeries(string dataName, string displayName, Color seriesColor, int? fifoCapacity = null)
  21. {
  22. UniqueId = Guid.NewGuid().ToString();
  23. Stroke = seriesColor;
  24. IsVisible = true;
  25. LineThickness = 1.0;
  26. XAxisId = "DefaultAxisId";
  27. YAxisId = "DefaultAxisId";
  28. DataFactor = 1.0;
  29. DataOffset = 0.0;
  30. DataSeries = new FastLineDataSeries()
  31. {
  32. SeriesName = dataName,
  33. FifoCapacity = fifoCapacity,
  34. Factor = DataFactor,
  35. Offset = DataOffset
  36. };
  37. //! 注意目前的程序要求 DataSeries.SeriesName 必须等于 DataName.
  38. DisplayName = displayName;
  39. DataName = dataName;
  40. }
  41. #endregion
  42. #region Properties
  43. public string UniqueId { get; }
  44. public string DataName { get; }
  45. public string DisplayName
  46. {
  47. get => DataSeries.SeriesName;
  48. set => DataSeries.SeriesName = value;
  49. }
  50. public double LineThickness
  51. {
  52. get => StrokeThickness;
  53. set
  54. {
  55. var num = Convert.ToInt32(value);
  56. if (num < 1)
  57. num = 1;
  58. if (num > 100)
  59. num = 100;
  60. StrokeThickness = num;
  61. InvokePropertyChanged();
  62. }
  63. }
  64. public double DataFactor
  65. {
  66. get => _dataFactor;
  67. set
  68. {
  69. if (Math.Abs(_dataFactor - value) <= 0.001)
  70. return;
  71. _dataFactor = value;
  72. GetDataSeries().Factor = _dataFactor;
  73. InvokePropertyChanged();
  74. UpdateChartSeriesValue();
  75. }
  76. }
  77. public double DataOffset
  78. {
  79. get => _dataOffset;
  80. set
  81. {
  82. if (Math.Abs(_dataOffset - value) <= 0.001)
  83. return;
  84. _dataOffset = value;
  85. GetDataSeries().Offset = _dataOffset;
  86. InvokePropertyChanged();
  87. UpdateChartSeriesValue();
  88. }
  89. }
  90. public TreeNode BackendParameterNode { get; set; }
  91. #endregion
  92. #region Methods
  93. /// <summary>
  94. /// 获取XyDataSeries类型的DataSeries对象
  95. /// </summary>
  96. /// <returns></returns>
  97. public FastLineDataSeries GetDataSeries()
  98. {
  99. return DataSeries as FastLineDataSeries;
  100. }
  101. /// <summary>
  102. /// /
  103. /// </summary>
  104. public void UpdateChartSeriesValue()
  105. {
  106. using (DataSeries.SuspendUpdates())
  107. {
  108. var ds = GetDataSeries();
  109. for (var i = 0; i < ds.Count; i++)
  110. {
  111. var y = (ds.Metadata[i] as ParameterNodePoint)?.Value;
  112. if (y == null)
  113. continue;
  114. ds.Update(i, (double)y * _dataFactor + DataOffset);
  115. }
  116. //var dataSeries = DataSeries as XyDataSeries<DateTime, double>;
  117. //for (var index = 0; index < dataSeries.Count; ++index)
  118. // dataSeries.Update(index, _queueRawData.ElementAt(index).Item2 * _dataFactor + _dataOffset);
  119. }
  120. }
  121. public void ClearData()
  122. {
  123. DataSeries.Clear();
  124. }
  125. private void InvokePropertyChanged([CallerMemberName] string propertyName = "")
  126. {
  127. if (string.IsNullOrEmpty(propertyName))
  128. return;
  129. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  130. }
  131. public override string ToString()
  132. {
  133. return DataName;
  134. }
  135. #endregion
  136. }
  137. }