private void contructSingleLineSeries(Style _series_style) { OxyPlot.Wpf.LineSeries _series = null; _series = new OxyPlot.Wpf.LineSeries(); LineSeries _seriesModel = (LineSeries)_series.CreateModel(); _seriesModel.Points.AddRange(LineSeries); OxyPlotView.Series.Add(_series); // Style DependencyProperty has to be defined always after adding the series to the view if (_series_style != null) { _series.SetCurrentValue(StyleProperty, _series_style); } AbsoluteMinimumX = LineSeries.Min(element => element.X); AbsoluteMaximumX = LineSeries.Max(element => element.X); AbsoluteMinimumY = LineSeries.Min(element => element.Y); AbsoluteMaximumY = LineSeries.Max(element => element.Y); }
private void contructMultipleLineSeries(Style _series_style) { constructMultiSetAxes(); bool initExtremes = true; // For each line series in the ViewModel foreach (MultifunctionalChartLineData line in ChartData.LinesData) { OxyPlot.Wpf.LineSeries _wpf_series = new OxyPlot.Wpf.LineSeries(); LineSeries _series = (LineSeries)_wpf_series.CreateModel(); foreach (ChartPoint cp in line.LinePoints) { if (cp.X == null || cp.Y == null) { _series.Points.Add(DataPoint.Undefined); } else { DataPoint dp = new DataPoint(); for (int k = 0; k < OxyPlotView.Axes.Count; k++) { Axis _axisModel = (Axis)Activator.CreateInstance((OxyPlotView.Axes[k].CreateModel()).GetType()); System.Reflection.MethodInfo mi = _axisModel.GetType().GetMethod("ToDouble"); switch (MultifunctionalChartData.AxesPositions[k]) { case AxisPosition.Left: dp.Y = Convert.ToDouble(mi == null ? cp.Y : mi.Invoke(_axisModel, new object[] { cp.Y })); break; case AxisPosition.Bottom: dp.X = Convert.ToDouble(mi == null ? cp.X : mi.Invoke(_axisModel, new object[] { cp.X })); break; default: DllEntryPoint.LogMessage(Xvue.MSOT.Services.Log.EnumLogType.Info, "Warning", $"{Name}.contructMultipleLineSeries: Axis # {(k + 1)}: Unhandled AxisPosition: {Convert.ToString(MultifunctionalChartData.AxesPositions[k])}"); break; } } _series.Points.Add(dp); if (initExtremes) { if (ChartData.MinimumX == null) { AbsoluteMinimumX = dp.X; } if (ChartData.MaximumX == null) { AbsoluteMaximumX = dp.X; } if (ChartData.MinimumY == null) { AbsoluteMinimumY = dp.Y; } if (ChartData.MaximumY == null) { AbsoluteMaximumY = dp.Y; } /* Currently not implemented * AbsoluteMinimumZ = dp.Z; * AbsoluteMaximumZ = dp.Z; */ initExtremes = false; } else { if (dp.X < AbsoluteMinimumX) { AbsoluteMinimumX = dp.X; } if (dp.X > AbsoluteMaximumX) { AbsoluteMaximumX = dp.X; } if (dp.Y < AbsoluteMinimumY) { AbsoluteMinimumY = dp.Y; } if (dp.Y > AbsoluteMaximumY) { AbsoluteMaximumY = dp.Y; } /* Currently not implemented * if (_Z < AbsoluteMinimumZ) { AbsoluteMinimumY = _Z; } * if (_Z > AbsoluteMaximumZ) { AbsoluteMaximumY = _Z; } */ } } } OxyPlotView.Series.Add(_wpf_series); // Style DependencyProperty has to be defined always after adding the series to the view if (_series_style != null) { _wpf_series.SetCurrentValue(StyleProperty, _series_style); } _wpf_series.SetCurrentValue(OxyPlot.Wpf.LineSeries.MarkerStrokeProperty, line.Color); _wpf_series.SetCurrentValue(OxyPlot.Wpf.Series.ColorProperty, line.Color); _wpf_series.SetCurrentValue(OxyPlot.Wpf.LineSeries.MarkerFillProperty, line.Color); _wpf_series.SetCurrentValue(OxyPlot.Wpf.Series.TitleProperty, line.Name); } }