[簡単]blenderでPythonを使って楽しよう中編

blender2.82使用


[簡単]blenderでPythonを使って楽しよう前編の最後で3行のコードを書きました。
ちょっと解説します。
なお知識不足ゆえ正式名称は使いません(使えません)のでご了承下さい。

import bpy
for i in bpy.data.objects:
    print("名前は",i.name,"オブジェクトタイプは",i.type)


import bpyはpythonでblenderのコマンドを使うのに必須
import bpy ですがbpyというのはblender Pythonの略かと思いますが、blenderで使うPythonのコマンドを読み込みます。これを書かないとただのPythonでしかありません。他のプログラム言語でもこの手の記述を「おまじない」と表現するサイトや教本が多々有りますがちゃんと意味を知っていて欲しいです。

数学関係のコマンドを読み込む import math などもあります。

for i in bpy.data.objects:ですがこれがfor文です。
そしてbpy.data.objectsというのはblenderの全オブジェクトを表しています。
試しにPythonコンソールでbpy.data.objects[0]とコピペして実行してみてください。
この場合bpy.data.objects[0]はcamera。オブジェクトは3つなので0~2まである
今回はbpy.data.objects['Camera']という結果になりました。このシーンではカメラとライトとCubeの3つですので、bpy.data.objects[0~2]の3種類ある事になります。for文の今回の変数であるiに1週目はbpy.data.objects['Camera']、2周目は・・・とiに格納されます。そして3回処理が繰り返される訳です。
周回毎に各オブジェクトの情報が格納されるのでi.nameとやるとそれはbpy.data.objects[0].nameなどと同じ意味になります。
周回毎にiに各オブジェクトのデータが入るので各オブジェクトを処理できる訳です。
for文のあとはインデントと言ってTABキーで間隔を開けるのがルールです。
複数行選択してTABキーを押すといっぺんにインデントを追加できます。
またShift+TABキーでインデントを削除できます。

for文の中にfor文を入れる事もできます。
ここでは使っていませんがif文も同じでインデントを使います。









print文はその名の通り()の内容をコンソールに表示します。
""または''で囲まれた場合は文字を表示します。コマンドを入力した場合はその結果を表示します。
変数を入力した場合はその中身を表示します。
続けて表示したい場合は,で区切ります。
for文によく使うのが選択したオブジェクトを処理するbpy.context.selected_objects

import bpy
for i in bpy.context.selected_objects:
    i.data.type = 'PANO'

今度は選択したオブジェクトのみ処理するbpy.context.selected_objectsを使います。
このコードは選択したオブジェクト全てにカメラのパノラマに設定するスクリプトですが、恐らく大抵の場合エラーが出るでしょう。というのもこれはカメラ特有のプロパティを設定するものだからです。カメラ以外のオブジェクトを選択していると、存在しないプロパティを設定する事になりエラーが出るのです。
ちなみにプログラムにおける=は左に代入するという意味です。


自分で分かって使う分には良いのですが、不便な場合もありますし、これを公にする場合は色々と問題があります。なのでif文を使ってエラーが出ないように改良します。


import bpy
for i in bpy.context.selected_objects:
    if i.type == "CAMERA":
         i.data.type = 'PANO'

前編の最後でやりましたがオブジェクトにはtypeがあります。そこでif文で各オブジェクトのオブジェクトタイプを"CAMERA"かどうか比較して”CAMERA”と一致した時だけカメラの設定を行うようにしたのです。==はイコールという意味です。これでカメラ以外のオブジェクトを選択してもエラーが出なくなりました。
if文でオブジェクトタイプをCAMERAに限定したのでエラーが出なくなった







よく使うfor i in bpy.data.objectsとfor i in bpy.context.selected_objects
この二つは全てのオブジェクトを処理するか選択したオブジェクトを処理するかの違いです。
多数のオブジェクトを処理できるのでよく使います。
あとはオブジェクトタイプをif文で判断すればエラーを回避できます。
あとは情報ウィンドウでやりたいコマンドを確認してこの場合ならi.の形に書き直せば良いわけです。
ビューポート表示の名前をオンにするコマンドを情報ウィンドウで調べてスクリプトを作る例
オン、オフの場合PythonではTrue、Falseで表します。

ちなみにfor文にiを使う決まりはありません。
が、なぜかiを使う事が多いように思います。
変数であればaでもbでも何でも良いです。
その際はa.やb.などにして下さい。

今回はここまでです。

[簡単]blenderでPythonを使って楽しよう後編