9 votos

¿Cuál es la mejor manera de actualizar la vista después de dibujar gráficos?

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));
}

4voto

saint_groceon Puntos 2696

Me gustaría tratar de llamar IScreenDisplay.Invalidar, y pasar un cacheID para esriViewGraphics utilizando IActiveView.ScreenCacheID. Hacer esto después de la adición de los gráficos en el mapa echando el mapa para IGraphicsContainer, y añadiendo a través de AddElement.

1voto

jonesdavide Puntos 176

Usted necesita comprobar hacia fuera las fases: creo que esriViewDrawPhase.esriViewGraphics iba a hacer el truco para ti. Pero también se pueden combinar las fases con un or bit a bit.

http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/PartialRefresh_Method/0012000001nm000000/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X