3
$\begingroup$

I am trying to hide/unhide objects in a particular ViewLayer but it's hiding in the current view layer only.

import bpy


class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Hide/Unhide"

    def execute(self, context):
        view_layer = context.scene.view_layers.get("NewViewLayer")
        if not view_layer:
            view_layer = context.scene.view_layers.new("NewViewLayer")

        for obj in context.selected_objects:
            for collection in view_layer.layer_collection.collection.children_recursive:
                for layer_obj in collection.objects:
                    if layer_obj.name == obj.name:
                        layer_obj.hide_set(not layer_obj.hide_get())

        return {"FINISHED"}


def menu_func(self, context):
    self.layout.operator(SimpleOperator.bl_idname, text=SimpleOperator.bl_label)


# Register and add to the "object" menu (required to also use F3 search "Simple Object Operator" for quick access).
def register():
    bpy.utils.register_class(SimpleOperator)
    bpy.types.VIEW3D_MT_object_context_menu.append(menu_func)


def unregister():
    bpy.utils.unregister_class(SimpleOperator)
    bpy.types.VIEW3D_MT_object_context_menu.remove(menu_func)


if __name__ == "__main__":
    register()

    # test call
    bpy.ops.object.simple_operator()
$\endgroup$

1 Answer 1

3
$\begingroup$

You have to specify in which view layer you want to hide the object using obj.hide_set(not obj.hide_get(view_layer=view_layer), view_layer=view_layer). Change the execute function as follows:

def execute(self, context):
    view_layer = context.scene.view_layers.get("NewViewLayer")
    if not view_layer:
        view_layer = context.scene.view_layers.new("NewViewLayer")

    for obj in context.selected_objects:
        obj.hide_set(not obj.hide_get(view_layer=view_layer), view_layer=view_layer)

    return {"FINISHED"}

Links to hide_get and hide_set docs.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .