Ich zeichne ein Polygon beim Klicken auf eine Schaltfläche, um ein Feature hervorzuheben. Dann muss ich die ActiveView aktualisieren, um das neue Polygon anzuzeigen. Diese Zeilen funktionieren:
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);
Aber es lädt immer jede Ebene neu. Ich habe fast alle Möglichkeiten ausprobiert, PartialRefresh
mit anderen zu esriViewDrawPhase
telefonieren, aber keine von ihnen zeigte das neue Polygon.
Gibt es eine bessere Lösung als neu zu zeichnen esriViewDrawPhase.esriViewAll
?
Aktualisieren
Früher habe ich eine ILayerExtensionDraw.AfterDraw
der Ziehphase zu testen und die AfterDraw bekommt nur Treffer für PartialRefresh()
mit esriViewAll
. Die Erweiterung wird allen Ebenen in MapControl.Layers hinzugefügt. Ich habe erwartet, dass es jedes Mal getroffen wird? Auf welcher Ebene wird mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
gezeichnet, damit AfterDraw nicht einmal angehoben wird?
Antworten
Dank Kirk ist hier die Lösung, die die neu hinzugefügte Grafik zeigt, ohne eine Ebene neu zu laden.
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
) zeichnen , sollten Sie überhaupt keine Aktualisierung benötigen. Tatsächlich würde eine Aktualisierung dazu führen, dass die Grafik verschwindet. Haben Sie es ohne die PartialRefresh
Leitung versucht ?
esriViewAll
für mich gearbeitet.