wpf-devexpress-dot-xpf-dot-charts-dot-automaticnumericscaleoptions-abfbd883.md
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
[Browsable(false)]
public INumericMeasureUnitsCalculator AutomaticMeasureUnitsCalculator { get; set; }
<Browsable(False)>
Public Property AutomaticMeasureUnitsCalculator As INumericMeasureUnitsCalculator
| Type | Description |
|---|---|
| INumericMeasureUnitsCalculator |
An object of the class implementing the INumericMeasureUnitsCalculator interface.
|
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:
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;
}
}
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
<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