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