/// <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); } }
/// <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; }