[Bf-extensions-cvs] [d12c4a40] master: Rigify: copy rigs can now rename the bone to DEF instead of copying.

Alexander Gavrilov noreply at git.blender.org
Wed Oct 23 12:28:31 CEST 2019


Commit: d12c4a40175c2a8a3d409ec1c115dd27b932ff7d
Author: Alexander Gavrilov
Date:   Mon Oct 21 17:44:21 2019 +0300
Branches: master
https://developer.blender.org/rBAd12c4a40175c2a8a3d409ec1c115dd27b932ff7d

Rigify: copy rigs can now rename the bone to DEF instead of copying.

This is necessary to fully preserve complex custom rigging
(especially with B-Bones) included directly in the metarig.
Doing this otherwise would require implementing correct
copying of all possible constraints and bone settings.

===================================================================

M	rigify/rigs/basic/copy_chain.py
M	rigify/rigs/basic/super_copy.py

===================================================================

diff --git a/rigify/rigs/basic/copy_chain.py b/rigify/rigs/basic/copy_chain.py
index 5145d735..a3920ced 100644
--- a/rigify/rigs/basic/copy_chain.py
+++ b/rigify/rigs/basic/copy_chain.py
@@ -22,9 +22,10 @@ import bpy
 
 from ..chain_rigs import SimpleChainRig
 
+from ...utils.layers import DEF_LAYER
 from ...utils.errors import MetarigError
 from ...utils.rig import connected_children_names
-from ...utils.naming import strip_org, make_deformer_name
+from ...utils.naming import make_derived_name
 from ...utils.widgets_basic import create_bone_widget
 
 from ...base_rig import BaseRig, stage
@@ -41,7 +42,12 @@ class Rig(SimpleChainRig):
         """ Gather and validate data about the rig.
         """
         self.make_controls = self.params.make_controls
-        self.make_deforms = self.params.make_deforms
+
+        deform = self.params.make_deforms
+        rename = self.params.rename_to_deform
+
+        self.make_deforms = deform and not rename
+        self.rename_deforms = deform and rename
 
     ##############################
     # Control chain
@@ -92,6 +98,20 @@ class Rig(SimpleChainRig):
         if self.make_deforms:
             super().rig_deform_chain()
 
+    ##############################
+    # Rename To Deform
+
+    def finalize(self):
+        if self.rename_deform:
+            new_names = [ self.rename_bone(name, make_derived_name(name, 'def')) for name in self.bones.org ]
+
+            for name in new_names:
+                bone = self.get_bone(name).bone
+                bone.use_deform = True
+                bone.layers = DEF_LAYER
+
+    ##############################
+    # Parameter UI
 
     @classmethod
     def add_parameters(self, params):
@@ -101,6 +121,11 @@ class Rig(SimpleChainRig):
         params.make_controls = bpy.props.BoolProperty(name="Controls", default=True, description="Create control bones for the copy")
         params.make_deforms = bpy.props.BoolProperty(name="Deform", default=True, description="Create deform bones for the copy")
 
+        params.rename_to_deform = bpy.props.BoolProperty(
+            name        = "Rename To Deform",
+            default     = False,
+            description = "Rename the original bone itself to use as deform bone (advanced feature)"
+        )
 
     @classmethod
     def parameters_ui(self, layout, params):
@@ -111,6 +136,10 @@ class Rig(SimpleChainRig):
         r = layout.row()
         r.prop(params, "make_deforms")
 
+        if params.make_deforms:
+            r = layout.row()
+            r.prop(params, "rename_to_deform")
+
 
 def create_sample(obj):
     """ Create a sample metarig for this rig type.
diff --git a/rigify/rigs/basic/super_copy.py b/rigify/rigs/basic/super_copy.py
index 5abbf22e..5fc589c4 100644
--- a/rigify/rigs/basic/super_copy.py
+++ b/rigify/rigs/basic/super_copy.py
@@ -22,6 +22,7 @@ import bpy
 
 from ...base_rig import BaseRig
 
+from ...utils.layers import DEF_LAYER
 from ...utils.naming import strip_org, make_deformer_name
 from ...utils.widgets_basic import create_bone_widget, create_circle_widget
 
@@ -43,7 +44,12 @@ class Rig(BaseRig):
 
         self.make_control = self.params.make_control
         self.make_widget  = self.params.make_widget
-        self.make_deform  = self.params.make_deform
+
+        deform = self.params.make_deform
+        rename = self.params.rename_to_deform
+
+        self.make_deform  = deform and not rename
+        self.rename_deform = deform and rename
 
 
     def generate_bones(self):
@@ -91,6 +97,15 @@ class Rig(BaseRig):
                 create_bone_widget(self.obj, bones.ctrl)
 
 
+    def finalize(self):
+        if self.rename_deform:
+            new_name = self.rename_bone(self.bones.org, make_deformer_name(self.org_name))
+
+            bone = self.get_bone(new_name).bone
+            bone.use_deform = True
+            bone.layers = DEF_LAYER
+
+
     @classmethod
     def add_parameters(self, params):
         """ Add the parameters of this rig type to the
@@ -114,6 +129,12 @@ class Rig(BaseRig):
             description = "Create a deform bone for the copy"
         )
 
+        params.rename_to_deform = bpy.props.BoolProperty(
+            name        = "Rename To Deform",
+            default     = False,
+            description = "Rename the original bone itself to use as deform bone (advanced feature)"
+        )
+
 
     @classmethod
     def parameters_ui(self, layout, params):
@@ -127,6 +148,10 @@ class Rig(BaseRig):
         r = layout.row()
         r.prop(params, "make_deform")
 
+        if params.make_deform:
+            r = layout.row()
+            r.prop(params, "rename_to_deform")
+
 
 def create_sample(obj):
     """ Create a sample metarig for this rig type.



More information about the Bf-extensions-cvs mailing list