利用ClassBreaksRenderer对线型图层着色,可是最后图层都不见了

public override void OnClick()
        {
            IGeoFeatureLayer pGeoFeatureL;
            ITable pTable;
            IClassifyGEN pClassify;
            ITableHistogram pTableHistogram;
            IBasicHistogram pHistogram;
            object dataFrequency;
            object dataValues;
            double[] Classes;
            //double[] Classes = new double[5];
            //Classes[0] = 100; Classes[1] = 300; Classes[2] = 600; Classes[3] = 800; Classes[4] = 1800;
            int ClassesCount;
            IClassBreaksRenderer pClassBreaksRenderer;
            IHsvColor pFromColor;
            IHsvColor pToColor;
            IAlgorithmicColorRamp pAlgorithmicCR;
            IEnumColors pEnumColors;
            bool ok;
            IColor pColor;
            ISimpleFillSymbol pSimpleFillS;
            int IbreakIndex;
            string strPopField = "Physical_PipeDiameter";//管径
            int numDesiredClasses = 5;

            //获得要着色的图层
            pActiveView = m_hookHelper.ActiveView;
            pMap = m_hookHelper.FocusMap;
            pMap.ReferenceScale = 0;
            pGeoFeatureL = (IGeoFeatureLayer)pMap.get_Layer(0);
            pTable = (ITable)pGeoFeatureL.FeatureClass;
            //从pTable的"Physical_PipeDiameter"字段中得到信息给dataValues和dataFrequency两个数组
            pTableHistogram = new BasicTableHistogramClass();
            pHistogram = (IBasicHistogram)pTableHistogram;
            pTableHistogram.Field = strPopField;
            pTableHistogram.Table = pTable;
            pHistogram.GetHistogram(out dataValues,out dataFrequency);
            //下面是分级方法,用于根据获得的值计算得出符合要求的数据
            //根据条件计算出Classes和ClassesCount,5为分级数目
            pClassify = new EqualIntervalClass();
            try
            {
                pClassify.Classify(dataValues,dataFrequency,ref numDesiredClasses);
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            //返回一个数组
            Classes = (double[])pClassify.ClassBreaks;
            ClassesCount = Classes.GetUpperBound(0);
            //ClassesCount = Classes.Length;
            pClassBreaksRenderer = new ClassBreaksRendererClass();
            pClassBreaksRenderer.Field = strPopField;
            //设置着色对象的分级数目
            pClassBreaksRenderer.BreakCount = ClassesCount;
            pClassBreaksRenderer.SortClassesAscending = true;
            //产生分级着色需要的颜色带对象的起止颜色对象
            pFromColor = new HsvColorClass();
            pFromColor.Hue = 60;//Yellow
            pFromColor.Saturation = 100;
            pFromColor.Value = 96;
            pToColor = new HsvColorClass();
            pToColor.Hue = 0;
            pToColor.Saturation = 100;
            pToColor.Value = 96;
            //产生颜色带对象
            pAlgorithmicCR = new AlgorithmicColorRampClass();
            pAlgorithmicCR.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;
            pAlgorithmicCR.FromColor = pFromColor;
            pAlgorithmicCR.ToColor = pToColor;
            pAlgorithmicCR.Size = ClassesCount;
            pAlgorithmicCR.CreateRamp(out ok);
            //获得颜色
            pEnumColors = pAlgorithmicCR.Colors;
            //需要注意的是分级着色对象中的symbol和break的下标都是从0开始
            for (IbreakIndex = 0; IbreakIndex <= ClassesCount - 1; IbreakIndex++)
            {
                pColor = pEnumColors.Next();
                pSimpleFillS = new SimpleFillSymbolClass();
                pSimpleFillS.Color = pColor;
                //pSimpleFillS.Style = esriSimpleFillStyle.esriSFSSolid;
                //这里就是构造不同颜色着色的方法
                pClassBreaksRenderer.set_Symbol(IbreakIndex,(ISymbol)pSimpleFillS);
                //着色对象的断点
                pClassBreaksRenderer.set_Break(IbreakIndex,Classes[IbreakIndex+1]);
            }
            pGeoFeatureL.Renderer = (IFeatureRenderer)pClassBreaksRenderer;
            pActiveView.Refresh();
        }
已邀请:

朱新颖

赞同来自: why小飞

您是对线要素类进行渲染,怎么用到了ISimpleFillSymbol?ISimpleFillSymbol是对面要素进行渲染的,您改用ISimpleLineSymbol试试。

why小飞

赞同来自:

谢谢,我试下哈

why小飞

赞同来自:

真的很感谢你,我是刚入门的新手,用了你的建议试了,问题解决了,谢谢

朱新颖

赞同来自:

不客气哈 

要回复问题请先登录注册