Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/modules/keyingsets_utils.py12
-rw-r--r--release/scripts/startup/keyingsets_builtins.py91
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__)