Bir özelliği vurgulamak için butona çokgen çiziyorum. Sonra yeni çokgeni göstermek için ActiveView yenilemek gerekiyor. Bu çizgiler işe yarıyor:
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);
Ancak her katmanı her zaman yeniden yükler. PartialRefreshDiğerleriyle aramanın neredeyse tüm yollarını denedim esriViewDrawPhaseama hiçbiri yeni çokgeni göstermedi.
Yeniden çizmekten daha iyi bir çözüm var mı esriViewDrawPhase.esriViewAll?
Güncelleme
Bir kullanılan ILayerExtensionDraw.AfterDrawberaberlik aşamalarını test etmek ve AfterDraw yalnızca vuruş yapsın PartialRefresh()ile esriViewAll. Uzantı, MapControl.Layers içindeki tüm katmanlara eklenir. Her seferinde vurulmasını bekliyordum? mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);AfterDraw'ın yükseltilmemesi için hangi katmanda çizim yapar ?
Cevap
Kirk sayesinde, yeni eklenen grafiği herhangi bir katmanı yeniden yüklemeden gösteren çözüm burada.
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) çizim yaptığınızdan, hiç yenilemenize gerek yoktur. Aslında yenileme, grafiğin kaybolmasına neden olur. PartialRefreshÇizgi olmadan denedin mi?
esriViewAllbenim için çalıştım.