コード例 #1
0
        private void add_chart_element(string group, double value)
        {
            if (group == "")
            {
                return;
            }

            if (!chart_series.Any(x => x.title == group))
            {
                chart_series.Add(new chart_element {
                    x_value = chart_series.Count + 1, title = group, total = value, min = value, max = value, count = 1
                });
            }
            else
            {
                chart_element element = chart_series.FirstOrDefault(x => x.title == group);
                element.total += value;

                if (element.min > value)
                {
                    element.min = value;
                }

                if (element.max < value)
                {
                    element.max = value;
                }

                element.count += 1;
            }
        }
コード例 #2
0
        public void populate_comparison_chart()
        {
            if (match_history.Count <= 0)
            {
                return;
            }

            double y_axis_max = 0;

            //if (!force_refresh)
            //{
            //    new_selection = filter.filter_string(filter_selections);

            //    if (new_selection == previous_selection)
            //        return;
            //}

            force_refresh      = false;
            previous_selection = new_selection;
            Filter.ResetFilters(filter_selections);

            reset_comparison_data();

            foreach (FileTraceManagment.MatchRecord match in match_history.OrderByDescending(x => x.MatchData.MatchStart))
            {
                if (!Filter.CheckFilters(filter_selections, match, build_records, session, translations))
                {
                    continue;
                }

                process_match(match);
            }

            if (current_x_axis.ordering == ordering.TIME_DESC)
            {
                chart_series = chart_series.OrderByDescending(x => DateTime.Parse(x.title)).ToList();
            }
            else
            if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Total")
            {
                chart_series = chart_series.OrderByDescending(x => x.total).ToList();
            }
            else
            if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Maximum")
            {
                chart_series = chart_series.OrderByDescending(x => x.max).ToList();
            }
            else
            if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Minimum")
            {
                chart_series = chart_series.OrderBy(x => x.min).ToList();
            }
            else
            if (current_x_axis.ordering == ordering.VALUE_DESC && mode == "Average")
            {
                chart_series = chart_series.OrderByDescending(x => (double)x.total / (double)x.count).ToList();
            }
            else
            {
                return;
            }

            int current_group_count = 0;

            foreach (chart_element element in chart_series.ToList())
            {
                if (element.count < current_min_sample_size)
                {
                    chart_series.Remove(element);
                }

                if (current_group_count > current_result_limit - 1 && current_result_limit != 0)
                {
                    if (!chart_series.Any(x => x.title == "Other"))
                    {
                        chart_series.Add(new chart_element {
                            x_value = current_group_count, title = "Other", count = element.count, max = element.max, min = element.min, total = element.total
                        });
                    }
                    else
                    {
                        chart_element other = chart_series.FirstOrDefault(x => x.title == "Other");
                        other.total += element.total;
                        other.count += element.count;

                        if (other.min < element.min)
                        {
                            other.min = element.min;
                        }

                        if (other.max > element.max)
                        {
                            other.max = element.max;
                        }
                    }
                    chart_series.Remove(element);
                }
                current_group_count += 1;
            }


            double x_value = 1;

            foreach (chart_element element in chart_series.OrderBy(x => x.title == "Other" ? 0 : 1))
            {
                double y_value;

                if (mode == "Total")
                {
                    y_value = element.total;
                }
                else
                if (mode == "Maximum")
                {
                    y_value = element.max;
                }
                else
                if (mode == "Minimum")
                {
                    y_value = element.min;
                }
                else
                if (mode == "Average")
                {
                    y_value = (double)element.total / (double)element.count;
                }
                else
                {
                    break;
                }

                if (y_value > y_axis_max)
                {
                    y_axis_max = y_value;
                }


                DataPoint data = new DataPoint(x_value, y_value);
                data.LegendText     = element.title;
                data.AxisLabel      = element.title;
                data.LabelBackColor = session.BackColor;
                data.LabelForeColor = session.ForeColor;
                data.ToolTip        = string.Format(@"{0}: {1}", element.title, Math.Round(y_value, 1));
                current_series.Points.Add(data);
                x_value += 1;
            }

            ch_comparison.ChartAreas[0].AxisY.Maximum = y_axis_max * 1.05;
            Filter.PopulateFilters(filter_selections, cb_game_modes, cb_grouped, cb_power_score, cb_versions, cb_weapons, cb_movement, cb_cabins, cb_modules);
        }