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. PartialRefresh
Diğerleriyle aramanın neredeyse tüm yollarını denedim esriViewDrawPhase
ama hiçbiri yeni çokgeni göstermedi.
Yeniden çizmekten daha iyi bir çözüm var mı esriViewDrawPhase.esriViewAll
?
Güncelleme
Bir kullanılan ILayerExtensionDraw.AfterDraw
beraberlik 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?
esriViewAll
benim için çalıştım.