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