[Bf-extensions-cvs] [82367d10] master: super limb fixes

Lucio Rossi noreply at git.blender.org
Thu Feb 21 19:21:20 CET 2019


Commit: 82367d10eb5e67d4edf11611a505ac71d5d7c324
Author: Lucio Rossi
Date:   Thu Feb 21 19:09:19 2019 +0100
Branches: master
https://developer.blender.org/rBA82367d10eb5e67d4edf11611a505ac71d5d7c324

super limb fixes

===================================================================

M	rigify/rigs/experimental/super_chain.py
M	rigify/rigs/limbs/simple_tentacle.py
M	rigify/rigs/limbs/super_finger.py
M	rigify/rigs/spines/super_spine.py

===================================================================

diff --git a/rigify/rigs/experimental/super_chain.py b/rigify/rigs/experimental/super_chain.py
index 2b2c472b..42b37682 100644
--- a/rigify/rigs/experimental/super_chain.py
+++ b/rigify/rigs/experimental/super_chain.py
@@ -109,10 +109,10 @@ class Rig:
     #     else:
     #         return 'ERROR'
 
-    def orient_bone( self, eb, axis, scale, reverse = False ):
-        v = Vector((0,0,0))
+    def orient_bone(self, eb, axis, scale, reverse=False):
+        v = Vector((0, 0, 0))
 
-        setattr(v,axis,scale)
+        setattr(v, axis, scale)
 
         if reverse:
             tail_vec = v @ self.obj.matrix_world
@@ -385,7 +385,7 @@ class Rig:
     def create_tail( self, tail_bones ):
         pass
 
-    def create_chain(self):
+    def create_chain(self, pivot=None):
         org_bones = self.org_bones
 
         bpy.ops.object.mode_set(mode='EDIT')
@@ -503,6 +503,10 @@ class Rig:
 
                 ctrl += [ctrl_name]
 
+        # Pivot alignment
+        if pivot:
+            align_bone_x_axis(self.obj, pivot, -v_point)
+
         conv_twk = ''
         # Convergence tweak
         if self.params.conv_bone:
@@ -1163,7 +1167,9 @@ class Rig:
         bones['def'] = self.create_deform()
         if len(self.org_bones) > 2:
             bones['pivot'] = self.create_pivot()
-        bones['chain'] = self.create_chain()
+            bones['chain'] = self.create_chain(bones['pivot']['ctrl'])
+        else:
+            bones['chain'] = self.create_chain()
 
         # Adjust Roll in SINGLE_BONE case
         #if self.SINGLE_BONE:
diff --git a/rigify/rigs/limbs/simple_tentacle.py b/rigify/rigs/limbs/simple_tentacle.py
index 39c59e12..71a9eaa9 100644
--- a/rigify/rigs/limbs/simple_tentacle.py
+++ b/rigify/rigs/limbs/simple_tentacle.py
@@ -1,10 +1,9 @@
 import bpy
 from ...utils import copy_bone
 from ...utils import strip_org, make_deformer_name, connected_children_names
-from ...utils import make_mechanism_name, put_bone, create_sphere_widget
-from ...utils import create_widget, create_circle_widget
+from ...utils import put_bone, create_sphere_widget
+from ...utils import create_circle_widget, align_bone_x_axis
 from ...utils import MetarigError
-from rna_prop_ui import rna_idprop_ui_prop_get
 
 
 class Rig:
@@ -26,25 +25,46 @@ class Rig:
                 "RIGIFY ERROR: invalid rig structure on bone: %s" % (strip_org(bone_name))
             )
 
+    def orient_org_bones(self):
+
+        bpy.ops.object.mode_set(mode='EDIT')
+        eb = self.obj.data.edit_bones
+
+        if self.params.roll_alignment == "automatic":
+
+            first_bone = eb[self.org_bones[0]]
+            last_bone = eb[self.org_bones[-1]]
+
+            # Orient uarm farm bones
+            chain_y_axis = last_bone.tail - first_bone.head
+            chain_rot_axis = first_bone.y_axis.cross(chain_y_axis)  # ik-plane normal axis (rotation)
+            if chain_rot_axis.length < first_bone.length/100:
+                chain_rot_axis = first_bone.x_axis.normalized()
+            else:
+                chain_rot_axis = chain_rot_axis.normalized()
+
+            for bone in self.org_bones:
+                align_bone_x_axis(self.obj, bone, chain_rot_axis)
+
     def make_controls(self):
 
-        bpy.ops.object.mode_set(mode ='EDIT')
+        bpy.ops.object.mode_set(mode='EDIT')
         org_bones = self.org_bones
 
         ctrl_chain = []
-        for i in range( len( org_bones ) ):
+        for i in range(len(org_bones)):
             name = org_bones[i]
 
-            ctrl_bone  = copy_bone(
+            ctrl_bone = copy_bone(
                 self.obj,
                 name,
                 strip_org(name)
             )
 
-            ctrl_chain.append( ctrl_bone )
+            ctrl_chain.append(ctrl_bone)
 
         # Make widgets
-        bpy.ops.object.mode_set(mode ='OBJECT')
+        bpy.ops.object.mode_set(mode='OBJECT')
 
         for ctrl in ctrl_chain:
             create_circle_widget(self.obj, ctrl, radius=0.3, head_tail=0.5)
@@ -58,8 +78,8 @@ class Rig:
         org_bones = self.org_bones
 
         tweak_chain = []
-        for i in range( len( org_bones ) + 1 ):
-            if i == len( org_bones ):
+        for i in range(len(org_bones) + 1):
+            if i == len(org_bones):
                 # Make final tweak at the tip of the tentacle
                 name = org_bones[i-1]
             else:
@@ -71,32 +91,32 @@ class Rig:
                 "tweak_" + strip_org(name)
             )
 
-            tweak_e = eb[ tweak_bone ]
+            tweak_e = eb[tweak_bone]
 
-            tweak_e.length /= 2 # Set size to half
+            tweak_e.length /= 2     # Set size to half
 
             if i == len( org_bones ):
                 # Position final tweak at the tip
-                put_bone( self.obj, tweak_bone, eb[ org_bones[-1]].tail )
+                put_bone(self.obj, tweak_bone, eb[org_bones[-1]].tail)
 
-            tweak_chain.append( tweak_bone )
+            tweak_chain.append(tweak_bone)
 
         # Make widgets
-        bpy.ops.object.mode_set(mode = 'OBJECT')
+        bpy.ops.object.mode_set(mode='OBJECT')
 
         for tweak in tweak_chain:
-            create_sphere_widget( self.obj, tweak )
+            create_sphere_widget(self.obj, tweak)
 
-            tweak_pb = self.obj.pose.bones[ tweak ]
+            tweak_pb = self.obj.pose.bones[tweak]
 
             # Set locks
-            if tweak_chain.index( tweak ) != len( tweak_chain ) - 1:
+            if tweak_chain.index(tweak) != len(tweak_chain) - 1:
                 tweak_pb.lock_rotation = (True, False, True)
-                tweak_pb.lock_scale    = (False, True, False)
+                tweak_pb.lock_scale = (False, True, False)
             else:
                 tweak_pb.lock_rotation_w = True
-                tweak_pb.lock_rotation   = (True, True, True)
-                tweak_pb.lock_scale      = (True, True, True)
+                tweak_pb.lock_rotation = (True, True, True)
+                tweak_pb.lock_scale = (True, True, True)
 
             # Set up tweak bone layers
             if self.tweak_layers:
@@ -106,79 +126,78 @@ class Rig:
 
     def make_deform(self):
 
-        bpy.ops.object.mode_set(mode ='EDIT')
+        bpy.ops.object.mode_set(mode='EDIT')
         org_bones = self.org_bones
 
         def_chain = []
