Cinema 4D R12の新機能Python。R11.5からR13にバージョンアップしたので試してみました。
サッシュを作るXpressoを作ったことがあるのですが、さらにサッシュの数をXpressoでコントロールしたいと思ってチャレンジしました。
(実際にはサッシュのインスタンスのEnableオンオフ)
(余談)ある仕事で、いろんなバリエーションのサッシュを作らなければいけなかったときに作ったXpressoをベースにしました。以前一緒に仕事をしてた人のXpressoはあるにはあったのですが、他人の作ったものはわからないので、ほぼゼロから作り直しました。中身が整理されたら公開するかもしれません
Xpressoの中のPython
サッシュの数によってPythonのモジュール内で条件分岐し、Output1から3で、すでに用意した三つのインスタンスそれぞれののenableをon/offしています。
条件分岐の簡単なスクリプトを書こうとしただけなのに、数時間ハマってしまいました。そもそも、AppleScriptとかPHPをちょこっと改造する程度の知識しかないので、「こんなことでハマるなよ」ということがあるかもしれません。
が、スクリプト初心者、未経験者のために、あえて恥を晒しておきましょう。汗
ハマったところ:
・if分の最後に”:”(コロン)をつける。※セミコロンではない。
・Expressoの出力側のポートはglobal宣言する必要がある。※この場合のglobalって何?
・global宣言した変数は print()を使えないっぽい。※プログラムの常識なんでしょうか?
・if文の中身は、Tabでインデントする必要がある。※インデントしないと構文エラー。一行で書けないのね、、。
(・bool値は0と1らしい。 ※AppleScriptなどではtrue/falseだったので、trueって書いてエラーに。)
↑以前買ったpythonの本を見るとtrue/falseになっているようです。うーん。どうなってるのかなあ。実はこのpythonの参考書、アマゾンで評判を頼りに買ったんですが説明ばかりでサンプルコードが書いてなくて全然わかりません。なので、そのうちちゃんと勉強することにします。
さらに以下、メモとして実際のコードを掲載。もっと効率的な書き方があるんでしょうけど、なにしろ、下手に弄ると、途端に動かなくなる&原因がわかりにくいことからベタなままです。
C4DのPythonに関する詳細な情報(できれば日本語)があれば、、(以下略
【数値を設定】→【Python Expressoで条件分岐】→【インスタンスの有効無効を設定】
Pyton Expressoに書いた記述
import c4d
#Welcome to the world of Python
def main():
global Output1
global Output2
global Output3
if Input1 == 1:
Output1=0
Output2=0
Output3=0
elif Input1 == 2:
Output1=1
Output2=0
Output3=0
elif Input1 == 3:
Output1=1
Output2=1
Output3=0
elif Input1 == 4:
Output1=1
Output2=1
Output3=1