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