[Blender][スクリプト]Fカーブモディファイアの一括オンオフ
選択中のオブジェクトのFカーブモディファイアを一括でオン/オフするコマンドをグラフエディタのチャンネルメニューに追加します。
こういうの標準で必要だと思う。
import bpy
# モディファイアをオンにする関数
def enable_modifiers(self, context):
selected_objects = bpy.context.selected_objects # 選択中のオブジェクトを取得
if not selected_objects:
self.report({'WARNING'}, "オブジェクトが選択されていません。")
return
for obj in selected_objects:
if obj.animation_data and obj.animation_data.action:
action = obj.animation_data.action
# アクション内のすべてのモディファイアをオンにする
for fcurve in action.fcurves:
for mod in fcurve.modifiers:
mod.mute = False # モディファイアをオンに設定
self.report({'INFO'}, f"{obj.name}のモディファイアがオンにされました。")
else:
self.report({'WARNING'}, f"{obj.name}にはアクションまたはモディファイアがありません。")
# モディファイアをオフにする関数
def disable_modifiers(self, context):
selected_objects = bpy.context.selected_objects # 選択中のオブジェクトを取得
if not selected_objects:
self.report({'WARNING'}, "オブジェクトが選択されていません。")
return
for obj in selected_objects:
if obj.animation_data and obj.animation_data.action:
action = obj.animation_data.action
# アクション内のすべてのモディファイアをオフにする
for fcurve in action.fcurves:
for mod in fcurve.modifiers:
mod.mute = True # モディファイアをオフに設定
self.report({'INFO'}, f"{obj.name}のモディファイアがオフにされました。")
else:
self.report({'WARNING'}, f"{obj.name}にはアクションまたはモディファイアがありません。")
# メニューにカスタム項目を追加する関数
def menu_func(self, context):
layout = self.layout
layout.separator()
layout.operator("graph.enable_modifiers", text="Enable Modifiers for Selected Objects")
layout.operator("graph.disable_modifiers", text="Disable Modifiers for Selected Objects")
# モディファイアをオンにするオペレータークラス
class GRAPH_OT_EnableModifiers(bpy.types.Operator):
bl_idname = "graph.enable_modifiers"
bl_label = "Enable Modifiers"
def execute(self, context):
enable_modifiers(self, context)
return {'FINISHED'}
# モディファイアをオフにするオペレータークラス
class GRAPH_OT_DisableModifiers(bpy.types.Operator):
bl_idname = "graph.disable_modifiers"
bl_label = "Disable Modifiers"
def execute(self, context):
disable_modifiers(self, context)
return {'FINISHED'}
# メニューにオペレーターを登録する
def register():
bpy.utils.register_class(GRAPH_OT_EnableModifiers)
bpy.utils.register_class(GRAPH_OT_DisableModifiers)
bpy.types.GRAPH_MT_channel.append(menu_func)
# メニューからオペレーターを削除する
def unregister():
bpy.types.GRAPH_MT_channel.remove(menu_func)
bpy.utils.unregister_class(GRAPH_OT_EnableModifiers)
bpy.utils.unregister_class(GRAPH_OT_DisableModifiers)
if __name__ == "__main__":
register()
この記事が気に入ったらサポートをしてみませんか?