MRが楽しい

MRやVRについて学習したことを書き残す

Blender 2.8のPython APIドキュメントを少しずつ読み解く 落とし穴 その10

本日は Blender2.8 の調査枠です。
Blender 2.8 の Python API ドキュメントを少しずつ読みつつ試していきます。
前回記事の続きです。
bluebirdofoz.hatenablog.com

Blender 2.8 Python API Documentation

以下のページを日本語訳しつつ実際に試して記事を進めていきます。
docs.blender.org
docs.blender.org

今日は「落とし穴」の「元に戻す/やり直し」です。
f:id:bluebirdofoz:20200120083337j:plain

元に戻す/やり直し

「元に戻す」(Undo)は全ての bpy.types.ID インスタンス(オブジェクト、シーン、メッシュ、ランプなど)を無効にします。

以下の例は元に戻す(Undo)操作でメモリの場所を変更する方法を示しています。

>>> hash(bpy.context.object)
-9223372036849950810
>>> hash(bpy.context.object)
-9223372036849950810

f:id:bluebirdofoz:20200120083349j:plain

アクティブなオブジェクトを移動してから元に戻した場合。

>>> hash(bpy.context.object)
-9223372036849951740

f:id:bluebirdofoz:20200120083400j:plain

Blenderのクラッシュ」で提案した通り。
ユーザーが Blenderインタラクティブに使用するときには、データへの参照を保持しないようにします。
それがスクリプトが不安定にならないようにする唯一の方法です。

元に戻す&ライブラリデータ

Blenderライブラリリンクシステムの利点の1つは、静的であると想定されていることです。
この特徴により、ライブラリデータの変更のチェックをスキップできます。

Blender のツールはライブラリデータを変更できません。
ただし、Python はこの制限を強制しません。

これは例えばスクリプトを使用してマテリアルの値を調整するなど、場合によっては便利です。
ただしスクリプトを使用して、ライブラリデータが新しく作成されたローカルデータを指すようにすることもできます。
これは元に戻す(Undo)呼び出しによってライブラリを参照してクラッシュする可能性があるため、サポートされていません。

従って、ライブラリデータの変更は API の高度な使用法と見なし、理解している場合にのみ使用を検討するのが最善です。

bluebirdofoz.hatenablog.com