public TcxActivity(XmlNode activityNode, XmlNamespaceManager nsMgr, TcxDistanceOption distanceOption, double calcLapDist) { _laps = new List <TcxLap>(); double lastLapEndDistance = 0; foreach (XmlNode lapNode in activityNode.SelectNodes("./tcx:Lap", nsMgr)) { var lap = new TcxLap(lapNode, nsMgr, distanceOption, calcLapDist, lastLapEndDistance); lastLapEndDistance = lap.LastLapEndDistance; _laps.Add(lap); } }
public TcxTrack(XmlNode trackNode, XmlNamespaceManager nsMgr, TcxDistanceOption distanceOption, double calcLapDist, double lastLapEndDistance) { _trackpoints = new List <TcxCalculatedLap>(); bool newLap = true; DateTime startTime = DateTime.MinValue; DateTime latestTime = DateTime.MinValue; double currDist = 0; double lastCalcLapDistEnd = 0; int lapCount = 1; foreach (XmlNode trackpointNode in trackNode.SelectNodes("./tcx:Trackpoint", nsMgr)) { var trackpoint = new TcxTrackpoint(trackpointNode); EndDistance = trackpoint.DistanceMeters; if (newLap) { startTime = trackpoint.Time; currDist = 0; newLap = false; } else { latestTime = trackpoint.Time; currDist = distanceOption == TcxDistanceOption.Miles ? CalculationHelpers.MetersToMiles((trackpoint.DistanceMeters - lastLapEndDistance) - lastCalcLapDistEnd) : CalculationHelpers.MetersToKilometers((trackpoint.DistanceMeters - lastLapEndDistance) - lastCalcLapDistEnd); if (currDist >= calcLapDist) { lastCalcLapDistEnd = trackpoint.DistanceMeters; if (lastLapEndDistance > 0) { lastLapEndDistance = 0; } TimeSpan lapTime = latestTime - startTime; _trackpoints.Add(new TcxCalculatedLap(string.Format("Lap {0}", lapCount++), currDist, lapTime)); newLap = true; } } } if (!newLap && currDist > 0) { // we might have part of a calculated lap TimeSpan lapTime = latestTime - startTime; _trackpoints.Add(new TcxCalculatedLap(string.Format("Lap {0}", lapCount++), currDist, lapTime)); } }
public TcxModel(string filename, TcxDistanceOption distanceOption, double calcLapDist) { XmlDocument doc = new XmlDocument(); doc.Load(filename); XmlNamespaceManager nsMgr = new XmlNamespaceManager(doc.NameTable); nsMgr.AddNamespace("tcx", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"); _activities = new List <TcxActivity>(); // For right now, only single activity files are allowed foreach (XmlNode activityNode in doc.SelectNodes("//tcx:TrainingCenterDatabase/tcx:Activities/tcx:Activity", nsMgr)) { _activities.Add(new TcxActivity(activityNode, nsMgr, distanceOption, calcLapDist)); } }
public TcxLap(XmlNode lapNode, XmlNamespaceManager nsMgr, TcxDistanceOption distanceOption, double calcLapDist, double lastLapEndDistance) { _distOption = distanceOption; _tracks = new List <TcxTrack>(); LastLapEndDistance = lastLapEndDistance; foreach (XmlNode trackNode in lapNode.SelectNodes("./tcx:Track", nsMgr)) { var track = new TcxTrack(trackNode, nsMgr, distanceOption, calcLapDist, LastLapEndDistance); LastLapEndDistance = track.EndDistance; _tracks.Add(track); } StartTime = DateTime.ParseExact(lapNode.Attributes["StartTime"].Value, "yyyy-MM-ddTHH:mm:ss.FFFZ", CultureInfo.InvariantCulture); TotalSeconds = double.Parse(lapNode["TotalTimeSeconds"].InnerText); DistanceMeters = double.Parse(lapNode["DistanceMeters"].InnerText); MaxSpeed = double.Parse(lapNode["MaximumSpeed"].InnerText); CaloriesBurned = double.Parse(lapNode["Calories"].InnerText); }