前提・実現したいこと
blenderでpythonによるスクリプティングでオブジェクトを扱っています。
for文で規則的にオブジェクトを複数生成し、それらを自動で1つのオブジェクトとして結合したいのですが、うまくいきません。
下にソースコードを貼ります。
発生している問題・エラーメッセージ
該当のソースコード
import bpy
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(True)
bpy.ops.mesh.primitive_cube_add(location=(1,0,0))
bpy.context.object.name="preSelectedObject"
bpy.ops.mesh.primitive_cube_add(location=(3,0,0))
bpy.context.object.name="preSelectedObject"
bpy.ops.mesh.primitive_cube_add(location=(5,0,0))
bpy.context.object.name="preSelectedObject"
bpy.data.objects[preSelectedObject].select=True
bpy.ops.object.join()
試したこと
bpy.ops.mesh.primitive_cube_add()を実行すると、以前の選択が解除されて、新たに作成した物体のみを選択及びアクティブにするようです。
なので、選択を解除されない方法があればそれで解決します。(1)
私はその方法を知らないので、生成したオブジェクトに名前をつけて(現在アクティブのオブジェクト情報が入っているbpy.context.object)、後からその名前によってオブジェクトを選択(bpy.data.objects["名前"].select=True)して、選択されているオブジェクトを統合(bpy.ops.object.join())しました。
結果は、1個めと3個めのオブジェクトが統合され、2個目のオブジェクトは統合されませんでした。
blenderの名前の仕様によると、同じ名前をつけることはできず、同じ名前を指定した場合は次のようになるようです。(name,name.001,name.002,...)
この事から、名前による選択は1個めのオブジェクトのみとなり、アクティブの3個めのオブジェクトと1個めのオブジェクトだけがつながったのだと思います。
名前によってオブジェクトを選択する(bpy.data.objects["名前"].select=True)の、名前部分を一部一致のような条件で指定する方法があれば、それで解決します。(2)
また、他の方法があれば教えて欲しいです。(3)
補足情報(FW/ツールのバージョンなど)
blender 2.79b
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。