diff options
author | RUben <KUbo_0> | 2022-01-21 21:13:04 +0300 |
---|---|---|
committer | Aaron Carlisle <carlisle.b3d@gmail.com> | 2022-01-21 21:13:04 +0300 |
commit | 5b90c046d519aa7723569c9bf4e6260126e44730 (patch) | |
tree | 56afbde66367aa7da997bbdc0b6d95125351adf7 | |
parent | c20f209b1c3e94f26984d8136a38ee1927ce3427 (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.
-rw-r--r-- | release/scripts/startup/bl_ui/properties_object.py | 30 |
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): |