internal virtual Dictionary <object, List <Series> > GroupSeriesByClusters(IList <XYSeries> clusterSeries) { Dictionary <object, List <Series> > clusterGroups = new Dictionary <object, List <Series> >(); foreach (ColumnSeries columnSeries1 in (IEnumerable <XYSeries>)clusterSeries) { List <Series> list = new List <Series>(); if (columnSeries1.ClusterGroupKey == null) { list.Add((Series)columnSeries1); clusterGroups.Add((object)new Tuple <ColumnSeries>(columnSeries1), list); } else if (!clusterGroups.ContainsKey(columnSeries1.ClusterGroupKey)) { foreach (ColumnSeries columnSeries2 in (IEnumerable <XYSeries>)clusterSeries) { if (ValueHelper.AreEqual(columnSeries2.ClusterGroupKey, columnSeries1.ClusterGroupKey)) { list.Add((Series)columnSeries2); } } clusterGroups.Add(columnSeries1.ClusterGroupKey, list); } } IList <StackedColumnSeries> list1 = (IList <StackedColumnSeries>)Enumerable.ToList <StackedColumnSeries>(Enumerable.OfType <StackedColumnSeries>((IEnumerable)Enumerable.Where <XYSeries>((IEnumerable <XYSeries>) this.XYChartArea.Series, (Func <XYSeries, bool>)(s => s.Visibility == Visibility.Visible)))); foreach (List <Series> list2 in clusterGroups.Values) { List <Series> groupSeries = list2; EnumerableFunctions.ForEach <Series>(Enumerable.Where <Series>((IEnumerable <Series>)groupSeries.ToArray(), (Func <Series, bool>)(s => s is StackedColumnSeries)), (Action <Series>)(s => groupSeries.Remove(s))); } EnumerableFunctions.ForEach <KeyValuePair <object, List <Series> > >(Enumerable.Where <KeyValuePair <object, List <Series> > >((IEnumerable <KeyValuePair <object, List <Series> > >)Enumerable.ToArray <KeyValuePair <object, List <Series> > >((IEnumerable <KeyValuePair <object, List <Series> > >)clusterGroups), (Func <KeyValuePair <object, List <Series> >, bool>)(item => item.Value.Count == 0)), (Action <KeyValuePair <object, List <Series> > >)(item => clusterGroups.Remove(item.Key))); foreach (StackedColumnSeries series1 in (IEnumerable <StackedColumnSeries>)list1) { List <Series> list2 = new List <Series>(); Tuple <DataValueType, DataValueType, bool, object> seriesKey = StackedColumnSeriesPresenter.GetSeriesKey(series1); if (!clusterGroups.ContainsKey((object)seriesKey) && seriesKey.Item1 != DataValueType.Auto) { foreach (StackedColumnSeries series2 in (IEnumerable <StackedColumnSeries>)list1) { if (StackedColumnSeriesPresenter.GetSeriesKey(series2).Equals((object)seriesKey)) { list2.Add((Series)series2); } } clusterGroups.Add((object)seriesKey, list2); } } return(clusterGroups); }
internal override double GetYOffsetInAxisUnits(XYDataPoint dataPoint, Point valuePoint, Point basePoint) { object xValue = ValueHelper.ConvertValue(dataPoint.XValue, ((XYSeries)dataPoint.Series).ActualXValueType); bool flag = valuePoint.Y < basePoint.Y; double num1 = 0.0; double num2 = 0.0; object clusterGroupKey = ((ColumnSeries)this.Series).ClusterGroupKey; foreach (XYDataPoint dataPointXY in Enumerable.Where <XYDataPoint>((IEnumerable <XYDataPoint>) this.GetCounterpartDataPoints(xValue, false), (Func <XYDataPoint, bool>)(p => this.IsDataPointViewVisible((DataPoint)p)))) { ColumnSeries columnSeries = dataPointXY.Series as ColumnSeries; if (clusterGroupKey != null && columnSeries != null) { if (ValueHelper.AreEqual(columnSeries.ClusterGroupKey, clusterGroupKey)) { break; } } Point positionInAxisUnits = this.GetPositionInAxisUnits(dataPointXY); if (flag) { if (positionInAxisUnits.Y < basePoint.Y) { num1 += basePoint.Y - positionInAxisUnits.Y; } } else if (positionInAxisUnits.Y > basePoint.Y) { num2 += basePoint.Y - positionInAxisUnits.Y; } } if (!flag) { return(num2); } return(num1); }