Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }