[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2056] trunk/py/scripts/addons/rigify: Rigify: constraints are now copied over from metarig.

Nathan Vegdahl cessen at cessen.com
Wed Jun 22 04:06:20 CEST 2011


Revision: 2056
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2056
Author:   cessen
Date:     2011-06-22 02:06:16 +0000 (Wed, 22 Jun 2011)
Log Message:
-----------
Rigify: constraints are now copied over from metarig.

This allows advanced users to do certain limited custom rigging work
in the metarig, and have it transfer to the generated rig.
Custom properties are also copied when using the copy_bone function
in utils.
TODO: transfer drivers from the metarig as well.

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

Modified: trunk/py/scripts/addons/rigify/generate.py
===================================================================
--- trunk/py/scripts/addons/rigify/generate.py	2011-06-21 17:18:40 UTC (rev 2055)
+++ trunk/py/scripts/addons/rigify/generate.py	2011-06-22 02:06:16 UTC (rev 2056)
@@ -130,6 +130,15 @@
     obj.select = True
     scene.objects.active = obj
 
+    # Copy over bone properties
+    for bone in metarig.data.bones:
+        bone_gen = obj.data.bones[bone.name]
+
+        # B-bone stuff
+        bone_gen.bbone_segments = bone.bbone_segments
+        bone_gen.bbone_in = bone.bbone_in
+        bone_gen.bbone_out = bone.bbone_out
+
     # Copy over the pose_bone properties
     for bone in metarig.pose.bones:
         bone_gen = obj.pose.bones[bone.name]
@@ -146,15 +155,29 @@
         for prop in bone.keys():
             bone_gen[prop] = bone[prop]
 
-    # Copy over bone properties
-    for bone in metarig.data.bones:
-        bone_gen = obj.data.bones[bone.name]
+        # Constraints
+        for con1 in bone.constraints:
+            con2 = bone_gen.constraints.new(type=con1.type)
 
-        # B-bone stuff
-        bone_gen.bbone_segments = bone.bbone_segments
-        bone_gen.bbone_in = bone.bbone_in
-        bone_gen.bbone_out = bone.bbone_out
+            # Copy attributes
+            keys = dir(con1)
+            for key in keys:
+                if not key.startswith("_") \
+                and not key.startswith("error_") \
+                and key != "is_valid" \
+                and key != "rna_type" \
+                and key != "type" \
+                and key != "bl_rna":
+                    try:
+                        setattr(con2, key, getattr(con1, key))
+                    except AttributeError:
+                        print("Could not write to constraint attribute '%s'" % key)
 
+            # Set metarig target to rig target
+            if "target" in keys:
+                if getattr(con2, "target") == metarig:
+                    setattr(con2, "target", obj)
+
     t.tick("Duplicate rig: ")
     #----------------------------------
     # Make a list of the original bones so we can keep track of them.

Modified: trunk/py/scripts/addons/rigify/utils.py
===================================================================
--- trunk/py/scripts/addons/rigify/utils.py	2011-06-21 17:18:40 UTC (rev 2055)
+++ trunk/py/scripts/addons/rigify/utils.py	2011-06-22 02:06:16 UTC (rev 2056)
@@ -185,6 +185,17 @@
         pose_bone_2.lock_rotation_w = pose_bone_1.lock_rotation_w
         pose_bone_2.lock_rotations_4d = pose_bone_1.lock_rotations_4d
 
+        # Copy custom properties
+        for key in pose_bone_1.keys():
+            if key != "_RNA_UI" \
+            and key != "rigify_parameters" \
+            and key != "rigify_type":
+                prop1 = rna_idprop_ui_prop_get(pose_bone_1, key, create=False)
+                prop2 = rna_idprop_ui_prop_get(pose_bone_2, key, create=True)
+                pose_bone_2[key] = pose_bone_1[key]
+                for key in prop1.keys():
+                    prop2[key] = prop1[key]
+
         bpy.ops.object.mode_set(mode='EDIT')
 
         return bone_name_2



More information about the Bf-extensions-cvs mailing list