[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4281] trunk/py/scripts/addons/rigify/ utils.py: Rigify: improved rigify.utils.write_metarig()

Nathan Vegdahl cessen at cessen.com
Fri Feb 15 19:46:36 CET 2013


Revision: 4281
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4281
Author:   cessen
Date:     2013-02-15 18:46:36 +0000 (Fri, 15 Feb 2013)
Log Message:
-----------
Rigify: improved rigify.utils.write_metarig()

It is now able to write out all relevant layer data.
Also, the script generated can now be directly run, for testing.

Modified Paths:
--------------
    trunk/py/scripts/addons/rigify/utils.py

Modified: trunk/py/scripts/addons/rigify/utils.py
===================================================================
--- trunk/py/scripts/addons/rigify/utils.py	2013-02-15 18:08:45 UTC (rev 4280)
+++ trunk/py/scripts/addons/rigify/utils.py	2013-02-15 18:46:36 UTC (rev 4281)
@@ -494,12 +494,14 @@
             return [x in layers for x in range(0, 32)]
 
 
-def write_metarig(obj, layers=False, func_name="create_sample"):
+def write_metarig(obj, layers=False, func_name="create"):
     """
     Write a metarig as a python script, this rig is to have all info needed for
     generating the real rig with rigify.
     """
     code = []
+    
+    code.append("import bpy\n")
 
     code.append("def %s(obj):" % func_name)
     code.append("    # generated by rigify.utils.write_metarig")
@@ -508,6 +510,18 @@
     code.append("    arm = obj.data")
 
     arm = obj.data
+
+    # Rigify layer layout info
+    if layers and len(arm.rigify_layers) > 0:
+        code.append("\n    for i in range(" + str(len(arm.rigify_layers)) + "):")
+        code.append("        arm.rigify_layers.add()\n")
+
+        for i in range(len(arm.rigify_layers)):
+            name = arm.rigify_layers[i].name
+            row = arm.rigify_layers[i].row
+            code.append('    arm.rigify_layers[' + str(i) + '].name = "' + name + '"')
+            code.append('    arm.rigify_layers[' + str(i) + '].row = ' + str(row))
+
     # write parents first
     bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones]
     bones.sort(key=lambda item: item[0])
@@ -569,6 +583,23 @@
     code.append("        bone.select_tail = True")
     code.append("        arm.edit_bones.active = bone")
 
+    # Set appropriate layers visible
+    if layers:
+        # Find what layers have bones on them
+        active_layers = []
+        for bone_name in bones:
+            bone = obj.data.bones[bone_name]
+            for i in range(len(bone.layers)):
+                if bone.layers[i]:
+                    if i not in active_layers:
+                        active_layers.append(i)
+        active_layers.sort()
+
+        code.append("\n    arm.layers = [(x in " + str(active_layers) + ") for x in range(" + str(len(arm.layers)) + ")]")
+
+    code.append('\nif __name__ == "__main__":')
+    code.append("    " + func_name + "(bpy.context.active_object)")
+
     return "\n".join(code)
 
 



More information about the Bf-extensions-cvs mailing list