⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layerpropertiescontrol.cs

📁 具有浏览图层信息功能 打开图层信息 以数据表的形式浏览 修改
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Geometry;

namespace LayerPropertiesControl
{
    public partial class AxLayerPropertiesControl : UserControl
    {
        private IMapControl2 m_pMapControl;
        /// <summary>
        /// //////////////////////////////////////////
        /// </summary>
        private bool hasInitaled=false;//初始化状态
        private bool hasChanged_AliasName = false;
        public IMapControl4 MapControl
        {
            set
            {
                m_pMapControl = value;
                if (m_pMapControl == null)
                {
                    throw new ArgumentNullException();
                }
                InitLayerGridView();      
            }
        }

       /// <summary>
       /// ///////////////////////////////////////////////
       /// </summary>
        public AxLayerPropertiesControl()
        {
            InitializeComponent();
        }

        private void AxLayerPropertiesControl_Load(object sender, EventArgs e)
        {
            hasInitaled = true;
        }

        public void InitLayerGridView()
        {
            layerGridView.Rows.Clear();
            //////////////////////////////
            ILayer pLayer;
            for (int i = 0; i < m_pMapControl.LayerCount; i++)
            {
                pLayer = m_pMapControl.get_Layer(i);
                IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;
                string strName = (pFeatureLayer.FeatureClass as IDataset).Name;  //图层名
                string strAliasName = pFeatureLayer.FeatureClass.AliasName;      //图层别名
                bool isSelectalbe = pFeatureLayer.Selectable;                    //图层是否可选
                bool isVisible = pFeatureLayer.Visible;                          //图层是否可见
                IDataset pDataset=pFeatureLayer.FeatureClass as IDataset;
                string strDataSource=pDataset.Workspace.PathName;                //数据路径

                //图层符号样式
                Bitmap bm = StyleGalleryItemToBmp(30, 20,pLayer);

                object[] obj ={ strName, strAliasName, isVisible,isSelectalbe,  bm, strDataSource };
                layerGridView.Rows.Add(obj);
            }
        }
        private void layerGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            //事件处理程序调用 CommitEdit 方法以引发 CellValueChanged 事件,并确定 DataGridViewCheckBoxCell 的当前值。
            layerGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
        }

        private void layerGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
           
            if (hasInitaled)
            {
                if (e.ColumnIndex == 2)
                {
                    bool isVisible;
                    isVisible = (bool)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    m_pMapControl.get_Layer(e.RowIndex).Visible = isVisible;
                    m_pMapControl.ActiveView.Refresh();
                }
                if (e.ColumnIndex==3)
                {
                    bool isSelectalbe;
                    isSelectalbe = (bool)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    IFeatureLayer pFeatureLayer = m_pMapControl.get_Layer(e.RowIndex) as IFeatureLayer;
                    pFeatureLayer.Selectable = isSelectalbe;
                }
                if (e.ColumnIndex == 1)
                {
                    hasChanged_AliasName = true;
                }
            }          
        }
        private void layerGridView_CellLeave(object sender, DataGridViewCellEventArgs e)
        {
            //对于文本的修改使用CellLeave事件。其中加入了有关文本内容是否改变的验测,使用了变量hasChanged_AliasName。
            if (e.ColumnIndex == 1&&hasChanged_AliasName)
            {
                string strNewAliasName;
                IFeatureLayer pFeatureLayer;
                IClassSchemaEdit pClassSchemaEdit;
                strNewAliasName = (string)layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                pFeatureLayer = m_pMapControl.get_Layer(e.RowIndex) as IFeatureLayer;
                if (strNewAliasName != null)
                {
                    
                    pClassSchemaEdit = pFeatureLayer.FeatureClass as IClassSchemaEdit;
                    pClassSchemaEdit.AlterAliasName(strNewAliasName);
                }
                else
                {
                    layerGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = pFeatureLayer.FeatureClass.AliasName;
                }
                hasChanged_AliasName = false;
            }
        }
        //private Image SymbolToPicture(ILayer layer)
        //{
        //    IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
        //    IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;
        //    ISimpleRenderer pSimpleRenderer = (ISimpleRenderer)pGeoFeatureLayer.Renderer;
        //    ISymbol pSybol = pSimpleRenderer.Symbol;

        //    IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem();
        //    pStyleGalleryItem.Item = pSybol;

        //    esriSymbologyStyleClass pStyleClass=new esriSymbologyStyleClass();
        //    switch (pFeatureLayer.FeatureClass.ShapeType)
        //    {
        //        case esriGeometryType.esriGeometryPoint:
        //            pStyleClass = esriSymbologyStyleClass.esriStyleClassMarkerSymbols;
        //            break;
        //        case esriGeometryType.esriGeometryPolyline:
        //            pStyleClass=esriSymbologyStyleClass.esriStyleClassLineSymbols;
        //            break;
        //        case esriGeometryType.esriGeometryPolygon:
        //            pStyleClass = esriSymbologyStyleClass.esriStyleClassFillSymbols;
        //            break;
        //        default: break;
        //    }

        //    ISymbologyStyleClass pSymbologyStyleClass = axSymbologyControl1.GetStyleClass(pStyleClass);

        //    //显示符号的图象
        //    stdole.IPictureDisp picture = pSymbologyStyleClass.PreviewItem(pStyleGalleryItem,40, 20);//pictureBox1.Width, pictureBox1.Height);
        //    System.Drawing.Image image = System.Drawing.Image.FromHbitmap(new System.IntPtr(picture.Handle));
        //    return image;
        //}
        private System.Drawing.Bitmap StyleGalleryItemToBmp(
            int iWidth,
            int iHeight,
            ILayer layer)
        {
            IFeatureLayer pFeatureLayer = layer as IFeatureLayer;
            IGeoFeatureLayer pGeoFeatureLayer = (IGeoFeatureLayer)pFeatureLayer;

            ISimpleRenderer pSimpleRenderer = pGeoFeatureLayer.Renderer  as ISimpleRenderer;
            if (pSimpleRenderer == null)
            {
                return null;
            }
            ISymbol pSybol = pSimpleRenderer.Symbol;


            IStyleGalleryItem pStyleGalleryItem = new ServerStyleGalleryItem();
            pStyleGalleryItem.Item = pSybol;
            IStyleGalleryClass pStyleGalleryClass = null;
            switch (pFeatureLayer.FeatureClass.ShapeType)
            {
                case esriGeometryType.esriGeometryPoint:
                    pStyleGalleryClass = new MarkerSymbolStyleGalleryClassClass();
                    break;
                case esriGeometryType.esriGeometryPolyline:
                    pStyleGalleryClass = new LineSymbolStyleGalleryClassClass();
                    break;
                case esriGeometryType.esriGeometryPolygon:
                    pStyleGalleryClass = new FillSymbolStyleGalleryClassClass();
                    break;
                default: break;
            }

            Bitmap bmp = new Bitmap(iWidth, iHeight);
            Graphics gImage = Graphics.FromImage(bmp);

            ESRI.ArcGIS.Display.tagRECT rect = new ESRI.ArcGIS.Display.tagRECT();
            rect.right = bmp.Width;
            rect.bottom = bmp.Height;
            //生成预览
            System.IntPtr hdc = new IntPtr();
            hdc = gImage.GetHdc();
            pStyleGalleryClass.Preview(pStyleGalleryItem.Item, hdc.ToInt32(), ref rect);
            gImage.ReleaseHdc(hdc);
            gImage.Dispose();

            return bmp;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -