Puedo dibujar un polígono en el botón haga clic para resaltar una función. Entonces necesito refrescar el ActiveView para mostrar el nuevo polígono. Esta líneas de trabajo:
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 se vuelve a cargar cada capa. He probado casi todas las formas de llamar a PartialRefresh
con otros esriViewDrawPhase
pero ninguno de ellos mostró el nuevo polígono.
Hay una solución mejor que volver a dibujar con esriViewDrawPhase.esriViewAll
?
Actualización
He utilizado un ILayerExtensionDraw.AfterDraw
a prueba el sorteo de las fases y el AfterDraw sólo es golpeado por PartialRefresh()
con esriViewAll
. La extensión se agrega a todas las capas de MapControl.Las capas. Yo esperaba que se golpea cada vez? En que capa no mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
sorteo, así que la AfterDraw ni siquiera planteado?
Respuesta
Gracias a Kirk aquí está la solución, que muestra el nuevo añadido gráfico sin necesidad de recargar cualquier 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));
}