4

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()
4

1 に答える 1

4

bpy.data.images['your_image'].reload() 実際にはディスクから画像をリロードしますが、ブレンダーが画面上のピクセルを更新するには、ビューポート (画像エディターと 3d ビューの両方) で更新を行う必要があります。

更新を引き起こす 1 つの方法は、エリアをループすることです。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()
于 2012-10-05T18:15:09.667 に答える