示例#1
0
        private ArrayList SplitSeriesInStackedGroups(string[] seriesNames)
        {
            Hashtable hashtable = new Hashtable();

            foreach (string text in seriesNames)
            {
                Series series = base.Common.Chart.Series[text];
                string key    = string.Empty;
                if (StackedColumnChart.IsSeriesStackGroupNameSupported(series))
                {
                    key = StackedColumnChart.GetSeriesStackGroupName(series);
                }
                if (hashtable.ContainsKey(key))
                {
                    ArrayList arrayList = (ArrayList)hashtable[key];
                    arrayList.Add(text);
                }
                else
                {
                    ArrayList arrayList2 = new ArrayList();
                    arrayList2.Add(text);
                    hashtable.Add(key, arrayList2);
                }
            }
            ArrayList             arrayList3 = new ArrayList();
            IDictionaryEnumerator enumerator = hashtable.GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    ArrayList arrayList4 = (ArrayList)((DictionaryEntry)enumerator.Current).Value;
                    if (arrayList4.Count > 0)
                    {
                        int      num   = 0;
                        string[] array = new string[arrayList4.Count];
                        foreach (string item in arrayList4)
                        {
                            array[num++] = item;
                        }
                        arrayList3.Add(array);
                    }
                }
                return(arrayList3);
            }
            finally
            {
                IDisposable disposable = enumerator as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
        }
