文件名称:在ArcEngine中使用INewLineFeedback实现距离测量(面积测量)的正确方法
文件大小:85KB
文件格式:ZIP
更新时间:2016-02-25 10:58:31
ArcEngine 距离测量 面积测量 9.3
客户最近打电话过来,说我们的软件在量距离的时候不能平移地图。我们的软件是使用ArcEngine来开发的,在网上输入关键字“arcengine 距离测量”,可以搜索到一大堆内容基本相似的文章或代码,基本上都是采用INewLineFeedback来实现的,我们的软件也是使用此种方法。方法大致如下:写一个距离测量工具,继承自BaseTool,在该类中使用INewLineFeedback动态绘制多段折线,最后转化为Element添加到地图上。如果要增加平移功能,我们仿造ArcMap使用鼠标中键平移,在OnMouseDown、OnMouseMove、OnMouseUp事件中增加判断鼠标中键的语句,然后分别使用PanStart、PanMoveTo、PanStop实现地图的平移。 此时,出现了一个新问题,一旦移动地图后,之前使用INewLineFeedback绘制的线完全乱了方寸,有一部分线丢失了。之后又发现一个更可笑的问题,在绘制的过程中,如果使用alt+tab键切换到其它窗口,然后再切换回地图窗口的时候,会多出一条线,INewLineFeedback把切换窗口前的鼠标位置记录了下来。 对于这个问题,我使用ArcMap的测量工具检查了一下,发现不存在上述问题。但是INewLineFeedback为什么会产生这个bug,难道是本人的使用方法不对。在网上搜了一下其他类似代码进行测试,都存在这个bug。ArcEngine的SDK文档上也没有特别强调INewLineFeedback的使用细节。 本来打算用gdi进行解决,最后发现INewLineFeedback有一个Refresh函数,那么应该在什么地方使用它呢?在ArcMapControl的诸多事件中,尝试了OnAfterDraw、OnAfterScreenDraw、OnViewRefresh等,发现OnAfterScreenDraw是OK的。具体是在OnAfterScreenDraw事件中使用Refresh函数刷新INewLineFeedback,完美解决问题。
【文件预览】:
MeasureDistance
----MeasureDistance()
--------MeasureDistance.csproj(6KB)
--------Form1.cs(2KB)
--------DrawPolygonTool.cs(18KB)
--------Program.cs(496B)
--------frmAreaFormcs.resx(11KB)
--------Form1.resx(9KB)
--------frmDistanceForm.resx(6KB)
--------Properties()
--------frmDistanceForm.designer.cs(4KB)
--------Form1.Designer.cs(5KB)
--------frmAreaFormcs.designer.cs(4KB)
--------frmDistanceForm.cs(1KB)
--------frmAreaFormcs.cs(1KB)
--------obj()
--------bin()
----MeasureDistance.sln(935B)
----MeasureDistance.suo(21KB)