ボタンをクリックしてポリゴンを描画し、機能を強調表示します。次に、ActiveViewを更新して、新しいポリゴンを表示する必要があります。この行は機能します:
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);
しかし、それは常にすべてのレイヤーをリロードします。私はPartialRefresh
他の人とほとんどすべての方法で呼び出しを試みましたesriViewDrawPhase
が、どれも新しいポリゴンを表示しませんでした。
で再描画するよりも良い解決策はありesriViewDrawPhase.esriViewAll
ますか?
更新
を使用しILayerExtensionDraw.AfterDraw
て描画フェーズをテストしましたが、AfterDrawはでのみヒットPartialRefresh()
しesriViewAll
ます。拡張機能はMapControl.Layersのすべてのレイヤーに追加されます。毎回ヒットすると思っていましたか?mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
AfterDrawが発生しないように、どのレイヤーに描画しますか?
回答
カークのおかげで、ここに解決策があり、レイヤーを再ロードせずに、新しく追加されたグラフィックを表示します。
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
)に直接描画しているため、更新する必要はまったくありません。実際、更新するとグラフィックが消えます。PartialRefresh
ラインなしで試しましたか?
esriViewAll
機能するのは自分だけでした。