예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }