Esempio n. 1
0
        internal static void GroupData(ChartVisibleSeriesCollection visibleSeries)
        {
            List <string> groupingValues = new List <string>();

            // Get the x values from the series.
            foreach (var series in visibleSeries)
            {
                if (series is WaterfallSeries || series is ErrorBarSeries ||
                    series is HistogramSeries || series is PolarRadarSeriesBase)
                {
                    return;
                }
                if (series.ActualXValues is List <string> )
                {
                    groupingValues.AddRange(series.ActualXValues as List <string>);
                }
                else
                {
                    groupingValues.AddRange(from val in (series.ActualXValues as List <double>)
                                            select val.ToString());
                }
            }

            var distinctXValues = groupingValues.Distinct().ToList();

            foreach (var series in visibleSeries)
            {
                if (series.ActualXValues is List <string> )
                {
                    series.GroupedXValuesIndexes = (from val in (List <string>)series.ActualXValues
                                                    select(double) distinctXValues.IndexOf(val)).ToList();
                }
                else
                {
                    series.GroupedXValuesIndexes = (from val in series.ActualXValues as List <double>
                                                    select(double) distinctXValues.IndexOf(val.ToString())).ToList();
                }
                series.GroupedXValues = distinctXValues;
            }

            foreach (var series in visibleSeries)
            {
                series.DistinctValuesIndexes.Clear();
                var aggregateValues = new Dictionary <int, List <double> > [series.ActualSeriesYValues.Length];
                var yValues         = new List <double> [series.ActualSeriesYValues.Length];
                series.GroupedSeriesYValues = new IList <double> [series.ActualSeriesYValues.Length];
                bool isRangeColumnSingleValue = series is RangeColumnSeries && !series.IsMultipleYPathRequired;

                for (int i = 0; i < series.ActualSeriesYValues.Length; i++)
                {
                    series.GroupedSeriesYValues[i] = new List <double>();
                    aggregateValues[i]             = new Dictionary <int, List <double> >();
                    ((List <double>)series.GroupedSeriesYValues[i]).AddRange(series.ActualSeriesYValues[i]);

                    if (isRangeColumnSingleValue)
                    {
                        break;
                    }
                }

                var actualXValues = series.ActualXValues is List <string>
                                    ?series.ActualXValues as List <string>
                                    : (from val in (series.ActualXValues as List <double>) select val.ToString()).ToList();

                for (int i = 0; i < distinctXValues.Count; i++)
                {
                    int count   = 0;
                    var indexes = new List <int>();
                    for (int j = 0; j < series.ActualSeriesYValues.Length; j++)
                    {
                        yValues[j] = new List <double>();

                        if (isRangeColumnSingleValue)
                        {
                            break;
                        }
                    }

                    (from xValues in actualXValues
                     let index = count++
                                 where distinctXValues[i] == xValues
                                 select index).Select(t1 =>
                    {
                        for (int j = 0; j < series.ActualSeriesYValues.Length; j++)
                        {
                            yValues[j].Add(series.ActualSeriesYValues[j][count - 1]);
                            if (j == 0)
                            {
                                indexes.Add(count - 1);
                            }

                            if (isRangeColumnSingleValue)
                            {
                                break;
                            }
                        }

                        return(0);
                    }).ToList();

                    for (int j = 0; j < series.ActualSeriesYValues.Length; j++)
                    {
                        aggregateValues[j].Add(i, yValues[j]);
                        if (isRangeColumnSingleValue)
                        {
                            break;
                        }
                    }

                    series.DistinctValuesIndexes.Add(i, indexes);
                }

                var aggregateValue = series.ActualXAxis is CategoryAxis
                    ? (series.ActualXAxis as CategoryAxis).AggregateFunctions
                    :  AggregateFunctions.None;

                if (aggregateValue != AggregateFunctions.None)
                {
                    series.DistinctValuesIndexes.Clear();
                    series.GroupedXValuesIndexes.Clear();
                    for (int i = 0; i < series.ActualSeriesYValues.Length; i++)
                    {
                        series.GroupedSeriesYValues[i].Clear();

                        if (isRangeColumnSingleValue)
                        {
                            break;
                        }
                    }

                    for (int i = 0; i < distinctXValues.Count; i++)
                    {
                        series.GroupedXValuesIndexes.Add(i);
                        for (int j = 0; j < series.ActualSeriesYValues.Length; j++)
                        {
                            if (aggregateValues[j][i].Count > 0)
                            {
                                switch (aggregateValue)
                                {
                                case AggregateFunctions.Average:
                                    series.GroupedSeriesYValues[j].Add(aggregateValues[j][i].Average());
                                    break;

                                case AggregateFunctions.Count:
                                    series.GroupedSeriesYValues[j].Add(aggregateValues[j][i].Count());
                                    break;

                                case AggregateFunctions.Max:
                                    series.GroupedSeriesYValues[j].Add(aggregateValues[j][i].Max());
                                    break;

                                case AggregateFunctions.Min:
                                    series.GroupedSeriesYValues[j].Add(aggregateValues[j][i].Min());
                                    break;

                                case AggregateFunctions.Sum:
                                    series.GroupedSeriesYValues[j].Add(aggregateValues[j][i].Sum());
                                    break;
                                }
                            }

                            if (isRangeColumnSingleValue)
                            {
                                break;
                            }
                        }

                        var trackballIndex = new List <int> {
                            i
                        };
                        series.DistinctValuesIndexes.Add(i, trackballIndex);
                    }
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Check whether the declared series is manhattan.
 /// </summary>
 /// <param name="visibleSeries">The Visible Series</param>
 /// <param name="axis3D">The 3D Axis</param>
 /// <returns>Returns a value indicating whether the declared series is manhattan.</returns>
 private static bool IsDeclaredSeriesManhattan(ChartVisibleSeriesCollection visibleSeries, ChartAxisBase3D axis3D)
 {
     return(axis3D.IsZAxis && visibleSeries.Count > 0 && visibleSeries.All(series => (series is AreaSeries3D || series is LineSeries3D)));
 }