private void ZoomAxisValueArea(NumberAxisValueArea result) { long minMuilt, maxMuilt; if (ChartHelper.DoubleHasValue(this._minValue)) { if (ChartHelper.DoubleHasValue(this._maxValue)) { //不调整 } else { maxMuilt = ChartHelper.CalDoubleToIntegerMuilt(result.Max); result.Max = ChartHelper.DoubleToCeilingInteger(result.Max, maxMuilt); } } else { minMuilt = ChartHelper.CalDoubleToIntegerMuilt(result.Min); if (ChartHelper.DoubleHasValue(this._maxValue)) { result.Min = ChartHelper.DoubleToFloorInteger(result.Min, minMuilt); } else { maxMuilt = ChartHelper.CalDoubleToIntegerMuilt(result.Max); long muilt = minMuilt > maxMuilt ? minMuilt : maxMuilt; result.Min = ChartHelper.DoubleToFloorInteger(result.Min, muilt); result.Max = ChartHelper.DoubleToCeilingInteger(result.Max, muilt); } } }
private double CalculateLabelStep(double valueArea, double axisSize) { double labelStep = this._labelStep; if (double.IsNaN(labelStep)) { int labelCount = (int)(axisSize / ChartConstant.DEFAULT_STEP_SIZE); if (axisSize % ChartConstant.DEFAULT_STEP_SIZE > ChartConstant.ZERO_D) { labelCount += 1; } labelStep = valueArea / labelCount; if (valueArea % labelCount > base._PRE) { //不能整除,则调整 var muilt = ChartHelper.CalDoubleToIntegerMuilt(labelStep); var step2 = ChartHelper.DoubleToCeilingInteger(labelStep, muilt); while (step2 >= valueArea && muilt >= 1) { muilt = muilt / 10; step2 = ChartHelper.DoubleToCeilingInteger(labelStep, muilt); } if (!double.IsNaN(step2)) { labelStep = step2; } labelStep = (double)((long)(labelStep * 100)) / 100; } } return(labelStep); }
private double AdjustIntervalTimeLength(TimeSpan intervalTimeLength) { double stepMilliseconds; const int YEAR_DAYS = 365; const int MONTH_DAYS = 365; const int ZERO = 0; const double HALF = 0.5d; const double DAY_MILLISECONDES = 86400000d; const double HOUR_MILLISECONDES = 3600000d; const double MINUT_MILLISECONDES = 60000d; const double SECOND_MILLISECONDES = 1000d; const double OFFSET = 1.0d; if (intervalTimeLength.Days >= YEAR_DAYS) { double totalYears = intervalTimeLength.TotalDays / YEAR_DAYS; long intergerYears = (long)totalYears; if (totalYears - intergerYears > +HALF) { stepMilliseconds = Math.Ceiling(intervalTimeLength.TotalDays / YEAR_DAYS) * YEAR_DAYS * DAY_MILLISECONDES; } else { stepMilliseconds = (HALF + (double)intergerYears) * YEAR_DAYS * DAY_MILLISECONDES; } } else if (intervalTimeLength.Days >= MONTH_DAYS) { double totalMonths = intervalTimeLength.TotalDays / MONTH_DAYS; long intergerMonths = (long)totalMonths; if (totalMonths - intergerMonths >= HALF) { stepMilliseconds = Math.Ceiling(intervalTimeLength.TotalDays / MONTH_DAYS) * MONTH_DAYS * DAY_MILLISECONDES; } else { stepMilliseconds = (HALF + (double)intergerMonths) * MONTH_DAYS * DAY_MILLISECONDES; } } else if (intervalTimeLength.Days > ZERO) { if (intervalTimeLength.TotalDays - intervalTimeLength.Days >= HALF) { stepMilliseconds = Math.Ceiling(intervalTimeLength.TotalDays) * DAY_MILLISECONDES; } else { stepMilliseconds = HALF * DAY_MILLISECONDES + intervalTimeLength.Days * DAY_MILLISECONDES; } } else if (intervalTimeLength.Hours > ZERO) { double hours = intervalTimeLength.TotalMilliseconds / HOUR_MILLISECONDES; double hoursMilliseconds = hours - intervalTimeLength.Hours; if (hoursMilliseconds == ZERO) { stepMilliseconds = intervalTimeLength.TotalMilliseconds; } else if (hoursMilliseconds >= HALF) { stepMilliseconds = Math.Ceiling(hours) * HOUR_MILLISECONDES; } else { stepMilliseconds = ((double)intervalTimeLength.Hours + HALF) * HOUR_MILLISECONDES; } } else if (intervalTimeLength.Minutes > ZERO) { const double HALF_MINUT_MILLISECONDES = 30000d; double minutesSurplusMilliseconds = intervalTimeLength.TotalMilliseconds - intervalTimeLength.Minutes * MINUT_MILLISECONDES; if (minutesSurplusMilliseconds == ZERO) { stepMilliseconds = intervalTimeLength.TotalMilliseconds; } else if (minutesSurplusMilliseconds >= HALF_MINUT_MILLISECONDES) { stepMilliseconds = ((double)intervalTimeLength.Minutes + OFFSET) * MINUT_MILLISECONDES; } else { stepMilliseconds = ((double)intervalTimeLength.Minutes + HALF) * MINUT_MILLISECONDES; } } else if (intervalTimeLength.Seconds > ZERO) { const double HALF_SECONDE_MILLISECONDES = 500d; double secondsSurplusMilliseconds = intervalTimeLength.TotalMilliseconds - intervalTimeLength.Seconds * SECOND_MILLISECONDES; if (secondsSurplusMilliseconds == ZERO) { stepMilliseconds = intervalTimeLength.TotalMilliseconds; } else if (secondsSurplusMilliseconds >= HALF_SECONDE_MILLISECONDES) { stepMilliseconds = ((double)intervalTimeLength.Minutes + OFFSET) * MINUT_MILLISECONDES; } else { stepMilliseconds = ((double)intervalTimeLength.Minutes + HALF) * MINUT_MILLISECONDES; } } else { stepMilliseconds = Math.Ceiling(intervalTimeLength.TotalMilliseconds); var muilt = ChartHelper.CalDoubleToIntegerMuilt(stepMilliseconds); var step2 = ChartHelper.DoubleToCeilingInteger(stepMilliseconds, muilt); while (step2 >= intervalTimeLength.TotalMilliseconds && muilt >= 1) { muilt = muilt / 10; step2 = ChartHelper.DoubleToCeilingInteger(stepMilliseconds, muilt); } if (!double.IsNaN(step2)) { stepMilliseconds = step2; } } return(stepMilliseconds); }