मैं एक सुविधा को उजागर करने के लिए बटन पर एक बहुभुज आकर्षित करता हूं। फिर मुझे नए बहुभुज को दिखाने के लिए 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
लेकिन उनमें से कोई भी नया बहुभुज नहीं दिखा।
वहाँ के साथ redraw की तुलना में एक बेहतर उपाय है esriViewDrawPhase.esriViewAll
?
अपडेट करें
मैं एक प्रयोग किया जाता ILayerExtensionDraw.AfterDraw
ड्रा चरणों का परीक्षण करने और AfterDraw के लिए ही हिट हो जाता है PartialRefresh()
के साथ esriViewAll
। विस्तार MapControl.Layers में सभी परतों में जोड़ा गया है। मुझे उम्मीद थी कि यह हर बार हिट हो जाता है? किस लेयर पर mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);
ड्रॉ होता है ताकि आफ्टरव्रा भी बढ़ा न हो?
उत्तर
कर्क के लिए धन्यवाद यहां समाधान है, जो किसी भी परत को फिर से लोड किए बिना नए जोड़े गए ग्राफिक को दिखाता है।
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
मेरे लिए काम किया।