制御構造(if)

条件によるコマンドの実行

プログラムを作成する時に、ある条件にしたがってコマンドの実行をするかしないかを決めたり、 この条件の時にはこのコマンド、違う条件の場合には別のコマンドを実行したいと思った場合には、 条件によってコマンドの実行を制御します。 Python においては、ある条件が満たされる場合だけコマンドを実行するために if 文と呼ばれるものを使用します。

以下の条件式の部分には、前章「制御構造(ループ)」で説明したものをそのまま使用できます。

if の使用例

if 文の使用例として半径 rad が 5.0 以下の場合は円上に球を、 半径が 5.0 以上の場合はキューブを num 個並べる Python スクリプトを作ってみましょう。

  1. 以下の Python スクリプトを circleObjects1.py という名前で作ります。
    import pymel.core as pm
    
    def circleObjects1(rad, num):
        r = 0.0
        add = 360.0 / num
    
        for i in range(num):
            if rad <= 5.0:
                pm.sphere()
            else:
                pm.nurbsCube()
            pm.move([rad, 0, 0])
            pm.rotate([0, r, 0], ws=True, p=(0, 0, 0))
            r += add
    
  2. スクリプト エディタ の ファイル → ススクリプトのロード によって circleObjects1.py を読み込んで、テンキーの Enter キーなどによって実行します。
  3. スクリプト エディタ のインプットウインドウに circleObjects1(4, 6) と打ち込んで実行します。
  4. 半径1の球が半径 4 の円上に 6 個作られます。
    [circleObjects1(4, 6)の画像]
  5. スクリプト エディタ のインプットウインドウに circleObjects1(6, 7) と打ち込んで実行します。
  6. 一辺 1 のキューブが半径 6 の円上に 7 個作られます。
    [circleObjects1(6, 7)の画像]

スクリプトの解説

import pymel.core as pm
pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
def circleObjects1(rad, num):
引数として rad (円の半径)と num (プリミティブの個数)をとる関数の宣言です。
r = 0.0
球を回転させるための角度を入れておく変数です。
最初は回転させないので0.0を代入しておきます。
add = 360.0 / num
角度の増分を入れておくための変数です。
360 度(円の 1 周の角度)を球の個数(num)で除算しています。
for i in range(num):
numfor ループを実行します。
以下は for ループ内の処理になります。
if rad <= 5.0:
    pm.sphere()
else:
    pm.nurbsCube()
もし rad が 5.0 以下なら pm.sphere() を実行し、 それ以外(else)の場合、つまり rad が 5.0 以上なら pm.nurbsCube() を実行します。
pm.move([rad, 0, 0])
球を(rad, 0, 0)の位置に移動します。
pm.rotate([0, r, 0], ws=True, p=(0, 0, 0))
移動された球をワールドスペース内で(0, 0, 0)を中心として Y軸周りに r だけ回転させます
引数と各フラグの意味は以下の通りです。
0 r 0
X軸周りに 0 度、Y 軸周りに r 度、Z 軸周りに 0 度回転させます。
ws=True
ワールドスペースで回転させます。
ローカル座標で回転させても意味の無いことに注意してください。
p=(0, 0, 0)
回転の中心を(0, 0, 0)にします。
r += add
次の回転角度を求めます。

練習

  1. 上の circleObjects1.py を参考にして、circleObjects2.py を作り半径が 10.0 以上の時はコーン(cone)が作られるようにしてみましょう。 (それ以外は circleObjects1.py と同じ)
    circleObjects2(11, 8) の実行結果
    [circleObjects2(11, 8)の画像]
  2. circleObjects3.py という Python スクリプトを if を使って以下のように作ってみましょう。
    circleObjects3(作るプリミティブの種類, プリミティブを並べる円の半径, プリミティブの個数)
    プリミティブの種類は以下のように番号で指定してください。
    1
    球(sphere())
    2
    キューブ(nurbsCube())
    3
    シリンダー(cylinder())
    (使用例)
    以下のように順番に実行してゆくと、実行結果が図のようになってゆくはずです。
  3. circleObjects4 という名前の MEL スクリプト作り、 スクリプトエディタ から読みこんで実行すると、円上に球とコーンが交互に並ぶようにしてください。
    (プロシージャ名と引数)
    circleObjects4(円の半径, 個数)
    (個数/ 2 個の球とコーンが並ぶ。)
    例えば、スクリプトエディタ のインプットウインドウで circleObjects4(7.0, 6) を実行すると、 以下の図のように 半径 7.0 の円上に 3 個づつの球とコーンが交互に並ぶようにしてください。

まとめ

参考


Prev | Next
Home | Contents
Mail