C4D.Python: はじめてのプログラムの解読
80歳でプログラムを始めた方がいらしゃったのをみて、人のスクリプトを見て雰囲気で改造くらいはしたり、Python StartBookくらいしか読んだことなかったので、もうちょっとPythonに本腰を入れようと思いちょっとCinema 4DのPythonをはじめてみました。まずは、CineversityのPythonチュートリアルを途中まで視聴しつつ、スクリプトの解読を始めます。ただ、忘れっぽいので覚書として個人的なメモになりますので、思い込みや間違いが多々あります。そのときは指摘いただけるとありがたいです。
で、Cinema 4DのPythonといってもいろいろあります。
- スクリプトメニューのスクリプトマネージャで作成するもの
- オブジェクトのPythonジェネレータ、タグのPythonタグ
- MoGraphのPythonエフェクタ
- XpressoのPythonノード
- プラグイン作成のためのPython
- 制御タグ内のスクリプト
- Sketch and Toonシェーダのスクリプト
今回は、スクリプトマネージャで始めます。
スクリプトマネージャ
スクリプトマネージャで、新規のPythonスクリプトを作成すると上記のような状態になります。これを頑張って理解してみます。
Python StartBookを読んで
import c4d
でCinema 4Dのpython用のメインモジュールを読み込んでいるは分かります。
from c4d import gui #Welcome to the world of Python
こちらはc4dのモジュール内のguiのモジュールを読み込んでいるらしい。#はコメント行。
def main(): gui.MessageDialog('Hello World!')
最初はこの「def」の意味が分からなかったが、これは関数を定義するものだそうだ。普通のプラグラムだと組み込み済みの関数を使って何かするところから学ぶので、書籍で独学しているとしばらく出てこない(Python startbookだと200ページでやっと出てきた)。というわけで、これは「main()」という関数を作るということらしい。括弧は引数が入るらしい。
引数というのは、その関数が機能するときに必要とする値だったり、オプションだったりします。Excelを触っている人はSUM(B2:B20)のB2:B20を受け取る部分ですよということらしい。
この関数として処理される内容はタブで字下げして記述された部分になる。Pythonはこの字下げ重要らしく、この1段字下げされたところがmain関数扱いになります。なので、「def」と行頭が同じ「if」からはmain関数の定義ではなくなります。
「gui.MessageDialog(‘Hello World!’)」は、c4d.guiモジュールにある「MessageDialog()」という命令を呼び出しています。この命令は()内にある内容をダイアログメッセージとして表示する
というもの。文字列はダブルクオートかシングルクオートで囲む必要があるで「Hello World!」がダイアログに表示される。
ただし、この「gui.MessageDialog()」は、2行目の
from c4d import gui
でguiモジュールをあらかじめ読み込んでいるので、実行できていますがこの行がなかった場合、エラーになります。もしfromの行がない場合は、
def main(): c4d.gui.MessageDialog('Hello World!')
とc4d.を前に追加して記述する必要があります。importしておくとプログラムを簡素に書けるようになるようです。
if __name__=='__main__': main()
if文が始まり、いきなり不明な変数「__name__」が出てきて戸惑いましたが、ネットなどで調べたところ、この部分についてはスクリプトとして直接呼び出した時のみ実行して、別のモジュールから呼び出された時には実行しない、という記述らしいです。というのも、直接スクリプトを実行すると(今回の場合、スクリプトマネージャの実行ボタンを押した時に) 変数「__name__」に、「__main__」という値が入るらしい。
Pythonのif文はTureの場合は、字下げされた関数が実行するみたいです。
なので、このスクリプトは、実行ボタンを押すと次のような手順で動いているはず。
- 変数「__name__」に、「__main__」という値を入れる(これは自動行われている)
- ダイアログを開いて「Hello World!」と表示するという関数を定義してmainという名前にする
- この時点でmainという独自関数が定義された
- 変数「__name__」が「__main__」かどうかをif文でチェック
- その結果がtrueのなので、main関数を実行する
- main関数によってダイアログが開き「Hello World!」と表示される
C4D.Python: Pythonオブジェクトで軸位置を底面の立方体を作る1 | Creative Market
on2017年11月19日 at 1:00 PM says: