Back to Devexpress

AutomaticDateTimeScaleOptions.AutomaticMeasureUnitsCalculator Property

wpf-devexpress-dot-xpf-dot-charts-dot-automaticdatetimescaleoptions-23ce2931.md

latest4.7 KB
Original Source

AutomaticDateTimeScaleOptions.AutomaticMeasureUnitsCalculator Property

Gets or sets the automatic date-time measure unit calculator.

Namespace : DevExpress.Xpf.Charts

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

NuGet Package : DevExpress.Wpf.Charts

Declaration

csharp
[Browsable(false)]
public IDateTimeMeasureUnitsCalculator AutomaticMeasureUnitsCalculator { get; set; }
vb
<Browsable(False)>
Public Property AutomaticMeasureUnitsCalculator As IDateTimeMeasureUnitsCalculator

Property Value

TypeDescription
IDateTimeMeasureUnitsCalculator

An object of the class implementing the IDateTimeMeasureUnitsCalculator interface.

|

Example

The automatic date-time scale options provide the capability to use a custom measurement unit calculator to determine the current measurement unit if the predefined one does not fit your requirements. Create a class that implements the IDateTimeMeasureUnitsCalculator interface and assign it to the AutomaticDateTimeScaleOptions.AutomaticMeasureUnitsCalculator property to use a custom measurement units calculation algorithm:

csharp
public class CustomAutomaticDateTimeMeasureUnitsCalculator : IDateTimeMeasureUnitsCalculator {
    public DateTimeMeasureUnit CalculateMeasureUnit(
        IEnumerable<Series> series, 
        double axisLength, int pixelsPerUnit, 
        double visualMin, double visualMax, 
        double wholeMin, double wholeMax
    ) {
        double rawMeasureUnit = ((visualMax - visualMin) * pixelsPerUnit / axisLength);
        return PickDateTimeMeasureUnit(rawMeasureUnit);
    }

    static int[] unitMultipliers = {
        1, 1000, 60, 60, 24, 7, 4, 3, 4
    };
    static DateTimeMeasureUnit PickDateTimeMeasureUnit(double milliseconds) {
        double valueStop = 1.0;
        for (int i = 0; i < unitMultipliers.Length; i++) {
            valueStop *= unitMultipliers[i];
            if (milliseconds <= valueStop)
                return (DateTimeMeasureUnit)i;
        }
        return DateTimeMeasureUnit.Year;
    }
}
vb
Public Class CustomAutomaticDateTimeMeasureUnitsCalculator
    Implements IDateTimeMeasureUnitsCalculator

    Public Function CalculateMeasureUnit(
            series As IEnumerable(Of Series),
            axisLength As Double, pixelsPerUnit As Integer,
            visualMin As Double, visualMax As Double,
            wholeMin As Double, wholeMax As Double
    ) As DateTimeMeasureUnit Implements IDateTimeMeasureUnitsCalculator.CalculateMeasureUnit
        Dim rawMeasureUnit As Double = ((visualMax - visualMin) _
                    * (pixelsPerUnit / axisLength))
        Return PickDateTimeMeasureUnit(rawMeasureUnit)
    End Function

    Private Shared unitMultipliers As Integer() = {1, 1000, 60, 60, 24, 7, 4, 3, 4}
    Private Shared Function PickDateTimeMeasureUnit(milliseconds As Double) As Double
        Dim valueStop As Double = 1.0
        For i As Integer = 0 To unitMultipliers.Length
            valueStop *= unitMultipliers(i)
            If (milliseconds <= valueStop) Then Return CType(i, DateTimeMeasureUnit)
        Next
        Return DateTimeMeasureUnit.Year
    End Function
End Class
xaml
<dxc:ChartControl>
    <dxc:XYDiagram2D>
        <dxc:XYDiagram2D.AxisX>
            <dxc:AxisX2D>
                <dxc:AxisX2D.DateTimeScaleOptions>
                    <dxc:AutomaticDateTimeScaleOptions>
                        <dxc:AutomaticDateTimeScaleOptions.AutomaticMeasureUnitsCalculator>
                            <view:CustomAutomaticDateTimeMeasureUnitsCalculator/>
                        </dxc:AutomaticDateTimeScaleOptions.AutomaticMeasureUnitsCalculator>
                    </dxc:AutomaticDateTimeScaleOptions>
                </dxc:AxisX2D.DateTimeScaleOptions>
            </dxc:AxisX2D>
        </dxc:XYDiagram2D.AxisX>
    </dxc:XYDiagram2D>
</dxc:ChartControl>

See Also

AutomaticDateTimeScaleOptions Class

AutomaticDateTimeScaleOptions Members

DevExpress.Xpf.Charts Namespace