オブジェクトの名前にメッシュ名を合わせる
Pythonを使ってBlenderでできる事をまとめています。解説もあります。
Pythonの難易度: ★★☆☆☆
動機
オブジェクトの名前を変更しても、メッシュの名前までは変わりません。
いちいち変えるのも面倒くさいので、Pythonにやってもらいましょう。
細かい仕様
- 様々な種類のオブジェクト(メッシュ、ランプ、カメラなど)があるファイルを使ってください。
- 一つのメッシュデータが複数のメッシュオブジェクトに共有されている状態は考慮しなくてもいいです。
- メッシュオブジェクトの中のメッシュデータの名前を、メッシュオブジェクトと同じにしてください。
サンプルコード
import bpy
for obj in bpy.data.objects:
if obj.type == "MESH":
obj.data.name = obj.name
上記サンプルコードを、Blender内蔵のテキストエディタに貼り付けた後、Alt-Pを実行してください。
解説
bpy.data.objects
PythonからBlenderを使うにはbpy
というライブラリを使います。
例えば、bpy.ops
には編集のための関数が格納されています。
bpy.data
にはBlender内の様々な変数(オブジェクトのインスタンス)が格納されています。
オブジェクト一覧はbpy.data.objects
から、マテリアル一覧はbpy.data.materials
からアクセスできます。
この一覧の型はbpy.types.bpy_collections
であり、この型は辞書とリストを合わせたようなものです。1
実際、list(bpy.data.objects)
やdict(bpy.data.objects)
のように型を変換してprint
すると、見やすい形で出力されます。
今回はfor文で1つずつアクセスしています。
obj.typeについて
オブジェクトには、カメラやメッシュオブジェクトなど様々な種類があり、obj.type
にその種類が格納されています。例えば、スタートアップファイルで
for obj in bpy.data.objects:
print(obj.type)
を実行すると、
CAMERA
MESH
LAMP
を出力します。
今回は、メッシュオブジェクトのメッシュを変更したいので、obj.type == "MESH"
を条件にします。
obj.data
obj.data
は上記のobj.type
に応じて、様々なものが入っています。
obj.type == "MESH"
ならobj.data
にはメッシュの実体が入っています。
このメッシュの型はbpy.types.Mesh
ですので、サンプルコードは
import bpy
for obj in bpy.data.objects:
if obj.type.data == bpy.types.Mesh:
obj.data.name = obj.name
と書き換えることも出来ます。
.name
オブジェクトなどの名前を手に入れたり、変更したり出来ます。
これを変更するとアクセスが不便になるので、辞書型で変更を保存しておくと良いかもしれません。
-
bpy.data.objectsの型が
bpy_collections
と説明しましたし、typeやisinstanceを使ってもその通りですが、実際にはbpy.types.BlendDataObjects
です。この辺りはどうやってるんだろう…… ↩