ArcGIS Engine(9)

2020-02-21 18:22

private void axTOCControl1_OnMouseDown(object sender, ITOCControlEvents_OnMouseDownEvent e) {

//如果不是右键按下直接返回

if (e.button != 2) return;

esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;

IBasicMap map = null;

ILayer layer = null;

object other = null;

object index = null;

//判断所选菜单的类型

m_tocControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index);

//确定选定的菜单类型,Map或是图层菜单

if (item == esriTOCControlItem.esriTOCControlItemMap)

m_tocControl.SelectItem(map, null);

else

m_tocControl.SelectItem(layer, null);

//设置CustomProperty为layer (用于自定义的Layer命令)

m_mapControl.CustomProperty = layer;

//弹出右键菜单

if (item == esriTOCControlItem.esriTOCControlItemMap)

m_menuMap.PopupMenu(e.x, e.y, m_tocControl.hWnd);

if (item == esriTOCControlItem.esriTOCControlItemLayer)

m_menuLayer.PopupMenu(e.x, e.y, m_tocControl.hWnd); }

同样的方法,我们也可以实现主地图控件的右键菜单,以方便地图浏览。添加MapControl1控件的OnMouseDown事件,实现代码如下:

///

/// 主地图控件的右键响应函数

///

///

///

private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) {

if (e.button == 2)

{

//弹出右键菜单

m_menuMap.PopupMenu(e.x,e.y,m_mapControl.hWnd);

} }

4、编译运行

按F5编译运行程序,你会发现,原来右键菜单实现起来是这么的简单啊!

下一讲中,我将给大家带的是TOCControl控件中图层拖拽(Drag and Drop)的实现。

ArcGIS Engine+C#实例开发教程》教程Bug及优化方案1

到第六讲为止已经发现的教程Bug及解决方法如下: 1、在第二讲可能会出现变量未定义。

原因:第二讲与第三讲联系紧密,我为控制篇幅才将其分为两讲,某些变量是在第三讲才进行定义,请大家注意。 2、第六讲弹不出TOCControl的右键菜单

原因:没有取得m_tocControl的指针,即没有把m_tocControl指针与axTOCControl1控件绑定,导致调用m_menuMap.PopupMenu(e.x, e.y, m_tocControl.hWnd);时m_tocControl.hWnd为NULL,故无法弹出菜单。 解决方法:在Form1_Load()函数中,添加如下代码: m_tocControl = (ITOCControl2)this.axTOCControl1.Object; 目前已经发现的优化方案如下:

1、教程第四讲,坐标单位前面的esri,原用switch语句逐一替换,其实直接用取子串(Substring)的方法截去更方便。 修改代码如下:

CoordinateLabel.Text = \当前坐标 X = \+ e.mapX.ToString() + \Y = \+ e.mapY.ToString() + \\+ this.axMapControl1.MapUnits.ToString().Substring(4);

2、教程第四讲,固定状态栏中的比例尺和当前坐标项目的宽度以防止闪烁。 方法如下:

选中状态栏中的比例尺或当前坐标项目,把其autoSize属性设为False,再在Size属性里设置宽度。经测试,比例尺宽度为150,当前坐标宽度为400比较合适。

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

在上一讲中,我们实现了右键菜单(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)添加TOCControl的Double_Click事件。

(3)实现TOCControl的Double_Click事件。

因为种方法不是本讲的重点,故不对代码进行分析,有兴趣的读者请自行理解或结合后面的内容理解。代码如下: private void axTOCControl1_OnDoubleClick(object sender, ITOCControlEvents_OnDoubleClickEvent e) {

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)编译运行即可。

2. 自定义符号选择器

AE9.2提供了SymbologyControl控件,极大的方便了图层符号选择器的制作。本讲实现的符号选择器有如下功能。

用户双击TOCControl控件中图层的符号时,弹出选择符号对话框,对话框能够根据图层类型自动加载相应的符号,如点、线、面。用户可以调整符号的颜色、线宽、角度等参数。还可以打开自定义的符号文件(*.ServerStyle),加载更多的符号。

2.1 新建符号选择器窗体

新建Winodws窗体,命名为SymbolSelectorFrm,修改窗体的Text属性为“选择符号”。并添加SymboloryControl、PictureBox、Button、Label、NumericUpDown、GroupBox、ColorDialog、OpenFileDialog、ContextMenuStrip控件。控件布局如下所示:


ArcGIS Engine(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:审计案例分析及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: