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:
authorCampbell Barton <campbell@blender.org>2022-04-06 04:42:44 +0300
committerCampbell Barton <campbell@blender.org>2022-04-06 04:42:44 +0300
commitf208713b02a3251be2463dfda9e833da5cb42ccd (patch)
treeeadc74adb51b4726d2398523954ed64162c7dbc0
parent8bd28ef16c5540d5ffcdbe0c7d1800617ed62872 (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.
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py40
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):