SyntaxHigh

Thursday, March 6, 2014

Blender Python: Group の操作

オブジェクトのリストを保存する

ある一定のグループのオブジェクトに一つ一つアクセスしたい場合、二つ方法があるようです。
  1. あらかじめ、たとえば "Hoge***" という名前を付けておいて、bpy.ops.object.select_pattern("Hoge*") を使う。ただし、これはすべて選択されてしまう。
  2. グループに入れて直接アクセス
たとえば "Pixels" というグループを作ったとして、そこには次のようにアクセスします。

>>> bpy.data.groups["Pixels"]
bpy.data.groups['Pixels']

中身のオブジェクトは、objects にあります。例えば名前を表示したい場合は、

>>> for ob in bpy.data.groups["Pixels"].objects:
...     print(ob.name)

obが本体なので、動かすなりなんなり好きにできます。

独自プロパティを好きなBlender Objectに追加する。

この辺りに、「Blender Objectに好きなプロパティを埋め込める」と書いてあります。
http://wiki.blender.org/index.php/Dev:Source/Data_System/ID_Property

しかし、任意のオブジェクトを持てるようにはなっていません。たとえば list(1,2,3,4)というのを設定するとBlender のプロパティに変換されます。

Modal Operator でBlender実行中に任意のオブジェクトを保持する。

Blenderで任意のオブジェクトを持つには, Modal Operator を定義し、そのメンバ変数として持つのが正しいようです。Modal operatorは画面をロックしないので、インスタンスが生成されるとその中のオブジェクトはBlenderが動いている間保持され続けます。

http://wiki.blender.org/index.php/Dev:JA/2.5/Py/API/Overview

かつ、Modal Operator は Timer の機能を持っており、一定時間ごとに実行するコードはこちらで指定することが出来ます。