示例#1
0
        public static void ChartResultConvert(bool xOldIsTime, bool xNewIsTime, bool isOffset, TrailResult oldTr, TrailResult newTr, TrailResult ReferenceTrailResult, float[] t)
        {
            DateTime time0 = DateTime.MinValue;

            if (!float.IsNaN(t[0]))
            {
                time0 = TrackUtil.GetDateTimeFromChartResult(xOldIsTime, isOffset, oldTr, ReferenceTrailResult, t[0]);
            }
            DateTime time1 = DateTime.MinValue;

            if (!float.IsNaN(t[1]))
            {
                time1 = TrackUtil.GetDateTimeFromChartResult(xOldIsTime, isOffset, oldTr, ReferenceTrailResult, t[1]);
            }

            if (TrackUtil.AnyOverlap(time0, time1, newTr.StartTime, newTr.EndTime))
            {
                t[0] = TrackUtil.GetChartResultFromDateTime(xNewIsTime, isOffset, newTr, ReferenceTrailResult, time0);
                t[1] = TrackUtil.GetChartResultFromDateTime(xNewIsTime, isOffset, newTr, ReferenceTrailResult, time1);
            }
            else
            {
                t[0] = float.NaN;
                t[1] = float.NaN;
            }
        }
示例#2
0
        public static DateTime GetDateTimeFromChartResult(bool xIsTime, bool isOffset, TrailResult tr, TrailResult ReferenceTrailResult, float t)
        {
            DateTime dateTime;
            float    xOffset = tr.GetXOffset(xIsTime, ReferenceTrailResult);

            if (!xIsTime)
            {
                xOffset = (float)TrackUtil.DistanceConvertFrom(xOffset, ReferenceTrailResult);
            }
            t -= xOffset;
            if (isOffset)
            {
                float nextElapsed;
                t -= GetChartResultsResyncOffset(xIsTime, tr, ReferenceTrailResult, t, out nextElapsed);
            }
            if (xIsTime)
            {
                dateTime = tr.GetDateTimeFromTimeResult(t);
            }
            else
            {
                dateTime = tr.GetDateTimeFromDistResult(TrackUtil.DistanceConvertTo(t, ReferenceTrailResult));
            }
            return(dateTime);
        }
示例#3
0
 private void InsertValue(DateTime atime, ITimeDataSeries <T> track, ITimeDataSeries <T> source)
 {
     if (atime >= this.startTime && atime <= this.endTime &&
         !ZoneFiveSoftware.Common.Data.Algorithm.DateTimeRangeSeries.IsPaused(atime, this.pauses))
     {
         TrackUtil.InsertValue <T>(atime, track, source);
     }
 }
示例#4
0
        public static float ChartResultConvert(bool xOldIsTime, bool xNewIsTime, bool isOffset, TrailResult newTr, TrailResult ReferenceTrailResult, float t)
        {
            if (float.IsNaN(t))
            {
                return(t);
            }
            DateTime time = TrackUtil.GetDateTimeFromChartResult(xOldIsTime, isOffset, newTr, ReferenceTrailResult, t);
            float    res  = TrackUtil.GetChartResultFromDateTime(xNewIsTime, isOffset, newTr, ReferenceTrailResult, time);

            return(res);
        }
示例#5
0
 public static void ChartResultConvert(bool xOldIsTime, bool xNewIsTime, bool isOffset, TrailResult tr, TrailResult ReferenceTrailResult, float[] t)
 {
     if (TrackUtil.AnyRangeOverlap(xOldIsTime, isOffset, tr, ReferenceTrailResult, t))
     {
         t[0] = ChartResultConvert(xOldIsTime, xNewIsTime, isOffset, tr, ReferenceTrailResult, t[0]);
         t[1] = ChartResultConvert(xOldIsTime, xNewIsTime, isOffset, tr, ReferenceTrailResult, t[1]);
     }
     else
     {
         t[0] = float.NaN;
         t[1] = float.NaN;
     }
 }
示例#6
0
        private static float GetDistChartResultFromDistResult(bool isOffset, TrailResult tr, TrailResult ReferenceTrailResult, double t1)
        {
            //distance is for result, then to display units
            float x1 = (float)t1;

            if (isOffset)
            {
                float nextElapsed;
                x1 += GetChartResultsResyncOffset(false, tr, ReferenceTrailResult, x1, out nextElapsed);
            }
            x1 += tr.GetXOffset(false, ReferenceTrailResult);
            x1  = (float)TrackUtil.DistanceConvertFrom(x1, ReferenceTrailResult);
            return(x1);
        }
