2011-08-17 29 views
6

Sto sviluppando una GUI in C# .Net in WPF.In realtà è un'applicazione per la comunicazione seriale con il dispositivo incorporato, voglio mostrare un grafico a linee con i dati frequentemente ricevuti.E anche io dovrei fornire un'opzione per salvare quei grafici e dare un'opzione per stamparlo. Come posso disegnare questo dinamicamente con il supporto di librerie o software gratuiti?Grafico a linee dinamiche in C# Applicazione WPF

risposta

9

Io uso Dynamic Data Display per tutte le mie esigenze di creazione di grafici WPF. Supporta il salvataggio dei grafici, è molto veloce, fornisce zoom e panoramica senza interruzioni. Spazio dei nomi: xmlns: d3 = "http://research.microsoft.com/DynamicDataDisplay/1.0"

XAML:

<d3:ChartPlotter Name="plotter" Background="White"> 
    <d3:ChartPlotter.Resources> 
     <conv:Date2AxisConverter x:Key="Date2AxisConverter"/> 
    </d3:ChartPlotter.Resources> 
    <d3:ChartPlotter.HorizontalAxis> 
     <d3:HorizontalDateTimeAxis Name="dateAxis"/> 
    </d3:ChartPlotter.HorizontalAxis> 
    <d3:Header Content="{Binding PlotHeader}"/> 
    <d3:VerticalAxisTitle Content="Value"/> 
    <d3:HorizontalAxisTitle Content="Date"/> 
</d3:ChartPlotter> 

C# Codice: convertitore utilizzato

public class Date2AxisConverter : IValueConverter 
{ 
    #region IValueConverter Members 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value is DateTime && targetType == typeof(double)) 
     { 
      return ((DateTime)value).Ticks/10000000000.0; 
      // See constructor of class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis 
      // File: DynamicDataDisplay.Charts.Axes.DateTime.DateTimeAxis.cs 

      // alternatively, see the internal class Microsoft.Research.DynamicDataDisplay.Charts.DateTimeToDoubleConversion 

     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // try Microsoft.Research.DynamicDataDisplay.Charts.DateTimeAxis.DoubleToDate 
     throw new NotSupportedException(); 
    } 

    #endregion 
} 

C# Codice: Clearing Graph e Creating line graph, Here my StockasticProcessPoint è una struttura con un campo "DateTime t" e un campo "Double value".

using Microsoft.Research.DynamicDataDisplay; 
using System.Collections.ObjectModel; 
using Microsoft.Research.DynamicDataDisplay.DataSources; 

public void ClearLines() 
{ 
    var lgc = new Collection<IPlotterElement>(); 
    foreach (var x in plotter.Children) 
    { 
     if (x is LineGraph || x is ElementMarkerPointsGraph) 
      lgc.Add(x); 
    } 

    foreach (var x in lgc) 
    { 
     plotter.Children.Remove(x); 
    } 
} 

internal void SendToGraph() { 

    IPointDataSource _eds = null; 
    LineGraph line; 

    ClearLines(); 

    EnumerableDataSource<StochasticProcessPoint> _edsSPP; 
    _edsSPP = new EnumerableDataSource<StochasticProcessPoint>(myListOfStochasticProcessPoints); 
    _edsSPP.SetXMapping(p => dateAxis.ConvertToDouble(p.t)); 
    _edsSPP.SetYMapping(p => p.value); 
    _eds = _edsSPP; 

    line = new LineGraph(_eds); 
    line.LinePen = new Pen(Brushes.Black, 2); 
    line.Description = new PenDescription(Description); 
    plotter.Children.Add(line); 
    plotter.FitToView(); 
} 

Con questo, si dovrebbe essere in grado di tracciare un grafico in WPF. Aggiungere dati live quando ritorna dalla porta seriale non dovrebbe essere un problema. Puoi anche guardare gli esempi di binding da DynamicDataDisplay.

+0

Come posso aggiungere i file di libreria al mio progetto. Ho scaricato se devo aggiungere tutti i file .dll – Mukthi

+0

Lo fai in Visual Studio, nella cartella Riferimenti del progetto -> Aggiungi riferimento. Aggiungi DynamicDataDisplay.dll al tuo progetto. Come qualsiasi altro riferimento esterno. – NetSquirrel

+2

Check out: https://github.com/apoydence/DynamicDataDisplay e https://www.nuget.org/packages/DynamicDataDisplay/ per il codice sorgente e l'installazione di nuget. – Andrew

Problemi correlati