diff options
author | Campbell Barton <campbell@blender.org> | 2022-04-06 04:42:44 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-04-06 04:42:44 +0300 |
commit | f208713b02a3251be2463dfda9e833da5cb42ccd (patch) | |
tree | eadc74adb51b4726d2398523954ed64162c7dbc0 /release | |
parent | 8bd28ef16c5540d5ffcdbe0c7d1800617ed62872 (diff) |
UI: use a faster method of finding colliding layer names
Access the keys of the collection instead of the layers names
and use a set to detect collisions. There is no need to access the
duplicate layers themselves. Roughly twice as fast.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_mesh.py | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py index 1a3f19eaba8..97519e55b48 100644 --- a/release/scripts/startup/bl_ui/properties_data_mesh.py +++ b/release/scripts/startup/bl_ui/properties_data_mesh.py @@ -4,7 +4,6 @@ import bpy from bpy.types import Menu, Panel, UIList from rna_prop_ui import PropertyPanel -from collections import defaultdict class MESH_MT_vertex_group_context_menu(Menu): @@ -542,35 +541,28 @@ class DATA_PT_mesh_attributes(MeshButtonsPanel, Panel): self.draw_attribute_warnings(context, layout) def draw_attribute_warnings(self, context, layout): - attributes_by_name = defaultdict(list) - ob = context.object mesh = ob.data - builtin_attribute = object() - - def add_builtin(name): - attributes_by_name[name].append(builtin_attribute) - - def add_attributes(layers): - for layer in layers: - attributes_by_name[layer.name].append(layer) - - add_builtin("position") - add_builtin("material_index") - add_builtin("shade_smooth") - add_builtin("normal") - add_builtin("crease") - - add_attributes(mesh.attributes) - add_attributes(mesh.uv_layers) - add_attributes(ob.vertex_groups) + unique_names = set() + colliding_names = [] + for collection in ( + # Built-in names. + {"position": None, "material_index": None, "shade_smooth": None, "normal": None, "crease": None}, + mesh.attributes, + mesh.uv_layers, + ob.vertex_groups, + ): + for name in collection.keys(): + unique_names_len = len(unique_names) + unique_names.add(name) + if len(unique_names) == unique_names_len: + colliding_names.append(name) - colliding_names = [name for name, layers in attributes_by_name.items() if len(layers) >= 2] - if len(colliding_names) == 0: + if not colliding_names: return - layout.label(text="Name collisions: {}".format(", ".join(colliding_names)), icon='ERROR') + layout.label(text="Name collisions: " + ", ".join(set(colliding_names)), icon='ERROR') class MESH_UL_color_attributes(UIList): |