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.
This commit is contained in:
parent
69ada355ca
commit
d12c4a4017
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue