আমি একটি বৈশিষ্ট্য হাইলাইট করতে বোতাম ক্লিক একটি বহুভুজ আঁকুন। তারপরে নতুন বহুভুজটি দেখানোর জন্য আমাকে অ্যাক্টিভিউ রিফ্রেশ করতে হবে। এই লাইনগুলি কাজ করে:
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.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আমার জন্য কাজ করেছে।