忘却まとめ

Blenderの中級者・上級者向けの踏み込んだ情報や、アドオン・3DCGに関する情報を記事にします

【Python入門 02】 変数・if・forなどプログラミングの基本について【Blender】

Python

更新日:

プログラミングの基本的な要素について紹介する。
すべて覚えなくても最低変数とif文が分かれば、既存のコードが多少は読めるようになる。人のコードが読めればそこから学ぶことができる。

前回

変数

変数 = 対象

青だぬき = "某ロボット"

長い文を省略したい場合などに、代わりの呼び名を付けること。
左が変数で、右が変数にする対象なことに注意。
大体コードのはじめに書かれている。
一文字目に数値(0~9)は使用できない 。

サンプルコード

contextのような、随時変化する要素を一旦保存しておくこともできる。

キューブを作成すると、選択が移ってしまうので、作成前に現在のアクティブオブジェクトを保存しておき、 保存しておいた変数を使って再度アクティブ選択を復元することができる。

# 文字列を設定したい場合は、""で囲う
hoge = "hugahuga"

# 現在のアクティブオブジェクトを、old_actとして保存しておく
old_act = bpy.context.view_layer.objects.active

# キューブを作成すると選択が移る
bpy.ops.mesh.primitive_cube_add()

# 選択を復元する
old_act.select_set(True)

# アクティブ選択を復元する
# = を使っていて、変数と同じ書き方のように見えるが、これは「アクティブオブジェクトをold_actにします」と書いている
bpy.context.view_layer.objects.active = old_act

print - 確認する

print(対象)

対象の中身を確認できる。
あくまでユーザーが確認するときに使うものなので、コーディングに必須ではない。

サンプルコード

変数の中身がなんだったか確認したいときに使える。

# 現在選択中のものを"hoge"にすえる
hoge = bpy.context.selected_objects

# printでhogeの中身を確認する
print(hoge)

IF 文 - 条件分岐

if 〇〇 == ××:
処理

もし、〇〇が××ならば処理を実行する。
"=" ではなく "==" なことに注意。

例えば、オブジェクトタイプが特定のタイプでない場合に実行するとエラーが出るような動作を、ifで回避しながら実行することができる。

# 選択オブジェクトのタイプが、メッシュの場合は、
if bpy.context.object.type == "MESH":
    # ベベルとサブディビジョンを設定する
    bpy.ops.object.modifier_add(type="BEVEL")
    bpy.context.object.modifiers["Bevel"].segments = 3
    bpy.ops.object.subdivision_set(level=2)

elif

elif 〇〇 == ××:
 処理

前にあるif文に当てはまらない場合は、elifの内容を試す。
elifより前にif文がある必要がある。

else

else:

if文のどれにも当てはまらない場合は実行する。

サンプルコード

# 選択オブジェクトのタイプがライトの場合は、ライトカラーを赤くする
# メッシュの場合は、配列複製を設定する
# それ以外は、削除する

    
if bpy.context.object.type == "MESH":
    bpy.ops.object.modifier_add(type='ARRAY')
elif bpy.context.object.type == "LIGHT":
    bpy.context.object.data.color = (1, 0, 0)
else:
    bpy.ops.object.delete()

比較演算子 - いろいろな条件指定

条件分岐の == の部分には、他にも様々なものが存在する。
すべてを覚えなくても、== と not があれば大抵はやっていける

記号描き方意味
andx and yxとy全てに当てはまる場合
orx or yxとyどちらか1つでも当てはまる場合
==x == yxとyが等しい場合
yがもしTrueの場合は書かなくてもいい
!=
not
x != y
if not x == y:
xとyは等しくない場合
>x > yxはyより大きい場合
>=x >= yxはy以上の場合
<x < yyはxより大きい場合
<=x <= yyはx以上の場合

小ネタ

if hoge == True: は、Trueの場合は省略して書くことができるので、
if hoge: のように書くことができる。

True は 1 、False は 0 と書くことができる。

for 文 - 繰り返し

for 変数 in 対象:
変数.操作内容など

複数に対して一括操作できるもの。
[対象]に一括して同じ処理を行いたい時に使う。
[対象]に対して1つ1つ処理していく。
[対象]の個数分処理が行われる。
[変数]の文字列はなんでもいい。

サンプルコード

#  現在の選択物をすべて選択解除する
for o in bpy.context.selected_objects:
    o.select_set(False)


# 説明
# 現在の選択オブジェクト
bpy.context.selected_objects

# 選択オブジェクトを変数にしたもの。文字は何でもいい。今回は Object の o にした
o

# 選択オブジェクトの選択を解除する
o.select_set(False)

-Python
-, , ,

Copyright© 忘却まとめ , 2019 All Rights Reserved Powered by STINGER.