diff options
-rw-r--r-- | release/scripts/modules/keyingsets_utils.py | 12 | ||||
-rw-r--r-- | release/scripts/startup/keyingsets_builtins.py | 91 |
2 files changed, 101 insertions, 2 deletions
diff --git a/release/scripts/modules/keyingsets_utils.py b/release/scripts/modules/keyingsets_utils.py index 00ad45cf9bb..01e090cc230 100644 --- a/release/scripts/modules/keyingsets_utils.py +++ b/release/scripts/modules/keyingsets_utils.py @@ -52,9 +52,12 @@ def path_add_property(path, prop): # Poll Callbacks -# selected objects +# selected objects (active object must be in object mode) 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 @@ -84,6 +87,11 @@ def RKS_ITER_selected_item(ksi, context, ks): else: for ob in context.selected_objects: 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 diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py index 6b0b282fd47..cefc5cf38ed 100644 --- a/release/scripts/startup/keyingsets_builtins.py +++ b/release/scripts/startup/keyingsets_builtins.py @@ -23,6 +23,11 @@ Built-In Keying Sets None of these Keying Sets should be removed, as these are needed by various parts of Blender in order for them 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 @@ -352,6 +357,92 @@ class BUILTIN_KSI_WholeCharacter(bpy.types.KeyingSetInfo): # for now, just add all of 'em 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(): bpy.utils.register_module(__name__) |