Saya menggambar poligon pada klik tombol untuk menyorot fitur. Maka saya perlu me-refresh ActiveView untuk menunjukkan poligon baru. Baris ini berfungsi:
mapControl.ActiveView.ScreenDisplay.StartDrawing(StartDrawing(mapControl.ActiveView.ScreenDisplay.hDC, (System.Int16)ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache);
mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
mapControl.ActiveView.ScreenDisplay.FinishDrawing();
mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, feature.Extent, null);
Tetapi selalu memuat ulang setiap lapisan. Saya mencoba hampir semua cara menelepon PartialRefresh
dengan yang lain esriViewDrawPhase
tetapi tidak satupun dari mereka yang menunjukkan poligon baru.
Apakah ada solusi yang lebih baik daripada menggambar ulang esriViewDrawPhase.esriViewAll
?
Memperbarui
Saya menggunakan ILayerExtensionDraw.AfterDraw
untuk menguji fase imbang dan AfterDraw hanya mendapat hit untuk PartialRefresh()
dengan esriViewAll
. Ekstensi ditambahkan ke semua lapisan di MapControl.Layers. Saya berharap bahwa itu akan kena setiap kali? Di lapisan mana mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
gambar tidak ditarik sehingga AfterDraw tidak terangkat?
Menjawab
Berkat Kirk, inilah solusinya, yang menunjukkan grafik baru yang ditambahkan tanpa memuat ulang lapisan apa pun.
IGraphicsContainer con = _mapControl.Map as IGraphicsContainer;
if (con != null)
{
IFillShapeElement fillShapeElement = new PolygonElementClass();
fillShapeElement.Symbol = fillSymbol;
IElement element = (IElement)fillShapeElement;
element.Geometry = feature.Shape;
con.DeleteAllElements();
con.AddElement(element, 0);
_mapControl.ActiveView.ScreenDisplay.Invalidate(feature.Extent, true, _mapControl.ActiveView.get_ScreenCacheID(esriViewDrawPhase.esriViewGraphics, null));
}
esriScreenCache.esriNoScreenCache
), Anda tidak perlu menyegarkan sama sekali. Bahkan menyegarkan akan menyebabkan grafik menghilang. Sudahkah Anda mencoba tanpa PartialRefresh
garis?
esriViewAll
bekerja untuk saya.