Back to Devexpress

AutomaticNumericScaleOptions.AutomaticMeasureUnitsCalculator Property

wpf-devexpress-dot-xpf-dot-charts-dot-automaticnumericscaleoptions-abfbd883.md

latest4.4 KB
Original Source

AutomaticNumericScaleOptions.AutomaticMeasureUnitsCalculator Property

Gets or sets the automatic numeric measure unit calculator.

Namespace : DevExpress.Xpf.Charts

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

NuGet Package : DevExpress.Wpf.Charts

Declaration

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

Property Value

TypeDescription
INumericMeasureUnitsCalculator

An object of the class implementing the INumericMeasureUnitsCalculator interface.

|

Example

The automatic numeric 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. Design a class that implements the INumericMeasureUnitsCalculator interface and assign it to the AutomaticNumericScaleOptions.AutomaticMeasureUnitsCalculator property to use a custom measurement units calculation algorithm:

csharp
public class CustomAutomaticNumericMeasureUnitsCalculator : INumericMeasureUnitsCalculator {
    public double CalculateMeasureUnit(
        IEnumerable<Series> series, 
        double axisLength, int pixelsPerUnit, 
        double visualMin, double visualMax, 
        double wholeMin, double wholeMax
    ) {
        double rawMeasureUnit = (visualMax - visualMin) * pixelsPerUnit / axisLength;
        return Math.Pow(10, GetDigitCount((int)Math.Abs(rawMeasureUnit)));
    }

    private static readonly int[] valueStops = {
        9, 99, 999, 9999, 99999, 999999, 9999999,
        99999999, 999999999, Int32.MaxValue
    };
    private static int GetDigitCount(int value) {
        for (int i = 0; ; i++)
            if (value <= valueStops[i])
                return i + 1;
    }
}
vb
Class CustomAutomaticNumericMeasureUnitsCalculator
    Implements INumericMeasureUnitsCalculator
    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 Double Implements INumericMeasureUnitsCalculator.CalculateMeasureUnit
        Dim rawMeasureUnit = (visualMax - visualMin) * pixelsPerUnit / axisLength
        Return Math.Pow(10, GetDigitCount(CType(Math.Abs(rawMeasureUnit), Integer)))
    End Function

    Private Shared ReadOnly valueStops As Integer() = {
            9, 99, 999, 9999, 99999, 999999, 9999999,
            99999999, 999999999, Int32.MaxValue
    }
    Private Shared Function GetDigitCount(value As Integer) As Integer
        For i As Integer = 0 To valueStops.Length
            If (value <= valueStops(i)) Then Return i + 1
        Next
    End Function
End Class
xaml
<dxc:ChartControl>
    <dxc:XYDiagram2D>
        <dxc:XYDiagram2D.AxisX>
            <dxc:AxisX2D>
                <dxc:AxisX2D.NumericScaleOptions>
                    <dxc:AutomaticNumericScaleOptions>
                        <dxc:AutomaticNumericScaleOptions.AutomaticMeasureUnitsCalculator>
                            <view:CustomAutomaticNumericMeasureUnitsCalculator/>
                        </dxc:AutomaticNumericScaleOptions.AutomaticMeasureUnitsCalculator>
                    </dxc:AutomaticNumericScaleOptions>
                </dxc:AxisX2D.NumericScaleOptions>
            </dxc:AxisX2D>
        </dxc:XYDiagram2D.AxisX>
    </dxc:XYDiagram2D>
</dxc:ChartControl>

See Also

AutomaticNumericScaleOptions Class

AutomaticNumericScaleOptions Members

DevExpress.Xpf.Charts Namespace