[Durian-svn] [1473] Added a new python keying set for Durian animators.
nathan
institute at blender.org
Wed Mar 24 13:56:50 CET 2010
Revision: 1473
https://blenderinstitute.dyndns.org/durian-svn/?do=log&project=durian&path=/&rev=1473
Author: nathan
Date: 2010-03-24 13:56:50 +0100 (Wed, 24 Mar 2010)
Log Message:
-----------
Added a new python keying set for Durian animators. It keys loc/rot/scale and numerical custom properties on selected objects and bones. It also ignores locked channels (good for keeping actions clean).
Added Paths:
-----------
pro/scripts/ui/keying_sets.py
Added: pro/scripts/ui/keying_sets.py
===================================================================
--- pro/scripts/ui/keying_sets.py (rev 0)
+++ pro/scripts/ui/keying_sets.py 2010-03-24 12:56:50 UTC (rev 1473)
@@ -0,0 +1,117 @@
+import bpy
+
+def path_add_property(path, prop):
+ if len(path):
+ return path + "." + prop
+ else:
+ return prop
+
+
+
+
+def key_loc(id_block, path, data, group_method, grouping, ks):
+ """ Add unlocked translation channels to a keying set.
+ """
+ for i in range(0,3):
+ if not data.lock_location[i]:
+ ks.add_path(id_block, path_add_property(path, "location"), grouping_method=group_method, group_name=grouping, array_index=i, entire_array=False)
+
+
+def key_rot(id_block, path, data, group_method, grouping, ks):
+ """ Add unlocked rotation channels to a keying set.
+ """
+ locks_4d = [data.lock_rotation_w] + list(data.lock_rotation)
+ if data.rotation_mode == "QUATERNION":
+ for i in range(0,4):
+ if not locks_4d[i]:
+ ks.add_path(id_block, path_add_property(path, "rotation_quaternion"), grouping_method=group_method, group_name=grouping, array_index=i, entire_array=False)
+ elif data.rotation_mode == "AXIS_ANGLE":
+ for i in range(0,4):
+ if not locks_4d[i]:
+ ks.add_path(id_block, path_add_property(path, "rotation_axis_angle"), grouping_method=group_method, group_name=grouping, array_index=i, entire_array=False)
+ else:
+ for i in range(0,3):
+ if not data.lock_rotation[i]:
+ ks.add_path(id_block, path_add_property(path, "rotation_euler"), grouping_method=group_method, group_name=grouping, array_index=i, entire_array=False)
+
+
+def key_scale(id_block, path, data, group_method, grouping, ks):
+ """ Add unlocked scale channels to a keying set.
+ """
+ for i in range(0,3):
+ if not data.lock_scale[i]:
+ ks.add_path(id_block, path_add_property(path, "scale"), grouping_method=group_method, group_name=grouping, array_index=i, entire_array=False)
+
+
+
+
+
+
+# LocRotScale
+class KSI_LocRotScaleProps(bpy.types.KeyingSetInfo):
+ bl_label = "LocRotScaleProps"
+
+
+ def poll(self, context):
+ """ Allow keying if there are selected objects.
+ """
+ return len(context.selected_objects) != 0
+
+
+ def iterator(self, context, ks):
+ """ Iterate over all selected objects and bones.
+ """
+ if (context.active_object) and (context.active_object.mode == 'POSE'):
+ for bone in context.selected_pose_bones:
+ self.generate(context, ks, bone)
+ else:
+ for ob in context.selected_objects:
+ self.generate(context, ks, ob)
+
+
+ def generate(self, context, ks, data):
+ """ Key unlocked transforms and custom properties.
+ """
+ id_block = data.id_data
+ try:
+ path = data.path_to_id()
+ except TypeError:
+ path = ""
+ grouping = None
+ else:
+ grouping = data.name
+
+ # Custom properties
+ try:
+ data["_RNA_UI"]
+ except KeyError:
+ pass
+ else:
+ for prop in data["_RNA_UI"]:
+ if (type(data[prop]) is float) or (type(data[prop]) is int):
+ ks.add_path(id_block, path + ('["%s"]' % prop), grouping_method='NONE')
+
+ # Transforms
+ if grouping:
+ key_loc(id_block, path, data, 'NAMED', grouping, ks)
+ key_rot(id_block, path, data, 'NAMED', grouping, ks)
+ key_scale(id_block, path, data, 'NAMED', grouping, ks)
+ else:
+ key_loc(id_block, path, data, 'NONE', "", ks)
+ key_rot(id_block, path, data, 'NONE', "", ks)
+ key_scale(id_block, path, data, 'NONE', "", ks)
+
+
+
+
+
+def register():
+ bpy.types.register(KSI_LocRotScaleProps)
+
+
+def unregister():
+ bpy.types.unregister(KSI_LocRotScaleProps)
+
+if __name__ == "__main__":
+ register()
+
More information about the Durian-svn
mailing list