LoginSignup
15
10

More than 3 years have passed since last update.

はじめまして

趣味で映像や音楽を作ってる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

cfsd3-u422f.gif

これは簡単ですね。

解説:
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)

7cqii-7k8am.gif

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でたまーに映像や音楽をアップしてたりしています。よろしければフォローをいただけると嬉しいです。

15
10
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10