2015-02-19 2 views
0

Могу ли я нарисовать сломанную линейную диаграмму, используя динамический дисплей данных?draw Разбитый линейный график с использованием динамического отображения данных?

В моем приложении мне нужно нарисовать в реальном времени voltage/time graph.My requirement есть, я должен нарисовать линии графика, только если напряжение не 0.

Как я могу это достичь?

Я попытался следующие:

public partial class MainWindow : Window 
    { 
     public ObservableDataSource<Point> source1 = null; 
     public ObservableDataSource<Point> source2 = null; 
     public ObservableDataSource<Point> source3 = null; 
     public ObservableDataSource<Point> source4 = null; 
     public ObservableDataSource<Point> source5 = null; 
     public MainWindow() 
     { 
      InitializeComponent(); 
      this.Loaded += MainWindow_Loaded; 
     } 

     private void MainWindow_Loaded(object sender, RoutedEventArgs e) 
     {   
      source1 = new ObservableDataSource<Point>(); 
      source2 = new ObservableDataSource<Point>(); 
      source3 = new ObservableDataSource<Point>(); 
      source4 = new ObservableDataSource<Point>(); 
      source5 = new ObservableDataSource<Point>(); 
      source1.SetXYMapping(p => p); 

      testchart.AddLineGraph(source1, 1, "Data row"); 
      testchart.AddLineGraph(source2, Color.FromRgb(7, 10, 67), 1, "Data row"); 
      testchart.AddLineGraph(source3, Color.FromRgb(6, 5, 5), 1, "Data row"); 
      testchart.AddLineGraph(source4, Color.FromRgb(10, 6, 7), 1, "Data row"); 
      testchart.AddLineGraph(source5, Color.FromRgb(20, 8, 9), 1, "Data row"); 
      testchart.Viewport.FitToView(); 
      Thread simThread = new Thread(new ThreadStart(Simulation)); 
      simThread.IsBackground = true; 
      simThread.Start(); 
     } 

     private void Simulation() 
     { 
      int i = 0; 
      while (true) 
      { 
       Point p1 = new Point(i * 10, i*10); 
       if (i % 2 == 0)//here i tried to break first line in the graph 
       { 
        source1.AppendAsync(Dispatcher, p1); 
       } 
       else 
       { 
        Point p5 = new Point(Math.Sign(i*10),i*10); 
        source5.AppendAsync(Dispatcher, p5); 
       } 

       Point p2 = new Point(i *50, i*10); 
       source2.AppendAsync(Dispatcher, p2); 
       Point p3 = new Point(i * 1000, i); 
       source3.AppendAsync(Dispatcher, p3); 
       Point p4 = new Point(i * 1500, i); 
       source4.AppendAsync(Dispatcher, p4); 
       i++; 
       Thread.Sleep(1000); 

      } 
     } 
+0

Это тестовое приложение. Здесь я просто добавляю точки, используя метод моделирования. – Indu

+0

это ChartPlotter – Indu

+0

Да, от Codeplex – Indu

ответ

0

Что вам нужно, это класс emmiting новых ObservableDataSources (или адаптеры, которые вы можете остановить emmiting новых точек) всякий раз, когда последний DataPoint имеет Y из> 0. Всякий раз, когда напряжение 0, вам нужно заставить пользовательский интерфейс прослушивать этот источник данных. Вы передаете событие и добавьте еще один Linegraph в диаграмму, когда напряжение> 0, и вы там.