Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRUben <KUbo_0>2022-01-21 21:13:04 +0300
committerAaron Carlisle <carlisle.b3d@gmail.com>2022-01-21 21:13:04 +0300
commit5b90c046d519aa7723569c9bf4e6260126e44730 (patch)
tree56afbde66367aa7da997bbdc0b6d95125351adf7 /release
parentc20f209b1c3e94f26984d8136a38ee1927ce3427 (diff)
Fix: Object selection delay with many objects
With object collection properties open there was a huge delay when switching active objects in a large scene, (~10k objects, ~5m vertices). This is due to a non-optimal function to query all the collections the object is in. To solve this the code can be simplified by using `bpy.types.Object.users_collection` This returns all the collections the object is in removing the need to compute this in python.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py30
1 files changed, 12 insertions, 18 deletions
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 81a641a20cf..fbd4ed3225a 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -184,24 +184,18 @@ class OBJECT_PT_collections(ObjectButtonsPanel, Panel):
row.operator("object.collection_add", text="Add to Collection")
row.operator("object.collection_add", text="", icon='ADD')
- obj_name = obj.name
- for collection in bpy.data.collections:
- # XXX this is slow and stupid!, we need 2 checks, one that's fast
- # and another that we can be sure its not a name collision
- # from linked library data
- collection_objects = collection.objects
- if obj_name in collection.objects and obj in collection_objects[:]:
- col = layout.column(align=True)
-
- col.context_pointer_set("collection", collection)
-
- row = col.box().row()
- row.prop(collection, "name", text="")
- row.operator("object.collection_remove", text="", icon='X', emboss=False)
- row.menu("COLLECTION_MT_context_menu", icon='DOWNARROW_HLT', text="")
-
- row = col.box().row()
- row.prop(collection, "instance_offset", text="")
+ for collection in obj.users_collection:
+ col = layout.column(align=True)
+
+ col.context_pointer_set("collection", collection)
+
+ row = col.box().row()
+ row.prop(collection, "name", text="")
+ row.operator("object.collection_remove", text="", icon='X', emboss=False)
+ row.menu("COLLECTION_MT_context_menu", icon='DOWNARROW_HLT', text="")
+
+ row = col.box().row()
+ row.prop(collection, "instance_offset", text="")
class OBJECT_PT_display(ObjectButtonsPanel, Panel):