見出し画像

[Blender][スクリプト]シーン内の全グリースペンシルレイヤーのロックをオフにする

タイトルの内容をドープシートの「チャンネル」メニューに組み込むスクリプト。
選択したりとかフィルターしたりの手間を省く為。

import bpy

# シーン内のすべてのグリースペンシルオブジェクトのレイヤーのロックをオフにする関数
def unlock_all_gpencil_layers(self, context):
    all_objects = bpy.context.scene.objects
    gpencil_objects = [obj for obj in all_objects if obj.type == 'GPENCIL']
    
    for gpencil in gpencil_objects:
        for layer in gpencil.data.layers:
            layer.lock = False
            
    self.report({'INFO'}, "All Grease Pencil layers unlocked")

# メニューにオプションを追加する関数
def draw_unlock_gpencil_layers_menu(self, context):
    layout = self.layout
    layout.operator("object.unlock_all_gpencil_layers", text="Unlock All Grease Pencil Layers")

# オペレータークラス
class OBJECT_OT_unlock_all_gpencil_layers(bpy.types.Operator):
    bl_idname = "object.unlock_all_gpencil_layers"
    bl_label = "Unlock All Grease Pencil Layers"
    bl_options = {'REGISTER', 'UNDO'}

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

# 登録関数
def register():
    bpy.utils.register_class(OBJECT_OT_unlock_all_gpencil_layers)
    bpy.types.DOPESHEET_MT_channel.append(draw_unlock_gpencil_layers_menu)

# 登録解除関数
def unregister():
    bpy.utils.unregister_class(OBJECT_OT_unlock_all_gpencil_layers)
    bpy.types.DOPESHEET_MT_channel.remove(draw_unlock_gpencil_layers_menu)

if __name__ == "__main__":
    register()

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