www.pudn.com > ArcgisMapOperation.rar > UserColorSetting.cs


using System; 
using System.Collections.Generic; 
using System.Text; 
 
using ESRI.ArcGIS.Carto; 
using ESRI.ArcGIS.Display; 
using ESRI.ArcGIS.Geodatabase; 
using ESRI.ArcGIS.Geometry; 
using ArcgisMapOperation.Common; 
 
namespace ArcgisMapOperation.EsriLib 
{ 
    public class UserColorSetting 
    { 
        ///  
        /// 为层设置颜色 
        ///  
        ///  
        ///  
        public void SetLayerColor(IFeatureLayer pLayer, IColor color) 
        { 
            ISymbol pSym=null; 
            ISimpleRenderer pRen; 
 
            //根据layer类型设置不同的Symbol和颜色  
            switch (pLayer.FeatureClass.ShapeType) 
            { 
                case esriGeometryType.esriGeometryPoint: 
 
                    IMarkerSymbol pPointSym = GetLayerSymbol(pLayer) as IMarkerSymbol; 
                    pPointSym.Color = color; 
                    pSym = pPointSym as ISymbol; 
 
                    break; 
 
                case esriGeometryType.esriGeometryPolyline: 
 
                    ILineSymbol pLineSym = GetLayerSymbol(pLayer) as ILineSymbol; 
                    pLineSym.Color = color; 
                    pSym = pLineSym as ISymbol; 
 
                    break; 
 
                case esriGeometryType.esriGeometryPolygon: 
 
                    IFillSymbol pPolygonSym = GetLayerSymbol(pLayer) as IFillSymbol; 
 
                    if( pPolygonSym==null) 
                    { 
                        pPolygonSym = new SimpleFillSymbol(); 
                    } 
 
                    pPolygonSym.Color = color; 
                    pSym = pPolygonSym as ISymbol; 
                     
                    break; 
            } 
 
            pRen = new SimpleRenderer(); 
            pRen.Symbol = pSym; 
 
            IGeoFeatureLayer pGeoLayer = pLayer as IGeoFeatureLayer; 
            pGeoLayer.Renderer = pRen as IFeatureRenderer; 
        } 
 
        ///  
        /// 获取层的符号 
        ///  
        ///  
        ///  
        public ISymbol GetLayerSymbol(IFeatureLayer pLayer) 
        { 
            IFeatureRenderer pRen; 
            IGeoFeatureLayer pGeoLayer; 
            IFeature pFea; 
            IFeatureCursor pCursor; 
 
            pGeoLayer = pLayer as IGeoFeatureLayer; 
            pRen = pGeoLayer.Renderer; 
            pCursor = pLayer.FeatureClass.Search(null, false); 
 
            //得到FeatureClass中的第一个Feature  
            pFea = pCursor.NextFeature(); 
 
            if (pFea == null) 
            { 
                while (pFea == null) 
                { 
                    pFea = pCursor.NextFeature(); 
                } 
            } 
 
            //得到featurelayer使用的Symbol  
            return pRen.get_SymbolByFeature(pFea); 
        } 
    } 
}