গ্রাফিক্স আঁকার পরে ভিউ সতেজ করার সর্বোত্তম উপায় কী?


9

আমি একটি বৈশিষ্ট্য হাইলাইট করতে বোতাম ক্লিক একটি বহুভুজ আঁকুন। তারপরে নতুন বহুভুজটি দেখানোর জন্য আমাকে অ্যাক্টিভিউ রিফ্রেশ করতে হবে। এই লাইনগুলি কাজ করে:

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));
}

1
[আমি মনে করি ESRI ডকুমেন্টেশন ইচ্ছামত বর্ণনামূলক নয়।] [1] [1]: gis.stackexchange.com/questions/17422/remove-layer-labels
Chaz

1
যেহেতু আপনি সরাসরি প্রদর্শন ( esriScreenCache.esriNoScreenCache) এ আঁকছেন , আপনার একেবারেই রিফ্রেশ করার দরকার নেই। আসলে রিফ্রেশ করার ফলে গ্রাফিক অদৃশ্য হয়ে যাবে। আপনি PartialRefreshলাইন ছাড়া চেষ্টা করেছেন ?
blah238

EsriViewAll এর পরিবর্তে esriViewDrawPhase.esriViewGeography চেষ্টা করুন
প্যাট্রিক

@ blah238 এটি একটি (আংশিক) রিফ্রেশ ছাড়া প্রদর্শিত হচ্ছে না।
গুমো

@iterationx আমি সমস্ত মান পরীক্ষা করেছি তবে কেবল esriViewAllআমার জন্য কাজ করেছে।
gumo

উত্তর:


5

আমি IScreenDisplay.InValidate কল করার চেষ্টা করব এবং IActiveView.ScreenCacheID ব্যবহার করে এসরিভিউগ্রাফিক্সের জন্য একটি ক্যাশেড এ যাব । IGraphicsContainer এ মানচিত্রটি কাস্ট করে, এবং অ্যাডমেন্টের মাধ্যমে যুক্ত করে মানচিত্রে গ্রাফিকগুলি যুক্ত করার পরে এটি করুন।


1
ধন্যবাদ, এটি কাজ করে। আমি জানতাম না আমি Invalidate()অপরিশোধিত স্তরগুলি ব্যবহার করতে পারি। বাস্তবায়ন বিশদ জন্য আমার আপডেট দেখুন।
gumo

1

আপনাকে এই পর্যায়গুলি পরীক্ষা করে দেখতে হবে : আমি মনে করি এসরিভিউড্রাউফেজ। এসরিভিউ গ্রাফিকগুলি আপনার জন্য কৌশলটি করবে। তবে আপনি পর্যায়গুলি সামান্য দিকের OR এর সাথে একত্রিত করতে পারেন।

http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/PartialRefresh_Method/0012000001nm000000/


1
তদ্ব্যতীত, কেউ envelopeএই অঞ্চলটিকে আরও সীমাবদ্ধ করতে যুক্তিটি ব্যবহার করতে পারে যা সতেজ হওয়া উচিত।
পেট্র ক্রেবস

জে, esriViewGraphicsআমারও প্রথম চিন্তা ছিল, কিন্তু এটি কার্যকর হয় না। সুতরাং আমি অন্যান্য সমস্ত ড্রপফেস চেষ্টা করেছিলাম এবং কেবল esriViewAllবহুভুজ দেখায় তবে সমস্ত স্তর পুনরায় লোডও করি ।
gumo

ধন্যবাদ পেট্র, আমার ধারণা আপনি feature.Extentদ্বিতীয় যুক্তি হিসাবে ব্যবহার করছেন । আমি চেষ্টা করেছিলাম কোন সাফল্য ছাড়াই। আমি মনে করি এটি সঠিক ড্রফেজের একটি প্রশ্ন বা সম্ভবত একটি সম্পূর্ণ ভিন্ন পদ্ধতির আমি জানি না।
গুমো

@ গুমো: সবেমাত্র আর্গেনাইন ট্যাগটি লক্ষ্য করেছেন। আমি আর্কইঞ্জাইন বা এটির স্ক্রিন আচরণের সাথে পরিচিত নই (সম্ভবত এটি ভিন্ন)। আর্কিঞ্জাইন-নির্দিষ্ট উত্তর উপস্থিত হলে / আমি এই প্রশ্নটি মুছে ফেলব।
জে কামিন্স

1
আপনার কি স্টার্টড্রয়িং এবং ফিনিশড্রয়িং কল রয়েছে?
জে কামিন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.