GithubHelp home page GithubHelp logo

oysteinbruin / realtimegraphx Goto Github PK

View Code? Open in Web Editor NEW

This project forked from royben/realtimegraphx

1.0 1.0 0.0 348 KB

High performance real-time graph for WPF & UWP

License: MIT License

C# 100.00%

realtimegraphx's Introduction

RealTimeGraphX

RealTimeGraphX is a data type agnostic, high performance plotting library for WPF, UWP and soon, Xamarin Forms.

The library core components are built using .Net Standard which makes it portable to a range of platforms.

Typical use case is, scientific measurements applications which requires real-time display with large data volumes.

RealTimeGraphX has a number of built-in data point types (axis) like Double, Float, Int32 and TimeSpan, but you can easily implement any kind of custom data type by inheriting and implementing the mathematical logic for that type.

Features:

  • High performance
  • Thread safe
  • MVVM support
  • Any type of data point
  • Zooming and panning



The solution contains demo projects for WPF and UWP.

Single Series

alt tag

Multi Series

alt tag

Gradient Fill

alt tag




The follwing diagrams demonstrates the connections between graph components and how they are implemented on each platform.

Model

alt tag

The graph controller binds to a renderer and a surface. Data points are pushed to the controller, the controller uses the renderer in orderer to prepare and arrange the points for visual display. Finally, the controller directs the renderer to draw the points on the specific surface.

WPF Stack Implementation

alt tag

Each platform (WPF/UWP etc.) should implement it's own IGraphDataSeries and IGraphSurface.




Example

Model.cs
   public class ViewModel
   {
       //Graph controller with timespan as X axis and double as Y.
       public WpfGraphController<TimeSpanDataPoint, DoubleDataPoint> Controller { get; set; }

       public ViewModel()
       {
           Controller = new WpfGraphController<TimeSpanDataPoint, DoubleDataPoint>();
           Controller.Renderer = new ScrollingLineRenderer<WpfGraphDataSeries>();
           Controller.DataSeriesCollection.Add(new WpfGraphDataSeries()
           {
               Name = "Series Name",
               Stroke = Colors.Red,
           });

           //We will attach the surface using WPF binding...
           //Controller.Surface = null;
       }

       private void Start()
       {
           Stopwatch watch = new Stopwatch();
           watch.Start();

           Thread thread = new Thread(() => 
           {
               while (true)
               {
                   //Get the current elapsed time and mouse position.
                   var y = System.Windows.Forms.Cursor.Position.Y;
                   var x = watch.Elapsed;

                   //Push the x,y to the controller.
                   Controller.PushData(x, y);

                   Thread.Sleep(30);
               }
           });
           thread.Start();
       }
   }
View.xaml
  <Grid>
      <Grid.RowDefinitions>
          <RowDefinition Height="1*"/>
          <RowDefinition Height="35"/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
          <ColumnDefinition Width="70"/>
          <ColumnDefinition Width="1*"/>
      </Grid.ColumnDefinitions>

      <Grid Grid.Column="1">
          <realTimeGraphX:WpfGraphGridLines Controller="{Binding Controller}" />
          <realTimeGraphX:WpfGraphSurface Controller="{Binding Controller}" />
      </Grid>

      <realTimeGraphX:WpfGraphAxisControl Orientation="Vertical" Controller="{Binding Controller}" StringFormat="0.0" />
      <realTimeGraphX:WpfGraphAxisControl Orientation="Horizontal" Controller="{Binding Controller}" Grid.Column="1" Grid.Row="1" StringFormat="hh\:mm\:ss"/>
  </Grid>

realtimegraphx's People

Contributors

royben avatar

Stargazers

 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.