public GearUtils Connect(int theets) { var gear = new GearUtils(theets); gear.joinedParent = this; return(gear); }
public GearUtils Drive(int theets) { var gear = new GearUtils(theets); gear.drivenParent = this; return(gear); }
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; }
/// <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); }
/// <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); }
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); }
public GearUtils Connect(GearUtils gear) { gear.joinedParent = this; return(gear); }
public GearUtils Drive(GearUtils gear) { gear.drivenParent = this; return(gear); }
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(); }
/// <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)); }