Paint Dirt: remove operator call from Python
authorSybren A. Stüvel <sybren@stuvel.eu>
Fri, 9 Feb 2018 11:52:46 +0000 (12:52 +0100)
committerSybren A. Stüvel <sybren@stuvel.eu>
Fri, 9 Feb 2018 11:52:46 +0000 (12:52 +0100)
Instead of calling an operator I just call `collection.new()`. Moving the
code into a separate function also simplifies it. In its new form there is
also no undefined behaviour when me.vertex_colors is non-empty but without
active layer.

release/scripts/startup/bl_operators/vertexpaint_dirt.py

index 7042f42744ccc2b0e2ae3a1716e0c151adc73ba8..f12b76a76ba0143c830406a61dec837018c11afd 100644 (file)
 
 # <pep8 compliant>
 
-# Contributor(s): Keith "Wahooney" Boshoff, Campbell Barton
+# Contributor(s): Keith "Wahooney" Boshoff, Campbell Barton, Sybren A. Stüvel
+
+
+def get_vcolor_layer_data(me):
+    for lay in me.vertex_colors:
+        if lay.active:
+            return lay.data
+
+    lay = me.vertex_colors.new()
+    lay.active = True
+    return lay.data
 
 
 def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean, dirt_only):
@@ -93,17 +103,7 @@ def applyVertexDirt(me, blur_iterations, blur_strength, clamp_dirt, clamp_clean,
     else:
         tone_range = 1.0 / tone_range
 
-    active_col_layer = None
-
-    if me.vertex_colors:
-        for lay in me.vertex_colors:
-            if lay.active:
-                active_col_layer = lay.data
-    else:
-        bpy.ops.mesh.vertex_color_add()
-        me.vertex_colors[0].active = True
-        active_col_layer = me.vertex_colors[0].data
-
+    active_col_layer = get_vcolor_layer_data(me)
     if not active_col_layer:
         return {'CANCELLED'}