using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
namespace AE01_12
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //ɫ
        public IRgbColor getRGB(int r, int g, int b, byte t)
        {
            IRgbColor pRgbColor = new RgbColorClass();
            pRgbColor.Red = r;
            pRgbColor.Green = g;
            pRgbColor.Blue = b;
            pRgbColor.Transparency = t;//͸
            return pRgbColor;
        }
        //ֹɫ
        public IColorRamp createAlgorithmicColorRamp(int r)
        {
            IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();
            IRgbColor fromColor = getRGB(255, 0, 0, 1);
            IRgbColor toColor = getRGB(255, 100, 0, 1);
            pAlgorithmicColorRamp.ToColor = fromColor;
            pAlgorithmicColorRamp.FromColor = toColor;
            pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;
            pAlgorithmicColorRamp.Size = r;
            bool btrue = true;
            pAlgorithmicColorRamp.CreateRamp(out btrue);
            return pAlgorithmicColorRamp;
        }

        //ͼ
        public IGeoFeatureLayer getGeoLayer(string name)
        {
            ILayer pLayer = null;
            IGeoFeatureLayer pGeoFeatureLayer = null;
            for (int i = 0; i < axMapControl1.LayerCount;i++ )
            {
                pLayer = axMapControl1.Map.get_Layer(i);
                if(pLayer!=null && pLayer.Name.ToLower()==name)
                {
                    pGeoFeatureLayer = pLayer as IGeoFeatureLayer;
                    return pGeoFeatureLayer;
                }
            }
            return null;
        }
        //ΨһֵȾķ
        public void uniqueVauleRenderer(string layername,string fieldname)
        {
            IGeoFeatureLayer pGeoFeatureLayer = null;
            pGeoFeatureLayer = getGeoLayer(layername);
            IUniqueValueRenderer pUniqueValueRender = new UniqueValueRendererClass();//Ψһֵӿ
            pUniqueValueRender.FieldCount = 1;
            pUniqueValueRender.set_Field(0, fieldname);
            ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
            pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;
            IFeatureCursor pFeatureCursor = pGeoFeatureLayer.FeatureClass.Search(null, false);
            IFeatureCursor pFeatureCursor1 = pGeoFeatureLayer.FeatureClass.Search(null, false);
            IFeature pFeature = null;
            pFeature = pFeatureCursor1.NextFeature();
            int sum = 0;
            while (pFeature != null)
            {
                sum++;
                pFeature = pFeatureCursor1.NextFeature();
            }
            //MessageBox.Show(sum.ToString());
            if (pFeatureCursor != null)
            {
                IEnumColors pEnumColors = createAlgorithmicColorRamp(sum).Colors;
                int fieldIndex = pGeoFeatureLayer.FeatureClass.Fields.FindField(fieldname);
                for (int i = 0; i < sum; i++)
                {
                    pFeature = pFeatureCursor.NextFeature();
                    string nameValue = pFeature.get_Value(fieldIndex).ToString();
                    pSimpleFillSymbol = new SimpleFillSymbolClass();
                    pSimpleFillSymbol.Color = pEnumColors.Next();
                    ISymbol pSymbol = pSimpleFillSymbol as ISymbol;
                    pUniqueValueRender.AddValue(nameValue, fieldname, pSymbol);
                }
            }
            pGeoFeatureLayer.Renderer = pUniqueValueRender as IFeatureRenderer;
            axMapControl1.Refresh();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor1);
        }
        private void ΨһֵȾToolStripMenuItem_Click(object sender, EventArgs e)
        {
            uniqueVauleRenderer("world", "continent");
        }
    }
}
