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二次開發,如果有不對的地方,請多多包涵!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM