private void ExportButton_Click(object sender, EventArgs e) { // TODO: How to export multiple activities...? IActivity activity = ZoneFiveSoftware.Common.Visuals.Util.CollectionUtils.GetFirstItemOfType <IActivity>(activities); // Nothing to export if activity is empty if (activity == null) { return; } // Open File Save dialog to create new CSV Document SaveFileDialog saveFile = new SaveFileDialog(); saveFile.FileName = "MeanMax " + activity.StartTime.ToLocalTime().ToString("yyyy-MM-dd"); saveFile.Filter = "All Files (*.*)|*.*|Comma Separated Values (*.csv)|*.csv"; saveFile.FilterIndex = 2; saveFile.DefaultExt = "csv"; saveFile.OverwritePrompt = true; string comma = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator; // Cancel if user doesn't select a file if (saveFile.ShowDialog() != DialogResult.OK) { return; } // Export mean-max data // TODO: Export related data as well as MM data INumericTimeDataSeries timeTrack; INumericTimeDataSeries track = MeanMaxCache.GetMeanMaxTrack(activity, ChartType, out timeTrack); //Dictionary<INumericTimeDataSeries, string> tracks = new Dictionary<INumericTimeDataSeries, string>(); //tracks.Add(track, GlobalSettings.Instance.PrimaryChart.ToString()); //tracks.Add(timeTrack, CommonResources.Text.LabelTime); //Utilities.ExportTrack(tracks, saveFile.FileName); Utilities.ExportTrack(track, saveFile.FileName); }
public void RefreshPage() { if (Activities == null) { // Nothing to do. Exit. return; } // Update display bnrReport.Text = MeanMax.Resources.Strings.Label_MeanMax + ": " + Common.GetText(GlobalSettings.Instance.ReportChart); // Track list: One track per selected line. Dictionary <CriticalLineDefinition, INumericTimeDataSeries> trackList = new Dictionary <CriticalLineDefinition, INumericTimeDataSeries>(); List <Color> colors = Utilities.Rainbow(GlobalSettings.Instance.SelectedCriticalLines.Count, 255); progressLine = 0; foreach (CriticalLineDefinition line in GlobalSettings.Instance.CriticalPowerLines) { if (line.Selected) { // Assign rainbowed line color line.LineColor = colors[progressLine++]; // Get critical track described by this line from all Activities INumericTimeDataSeries criticalTrack = MeanMaxCache.GetCriticalTrack(Activities, GlobalSettings.Instance.ReportChart, line.Seconds); // Add track to list trackList.Add(line, criticalTrack); } } // Display tracks on graph updateZedGraph(trackList, zedChart, GlobalSettings.Instance.ReportChart); ZoomChartButton_Click(null, null); }
private void ExportButton_Click(object sender, EventArgs e) { // Nothing to export if activity is empty if (Activities == null) { return; } // Open File Save dialog to create new CSV Document SaveFileDialog saveFile = new SaveFileDialog(); saveFile.FileName = MeanMaxReport.Instance.Title + ".csv"; saveFile.Filter = "All Files (*.*)|*.*|Comma Separated Values (*.csv)|*.csv"; saveFile.FilterIndex = 2; saveFile.DefaultExt = "csv"; saveFile.OverwritePrompt = true; string comma = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator; // Cancel if user doesn't select a file if (saveFile.ShowDialog() != DialogResult.OK) { return; } Dictionary <INumericTimeDataSeries, string> lines = new Dictionary <INumericTimeDataSeries, string>(); foreach (CriticalLineDefinition line in GlobalSettings.Instance.CriticalPowerLines) { if (line.Selected) { lines.Add(MeanMaxCache.GetCriticalTrack(Activities, GlobalSettings.Instance.ReportChart, line.Seconds), line.Name); } } Utilities.ExportTrack(lines, saveFile.FileName); }
internal void RefreshPage() { if (activities == null) { return; } INumericTimeDataSeries meanMax = new NumericTimeDataSeries(); INumericTimeDataSeries timeTrack = new NumericTimeDataSeries(); INumericTimeDataSeries activityMax = new NumericTimeDataSeries(); Dictionary <string, INumericTimeDataSeries> assocTracks = new Dictionary <string, INumericTimeDataSeries>(); SortedList <float, float> mmTempList = new SortedList <float, float>(); meanMax.AllowMultipleAtSameTime = true; DateTime start = DateTime.Now.Date; foreach (IActivity mmact in activities) { // Try to pull from memory if available activityMax = MeanMaxCache.GetMeanMaxTrack(mmact, ChartType, out timeTrack); #if DebugOFF Utilities.ExportTrack(activityMax, "C:\\STexports\\" + "MeanMax" + ".csv"); Utilities.ExportTrack(mmact.PowerWattsTrack, "C:\\STexports\\" + "RawPowerTrack" + ".csv"); Utilities.ExportTrack(mmact.HeartRatePerMinuteTrack, "C:\\STexports\\" + "RawHeartRate" + ".csv"); Utilities.ExportTrack(mmact.CadencePerMinuteTrack, "C:\\STexports\\" + "RawCadence" + ".csv"); #endif int numActivities = (activities as List <IActivity>).Count; if (numActivities == 1) { // Add timetrack - Note this this only available for single activity analysis assocTracks.Add(timeId, timeTrack); // Add associated chart lines (matching HR, Cadence, etc.) foreach (string id in GlobalSettings.Instance.ChartLines) { Common.TrackType lineType = ColumnDefinition.GetTrackType(id); if (lineType != ChartType) { // Get associated track (HR, Cad, etc.) // This line is similar to the Mean-max chart where the time track is the 'period' // but the data is the HR, Cad., etc. that occurred at the -same time- as the Max effort occurred // rather than being a max value in itself. // The value is the average value during the range of time as opposed to a single entry INumericTimeDataSeries track = MeanMaxCache.GetAvgTrack(mmact, lineType, timeTrack); #if DebugOFF Utilities.ExportTrack(track, "C:\\STexports\\MM" + ColumnDefinition.GetText(id) + ".csv"); #endif if (!assocTracks.ContainsKey(id) && track != null) { // Store associated tracks for charting assocTracks.Add(id, track); } else { // TODO: Combine multiple tracks for averaging. Currently it'll only display the first activity track :( } } } } // Compile all points together (used for multiple activities) foreach (TimeValueEntry <float> item in activityMax) { /* If(entry not exist in meanMax || current value > existing value) * { * Add new MM entry * Update assoc track values * } * else * { * * } */ // Add to temporary sortedlist if (!mmTempList.ContainsKey(item.ElapsedSeconds)) { mmTempList.Add(item.ElapsedSeconds, item.Value); } else if (mmTempList.ContainsKey(item.ElapsedSeconds) && mmTempList[item.ElapsedSeconds] < item.Value) { mmTempList[item.ElapsedSeconds] = item.Value; } //meanMax.Add(start.AddSeconds(item.ElapsedSeconds), item.Value); } // Copy sorted temporary list to proper numeric time series foreach (float seconds in mmTempList.Keys) { meanMax.Add(start.AddSeconds(seconds), mmTempList[seconds]); } // Remove low points (used for multiple activities) for (int i = meanMax.Count - 2; i >= 0; i--) { if (meanMax[i].Value < meanMax[i + 1].Value) { meanMax.RemoveAt(i); } } } updateZedGraph(meanMax, assocTracks, zedChart, ChartType); }