||
设计菜单,实现鼠标与地图控件的互操作。包括拉框放大、画/删除点线面元素(element)、框选地图要素、清除所选地图要素等。
首先,定义一个方法,包括不同的互操作类型。
public void OperGeoMap() { IMap pMap = axMapControl1.Map; IActiveView pActiveview = pMap as IActiveView; IEnvelope pEnv; switch (strOperType) { case "LKZoomIn": { axMapControl1.Extent = axMapControl1.TrackRectangle(); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null); break; } case "DrawPolygon": { //新建多边形对象 IPolygon pPolygon = axMapControl1.TrackPolygon() as IPolygon; //产生一个SimpleFillSymbol符号,使多边形有填充颜色和边框 ISimpleFillSymbol pSimpleFillSym = new SimpleFillSymbolClass(); pSimpleFillSym.Style = esriSimpleFillStyle.esriSFSDiagonalCross; pSimpleFillSym.Color = GetRGB(220, 112, 60); //产生一个PolygonElement对象 IFillShapeElement pPolygonEle = new PolygonElementClass(); pPolygonEle.Symbol = pSimpleFillSym; IElement pEle = pPolygonEle as IElement; pEle.Geometry = pPolygon; //将元素添加到Map对象中 IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pEle, 0); pActiveview.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); break; } case "SelectMap"://数据选择 { pEnv = axMapControl1.TrackRectangle();//得到一个Envelope对象 //新建选择集环境对象 ISelectionEnvironment pSelectionEnv = new SelectionEnvironmentClass(); pSelectionEnv.DefaultColor = GetRGB(110, 120, 210); //选择要素,并将其放入选择集 axMapControl1.Map.SelectByShape(pEnv, pSelectionEnv, false); axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null); break; } case "ClearMap": { axMapControl1.Map.ClearSelection(); axMapControl1.ActiveView.Refresh(); break; } default: break; } }
其次,新建一些菜单,包括拉框放大、绘制多边形、数据选择、清除数据选择、取消操作、清除绘制的元素等。
最后在新建的各个菜单代码里输入调用预定义方法的代码。如下:
private void 拉框放大ToolStripMenuItem_Click(object sender, EventArgs e) { strOperType = "LKZoomIn"; this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerZoomIn; } private void 绘制多边形ToolStripMenuItem_Click(object sender, EventArgs e) { trOperType = "DrawPolygon"; this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair; } private void 数据选择ToolStripMenuItem_Click(object sender, EventArgs e) { strOperType = "SelectMap"; this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerArrow; } private void 清除数据选择ToolStripMenuItem_Click(object sender, EventArgs e) { strOperType = "ClearMap"; this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerArrow; OperGeoMap(); } private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (strOperType == string.Empty) return; OperGeoMap(); } private void 取消操作ToolStripMenuItem_Click(object sender, EventArgs e) { strOperType = string.Empty; } private void 清除绘制的元素ToolStripMenuItem_Click(object sender, EventArgs e) { strOperType = string.Empty; this.axMapControl1.MousePointer = esriControlsMousePointer.esriPointerArrow; IMap pMap = axMapControl1.Map; IActiveView pActiveview = pMap as IActiveView; IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.DeleteAllElements(); axMapControl1.ActiveView.Refresh();; }
如果上述定义的事件中有需要鼠标事件的参数,比如on_mouse_down等,则需要进行如下修改:
(1)定义一个参数,接收鼠标事件e的属性值;如ed等。
IMapControlEvents2_OnMouseDownEvent ed;
public IMapControlEvents2_OnMouseDownEvent Ed
{
get { return ed; }
set { ed = value; }
}
(2)在具体的方法定义上,如
public void OperGeoMap()中,添加的代码中需要有一个ee参数的调用,如: case "DrawPoint": { IPoint pPt = new PointClass(); pPt.PutCoords(ed.mapX, ed.mapY); IMarkerElement pMarkElement = new MarkerElementClass(); ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbolClass(); pMarkerSymbol.Color = GetRGB(220, 120, 60); pMarkerSymbol.Size = 2; pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond; IElement pElement = pMarkElement as IElement; pElement.Geometry = pPt; pMarkElement.Symbol = pMarkerSymbol; IGraphicsContainer pGraphicsContainer = pMap as IGraphicsContainer; pGraphicsContainer.AddElement(pMarkElement as IElement, 0); pActiveview.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); break; }
(3)在控件的事件代码中对预定义的鼠标事件参数ee、ed等进行赋值
ed = e;等。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-20 11:48
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社