変数

変数とは何か

Python スクリプトにおいて計算結果の数値や文字列などを覚えさせておいて、 後で使いたいときには変数というものを使います。
例えば、ある同じ数値をスクリプト中の複数の箇所で使いたい場合には、変数に数値を覚えさせておいて、数値の代わりに使うと便利です。
変数には代入という操作で数値や文字列を入れておくことができます。
また、変数には名前がついていて、 規則にしたがう限り好きな名前で、いくつでも変数を定義することができます。
MEL の変数と比べて違うところは色々ありますが、 仕組みとして大きく違うのは Python の変数はリファレンスになっていうというところです。 MEL の変数には数値や文字列がそのまま入っていますが、 Python の変数はオブジェクトを指しているリファレンス(場所を指す番地のようなもの)が入っています。 (C 言語のポインターのようなものです)

Python の変数を使うときには以下の事項を注意してください。

以下に、C 言語の知識がある人のために、C 言語と比べたときの文法上の違いをあげておきます。

変数の例

半径を 1 づつ小さくしながら、 3 個の球を接しながら並べる Python スクリプトを、関数と変数を使って作ってみましょう。
関数の引数(r)に 1 個目の球の半径を与えて実行すると、 2 番目以降の球は半径が 1 づつ小さくなって作られてゆくようにします。

  1. make3Sphere1.py というファイル名の Python スクリプトを、 以下の内容でエディタによって作成します。
    import maya.cmds
    
    def make3Sphere1(r):
        maya.cmds.sphere()
        maya.cmds.scale(r, r, r)
    
        maya.cmds.sphere()
        r -= 1
        maya.cmds.scale(r, r, r)
        m = 2 * r + 1
        maya.cmds.move(m, 0, 0)
    
        maya.cmds.sphere()
        r -= 1
        maya.cmds.scale(r, r, r)
        m += 2 * r + 1
        maya.cmds.move(m, 0, 0)
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって make3Sphere1.py を読み込み、テンキーの Enter キーなどで実行します。
  3. スクリプト エディタ のインプットウインドウに make3Sphere1(3) と打ち込んで実行します。
  4. 下図のような半径 3、2、1 の 3 個の球が作られます。
    [make3Sphere1(3)の実行結果]
  5. さらに make3Sphere1(4)make3Sphere1(5) などを実行してどのような結果になるか試してみましょう。
    (注意)
    実行前に、 シーンの中のオブジェクトを消去または移動してから実行しないと、 オブジェクトが重なって見にくいかもしれません。

スクリプトの解説

import maya.cmds
maya.cmds モジュールをインポートします。
def make3Sphere1(r):
引数(r)を 1 個とる関数の宣言です。
r は最初の球の半径になります。
関数に引数をつけることによって、 関数の中の数値をいちいち書き換えなくても、 球の半径を変更して実行することができるようになります。
この関数では r の値が 3 未満だと、 マイナスの半径の球ができてしまうことに注意して下さい。
maya.cmds.sphere()
1 個目の球を作ります。
maya.cmds.scale(r, r, r)
1 個目の球の半径は r なので球を r だけスケールします。
maya.cmds.sphere()
2 個目の球を作ります。
r -= 1
2 個目の球の半径は 1 個目より 1 小さいので r から 1 を引いておきます。
maya.cmds.scale(r, r, r)
2 個目の球を r だけスケールします。
1 個目の球よりも1だけ小さい半径になります。
m = 2 * r + 1
2 個目の球を移動する距離を求める計算式です。
r は 2 行前の計算(r -= 1;)によって 1 個目の球の時より 1 だけ小さくなっているので、 ここの時点で 1 個目の球の半径は r + 1 になります。
それと 2 個目の球の半径(r)を加えれば 2 つの球の間の距離になります。
m = (r + 1) + r
この式をまとめて以下のようになります。
m = 2 * r + 1
[隣り合う2つの球]
maya.cmds.move(m, 0, 0)
2 個目の球を X 軸方向に m だけ移動します。
maya.cmds.sphere()
3 個目の球を作ります。
r -= 1
3 個目の球の半径は 2 個目より 1 小さいので r から 1 引きます。
maya.cmds.scale(r, r, r)
3 個目の球を r だけスケールします。
m += 2 * r + 1
3 個目の球を移動する距離を求める計算式です。
2 個目と 3 個目の球の距離の計算方法は 1 個目と 2 個目の場合と同じになります。
この時点で、m にはすでに 2 個目までの距離が入っているので、 それに 2 個目と 3 個目の距離を加えれば良いでしょう。
m = m + (r + 1) + r
右辺をまとめます。
m = m + 2 * r + 1
+= で式を簡単にします。
m += 2 * r + 1
[隣り合う3つの球]
maya.cmds.move(m, 0, 0)
3 個目の球を X 軸方向に m だけ移動します。

練習

まとめ

参考


Prev
Home | Contents
Mail