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:
authorLucio Rossi <lucio.rossi75@gmail.com>2017-12-05 15:26:36 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2018-01-06 18:40:47 +0300
commitea721f7ec820fcb363b36284255cc76c38d10d82 (patch)
treeb113eef5b8c9881e58df5c02bf4ffb65ad1b7fce
parent040cec443cda6a091f4241ec2f65fb005ea7198f (diff)
fix T53355: missing Rot2Pole switch operator when Rigify is disabled
-rw-r--r--rigify/rig_ui_template.py96
-rw-r--r--rigify/rigs/limbs/ui.py22
2 files changed, 110 insertions, 8 deletions
diff --git a/rigify/rig_ui_template.py b/rigify/rig_ui_template.py
index 3081f983..3cdda311 100644
--- a/rigify/rig_ui_template.py
+++ b/rigify/rig_ui_template.py
@@ -520,6 +520,75 @@ def ik2fk_leg(obj, fk, ik):
match_pole_target(thighi, shini, pole, thigh, (thighi.length + shini.length))
+################################
+## IK Rotation-Pole functions ##
+################################
+
+def parse_bone_names(names_string):
+ if names_string[0] == '[' and names_string[-1] == ']':
+ return eval(names_string)
+ else:
+ return names_string
+
+def rotPoleToggle(rig, limb_type, controls, ik_ctrl, fk_ctrl, parent, pole):
+
+ rig_id = rig.data['rig_id']
+ leg_fk2ik = eval('bpy.ops.pose.rigify_leg_fk2ik_' + rig_id)
+ arm_fk2ik = eval('bpy.ops.pose.rigify_arm_fk2ik_' + rig_id)
+ leg_ik2fk = eval('bpy.ops.pose.rigify_leg_ik2fk_' + rig_id)
+ arm_ik2fk = eval('bpy.ops.pose.rigify_arm_ik2fk_' + rig_id)
+
+ controls = parse_bone_names(controls)
+ ik_ctrl = parse_bone_names(ik_ctrl)
+ fk_ctrl = parse_bone_names(fk_ctrl)
+ parent = parse_bone_names(parent)
+ pole = parse_bone_names(pole)
+
+ pbones = bpy.context.selected_pose_bones
+ bpy.ops.pose.select_all(action='DESELECT')
+
+ for b in pbones:
+
+ new_pole_vector_value = not rig.pose.bones[parent]['pole_vector']
+
+ if b.name in controls or b.name in ik_ctrl:
+ if limb_type == 'arm':
+ func1 = arm_fk2ik
+ func2 = arm_ik2fk
+ rig.pose.bones[controls[0]].bone.select = not new_pole_vector_value
+ rig.pose.bones[controls[4]].bone.select = not new_pole_vector_value
+ rig.pose.bones[parent].bone.select = not new_pole_vector_value
+ rig.pose.bones[pole].bone.select = new_pole_vector_value
+
+ kwargs1 = {'uarm_fk': controls[1], 'farm_fk': controls[2], 'hand_fk': controls[3],
+ 'uarm_ik': controls[0], 'farm_ik': ik_ctrl[1],
+ 'hand_ik': controls[4]}
+ kwargs2 = {'uarm_fk': controls[1], 'farm_fk': controls[2], 'hand_fk': controls[3],
+ 'uarm_ik': controls[0], 'farm_ik': ik_ctrl[1], 'hand_ik': controls[4],
+ 'pole': pole, 'main_parent': parent}
+ else:
+ func1 = leg_fk2ik
+ func2 = leg_ik2fk
+ rig.pose.bones[controls[0]].bone.select = not new_pole_vector_value
+ rig.pose.bones[controls[6]].bone.select = not new_pole_vector_value
+ rig.pose.bones[controls[5]].bone.select = not new_pole_vector_value
+ rig.pose.bones[parent].bone.select = not new_pole_vector_value
+ rig.pose.bones[pole].bone.select = new_pole_vector_value
+
+ kwargs1 = {'thigh_fk': controls[1], 'shin_fk': controls[2], 'foot_fk': controls[3],
+ 'mfoot_fk': controls[7], 'thigh_ik': controls[0], 'shin_ik': ik_ctrl[1],
+ 'foot_ik': ik_ctrl[2], 'mfoot_ik': ik_ctrl[2]}
+ kwargs2 = {'thigh_fk': controls[1], 'shin_fk': controls[2], 'foot_fk': controls[3],
+ 'mfoot_fk': controls[7], 'thigh_ik': controls[0], 'shin_ik': ik_ctrl[1],
+ 'foot_ik': controls[6], 'pole': pole, 'footroll': controls[5], 'mfoot_ik': ik_ctrl[2],
+ 'main_parent': parent}
+
+ func1(**kwargs1)
+ rig.pose.bones[parent]['pole_vector'] = new_pole_vector_value
+ func2(**kwargs2)
+
+ bpy.ops.pose.select_all(action='DESELECT')
+
##############################
## IK/FK snapping operators ##
##############################
@@ -649,6 +718,31 @@ class Rigify_Leg_IK2FK(bpy.types.Operator):
context.user_preferences.edit.use_global_undo = use_global_undo
return {'FINISHED'}
+###########################
+## IK Rotation Pole Snap ##
+###########################
+
+class Rigify_Rot2PoleSwitch(bpy.types.Operator):
+ bl_idname = "pose.rigify_rot2pole_" + rig_id
+ bl_label = "Rotation - Pole toggle"
+ bl_description = "Toggles IK chain between rotation and pole target"
+ bone_name = bpy.props.StringProperty(default='')
+ limb_type = bpy.props.StringProperty(name="Limb Type")
+ controls = bpy.props.StringProperty(name="Controls string")
+ ik_ctrl = bpy.props.StringProperty(name="IK Controls string")
+ fk_ctrl = bpy.props.StringProperty(name="FK Controls string")
+ parent = bpy.props.StringProperty(name="Parent name")
+ pole = bpy.props.StringProperty(name="Pole name")
+
+ def execute(self, context):
+ rig = context.object
+
+ if self.bone_name:
+ bpy.ops.pose.select_all(action='DESELECT')
+ rig.pose.bones[self.bone_name].bone.select = True
+
+ rotPoleToggle(rig, self.limb_type, self.controls, self.ik_ctrl, self.fk_ctrl, self.parent, self.pole)
+ return {'FINISHED'}
###################
## Rig UI Panels ##
@@ -752,6 +846,7 @@ def register():
bpy.utils.register_class(Rigify_Arm_IK2FK)
bpy.utils.register_class(Rigify_Leg_FK2IK)
bpy.utils.register_class(Rigify_Leg_IK2FK)
+ bpy.utils.register_class(Rigify_Rot2PoleSwitch)
bpy.utils.register_class(RigUI)
bpy.utils.register_class(RigLayers)
@@ -760,6 +855,7 @@ def unregister():
bpy.utils.unregister_class(Rigify_Arm_IK2FK)
bpy.utils.unregister_class(Rigify_Leg_FK2IK)
bpy.utils.unregister_class(Rigify_Leg_IK2FK)
+ bpy.utils.register_class(Rigify_Rot2PoleSwitch)
bpy.utils.unregister_class(RigUI)
bpy.utils.unregister_class(RigLayers)
diff --git a/rigify/rigs/limbs/ui.py b/rigify/rigs/limbs/ui.py
index f04eb891..952fbca4 100644
--- a/rigify/rigs/limbs/ui.py
+++ b/rigify/rigs/limbs/ui.py
@@ -26,11 +26,14 @@ if is_selected( controls ):
props.hand_ik = controls[4]
props.pole = pole
props.main_parent = parent
- props = layout.operator("rigify.rotation_pole", text="Switch Rotation-Pole")
+ props = layout.operator("pose.rigify_rot2pole_" + rig_id, text="Switch Rotation-Pole")
props.bone_name = controls[1]
- props.window = "CURRENT"
- props.toggle = True
- props.bake = False
+ props.limb_type = "arm"
+ props.controls = str(controls)
+ props.ik_ctrl = str(ik_ctrl)
+ props.fk_ctrl = str(fk_ctrl)
+ props.parent = str(parent)
+ props.pole = str(pole)
# BBone rubber hose on each Respective Tweak
@@ -81,11 +84,14 @@ if is_selected( controls ):
props.footroll = controls[5]
props.mfoot_ik = ik_ctrl[2]
props.main_parent = parent
- props = layout.operator("rigify.rotation_pole", text="Toggle Rotation and Pole")
+ props = layout.operator("pose.rigify_rot2pole_" + rig_id, text="Toggle Rotation and Pole")
props.bone_name = controls[1]
- props.window = "CURRENT"
- props.toggle = True
- props.bake = False
+ props.limb_type = "leg"
+ props.controls = str(controls)
+ props.ik_ctrl = str(ik_ctrl)
+ props.fk_ctrl = str(fk_ctrl)
+ props.parent = str(parent)
+ props.pole = str(pole)
# BBone rubber hose on each Respective Tweak
for t in tweaks: