Bläddra i källkod

fix: Automatic Weights for Armature Deformer

Joseph Brandenburg 2 veckor sedan
förälder
incheckning
16cc366d11
3 ändrade filer med 14 tillägg och 10 borttagningar
  1. 6 4
      deformer_nodes.py
  2. 1 6
      timers.py
  3. 7 0
      utilities/utilities.py

+ 6 - 4
deformer_nodes.py

@@ -186,14 +186,16 @@ class DeformerArmature(MantisDeformerNode):
                             'selected_objects':[ob, armOb],
                             'active_pose_bone':deform_bones[0],
                             'selected_pose_bones':deform_bones,}
-        for b in armOb.data.bones:
-            b.select = True
+        
+        from .utilities.utilities import set_bone_selection
+        for pb in armOb.pose.bones:
+            set_bone_selection(pose_bone=pb, selection_state=True)
         with bContext.temp_override(**context_override):
             bpy.ops.paint.weight_paint_toggle()
             bpy.ops.paint.weight_from_bones(type='AUTOMATIC')
             bpy.ops.paint.weight_paint_toggle()
-        for b in armOb.data.bones:
-            b.select = False
+        for pb in armOb.pose.bones:
+            set_bone_selection(pose_bone=pb, selection_state=False)
         armOb.data.pose_position = 'POSE'
         # TODO: modify Blender to make this available as a Python API function.
 

+ 1 - 6
timers.py

@@ -129,12 +129,7 @@ def timer_update_selection_sync():
             raise e
     return SELECTION_POLL_RATE
 
-def set_bone_selection(pose_bone, selection_state):
-    # in some older blender versions, select was a bone property
-    if hasattr(pose_bone, 'select'):
-        pose_bone.select = selection_state
-    elif hasattr(pose_bone.bone, 'select'):
-        pose_bone.bone.select = selection_state
+from .utilities.utilities import set_bone_selection
 
 def update_scene_selection_from_node_graph_selection_sync(
         active_ui_signature, view_layer,

+ 7 - 0
utilities/utilities.py

@@ -104,6 +104,13 @@ def split_quoted_substrings_to_strings(text):
     ]
     return substrings
 
+def set_bone_selection(pose_bone, selection_state):
+    # in some older blender versions, select was a bone property
+    if hasattr(pose_bone, 'select'):
+        pose_bone.select = selection_state
+    elif hasattr(pose_bone.bone, 'select'):
+        pose_bone.bone.select = selection_state
+
 ##################################################################################################
 # groups and changing sockets -- this is used extensively by Schema.
 ##################################################################################################