[TouchDesigner]pythonによるfor文のコツ


はじめまして

趣味で映像や音楽を作ってるibuibu69と申します!
これまでmaxやprocessingを使って、VJとインストバンドなんかをやってました。。
https://www.youtube.com/watch?v=NswI72i6lCg

・・・バンドも解散したし、TouchDesignerで新しいことをやりたい今日この頃。東京在住なので、だれか友達になってください。。

では、初アドベントカレンダー投稿、さっそくいきます。

本題

TouchDesignerで難しいことをやろうとするとき、pythonによる制御が必要不可欠になってきます。

がしかし、、、TouchDesignerユーザーでpythonに精通しまくりな方は、(私も含め)割と少ないのではないでしょうか。。。たぶん。。

そこで、よく使うであろう、for文によるオペレータの一括操作の際のコツを紹介します。

たくさんのオペレーターを操作

例えば、「constant1,2...9のvalue0に1を代入する」はこうです。

for i in range(1,10):
    op( 'constant' + str(i) ).par.value0 = 1

これは簡単ですね。

解説:
op()の中は文字列なので、iをstr()で文字列にする必要があります。

たくさんのパラメーターへ代入する

例えば、「constant1のvalue1,2,...9に1を代入する」はこうです。

for i in range(1,10):
    script = 'op(\'constant1\').par.value' + str(i) + ' = 1'
    exec(script)
print(a)

exec関数を使います。(私はこれを知らず、四苦八苦しました。。)

コツ:
valueの項番をイテレータとするには、まず実行したい文全体をstring型で書き、イテレータを埋め込みます。その後、exec()関数で実行します。
クォーテーションをエスケープするのを忘れずに!!

たくさんのパラメータの値を取得する

例えば、「constant1の1,2,...10の合計値を表示する」はこうです。

a = 0
for i in range(10):
    a += eval('op(\'constant1\').par.value' + str(i) )
print(a)

先ほどのexec関数と似てますが、今度は値を評価する関数であるevalを使ってます。

以下のように、exec関数を用いてもよいです。

a = 0
for i in range(10):
    script = 'a += op(\'constant1\').par.value' + str(i)
    exec(script)

まとめ

このように、TouchDesignerの組み込み関数をfor文で回したいとき、execやevalを使うことでうまくいきます。

・・・という紹介でした!!

twitterでたまーに映像や音楽をアップしてたりしています。よろしければフォローをいただけると嬉しいです。