[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2037] trunk/py/scripts/addons/rigify: Rigify: users can now specify layer names in the metarig armature properties.

Nathan Vegdahl cessen at cessen.com
Sat Jun 18 22:41:44 CEST 2011


Revision: 2037
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2037
Author:   cessen
Date:     2011-06-18 20:41:43 +0000 (Sat, 18 Jun 2011)
Log Message:
-----------
Rigify: users can now specify layer names in the metarig armature properties.

The layer names are then used in creating the custom rig layer UI.  This is
useful for users that do not want to--or do not have the knowledge to--edit
the generated python script by hand.  It is also handy even for more advanced
users when regerating the rig over and over (which over-writes the script
and any hand-made edits).

Also misc bug fixes in some of the rig types.

Modified Paths:
--------------
    trunk/py/scripts/addons/rigify/__init__.py
    trunk/py/scripts/addons/rigify/generate.py
    trunk/py/scripts/addons/rigify/metarigs/human.py
    trunk/py/scripts/addons/rigify/rig_ui_template.py
    trunk/py/scripts/addons/rigify/rigs/biped/arm/fk.py
    trunk/py/scripts/addons/rigify/rigs/biped/leg/fk.py
    trunk/py/scripts/addons/rigify/rigs/spine.py
    trunk/py/scripts/addons/rigify/ui.py

Modified: trunk/py/scripts/addons/rigify/__init__.py
===================================================================
--- trunk/py/scripts/addons/rigify/__init__.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/__init__.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -115,6 +115,37 @@
     name = bpy.props.StringProperty()
 
 
+class RigifyArmatureProps(bpy.types.PropertyGroup):
+    layer_name_01 = bpy.props.StringProperty(name="Layer 1 Name", default="1")
+    layer_name_02 = bpy.props.StringProperty(name="Layer 2 Name", default="2")
+    layer_name_03 = bpy.props.StringProperty(name="Layer 3 Name", default="3")
+    layer_name_04 = bpy.props.StringProperty(name="Layer 4 Name", default="4")
+    layer_name_05 = bpy.props.StringProperty(name="Layer 5 Name", default="5")
+    layer_name_06 = bpy.props.StringProperty(name="Layer 6 Name", default="6")
+    layer_name_07 = bpy.props.StringProperty(name="Layer 7 Name", default="7")
+    layer_name_08 = bpy.props.StringProperty(name="Layer 8 Name", default="8")
+    layer_name_09 = bpy.props.StringProperty(name="Layer 9 Name", default="9")
+    layer_name_10 = bpy.props.StringProperty(name="Layer 10 Name", default="10")
+    layer_name_11 = bpy.props.StringProperty(name="Layer 11 Name", default="11")
+    layer_name_12 = bpy.props.StringProperty(name="Layer 12 Name", default="12")
+    layer_name_13 = bpy.props.StringProperty(name="Layer 13 Name", default="13")
+    layer_name_14 = bpy.props.StringProperty(name="Layer 14 Name", default="14")
+    layer_name_15 = bpy.props.StringProperty(name="Layer 15 Name", default="15")
+    layer_name_16 = bpy.props.StringProperty(name="Layer 16 Name", default="16")
+    layer_name_17 = bpy.props.StringProperty(name="Layer 17 Name", default="17")
+    layer_name_18 = bpy.props.StringProperty(name="Layer 18 Name", default="18")
+    layer_name_19 = bpy.props.StringProperty(name="Layer 19 Name", default="19")
+    layer_name_20 = bpy.props.StringProperty(name="Layer 20 Name", default="20")
+    layer_name_21 = bpy.props.StringProperty(name="Layer 21 Name", default="21")
+    layer_name_22 = bpy.props.StringProperty(name="Layer 22 Name", default="22")
+    layer_name_23 = bpy.props.StringProperty(name="Layer 23 Name", default="23")
+    layer_name_24 = bpy.props.StringProperty(name="Layer 24 Name", default="24")
+    layer_name_25 = bpy.props.StringProperty(name="Layer 25 Name", default="25")
+    layer_name_26 = bpy.props.StringProperty(name="Layer 26 Name", default="26")
+    layer_name_27 = bpy.props.StringProperty(name="Layer 27 Name", default="27")
+    layer_name_28 = bpy.props.StringProperty(name="Layer 28 Name", default="28")
+
+
 ##### REGISTER #####
 
 def register():
@@ -123,10 +154,13 @@
 
     bpy.utils.register_class(RigifyName)
     bpy.utils.register_class(RigifyParameters)
+    bpy.utils.register_class(RigifyArmatureProps)
 
     bpy.types.PoseBone.rigify_type = bpy.props.StringProperty(name="Rigify Type", description="Rig type for this bone.")
     bpy.types.PoseBone.rigify_parameters = bpy.props.CollectionProperty(type=RigifyParameters)
 
+    bpy.types.Armature.rigify_props = bpy.props.CollectionProperty(type=RigifyArmatureProps)
+
     IDStore = bpy.types.WindowManager
     IDStore.rigify_collection = bpy.props.EnumProperty(items=col_enum_list, default="All", name="Rigify Active Collection", description="The selected rig collection")
     IDStore.rigify_types = bpy.props.CollectionProperty(type=RigifyName)
@@ -144,6 +178,7 @@
 def unregister():
     del bpy.types.PoseBone.rigify_type
     del bpy.types.PoseBone.rigify_parameters
+    del bpy.types.Armature.rigify_props
 
     IDStore = bpy.types.WindowManager
     del IDStore.rigify_collection
@@ -152,6 +187,7 @@
 
     bpy.utils.unregister_class(RigifyName)
     bpy.utils.unregister_class(RigifyParameters)
+    bpy.utils.unregister_class(RigifyArmatureProps)
 
     metarig_menu.unregister()
     ui.unregister()

Modified: trunk/py/scripts/addons/rigify/generate.py
===================================================================
--- trunk/py/scripts/addons/rigify/generate.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/generate.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -282,6 +282,13 @@
         vis_layers[i] = vis_layers[i] and not (ORG_LAYER[i] or MCH_LAYER[i] or DEF_LAYER[i])
     obj.data.layers = vis_layers
 
+    # Create list of layer names
+    if len(metarig.data.rigify_props) < 1:
+        metarig.data.rigify_props.add()
+    layer_names = []
+    for i in range(28):
+        layer_names += [getattr(metarig.data.rigify_props[0], "layer_name_%s" % str(i+1).rjust(2, "0"))]
+
     # Generate the UI script
     if "rig_ui.py" in bpy.data.texts:
         script = bpy.data.texts["rig_ui.py"]
@@ -291,7 +298,7 @@
     script.write(UI_SLIDERS % rig_id)
     for s in ui_scripts:
         script.write("\n        " + s.replace("\n", "\n        ") + "\n")
-    script.write(layers_ui(vis_layers))
+    script.write(layers_ui(vis_layers, layer_names))
     script.write(UI_REGISTER)
     script.use_module = True
 

Modified: trunk/py/scripts/addons/rigify/metarigs/human.py
===================================================================
--- trunk/py/scripts/addons/rigify/metarigs/human.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/metarigs/human.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -24,6 +24,20 @@
     bpy.ops.object.mode_set(mode='EDIT')
     arm = obj.data
 
+    props = arm.rigify_props.add()
+    props.layer_name_01 = "Torso"
+    props.layer_name_03 = "Head"
+    props.layer_name_05 = "Fingers"
+    props.layer_name_06 = "Fingers (tweak)"
+    props.layer_name_07 = "Arm.L (FK)"
+    props.layer_name_08 = "Arm.L (IK)"
+    props.layer_name_09 = "Arm.R (FK)"
+    props.layer_name_10 = "Arm.R (IK)"
+    props.layer_name_11 = "Leg.L (FK)"
+    props.layer_name_12 = "Leg.L (IK)"
+    props.layer_name_13 = "Leg.R (FK)"
+    props.layer_name_14 = "Leg.R (IK)"
+
     bones = {}
 
     bone = arm.edit_bones.new('hips')

