private void PlotViewModel_KeyDown(object sender, OxyKeyEventArgs e) { if (e.Key == OxyKey.R && e.ModifierKeys == OxyModifierKeys.None) { AdjustYAxisZoom(); PlotViewModel.InvalidatePlot(false); } }
public void UpdateChart() { if (Thread.CurrentThread != Dispatcher.Thread) { Dispatcher.BeginInvoke(new Action(UpdateChart)); return; } //--- remove all series PlotViewModel.Series.Clear(); while (Drawer.Candles.MoveNext()) { this.Candles.Items.Add(new ChartBar(Drawer.Candles.Current)); this.Volumes.Items.Add(new ChartBarVol(Drawer.Candles.Current) { }); } //create exes CreateAxes(); //--- if (Candles.Items.Count > 0) { PlotViewModel.Series.Add(Candles); PlotViewModel.Series.Add(Volumes); //draw volumes //PlotViewModel.Series.Add(Volumes); } //----------------- HORIZONTAL LINES -------------- var levels = new List <double>(Drawer.HorizontalLines); levels.Sort(); for (int l = 1; l < levels.Count; l++) { if (levels[l] - levels[l - 1] < 0.00001) { levels[l] = levels[l - 1] + 0.00001; } } foreach (var level in levels) { //if (level < range.High + range.Length && level > range.Low - range.Length) { LineSeriesEx line = new LineSeriesEx(false) { MarkerStrokeThickness = 1, LineStyle = LineStyle.Solid, Color = OxyColor.FromArgb(200, 1, 1, 200), StrokeThickness = 0.5f, }; line.Points.Add(new DataPoint(0, level)); line.Points.Add(new DataPoint(PlotViewModel.Axes[0].Maximum - 1, level)); PlotViewModel.Series.Add(line); } } //----------------- lines ---------------------- this.Lines.Clear(); foreach (var line in Drawer.Lines.Concat(Drawer.VerticalLines)) { var ingnoreZoom = Drawer.VerticalLines.Contains(line); LineSeriesEx lineserie = new LineSeriesEx(ingnoreZoom) { MarkerStrokeThickness = 2, LineStyle = LineStyle.Solid, Color = OxyColor.FromArgb(line.Color.A, line.Color.R, line.Color.G, line.Color.B), StrokeThickness = 3f, YAxisKey = line.AxisId ?? this.Candles_Yaxis.Key }; lineserie.Points.AddRange( line.Points.Select(dot => new DataPoint(dot.X.ToAxisDouble(), dot.Y))); PlotViewModel.Series.Add(lineserie); this.Lines.Add(lineserie); } //-------plot points --------------- var pointsSerie = new OxyPlot.Series.ScatterSeries() { MarkerSize = 15, MarkerType = MarkerType.Circle }; for (int p = 0; p < Drawer.Points.Count; p++) { pointsSerie.Points.Add( new ScatterPoint(Drawer.Points[p].Time.ToAxisDouble(), Drawer.Points[p].Value, 5)); } PlotViewModel.Series.Add(pointsSerie); //---------- ADJUST X to show 100 candles PlotViewModel.Axes[0].Minimum = Drawer.InitialView.start.ToAxisDouble(); PlotViewModel.Axes[0].Maximum = Drawer.InitialView.end.ToAxisDouble(); PlotViewModel.Axes[0].Reset(); //--------- ADJUST Y AdjustYAxisZoom(); PlotViewModel.InvalidatePlot(true); return; }