zoukankan      html  css  js  c++  java
  • ArcGIS Engine开发鹰眼图的功能(代码优化篇)

    在上一篇,ArcGIS Engine开发鹰眼图的功能(基础篇)

    上一篇的实现效果图如下,

    如果仔细观察,会发现一个问题,即在“鹰眼”的区域,只要在红色线框内的注记会被覆盖。

     如果红色框包括整张图的话,图上的注记都将不会显示。

    是什么原因造成的呢?

    原因是使用IFillShapeElement向鹰眼视图添加绘图框后,标注与绘图框冲突造成互相压盖。

    我们来看一张表,

     在基础篇中,我们使用的是IFillShapeElement面要素进行刷新的,现在我们改换为线要素的IScreenDisplay DrawPloyline

    替换基础篇中的面要素刷新方法即可

    /// <summary>
    /// 使用线要素刷新(已解决重叠问题)(推荐使用)
    /// 使用IScreenDisplay的DrawPolyline方法,在鹰眼视图画出红线框
    /// </summary>
    /// <param name="activeView">鹰眼视图的活动窗体</param>
    /// <param name="geometry">制框范围</param>
    private void DrawPolyline(IActiveView activeView, IGeometry geometry)
    {
        if (activeView == null)
            return; //如果活动窗体为空, 则返回
        //强行刷新鹰眼视图, 目的: 清除前一次的绘图框, 避免重复绘图框
        axMapControl2.ActiveView.ScreenDisplay.UpdateWindow(); //解决重复绘图框的关键代码
        IScreenDisplay screenDisplay = activeView.ScreenDisplay;
        //Screen的绘图状态处于准备状态
        //参数: (指定设备(Dc=Device), 缓冲区(-1=NoScreenCache,-2=AllScreenCache, -3=ScreenRecoding))
        //解析: 设备(Device)参数指图形的绘制区域
        //缓冲区(Cache)参数指图形是否经由缓存后再绘制在屏幕(Window/Screen)上。
        //一般默认为NoScreenCache, 即不经过缓存直接绘制
        screenDisplay.StartDrawing(screenDisplay.hDC, (System.Int16)esriScreenCache.esriNoScreenCache);
        //实例化颜色对象
        IRgbColor rgbColor = new RgbColorClass();
        rgbColor.Red = 255;
        IColor color = rgbColor;
        //实例化符号(Symbol)对象
        ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass();
        simpleLineSymbol.Color = color;
        simpleLineSymbol.Width = 2;
        ISymbol symbol = (ISymbol)simpleLineSymbol;
        screenDisplay.SetSymbol(symbol);
        screenDisplay.DrawPolyline(geometry);
        screenDisplay.FinishDrawing();
    }

    刚才我们在表格中注意到,使用线刷新,虽然不会覆盖注记,但绘图框难以实时更新,产生重复。因此,我们在代码中,可以完美解决该问题

    //强行刷新鹰眼视图, 目的: 清除前一次的绘图框, 避免重复绘图框
    axMapControl2.ActiveView.ScreenDisplay.UpdateWindow(); 

    最终效果图:

    谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

  • 相关阅读:
    readelf的使用,看函数地址
    Linux 打印堆栈和crash地址转换
    Android mk 添加打印信息
    Linux make file文件中常用的一些定义CPP CXX
    关于Android中RemoveView的错误理解
    Android悬浮窗注意事项
    在有EditText控件的AlertDialog对话框中自动弹出输入法
    联系旭日150安装CentOS5.X版本手记
    ListView配合CheckBox出现position位置错误的解决
    在Android中让Preference的宽度占满整个屏幕的宽度
  • 原文地址:https://www.cnblogs.com/edcoder/p/11732103.html
Copyright © 2011-2022 走看看