毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 企业开发 >> 正文

Arcgis Engine - 鹰眼(减少闪烁)代码

更新时间:2014-11-12:  来源:毕业论文

网上看到的代码,都是一个模样,经过不断调试,无意中效果就可以了.主要是在"鼠标拖动的时候",网上的代码的鹰眼效果,感觉坑爹死了,闪烁超级严重.主要原因是鼠标拖动的时候,进行时时更新.

  我在"天地图"上,它实现的效果也是鼠标拖动放开后才更新.以下是我对网上的代码进行稍微的改动:

  主视图:
 
#region 主视图事件.
//同步鹰眼视图和主视图.
private void map_main_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e) {
    mapCtrl_view.ClearLayers();
    for (int i = 0; i < mapCtrl_main.LayerCount; i++) mapCtrl_view.AddLayer(mapCtrl_main.get_Layer(i));
    mapCtrl_view.Extent = mapCtrl_main.FullExtent;
    mapCtrl_main.Refresh();
}
//画轮廓.
private void map_main_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) {
    DrawSymbol(sender, (ESRI.ArcGIS.Geometry.IEnvelope)e.newEnvelope);
}
#endregion

   辅助方法:
 1 /// <summary>
 2         /// 返回颜色.
 3         /// </summary>
 4         /// <param name="rgb">rgb的值</param>
 5         /// <param name="transparency">透明度[0,255](0为全透明)</param>
 6         /// <returns>颜色对象.</returns>
 7         ESRI.ArcGIS.Display.IRgbColor ColorPaint(int rgb, byte transparency) {
 8             ESRI.ArcGIS.Display.IRgbColor rgbColor = new ESRI.ArcGIS.Display.RgbColorClass();
 9             rgbColor.RGB = rgb;
10             rgbColor.Transparency = transparency;
11             return rgbColor;
12         }
13
14         /// <summary>
15         /// 画轮廓.
16         /// </summary>
17         /// <param name="sender"></param>
18         /// <param name="e">根据IEnvelope对象画轮廓.</param>
19         void DrawSymbol(object sender, ESRI.ArcGIS.Geometry.IEnvelope e) {
20             ESRI.ArcGIS.Carto.IGraphicsContainer hawkGC = (ESRI.ArcGIS.Carto.IGraphicsContainer)mapCtrl_view.Map;
21             ESRI.ArcGIS.Carto.IActiveView aView = (ESRI.ArcGIS.Carto.IActiveView)hawkGC;
22             hawkGC.DeleteAllElements();
23
24             ESRI.ArcGIS.Carto.IElement recEle = (ESRI.ArcGIS.Carto.IElement)new ESRI.ArcGIS.Carto.RectangleElementClass();
25             recEle.Geometry = e;
26             ESRI.ArcGIS.Display.ISimpleLineSymbol outLine = new ESRI.ArcGIS.Display.SimpleLineSymbolClass();
27             outLine.Color = ColorPaint(255, 255);
28             outLine.Width = 2;
29
30             //填充样式.
31             ESRI.ArcGIS.Display.ISimpleFillSymbol fillSym = new ESRI.ArcGIS.Display.SimpleFillSymbolClass();
32             fillSym.Color = ColorPaint(255, 0);
33             fillSym.Outline = outLine;
34
35             ESRI.ArcGIS.Carto.IFillShapeElement fillShape = (ESRI.ArcGIS.Carto.IFillShapeElement)recEle;
36             fillShape.Symbol = fillSym;
37             hawkGC.AddElement((ESRI.ArcGIS.Carto.IElement)fillShape, 0);
38             aView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGraphics, null, null);
39         }

  鹰眼视图:
 1 #region 鹰眼事件.
 2 private void map_view_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) {
 3     if (mapCtrl_main.LayerCount < 0) return;
 4     if (e.button == 1) { //点选.
 5     ESRI.ArcGIS.Geometry.IPoint ptNew = new ESRI.ArcGIS.Geometry.PointClass();
 6     ptNew.PutCoords(e.mapX, e.mapY);
 7     }
 8     else if (e.button == 2) //右键框选.
 9     {
10     interEnvelope = mapCtrl_view.TrackRectangle();
11     //记录感兴趣区.
12     mapCtrl_main.Extent = interEnvelope;
13     }
14     mapCtrl_main.ActiveView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, null, null);
15 }
16
17 private void map_view_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) {
18     if (e.button == 1 && interEnvelope != null) {
19     //鼠标移动,轮廓跟着变,但是主视图不更新,直到鼠标放开.
20     interEnvelope.PutCoords(e.mapX - interEnvelope.Width / 2, e.mapY - interEnvelope.Height / 2, e.mapX + interEnvelope.Width / 2, e.mapY + interEnvelope.Height / 2);
21     DrawSymbol(sender, interEnvelope);
22     }
23 }
24
25 private void map_view_OnMouseUp(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent e) {
26     //鼠标放开时同步更新主视图,和map_view_OnMouseMove搭配.
27     ESRI.ArcGIS.Geometry.IPoint ptNew = new ESRI.ArcGIS.Geometry.PointClass();
28     ptNew.PutCoords(e.mapX, e.mapY);
29     mapCtrl_main.CenterAt(ptNew);
30     mapCtrl_main.ActiveView.PartialRefresh(ESRI.ArcGIS.Carto.esriViewDrawPhase.esriViewGeography, null, null);
31 }
32 #endregion

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©chuibin.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。