أكثر

كيفية تعطيل وتمكين الرسم في ArcMap باستخدام Python؟

كيفية تعطيل وتمكين الرسم في ArcMap باستخدام Python؟


البرنامج النصي الذي أكتبه يعيد وضع إطارين للبيانات ويحدد نطاقاتهما.

عند القيام بذلك ، فإنه يعيد رسم العرض النشط بالكامل 4 مرات ، مما يؤدي إلى إبطاء النص إلى حد كبير.

يؤدي الضغط على F9 أو النقر فوق الزر "إيقاف مؤقت للرسم" قبل تشغيل البرنامج النصي إلى تعطيل الرسم وجعل النص يعمل بشكل أسرع ، ولكني أريد أن يقوم البرنامج النصي بذلك تلقائيًا.

أرغب في تعطيل رسم ArcMap 10 في بداية البرنامج النصي ، وتمكينه في النهاية.

كيف أقوم بهذا العمل؟


لم أر أي شيء أصلي في ArcPy. ربما يكون أسهل شيء يمكنك فعله هو إرسال ضغط مفتاح F9 إلى نافذة ArcMap باستخدام وحدة SendKeys.

لقد اختبرت بناء الجملة هذا وعملت بشكل جيد:

استيراد SendKeys # إرسال ضغطات المفاتيح لـ F9 SendKeys.SendKeys ("{F9}")

التحذير الوحيد هو أنك قد تحتاج إلى إلغاء تحديد "التشغيل دائمًا في المقدمة" في علامة التبويب "عام" لخصائص البرنامج النصي. وإلا فقد يتم اكتشاف ضغط المفتاح بواسطة نافذة تقدم البرنامج النصي.


أدركت أن هذا السؤال قد تم إغلاقه منذ فترة طويلة ، ولكن لدي بعض الأدوات القديمة التي كانت هذه مشكلة جديدة بالنسبة لها ولم يعد حل SendKeys يعمل ، لذلك قمت بطرح الحل الخاص بي بعد التجربة. لا يقوم بتعطيل الرسم ، ولكنه ينشئ أداء مكافئًا عن طريق تعطيل الطبقات وإعادة تمكينها عند الانتهاء. لا يؤدي تشغيل البرنامج النصي في الخلفية إلى حل المشكلة (على الرغم من أنني اعتقدت أنه سيفعل ذلك) ، لذلك حاولت إيقاف تشغيل جميع الطبقات - وقد نجحت! تسريع كامل للرمز المكافئ في مستند فارغ. لذا إليك بعض التعليمات البرمجية لتحقيق ذلك.

هاتان الوظيفتان ، عند الجمع بينهما ، تقوم بإيقاف تشغيل كل الطبقات في وثيقة ما ، وتعيد الحالة المحفوظة للطبقات. بعد ذلك ، عند الانتهاء من عملياتك ، يمكنك إعادة تشغيلها من خلال توفير تلك الحالة المحفوظة للوظيفة الثانية. الاستخدام الموصى به:

جرب: layer_state = turn_off_all_layers ("CURRENT") # قم بأشياء مثيرة للاهتمام هنا أخيرًا: # ضعها في قالب نهائي حتى إذا فشلت التعليمات البرمجية المثيرة للاهتمام ، فلا يزال يتم تمكين طبقاتك turn_on_layers ("CURRENT" ، layer_state)

والوظائف أدناه - التصحيحات والتعليقات وما إلى ذلك مرحبًا بها - رمز جديد جدًا لذا قد يكون به بعض الأخطاء ، ولكن تم اختباره البعض.

def turn_off_all_layers (document = "CURRENT"): "" "وظيفة تسريع لإنشاء الخريطة في ArcMap - تقوم بإيقاف تشغيل كل الطبقات بحيث لا تحاول إعادة عرضها أثناء استخدام الأدوات (نظرًا لأن هذه الأدوات تحتاج إلى التشغيل في لا يبدو أن عمليات المقدمة والخلفية تعمل على تسريعها). ينشئ قاموسًا مرتبطًا بمفتاح على قيمة طبقة Arcpy longName الذي يحتوي على قيم True أو False لما إذا كان قد تم تمكين الطبقات قبل تشغيل هذا أم لا. يسمح لنا بعد ذلك باستخدام turn_on_layers on نفس المستند لإعادة تمكين تلك الطبقات: مستند المعلمة: مستند خريطة. يتم تعيينه افتراضيًا على "CURRENT": إرجاع: ديكت: قاموس مرتبط بقيم اسم الطبقة الطويلة مع قيم صواب أو خطأ لمعرفة ما إذا كانت الطبقة ممكّنة. "" "الرؤية = { } doc = arcpy.mapping.MapDocument (مستند) لـ lyr في arcpy.mapping.ListLayers (doc): إذا كان lyr.visible صحيحًا: جرب: visiblity [lyr.longName] = صحيح lyr.visible = خطأ باستثناء خطأ الاسم: visiblity [ lyr.longName] = False # إذا واجهتنا مشكلة في ضبطه ، فلن تعبث به لاحقًا: visiblity [lyr.longName] = خطأ عودة الرؤية def turn_on_layers (document = "CURRENT"، storage_dict = None، only_change_visible = True): إذا لم يكن storage_dict: زيادة ValueError ("يجب تحديد storage_dict وتعيينه إلى قائمة أسماء الطبقات ذات قيم False أو True استنادًا إلى ما إذا كان يجب تشغيل الطبقة أو إيقاف تشغيلها ") doc = arcpy.mapping.MapDocument (مستند) لـ lyr في arcpy.mapping.ListLayers (doc): إذا كان lyr.longName في storage_dict: إذا ليس only_change_visible أو (only_change_visible هو True و storage_dict [lyr.longName] صحيح): # إذا كان من المفترض فقط تعيين العناصر التي نريد جعلها مرئية وهي واحدة ، أو إذا أردنا ضبط الكل حاول: lyr. مرئي = storage_dict [lyr.longName] # عيّن الرؤية مرة أخرى إلى ما قمنا بتخزينه مؤقتًا باستثناء NameError: arcpy.AddWarning ("تعذر إعادة تشغيل الطبقة٪ s - قد تحتاج إلى تشغيلها يدويًا"٪ lyr.longName) # لم نتمكن من إعادة طبقة ... سيئة للغاية

شاهد الفيديو: Arcpy Getting Started Python in ArcGIS