[Blender]「毎フレーム再生」「コマ落とし」「音声に同期」切替ボタンを常に見える場所に表示するスクリプト
今回もchtGPT産です。
Blenderは頻繁に変更する設定がちょっと深い場所にあって、現在の状態がひと目で分からない事が多いです。
import bpy
class PlayEveryFrameToggleOperator(bpy.types.Operator):
"""Toggle Play Every Frame"""
bl_idname = "screen.play_every_frame_toggle"
bl_label = "Toggle Play Every Frame"
def execute(self, context):
scene = context.scene
scene.sync_mode = 'FRAME_DROP' if scene.sync_mode == 'PLAY_EVERY_FRAME' else 'PLAY_EVERY_FRAME'
return {'FINISHED'}
def draw_play_every_frame_toggle(self, context):
layout = self.layout
scene = context.scene
layout.prop(scene, "sync_mode", text="", toggle=True)
def register():
bpy.utils.register_class(PlayEveryFrameToggleOperator)
bpy.types.DOPESHEET_HT_header.append(draw_play_every_frame_toggle)
bpy.types.GRAPH_HT_header.append(draw_play_every_frame_toggle)
def unregister():
bpy.utils.unregister_class(PlayEveryFrameToggleOperator)
bpy.types.DOPESHEET_HT_header.remove(draw_play_every_frame_toggle)
bpy.types.GRAPH_HT_header.remove(draw_play_every_frame_toggle)
if __name__ == "__main__":
register()
余談。テキストエディターの「登録」から、シーンファイルを読み込んだ時に自動実行するスクリプトを登録出来るのを知りました。
こういうスクリプトをアドオン化するか、スタートアップファイルに登録すするか、どう運用すべきか。。
追加
テキストエディタで登録してスタートアップファイルに保存すると何故かボタンが二つ追加されてしまいます。
下記でスタートアップファイルに保存すれば重複が起こりません。これもchatGPTによる修正。
import bpy
class PlayEveryFrameToggleOperator(bpy.types.Operator):
"""Toggle Play Every Frame"""
bl_idname = "screen.play_every_frame_toggle"
bl_label = "Toggle Play Every Frame"
def execute(self, context):
scene = context.scene
scene.sync_mode = 'FRAME_DROP' if scene.sync_mode == 'PLAY_EVERY_FRAME' else 'PLAY_EVERY_FRAME'
return {'FINISHED'}
def draw_play_every_frame_toggle(self, context):
layout = self.layout
scene = context.scene
# プルダウンメニューを表示
layout.prop(scene, "sync_mode", text="")
def register():
bpy.utils.register_class(PlayEveryFrameToggleOperator)
if not hasattr(bpy.types, "DOPESHEET_HT_header_draw_registered"):
bpy.types.DOPESHEET_HT_header.append(draw_play_every_frame_toggle)
bpy.types.DOPESHEET_HT_header_draw_registered = True
if not hasattr(bpy.types, "GRAPH_HT_header_draw_registered"):
bpy.types.GRAPH_HT_header.append(draw_play_every_frame_toggle)
bpy.types.GRAPH_HT_header_draw_registered = True
def unregister():
bpy.utils.unregister_class(PlayEveryFrameToggleOperator)
if hasattr(bpy.types, "DOPESHEET_HT_header_draw_registered"):
bpy.types.DOPESHEET_HT_header.remove(draw_play_every_frame_toggle)
del bpy.types.DOPESHEET_HT_header_draw_registered
if hasattr(bpy.types, "GRAPH_HT_header_draw_registered"):
bpy.types.GRAPH_HT_header.remove(draw_play_every_frame_toggle)
del bpy.types.GRAPH_HT_header_draw_registered
if __name__ == "__main__":
register()
この記事が気に入ったらサポートをしてみませんか?