1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

メッシュの名前を「MESH_オブジェクト名*たち*」にする (Python for Blender クックブック)

Posted at

メッシュの名前を「MESH_オブジェクト名たち」にする

Pythonを使ってBlenderでできる事をまとめています。解説もあります。
はじめに
レシピ一覧

Pythonの難易度: ★★★☆☆

動機

オブジェクトの名前を変更しても、メッシュの名前までは変わりません。
いちいち変えるのも面倒くさいので、Pythonにやってもらいましょう。

細かい仕様

  • メッシュ名を「MESH_オブジェクト名」にしてください。
  • 複数のオブジェクトに共有されている場合、オブジェクト名の間を_で繋いでください
  • オブジェクトに使われていないメッシュは「MESH_NOUSER」と名付けてください。

サンプルコード

import bpy

meshes = bpy.data.meshes

mesh_obj_dict = {mesh.name:[] for mesh in meshes} # mesh_obj_dictを初期化

for obj in bpy.data.objects: # mesh_obj_dictのvalueを埋める
    if obj.type == "MESH":
        mesh = obj.data
        mesh_obj_dict[mesh.name].append(obj.name)

for mesh, objs in mesh_obj_dict.items(): # meshの名前を変更する
    if len(objs) == 0:
        meshes[mesh].name = "MESH_NOUSER"
        continue
    meshes[mesh].name = "MESH_{0}".format("_".join(objs))

上記サンプルコードを、Blender内蔵のテキストエディタに貼り付けた後、Alt-Pを実行してください。

解説

全体の流れ

まず、{メッシュ:そのメッシュを使っているオブジェクトのlist}(コード中ではmesh_obj_dict)を初期化し、最初のfor文で完成させます。

その次のfor文ではmesh_obj_dictを元にmeshの名前を上書きしています。

mesh_obj_dict

オブジェクトからそれ使用しているメッシュを知るにはobject.dataを除けばいいだけです。
一方、メッシュからそれ使用しているオブジェクトをたどる事は(一発では)出来ません。どうしてかは知りません。
そのため、bpy.data.objects内を探して、各オブジェクトが参照するメッシュごとに分類しています。

また、オブジェクトやmaterialなどデータの名前を一度変えてしまうと、そのデータを探すのが非常に難しくなります。
そのため、最初のfor文では名前の変更はしません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?