rigify: update for Blender 2.8

This commit is contained in:
Inês Almeida 2018-08-10 22:30:02 +02:00
parent 1a5f14657e
commit fe90ef2b4b
Notes: blender-bot 2023-02-14 18:07:25 +01:00
Referenced by commit 0a412d98: Rigify: revert erroneous edits from Blender 2.8 update commit.
Referenced by commit 9940479d: Rigify: Fixup from original 2.80 convertion
Referenced by commit a9ef0e5a: rigify: Fix bad rename from previous commit fe90ef2
Referenced by commit 0a412d98, Rigify: revert erroneous edits from Blender 2.8 update commit.
Referenced by commit 9940479d, Rigify: Fixup from original 2.80 convertion
Referenced by commit a9ef0e5a, rigify: Fix bad rename from previous commit fe90ef2
12 changed files with 372 additions and 323 deletions

View File

@ -22,7 +22,7 @@ bl_info = {
"name": "Rigify",
"version": (0, 5),
"author": "Nathan Vegdahl, Lucio Rossi, Ivan Cappiello",
"blender": (2, 78, 0),
"blender": (2, 80, 0),
"description": "Automatic rigging from building-block components",
"location": "Armature properties, Bone properties, View3d tools panel, Armature Add menu",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"
@ -44,7 +44,15 @@ import bpy
import sys
import os
from bpy.types import AddonPreferences
from bpy.props import BoolProperty
from bpy.props import (
BoolProperty,
IntProperty,
EnumProperty,
StringProperty,
FloatVectorProperty,
PointerProperty,
CollectionProperty,
)
class RigifyPreferences(AddonPreferences):
@ -118,14 +126,13 @@ class RigifyPreferences(AddonPreferences):
register()
legacy_mode = BoolProperty(
legacy_mode: BoolProperty(
name='Rigify Legacy Mode',
description='Select if you want to use Rigify in legacy mode',
default=False,
update=update_legacy
)
show_expanded = BoolProperty()
show_expanded: BoolProperty()
def draw(self, context):
layout = self.layout
@ -158,56 +165,56 @@ class RigifyPreferences(AddonPreferences):
class RigifyName(bpy.types.PropertyGroup):
name = bpy.props.StringProperty()
name: StringProperty()
class RigifyColorSet(bpy.types.PropertyGroup):
name = bpy.props.StringProperty(name="Color Set", default=" ")
active = bpy.props.FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
normal = bpy.props.FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
select = bpy.props.FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
standard_colors_lock = bpy.props.BoolProperty(default=True)
name: StringProperty(name="Color Set", default=" ")
active: FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
normal: FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
select: FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(1.0, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
standard_colors_lock: BoolProperty(default=True)
class RigifySelectionColors(bpy.types.PropertyGroup):
select = bpy.props.FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(0.314, 0.784, 1.0),
min=0.0, max=1.0,
description="color picker"
)
select: FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(0.314, 0.784, 1.0),
min=0.0, max=1.0,
description="color picker"
)
active = bpy.props.FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(0.549, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
active: FloatVectorProperty(
name="object_color",
subtype='COLOR',
default=(0.549, 1.0, 1.0),
min=0.0, max=1.0,
description="color picker"
)
class RigifyParameters(bpy.types.PropertyGroup):
name = bpy.props.StringProperty()
name: StringProperty()
class RigifyArmatureLayer(bpy.types.PropertyGroup):
@ -225,104 +232,123 @@ class RigifyArmatureLayer(bpy.types.PropertyGroup):
else:
self['group_prop'] = value
name = bpy.props.StringProperty(name="Layer Name", default=" ")
row = bpy.props.IntProperty(name="Layer Row", default=1, min=1, max=32, description='UI row for this layer')
set = bpy.props.BoolProperty(name="Selection Set", default=False, description='Add Selection Set for this layer')
group = bpy.props.IntProperty(name="Bone Group", default=0, min=0, max=32,
get=get_group, set=set_group, description='Assign Bone Group to this layer')
name: StringProperty(name="Layer Name", default=" ")
row: IntProperty(name="Layer Row", default=1, min=1, max=32, description='UI row for this layer')
selset: BoolProperty(name="Selection Set", default=False, description='Add Selection Set for this layer')
group: IntProperty(name="Bone Group", default=0, min=0, max=32,
get=get_group, set=set_group, description='Assign Bone Group to this layer')
##### REGISTER #####
classes = (
RigifyName,
RigifyParameters,
RigifyColorSet,
RigifySelectionColors,
RigifyArmatureLayer,
RigifyPreferences,
)
def register():
from bpy.utils import register_class
# Sub-modules.
ui.register()
metarig_menu.register()
bpy.utils.register_class(RigifyName)
bpy.utils.register_class(RigifyParameters)
# Classes.
for cls in classes:
register_class(cls)
bpy.utils.register_class(RigifyColorSet)
bpy.utils.register_class(RigifySelectionColors)
bpy.utils.register_class(RigifyArmatureLayer)
bpy.utils.register_class(RigifyPreferences)
bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer)
#Properties.
bpy.types.Armature.rigify_layers = CollectionProperty(type=RigifyArmatureLayer)
bpy.types.PoseBone.rigify_type = bpy.props.StringProperty(name="Rigify Type", description="Rig type for this bone")
bpy.types.PoseBone.rigify_parameters = bpy.props.PointerProperty(type=RigifyParameters)
bpy.types.PoseBone.rigify_type = StringProperty(name="Rigify Type", description="Rig type for this bone")
bpy.types.PoseBone.rigify_parameters = PointerProperty(type=RigifyParameters)
bpy.types.Armature.rigify_colors = bpy.props.CollectionProperty(type=RigifyColorSet)
bpy.types.Armature.rigify_colors = CollectionProperty(type=RigifyColorSet)
bpy.types.Armature.rigify_selection_colors = bpy.props.PointerProperty(type=RigifySelectionColors)
bpy.types.Armature.rigify_selection_colors = PointerProperty(type=RigifySelectionColors)
bpy.types.Armature.rigify_colors_index = bpy.props.IntProperty(default=-1)
bpy.types.Armature.rigify_colors_lock = bpy.props.BoolProperty(default=True)
bpy.types.Armature.rigify_theme_to_add = bpy.props.EnumProperty(items=(('THEME01', 'THEME01', ''),
('THEME02', 'THEME02', ''),
('THEME03', 'THEME03', ''),
('THEME04', 'THEME04', ''),
('THEME05', 'THEME05', ''),
('THEME06', 'THEME06', ''),
('THEME07', 'THEME07', ''),
('THEME08', 'THEME08', ''),
('THEME09', 'THEME09', ''),
('THEME10', 'THEME10', ''),
('THEME11', 'THEME11', ''),
('THEME12', 'THEME12', ''),
('THEME13', 'THEME13', ''),
('THEME14', 'THEME14', ''),
('THEME15', 'THEME15', ''),
('THEME16', 'THEME16', ''),
('THEME17', 'THEME17', ''),
('THEME18', 'THEME18', ''),
('THEME19', 'THEME19', ''),
('THEME20', 'THEME20', '')
), name='Theme')
bpy.types.Armature.rigify_colors_index = IntProperty(default=-1)
bpy.types.Armature.rigify_colors_lock = BoolProperty(default=True)
bpy.types.Armature.rigify_theme_to_add = EnumProperty(items=(
('THEME01', 'THEME01', ''),
('THEME02', 'THEME02', ''),
('THEME03', 'THEME03', ''),
('THEME04', 'THEME04', ''),
('THEME05', 'THEME05', ''),
('THEME06', 'THEME06', ''),
('THEME07', 'THEME07', ''),
('THEME08', 'THEME08', ''),
('THEME09', 'THEME09', ''),
('THEME10', 'THEME10', ''),
('THEME11', 'THEME11', ''),
('THEME12', 'THEME12', ''),
('THEME13', 'THEME13', ''),
('THEME14', 'THEME14', ''),
('THEME15', 'THEME15', ''),
('THEME16', 'THEME16', ''),
('THEME17', 'THEME17', ''),
('THEME18', 'THEME18', ''),
('THEME19', 'THEME19', ''),
('THEME20', 'THEME20', '')
), name='Theme')
IDStore = bpy.types.WindowManager
IDStore.rigify_collection = bpy.props.EnumProperty(items=rig_lists.col_enum_list, default="All",
name="Rigify Active Collection",
description="The selected rig collection")
IDStore.rigify_collection = EnumProperty(items=rig_lists.col_enum_list, default="All",
name="Rigify Active Collection",
description="The selected rig collection")
IDStore.rigify_types = bpy.props.CollectionProperty(type=RigifyName)
IDStore.rigify_active_type = bpy.props.IntProperty(name="Rigify Active Type", description="The selected rig type")
IDStore.rigify_types = CollectionProperty(type=RigifyName)
IDStore.rigify_active_type = IntProperty(name="Rigify Active Type", description="The selected rig type")
IDStore.rigify_advanced_generation = bpy.props.BoolProperty(name="Advanced Options",
description="Enables/disables advanced options for Rigify rig generation",
default=False)
IDStore.rigify_advanced_generation = BoolProperty(name="Advanced Options",
description="Enables/disables advanced options for Rigify rig generation",
default=False)
def update_mode(self, context):
if self.rigify_generate_mode == 'new':
self.rigify_force_widget_update = False
IDStore.rigify_generate_mode = bpy.props.EnumProperty(name="Rigify Generate Rig Mode",
description="'Generate Rig' mode. In 'overwrite' mode the features of the target rig will be updated as defined by the metarig. In 'new' mode a new rig will be created as defined by the metarig. Current mode",
update=update_mode,
items=(('overwrite', 'overwrite', ''),
('new', 'new', '')))
IDStore.rigify_generate_mode = EnumProperty(name="Rigify Generate Rig Mode",
description="'Generate Rig' mode. In 'overwrite' mode the features of the target rig will be updated as defined by the metarig. In 'new' mode a new rig will be created as defined by the metarig. Current mode",
update=update_mode,
items=( ('overwrite', 'overwrite', ''),
('new', 'new', '')))
IDStore.rigify_force_widget_update = bpy.props.BoolProperty(name="Force Widget Update",
description="Forces Rigify to delete and rebuild all the rig widgets. if unset, only missing widgets will be created",
default=False)
IDStore.rigify_force_widget_update = BoolProperty(name="Force Widget Update",
description="Forces Rigify to delete and rebuild all the rig widgets. if unset, only missing widgets will be created",
default=False)
IDStore.rigify_target_rigs = bpy.props.CollectionProperty(type=RigifyName)
IDStore.rigify_target_rig = bpy.props.StringProperty(name="Rigify Target Rig",
description="Defines which rig to overwrite. If unset, a new one called 'rig' will be created",
default="")
IDStore.rigify_target_rigs = CollectionProperty(type=RigifyName)
IDStore.rigify_target_rig = StringProperty(name="Rigify Target Rig",
description="Defines which rig to overwrite. If unset, a new one called 'rig' will be created",
default="")
IDStore.rigify_rig_uis = bpy.props.CollectionProperty(type=RigifyName)
IDStore.rigify_rig_ui = bpy.props.StringProperty(name="Rigify Target Rig UI",
description="Defines the UI to overwrite. It should always be the same as the target rig. If unset, 'rig_ui.py' will be used",
default="")
IDStore.rigify_rig_uis = CollectionProperty(type=RigifyName)
IDStore.rigify_rig_ui = StringProperty(name="Rigify Target Rig UI",
description="Defines the UI to overwrite. It should always be the same as the target rig. If unset, 'rig_ui.py' will be used",
default="")
IDStore.rigify_rig_basename = bpy.props.StringProperty(name="Rigify Rig Name",
description="Defines the name of the Rig. If unset, in 'new' mode 'rig' will be used, in 'overwrite' mode the target rig name will be used",
default="")
IDStore.rigify_rig_basename = StringProperty(name="Rigify Rig Name",
description="Defines the name of the Rig. If unset, in 'new' mode 'rig' will be used, in 'overwrite' mode the target rig name will be used",
default="")
IDStore.rigify_transfer_only_selected = bpy.props.BoolProperty(name="Transfer Only Selected", description="Transfer selected bones only", default=True)
IDStore.rigify_transfer_start_frame = bpy.props.IntProperty(name="Start Frame", description="First Frame to Transfer", default=0, min= 0)
IDStore.rigify_transfer_end_frame = bpy.props.IntProperty(name="End Frame", description="Last Frame to Transfer", default=0, min= 0)
IDStore.rigify_transfer_only_selected = BoolProperty(
name="Transfer Only Selected",
description="Transfer selected bones only", default=True)
IDStore.rigify_transfer_start_frame = IntProperty(
name="Start Frame",
description="First Frame to Transfer", default=0, min= 0)
IDStore.rigify_transfer_end_frame = IntProperty(
name="End Frame",
description="Last Frame to Transfer", default=0, min= 0)
# Update legacy on restart or reload.
if (ui and 'legacy' in str(ui)) or bpy.context.user_preferences.addons['rigify'].preferences.legacy_mode:
# update legacy on restart or reload
bpy.context.user_preferences.addons['rigify'].preferences.legacy_mode = True
# Add rig parameters
@ -335,6 +361,9 @@ def register():
def unregister():
from bpy.utils import unregister_class
# Properties.
del bpy.types.PoseBone.rigify_type
del bpy.types.PoseBone.rigify_parameters
@ -354,14 +383,10 @@ def unregister():
del IDStore.rigify_transfer_start_frame
del IDStore.rigify_transfer_end_frame
bpy.utils.unregister_class(RigifyName)
bpy.utils.unregister_class(RigifyParameters)
bpy.utils.unregister_class(RigifyColorSet)
bpy.utils.unregister_class(RigifySelectionColors)
bpy.utils.unregister_class(RigifyArmatureLayer)
bpy.utils.unregister_class(RigifyPreferences)
# Classes.
for cls in classes:
unregister_class(cls)
# Sub-modules.
metarig_menu.unregister()
ui.unregister()

View File

@ -45,16 +45,16 @@ import bpy
class RigifyName(bpy.types.PropertyGroup):
name = bpy.props.StringProperty()
name: bpy.props.StringProperty()
class RigifyParameters(bpy.types.PropertyGroup):
name = bpy.props.StringProperty()
name: bpy.props.StringProperty()
class RigifyArmatureLayer(bpy.types.PropertyGroup):
name = bpy.props.StringProperty(name="Layer Name", default=" ")
row = bpy.props.IntProperty(name="Layer Row", default=1, min=1, max=32)
name: bpy.props.StringProperty(name="Layer Name", default=" ")
row: bpy.props.IntProperty(name="Layer Row", default=1, min=1, max=32)
##### REGISTER #####

View File

@ -88,8 +88,8 @@ def add_parameters(params):
""" Add the parameters of this rig type to the
RigifyParameters PropertyGroup
"""
params.make_control = bpy.props.BoolProperty(name="Control", default=True, description="Create a control bone for the copy")
params.make_deform = bpy.props.BoolProperty(name="Deform", default=True, description="Create a deform bone for the copy")
params.make_control: bpy.props.BoolProperty(name="Control", default=True, description="Create a control bone for the copy")
params.make_deform: bpy.props.BoolProperty(name="Deform", default=True, description="Create a deform bone for the copy")
def parameters_ui(layout, params):

View File

@ -127,8 +127,8 @@ def add_parameters(params):
""" Add the parameters of this rig type to the
RigifyParameters PropertyGroup
"""
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.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")
def parameters_ui(layout, params):

View File

@ -91,7 +91,7 @@ def add_parameters(params):
""" Add the parameters of this rig type to the
RigifyParameters PropertyGroup
"""
params.make_control = bpy.props.BoolProperty(
params.make_control: bpy.props.BoolProperty(
name = "Control",
default = True,
description = "Create a control bone for the copy"

View File

@ -1016,26 +1016,26 @@ def add_parameters(params):
"""
#Setting up extra layers for the tweak bones
params.primary_layers_extra = bpy.props.BoolProperty(
params.primary_layers_extra: bpy.props.BoolProperty(
name = "primary_layers_extra",
default = True,
description = ""
)
params.primary_layers = bpy.props.BoolVectorProperty(
)
params.primary_layers: bpy.props.BoolVectorProperty(
size = 32,
description = "Layers for the 1st tweak controls to be on",
default = tuple( [ i == 1 for i in range(0, 32) ] )
)
params.secondary_layers_extra = bpy.props.BoolProperty(
)
params.secondary_layers_extra: bpy.props.BoolProperty(
name = "secondary_layers_extra",
default = True,
description = ""
)
params.secondary_layers = bpy.props.BoolVectorProperty(
)
params.secondary_layers: bpy.props.BoolVectorProperty(
size = 32,
description = "Layers for the 2nd tweak controls to be on",
default = tuple( [ i == 1 for i in range(0, 32) ] )
)
)
def parameters_ui(layout, params):

View File

@ -304,11 +304,11 @@ class Sample(bpy.types.Operator):
bl_label = "Add a sample metarig for a rig type"
bl_options = {'UNDO'}
metarig_type = StringProperty(
name="Type",
description="Name of the rig type to generate a sample of",
maxlen=128,
)
metarig_type: StringProperty(
name="Type",
description="Name of the rig type to generate a sample of",
maxlen=128,
)
def execute(self, context):
if context.mode == 'EDIT_ARMATURE' and self.metarig_type != "":

View File

@ -159,25 +159,33 @@ for metarig_class in metarig_classes:
arm_sub = next((e for e in armature_submenus if e.bl_label == metarig_class + ' (submenu)'), '')
arm_sub.operators.append((mop.bl_idname, name,))
### Registering ###
def register():
from bpy.utils import register_class
for cl in metarig_ops:
for mop, name in metarig_ops[cl]:
bpy.utils.register_class(mop)
register_class(mop)
for arm_sub in armature_submenus:
bpy.utils.register_class(arm_sub)
register_class(arm_sub)
for mf in menu_funcs:
bpy.types.INFO_MT_armature_add.append(mf)
def unregister():
from bpy.utils import unregister_class
for cl in metarig_ops:
for mop, name in metarig_ops[cl]:
bpy.utils.unregister_class(mop)
unregister_class(mop)
for arm_sub in armature_submenus:
bpy.utils.unregister_class(arm_sub)
unregister_class(arm_sub)
for mf in menu_funcs:
bpy.types.INFO_MT_armature_add.remove(mf)

View File

@ -20,6 +20,7 @@
UI_SLIDERS = '''
import bpy
from bpy.props import StringProperty
from mathutils import Matrix, Vector
from math import acos, pi, radians
@ -600,13 +601,13 @@ class Rigify_Arm_FK2IK(bpy.types.Operator):
bl_label = "Rigify Snap FK arm to IK"
bl_options = {'UNDO'}
uarm_fk = bpy.props.StringProperty(name="Upper Arm FK Name")
farm_fk = bpy.props.StringProperty(name="Forerm FK Name")
hand_fk = bpy.props.StringProperty(name="Hand FK Name")
uarm_fk: StringProperty(name="Upper Arm FK Name")
farm_fk: StringProperty(name="Forerm FK Name")
hand_fk: StringProperty(name="Hand FK Name")
uarm_ik = bpy.props.StringProperty(name="Upper Arm IK Name")
farm_ik = bpy.props.StringProperty(name="Forearm IK Name")
hand_ik = bpy.props.StringProperty(name="Hand IK Name")
uarm_ik: StringProperty(name="Upper Arm IK Name")
farm_ik: StringProperty(name="Forearm IK Name")
hand_ik: StringProperty(name="Hand IK Name")
@classmethod
def poll(cls, context):
@ -629,16 +630,16 @@ class Rigify_Arm_IK2FK(bpy.types.Operator):
bl_label = "Rigify Snap IK arm to FK"
bl_options = {'UNDO'}
uarm_fk = bpy.props.StringProperty(name="Upper Arm FK Name")
farm_fk = bpy.props.StringProperty(name="Forerm FK Name")
hand_fk = bpy.props.StringProperty(name="Hand FK Name")
uarm_fk: StringProperty(name="Upper Arm FK Name")
farm_fk: StringProperty(name="Forerm FK Name")
hand_fk: StringProperty(name="Hand FK Name")
uarm_ik = bpy.props.StringProperty(name="Upper Arm IK Name")
farm_ik = bpy.props.StringProperty(name="Forearm IK Name")
hand_ik = bpy.props.StringProperty(name="Hand IK Name")
pole = bpy.props.StringProperty(name="Pole IK Name")
uarm_ik: StringProperty(name="Upper Arm IK Name")
farm_ik: StringProperty(name="Forearm IK Name")
hand_ik: StringProperty(name="Hand IK Name")
pole : StringProperty(name="Pole IK Name")
main_parent = bpy.props.StringProperty(name="Main Parent", default="")
main_parent: StringProperty(name="Main Parent", default="")
@classmethod
def poll(cls, context):
@ -661,15 +662,15 @@ class Rigify_Leg_FK2IK(bpy.types.Operator):
bl_label = "Rigify Snap FK leg to IK"
bl_options = {'UNDO'}
thigh_fk = bpy.props.StringProperty(name="Thigh FK Name")
shin_fk = bpy.props.StringProperty(name="Shin FK Name")
foot_fk = bpy.props.StringProperty(name="Foot FK Name")
mfoot_fk = bpy.props.StringProperty(name="MFoot FK Name")
thigh_fk: StringProperty(name="Thigh FK Name")
shin_fk: StringProperty(name="Shin FK Name")
foot_fk: StringProperty(name="Foot FK Name")
mfoot_fk: StringProperty(name="MFoot FK Name")
thigh_ik = bpy.props.StringProperty(name="Thigh IK Name")
shin_ik = bpy.props.StringProperty(name="Shin IK Name")
foot_ik = bpy.props.StringProperty(name="Foot IK Name")
mfoot_ik = bpy.props.StringProperty(name="MFoot IK Name")
thigh_ik: StringProperty(name="Thigh IK Name")
shin_ik: StringProperty(name="Shin IK Name")
foot_ik: StringProperty(name="Foot IK Name")
mfoot_ik: StringProperty(name="MFoot IK Name")
@classmethod
def poll(cls, context):
@ -692,18 +693,18 @@ class Rigify_Leg_IK2FK(bpy.types.Operator):
bl_label = "Rigify Snap IK leg to FK"
bl_options = {'UNDO'}
thigh_fk = bpy.props.StringProperty(name="Thigh FK Name")
shin_fk = bpy.props.StringProperty(name="Shin FK Name")
mfoot_fk = bpy.props.StringProperty(name="MFoot FK Name")
foot_fk = bpy.props.StringProperty(name="Foot FK Name", default="")
thigh_ik = bpy.props.StringProperty(name="Thigh IK Name")
shin_ik = bpy.props.StringProperty(name="Shin IK Name")
foot_ik = bpy.props.StringProperty(name="Foot IK Name")
footroll = bpy.props.StringProperty(name="Foot Roll Name")
pole = bpy.props.StringProperty(name="Pole IK Name")
mfoot_ik = bpy.props.StringProperty(name="MFoot IK Name")
thigh_fk: StringProperty(name="Thigh FK Name")
shin_fk: StringProperty(name="Shin FK Name")
mfoot_fk: StringProperty(name="MFoot FK Name")
foot_fk: StringProperty(name="Foot FK Name", default="")
thigh_ik: StringProperty(name="Thigh IK Name")
shin_ik: StringProperty(name="Shin IK Name")
foot_ik: StringProperty(name="Foot IK Name")
footroll: StringProperty(name="Foot Roll Name")
pole: StringProperty(name="Pole IK Name")
mfoot_ik: StringProperty(name="MFoot IK Name")
main_parent = bpy.props.StringProperty(name="Main Parent", default="")
main_parent: StringProperty(name="Main Parent", default="")
@classmethod
def poll(cls, context):
@ -726,13 +727,14 @@ 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")
bone_name: StringProperty(default='')
limb_type: StringProperty(name="Limb Type")
controls: StringProperty(name="Controls string")
ik_ctrl: StringProperty(name="IK Controls string")
fk_ctrl: StringProperty(name="FK Controls string")
parent: StringProperty(name="Parent name")
pole: StringProperty(name="Pole name")
def execute(self, context):
rig = context.object
@ -841,23 +843,26 @@ class RigLayers(bpy.types.Panel):
UI_REGISTER = '''
classes = (
Rigify_Arm_FK2IK,
Rigify_Arm_IK2FK,
Rigify_Leg_FK2IK,
Rigify_Leg_IK2FK,
Rigify_Rot2PoleSwitch,
RigUI,
RigLayers,
)
def register():
bpy.utils.register_class(Rigify_Arm_FK2IK)
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)
from bpy.utils import register_class
for cls in classes:
register_class(cls)
def unregister():
bpy.utils.unregister_class(Rigify_Arm_FK2IK)
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)
from bpy.utils import unregister_class
for cls in classes:
unregister_class(cls)
register()
'''

View File

@ -92,7 +92,7 @@ def add_parameters(params):
""" Add the parameters of this rig type to the
RigifyParameters PropertyGroup
"""
params.make_control = bpy.props.BoolProperty(
params.make_control: bpy.props.BoolProperty(
name = "Control",
default = True,
description = "Create a control bone for the copy"

View File

@ -38,6 +38,10 @@ blender.stackexchange.com/questions/40711/how-to-convert-quaternions-keyframes-t
# "category": "Animation"}
import bpy
from bpy.props import (
BoolProperty,
EnumProperty,
)
order_list = ['QUATERNION', 'XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']
@ -326,9 +330,19 @@ class CONVERT_OT_quat2eu_all_actions(bpy.types.Operator):
return {'FINISHED'}
def register():
IDStore = bpy.types.WindowManager
### Registering ###
classes = (
ToolsPanel,
CONVERT_OT_quat2eu_current_action,
CONVERT_OT_quat2eu_all_actions,
)
def register():
from bpy.utils import register_class
# Properties.
items = [('QUATERNION', 'QUATERNION', 'QUATERNION'),
('XYZ', 'XYZ', 'XYZ'),
('XZY', 'XZY', 'XZY'),
@ -336,24 +350,27 @@ def register():
('YZX', 'YZX', 'YZX'),
('ZXY', 'ZXY', 'ZXY'),
('ZYX', 'ZYX', 'ZYX')]
bpy.types.Scene.order_list = EnumProperty(
items=items, name='Convert to',
description="The target rotation mode", default='QUATERNION')
bpy.types.Scene.order_list = bpy.props.EnumProperty(items=items, name='Convert to',
description="The target rotation mode", default='QUATERNION')
IDStore = bpy.types.WindowManager
IDStore.rigify_convert_only_selected = BoolProperty(
name="Convert Only Selected",
description="Convert selected bones only", default=True)
IDStore.rigify_convert_only_selected = bpy.props.BoolProperty(
name="Convert Only Selected", description="Convert selected bones only", default=True)
# Classes.
for cls in classes:
register_class(cls)
bpy.utils.register_class(ToolsPanel)
bpy.utils.register_class(CONVERT_OT_quat2eu_current_action)
bpy.utils.register_class(CONVERT_OT_quat2eu_all_actions)
def unregister():
from bpy.utils import unregister_class
# Classes.
for cls in classes:
unregister_class(cls)
# Properties.
IDStore = bpy.types.WindowManager
bpy.utils.unregister_class(ToolsPanel)
bpy.utils.unregister_class(CONVERT_OT_quat2eu_current_action)
bpy.utils.unregister_class(CONVERT_OT_quat2eu_all_actions)
del IDStore.rigify_convert_only_selected
# bpy.utils.register_module(__name__)

View File

@ -19,7 +19,13 @@
# <pep8 compliant>
import bpy
from bpy.props import StringProperty
from bpy.props import (
BoolProperty,
IntProperty,
EnumProperty,
StringProperty
)
from mathutils import Color
from .utils import get_rig_type, MetarigError
@ -395,28 +401,29 @@ class DATA_OT_rigify_bone_group_add_theme(bpy.types.Operator):
bl_label = "Rigify Add Bone Group color set from Theme"
bl_options = {"REGISTER", "UNDO"}
theme = bpy.props.EnumProperty(items=(('THEME01', 'THEME01', ''),
('THEME02', 'THEME02', ''),
('THEME03', 'THEME03', ''),
('THEME04', 'THEME04', ''),
('THEME05', 'THEME05', ''),
('THEME06', 'THEME06', ''),
('THEME07', 'THEME07', ''),
('THEME08', 'THEME08', ''),
('THEME09', 'THEME09', ''),
('THEME10', 'THEME10', ''),
('THEME11', 'THEME11', ''),
('THEME12', 'THEME12', ''),
('THEME13', 'THEME13', ''),
('THEME14', 'THEME14', ''),
('THEME15', 'THEME15', ''),
('THEME16', 'THEME16', ''),
('THEME17', 'THEME17', ''),
('THEME18', 'THEME18', ''),
('THEME19', 'THEME19', ''),
('THEME20', 'THEME20', '')
),
name='Theme')
theme: EnumProperty(items=(
('THEME01', 'THEME01', ''),
('THEME02', 'THEME02', ''),
('THEME03', 'THEME03', ''),
('THEME04', 'THEME04', ''),
('THEME05', 'THEME05', ''),
('THEME06', 'THEME06', ''),
('THEME07', 'THEME07', ''),
('THEME08', 'THEME08', ''),
('THEME09', 'THEME09', ''),
('THEME10', 'THEME10', ''),
('THEME11', 'THEME11', ''),
('THEME12', 'THEME12', ''),
('THEME13', 'THEME13', ''),
('THEME14', 'THEME14', ''),
('THEME15', 'THEME15', ''),
('THEME16', 'THEME16', ''),
('THEME17', 'THEME17', ''),
('THEME18', 'THEME18', ''),
('THEME19', 'THEME19', ''),
('THEME20', 'THEME20', '')
),
name='Theme')
@classmethod
def poll(cls, context):
@ -448,7 +455,7 @@ class DATA_OT_rigify_bone_group_remove(bpy.types.Operator):
bl_idname = "armature.rigify_bone_group_remove"
bl_label = "Rigify Remove Bone Group color set"
idx = bpy.props.IntProperty()
idx: IntProperty()
@classmethod
def poll(cls, context):
@ -794,18 +801,17 @@ class SwitchToLegacy(bpy.types.Operator):
class Sample(bpy.types.Operator):
"""Create a sample metarig to be modified before generating """ \
"""the final rig"""
"""Create a sample metarig to be modified before generating the final rig"""
bl_idname = "armature.metarig_sample_add"
bl_label = "Add a sample metarig for a rig type"
bl_options = {'UNDO'}
metarig_type = StringProperty(
name="Type",
description="Name of the rig type to generate a sample of",
maxlen=128,
)
metarig_type: StringProperty(
name="Type",
description="Name of the rig type to generate a sample of",
maxlen=128,
)
def execute(self, context):
if context.mode == 'EDIT_ARMATURE' and self.metarig_type != "":
@ -1074,20 +1080,20 @@ def IktoFk(rig, window='ALL'):
break
def clearAnimation(act, type, names):
def clearAnimation(act, anim_type, names):
bones = []
for group in names:
if names[group]['limb_type'] == 'arm':
if type == 'IK':
if anim_type == 'IK':
bones.extend([names[group]['controls'][0], names[group]['controls'][4]])
elif type == 'FK':
elif anim_type == 'FK':
bones.extend([names[group]['controls'][1], names[group]['controls'][2], names[group]['controls'][3]])
else:
if type == 'IK':
if anim_type == 'IK':
bones.extend([names[group]['controls'][0], names[group]['controls'][6], names[group]['controls'][5],
names[group]['controls'][4]])
elif type == 'FK':
elif anim_type == 'FK':
bones.extend([names[group]['controls'][1], names[group]['controls'][2], names[group]['controls'][3],
names[group]['controls'][4]])
FCurves = []
@ -1271,7 +1277,8 @@ class OBJECT_OT_ClearAnimation(bpy.types.Operator):
bl_idname = "rigify.clear_animation"
bl_label = "Clear Animation"
bl_description = "Clear Animation For FK or IK Bones"
type = StringProperty()
anim_type: StringProperty()
def execute(self, context):
@ -1286,7 +1293,7 @@ class OBJECT_OT_ClearAnimation(bpy.types.Operator):
if not act:
return {'FINISHED'}
clearAnimation(act, self.type, names=get_limb_generated_names(rig))
clearAnimation(act, self.anim_type, names=get_limb_generated_names(rig))
finally:
context.user_preferences.edit.use_global_undo = use_global_undo
return {'FINISHED'}
@ -1296,11 +1303,12 @@ class OBJECT_OT_Rot2Pole(bpy.types.Operator):
bl_idname = "rigify.rotation_pole"
bl_label = "Rotation - Pole toggle"
bl_description = "Toggles IK chain between rotation and pole target"
bone_name = bpy.props.StringProperty(default='')
window = bpy.props.StringProperty(default='ALL')
toggle = bpy.props.BoolProperty(default=True)
value = bpy.props.BoolProperty(default=True)
bake = bpy.props.BoolProperty(default=True)
bone_name: StringProperty(default='')
window: StringProperty(default='ALL')
toggle: BoolProperty(default=True)
value: BoolProperty(default=True)
bake: BoolProperty(default=True)
def execute(self, context):
rig = context.object
@ -1313,74 +1321,60 @@ class OBJECT_OT_Rot2Pole(bpy.types.Operator):
return {'FINISHED'}
### Registering ###
classes = (
DATA_OT_rigify_add_bone_groups,
DATA_OT_rigify_use_standard_colors,
DATA_OT_rigify_apply_selection_colors,
DATA_OT_rigify_bone_group_add,
DATA_OT_rigify_bone_group_add_theme,
DATA_OT_rigify_bone_group_remove,
DATA_OT_rigify_bone_group_remove_all,
DATA_UL_rigify_bone_groups,
DATA_MT_rigify_bone_groups_specials,
DATA_PT_rigify_bone_groups,
DATA_PT_rigify_layer_names,
DATA_PT_rigify_buttons,
BONE_PT_rigify_buttons,
VIEW3D_PT_rigify_animation_tools,
VIEW3D_PT_tools_rigify_dev,
LayerInit,
Generate,
UpgradeMetarigTypes,
SwitchToLegacy,
Sample,
EncodeMetarig,
EncodeMetarigSample,
EncodeWidget,
OBJECT_OT_GetFrameRange,
OBJECT_OT_FK2IK,
OBJECT_OT_IK2FK,
OBJECT_OT_TransferFKtoIK,
OBJECT_OT_TransferIKtoFK,
OBJECT_OT_ClearAnimation,
OBJECT_OT_Rot2Pole,
)
def register():
from bpy.utils import register_class
bpy.utils.register_class(DATA_OT_rigify_add_bone_groups)
bpy.utils.register_class(DATA_OT_rigify_use_standard_colors)
bpy.utils.register_class(DATA_OT_rigify_apply_selection_colors)
bpy.utils.register_class(DATA_OT_rigify_bone_group_add)
bpy.utils.register_class(DATA_OT_rigify_bone_group_add_theme)
bpy.utils.register_class(DATA_OT_rigify_bone_group_remove)
bpy.utils.register_class(DATA_OT_rigify_bone_group_remove_all)
bpy.utils.register_class(DATA_UL_rigify_bone_groups)
bpy.utils.register_class(DATA_MT_rigify_bone_groups_specials)
bpy.utils.register_class(DATA_PT_rigify_bone_groups)
bpy.utils.register_class(DATA_PT_rigify_layer_names)
bpy.utils.register_class(DATA_PT_rigify_buttons)
bpy.utils.register_class(BONE_PT_rigify_buttons)
bpy.utils.register_class(VIEW3D_PT_rigify_animation_tools)
bpy.utils.register_class(VIEW3D_PT_tools_rigify_dev)
bpy.utils.register_class(LayerInit)
bpy.utils.register_class(Generate)
bpy.utils.register_class(UpgradeMetarigTypes)
bpy.utils.register_class(SwitchToLegacy)
bpy.utils.register_class(Sample)
bpy.utils.register_class(EncodeMetarig)
bpy.utils.register_class(EncodeMetarigSample)
bpy.utils.register_class(EncodeWidget)
bpy.utils.register_class(OBJECT_OT_GetFrameRange)
bpy.utils.register_class(OBJECT_OT_FK2IK)
bpy.utils.register_class(OBJECT_OT_IK2FK)
bpy.utils.register_class(OBJECT_OT_TransferFKtoIK)
bpy.utils.register_class(OBJECT_OT_TransferIKtoFK)
bpy.utils.register_class(OBJECT_OT_ClearAnimation)
bpy.utils.register_class(OBJECT_OT_Rot2Pole)
# Classes.
for cls in classes:
register_class(cls)
# Sub-modules.
rot_mode.register()
def unregister():
from bpy.utils import unregister_class
bpy.utils.unregister_class(DATA_OT_rigify_add_bone_groups)
bpy.utils.unregister_class(DATA_OT_rigify_use_standard_colors)
bpy.utils.unregister_class(DATA_OT_rigify_apply_selection_colors)
bpy.utils.unregister_class(DATA_OT_rigify_bone_group_add)
bpy.utils.unregister_class(DATA_OT_rigify_bone_group_add_theme)
bpy.utils.unregister_class(DATA_OT_rigify_bone_group_remove)
bpy.utils.unregister_class(DATA_OT_rigify_bone_group_remove_all)
bpy.utils.unregister_class(DATA_UL_rigify_bone_groups)
bpy.utils.unregister_class(DATA_MT_rigify_bone_groups_specials)
bpy.utils.unregister_class(DATA_PT_rigify_bone_groups)
bpy.utils.unregister_class(DATA_PT_rigify_layer_names)
bpy.utils.unregister_class(DATA_PT_rigify_buttons)
bpy.utils.unregister_class(BONE_PT_rigify_buttons)
bpy.utils.unregister_class(VIEW3D_PT_rigify_animation_tools)
bpy.utils.unregister_class(VIEW3D_PT_tools_rigify_dev)
bpy.utils.unregister_class(LayerInit)
bpy.utils.unregister_class(Generate)
bpy.utils.unregister_class(UpgradeMetarigTypes)
bpy.utils.unregister_class(SwitchToLegacy)
bpy.utils.unregister_class(Sample)
bpy.utils.unregister_class(EncodeMetarig)
bpy.utils.unregister_class(EncodeMetarigSample)
bpy.utils.unregister_class(EncodeWidget)
bpy.utils.unregister_class(OBJECT_OT_GetFrameRange)
bpy.utils.unregister_class(OBJECT_OT_FK2IK)
bpy.utils.unregister_class(OBJECT_OT_IK2FK)
bpy.utils.unregister_class(OBJECT_OT_TransferFKtoIK)
bpy.utils.unregister_class(OBJECT_OT_TransferIKtoFK)
bpy.utils.unregister_class(OBJECT_OT_ClearAnimation)
bpy.utils.unregister_class(OBJECT_OT_Rot2Pole)
# Sub-modules.
rot_mode.unregister()
# Classes.
for cls in classes:
unregister_class(cls)