أكثر

تغيير شفافية طبقة نقطية باستخدام ArcObjects

تغيير شفافية طبقة نقطية باستخدام ArcObjects


أحاول القيام ببعض الأشياء البسيطة باستخدام إطار .net و ArcObjects ، ولكن ليس لدي خبرة كبيرة في هذا النوع من التطوير. أود تكرار الطبقات في مستند الخريطة وتغيير شفافية الطبقات النقطية التي تبدأ أسماءها بالحرف "g". هذا ما لدي حتى الآن كجزء من نموذج windows.

زر الفراغ الخاص 1_Click (مرسل الكائن ، EventArgs e) {IMxDocument mxdoc = ArcMap.Application.Document as IMxDocument ؛ خريطة IMap = mxdoc.FocusMap ؛ لـ (int i = 0 ؛ i <(map.LayerCount - 1) ؛ i ++) {ILayer currentLayer = map.get_Layer (i) ؛ إذا (currentLayer.Name [0] .ToString () == "g") {// شفافية الطبقة الحالية = 50٪}}}

السطر الذي تم التعليق عليه هو المكان الذي أحتاج فيه إلى المساعدة. لا يمكنني العثور على الكود الصحيح لفعل ما أريد داخل فصل ILayer. أليس هذا ما يجب أن أستخدمه؟


أسهل طريقة لإجراء تكرار عبر الطبقات في ArcMap هي استخدام IEnumLayer. يمكنك الحصول على إشارة إلى ذلك من IMap.Layers. http://resources.arcgis.com/ar/help/arcobjects-net/componenthelp/index.html#//001200000482000000

ثم تحقق من النوع وألقِ كل طبقة نقطية تم إرجاعها بواسطة العداد إلى IRasterLayer. http://resources.arcgis.com/ar/help/arcobjects-net/componenthelp/index.html#//001200000p9n000000

ثم قم بتعيين الشفافية باستخدام ILayerEffects. http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/ILayerEffects_Interface/00120000072m000000/

تحرير لإظهار مثال على IEnumLayer:

تجاوز محمي باطل OnClick () {IMap pMap = ArcMap.Document.FocusMap؛ ESRI.ArcGIS.esriSystem.IUID uid = new ESRI.ArcGIS.esriSystem.UIDClass () ؛ uid.Value = "{D02371C7-35F7-11D2-B1F2-00C04F8EDEFF}" ؛ IEnumLayer pEnumLayer = pMap.get_Layers (((ESRI.ArcGIS.esriSystem.UID) (uid)) ، صحيح) ؛ pEnumLayer.Reset () ، ILayer pLayer = pEnumLayer.Next () ، افعل {MessageBox.Show (pLayer.Name) ؛ // أو التعليمات البرمجية التي تحدد شفافية الطبقة. pLayer = pEnumLayer.Next () ، } while (pLayer! = null) ؛ }

يعد IEnumLayer أمرًا رائعًا لأنه يسمح لك باختيار ما إذا كنت تريد الانتقال إلى طبقات مركبة أم لا (باستخدام الوسيطة الثانية في وظيفة get_Layers) ، ويسمح لك بتقييد أنواع الطبقات التي يتم إرجاعها (الوسيطة الأولى في دالة get_Layers). ما ورد أعلاه فقط RasterLayers. هناك طريقة بديلة وهي الحصول على جميع الطبقات (الوسيطة الأولى في دالة get_Layers إلىباطل) ، ثم اختبر كل طبقة لنوعها وافعل شيئًا بناءً على نوع الطبقة.

يمكن العثور على معرفات GUID المراد استخدامها لتقييد الطبقات التي تم إرجاعها هنا: http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#//00490000005w000000


بالإضافة إلى إجابة دان حول تعداد الطبقات ... باستخدام UID. قيمة IRasterLayer (انظر مثال UIDs هنا) المقدمة لوظيفة get_layers ، لا تحتاج إلى التحقق لاحقًا من أنها طبقة نقطية تلعب بها ، ولكن في بعض الأحيان تحتاج لاستخدام UID لـ IDataLayer والذي سيعيد طبقات المعالم وطبقات البيانات النقطية ، لذلك للتحقق من هذا الاستخدام:

إذا كان (pLayer هو IRasterLayer)

شيء آخر تحتاج إلى التحقق منه عند العمل مع الطبقات هو أن مصدر البيانات صالح ، باستخدامILayer. صالحالخاصية قبل محاولة ضبط أي من إعدادات الطبقة (أو محاولة الحصول على مؤشر بشكل خاص):

إذا (pLayer.Valid) {if (pLayer.Name.ToUpper () [1] == 'G') {IRasterLayer pRasterLayer = (IRasterLayer) pLayer ؛ ILayerEffects pLayerEffects = (ILayerEffects) pRasterLayer ؛ pLayerEffects.Transparency = 60 ؛ // ضبط شفافية الطبقة على 60٪}}

يجب أن يتفاعل هذا مع إجابة دان لتعيين شفافية الطبقة.


شاهد الفيديو: ARCGIS VIDEO