[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