버튼 클릭시 다각형을 그려 지형지 물을 강조 표시합니다. 그런 다음 새 다각형을 표시하려면 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가 올라가지 않도록 어느 레이어에서 그리나요?
대답
Kirk 덕분에 레이어를 다시로드하지 않고 새로 추가 된 그래픽을 보여주는 솔루션이 있습니다.
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
나 에게만 효과가있었습니다.