見出し画像

[Blender][スクリプト]選択中のキーを1Fズラす(240924修正)

実行するとグラフエディタとドープシートのキーメニューに「Move +1F」「Move -1F」が追加されるので、それをアドオン化したうえでショートカットに割り当てると便利です。
(240924修正)移動するとハンドルが置いていかれるのを修正しました(AIが)。

import bpy

# 通常のアクションとグリースペンシルのキーフレームを1フレーム後に移動
def move_keys_plus1f(context):
    # ドープシートの場合は「時間移動」モードを使用
    if context.space_data.type == 'DOPESHEET_EDITOR':
        bpy.ops.transform.transform(mode='TIME_TRANSLATE', value=(1, 0, 0, 0))
    # グラフエディタの場合は通常のtranslateを使用
    elif context.space_data.type == 'GRAPH_EDITOR':
        bpy.ops.transform.translate(value=(1, 0, 0))

# 通常のアクションとグリースペンシルのキーフレームを1フレーム前に移動
def move_keys_minus1f(context):
    # ドープシートの場合は「時間移動」モードを使用
    if context.space_data.type == 'DOPESHEET_EDITOR':
        bpy.ops.transform.transform(mode='TIME_TRANSLATE', value=(-1, 0, 0, 0))
    # グラフエディタの場合は通常のtranslateを使用
    elif context.space_data.type == 'GRAPH_EDITOR':
        bpy.ops.transform.translate(value=(-1, 0, 0))

# メニューにコマンドを追加
def menu_func(self, context):
    self.layout.operator("anim.move_keys_plus1f", text="Move +1F")
    self.layout.operator("anim.move_keys_minus1f", text="Move -1F")

# オペレーター定義
class ANIM_OT_move_keys_plus1f(bpy.types.Operator):
    bl_idname = "anim.move_keys_plus1f"
    bl_label = "Move +1F"

    def execute(self, context):
        move_keys_plus1f(context)
        return {'FINISHED'}

class ANIM_OT_move_keys_minus1f(bpy.types.Operator):
    bl_idname = "anim.move_keys_minus1f"
    bl_label = "Move -1F"

    def execute(self, context):
        move_keys_minus1f(context)
        return {'FINISHED'}

# クラス登録とメニュー追加
def register():
    bpy.utils.register_class(ANIM_OT_move_keys_plus1f)
    bpy.utils.register_class(ANIM_OT_move_keys_minus1f)
    bpy.types.DOPESHEET_MT_key.append(menu_func)
    bpy.types.GRAPH_MT_key.append(menu_func)

def unregister():
    bpy.utils.unregister_class(ANIM_OT_move_keys_plus1f)
    bpy.utils.unregister_class(ANIM_OT_move_keys_minus1f)
    bpy.types.DOPESHEET_MT_key.remove(menu_func)
    bpy.types.GRAPH_MT_key.remove(menu_func)

if __name__ == "__main__":
    register()

この記事が気に入ったらサポートをしてみませんか?