Como posso alterar algumas opções do editor de imagem usando python?

Nov 07 2020

Digamos que minha IU tenha a seguinte aparência:

O que eu quero fazer é mudar algumas opções do Editor de imagens bpy.context.window_manager.windows[0].screen.areas[1] através do meu addon. Por exemplo, para alterar a imagem do Editor de imagens, faço algo assim:

texture_name = "face.png"

area = bpy.context.window_manager.windows[0].screen.areas[1]
area.spaces.active.image = bpy.data.images[texture_name]

Caso eu queira alterar, digamos o cabeçalho do Editor de Imagens. Se vai aparecer ou não. Ou a taxa de zoom da imagem. Como vou fazer isso?

Achei isso bpy.context.space_data.show_region_header = Falsee isso bpy.ops.image.view_zoom_ratio(ratio=1.0)usando o botão direito, mas não sei como usar. Porque, por exemplo, se eu usar bpy.context.space_data.show_region_header = Falsedo meu addon, ele não ocultará o cabeçalho do Image Editor, mas o cabeçalho da viewport 3D.

Eu também tento iterar por áreas e fazer bpy.context.space_data.show_region_header = Falsee a bpy.ops.image.view_zoom_ratio(ratio=1.0)partir daí. Mas não consigo encontrar a sintaxe. Porque, por exemplo, bpy.ops.image.view_zoom_ratio(ratio=1.0)deve ser algo parecido area.spaces.view_zoom_ratio(ratio=1.0). O que não funciona e me dá esse erroAttributeError: 'bpy_prop_collection' object has no attribute 'view_zoom_ratio'

Então, alguma ideia de como posso fazer isso?

Respostas

2 tetii Nov 08 2020 at 06:47

Encontre visualizações do Editor de imagens em screen.areas com filtragem e chame o operador view_zoom_ratio com Overriding Context .

import bpy

override = bpy.context.copy()

for area in bpy.context.screen.areas:

    #if area.type != 'IMAGE_EDITOR' or area.ui_type != 'VIEW': # Image Editor View only
    #if area.type != 'IMAGE_EDITOR' or area.ui_type != 'UV': # UV Editor View only
    if area.type != 'IMAGE_EDITOR':
        continue

    area.spaces.active.show_region_header = False

    override['area'] = area
    bpy.ops.image.view_zoom_ratio(override, ratio=1.0)

    area.tag_redraw()