예제 #1
0
        private CombinedSeries GetCombinedSeries(ISupportCombineMode combinableSeries)
        {
            Type type = combinableSeries.GetType();
            ChartSeriesCombineMode combineMode = combinableSeries.CombineMode;
            AxisModel stackValueAxis           = this.valueAxesExtractor(combinableSeries as IPlotAreaElementModelWithAxes);

            foreach (CombinedSeries series in this.CombinedSeries)
            {
                if (series.SeriesType == type && series.CombineMode == combineMode && (combineMode == ChartSeriesCombineMode.Cluster ||
                                                                                       ((combineMode == ChartSeriesCombineMode.Stack || combineMode == ChartSeriesCombineMode.Stack100) && series.StackValueAxis == stackValueAxis)))
                {
                    return(series);
                }
            }

            CombinedSeries newSeries = new CombinedSeries();

            newSeries.SeriesType     = type;
            newSeries.CombineMode    = combineMode;
            newSeries.CombineIndex   = this.CombinedSeries.Count;
            newSeries.StackAxis      = this.StackAxis;
            newSeries.StackValueAxis = stackValueAxis;
            this.CombinedSeries.Add(newSeries);

            return(newSeries);
        }
예제 #2
0
        private CombineStack CreateNewStack(ISupportCombineMode series)
        {
            CombineStack newStack = new CombineStack();

            newStack.Key = series.StackGroupKey;
            this.Stacks.Add(newStack);

            return(newStack);
        }
예제 #3
0
        public void Update(IList <ChartSeriesModel> series, AxisModel stackAxis)
        {
            if (this.isUpdated)
            {
                return;
            }

            this.StackAxis = stackAxis;

            if (stackAxis.Type == AxisType.First)
            {
                this.valueAxesExtractor = sm => sm.SecondAxis;
            }
            else
            {
                this.valueAxesExtractor = sm => sm.FirstAxis;
            }

            foreach (ChartSeriesModel model in series)
            {
                if (!model.presenter.IsVisible)
                {
                    continue;
                }

                AxisModel stackValueAxis = this.valueAxesExtractor(model as IPlotAreaElementModelWithAxes);
                if (!this.StackValueAxes.Contains(stackValueAxis))
                {
                    this.StackValueAxes.Add(stackValueAxis);
                }

                ISupportCombineMode combinableSeries = model as ISupportCombineMode;
                if (combinableSeries == null || combinableSeries.CombineMode == ChartSeriesCombineMode.None)
                {
                    this.NonCombinedSeries.Add(model);
                    continue;
                }

                CombinedSeries combinedSeries = this.GetCombinedSeries(combinableSeries);
                combinedSeries.Series.Add(model);

                this.HasCombination = true;
            }

            if (this.HasCombination)
            {
                this.BuildGroups();
            }

            this.isUpdated = true;
        }
예제 #4
0
        public CombineStack GetStack(ISupportCombineMode series)
        {
            if (series.CombineMode == ChartSeriesCombineMode.Cluster)
            {
                return(this.CreateNewStack(series));
            }

            object stackKey = series.StackGroupKey;

            foreach (CombineStack stack in this.Stacks)
            {
                if (object.Equals(stack.Key, stackKey))
                {
                    return(stack);
                }
            }

            return(this.CreateNewStack(series));
        }