"Bugfix" (i.e. feature request in disguise!) [#26772] Delta Scaling,

Rotation and Location don't have Keying Sets

Added Keying Sets for Delta Loc/Rot/Scale settings (aka dLoc/dRot).
These settings could already be found in the Object properties, under
the collapsed "Delta Transforms" panel.

I've added these to the end of the Keying Sets list, since adding any
earlier will end up breaking active Keying Set setting in older files.
Besides, these settings aren't that frequently used either...
This commit is contained in:
Joshua Leung
2011-04-05 11:49:58 +00:00
parent bbf82877cf
commit b2753f6af9
2 changed files with 101 additions and 2 deletions

View File

@@ -52,9 +52,12 @@ def path_add_property(path, prop):
# Poll Callbacks # Poll Callbacks
# selected objects # selected objects (active object must be in object mode)
def RKS_POLL_selected_objects(ksi, context): def RKS_POLL_selected_objects(ksi, context):
return context.active_object or len(context.selected_objects) if context.active_object:
return context.active_object.mode == 'OBJECT'
else:
return len(context.selected_objects) != 0
# selected bones # selected bones
@@ -85,6 +88,11 @@ def RKS_ITER_selected_item(ksi, context, ks):
for ob in context.selected_objects: for ob in context.selected_objects:
ksi.generate(context, ks, ob) ksi.generate(context, ks, ob)
# all select objects only
def RKS_ITER_selected_objects(ksi, context, ks):
for ob in context.selected_objects:
ksi.generate(context, ks, ob)
########################### ###########################
# Generate Callbacks # Generate Callbacks

View File

@@ -23,6 +23,11 @@ Built-In Keying Sets
None of these Keying Sets should be removed, as these None of these Keying Sets should be removed, as these
are needed by various parts of Blender in order for them are needed by various parts of Blender in order for them
to work correctly. to work correctly.
Beware also about changing the order that these are defined
here, since this can result in old files referring to the
wrong Keying Set as the active one, potentially resulting
in lost (i.e. unkeyed) animation.
""" """
import bpy import bpy
@@ -352,6 +357,92 @@ class BUILTIN_KSI_WholeCharacter(bpy.types.KeyingSetInfo):
# for now, just add all of 'em # for now, just add all of 'em
ksi.addProp(ks, bone, '["%s"]' % (prop)) ksi.addProp(ks, bone, '["%s"]' % (prop))
###############################
# Delta Location
class BUILTIN_KSI_DeltaLocation(bpy.types.KeyingSetInfo):
bl_label = "Delta Location"
# poll - selected objects only (and only if active object in object mode)
poll = keyingsets_utils.RKS_POLL_selected_objects
# iterator - selected objects only
iterator = keyingsets_utils.RKS_ITER_selected_objects
# generator - delta location channels only
def generate(ksi, context, ks, data):
# get id-block and path info
id_block, base_path, grouping = keyingsets_utils.get_transform_generators_base_info(data)
# add the property name to the base path
path = keyingsets_utils.path_add_property(base_path, "delta_location")
# add Keying Set entry for this...
if grouping:
ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
# Delta Rotation
class BUILTIN_KSI_DeltaRotation(bpy.types.KeyingSetInfo):
bl_label = "Delta Rotation"
# poll - selected objects only (and only if active object in object mode)
poll = keyingsets_utils.RKS_POLL_selected_objects
# iterator - selected objects only
iterator = keyingsets_utils.RKS_ITER_selected_objects
# generator - delta location channels only
def generate(ksi, context, ks, data):
# get id-block and path info
id_block, base_path, grouping = keyingsets_utils.get_transform_generators_base_info(data)
# add the property name to the base path
# rotation mode affects the property used
if data.rotation_mode == 'QUATERNION':
path = path_add_property(base_path, "delta_rotation_quaternion")
elif data.rotation_mode == 'AXIS_ANGLE':
# XXX: for now, this is not available yet
#path = path_add_property(base_path, "delta_rotation_axis_angle")
return;
else:
path = keyingsets_utils.path_add_property(base_path, "delta_rotation_euler")
# add Keying Set entry for this...
if grouping:
ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
# Delta Scale
class BUILTIN_KSI_DeltaScale(bpy.types.KeyingSetInfo):
bl_label = "Delta Scale"
# poll - selected objects only (and only if active object in object mode)
poll = keyingsets_utils.RKS_POLL_selected_objects
# iterator - selected objects only
iterator = keyingsets_utils.RKS_ITER_selected_objects
# generator - delta location channels only
def generate(ksi, context, ks, data):
# get id-block and path info
id_block, base_path, grouping = keyingsets_utils.get_transform_generators_base_info(data)
# add the property name to the base path
path = keyingsets_utils.path_add_property(base_path, "delta_scale")
# add Keying Set entry for this...
if grouping:
ks.paths.add(id_block, path, group_method='NAMED', group_name=grouping)
else:
ks.paths.add(id_block, path)
###############################
def register(): def register():
bpy.utils.register_module(__name__) bpy.utils.register_module(__name__)