Dibujo un polígono al hacer clic en el botón para resaltar una característica. Luego necesito actualizar ActiveView para mostrar el nuevo polígono. Estas líneas funcionan:
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);
Pero siempre recarga cada capa. Intenté casi todas las formas de llamar PartialRefresh
con otras, esriViewDrawPhase
pero ninguna de ellas mostró el nuevo polígono.
¿Existe una solución mejor que volver a dibujar esriViewDrawPhase.esriViewAll
?
Actualizar
Utilicé un ILayerExtensionDraw.AfterDraw
para probar las fases de sorteo y AfterDraw solo es golpeado PartialRefresh()
con esriViewAll
. La extensión se agrega a todas las capas en MapControl.Layers. ¿Esperaba que fuera golpeado cada vez? ¿En qué capa mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
dibuja para que el AfterDraw ni siquiera esté elevado?
Responder
Gracias a Kirk, aquí está la solución, que muestra el nuevo gráfico agregado sin recargar ninguna capa.
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
), no debería necesitar actualizar en absoluto. De hecho, la actualización hará que el gráfico desaparezca. ¿Has probado sin la PartialRefresh
línea?
esriViewAll
funcionó para mí.