不使用Python API更新Blender UV纹理图像

时间:2012-04-30 03:54:50

标签: python image blender

我正在使用Ubuntu 12.04上的Python脚本在Blender 2.63中更新UV纹理图像。我可以设置Image对象的filepath属性,但不刷新图像。我试过调用Image对象的update()和reload()成员但没有成功。单击GUI中的重新加载按钮可按预期刷新图像。将鼠标悬停在GUI中的重新加载按钮上会显示它使用bpy.ops.image.reload()。但是当我调用它时,它返回CANCELED状态,我假设因为有一些方法可以在bpy.context模块中选择图像对象,我一直无法弄清楚如何完成。也许这是一个错误?

以下相关代码:

# Update the filepath of a UV texture image
obj = bpy.context.scene.objects.active
image = obj.data.materials[0].texture_slots[0].texture.image
image.filepath = '//myfile.png'

# None of these work to refresh the image
image.update ()
image.reload ()
bpy.ops.image.reload()

1 个答案:

答案 0 :(得分:2)

bpy.data.images['your_image'].reload() 确实从磁盘重新加载图像,但是为了让blender更新屏幕上的像素,您需要在视口中进行更新(图像编辑器和3d视图等)。

导致更新的一种方法是遍历区域,如果area.type是'IMAGE_EDITOR'或'VIEW_3D'(或其他一些必需类型),则执行.tag_redraw()

如下所示:

for area in bpy.context.screen.areas:
    if area.type in ['IMAGE_EDITOR', 'VIEW_3D']:
        area.tag_redraw()