Rigify: fix the use_global_undo change and fix driver creation for 2.8.
Using obj.animation_data.drivers[-1] in driver creation is very bad and error prone. After recent change in Blender, that won't even work for drivers on Bone, so fix all such uses.
This commit is contained in:
parent
6b753382d6
commit
d3e81ceb35
|
@ -99,6 +99,7 @@ def generate_rig(context, metarig):
|
|||
# Get rid of anim data in case the rig already existed
|
||||
print("Clear rig animation data.")
|
||||
obj.animation_data_clear()
|
||||
obj.data.animation_data_clear()
|
||||
|
||||
# Select generated rig object
|
||||
metarig.select_set(False)
|
||||
|
|
|
@ -632,8 +632,8 @@ class RigUI(bpy.types.Panel):
|
|||
bl_space_type = 'VIEW_3D'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "Rig Main Properties"
|
||||
bl_idname = rig_id + "_PT_rig_ui"
|
||||
bl_category = 'View'
|
||||
bl_idname = "VIEW3D_PT_rig_ui_" + rig_id
|
||||
bl_category = 'Item'
|
||||
|
||||
@classmethod
|
||||
def poll(self, context):
|
||||
|
@ -676,8 +676,8 @@ class RigLayers(bpy.types.Panel):
|
|||
bl_space_type = 'VIEW_3D'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "Rig Layers"
|
||||
bl_idname = rig_id + "_PT_rig_layers"
|
||||
bl_category = 'View'
|
||||
bl_idname = "VIEW3D_PT_rig_layers_" + rig_id
|
||||
bl_category = 'Item'
|
||||
|
||||
@classmethod
|
||||
def poll(self, context):
|
||||
|
|
|
@ -479,8 +479,8 @@ class RigUI(bpy.types.Panel):
|
|||
bl_space_type = 'VIEW_3D'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "Rig Main Properties"
|
||||
bl_idname = rig_id + "_PT_rig_ui"
|
||||
bl_category = 'View'
|
||||
bl_idname = "VIEW3D_PT_rig_ui_" + rig_id
|
||||
bl_category = 'Item'
|
||||
|
||||
@classmethod
|
||||
def poll(self, context):
|
||||
|
@ -523,8 +523,8 @@ class RigLayers(bpy.types.Panel):
|
|||
bl_space_type = 'VIEW_3D'
|
||||
bl_region_type = 'UI'
|
||||
bl_label = "Rig Layers"
|
||||
bl_idname = rig_id + "_PT_rig_layers"
|
||||
bl_category = 'View'
|
||||
bl_idname = "VIEW3D_PT_rig_layers_" + rig_id
|
||||
bl_category = 'Item'
|
||||
|
||||
@classmethod
|
||||
def poll(self, context):
|
||||
|
|
|
@ -86,7 +86,8 @@ def create_arm( cls, bones ):
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv_fcu = pb[b].constraints[-1].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'SUM'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -96,7 +97,7 @@ def create_arm( cls, bones ):
|
|||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = cls.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
|
|
@ -242,7 +242,8 @@ def create_leg( cls, bones ):
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv_fcu = pb[b].constraints[-1].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -252,7 +253,7 @@ def create_leg( cls, bones ):
|
|||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = cls.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
@ -302,7 +303,8 @@ def create_leg( cls, bones ):
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = org_bones[3]
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv_fcu = pb[b].constraints[-1].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -312,7 +314,7 @@ def create_leg( cls, bones ):
|
|||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = cls.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
|
|
@ -111,7 +111,8 @@ def create_paw( cls, bones ):
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv_fcu = pb[b].constraints[-1].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -121,7 +122,7 @@ def create_paw( cls, bones ):
|
|||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = cls.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
@ -183,7 +184,8 @@ def create_paw( cls, bones ):
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = org_bones[3]
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv_fcu = pb[b].constraints[-1].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -193,7 +195,7 @@ def create_paw( cls, bones ):
|
|||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = cls.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
|
|
@ -528,7 +528,8 @@ class Rig:
|
|||
# driving the follow rotation switches for neck and head
|
||||
for bone, prop, in zip( owners, props ):
|
||||
# Add driver to copy rotation constraint
|
||||
drv = pb[ bone ].constraints[ 0 ].driver_add("influence").driver
|
||||
drv_fcu = pb[ bone ].constraints[ 0 ].driver_add("influence")
|
||||
drv = drv_fcu.driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
|
@ -538,7 +539,7 @@ class Rig:
|
|||
var.targets[0].data_path = \
|
||||
torso.path_from_id() + '['+ '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
drv_modifier = drv_fcu.modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
|
|
|
@ -5,7 +5,7 @@ from ...utils import strip_org, make_deformer_name, connected_children_names
|
|||
from ...utils import create_chain_widget
|
||||
from ...utils import make_mechanism_name, create_cube_widget
|
||||
from ...utils import ControlLayersOption
|
||||
from ...utils.mechanism import make_property
|
||||
from ...utils.mechanism import make_property, make_driver
|
||||
from ..limbs.limb_utils import get_bone_name
|
||||
|
||||
|
||||
|
@ -473,22 +473,7 @@ class Rig:
|
|||
# driving the follow rotation switches for neck and head
|
||||
for bone, prop, in zip(owners, props):
|
||||
# Add driver to copy rotation constraint
|
||||
drv = pb[bone].constraints[0].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
torso.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[bone].constraints[0], "influence", variables=[(self.obj, torso, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
def locks_and_widgets(self, bones):
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
|
|
@ -11,7 +11,7 @@ from ...utils import create_limb_widget, connected_children_names
|
|||
from ...utils import align_bone_x_axis, align_bone_z_axis
|
||||
from ...rig_ui_template import UTILITIES_RIG_ARM, REGISTER_RIG_ARM
|
||||
from ...utils import ControlLayersOption
|
||||
from ...utils.mechanism import make_property
|
||||
from ...utils.mechanism import make_property, make_driver
|
||||
from ..widgets import create_ikarrow_widget
|
||||
from math import trunc, pi
|
||||
|
||||
|
@ -123,15 +123,7 @@ class Rig:
|
|||
# prop = rna_idprop_ui_prop_get( pb[ mch ], name, create = True )
|
||||
make_property(pb[main_parent], name, 0.0)
|
||||
|
||||
drv = pb[mch].constraints[0].driver_add("influence").driver
|
||||
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[main_parent].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(pb[mch].constraints[0], "influence", variables=[(self.obj, main_parent, name)])
|
||||
|
||||
size = pb[main_parent].bone.y_axis.length * 10
|
||||
create_gear_widget(self.obj, main_parent, size=size, bone_transform_name=None)
|
||||
|
@ -332,25 +324,11 @@ class Rig:
|
|||
make_property(pb[t], name, defval, max=2.0, soft_max=1.0)
|
||||
|
||||
for j,d in enumerate(def_bones[:-1]):
|
||||
drvs = {}
|
||||
if j != 0:
|
||||
tidx = j
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easein").driver
|
||||
make_driver(self.obj.data.bones[d], "bbone_easein", variables=[(self.obj, tweaks[j], 'rubber_tweak')])
|
||||
|
||||
if j != len( def_bones[:-1] ) - 1:
|
||||
tidx = j + 1
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easeout").driver
|
||||
|
||||
for d in drvs:
|
||||
drv = drvs[d]
|
||||
name = 'rubber_tweak'
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[tweaks[d]].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(self.obj.data.bones[d], "bbone_easeout", variables=[(self.obj, tweaks[j+1], 'rubber_tweak')])
|
||||
|
||||
return def_bones
|
||||
|
||||
|
@ -561,15 +539,7 @@ class Rig:
|
|||
})
|
||||
|
||||
# Add driver to relevant constraint
|
||||
drv = pb[o].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
make_driver(pb[o].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)])
|
||||
|
||||
def create_arm(self, bones):
|
||||
org_bones = self.org_bones
|
||||
|
@ -698,22 +668,8 @@ class Rig:
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'SUM'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[b].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)], polynomial=[1.0, -1.0])
|
||||
|
||||
# Create hand widget
|
||||
create_hand_widget(self.obj, ctrl, bone_transform_name=None)
|
||||
|
@ -747,184 +703,50 @@ class Rig:
|
|||
|
||||
# ik target hide driver
|
||||
pole_target = pb[bones['ik']['ctrl']['ik_target']]
|
||||
drv = pole_target.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pole_target.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# vis-pole hide driver
|
||||
vispole = pb[bones['ik']['visuals']['vispole']]
|
||||
drv = vispole.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(vispole.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# arrow hide driver
|
||||
# pole_target = pb[bones['ik']['ctrl']['limb']]
|
||||
# drv = pole_target.bone.driver_add("hide").driver
|
||||
# drv.type = 'AVERAGE'
|
||||
# limb = pb[bones['ik']['ctrl']['limb']]
|
||||
#
|
||||
# var = drv.variables.new()
|
||||
# var.name = prop
|
||||
# var.type = "SINGLE_PROP"
|
||||
# var.targets[0].id = self.obj
|
||||
# var.targets[0].data_path = \
|
||||
# owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
#
|
||||
# drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
#
|
||||
# drv_modifier.mode = 'POLYNOMIAL'
|
||||
# drv_modifier.poly_order = 1
|
||||
# drv_modifier.coefficients[0] = 0.0
|
||||
# drv_modifier.coefficients[1] = 1.0
|
||||
# make_driver(limb.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
|
||||
for cns in mch_ik.constraints:
|
||||
if 'IK' in cns.type:
|
||||
drv = cns.driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
if not cns.pole_subtarget:
|
||||
drv_modifier.coefficients[0] = 0.0
|
||||
drv_modifier.coefficients[1] = 1
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
else:
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
elif prop == 'IK_follow':
|
||||
|
||||
make_property(owner, prop, True)
|
||||
|
||||
drv = ctrl.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl.constraints) > 1:
|
||||
drv = ctrl.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
make_driver(ctrl.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
|
||||
drv = ctrl_pole.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
drv = ctrl_pole.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
elif prop == 'root/parent':
|
||||
if len(ctrl.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
elif prop == 'pole_follow':
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl_pole.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl_pole.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
@staticmethod
|
||||
def get_future_names(bones):
|
||||
|
|
|
@ -13,7 +13,7 @@ from ...utils import align_bone_y_axis, align_bone_x_axis, align_bone_z_axis
|
|||
from ...rig_ui_template import UTILITIES_RIG_LEG, REGISTER_RIG_LEG
|
||||
from ...utils import ControlLayersOption
|
||||
from rna_prop_ui import rna_idprop_ui_prop_get
|
||||
from ...utils.mechanism import make_property
|
||||
from ...utils.mechanism import make_property, make_driver
|
||||
from ..widgets import create_ikarrow_widget
|
||||
from math import trunc, pi
|
||||
|
||||
|
@ -151,15 +151,7 @@ class Rig:
|
|||
# prop = rna_idprop_ui_prop_get( pb[ mch ], name, create = True )
|
||||
make_property(pb[main_parent], name, 0.0)
|
||||
|
||||
drv = pb[mch].constraints[0].driver_add("influence").driver
|
||||
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[main_parent].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(pb[mch].constraints[0], "influence", variables=[(self.obj, main_parent, name)])
|
||||
|
||||
size = pb[main_parent].bone.y_axis.length * 10
|
||||
create_gear_widget(self.obj, main_parent, size=size, bone_transform_name=None)
|
||||
|
@ -360,25 +352,11 @@ class Rig:
|
|||
make_property(pb[t], name, defval, max=2.0, soft_max=1.0)
|
||||
|
||||
for j,d in enumerate(def_bones[:-1]):
|
||||
drvs = {}
|
||||
if j != 0:
|
||||
tidx = j
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easein").driver
|
||||
make_driver(self.obj.data.bones[d], "bbone_easein", variables=[(self.obj, tweaks[j], 'rubber_tweak')])
|
||||
|
||||
if j != len( def_bones[:-1] ) - 1:
|
||||
tidx = j + 1
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easeout").driver
|
||||
|
||||
for d in drvs:
|
||||
drv = drvs[d]
|
||||
name = 'rubber_tweak'
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[tweaks[d]].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(self.obj.data.bones[d], "bbone_easeout", variables=[(self.obj, tweaks[j+1], 'rubber_tweak')])
|
||||
|
||||
return def_bones
|
||||
|
||||
|
@ -589,15 +567,7 @@ class Rig:
|
|||
})
|
||||
|
||||
# Add driver to relevant constraint
|
||||
drv = pb[o].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
make_driver(pb[o].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)])
|
||||
|
||||
def create_leg(self, bones):
|
||||
org_bones = list(
|
||||
|
@ -941,22 +911,8 @@ class Rig:
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[b].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)], polynomial=[1.0, -1.0])
|
||||
|
||||
# Create leg widget
|
||||
create_foot_widget(self.obj, ctrl, bone_transform_name=None)
|
||||
|
@ -1016,22 +972,8 @@ class Rig:
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = toe_mch
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[b].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)], polynomial=[1.0, -1.0])
|
||||
|
||||
# Create toe circle widget
|
||||
create_circle_widget(self.obj, toes, radius=0.4, head_tail=0.5)
|
||||
|
@ -1068,184 +1010,51 @@ class Rig:
|
|||
|
||||
# ik target hide driver
|
||||
pole_target = pb[bones['ik']['ctrl']['ik_target']]
|
||||
drv = pole_target.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pole_target.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# vis-pole hide driver
|
||||
vispole = pb[bones['ik']['visuals']['vispole']]
|
||||
drv = vispole.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(vispole.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# arrow hide driver
|
||||
# pole_target = pb[bones['ik']['ctrl']['limb']]
|
||||
# drv = pole_target.bone.driver_add("hide").driver
|
||||
# drv.type = 'AVERAGE'
|
||||
# limb = pb[bones['ik']['ctrl']['limb']]
|
||||
#
|
||||
# var = drv.variables.new()
|
||||
# var.name = prop
|
||||
# var.type = "SINGLE_PROP"
|
||||
# var.targets[0].id = self.obj
|
||||
# var.targets[0].data_path = \
|
||||
# owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
#
|
||||
# drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
#
|
||||
# drv_modifier.mode = 'POLYNOMIAL'
|
||||
# drv_modifier.poly_order = 1
|
||||
# drv_modifier.coefficients[0] = 0.0
|
||||
# drv_modifier.coefficients[1] = 1.0
|
||||
# make_driver(limb.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
|
||||
for cns in mch_ik.constraints:
|
||||
if 'IK' in cns.type:
|
||||
drv = cns.driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
if not cns.pole_subtarget:
|
||||
drv_modifier.coefficients[0] = 0.0
|
||||
drv_modifier.coefficients[1] = 1
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
else:
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
|
||||
elif prop == 'IK_follow':
|
||||
|
||||
make_property(owner, prop, True)
|
||||
|
||||
drv = ctrl.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl.constraints) > 1:
|
||||
drv = ctrl.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
make_driver(ctrl.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
|
||||
drv = ctrl_pole.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
drv = ctrl_pole.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
elif prop == 'root/parent':
|
||||
if len(ctrl.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
elif prop == 'pole_follow':
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl_pole.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl_pole.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
@staticmethod
|
||||
def get_future_names(bones):
|
||||
|
|
|
@ -11,7 +11,7 @@ from ...utils import align_bone_x_axis, align_bone_z_axis
|
|||
from ...rig_ui_template import UTILITIES_RIG_LEG, REGISTER_RIG_LEG
|
||||
from ...utils import ControlLayersOption
|
||||
from rna_prop_ui import rna_idprop_ui_prop_get
|
||||
from ...utils.mechanism import make_property
|
||||
from ...utils.mechanism import make_property, make_driver
|
||||
from ..widgets import create_ikarrow_widget, create_gear_widget
|
||||
from ..widgets import create_foot_widget, create_ballsocket_widget
|
||||
from math import trunc, pi
|
||||
|
@ -137,15 +137,7 @@ class Rig:
|
|||
# prop = rna_idprop_ui_prop_get( pb[ mch ], name, create = True )
|
||||
make_property(pb[main_parent], name, 0.0)
|
||||
|
||||
drv = pb[mch].constraints[0].driver_add("influence").driver
|
||||
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[main_parent].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(pb[mch].constraints[0], "influence", variables=[(self.obj, main_parent, name)])
|
||||
|
||||
size = pb[main_parent].bone.y_axis.length * 10
|
||||
create_gear_widget(self.obj, main_parent, size=size, bone_transform_name=None)
|
||||
|
@ -351,25 +343,11 @@ class Rig:
|
|||
make_property(pb[t], name, defvalue, max=2.0, soft_max=1.0)
|
||||
|
||||
for j,d in enumerate(def_bones[:-1]):
|
||||
drvs = {}
|
||||
if j != 0:
|
||||
tidx = j
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easein").driver
|
||||
make_driver(self.obj.data.bones[d], "bbone_easein", variables=[(self.obj, tweaks[j], 'rubber_tweak')])
|
||||
|
||||
if j != len( def_bones[:-1] ) - 1:
|
||||
tidx = j + 1
|
||||
drvs[tidx] = self.obj.data.bones[d].driver_add("bbone_easeout").driver
|
||||
|
||||
for d in drvs:
|
||||
drv = drvs[d]
|
||||
name = 'rubber_tweak'
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = pb[tweaks[d]].path_from_id() + \
|
||||
'[' + '"' + name + '"' + ']'
|
||||
make_driver(self.obj.data.bones[d], "bbone_easeout", variables=[(self.obj, tweaks[j+1], 'rubber_tweak')])
|
||||
|
||||
return def_bones
|
||||
|
||||
|
@ -583,15 +561,7 @@ class Rig:
|
|||
})
|
||||
|
||||
# Add driver to relevant constraint
|
||||
drv = pb[o].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
make_driver(pb[o].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)])
|
||||
|
||||
def create_paw(self, bones):
|
||||
org_bones = list(
|
||||
|
@ -770,22 +740,8 @@ class Rig:
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = bones['ik']['mch_str']
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '[' + '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[b].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)], polynomial=[1.0, -1.0])
|
||||
|
||||
# Create paw widget
|
||||
create_foot_widget(self.obj, ctrl, bone_transform_name=None)
|
||||
|
@ -843,22 +799,8 @@ class Rig:
|
|||
|
||||
# Add driver to limit scale constraint influence
|
||||
b = toes_mch_parent
|
||||
drv = pb[b].constraints[-1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop.name
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
pb_parent.path_from_id() + '['+ '"' + prop.name + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[b].constraints[-1], "influence", variables=[(self.obj, pb_parent, prop.name)], polynomial=[1.0, -1.0])
|
||||
|
||||
# Create toe circle widget
|
||||
create_circle_widget(self.obj, toes, radius=0.4, head_tail=0.5)
|
||||
|
@ -895,184 +837,50 @@ class Rig:
|
|||
|
||||
# ik target hide driver
|
||||
pole_target = pb[bones['ik']['ctrl']['ik_target']]
|
||||
drv = pole_target.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pole_target.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# vis-pole hide driver
|
||||
vispole = pb[bones['ik']['visuals']['vispole']]
|
||||
drv = vispole.bone.driver_add("hide").driver
|
||||
drv.type = 'AVERAGE'
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(vispole.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
# arrow hide driver
|
||||
# pole_target = pb[bones['ik']['ctrl']['limb']]
|
||||
# drv = pole_target.bone.driver_add("hide").driver
|
||||
# drv.type = 'AVERAGE'
|
||||
# limb = pb[bones['ik']['ctrl']['limb']]
|
||||
#
|
||||
# var = drv.variables.new()
|
||||
# var.name = prop
|
||||
# var.type = "SINGLE_PROP"
|
||||
# var.targets[0].id = self.obj
|
||||
# var.targets[0].data_path = \
|
||||
# owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
#
|
||||
# drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
#
|
||||
# drv_modifier.mode = 'POLYNOMIAL'
|
||||
# drv_modifier.poly_order = 1
|
||||
# drv_modifier.coefficients[0] = 0.0
|
||||
# drv_modifier.coefficients[1] = 1.0
|
||||
# make_driver(limb.bone, "hide", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
|
||||
for cns in mch_ik.constraints:
|
||||
if 'IK' in cns.type:
|
||||
drv = cns.driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
if not cns.pole_subtarget:
|
||||
drv_modifier.coefficients[0] = 0.0
|
||||
drv_modifier.coefficients[1] = 1
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[0.0, 1.0])
|
||||
else:
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(cns, "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
elif prop == 'IK_follow':
|
||||
|
||||
make_property(owner, prop, True)
|
||||
|
||||
drv = ctrl.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl.constraints) > 1:
|
||||
drv = ctrl.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
make_driver(ctrl.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
|
||||
drv = ctrl_pole.constraints[0].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[0], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
drv = ctrl_pole.constraints[1].driver_add("mute").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(ctrl_pole.constraints[1], "mute", variables=[(self.obj, owner, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
elif prop == 'root/parent':
|
||||
if len(ctrl.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
elif prop == 'pole_follow':
|
||||
if len(ctrl_pole.constraints) > 1:
|
||||
make_property(owner, prop, 0.0)
|
||||
|
||||
drv = ctrl_pole.constraints[1].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
owner.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
make_driver(ctrl_pole.constraints[1], "influence", variables=[(self.obj, owner, prop)])
|
||||
|
||||
@staticmethod
|
||||
def get_future_names(bones):
|
||||
|
|
|
@ -6,7 +6,7 @@ from ...utils import create_circle_widget, create_sphere_widget, create_neck_ben
|
|||
from ..widgets import create_ballsocket_widget
|
||||
from ...utils import MetarigError, make_mechanism_name, create_cube_widget
|
||||
from ...utils import ControlLayersOption
|
||||
from ...utils.mechanism import make_property
|
||||
from ...utils.mechanism import make_property, make_driver
|
||||
|
||||
script = """
|
||||
controls = [%s]
|
||||
|
@ -775,22 +775,7 @@ class Rig:
|
|||
# driving the follow rotation switches for neck and head
|
||||
for bone, prop, in zip(owners, props):
|
||||
# Add driver to copy rotation constraint
|
||||
drv = pb[bone].constraints[0].driver_add("influence").driver
|
||||
drv.type = 'AVERAGE'
|
||||
|
||||
var = drv.variables.new()
|
||||
var.name = prop
|
||||
var.type = "SINGLE_PROP"
|
||||
var.targets[0].id = self.obj
|
||||
var.targets[0].data_path = \
|
||||
torso.path_from_id() + '[' + '"' + prop + '"' + ']'
|
||||
|
||||
drv_modifier = self.obj.animation_data.drivers[-1].modifiers[0]
|
||||
|
||||
drv_modifier.mode = 'POLYNOMIAL'
|
||||
drv_modifier.poly_order = 1
|
||||
drv_modifier.coefficients[0] = 1.0
|
||||
drv_modifier.coefficients[1] = -1.0
|
||||
make_driver(pb[bone].constraints[0], "influence", variables=[(self.obj, torso, prop)], polynomial=[1.0, -1.0])
|
||||
|
||||
def locks_and_widgets(self, bones):
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
|
|
18
rigify/ui.py
18
rigify/ui.py
|
@ -1277,17 +1277,15 @@ class OBJECT_OT_ClearAnimation(bpy.types.Operator):
|
|||
anim_type: StringProperty()
|
||||
|
||||
def execute(self, context):
|
||||
rig = context.object
|
||||
scn = context.scene
|
||||
if not rig.animation_data:
|
||||
return {'FINISHED'}
|
||||
act = rig.animation_data.action
|
||||
if not act:
|
||||
return {'FINISHED'}
|
||||
|
||||
try:
|
||||
rig = context.object
|
||||
scn = context.scene
|
||||
if not rig.animation_data:
|
||||
return {'FINISHED'}
|
||||
act = rig.animation_data.action
|
||||
if not act:
|
||||
return {'FINISHED'}
|
||||
|
||||
clearAnimation(act, self.anim_type, names=get_limb_generated_names(rig))
|
||||
clearAnimation(act, self.anim_type, names=get_limb_generated_names(rig))
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue