/// <summary>
        /// 获取指定刻度类型的最小值
        /// </summary>
        /// <param name="tickType">刻度类型</param>
        /// <returns>指定刻度类型的最小值</returns>
        private double GetSpecifiedMinimumSizeByTickType(TimelineTickType tickType)
        {
            switch (tickType)
            {
            case TimelineTickType.Big:
                return(BigTickMinimumSize);

            case TimelineTickType.Medium:
                return(MediumTickMinimumSize);

            case TimelineTickType.Small:
                return(SmallTickMinimumSize);
            }

            return(double.NaN);
        }
        /// <summary>
        /// 根据刻度类型重新计算时间线刻度频度
        /// </summary>
        /// <param name="tickType">刻度类型</param>
        /// <returns>刻度频度</returns>
        private TimelineTickFrequency ReCalculateTimelineTickFrequency(TimelineTickType tickType)
        {
            // make separate passes for each tick size
            var tickPixelExtentInSeconds = GetSpecifiedMinimumSizeByTickType(tickType) * (1 / PixelsPerSecond);

            // find a tick frequency that fits with this size
            foreach (var validFrequency in _validFrequencies)
            {
                if (validFrequency.Extent.TotalSeconds >= tickPixelExtentInSeconds)
                {
                    return(validFrequency);
                }
            }

            // couldn't find a tick frequency, could switch to N number of days here
            return(null);
        }
        /// <summary>
        /// 根据刻度频度和刻度类型计算刻度集合
        /// </summary>
        /// <param name="freq">刻度频度</param>
        /// <param name="tickType">刻度类型</param>
        private void CalculateTicks(TimelineTickFrequency freq, TimelineTickType tickType)
        {
            // if there is a viewport defined, then just generate
            double   spanExtentInSeconds; // 跨度范围 秒数
            DateTime spanStart;           // 跨度范围 开始时间

            if (double.IsInfinity(ViewportExtent))
            {
                spanExtentInSeconds = (End - Start).TotalSeconds;
                spanStart           = Start;
            }
            else
            {
                spanStart           = Start.AddSeconds(ViewportOffset * (1 / PixelsPerSecond));
                spanExtentInSeconds = ViewportExtent * (1 / PixelsPerSecond);
            }

            double tickCount = spanExtentInSeconds / freq.Extent.TotalSeconds;

            // calculate the first tick
            var tick =
                DateTime.MinValue.AddSeconds(
                    Math.Ceiling((spanStart - DateTime.MinValue).TotalSeconds / freq.Extent.TotalSeconds) * freq.Extent.TotalSeconds
                    );

            for (int i = 0; i < tickCount; i++)
            {
                AddTick(
                    new TimelineTick()
                {
                    Time     = tick,
                    TickType = tickType
                }
                    );

                tick = tick.AddSeconds(freq.Extent.TotalSeconds);
            }
        }
Example #4
0
        /// <summary>
        /// 获取指定刻度类型的最小值
        /// </summary>
        /// <param name="tickType">刻度类型</param>
        /// <returns>指定刻度类型的最小值</returns>
        private double GetSpecifiedMinimumSizeByTickType(TimelineTickType tickType)
        {
            switch (tickType)
            {
                case TimelineTickType.Big:
                    return BigTickMinimumSize;
                case TimelineTickType.Medium:
                    return MediumTickMinimumSize;
                case TimelineTickType.Small:
                    return SmallTickMinimumSize;
            }

            return double.NaN;
        }
Example #5
0
        /// <summary>
        /// 根据刻度类型重新计算时间线刻度频度
        /// </summary>
        /// <param name="tickType">刻度类型</param>
        /// <returns>刻度频度</returns>
        private TimelineTickFrequency ReCalculateTimelineTickFrequency(TimelineTickType tickType)
        {
            // make separate passes for each tick size
            var tickPixelExtentInSeconds = GetSpecifiedMinimumSizeByTickType(tickType) * (1 / PixelsPerSecond);

            // find a tick frequency that fits with this size
            foreach (var validFrequency in _validFrequencies)
            {
                if (validFrequency.Extent.TotalSeconds >= tickPixelExtentInSeconds)
                {
                    return validFrequency;
                }
            }

            // couldn't find a tick frequency, could switch to N number of days here
            return null;
        }
Example #6
0
        /// <summary>
        /// 根据刻度频度和刻度类型计算刻度集合
        /// </summary>
        /// <param name="freq">刻度频度</param>
        /// <param name="tickType">刻度类型</param>
        private void CalculateTicks(TimelineTickFrequency freq, TimelineTickType tickType)
        {
            // if there is a viewport defined, then just generate
            double spanExtentInSeconds; // 跨度范围 秒数
            DateTime spanStart; // 跨度范围 开始时间

            if (double.IsInfinity(ViewportExtent))
            {
                spanExtentInSeconds = (End - Start).TotalSeconds;
                spanStart = Start;
            }
            else
            {
                spanStart = Start.AddSeconds(ViewportOffset * (1 / PixelsPerSecond));
                spanExtentInSeconds = ViewportExtent * (1 / PixelsPerSecond);
            }

            double tickCount = spanExtentInSeconds / freq.Extent.TotalSeconds;

            // calculate the first tick
            var tick =
              DateTime.MinValue.AddSeconds(
                Math.Ceiling((spanStart - DateTime.MinValue).TotalSeconds / freq.Extent.TotalSeconds) * freq.Extent.TotalSeconds
              );

            for (int i = 0; i < tickCount; i++)
            {
                AddTick(
                    new TimelineTick()
                    {
                        Time = tick,
                        TickType = tickType
                    }
                  );

                tick = tick.AddSeconds(freq.Extent.TotalSeconds);
            }

        }