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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Salazar <zanqdo@gmail.com>2010-11-20 21:26:32 +0300
committerDaniel Salazar <zanqdo@gmail.com>2010-11-20 21:26:32 +0300
commit75d6f21d44c92e6e6a8e3e32bca688ec328fd7c3 (patch)
treeefb7336353f8e8b5473829d62e383cce0f04c66a /animation_rotobezier.py
parente58584265122e5b85903f109ac3458c3f78ccbb9 (diff)
Simple addon for animating spline curves or "RotoBeziers" for
rotoscoping
Diffstat (limited to 'animation_rotobezier.py')
-rw-r--r--animation_rotobezier.py152
1 files changed, 152 insertions, 0 deletions
diff --git a/animation_rotobezier.py b/animation_rotobezier.py
new file mode 100644
index 00000000..3aa13423
--- /dev/null
+++ b/animation_rotobezier.py
@@ -0,0 +1,152 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+#-------------------------------------------------------------------------
+# WARNING: Currently adding new CVs to an already animated curve isn't safe
+# Thanks to Campbell Barton for hes API additions and fixes
+# Daniel Salazar - ZanQdo
+#-------------------------------------------------------------------------
+
+bl_addon_info = {
+ 'name': 'RotoBezier',
+ 'author': 'Daniel Salazar <zanqdo@gmail.com>',
+ 'version': (0,1),
+ 'blender': (2, 5, 5),
+ 'api': 33198,
+ 'location': 'Select a Curve > Properties > Curve > RotoBezier',
+ 'description': 'Allows animation of bezier curves for rotoscoping',
+ 'warning': '',
+ 'wiki_url': '',
+ 'tracker_url': '',
+ 'category': 'Animation'}
+
+
+import bpy
+
+#
+# GUI (Panel)
+#
+class OBJECT_PT_rotobezier(bpy.types.Panel):
+
+ bl_label = "RotoBezier"
+ bl_space_type = "PROPERTIES"
+ bl_region_type = "WINDOW"
+ bl_context = "data"
+
+ # show this add-on only in the Camera-Data-Panel
+ @classmethod
+ def poll(self, context):
+ return context.active_object.type == 'CURVE'
+
+ # draw the gui
+ def draw(self, context):
+ layout = self.layout
+
+ row = layout.row()
+ row.operator('curve.insert_keyframe_rotobezier')
+ row.operator('curve.delete_keyframe_rotobezier')
+
+
+class CURVE_OT_insert_keyframe_rotobezier(bpy.types.Operator):
+ bl_label = 'Insert Keyframe'
+ bl_idname = 'curve.insert_keyframe_rotobezier'
+ bl_description = 'Insert a RotoBezier Keyframe'
+ bl_options = {'REGISTER', 'UNDO'}
+
+ # on mouse up:
+ def invoke(self, context, event):
+
+ self.insert_keyframe(context)
+
+ return {'FINISHED'}
+
+
+ def insert_keyframe(op, context):
+
+ import bpy
+
+ Obj = bpy.context.active_object
+
+ if Obj.type == 'CURVE':
+ Mode = False
+ if bpy.context.mode != 'OBJECT':
+ Mode = not Mode
+ bpy.ops.object.editmode_toggle()
+ Data = Obj.data
+
+ for Splines in Data.splines:
+ for CVs in Splines.bezier_points:
+ CVs.keyframe_insert('co')
+ CVs.keyframe_insert('handle_left')
+ CVs.keyframe_insert('handle_right')
+
+ if Mode:
+ bpy.ops.object.editmode_toggle()
+
+
+ return {'FINISHED'}
+
+
+class CURVE_OT_delete_keyframe_rotobezier(bpy.types.Operator):
+ bl_label = 'Delete Keyframe'
+ bl_idname = 'curve.delete_keyframe_rotobezier'
+ bl_description = 'Delete a RotoBezier Keyframe'
+
+ # on mouse up:
+ def invoke(self, context, event):
+
+ self.delete_keyframe(context)
+
+ return {'FINISHED'}
+
+
+ def delete_keyframe(op, context):
+
+ import bpy
+
+ Obj = bpy.context.active_object
+
+ if Obj.type == 'CURVE':
+ Mode = False
+ if bpy.context.mode != 'OBJECT':
+ Mode = not Mode
+ bpy.ops.object.editmode_toggle()
+ Data = Obj.data
+
+ for Splines in Data.splines:
+ for CVs in Splines.bezier_points:
+ CVs.keyframe_delete('co')
+ CVs.keyframe_delete('handle_left')
+ CVs.keyframe_delete('handle_right')
+
+ if Mode:
+ bpy.ops.object.editmode_toggle()
+
+
+ return {'FINISHED'}
+
+
+
+def register():
+ pass
+
+def unregister():
+ pass
+
+if __name__ == "__main__":
+ register()