আমি বুঝতে পারি যে এই প্রশ্নটি অনেক আগেই বন্ধ হয়ে গিয়েছিল, তবে আমার কাছে কিছু পুরানো সরঞ্জাম রয়েছে যা এটি নতুন সমস্যা ছিল এবং সেন্ডকি সমাধানটি আর কাজ করে না বলে মনে হয়, তাই আমি পরীক্ষার পরে নিজের সমাধানটি ঘুরিয়েছিলাম। এটি অঙ্কন অক্ষম করে না, তবে স্তরগুলি অক্ষম করে এবং হয়ে গেলে তাদের পুনরায় সক্ষম করে এর পারফরম্যান্সের সমতুল্য তৈরি করে। ব্যাকগ্রাউন্ডে স্ক্রিপ্টটি চালানো সমস্যার সমাধান করে না (যদিও আমি ভেবেছিলাম এটি হবে), তাই আমি সমস্ত স্তরগুলি বন্ধ করে দেওয়ার চেষ্টা করেছি - এবং এটি কার্যকর হয়েছে! খালি দস্তাবেজের সমতুল্য কোডটিতে পূর্ণ গতিপথ। সুতরাং এটি সম্পাদন করার জন্য কিছু কোড এখানে।
এই দুটি ফাংশন, একত্রিত হলে, ডকুমেন্টের সমস্ত স্তরগুলি বন্ধ করে, স্তরগুলির সংরক্ষিত অবস্থায় ফিরে আসে। তারপরে, যখন আপনার ক্রিয়াকলাপগুলি সম্পন্ন হয়, আপনি সেই সংরক্ষণকৃত অবস্থাটি দ্বিতীয় ফাংশনে সরবরাহ করে এগুলি আবার চালু করতে পারেন। প্রস্তাবিত ব্যবহার:
try:
layer_state = turn_off_all_layers("CURRENT")
# Do interesting things here
finally: # put it in a finally block so that if your interesting code fails, your layers still get reenabled
turn_on_layers("CURRENT", layer_state)
এবং ফাংশনগুলি নীচে রয়েছে - সংশোধন, মন্তব্য, ইত্যাদি স্বাগত - বেশ নতুন কোড যাতে এটিতে কিছু বাগ থাকতে পারে তবে এটি কিছু পরীক্ষা করা হয়েছে।
def turn_off_all_layers(document="CURRENT"):
"""
A speedup function for map generation in ArcMap - turns off all layers so that it doesn't try to rerender them while we're using tools (since these tools need
to run in the foreground and background processesing didn't seem to speed it up).
Creates a dictionary keyed on the arcpy layer value longName which contains True or False values for whether or not the layers were enabled before running this.
Allows us to then use turn_on_layers on the same document to reenable those layers
:param document: a map document. defaults to "CURRENT"
:return: dict: a dictionary keyed on layer longName values with True or False values for whether the layer was enabled.
"""
visiblity = {}
doc = arcpy.mapping.MapDocument(document)
for lyr in arcpy.mapping.ListLayers(doc):
if lyr.visible is True:
try:
visiblity[lyr.longName] = True
lyr.visible = False
except NameError:
visiblity[lyr.longName] = False # if we have trouble setting it, then let's not mess with it later
else:
visiblity[lyr.longName] = False
return visiblity
def turn_on_layers(document="CURRENT", storage_dict=None, only_change_visible=True):
if not storage_dict:
raise ValueError("storage_dict must be defined and set to a list of layer names with values of False or True based on whether the layer should be on or off")
doc = arcpy.mapping.MapDocument(document)
for lyr in arcpy.mapping.ListLayers(doc):
if lyr.longName in storage_dict:
if not only_change_visible or (only_change_visible is True and storage_dict[lyr.longName] is True): # if we're only supposed to set the ones we want to make visible and it is one, or if we want to set all
try:
lyr.visible = storage_dict[lyr.longName] # set the visibility back to what we cached
except NameError:
arcpy.AddWarning("Couldn't turn layer %s back on - you may need to turn it on manually" % lyr.longName) # we couldn't turn a layer back on... too bad