ProcessDataChartDataItem.cs 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.ComponentModel;
  5. using System.Runtime.Serialization;
  6. using Abt.Controls.SciChart.Model.DataSeries;
  7. using Abt.Controls.SciChart.Visuals.RenderableSeries;
  8. using Aitex.Core.UI.MVVM;
  9. using Aitex.Core.UI.View.Smart;
  10. namespace Aitex.Core.UI.ControlDataContext
  11. {
  12. [DataContract]
  13. [Serializable]
  14. public class HistoryDataItem
  15. {
  16. [DataMember]
  17. public DateTime dateTime
  18. {
  19. get;
  20. set;
  21. }
  22. [DataMember]
  23. public string dbName
  24. {
  25. get;
  26. set;
  27. }
  28. [DataMember]
  29. public double value
  30. {
  31. get;
  32. set;
  33. }
  34. }
  35. public class ProcessDataChartDataItem : INotifyPropertyChanged
  36. {
  37. public event PropertyChangedEventHandler PropertyChanged;
  38. public void InvokePropertyChanged(string propertyName)
  39. {
  40. if (PropertyChanged != null)
  41. {
  42. PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  43. }
  44. }
  45. public DelegateCommand<object> SeriesSelectAllCommand
  46. {
  47. get;
  48. private set;
  49. }
  50. public DelegateCommand<object> SeriesSelectNoneCommand
  51. {
  52. get;
  53. private set;
  54. }
  55. public DelegateCommand<object> SeriesSelectDefaultCommand
  56. {
  57. get;
  58. private set;
  59. }
  60. public ObservableCollection<IRenderableSeries> RenderableSeries
  61. {
  62. get;
  63. set;
  64. }
  65. public string ProcessInfo
  66. {
  67. get;
  68. set;
  69. }
  70. public int Count
  71. {
  72. get
  73. {
  74. return RenderableSeries.Count;
  75. }
  76. }
  77. private int _capacity = 10000;
  78. public ProcessDataChartDataItem(int capacity = 60*5)
  79. {
  80. SeriesSelectAllCommand = new DelegateCommand<object>(new Action<object>(OnSeriesSelectAll), null);
  81. SeriesSelectNoneCommand = new DelegateCommand<object>(new Action<object>(OnSeriesSelectNone), null);
  82. SeriesSelectDefaultCommand = new DelegateCommand<object>(new Action<object>(OnSeriesSelectDefault), null);
  83. RenderableSeries = new ObservableCollection<IRenderableSeries>();
  84. _capacity = capacity;
  85. }
  86. public void SetInfo(string info)
  87. {
  88. ProcessInfo = info;
  89. InvokePropertyChanged("ProcessInfo");
  90. }
  91. public void AppendData(Dictionary<string, object> data)
  92. {
  93. if (data == null)
  94. return;
  95. foreach (var item in RenderableSeries)
  96. {
  97. var series = item as SmartDataLine;
  98. if (series == null)
  99. continue;
  100. if (!data.ContainsKey(series.DbDataName))
  101. continue;
  102. var dataSeries = series.DataSeries as XyDataSeries<DateTime, float>;
  103. while (dataSeries.Count > _capacity)
  104. dataSeries.RemoveAt(0);
  105. dataSeries.Append(DateTime.Now, (float)(Convert.ToDouble(data[series.DbDataName])));
  106. }
  107. }
  108. public void UpdateCultureString(Dictionary<string, string> data)
  109. {
  110. if (data == null)
  111. return;
  112. foreach (var item in RenderableSeries)
  113. {
  114. var series = item as SmartDataLine;
  115. if (series == null)
  116. continue;
  117. if (!data.ContainsKey(series.DbDataName))
  118. continue;
  119. series.DisplayName = data[series.DbDataName];
  120. }
  121. }
  122. public void UpdateData(List<HistoryDataItem> data)
  123. {
  124. ClearData();
  125. if (data == null || data.Count == 0)
  126. return;
  127. foreach (HistoryDataItem dataItem in data)
  128. {
  129. foreach (var item in RenderableSeries)
  130. {
  131. var series = item as SmartDataLine;
  132. if (series == null)
  133. continue;
  134. var dataSeries = series.DataSeries as XyDataSeries<DateTime, float>;
  135. while (dataSeries.Count > _capacity)
  136. dataSeries.RemoveAt(0);
  137. if (series.DbDataName != dataItem.dbName)
  138. continue;
  139. dataSeries.Append(dataItem.dateTime, (float)(dataItem.value));
  140. }
  141. }
  142. }
  143. public void ClearData()
  144. {
  145. foreach (var item in RenderableSeries)
  146. {
  147. var series = item as SmartDataLine;
  148. if (series == null)
  149. continue;
  150. var dataSeries = series.DataSeries as XyDataSeries<DateTime, float>;
  151. dataSeries.Clear();
  152. }
  153. }
  154. /// <summary>
  155. /// 如果已经有了key,更新名字和做标注
  156. /// 如果不存在,创建新的
  157. /// </summary>
  158. /// <param name="items"></param>
  159. public void UpdateColumns(Dictionary<string, Tuple<string, string, bool>> dicItems)
  160. {
  161. List<IRenderableSeries> lstRemovedSeries = new List<IRenderableSeries>();
  162. foreach (var seriesItem in RenderableSeries)
  163. {
  164. var series = seriesItem as SmartDataLine;
  165. if (series == null)
  166. continue;
  167. if (!dicItems.ContainsKey(series.DbDataName))
  168. {
  169. lstRemovedSeries.Add(seriesItem);
  170. continue;
  171. }
  172. UpdateColumn(dicItems[series.DbDataName]);
  173. dicItems.Remove(series.DbDataName);
  174. }
  175. foreach (var newItem in dicItems)
  176. {
  177. RenderableSeries.Add(new SmartDataLine(newItem.Value.Item2, newItem.Value.Item3? System.Windows.Media.Colors.Blue : System.Windows.Media.Colors.Red,
  178. newItem.Value.Item1, true)
  179. {
  180. YAxisId = newItem.Value.Item3 ? "PressureYAxisId" : "GeneralYAxisId"
  181. });
  182. }
  183. foreach (var removeItem in lstRemovedSeries)
  184. {
  185. RenderableSeries.Remove(removeItem);
  186. }
  187. }
  188. public void UpdateColumn(Tuple<string, string, bool> columnInfo)
  189. {
  190. foreach (var item in RenderableSeries)
  191. {
  192. var series = item as SmartDataLine;
  193. if (series != null && series.DbDataName == columnInfo.Item1)
  194. {
  195. series.DisplayName = columnInfo.Item2;
  196. series.YAxisId = columnInfo.Item3 ? "PressureYAxisId" : "GeneralYAxisId";
  197. break;
  198. }
  199. }
  200. }
  201. public void UpdateColumn(string dbName, string displayName, bool isPressure)
  202. {
  203. foreach (var item in RenderableSeries)
  204. {
  205. var series = item as SmartDataLine;
  206. if (series != null && series.DbDataName == dbName)
  207. {
  208. series.DisplayName = displayName;
  209. break;
  210. }
  211. }
  212. }
  213. public void UpdateColumnDisplayName(string dbName, string displayName)
  214. {
  215. foreach (var item in RenderableSeries)
  216. {
  217. var series = item as SmartDataLine;
  218. if (series != null && series.DbDataName == dbName)
  219. {
  220. series.DisplayName = displayName;
  221. break;
  222. }
  223. }
  224. }
  225. public void RemoveColumn(string dbName)
  226. {
  227. foreach (var item in RenderableSeries)
  228. {
  229. var series = item as SmartDataLine;
  230. if (series != null && series.DbDataName == dbName)
  231. {
  232. RenderableSeries.Remove(series);
  233. break;
  234. }
  235. }
  236. }
  237. public void InitColumns(Dictionary<string, string> items)
  238. {
  239. ClearData();
  240. RenderableSeries.Clear();
  241. foreach (KeyValuePair<string, string> item in items)
  242. {
  243. RenderableSeries.Add(new SmartDataLine(item.Key, System.Windows.Media.Colors.Blue,
  244. item.Value, true)
  245. {
  246. YAxisId = item.Key.Contains("Pressure") ? "PressureYAxisId" : "GeneralYAxisId"
  247. });
  248. }
  249. }
  250. public void SetColor(string key, System.Windows.Media.Color color)
  251. {
  252. foreach (var item in RenderableSeries)
  253. {
  254. var series = item as SmartDataLine;
  255. if (series == null)
  256. continue;
  257. if (series.DisplayName == key)
  258. series.SeriesColor = color;
  259. }
  260. }
  261. public void OnSeriesSelectAll(object param)
  262. {
  263. foreach (var item in RenderableSeries)
  264. {
  265. var series = item as SmartDataLine;
  266. if (series == null)
  267. continue;
  268. series.IsVisible = true;
  269. }
  270. }
  271. public void OnSeriesSelectNone(object param)
  272. {
  273. foreach (var item in RenderableSeries)
  274. {
  275. var series = item as SmartDataLine;
  276. if (series == null)
  277. continue;
  278. series.IsVisible = false;
  279. }
  280. }
  281. public void OnSeriesSelectDefault(object param)
  282. {
  283. foreach (var item in RenderableSeries)
  284. {
  285. var series = item as SmartDataLine;
  286. if (series == null)
  287. continue;
  288. series.IsVisible = series.IsDefaultVisable;
  289. series.SeriesColor = series.DefaultSeriesColor;
  290. series.LineThickness = 1;
  291. }
  292. }
  293. }
  294. }