示例#7
0
        public static void InsertValue <T>(DateTime atime, ITimeDataSeries <T> track, ITimeDataSeries <T> source)
        {
            //Interpolation is down to seconds
            //TBD: Inefficient, source.IndexOf often fails
#if ST_3_1_5314_BUG
            //http://www.zonefivesoftware.com/sporttracks/forums/viewtopic.php?p=84638#p84638
            //System.Exception: FindPosOnOrBefore: Didn't find element properly.
            try
            {
#endif
            ITimeValueEntry <T> interpolatedP = source.GetInterpolatedValue(atime);
            if (interpolatedP != null)
            {
                int index = source.IndexOf(interpolatedP);
                T   val   = interpolatedP.Value;
                if (index >= 0)
                {
                    val = TrackUtil.getValFromDateTimeIndex(source, atime, index);
                }
                else
                {
                }
                try
                {
#if !NO_ST_INSERT_START_TIME
                    //ST bug: not inserted in order if ms differs for start
                    if (Math.Abs((atime - track.StartTime).TotalSeconds) < 1)
                    {
                        track.RemoveAt(0);
                    }
#endif
                    track.Add(atime, val);
                    //T val2 = track.GetInterpolatedValue(atime).Value;
                }
                catch { }
            }
#if ST_3_1_5314_BUG
        }

        catch (Exception e)
        {
        }
#endif
        }
示例#8
0
        /// <summary>
        /// Insert values at borders: Start, stop, pauses, trailpoints
        /// </summary>
        /// <param name="track"></param>
        /// <param name="source"></param>
        public void insertValues(ITimeDataSeries <T> track, ITimeDataSeries <T> source)
        {
            //Insert points around pauses and points
            //This is needed to get the track match the cut-up activity
            //(otherwise for instance start point need to be added)

            IList <DateTime> dates = new List <DateTime>();

            //start/end should be included from points, but prepare for changes...
            InsertValue(startTime, track, source);
            InsertValue(endTime, track, source);
            dates.Add(startTime);
            dates.Add(endTime);

            foreach (IValueRange <DateTime> p in pauses)
            {
                if (p.Lower > startTime)
                {
                    InsertValue(p.Lower.AddSeconds(-1), track, source);
                    dates.Add(p.Lower.AddSeconds(-1));
                }
                if (p.Upper < endTime)
                {
                    InsertValue(p.Upper.AddSeconds(1), track, source);
                    dates.Add(p.Upper.AddSeconds(1));
                }
            }

            if (this.points != null)
            {
                foreach (TrailResultPoint t in points)
                {
                    DateTime dateTime = t.Time;
                    if (dateTime > startTime && dateTime < endTime)
                    {
                        //Adding an extra point will change averages etc
                        //InsertValue(dateTime.AddSeconds(-1), track, source);
                        InsertValue(dateTime, track, source);
                        dates.Add(dateTime);
                    }
                }
            }
            //((List<DateTime>)dates).Sort();
            //kolla avrundning av elapsed både då starttime.ms och entry.ms
            //int j = 0;
            //double elapsedDate = (dates[j] - source.StartTime).TotalSeconds;
            //for (int i = 0; i < source.Count - 1; i++)
            //{
            //    uint elapsedSrc = source[i].ElapsedSeconds;
            //    while (j < dates.Count && (dates[j] < source.StartTime ||
            //        elapsedDate < elapsedSrc))
            //    {
            //        j++;
            //        if (j < dates.Count)
            //        {
            //            elapsedDate = (dates[j] - source.StartTime).TotalSeconds;
            //        }
            //    }
            //    if (j >= dates.Count || elapsedDate > source.TotalElapsedSeconds)
            //    {
            //        //No more dates
            //        break;
            //    }
            //    if (elapsedDate >= elapsedSrc)
            //    {
            //
            //    }
            //}
            //ST bug: track could be out of order (due to insert at least)
            TrackUtil.ResortTrack(track);
        }
示例#9
0
 /****************************************************/
 public static bool AnyRangeOverlap(bool isTime, bool isOffset, TrailResult tr, TrailResult ReferenceTrailResult, float[] t)
 {
     float[] t2 = GetChartResultFromDateTime(isTime, isOffset, tr, ReferenceTrailResult, new ValueRange <DateTime>(tr.StartTime, tr.EndTime));
     return(TrackUtil.AnyRangeOverlap(t, t2[0], t2[1]));
 }