-        for i in range( len( org_bones ) ):
+        for i in range(len(org_bones)):
             name = org_bones[i]
 
-            def_bone  = copy_bone(
+            def_bone = copy_bone(
                 self.obj,
                 name,
                 make_deformer_name(strip_org(name))
             )
 
-            def_chain.append( def_bone )
+            def_chain.append(def_bone)
 
         return def_chain
 
     def parent_bones(self, all_bones):
 
-        bpy.ops.object.mode_set(mode ='EDIT')
+        bpy.ops.object.mode_set(mode='EDIT')
         org_bones = self.org_bones
-        eb        = self.obj.data.edit_bones
+        eb = self.obj.data.edit_bones
 
         # Parent control bones
         for bone in all_bones['control'][1:]:
-            previous_index    = all_bones['control'].index( bone ) - 1
-            eb[ bone ].parent = eb[ all_bones['control'][previous_index] ]
+            previous_index = all_bones['control'].index(bone) - 1
+            eb[bone].parent = eb[all_bones['control'][previous_index]]
 
         # Parent tweak bones
         tweaks = all_bones['tweak']
         for tweak in all_bones['tweak']:
             parent = ''
-            if tweaks.index( tweak ) == len( tweaks ) - 1:
-                parent = all_bones['control'][ -1 ]
+            if tweaks.index(tweak) == len(tweaks) - 1:
+                parent = all_bones['control'][-1]
             else:
-                parent = all_bones['control'][ tweaks.index( tweak ) ]
+                parent = all_bones['control'][tweaks.index(tweak)]
 
-            eb[ tweak ].parent = eb[ parent ]
+            eb[tweak].parent = eb[parent]
 
         # Parent deform bones
         for bone in all_bones['deform'][1:]:
-            previous_index = all_bones['deform'].index( bone ) - 1
+            previous_index = all_bones['deform'].index(bone) - 1
 
-            eb[ bone ].parent = eb[ all_bones['deform'][previous_index] ]
-            eb[ bone ].use_connect = True
+            eb[bone].parent = eb[all_bones['deform'][previous_index]]
+            eb[bone].use_connect = True
 
         # Parent org bones ( to tweaks by default, or to the controls )
-        for org, tweak in zip( org_bones, all_bones['tweak'] ):
-            eb[ org ].parent = eb[ tweak ]
+        for org, tweak in zip(org_bones, all_bones['tweak']):
+            eb[org].parent = eb[tweak]
 
     def make_constraints(self, all_bones):
 
-        bpy.ops.object.mode_set(mode ='OBJECT')
-        org_bones = self.org_bones
-        pb        = self.obj.pose.bones
+        bpy.ops.object.mode_set(mode='OBJECT')
+        pb = self.obj.pose.bones
 
         # Deform bones' constraints
-        ctrls   = all_bones['control']
-        tweaks  = all_bones['tweak'  ]
-        deforms = all_bones['deform' ]
+        ctrls = all_bones['control']
+        tweaks = all_bones['tweak']
+        deforms = all_bones['deform']
 
         for deform, tweak, ctrl in zip( deforms, tweaks, ctrls ):
-            con           = pb[deform].constraints.new('COPY_TRANSFORMS')
-            con.target    = self.obj
+            con = pb[deform].constraints.new('COPY_TRANSFORMS')
+            con.target = self.obj
             con.subtarget = tweak
 
-            con           = pb[deform].constraints.new('DAMPED_TRACK')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
+            con = pb[deform].constraints.new('DAMPED_TRACK')
+            con.target = self.obj
+            con.subtarget = tweaks[tweaks.index(tweak) + 1]
 
-            con           = pb[deform].constraints.new('STRETCH_TO')
-            con.target    = self.obj
-            con.subtarget = tweaks[ tweaks.index( tweak ) + 1 ]
+            con = pb[deform].constraints.new('STRETCH_TO')
+            con.target = self.obj
+            con.subtarget = tweaks[tweaks.index(tweak) + 1]
 
             # Control 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list