示例#2
0
        private ArrayList SplitSeriesInStackedGroups(string[] seriesNames)
        {
            Hashtable hashtable = new Hashtable();

            foreach (string text in seriesNames)
            {
                Series series = base.Common.Chart.Series[text];
                string key    = string.Empty;
                if (StackedColumnChart.IsSeriesStackGroupNameSupported(series))
                {
                    key = StackedColumnChart.GetSeriesStackGroupName(series);
                }
                if (hashtable.ContainsKey(key))
                {
                    ((ArrayList)hashtable[key]).Add(text);
                    continue;
                }
                ArrayList arrayList = new ArrayList();
                arrayList.Add(text);
                hashtable.Add(key, arrayList);
            }
            ArrayList arrayList2 = new ArrayList();

            foreach (DictionaryEntry item in hashtable)
            {
                ArrayList arrayList3 = (ArrayList)item.Value;
                if (arrayList3.Count <= 0)
                {
                    continue;
                }
                int      num   = 0;
                string[] array = new string[arrayList3.Count];
                foreach (string item2 in arrayList3)
                {
                    array[num++] = item2;
                }
                arrayList2.Add(array);
            }
            return(arrayList2);
        }
 public int GetNumberOfClusters()
 {
     if (this.seriesClusters == null)
     {
         ArrayList arrayList  = new ArrayList();
         ArrayList arrayList2 = new ArrayList();
         this.seriesClusters = new ArrayList();
         int num = -1;
         foreach (string item in base.series)
         {
             Series series = base.Common.DataManager.Series[item];
             if (!this.Area3DStyle.Clustered && base.Common.ChartTypeRegistry.GetChartType(series.ChartTypeName).SupportStackedGroups)
             {
                 string seriesStackGroupName = StackedColumnChart.GetSeriesStackGroupName(series);
                 if (arrayList2.Contains(seriesStackGroupName))
                 {
                     bool flag = false;
                     int  num2 = 0;
                     while (!flag && num2 < this.seriesClusters.Count)
                     {
                         foreach (string item2 in (ArrayList)this.seriesClusters[num2])
                         {
                             Series series2 = base.Common.DataManager.Series[item2];
                             if (seriesStackGroupName == StackedColumnChart.GetSeriesStackGroupName(series2))
                             {
                                 num  = num2;
                                 flag = true;
                             }
                         }
                         num2++;
                     }
                 }
                 else
                 {
                     num = this.seriesClusters.Count;
                     arrayList2.Add(seriesStackGroupName);
                 }
             }
             else if (base.Common.ChartTypeRegistry.GetChartType(series.ChartTypeName).Stacked || (this.Area3DStyle.Clustered && base.Common.ChartTypeRegistry.GetChartType(series.ChartTypeName).SideBySideSeries))
             {
                 if (arrayList.Contains(series.ChartTypeName.ToUpper(CultureInfo.InvariantCulture)))
                 {
                     bool flag2 = false;
                     int  num3  = 0;
                     while (!flag2 && num3 < this.seriesClusters.Count)
                     {
                         foreach (string item3 in (ArrayList)this.seriesClusters[num3])
                         {
                             Series series3 = base.Common.DataManager.Series[item3];
                             if (series3.ChartTypeName.ToUpper(CultureInfo.InvariantCulture) == series.ChartTypeName.ToUpper(CultureInfo.InvariantCulture))
                             {
                                 num   = num3;
                                 flag2 = true;
                             }
                         }
                         num3++;
                     }
                 }
                 else
                 {
                     num = this.seriesClusters.Count;
                     arrayList.Add(series.ChartTypeName.ToUpper(CultureInfo.InvariantCulture));
                 }
             }
             else
             {
                 num = this.seriesClusters.Count;
             }
             if (this.seriesClusters.Count <= num)
             {
                 this.seriesClusters.Add(new ArrayList());
             }
             ((ArrayList)this.seriesClusters[num]).Add(item);
         }
     }
     return(this.seriesClusters.Count);
 }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var                      Collection   = new ObservableCollection <ChartItem>();
            string                   Title        = "";
            string                   SubTitle     = "";
            List <string>            Clustertitle = new List <string>();
            GH_Structure <GH_Number> treeValues   = new GH_Structure <GH_Number>();
            //GH_Structure<GH_String> treeNames = new GH_Structure<GH_String>();
            List <string> names     = new List <string>();
            int           chartType = 0;

            //get GH input data
            bool hasTitle = DA.GetData <string>("Title", ref Title);

            DA.GetData <string>("SubTitle", ref SubTitle);
            DA.GetDataList <string>("ClusterTitle", Clustertitle);
            DA.GetDataTree <GH_Number>("Data", out treeValues);
            //DA.GetDataTree<GH_String>("Names", out treeNames);
            DA.GetDataList <string>("Names", names);

            DA.GetData <int>("Chart Type", ref chartType);
            ChartBase ChartElem = null;

            switch (chartType)
            {
            case 0:
                var ColumnCluster = new ClusteredColumnChart();
                ChartElem = ColumnCluster;
                break;

            case 1:
                var BarCluster = new ClusteredBarChart();
                ChartElem = BarCluster;
                break;

            case 2:
                var ColumnStack = new StackedColumnChart();
                ChartElem = ColumnStack;
                break;

            case 3:
                var BarStack = new StackedBarChart();
                ChartElem = BarStack;
                break;

            case 4:
                var pieElem = new PieChart();
                ChartElem = pieElem;

                break;

            default:
                var defaultElem = new ClusteredBarChart();
                ChartElem = defaultElem;
                break;
            }

            //Give the chart its name

            ChartElem.ChartTitle    = Title;
            ChartElem.ChartSubTitle = SubTitle;

            // MultiChartModel mcm = new MultiChartModel();
            // mcm.Series = new ObservableCollection<SeriesModel>();


            for (int i = 0; i < treeValues.Branches.Count; i++)
            {
                //package the data into a custom chart model and series
                List <double> listDouble = treeValues[i].ConvertAll(x => x.Value);
                SeriesModel   vm         = new SeriesModel(names.ToList(), listDouble, Clustertitle[i]);



                ChartSeries series = new ChartSeries();
                //We have to set the series data context rather than the whole chart
                series.DataContext = vm;

                series.SeriesTitle   = Clustertitle[i];
                series.DisplayMember = "Category";
                series.ValueMember   = "Number";

                Binding seriesBinding = new Binding();
                seriesBinding.Source = vm;
                seriesBinding.Path   = new PropertyPath("Chart");
                BindingOperations.SetBinding(series, ChartSeries.ItemsSourceProperty, seriesBinding);

                ChartElem.Series.Add(series);
                //Pass data to the chart
                //  mcm.Series.Add(vm);
            }

            //Binding seriesSetBinding = new Binding();
            //seriesSetBinding.Source = mcm;
            //seriesSetBinding.Path = new PropertyPath("Series");
            //BindingOperations.SetBinding(ChartElem, ChartBase.SeriesSourceProperty, seriesSetBinding);



            ////Send Data to GH output
            DA.SetData("MultiChart", new UIElement_Goo(ChartElem, "Chart Elem", InstanceGuid, DA.Iteration));
            //  DA.SetData("Test","listNames");
        }