Je dessine un polygone en cliquant sur le bouton pour mettre en surbrillance une entité. Ensuite, je dois actualiser ActiveView pour afficher le nouveau polygone. Ces lignes fonctionnent:
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);
Mais il recharge toujours chaque couche. J'ai essayé presque toutes les façons d'appeler PartialRefresh
avec d'autres, esriViewDrawPhase
mais aucune d'entre elles n'a montré le nouveau polygone.
Y a-t-il une meilleure solution que de redessiner avec esriViewDrawPhase.esriViewAll
?
Mise à jour
J'ai utilisé un ILayerExtensionDraw.AfterDraw
pour tester les phases de dessin et l'AfterDraw n'est touché que PartialRefresh()
par esriViewAll
. L'extension est ajoutée à toutes les couches dans MapControl.Layers. Je m'attendais à ce qu'il soit touché à chaque fois? Sur quel calque mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
dessine-t-on pour que l'AfterDraw ne soit même pas soulevé?
Réponse
Merci à Kirk, voici la solution, qui montre le nouveau graphique ajouté sans recharger aucun calque.
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
), vous ne devriez pas avoir à actualiser du tout. En fait, l'actualisation entraînerait la disparition du graphique. Avez-vous essayé sans la PartialRefresh
ligne?
esriViewAll
fonctionné que pour moi.