×
您的位置: 首页 > 编程笔记

《ArcGIS Engine+C#实例开发教程》第七讲 图层符号选择器的实现

C# ArcGIS AR 时间:2010-12-26  查看:545   收藏
摘要:我们要实现的是图层符号选择器,与ArcMap中的Symbol Selector的类似。本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器。

教程目录:

第一讲 桌面GIS应用程序框架的建立

第二讲 菜单的添加及其实现

第三讲 MapControl与PageLayoutControl同步

第四讲 状态栏信息的添加与实现

第五讲 鹰眼的实现

第六讲 右键菜单添加与实现

教程Bug及优化方案1

第七讲 图层符号选择器的实现1

第七讲 图层符号选择器的实现2

第八讲 属性数据表的查询显示

------------------------------------------------------------------

在上一讲中,我们实现了右键菜单(ContextMenu)的添加与实现,在最后我预留给下一讲的问题是TOCControl控件图层拖拽的实现。后来发现此功能的实现异常简单,只要在TOCControl的属性页中,勾选“Enable Layer Drag and Drop”即可。 这一讲,我们要实现的是图层符号选择器,与ArcMap中的Symbol Selector的类似。本讲较前几讲而言,些许有些复杂,不过只要仔细琢磨,认真操作,你就很容易实现如下所示的符号选择器。因为本讲篇幅较长,故我将其分成两个阶段,本文是第一阶段。 1 AE开发中,符号选择器有两种实现方式。 一是在程序中直接调用ArcMap中的符号选择器,如下所示: 2 二是自定义符号选择器,如图1所示。 由于第一种方式前提是必须安装ArcGIS Desktop,其界面还是英文的,而对二次开发来说,大部分用户希望应该是中文界面。因此开发人员通常选择第二种方式,本讲也着重讲解第二种方式。 通过对《ArcGIS Engine+C#实例开发教程》前六讲的学习,我已经假定你已经基本熟悉C#语言和VS2005的操作,故在下面的教程中,我不准备说明每一步骤的具体操作方法,而只是说明操作步骤,以节省时间和篇幅。

1. 直接调用ArcMap中的符号选择器 1)添加ESRI.ArcGIS.DisplayUI的引用。 分别在解决方案管理器和代码中添加引用。 2)添加TOCControlDouble_Click事件。 3)实现TOCControlDouble_Click事件。 因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容理解。代码如下: { esriTOCControlItem toccItem = esriTOCControlItem.esriTOCControlItemNone; ILayer iLayer = null; IBasicMap iBasicMap = null; object unk = null; object data = null; if (e.button == 1) { axTOCControl1.HitTest(e.x, e.y, ref toccItem, ref iBasicMap, ref iLayer, ref unk, ref data); System.Drawing.Point pos = new System.Drawing.Point(e.x, e.y); if (toccItem == esriTOCControlItem.esriTOCControlItemLegendClass) { ESRI.ArcGIS.Carto.ILegendClass pLC = new LegendClassClass(); ESRI.ArcGIS.Carto.ILegendGroup pLG = new LegendGroupClass(); if (unk is ILegendGroup) { pLG = (ILegendGroup)unk; } pLC = pLG.get_Class((int)data); ISymbol pSym; pSym = pLC.Symbol; ESRI.ArcGIS.DisplayUI.ISymbolSelector pSS = new ESRI.ArcGIS.DisplayUI.SymbolSelectorClass(); bool bOK = false; pSS.AddSymbol(pSym); bOK = pSS.SelectSymbol(0); if (bOK) { pLC.Symbol = pSS.GetSymbolAt(0); } this.axMapControl1.ActiveView.Refresh(); this.axTOCControl1.Refresh(); } } } 4)编译运行即可。

[1] [2] [3] [4] 下一页

 

0% (0)
0% (0)