Пример #1
0
        /// <summary>
        /// Pie Chart Render
        /// </summary>
        /// <param name="currentLayer"></param>
        /// <param name="breakCount"></param>
        /// <author>Shen Yongyuan</author>
        /// <date>20091114</date>
        public static void PieChartRender(ILayer currentLayer)
        {
            //Scale Symbol
            IGeoFeatureLayer pGeoFeatureL = currentLayer as IGeoFeatureLayer;

            pGeoFeatureL.ScaleSymbols = true;

            //Chart Render
            IChartRenderer  pChartRenderer  = new ChartRendererClass();
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology", "生态");
            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social", "社会");
            pRendererFields.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic", "经济");

            //Search Max
            IQueryFilter pQueryFilter = new QueryFilterClass();

            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology");
            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Social");
            pQueryFilter.AddField(Town.Constant.Constant.TmpTableIndex + "." + "Economic");
            IFeatureCursor pCursor = pGeoFeatureL.DisplayFeatureClass.Search(pQueryFilter, true);

            int fldFiledEcology  = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Ecology");
            int fldFiledSocial   = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Social");
            int fldFiledEconomic = pCursor.Fields.FindField(Town.Constant.Constant.TmpTableIndex + "." + "Economic");

            List <double> valueList = new List <double>();

            IFeature pFeature = pCursor.NextFeature();

            while (pFeature != null)
            {
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEcology)));
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledSocial)));
                valueList.Add(Convert.ToDouble(pFeature.get_Value(fldFiledEconomic)));
                pFeature = pCursor.NextFeature();
            }

            //Pie Chart
            IPieChartSymbol pPieChartSymbol;

            pPieChartSymbol = new PieChartSymbolClass();
            IChartSymbol pChartSymbol = (IChartSymbol)pPieChartSymbol;

            //Pie Chart Attribute
            pPieChartSymbol.Clockwise  = true;
            pPieChartSymbol.UseOutline = true;
            ILineSymbol pOutline;

            pOutline                = new SimpleLineSymbolClass();
            pOutline.Color          = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(100, 205, 30));
            pOutline.Width          = 1;
            pPieChartSymbol.Outline = pOutline;
            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPieChartSymbol;

            pChartSymbol.MaxValue = valueList.Max();
            pMarkerSymbol.Size    = 60;

            //Symbol Array
            ISymbolArray      pSymbolArray = (ISymbolArray)pPieChartSymbol;
            ISimpleFillSymbol pFillSymbol  = new SimpleFillSymbolClass();

            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Green);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Red);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            pFillSymbol       = new SimpleFillSymbolClass();
            pFillSymbol.Color = ArcGIS.Color.ToEsriColor(System.Drawing.Color.Blue);
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);

            pChartRenderer.ChartSymbol = (IChartSymbol)pPieChartSymbol;
            pChartRenderer.Label       = "指标";

            //Back Ground
            pFillSymbol               = new SimpleFillSymbolClass();
            pFillSymbol.Color         = ArcGIS.Color.ToEsriColor(System.Drawing.Color.FromArgb(239, 228, 190));
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;

            //Render Label
            pGeoFeatureL.Renderer = pChartRenderer as IFeatureRenderer;
        }
Пример #2
0
 //PieChartRenderer圆形分格统计图
 private void button7_Click(object sender, EventArgs e)
 {
     IGeoFeatureLayer geoFeatureLayer;
     IFeatureLayer featureLayer;
     ITable table;
     ICursor cursor;
     IRowBuffer rowBuffer;
     //设置饼图的要素
     string field1 = "sqmi";
     string field2 = "sqkm";
     //获取渲染图层
     geoFeatureLayer = getGeoLayer("Continents");
     featureLayer = geoFeatureLayer as IFeatureLayer;
     table = featureLayer as ITable;
     geoFeatureLayer.ScaleSymbols = true;
     IChartRenderer chartRenderer = new ChartRendererClass();
     IPieChartRenderer pieChartRenderer = chartRenderer as IPieChartRenderer;
     IRendererFields rendererFields = chartRenderer as IRendererFields;
     rendererFields.AddField(field1, field1);
     rendererFields.AddField(field2, field2);
     int[] fieldIndexs = new int[2];
     fieldIndexs[0] = table.FindField(field1);
     fieldIndexs[1] = table.FindField(field2);
     //获取渲染要素的最大值
     double fieldValue = 0.0, maxValue = 0.0;
     cursor = table.Search(null, true);
     rowBuffer = cursor.NextRow();
     while (rowBuffer != null)
     {
         for (int i = 0; i < 2; i++)
         {
             fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
             if (fieldValue > maxValue)
             {
                 maxValue = fieldValue;
             }
         }
         rowBuffer = cursor.NextRow();
     }
     //设置饼图符号
     IPieChartSymbol pieChartSymbol = new PieChartSymbolClass();
     pieChartSymbol.Clockwise = true;
     pieChartSymbol.UseOutline = true;
     IChartSymbol chartSymbol = pieChartSymbol as IChartSymbol;
     chartSymbol.MaxValue = maxValue;
     ILineSymbol lineSymbol = new SimpleLineSymbolClass();
     lineSymbol.Color = getRGB(255, 0, 0);
     lineSymbol.Width = 2;
     pieChartSymbol.Outline = lineSymbol;
     IMarkerSymbol markerSymbol = pieChartSymbol as IMarkerSymbol;
     markerSymbol.Size = 30;
     //添加渲染符号
     ISymbolArray symbolArray = pieChartSymbol as ISymbolArray;
     IFillSymbol fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 255, 0);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(0, 0, 255);
     symbolArray.AddSymbol(fillSymbol as ISymbol);
     chartRenderer.ChartSymbol = pieChartSymbol as IChartSymbol;
     fillSymbol = new SimpleFillSymbolClass();
     fillSymbol.Color = getRGB(100, 100, 100);
     chartRenderer.BaseSymbol = fillSymbol as ISymbol;
     chartRenderer.UseOverposter = false;
     //创建图例
     chartRenderer.CreateLegend();
     geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
     this.axMapControl1.Refresh();
 }
        public PieRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName1, string pFieldName2)
        {
            IGeoFeatureLayer pGeoFeaLayer   = (IGeoFeatureLayer)pFtLayer;
            IChartRenderer   pChartRenderer = new ChartRendererClass();
            // Set up the field to draw charts
            IRendererFields pRenderFields = (IRendererFields)pChartRenderer;

            pRenderFields.AddField(pFieldName1, pFieldName1);
            pRenderFields.AddField(pFieldName2, pFieldName2);
            IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;

            //计算最大值部分有待补充////////////////////////////////////
            //Calculate the max value of the data field to scale the chart

            //ICursor pCursor = new CursorClass();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            //IRowBuffer pRow = new RowBufferClass();
            ITable pTable = (ITable)pGeoFeaLayer;

            pQueryFilter.AddField(pFieldName1);
            ICursor pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName1;

            double pMax = pDataStat.Statistics.Maximum;



            IPieChartSymbol pPiechartSymbol = new PieChartSymbolClass();
            IFillSymbol     pFillSymbol     = new SimpleFillSymbolClass();
            IChartSymbol    pChartSymbol    = (IChartSymbol)pPiechartSymbol;

            pPiechartSymbol.Clockwise  = true;
            pPiechartSymbol.UseOutline = true;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();

            pOutLine.Color          = GetRGBColor(255, 0, 255);
            pOutLine.Width          = 1;
            pPiechartSymbol.Outline = pOutLine;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;

            //finally
            pChartSymbol.MaxValue = pMax;
            pMarkerSymbol.Size    = 16;
            //像符号数组中添加 添加符号
            ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;

            pFillSymbol.Color   = GetRGBColor(213, 212, 252);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //////////////////////////
            pFillSymbol.Color   = GetRGBColor(183, 242, 122);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //set up the background
            pFillSymbol.Color                    = GetRGBColor(239, 228, 190);
            pChartRenderer.BaseSymbol            = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter         = false;
            pPieChartRender.MinSize              = 1;
            pPieChartRender.MinValue             = pDataStat.Statistics.Minimum;
            pPieChartRender.FlanneryCompensation = false;
            pPieChartRender.ProportionalBySum    = true;
            pChartRenderer.ChartSymbol           = (IChartSymbol)pPiechartSymbol;
            pChartRenderer.CreateLegend();
            pGeoFeaLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            pMapcontrol.ActiveView.Refresh();
        }
