Beispiel #1
0
        public GearUtils Connect(int theets)
        {
            var gear = new GearUtils(theets);

            gear.joinedParent = this;
            return(gear);
        }
Beispiel #2
0
        public GearUtils Drive(int theets)
        {
            var gear = new GearUtils(theets);

            gear.drivenParent = this;
            return(gear);
        }
Beispiel #3
0
        private void RefreshTree()
        {
            List <GearStats> rowData = new List <GearStats>();

            if (gearSelection.Count > 0)
            {
                string equipmentId             = Options.Instance.GetGearEquipmentId(activity);
                List <SprocketCombo> sprockets = Options.Instance.GetSprocketCombos(equipmentId);

                foreach (SprocketCombo combo in sprockets)
                {
                    INumericTimeDataSeries guessGears = new NumericTimeDataSeries(GearUtils.GuessGears(gearSelection, sprockets));
                    guessGears = GearUtils.RemovePausedTimesInTrack(guessGears, activity);
                    GearStats item = new GearStats(guessGears, combo.GearRatio, activity);
                    rowData.Add(item);
                }

                // Add 'Total' Line
                rowData.Add(new GearStats(rowData));
            }

            treeListStats.Columns.Clear();
            foreach (TreeList.Column column in GetTreeColumns())
            {
                treeListStats.Columns.Add(column);
            }

            treeListStats.RowDataRenderer = new MyRowDataRenderer(treeListStats);
            treeListStats.RowData         = rowData;
        }
Beispiel #4
0
        /// <summary>
        /// Populate a dataseries with data from a NumericTimeDataSeries
        /// </summary>
        /// <param name="timeDataSeries">NumericTimeDataSeries containing data to add to chart data series</param>
        /// <param name="chartDataSeries">Dataseries to add data to</param>
        /// <param name="chartType">Chart basis (time or distance)</param>
        /// <returns>Populated dataseries</returns>
        private static ChartDataSeries PopulateDataSeries(INumericTimeDataSeries timeDataSeries, ChartDataSeries chartDataSeries, ChartBasis chartType, IActivity activity)
        {
            switch (chartType)
            {
            case ChartBasis.Gear_Distance:
                ActivityInfo       info  = ActivityInfoCache.Instance.GetInfo(activity);
                IDistanceDataTrack track = GearUtils.GetDistanceTrack(activity);
                float test = 0;

                foreach (ITimeValueEntry <float> entry in timeDataSeries)
                {
                    DateTime time     = track.EntryDateTime(entry);
                    float    distance = track.GetInterpolatedValue(time).Value;
                    distance = (float)Length.Convert(distance, Length.Units.Meter, activity.Category.DistanceUnits);
                    PointF point = new PointF(distance, entry.Value);
                    if (!chartDataSeries.Points.ContainsKey(point.X))
                    {
                        chartDataSeries.Points.Add(point.X, point);
                    }
                    else if (test != point.X)
                    {
                        test = point.X;
                    }
                }

                break;

            case ChartBasis.Gear_Time:
                foreach (ITimeValueEntry <float> entry in timeDataSeries)
                {
                    PointF point = new PointF(entry.ElapsedSeconds, entry.Value);
                    chartDataSeries.Points.Add(point.X, point);
                }

                break;

            default:

                break;
            }

            return(chartDataSeries);
        }
Beispiel #5
0
        /// <summary>
        /// Gets the Sprocket Track for a given activity.  Returns an empty track if unable to calculate (for instance if no GPS or Distance track).
        /// </summary>
        /// <param name="activity"></param>
        /// <returns>Returns an ITimeDataSeries<SprocketCombo> of the sprocket combo used, or an empty track if nothing can be calculated.</returns>
        public static ITimeDataSeries <SprocketCombo> GetSprocketTrack(IActivity activity)
        {
            // Raw data
            INumericTimeDataSeries          gearTrack     = ActivityGearTrackCache.Instance.CalculateRawTrack(activity);
            ITimeDataSeries <SprocketCombo> sprocketTrack = new TimeDataSeries <SprocketCombo>();

            if (gearTrack.Count > 0)
            {
                // Smooth data track
                float min, max;
                gearTrack = ZoneFiveSoftware.Common.Data.Algorithm.NumericTimeDataSeries.Smooth(gearTrack, Constants.GearTrackSmoothing, out max, out min);

                // Estimate/round gear track
                string id = Options.Instance.GetGearEquipmentId(activity);
                List <SprocketCombo> sprockets = Options.Instance.GetSprocketCombos(id);
                sprocketTrack = GearUtils.GuessSprockets(gearTrack, sprockets);
            }

            return(sprocketTrack);
        }
