Environment

Product Version Product Author
2020.2.512 RadChartView for WinForms Desislava Yordanova

Description

This tutorial demonstrates how to simulate an EKG signal in RadChartView.

Solution

RadChartView supports empty values in the series. In general, 'empty values' means missing Y value for a particular X value. This is appropriate for achieving blank parts within the chart. Using a timer, we will update the blank part in the line moving it forward.

Simulate an EKG signal

``````
Random rnd = new Random();
FastLineSeries series = new FastLineSeries();
Dictionary<string, double?> categoryValuePairs = new Dictionary<string, double?>();
{
InitializeComponent();

for (int i = 0; i < 100; i++)
{
CategoricalDataPoint point = new CategoricalDataPoint(rnd.Next(50, 100), i);
}
LinearAxis verticalAxis = series.VerticalAxis as LinearAxis;
verticalAxis.Minimum = 50;
verticalAxis.Maximum = 100;
CategoricalAxis categoricalAxis = series.HorizontalAxis as CategoricalAxis;
categoricalAxis.LabelFitMode = AxisLabelFitMode.Rotate;
categoricalAxis.MajorTickInterval = 5;
this.timer1.Interval = 100;
}

private void radButton1_Click(object sender, EventArgs e)
{
if (!this.timer1.Enabled)
{
this.timer1.Start();
}
else
{
this.timer1.Stop();
}
}

int cnt = 0;

private void timer1_Tick(object sender, EventArgs e)
{
cnt++;
if (cnt >= series.DataPoints.Count - 5)
{
cnt = 0;
}
CategoricalDataPoint point = null;
for (int i = 0; i < series.DataPoints.Count; i++)
{
point = (CategoricalDataPoint)series.DataPoints[i];
if (i >= cnt && i < cnt + 5)
{
point.Value = null;
}
else
{
point.Value = categoryValuePairs[point.Category.ToString()];
}
}
}

``````
``````
Private rnd As Random = New Random()
Private series As FastLineSeries = New FastLineSeries()
Private categoryValuePairs As Dictionary(Of String, Double?) = New Dictionary(Of String, Double?)()

Public Sub New()
InitializeComponent()

For i As Integer = 0 To 100 - 1
Dim point As CategoricalDataPoint = New CategoricalDataPoint(rnd.[Next](50, 100), i)
Next

Dim verticalAxis As LinearAxis = TryCast(series.VerticalAxis, LinearAxis)
verticalAxis.Minimum = 50
verticalAxis.Maximum = 100
Dim categoricalAxis As CategoricalAxis = TryCast(series.HorizontalAxis, CategoricalAxis)
categoricalAxis.LabelFitMode = AxisLabelFitMode.Rotate
categoricalAxis.MajorTickInterval = 5
Me.Timer1.Interval = 100
End Sub

If Not Me.Timer1.Enabled Then
Me.Timer1.Start()
Else
Me.Timer1.[Stop]()
End If
End Sub

Private cnt As Integer = 0

Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
cnt += 1

If cnt >= series.DataPoints.Count - 5 Then
cnt = 0
End If

Dim point As CategoricalDataPoint = Nothing

For i As Integer = 0 To series.DataPoints.Count - 1
point = CType(series.DataPoints(i), CategoricalDataPoint)

If i >= cnt AndAlso i < cnt + 5 Then
point.Value = Nothing
Else
point.Value = categoryValuePairs(point.Category.ToString())
End If
Next
End Sub

``````