Пример #4
0
        public PieRender(AxMapControl pMapcontrol, IFeatureLayer pFtLayer, string pFieldName1, string pFieldName2)
        {
            IGeoFeatureLayer pGeoFeaLayer = (IGeoFeatureLayer)pFtLayer;
            IChartRenderer pChartRenderer = new ChartRendererClass();
            // Set up the field to draw charts
            IRendererFields pRenderFields = (IRendererFields)pChartRenderer;
            pRenderFields.AddField(pFieldName1, pFieldName1);
            pRenderFields.AddField(pFieldName2, pFieldName2);
            IPieChartRenderer pPieChartRender = (IPieChartRenderer)pChartRenderer;

            //计算最大值部分有待补充////////////////////////////////////
            //Calculate the max value of the data field to scale the chart

            //ICursor pCursor = new CursorClass();
            IQueryFilter pQueryFilter = new QueryFilterClass();
            //IRowBuffer pRow = new RowBufferClass();
            ITable pTable = (ITable)pGeoFeaLayer;
            pQueryFilter.AddField(pFieldName1);
            ICursor pCursor = pTable.Search(pQueryFilter, true);

            IDataStatistics pDataStat = new DataStatisticsClass();

            IFeatureCursor pFtCursor = pFtLayer.FeatureClass.Search(null, false);

            pDataStat.Cursor = pFtCursor as ICursor;

            pDataStat.Field = pFieldName1;

            double pMax = pDataStat.Statistics.Maximum;

            IPieChartSymbol pPiechartSymbol = new PieChartSymbolClass();
            IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
            IChartSymbol pChartSymbol = (IChartSymbol)pPiechartSymbol;
            pPiechartSymbol.Clockwise = true;
            pPiechartSymbol.UseOutline = true;
            ILineSymbol pOutLine = new SimpleLineSymbolClass();
            pOutLine.Color = GetRGBColor(255, 0, 255);
            pOutLine.Width = 1;
            pPiechartSymbol.Outline = pOutLine;

            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPiechartSymbol;
            //finally
            pChartSymbol.MaxValue = pMax;
            pMarkerSymbol.Size = 16;
            //像符号数组中添加 添加符号
            ISymbolArray pSymbolArray = (ISymbolArray)pPiechartSymbol;
            pFillSymbol.Color = GetRGBColor(213, 212, 252);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //////////////////////////
            pFillSymbol.Color = GetRGBColor(183, 242, 122);
            pFillSymbol.Outline = pOutLine;
            pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            //set up the background
            pFillSymbol.Color = GetRGBColor(239, 228, 190);
            pChartRenderer.BaseSymbol = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter = false;
            pPieChartRender.MinSize = 1;
            pPieChartRender.MinValue = pDataStat.Statistics.Minimum;
            pPieChartRender.FlanneryCompensation = false;
            pPieChartRender.ProportionalBySum = true;
            pChartRenderer.ChartSymbol = (IChartSymbol)pPiechartSymbol;
            pChartRenderer.CreateLegend();
            pGeoFeaLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            pMapcontrol.ActiveView.Refresh();
        }