Beispiel #6
0
        public static INumericTimeDataSeries GetGearTrack(IActivity activity, INumericTimeDataSeries cadenceTrack, INumericTimeDataSeries distanceTrack)
        {
            // Raw data
            INumericTimeDataSeries gearTrack = GearUtils.GetRawGearTrack(cadenceTrack, distanceTrack);

            if (gearTrack.Count > 0)
            {
                // Smooth data track
                float min, max;
                gearTrack = ZoneFiveSoftware.Common.Data.Algorithm.NumericTimeDataSeries.Smooth(gearTrack, Constants.GearTrackSmoothing, out max, out min);

                // Estimate/round gear track
                string id = Options.Instance.GetGearEquipmentId(activity);
                List <SprocketCombo> sprockets = Options.Instance.GetSprocketCombos(id);
                gearTrack = GearUtils.GuessGears(gearTrack, sprockets);

                return(gearTrack);
            }
            else
            {
                return(new NumericTimeDataSeries());
            }
        }
        public void GearFactorResultTests(int gearOne, int gearTwo, int gearThree, int gearFour, double factor)
        {
            var gearFactor = new GearUtils(gearOne).Drive(gearTwo).Connect(gearThree).Drive(gearFour).GetFactor();

            Assert.Equal(factor, gearFactor);
        }
Beispiel #8
0
 public GearUtils Connect(GearUtils gear)
 {
     gear.joinedParent = this;
     return(gear);
 }
Beispiel #9
0
 public GearUtils Drive(GearUtils gear)
 {
     gear.drivenParent = this;
     return(gear);
 }
Beispiel #10
0
        public void RefreshPage()
        {
            // Clear Chart
            ChartBase chart = detailPaneChart.Chart;

            detailPaneChart.ChartDataClear();
            gearSelection = new NumericTimeDataSeries();

            if (activity != null)
            {
                // Get Gear Track (raw data)
                gearSelection = GearUtils.GetRawGearTrack(activity);
                if (chartType == ChartBasis.Gear_Time)
                {
                    gearSelection = GearUtils.RemovePausedTimesInTrack(gearSelection, activity);
                }

                if (gearSelection.Count != 0)
                {
                    // Smooth data series
                    float min, max;
                    gearSelection = ZoneFiveSoftware.Common.Data.Algorithm.NumericTimeDataSeries.Smooth(gearSelection, Constants.GearTrackSmoothing, out max, out min);
                    //gearSelection = ZoneFiveSoftware.Common.Data.Algorithm.NumericTimeDataSeries.Smooth(gearSelection, 10, out max, out min);

                    //*********************************************
                    // Initialize variables for activity grade impact, and full category impact
                    ChartDataSeries rawGears = new ChartDataSeries(chart, chart.YAxis);

                    // ChartDataSeries
                    rawGears           = PopulateDataSeries(gearSelection, rawGears, ChartType, activity);
                    rawGears.ChartType = ChartDataSeries.Type.Line;
                    rawGears.LineColor = Color.Red;
                    rawGears.ValueAxis = chart.YAxis;

                    if (Options.Instance.ShowRawGearData)
                    {
                        detailPaneChart.ChartDataAdd(rawGears);
                    }

                    // Guess gears
                    string equipmentId = Options.Instance.GetGearEquipmentId(activity);
                    List <SprocketCombo>   gearRatios  = Options.Instance.GetSprocketCombos(equipmentId);
                    INumericTimeDataSeries gearGuess   = GearUtils.GuessGears(gearSelection, gearRatios);
                    ChartDataSeries        guessSeries = new ChartDataSeries(chart, chart.YAxis);

                    if (Options.Instance.ShowEstGearData)
                    {
                        detailPaneChart.ChartDataAdd(guessSeries);
                    }

                    // ChartDataSeries
                    guessSeries            = PopulateDataSeries(gearGuess, guessSeries, ChartType, activity);
                    guessSeries.ChartType  = ChartDataSeries.Type.Line;
                    guessSeries.LineColor  = Color.Blue;
                    guessSeries.ValueAxis  = chart.YAxis;
                    chart.YAxis.LabelColor = rawGears.LineColor;

                    //ExportDataSeriesToCSV(guessSeries);
                    //ExportDataSeriesToCSV(rawGears);

                    if (Options.Instance.GearChartType == ChartBasis.Gear_Time)
                    {
                        chart.XAxis.Formatter = new Formatter.SecondsToTime();
                        chart.XAxis.Label     = CommonResources.Text.LabelTime;
                    }
                    else
                    {
                        chart.XAxis.Formatter = new Formatter.General();
                        chart.XAxis.Label     = CommonResources.Text.LabelDistance + " (" + activity.Category.DistanceUnits + ")";
                    }

                    Options.Instance.ShowZonesInChart = false;
                    chart.YAxis.Label = "m/Rev (ratio)";  // TODO: Localize this string
                }
            }

            chart.AutozoomToData(true);
            chart.Focus();

            // Update Tree
            RefreshTree();
        }
Beispiel #11
0
 /// <summary>
 /// Gets a data track representing the raw data used to calculate the gear track.
 /// </summary>
 /// <param name="activity"></param>
 /// <returns>Returns the raw gear track, or an empty INumericTimeDataSeries if none can be calculated.</returns>
 public static INumericTimeDataSeries GetRawGearTrack(IActivity activity)
 {
     return(GearUtils.GetRawGearTrack(activity));
 }