缩放到要素以及闪烁形状是非常常规的操作,用处很广泛。单一的来看这两个通常都不会有什么问题,但是当将他们放在一起时,稍不注意就会达不到目的。
其实比较容易引起的问题就是:尽管缩放到要素的代码放在闪烁代码的前面,也刷新了视图,但是执行的时候,却是先闪烁,再缩放。执行顺序不对其实是牵涉到一个非常关键的要点。
要点:IActiveView.Refresh()并不会立刻启动 redraw 方法来重新绘制窗口,要想立刻绘制,需要显式调用ScreenDIsplay.UpdateWindow()方法。
这个要点同样适用于其他需要刷新后立刻执行屏幕操作的地方。
下面分别来讲实现。
移动缩放
public static void ZoomToGeometry(IGeometry geometry, IActiveView activeView)
{
IEnvelope env = geometry.Envelope;
IGeometry5 geo = geometry as IGeometry5;
if (env.Width == 0 || env.Height == 0)
{
IPoint centerPoint = new PointClass();
centerPoint.X = geo.CentroidEx.X;
centerPoint.Y = geo.CentroidEx.Y;
//IDisplayTransformation displayTrans = activeView.ScreenDisplay.DisplayTransformation;
//displayTrans.SpatialReference = activeView.FocusMap.SpatialReference;
env.XMin = centerPoint.X - 0.001;
env.XMax = centerPoint.X + 0.001;
env.YMin = centerPoint.Y - 0.001;
env.YMax = centerPoint.Y + 0.001;
env.CenterAt(centerPoint);
}
env.Expand(0.5,