private void AddNewValuesToLineSeries(Sensor sensor, DynamicLineChartViewModel chartViewModel) { chartViewModel.ChartValuesDictionary[sensor.SensorName].Add(new MeasureModel() { Value = double.Parse(sensor.Value), DateTime = DateTime.Now }); }
private void AddNewLineSeriesIfNotExists(Sensor sensor, DynamicLineChartViewModel chartViewModel) { this.InvokeInUIThread((Action)(() => { if (!chartViewModel.SeriesCollection.Any(x => x.Title == sensor.SensorName)) { LineSeries lineSeries = new LineSeries(); lineSeries.Title = sensor.SensorName; lineSeries.PointGeometry = null; chartViewModel.ChartValuesDictionary.Add(sensor.SensorName, new ChartValues <MeasureModel>()); lineSeries.Values = chartViewModel.ChartValuesDictionary[sensor.SensorName]; chartViewModel.SeriesCollection.Add(lineSeries); } })); }
private DynamicLineChartViewModel GetOrCreateNewLineChartIfNotExists( WpfObservableRangeCollection <DynamicLineChartViewModel> dynamicChartViewModel, Sensor sensor, string hardwareName) { DynamicLineChartViewModel chartViewModel = dynamicChartViewModel .Where(x => x.ChartName == sensor.SensorType && x.HardwareName == hardwareName) .SingleOrDefault(); if (chartViewModel == null) { chartViewModel = new DynamicLineChartViewModel(sensor.SensorType, hardwareName); this.InvokeInUIThread((Action)(() => dynamicChartViewModel.Add(chartViewModel))); } return(chartViewModel); }
private void AddNewValuesToDynamicViewLabels(DynamicLineChartViewModel chartViewModel, Sensor sensor) { DynamicDataLabel dynamiDataLabel = chartViewModel.DynamicData .Where(ddl => ddl.Name == sensor.SensorName) .SingleOrDefault(); if (dynamiDataLabel == null) { this.BeginInvokeInUIThread((Action)(() => chartViewModel.DynamicData.Add(new DynamicDataLabel() { Name = sensor.SensorName, Value = sensor.Value, Unit = sensor.Unit }))); } else { this.BeginInvokeInUIThread((Action)(() => dynamiDataLabel.Value = sensor.Value)); } }
private void AdjustChartValuesRange(Sensor sensor, DynamicLineChartViewModel chartViewModel) { switch (sensor.SensorType) { case "Load": chartViewModel.AxisYMax = 100; chartViewModel.AxisYMin = 0; chartViewModel.AxisXTitle = "Time [mm:ss]"; chartViewModel.AxisYTitle = "Load [%]"; break; case "Clock": chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ? double.Parse(sensor.MaxValue) + 200 : chartViewModel.AxisYMax; //200 is a bufor for better readibility chartViewModel.AxisYMin = 0; chartViewModel.AxisXTitle = "Time [mm:ss]"; chartViewModel.AxisYTitle = "Frequency [Hz]"; break; case "Power": chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ? double.Parse(sensor.MaxValue) + 2 : chartViewModel.AxisYMax; //2 is a bufor for better readibility chartViewModel.AxisYMin = 0; chartViewModel.AxisXTitle = "Time [mm:ss]"; chartViewModel.AxisYTitle = "Power [W]"; break; case "Temperature": chartViewModel.AxisYMax = double.Parse(sensor.MaxValue) > chartViewModel.AxisYMax ? double.Parse(sensor.MaxValue) + 8 : chartViewModel.AxisYMax; //8 is a bufor for better readibility chartViewModel.AxisYMin = 0; chartViewModel.AxisXTitle = "Time [mm:ss]"; chartViewModel.AxisYTitle = "Temperature [°C]"; break; default: break; } }
public void DrawDynamicLineChartForHardwareSensor( WpfObservableRangeCollection <DynamicLineChartViewModel> dynamicChartViewModel, Sensor sensor, string hardwareName) { // In case of "No Value" returned from SystemManagamentLib do not generate charts if (sensor.Value == "No value") { return; } DynamicLineChartViewModel chartViewModel = this.GetOrCreateNewLineChartIfNotExists(dynamicChartViewModel, sensor, hardwareName); this.AddNewValuesToDynamicViewLabels(chartViewModel, sensor); this.AddNewLineSeriesIfNotExists(sensor, chartViewModel); this.AdjustChartValuesRange(sensor, chartViewModel); this.AddNewValuesToLineSeries(sensor, chartViewModel); chartViewModel.SetAxisLimits(DateTime.Now); }