Пример #5
0
        private void btnPieChartRender_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer pGeoFeatLyr = this.mainMapControl.get_Layer(0) as IGeoFeatureLayer;

            //找出两个用于着色字段的最大值的最大值(这次加上最小值之和,这个函数的尾后部分用到,用于在着色对象里确定最小的PieChartSymbol的大小)
            double p1, p2, max, m1, m2, min;
            ICursor pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            IDataStatistics pDataStatistics = new DataStatisticsClass();
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1994(";
            p1 = pDataStatistics.Statistics.Maximum;
            m1 = pDataStatistics.Statistics.Minimum;
            pCursor = pGeoFeatLyr.Search(null, true) as ICursor;
            pDataStatistics.Cursor = pCursor;
            pDataStatistics.Field = "GDP_1999(";
            p2 = pDataStatistics.Statistics.Maximum;
            m2 = pDataStatistics.Statistics.Minimum;
            max = p1 > p2 ? p1 : p2;
            min = m1 + m2;//最小值之和

            //以下生成好三个SimpleFillSymbol,留作后用
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Color = getRGBColor(255, 0, 0);
            pSimpleFillSymbol.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol2 = new SimpleFillSymbolClass();
            pSimpleFillSymbol2.Color = getRGBColor(0, 0, 255);
            pSimpleFillSymbol2.Outline = null;
            ISimpleFillSymbol pSimpleFillSymbol3 = new SimpleFillSymbolClass();
            pSimpleFillSymbol3.Color = getRGBColor(0, 255, 0);

            //以下创建并设置PieChartSymbol对象,并设置PieChartSymbol对象的各个SimpleFillSymbol
            IPieChartSymbol pPieChartSymbol = new PieChartSymbolClass();
            pPieChartSymbol.Clockwise = true;
            pPieChartSymbol.UseOutline = false;
            IChartSymbol pChartSymbol = pPieChartSymbol as IChartSymbol;
            pChartSymbol.MaxValue = max;
            ISymbolArray pSymbolArray = pPieChartSymbol as ISymbolArray;
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol);
            pSymbolArray.AddSymbol((ISymbol)pSimpleFillSymbol2);
            IMarkerSymbol pMarkerSymbol = pPieChartSymbol as IMarkerSymbol;
            pMarkerSymbol.Size = 5;//PieChartSymbol的大小(我觉得是饼的厚度)

            //以下创建并设置着色对象
            IChartRenderer pChartRenderer = new ChartRendererClass();
            pChartRenderer.BaseSymbol = pSimpleFillSymbol3 as ISymbol;
            pChartRenderer.ChartSymbol = pChartSymbol;
            pChartRenderer.UseOverposter = true;
            pChartRenderer.Label = "GDP";
            IPieChartRenderer pPieChartRenderer = pChartRenderer as IPieChartRenderer;
            pPieChartRenderer.MinSize = 0.5;//最小的尺码关键
            pPieChartRenderer.MinValue = 1;//最小尺码的值,为什么0不可以??????????????关键
            pPieChartRenderer.ProportionalBySum = true;//PieChartSymbol的大小按照字段和成比例,关键
                                                       //若PieChartSymbol的大小只按一个字段,则须设置.ProportionalField为该字段
            IRendererFields pRenderFields = pChartRenderer as IRendererFields;//添加用于着色的字段
            pRenderFields.AddField("GDP_1994(", "GDP_1994(");
            pRenderFields.AddField("GDP_1999(", "GDP_1999(");
            pChartRenderer.CreateLegend();//生成图例

            pGeoFeatLyr.Renderer = pChartRenderer as IFeatureRenderer;
            this.mainMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
            this.axTOCControl.Update();
        }
Пример #6
0
        //PieChartRenderer
        private void button7_Click(object sender, EventArgs e)
        {
            IGeoFeatureLayer geoFeatureLayer;
            IFeatureLayer    featureLayer;
            ITable           table;
            ICursor          cursor;
            IRowBuffer       rowBuffer;
            //设置饼图的要素
            string field1 = "sqmi";
            string field2 = "sqkm";

            //获取渲染图层
            geoFeatureLayer = getGeoLayer("Continents");
            featureLayer    = geoFeatureLayer as IFeatureLayer;
            table           = featureLayer as ITable;
            geoFeatureLayer.ScaleSymbols = true;
            IChartRenderer    chartRenderer    = new ChartRendererClass();
            IPieChartRenderer pieChartRenderer = chartRenderer as IPieChartRenderer;
            IRendererFields   rendererFields   = chartRenderer as IRendererFields;

            rendererFields.AddField(field1, field1);
            rendererFields.AddField(field2, field2);
            int[] fieldIndexs = new int[2];
            fieldIndexs[0] = table.FindField(field1);
            fieldIndexs[1] = table.FindField(field2);
            //获取渲染要素的最大值
            double fieldValue = 0.0, maxValue = 0.0;

            cursor    = table.Search(null, true);
            rowBuffer = cursor.NextRow();
            while (rowBuffer != null)
            {
                for (int i = 0; i < 2; i++)
                {
                    fieldValue = double.Parse(rowBuffer.get_Value(fieldIndexs[i]).ToString());
                    if (fieldValue > maxValue)
                    {
                        maxValue = fieldValue;
                    }
                }
                rowBuffer = cursor.NextRow();
            }
            //设置饼图符号
            IPieChartSymbol pieChartSymbol = new PieChartSymbolClass();

            pieChartSymbol.Clockwise  = true;
            pieChartSymbol.UseOutline = true;
            IChartSymbol chartSymbol       = pieChartSymbol as IChartSymbol;

            chartSymbol.MaxValue = maxValue;
            ILineSymbol lineSymbol = new SimpleLineSymbolClass();

            lineSymbol.Color       = getRGB(255, 0, 0);
            lineSymbol.Width       = 2;
            pieChartSymbol.Outline = lineSymbol;
            IMarkerSymbol markerSymbol = pieChartSymbol as IMarkerSymbol;

            markerSymbol.Size = 30;
            //添加渲染符号
            ISymbolArray symbolArray = pieChartSymbol as ISymbolArray;
            IFillSymbol  fillSymbol  = new SimpleFillSymbolClass();

            fillSymbol.Color = getRGB(0, 255, 0);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            fillSymbol       = new SimpleFillSymbolClass();
            fillSymbol.Color = getRGB(0, 0, 255);
            symbolArray.AddSymbol(fillSymbol as ISymbol);
            chartRenderer.ChartSymbol = pieChartSymbol as IChartSymbol;
            fillSymbol                  = new SimpleFillSymbolClass();
            fillSymbol.Color            = getRGB(100, 100, 100);
            chartRenderer.BaseSymbol    = fillSymbol as ISymbol;
            chartRenderer.UseOverposter = false;
            //创建图例
            chartRenderer.CreateLegend();
            geoFeatureLayer.Renderer = chartRenderer as IFeatureRenderer;
            this.axMapControl1.Refresh();
        }
