ArcGIS Engine中刷新视图总结

92 篇文章 6 订阅

ArcGIS Engine中的视图(IActiveView)控制着主程序窗口,二维中的常用视图有Map(数据视图)和PageLayout(布局视图)。IActiveView.ScreenDisplay属性即IScreenDisplay接口用来控制屏幕上图形的显示。ScreenDisplay允许用户创建任意数量的缓存,图像不是直接绘制在屏幕上的,而是先绘制在缓存中,然后再将缓存绘制到屏幕上。当程序窗口需要重绘时,不是直接从数据库中获取数据,而是从缓存中获取,从而提高绘制的性能。

通常情况下,Map对象有三个缓存:一是为所有图层生成一个缓存;二是如果Map中存在注记和Graphics的话,为其生成一个缓存;三是如果Map中有要素选择集,也会为其生成一个缓存。不过单个图层也可以创建其专属的缓存,这时Map将为该图层创建一个独立的缓存,而其余的所有图层则放在一个缓存里。接下来就看一下ArcGIS Engine中的刷新方法,以Map为例。

一、ArcGIS Engine中的刷新方法主要有:
1, IActiveView.Refresh
全局刷新,即重绘地图中的所有内容,是效率最低的一种刷新方法。当数据量大时非常耗时。所以除非绝对必要,一般推荐使用IActiveView.PartialRefresh方法。当然如果是涉及全部显示范围的更新就需要使用Refresh,比如平移、缩放、全图等操作。

2, IActiveView.PartialRefresh
部分刷新,可以人为指定重绘地图中的部分内容,该方法效率高,推荐使用。下表说明了部分刷新的参数以及Map或PageLayout中刷新的内容:

刷新所有图层使用: 
activeView.PartialRefresh(esriViewGeography, null, null);

刷新单个图层使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, layer,null);

刷新单个图层中的某个区域使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, layer, envelope);

刷新图层中的选中要素使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);

Tips: 测试只执行一次刷新即可,而ArcObjects帮助中说需要调用两次,一次在选择前,一次在选择后。

刷新整个Element图层或者label使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

刷新一个Element使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, element, null);

刷新选中的Element使用: 
activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphicSelection, null, null);

3, IScreenDisplay.Invalidate
Invalidate方法允许刷新显示中的指定区域,该方法不推荐用户使用,因为需要手动控制绘图缓存,对用户来说该方法不是最优的,推荐使用PartialRefresh。使用方法可以参考ArcObjects帮助:How to add display caching

此外,当地图刷新时会触发IActiveViewEvents.AfterDraw事件,其esriViewDrawPhase参数会返回当前的DrawPhase,其绘图阶段先后依次是esriViewInitialized、esriViewBackground、esriViewGeography、esriViewGraphics、esriViewGeoSelection、esriViewForeground,通过刷新阶段的先后顺序可以实现自定义功能。
--------------------- 
原文:https://blog.csdn.net/kone0611/article/details/78789970 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值