Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@KTakahiro1729

オブジェクトの名前にメッシュ名を合わせる (Python for Blender クックブック)

More than 1 year has passed since last update.

オブジェクトの名前にメッシュ名を合わせる

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

オブジェクトなどの名前を手に入れたり、変更したり出来ます。
これを変更するとアクセスが不便になるので、辞書型で変更を保存しておくと良いかもしれません。


  1. bpy.data.objectsの型がbpy_collectionsと説明しましたし、typeやisinstanceを使ってもその通りですが、実際にはbpy.types.BlendDataObjectsです。この辺りはどうやってるんだろう…… 

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KTakahiro1729
素人ゆえ自由

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?