Back to Devexpress

ITimeSpanMeasureUnitsCalculator Interface

wpf-devexpress-dot-xpf-dot-charts-0a15bb3c.md

latest5.9 KB
Original Source

ITimeSpanMeasureUnitsCalculator Interface

Interface that should be implemented by any class that can be used as a time-span measurement unit calculator.

Namespace : DevExpress.Xpf.Charts

Assembly : DevExpress.Xpf.Charts.v25.2.dll

NuGet Package : DevExpress.Wpf.Charts

Declaration

csharp
public interface ITimeSpanMeasureUnitsCalculator
vb
Public Interface ITimeSpanMeasureUnitsCalculator

The following members return ITimeSpanMeasureUnitsCalculator objects:

Remarks

The ITimeSpanMeasureUnitsCalculator interface provides the CalculateMeasureUnit method that allows computing a time-span measurement unit for the x-axis.

Example

The automatic time-span scale options allow you to create a measurement unit calculator to determine the current measurement unit if the predefined one does not fit your requirements. Create a class that implements the ITimeSpanMeasureUnitsCalculator interface and assign it to the AutomaticMeasureUnitsCalculator property to use a custom measurement units calculation algorithm:

xaml
<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TimeSpanExample"
        xmlns:dxc="http://schemas.devexpress.com/winfx/2008/xaml/charts" 
        x:Class="TimeSpanExample.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:ChartViewModel/>
    </Window.DataContext>
    <Grid>
        <dxc:ChartControl>
            <dxc:XYDiagram2D>
                <dxc:XYDiagram2D.AxisX>
                    <dxc:AxisX2D>
                        <dxc:AxisX2D.TimeSpanScaleOptions>
                            <dxc:AutomaticTimeSpanScaleOptions AggregateFunction="Average">
                                <dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
                                    <local:CustomAutomaticTimeSpanMeasureUnitsCalculator/>
                                </dxc:AutomaticTimeSpanScaleOptions.AutomaticMeasureUnitsCalculator>
                            </dxc:AutomaticTimeSpanScaleOptions>
                        </dxc:AxisX2D.TimeSpanScaleOptions>
                    </dxc:AxisX2D>
                </dxc:XYDiagram2D.AxisX>
            </dxc:XYDiagram2D>
        </dxc:ChartControl>
    </Grid>
</Window>
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using DevExpress.Xpf.Charts;

namespace TimeSpanExample {
    public class CustomAutomaticTimeSpanMeasureUnitsCalculator : ITimeSpanMeasureUnitsCalculator {
        public TimeSpanMeasureUnit CalculateMeasureUnit(IEnumerable<Series> series, 
            double axisLength, int pixelsPerUnit, 
            double visualMin, double visualMax, 
            double wholeMin, double wholeMax) {
            double rawMeasureUnit = (visualMax - visualMin) / axisLength * pixelsPerUnit;
            return PickTimeSpanMeasureUnit(rawMeasureUnit);
        }
        static int[] unitMultipliers = { 1, 1000, 60, 60, 24 };
        static TimeSpanMeasureUnit PickTimeSpanMeasureUnit(double milliseconds) {
            double valueStop = 1.0;
            for (int i = 0; i < unitMultipliers.Length; i++) {
                valueStop *= unitMultipliers[i];
                if (milliseconds <= valueStop)
                    return (TimeSpanMeasureUnit)i;
            }
            return TimeSpanMeasureUnit.Hour;
        }
    }
}
vb
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Windows
Imports DevExpress.Xpf.Charts

Namespace TimeSpanExample
    Public Class CustomAutomaticTimeSpanMeasureUnitsCalculator
        Implements ITimeSpanMeasureUnitsCalculator

        Public Function CalculateMeasureUnit(ByVal series As IEnumerable(Of Series), ByVal axisLength As Double, ByVal pixelsPerUnit As Integer, ByVal visualMin As Double, ByVal visualMax As Double, ByVal wholeMin As Double, ByVal wholeMax As Double) As TimeSpanMeasureUnit Implements ITimeSpanMeasureUnitsCalculator.CalculateMeasureUnit
            Dim rawMeasureUnit As Double = (visualMax - visualMin) / axisLength * pixelsPerUnit
            Return PickTimeSpanMeasureUnit(rawMeasureUnit)
        End Function
        Private Shared unitMultipliers() As Integer = { 1, 1000, 60, 60, 24 }
        Private Shared Function PickTimeSpanMeasureUnit(ByVal milliseconds As Double) As TimeSpanMeasureUnit
            Dim valueStop As Double = 1.0
            For i As Integer = 0 To unitMultipliers.Length - 1
                valueStop *= unitMultipliers(i)
                If milliseconds <= valueStop Then
                    Return CType(i, TimeSpanMeasureUnit)
                End If
            Next i
            Return TimeSpanMeasureUnit.Hour
        End Function
    End Class
End Namespace

See Also

ITimeSpanMeasureUnitsCalculator Members

DevExpress.Xpf.Charts Namespace