Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rigify/generate.py39
-rw-r--r--rigify/utils.py11
2 files changed, 42 insertions, 8 deletions
diff --git a/rigify/generate.py b/rigify/generate.py
index 96a6d68d..73552442 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -130,6 +130,15 @@ def generate_rig(context, metarig):
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,14 +155,28 @@ def generate_rig(context, metarig):
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]
-
- # B-bone stuff
- bone_gen.bbone_segments = bone.bbone_segments
- bone_gen.bbone_in = bone.bbone_in
- bone_gen.bbone_out = bone.bbone_out
+ # Constraints
+ for con1 in bone.constraints:
+ con2 = bone_gen.constraints.new(type=con1.type)
+
+ # 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: ")
#----------------------------------
diff --git a/rigify/utils.py b/rigify/utils.py
index c9771222..4add7a15 100644
--- a/rigify/utils.py
+++ b/rigify/utils.py
@@ -185,6 +185,17 @@ def copy_bone(obj, bone_name, assign_name=''):
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