public virtual void Visit(RunActivity activity) { }
// updates the graphs and laps and stats (called on initial load in of a file) public void updateGraphsAndDataEntire() { StatsDisplayName = null; ActivityLoaded = true; double max = 0; double min = 0; DateTime start = ActiveActivity.Laps.First().Trackpoints.First().Time; //update watts graph if (ActiveType == Sport.Biking) { List <DataPoint> wattsDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), (y.Extensions as BikeExtension).Watts))).ToList()); max = wattsDataPoints.Max(x => x.X) + 1; min = wattsDataPoints.Min(x => x.X); if (wattsDataPoints[0].Y >= 0) { WattsData = new GraphData(wattsDataPoints, max, min); } else { WattsData = null; } } // update hr graph List <DataPoint> hrDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), y.HeartRate)).ToList())); max = hrDataPoints.Max(x => x.X) + 1; min = hrDataPoints.Min(x => x.X); if (hrDataPoints[0].Y >= 0) { HeartRateData = new GraphData(hrDataPoints, max, min); } else { HeartRateData = null; } //update speed graph List <DataPoint> speedDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), y.Extensions.Speed)).ToList())); max = speedDataPoints.Max(x => x.X) + 1; min = speedDataPoints.Min(x => x.X); if (speedDataPoints[0].Y >= 0) { SpeedData = new GraphData(speedDataPoints, max, min); } else { SpeedData = null; } if (ActiveType == Sport.Biking) { // update cadence graph List <DataPoint> cadenceDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), y.Cadence)).ToList())); max = cadenceDataPoints.Max(x => x.X) + 1; min = cadenceDataPoints.Min(x => x.X); if (cadenceDataPoints[0].Y >= 0) { CadenceData = new GraphData(cadenceDataPoints, max, min); } else { CadenceData = null; } } else if (ActiveType == Sport.Running) { // update cadence graph List <DataPoint> cadenceDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), (y.Extensions as RunExtension).Cadence)).ToList())); max = cadenceDataPoints.Max(x => x.X) + 1; min = cadenceDataPoints.Min(x => x.X); if (cadenceDataPoints[0].Y >= 0) { CadenceData = new GraphData(cadenceDataPoints, max, min); } else { CadenceData = null; } } // update elevation graph List <DataPoint> altitudeDataPoints = new List <DataPoint>(ActiveActivity.Laps.SelectMany(x => x.Trackpoints.Select(y => new DataPoint(TimeSpanAxis.ToDouble(y.Time - start), y.Altitude)).ToList())); max = altitudeDataPoints.Max(x => x.X) + 1; min = altitudeDataPoints.Min(x => x.X); if (altitudeDataPoints[0].Y != -1) { ElevationData = new GraphData(altitudeDataPoints, max, min); } else { ElevationData = null; } //update hr stats if (ActiveActivity != null) { double avg = ActiveActivity.AvgHeartRate; double maxim = ActiveActivity.MaxHeartRate; if (avg < 0) { HeartRateInfo = "No HR data provided :("; } else { HeartRateInfo = "Average: " + Math.Round(avg, 0) + " bpm\nMax: " + Math.Round(maxim, 0) + " bpm"; } } //update cadence stats if (ActiveActivity != null) { if (ActiveActivity is BikeActivity) { BikeActivity b = (BikeActivity)ActiveActivity; double avg = b.AvgCadence; double maxim = b.MaxCadence; if (avg < 0) { CadenceInfo = "No cadence data provided :("; } else { CadenceInfo = "Average: " + Math.Round(avg, 0) + " rpm\nMax: " + Math.Round(maxim, 0) + " rpm"; } } else if (ActiveActivity is RunActivity) { RunActivity a = (RunActivity)ActiveActivity; double avg = a.AvgCadence; double maxim = a.MaxCadence; if (avg < 0) { CadenceInfo = "No cadence data provided :("; } else { CadenceInfo = "Average: " + Math.Round(avg, 0) + " spm\nMax: " + Math.Round(maxim, 0) + " spm"; } } } // update speed stats if (ActiveActivity != null) { double avg = ActiveActivity.AvgSpeed; double maxim = ActiveActivity.MaxSpeed; if (avg < 0) { SpeedInfo = "No speed data provided :("; } else { SpeedInfo = "Average: " + Math.Round(avg, 2) + " mph\nMax: " + Math.Round(maxim, 2) + " mph"; } } // update watts stats if (ActiveActivity != null) { if (ActiveActivity is BikeActivity) { BikeActivity b = (BikeActivity)ActiveActivity; double avg = b.AvgPower; double maxim = b.MaxPower; if (avg < 0) { WattsInfo = "No power data provided :("; } else { WattsInfo = "Average: " + Math.Round(avg, 0) + " W\nMax: " + Math.Round(maxim, 0) + " W"; } } else { WattsInfo = "No power data provided :("; } } //update elevation stats if (ActiveActivity != null) { var ascList = ActiveActivity.Laps.Select(x => x.ElevationGain); var descList = ActiveActivity.Laps.Select(x => x.ElevationLoss); double asc = 0; double desc = 0; foreach (double a in ascList) { asc += a; } foreach (double d in descList) { desc += d; } double largest = ActiveActivity.Laps.Max(x => x.BiggestClimb); if (asc < 0 && desc < 0) { ElevationInfo = "No elevation data provided :("; } else { ElevationInfo = "Ascent: " + Math.Round(asc, 0) + " ft\nDescent: " + Math.Round(desc, 0) + " ft\nLargest climb: " + Math.Round(largest, 0) + " ft"; } } }