Пример #7
0
 private void method_4()
 {
     if (this.igeoFeatureLayer_0 == null)
     {
         this.ichartRenderer_0 = null;
     }
     else
     {
         IChartRenderer pInObject = this.igeoFeatureLayer_0.Renderer as IChartRenderer;
         if (pInObject == null)
         {
             if (this.ichartRenderer_0 == null)
             {
                 this.ichartRenderer_0 = new ChartRendererClass();
                 if (this.int_0 == 0)
                 {
                     this.ichartRenderer_0.ChartSymbol = new PieChartSymbolClass();
                 }
                 else if (this.int_0 == 1)
                 {
                     this.ichartRenderer_0.ChartSymbol = new BarChartSymbolClass();
                 }
                 else
                 {
                     this.ichartRenderer_0.ChartSymbol = new StackedChartSymbolClass();
                 }
                 (this.ichartRenderer_0.ChartSymbol as IMarkerSymbol).Size = 32.0;
             }
         }
         else
         {
             IObjectCopy copy = new ObjectCopyClass();
             this.ichartRenderer_0 = copy.Copy(pInObject) as IChartRenderer;
             IChartSymbol chartSymbol = this.ichartRenderer_0.ChartSymbol;
             IChartSymbol symbol2     = null;
             if (this.int_0 == 0)
             {
                 if (!(chartSymbol is IPieChartSymbol))
                 {
                     symbol2 = new PieChartSymbolClass();
                 }
             }
             else if (this.int_0 == 1)
             {
                 if (!(chartSymbol is IBarChartSymbol))
                 {
                     symbol2 = new BarChartSymbolClass();
                 }
             }
             else if ((this.int_0 == 2) && !(chartSymbol is IStackedChartSymbol))
             {
                 symbol2 = new StackedChartSymbolClass();
             }
             if (symbol2 != null)
             {
                 ISymbolArray array = chartSymbol as ISymbolArray;
                 for (int i = 0; i < array.SymbolCount; i++)
                 {
                     (symbol2 as ISymbolArray).AddSymbol(array.get_Symbol(i));
                 }
                 this.ichartRenderer_0.ChartSymbol = symbol2;
             }
         }
     }
 }
        private void btn_OK_Click(object sender, EventArgs e)
        {
            string LayerName = cbx_Layer.SelectedItem.ToString();

            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)m_FeatureLayer;
            ITable           pTable           = (ITable)pGeoFeatureLayer;
            ICursor          pCursor          = pTable.Search(null, true);

            int numFields = lstbx_RightFields.Items.Count;

            string[] fildName      = new string[numFields];
            int[]    fieldIndecies = new int[numFields];

            for (int i = 0; i < numFields; i++)
            {
                if (lstbx_RightFields.Items[i].ToString() != "None")
                {
                    fildName[i]      = lstbx_RightFields.Items[i].ToString();
                    fieldIndecies[i] = pTable.FindField(fildName[i]);
                }
                else
                {
                    MessageBox.Show("不可用的字段,请选择其它图层");
                    return;
                }
            }
            //fieldIndecies[0] = pTable.FindField(strPopField1);
            //fieldIndecies[1] = pTable.FindField(strPopField2);
            bool   firstValue = true;
            double dmaxValue  = 0.0;
            //Iterate across each feature
            IRowBuffer pRowBuffer = pCursor.NextRow();
            double     dfieldValue;

            while (pRowBuffer != null)
            {
                // iterate  through each data field and update the maxVal if needed
                for (int lfieldIndex = 0; lfieldIndex <= numFields - 1; lfieldIndex++)
                {
                    dfieldValue = (double)pRowBuffer.get_Value(fieldIndecies[lfieldIndex]);
                    if (firstValue)
                    {
                        // Special case for the first value in a feature class
                        dmaxValue  = dfieldValue;
                        firstValue = false;
                    }
                    else
                    {
                        if (dfieldValue > dmaxValue)
                        {
                            // we've got a new biggest value
                            dmaxValue = dfieldValue;
                        }
                    }
                }
                pRowBuffer = pCursor.NextRow();
            }
            if (dmaxValue <= 0)
            {
                MessageBox.Show("Failed to gather stats on the feature class");
                return;
            }

            IChartRenderer pChartRenderer = new ChartRendererClass();
            //Set up the fields to draw charts of
            IRendererFields pRendererFields = (IRendererFields)pChartRenderer;

            for (int i = 0; i < numFields; i++)
            {
                pRendererFields.AddField(fildName[i], fildName[i]);
            }


            // Set up the chart marker symbol to use with the renderer
            IPieChartSymbol pPieChartSymbol;

            pPieChartSymbol = new PieChartSymbolClass();
            //饼图使用顺时针方法
            pPieChartSymbol.Clockwise = true;
            //饼图有外轮廓线
            pPieChartSymbol.UseOutline = true;
            IChartSymbol pChartSymbol = (IChartSymbol)pPieChartSymbol;

            pChartSymbol.MaxValue = dmaxValue;
            ILineSymbol pOutline;

            pOutline       = new SimpleLineSymbolClass();
            pOutline.Color = getRGB(213, 212, 252);
            pOutline.Width = 1;
            //设置外轮廓线的样式
            pPieChartSymbol.Outline = pOutline;
            IMarkerSymbol pMarkerSymbol = (IMarkerSymbol)pPieChartSymbol;

            pMarkerSymbol.Size = 8;

            IColorRamp pColorRamp = (IColorRamp)m_StyleGallertItem.Item;

            pColorRamp.Size = pTable.RowCount(null);

            bool ok = true;

            pColorRamp.CreateRamp(out ok);
            IEnumColors  pEnumRamp = pColorRamp.Colors;
            IFillSymbol  pFillSymbol;
            ISymbolArray pSymbolArray = (ISymbolArray)pPieChartSymbol;

            for (int i = 0; i < numFields; i++)
            {
                pFillSymbol = new SimpleFillSymbolClass();
                for (int j = 0; j < 8; j++)
                {
                    pEnumRamp.Next();
                }
                pFillSymbol.Color = pEnumRamp.Next();
                pSymbolArray.AddSymbol((ISymbol)pFillSymbol);
            }


            //Now set the barchart symbol into the renderer
            pChartRenderer.ChartSymbol = (IChartSymbol)pPieChartSymbol;
            // pChartRenderer.Label = "Population";

            //set up the background symbol to use tan color
            pFillSymbol                  = new SimpleFillSymbolClass();
            pFillSymbol.Color            = m_BackGroundColor;
            pChartRenderer.BaseSymbol    = (ISymbol)pFillSymbol;
            pChartRenderer.UseOverposter = false;

            IPieChartRenderer pPieChartRenderer = pChartRenderer as IPieChartRenderer;

            pPieChartRenderer.MinSize = 3;
            //设置最小值,用于尺寸比例
            pPieChartRenderer.MinValue             = 453588;
            pPieChartRenderer.FlanneryCompensation = false;
            pPieChartRenderer.ProportionalBySum    = true;
            //pChartRenderer.Label = "Population";
            //产生图例对象
            pChartRenderer.CreateLegend();
            //pdate the renderer and refresh the screen
            pGeoFeatureLayer.Renderer = (IFeatureRenderer)pChartRenderer;
            m_MapControl.ActiveView.ContentsChanged();
            m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }