Hey #b3d peeps!!
対応バージョン
実行形式
Note
2.70
Pythonインタラクティブコンソール
Blenderのデータアクセスの基本的なところ。
先に BlenderPythonAPIドキュメント(2.70)の、info_quickstart.html 読んでおいてください。
まずは適当なところに Monkey を追加してみましょう。
そしておもむろに Info と3DViewの境界にマウスカーソルを合わせ(カーソルが上下矢印になる)、左ドラッグで下に広げます。すると、何か記録されているはず。
bpy.ops.mesh.primitive_monkey_add(radius=1, view_align=False, enter_editmode=False, location=(3.30879, 0.173345, -0.107187), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
"bpy.ops.mesh.primitive_monkey_add"は「Add Monkey」を行っているのと同じことなんですね。
まずはBlender上で登録されているオブジェクトにどんなものがあるか見てみましょう。インタラクティブコンソールでは D=bpy.data と定義されているので D.objects.keys() とも書けます。 .keys() は登録されたキー(この場合オブジェクト名)を返します。
>>> bpy.data.objects.keys()
['Camera', 'Cube', 'Lamp', 'Suzanne']
bpy.data.objects はオブジェクト名をキーにして、オブジェクトにアクセス出来ます。
>>> monkey = D.objects['Suzanne']
>>> monkey
bpy.data.objects['Suzanne']
monkeyのサイズを2倍にしてみましょう。
>>> monkey.scale=(2,2,2)
では、オブジェクトが持っているメッシュデータを入れ替えてみましょう。
>>> monkey.data
bpy.data.meshes['Suzanne']
>>> monkey.data = D.meshes['Cube']
>>> monkey.data
bpy.data.meshes['Cube']
この辺で大体お気づきになると思いますが、 Outliner を見るとそれっぽくなっているということ。
と、とりあえず戻しときましょうかw
>>> monkey.data = D.meshes['Suzanne']
>>> monkey.data
bpy.data.meshes['Suzanne']
現在の画面の状況をもとにしたアクセス方法です。「アクティブなもの」とか「選択されたもの」などはよく使います。
では、画面からCube のみ選択した状態にします。
その状態で、インタラクティブコンソールから、アクティブオブジェクトおよび選択されたオブジェクトを得ることにしましょう。
インタラクティブコンソールでは C=bpy.context と定義されています。
>>> C.active_object
bpy.data.objects['Cube']
>>> C.selected_objects
[bpy.data.objects['Cube']]
さらに、3Dビュー上でSuzanneを[Shift]+[右クリック]で追加選択し、同じようにすると…
>>> C.active_object
bpy.data.objects['Suzanne']
>>> C.selected_objects
[bpy.data.objects['Suzanne'], bpy.data.objects['Cube']]
では、選択されたオブジェクトのサイズを 1/2 にしてみましょう。
>>> for x in C.selected_objects:
... (sx,sy,sz)= x.scale
... sx = sx * .5
... sy = sy * .5
... sz = sz * .5
... x.scale = (sx,sy,sz)
...
>>>