nice static method

NiceScale nice(
  1. num min,
  2. num max,
  3. int splitNumber, {
  4. num minInterval = 0,
  5. num? maxInterval,
  6. num? interval,
  7. bool forceSplitNumber = false,
  8. bool start0 = false,
  9. NiceType type = NiceType.n1,
})

Implementation

static NiceScale nice(num min,
    num max,
    int splitNumber, {
      num minInterval = 0,
      num? maxInterval,
      num? interval,
      bool forceSplitNumber = false,
      bool start0 = false,
      NiceType type = NiceType.n1,
    }) {
  if (interval != null) {
    int count = (max - min) ~/ interval;
    if ((max - min) % interval != 0) {
      count += 1;
    }
    return NiceScale(min, max, (max - min) / count, count);
  }

  if (type == NiceType.n1) {
    return _niceAxis(
      min,
      max,
      splitNumber,
      minInterval: minInterval,
      maxInterval: maxInterval,
      interval: null,
      forceSplitNumber: forceSplitNumber,
      start0: start0,
    );
  }

  //第二种算法
  int oldCount = splitNumber;
  num rawInterval = (max - min) / splitNumber;
  if (rawInterval < minInterval) {
    rawInterval = minInterval;
  }
  if (maxInterval != null) {
    if (rawInterval > maxInterval) {
      rawInterval = maxInterval;
    }
  }
  splitNumber = (max - min) ~/ rawInterval;
  if ((max - min) % rawInterval != 0) {
    splitNumber += 1;
  }

  int onlyInside = -1;

  _NiceNumber number2 = _NiceNumber.nice(min, max, splitNumber, onlyInside: onlyInside);
  NiceScale rangeValue = NiceScale(number2.minValue, number2.maxValue, number2.step, number2.tickCount);
  if (forceSplitNumber) {
    return rangeValue.copy(tickCount: oldCount);
  }
  return rangeValue;
}