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); }
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); }