Пример #1
0
 public virtual void Visit(RunActivity activity)
 {
 }
Пример #2
0
        // 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";
                }
            }
        }