Example #1
0
 void BtnExport_Click(object sender, System.EventArgs e)
 {
     if (MessageDialog.Show(string.Format(Properties.Resources.UI_Activity_EditTrail_Export, CommonResources.Text.ActionOk, CommonResources.Text.ActionCancel),
                            "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
     {
         DateTime  startTime = DateTime.UtcNow;
         IActivity activity;
         bool      hasGps = this.m_trailResult != null && this.m_trailResult.GPSRoute != null;
         if (hasGps)
         {
             activity = this.m_trailResult.CopyToActivity();
             activity.Laps.Clear();
         }
         else
         {
             activity          = Plugin.GetApplication().Logbook.Activities.Add(startTime);
             activity.GPSRoute = new TrackUtil.GPSRoute();
             TrackUtil.setCapacity(activity.GPSRoute, ((IList <EditTrailRow>) this.EList.RowData).Count);
         }
         activity.Name   = TrailName.Text;
         activity.Notes += "Radius: " + UnitUtil.Elevation.ToString(m_TrailToEdit.Radius, "u");
         const int            lapLength = 60; //A constant time between points
         IList <EditTrailRow> list      = (IList <EditTrailRow>) this.EList.RowData;
         for (int i = 0; i < list.Count - 1; i++)
         {
             if (hasGps)
             {
                 activity.Laps.Add(m_trailResult.TrailPointDateTime[i],
                                   TimeSpan.FromSeconds(m_trailResult.TrailPointTime0(m_trailResult)[i + 1] -
                                                        this.m_trailResult.TrailPointTime0(m_trailResult)[i]));
             }
             else
             {
                 activity.GPSRoute.Add(startTime.AddSeconds(i * lapLength),
                                       new GPSPoint(list[i].TrailGPS.LatitudeDegrees, list[i].TrailGPS.LongitudeDegrees, 0));
                 activity.Laps.Add(startTime.AddSeconds(i * lapLength), TimeSpan.FromSeconds(lapLength));
             }
             activity.Laps[i].Rest  = !list[i].TrailGPS.Required;
             activity.Laps[i].Notes = list[i].TrailGPS.Name;
         }
         if (!hasGps)
         {
             int i = list.Count - 1;
             activity.GPSRoute.Add(startTime.AddSeconds(i * lapLength), new GPSPoint(list[i].TrailGPS.LatitudeDegrees, list[i].TrailGPS.LongitudeDegrees, 0));
         }
     }
 }
Example #2
0
        /*************************************************/
        //From result elapsed, get chart result
        //TBD: incorrect to result

        public static float GetChartResultsResyncOffset(bool xIsTime, TrailResult tr, TrailResult ReferenceTrailResult, float elapsed, out float nextElapsed)
        {
            float offset = 0;

            nextElapsed = float.MaxValue;
            if (Data.Settings.SyncChartAtTrailPoints && tr.Trail.TrailType == Trail.CalcType.TrailPoints)
            {
                IList <float> trElapsed;
                //IList<float> trOffset;
                IList <float> refElapsed;
                if (xIsTime)
                {
                    trElapsed = tr.TrailPointTime0(ReferenceTrailResult);
                    //trOffset = tr.TrailPointTimeOffset0(ReferenceTrailResult);
                    refElapsed = ReferenceTrailResult.TrailPointTime0(ReferenceTrailResult);
                }
                else
                {
                    trElapsed = tr.TrailPointDist0(ReferenceTrailResult);
                    //trOffset = tr.TrailPointDistOffset0(ReferenceTrailResult);
                    refElapsed = ReferenceTrailResult.TrailPointDist0(ReferenceTrailResult);
                }

                //If the result/reference has no laps, no offset
                if (trElapsed.Count <= 2 || refElapsed.Count <= 2)
                {
                    return(offset);
                }
                int currOffsetIndex = 0;
                while (currOffsetIndex < trElapsed.Count && currOffsetIndex < refElapsed.Count &&
                       (float.IsNaN(trElapsed[currOffsetIndex]) || elapsed > trElapsed[currOffsetIndex]))
                {
                    if (!float.IsNaN(trElapsed[currOffsetIndex]) && !float.IsNaN(refElapsed[currOffsetIndex]))
                    {
                        offset = refElapsed[currOffsetIndex] - trElapsed[currOffsetIndex];
                        //if (currOffsetIndex < trOffset.Count && !float.IsNaN(trOffset[currOffsetIndex]))
                        //{
                        //    offset += trOffset[currOffsetIndex];
                        //}
                    }
                    currOffsetIndex++;
                }
                //currOffsetIndex is at least one step over already
                while (currOffsetIndex < trElapsed.Count && currOffsetIndex < refElapsed.Count &&
                       (float.IsNaN(trElapsed[currOffsetIndex]) || float.IsNaN(refElapsed[currOffsetIndex]) ||
                        elapsed < trElapsed[currOffsetIndex]))
                {
                    if (currOffsetIndex >= trElapsed.Count - 1 || currOffsetIndex >= refElapsed.Count - 1)
                    {
                        //Last point - no limitation
                        nextElapsed = float.MaxValue;
                        break;
                    }
                    else if (!float.IsNaN(trElapsed[currOffsetIndex]) && !float.IsNaN(refElapsed[currOffsetIndex]))
                    {
                        nextElapsed = refElapsed[currOffsetIndex];
                    }
                    currOffsetIndex++;
                }
            }
            return(offset);
        }