Modified: trunk/py/scripts/addons/rigify/rig_ui_template.py
===================================================================
--- trunk/py/scripts/addons/rigify/rig_ui_template.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/rig_ui_template.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -493,8 +493,8 @@
 '''
 
 
-def layers_ui(layers):
-    """ Turn a list of booleans into a layer UI.
+def layers_ui(layers, names):
+    """ Turn a list of booleans + a list of names into a layer UI.
     """
 
     code = '''
@@ -522,7 +522,7 @@
             if i == 28:
                 code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='Root')\n" % (str(i))
             else:
-                code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(i), str(i + 1))
+                code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(i), names[i])
         i += 1
 
     return code

Modified: trunk/py/scripts/addons/rigify/rigs/biped/arm/fk.py
===================================================================
--- trunk/py/scripts/addons/rigify/rigs/biped/arm/fk.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/rigs/biped/arm/fk.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -120,6 +120,8 @@
         uarm_p = pb[uarm]
         farm_p = pb[farm]
         hand_p = pb[hand]
+        if self.org_parent != None:
+            hinge_p = pb[hinge]
 
         if self.org_parent != None:
             socket1_p = pb[socket1]
@@ -134,6 +136,13 @@
         else:
             farm_p.lock_rotation = (True, True, False)
 
+        # Hinge transforms are locked, for auto-ik
+        if self.org_parent != None:
+            hinge_p.lock_location = True, True, True
+            hinge_p.lock_rotation = True, True, True
+            hinge_p.lock_rotation_w = True
+            hinge_p.lock_scale = True, True, True
+
         # Set up custom properties
         if self.org_parent != None:
             prop = rna_idprop_ui_prop_get(uarm_p, "isolate", create=True)

Modified: trunk/py/scripts/addons/rigify/rigs/biped/leg/fk.py
===================================================================
--- trunk/py/scripts/addons/rigify/rigs/biped/leg/fk.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/rigs/biped/leg/fk.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -158,12 +158,14 @@
         thigh_p = pb[thigh]
         shin_p = pb[shin]
         foot_p = pb[foot]
+        if self.org_parent != None:
+            hinge_p = pb[hinge]
 
         if self.org_parent != None:
             socket1_p = pb[socket1]
             socket2_p = pb[socket2]
 
-        # Set the elbow to only bend on the x-axis.
+        # Set the knee to only bend on the x-axis.
         shin_p.rotation_mode = 'XYZ'
         if 'X' in self.primary_rotation_axis:
             shin_p.lock_rotation = (False, True, True)
@@ -172,6 +174,13 @@
         else:
             shin_p.lock_rotation = (True, True, False)
 
+        # Hinge transforms are locked, for auto-ik
+        if self.org_parent != None:
+            hinge_p.lock_location = True, True, True
+            hinge_p.lock_rotation = True, True, True
+            hinge_p.lock_rotation_w = True
+            hinge_p.lock_scale = True, True, True
+
         # Set up custom properties
         if self.org_parent != None:
             prop = rna_idprop_ui_prop_get(thigh_p, "isolate", create=True)

Modified: trunk/py/scripts/addons/rigify/rigs/spine.py
===================================================================
--- trunk/py/scripts/addons/rigify/rigs/spine.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/rigs/spine.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -508,6 +508,9 @@
         if w != None:
             obj_to_bone(w, self.obj, self.org_bones[-1])
 
+        # Layers
+        pb[main_control].bone.layers = pb[self.org_bones[0]].bone.layers
+
         return [main_control] + controls
 
     def generate(self):

Modified: trunk/py/scripts/addons/rigify/ui.py
===================================================================
--- trunk/py/scripts/addons/rigify/ui.py	2011-06-18 07:04:53 UTC (rev 2036)
+++ trunk/py/scripts/addons/rigify/ui.py	2011-06-18 20:41:43 UTC (rev 2037)
@@ -81,6 +81,46 @@

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list