Blender 2.6 Python
選択したオブジェクトに一括でモディファイアを追加したい場合のスクリプト
今回の例では、サブデビジョンサーフェスモディファイアを追加する。
スクリプトを実行する前に、モディファイアを追加したい対象オブジェクトを選択する。
import bpy sentaku = bpy.context.selected_objects kazu = len(sentaku) for i in range(0,kazu): bpy.context.scene.objects.active = sentaku[i] bpy.ops.object.modifier_add(type="SUBSURF")
使い方や、解説は続きから。
●スクリプトの使い方。
↓
▼テキストエディターを表示する。
↓
▼テキストエディターのNEWボタンを押す。
↓
▼スクリプトを記述して、Run Scriptボタンを押す。
●スクリプトの解説
import bpy #↑スクリプトを使用するための文 sentaku = bpy.context.selected_objects #↑選択したオブジェクトを、変数sentakuに入れる。 kazu = len(sentaku) #↑変数sentakuの中の要素数(選択したオブジェクトの数)を数えて、変数kazuに入れる。 #↓for文を使用し、選択したオブジェクトの数だけ処理を繰り返す。 for i in range(0,kazu): bpy.context.scene.objects.active = sentaku[i] #↑変数sentakuのi番目をアクティブにする。 bpy.ops.object.modifier_add(type="SUBSURF") #↑アクティブなオブジェクトにサブデビジョンサーフェスモディファイアを追加する。
▼今回躓いた点。
【 スクリプトでは、選択する事とアクティブである事は同じではない。 】
この事に気づけなかったせいで詰まってしまった。
bpy.ops.object.modifier_add(type=”追加したいモディファイア”)
↑はアクティブなオブジェクトにモディファイアを追加する文であって、
選択したオブジェクトにモディファイアを追加する文ではない。
当初は、↓の名前によるオブジェクトの選択を行っていた。
bpy.ops.object.select_pattern(pattern=”オブジェクト名”)
↑では選択は出来ても、アクティブにはならない。
ビューポートで選択したものがアクティブであり続ける。
アクティブにするには、↓の文にする必要がある。
bpy.context.scene.objects.active = オブジェクト
▼スクリプトを使用しなくてもモディファイアのコピーは一括で出来る。
[Blender]別のオブジェクトに、モディファイアをコピーする。
▼Blenderでpythonを扱う際の参考情報
・コンソール・エディター・タイプ 内蔵された Python コンソールにアクセスする
・Blender 2.63.5 – API documentation
「今回躓いた点。」が、とても参考になりました。