[Blender][スクリプト]キーを指定したフレーム数だけ移動するツール(240920修正)
グラフエディタとドープシートのサイドバー(ツールタブ)にサムネの様なツールが出るので、数値を入力してボタンを押すと数値分フレーム移動します。
(240920修正)反動が置いていかれる問題を修正しました。AIが。
import bpy
# キーフレームを指定したフレーム数だけ移動する関数(グラフエディタ用)
def move_keys_graph(offset):
# グラフエディタ用の移動
bpy.ops.transform.translate(value=(offset, 0, 0))
bpy.context.area.tag_redraw()
# キーフレームを指定したフレーム数だけ移動する関数(ドープシート用)
def move_keys_dope(offset):
# ドープシート用の移動
bpy.ops.transform.transform(mode='TIME_TRANSLATE', value=(offset, 0, 0, 0))
bpy.context.area.tag_redraw()
# オペレーター定義(グラフエディタ用)
class ANIM_OT_move_keys_forward_graph(bpy.types.Operator):
bl_idname = "anim.move_keys_forward_graph"
bl_label = "+"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
offset = context.scene.key_move_offset
move_keys_graph(offset)
return {'FINISHED'}
class ANIM_OT_move_keys_backward_graph(bpy.types.Operator):
bl_idname = "anim.move_keys_backward_graph"
bl_label = "-"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
offset = -context.scene.key_move_offset
move_keys_graph(offset)
return {'FINISHED'}
# オペレーター定義(ドープシート用)
class ANIM_OT_move_keys_forward_dope(bpy.types.Operator):
bl_idname = "anim.move_keys_forward_dope"
bl_label = "+"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
offset = context.scene.key_move_offset
move_keys_dope(offset)
return {'FINISHED'}
class ANIM_OT_move_keys_backward_dope(bpy.types.Operator):
bl_idname = "anim.move_keys_backward_dope"
bl_label = "-"
bl_options = {'REGISTER', 'UNDO'}
def execute(self, context):
offset = -context.scene.key_move_offset
move_keys_dope(offset)
return {'FINISHED'}
# パネル定義(グラフエディタ用)
class ANIM_PT_key_mover_graph(bpy.types.Panel):
bl_idname = "ANIM_PT_key_mover_graph"
bl_label = "Move Keys"
bl_space_type = 'GRAPH_EDITOR'
bl_region_type = 'UI'
bl_category = 'Custom'
def draw(self, context):
layout = self.layout
scene = context.scene
row = layout.row()
row.prop(scene, "key_move_offset", text="Offset")
row = layout.row(align=True)
row.operator("anim.move_keys_backward_graph", text="-") # - ボタンを先に配置
row.operator("anim.move_keys_forward_graph", text="+") # + ボタンを後に配置
# パネル定義(ドープシート用)
class ANIM_PT_key_mover_dope(bpy.types.Panel):
bl_idname = "ANIM_PT_key_mover_dope"
bl_label = "Move Keys"
bl_space_type = 'DOPESHEET_EDITOR'
bl_region_type = 'UI'
bl_category = 'Custom'
def draw(self, context):
layout = self.layout
scene = context.scene
row = layout.row()
row.prop(scene, "key_move_offset", text="Offset")
row = layout.row(align=True)
row.operator("anim.move_keys_backward_dope", text="-") # - ボタンを先に配置
row.operator("anim.move_keys_forward_dope", text="+") # + ボタンを後に配置
# プロパティ登録
def register():
bpy.utils.register_class(ANIM_OT_move_keys_forward_graph)
bpy.utils.register_class(ANIM_OT_move_keys_backward_graph)
bpy.utils.register_class(ANIM_OT_move_keys_forward_dope)
bpy.utils.register_class(ANIM_OT_move_keys_backward_dope)
bpy.utils.register_class(ANIM_PT_key_mover_graph)
bpy.utils.register_class(ANIM_PT_key_mover_dope)
bpy.types.Scene.key_move_offset = bpy.props.IntProperty(
name="Offset",
description="Number of frames to move keys",
default=1
)
def unregister():
bpy.utils.unregister_class(ANIM_OT_move_keys_forward_graph)
bpy.utils.unregister_class(ANIM_OT_move_keys_backward_graph)
bpy.utils.unregister_class(ANIM_OT_move_keys_forward_dope)
bpy.utils.unregister_class(ANIM_OT_move_keys_backward_dope)
bpy.utils.unregister_class(ANIM_PT_key_mover_graph)
bpy.utils.unregister_class(ANIM_PT_key_mover_dope)
del bpy.types.Scene.key_move_offset
if __name__ == "__main__":
register()