- tick_period = order_decimal * ScaleUnits[unit++];
- } while(tick_period < min_period && unit < countof(ScaleUnits));
+ const double min_period = _view.scale() * min_width;
+
+ const int order = (int)floorf(log10f(min_period));
+ const double order_decimal = pow(10, order);
+
+ unsigned int unit = 0;
+
+ do
+ {
+ tick_period = order_decimal * ScaleUnits[unit++];
+ } while (tick_period < min_period && unit < countof(ScaleUnits));
+
+ prefix = (order - FirstSIPrefixPower) / 3;
+ assert(prefix < countof(SIPrefixes));