diff --git a/animation_rotobezier.py b/animation_rotobezier.py index 1d3846e86ccebe6dae8491faad5479dc7551a0ac..7c640c44ae8cfef7f42df245280858cc7b2fd764 100644 --- a/animation_rotobezier.py +++ b/animation_rotobezier.py @@ -56,10 +56,25 @@ class OBJECT_PT_rotobezier(bpy.types.Panel): # draw the gui def draw(self, context): layout = self.layout - + + Obj = context.active_object + + row = layout.row() + row.label(text="Keyframing:") row = layout.row() row.operator('curve.insert_keyframe_rotobezier') row.operator('curve.delete_keyframe_rotobezier') + row = layout.row() + row.label(text="Display:") + row = layout.row() + row.operator('curve.toggle_draw_rotobezier') + if context.mode == 'EDIT_CURVE': + row.operator('curve.toggle_handles_rotobezier') + row = layout.row() + row.label(text="Tools:") + row = layout.row() + row.operator('curve.make_white_matte_rotobezier') + row.operator('curve.make_black_matte_rotobezier') class CURVE_OT_insert_keyframe_rotobezier(bpy.types.Operator): @@ -71,20 +86,20 @@ class CURVE_OT_insert_keyframe_rotobezier(bpy.types.Operator): # on mouse up: def invoke(self, context, event): - self.insert_keyframe(context) + self.main_func(context) return {'FINISHED'} - def insert_keyframe(op, context): + def main_func(op, context): import bpy - Obj = bpy.context.active_object + Obj = context.active_object if Obj.type == 'CURVE': Mode = False - if bpy.context.mode != 'OBJECT': + if context.mode != 'OBJECT': Mode = not Mode bpy.ops.object.editmode_toggle() Data = Obj.data @@ -106,24 +121,25 @@ 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' + bl_options = {'REGISTER', 'UNDO'} # on mouse up: def invoke(self, context, event): - self.delete_keyframe(context) + self.main_func(context) return {'FINISHED'} - def delete_keyframe(op, context): + def main_func(op, context): import bpy - Obj = bpy.context.active_object + Obj = context.active_object if Obj.type == 'CURVE': Mode = False - if bpy.context.mode != 'OBJECT': + if context.mode != 'OBJECT': Mode = not Mode bpy.ops.object.editmode_toggle() Data = Obj.data @@ -138,8 +154,165 @@ class CURVE_OT_delete_keyframe_rotobezier(bpy.types.Operator): bpy.ops.object.editmode_toggle() - return {'FINISHED'} + return {'FINISHED'} + + +# Matte Material Assignment Func +def MakeMatte (Type): + + Obj = bpy.context.active_object + + # Material + def CheckMat (MatName): + + Result = False + + Mats = bpy.data.materials + + for Mat in Mats: + if Mat.name == MatName: + Result = not Result + + return Result + + + if Type == 'White': + + MatName = 'RotoBezier_WhiteMatte' + MatCol = (1,1,1) + + elif Type == 'Black': + + MatName = 'RotoBezier_BlackMatte' + MatCol = (0,0,0) + + if CheckMat(MatName): + + Mat = bpy.data.materials[MatName] + + if not Obj.material_slots: + bpy.ops.object.material_slot_add() + + Obj.material_slots[0].material = Mat + + else: + + Mat = bpy.data.materials.new(MatName) + Mat.diffuse_color = MatCol + Mat.use_shadeless = True + Mat.use_raytrace = False + Mat.use_shadows = False + Mat.use_cast_buffer_shadows = False + Mat.use_cast_approximate = False + + if not Obj.material_slots: + bpy.ops.object.material_slot_add() + + Obj.material_slots[0].material = Mat + + # Settings + Curve = Obj.data + + Curve.dimensions = '2D' + Curve.use_fill_front = False + Curve.use_fill_back = False + +class CURVE_OT_make_white_matte_rotobezier(bpy.types.Operator): + bl_label = 'Make White Matte' + bl_idname = 'curve.make_white_matte_rotobezier' + bl_description = 'Make this curve a white matte' + bl_options = {'REGISTER', 'UNDO'} + + # on mouse up: + def invoke(self, context, event): + + self.main_func(context) + + return {'FINISHED'} + + + def main_func(op, context): + + MakeMatte('White') + + return {'FINISHED'} + + +class CURVE_OT_make_black_matte_rotobezier(bpy.types.Operator): + bl_label = 'Make Black Matte' + bl_idname = 'curve.make_black_matte_rotobezier' + bl_description = 'Make this curve a black matte' + bl_options = {'REGISTER', 'UNDO'} + + # on mouse up: + def invoke(self, context, event): + + self.main_func(context) + + return {'FINISHED'} + + def main_func(op, context): + + MakeMatte('Black') + + return {'FINISHED'} + + +class CURVE_OT_toggle_handles_rotobezier(bpy.types.Operator): + bl_label = 'Toggle Handles' + bl_idname = 'curve.toggle_handles_rotobezier' + bl_description = 'Toggle the curve handle display in edit mode' + bl_options = {'REGISTER', 'UNDO'} + + # on mouse up: + def invoke(self, context, event): + + self.main_func(context) + + return {'FINISHED'} + + + def main_func(op, context): + + Obj = context.active_object + Curve = Obj.data + if Curve.show_handles: + Curve.show_handles = False + else: + Curve.show_handles = True + + return {'FINISHED'} + + +class CURVE_OT_toggle_draw_rotobezier(bpy.types.Operator): + bl_label = 'Toggle Draw' + bl_idname = 'curve.toggle_draw_rotobezier' + bl_description = 'Toggle the curve display mode between Wire and Solid' + bl_options = {'REGISTER', 'UNDO'} + + # on mouse up: + def invoke(self, context, event): + + self.main_func(context) + + return {'FINISHED'} + + + def main_func(op, context): + + Obj = context.active_object + + if Obj.draw_type == 'SOLID': + Obj.draw_type = 'WIRE' + + elif Obj.draw_type == 'WIRE': + Obj.draw_type = 'SOLID' + + else: + Obj.draw_type = 'WIRE' + + return {'FINISHED'} def register():