TouchDesignerはノードベースのプログラミング言語ですが、Pythonでも書けます。
『どこに書くか?』についてはsatoruhigaさんが、Pythonの基本的な書き方はいろんなひとが書いているので今回は『TouchDesignerの機能を具体的にPythonで制御するには?』について書きたいと思います。
TouchDesignerで主に扱う3つのClass
TouchDesignerをPythonで扱う場合、主に4つのクラスを扱います。
COMP Class, OP Class, Par Class、Connector Classです。
COMP ClassはBase COMPなどのCOMPを扱うときのクラス、OP ClassはTOPやSOPなどを扱うクラス、そしてOPやCOMPが持つ各種の値、例えばtx, ty, tzやbuttonのw(width), h(height)などがPar Classとなっています。
Connector ClassはOPやCOMPが持つコネクタの部分(OP同士をつなげるワイヤを繋ぐところです)のクラスです。
また、細かく言えばOP Classは各OPごとにOP Classを継承して作られていますが、今回は個別のメソッドには触れず、全体に共通した処理を紹介していきます。
個別のを見たければCHOP Class, TOP Class, SOP Class, MAT Class, DAT Classで確認できます。
Python上での変数名の確認方法
マウスカーソルを知りたいパラメータの名前の上にロールオーバーすれば名称が表示されます。
"Width"のPython上の変数名は"w"のようです。
よく書くやついくつか
よく書く処理を挙げておきます。チートシート替わりにどうぞ。
Constantの値を変更する
直接値の読み書きができます。
op('circle1').par.radiusx.val = 0.5
expressionのパスを変更する
パスを文字列として書き込みます。
op('circle1').par.radiusx.expr = 'absTime.seconds'
モードを変更する
Expressionモードにするには、
op('circle1').par.radiusx.mode = ParMode.EXPRESSION
Constantモードにするには、
op('circle1').par.radiusx.mode = ParMode.CONSTANT
Connector Classの例1. OP同士をつなぐ
コネクタが一個しかないものは、
op('circle1').onputConnectors[0].connect(op('level1'))
コネクタが複数あるのものは、
op('circle1').onputConnectors[0].connect(op('comp1').inputConnectors[0])
ちなみにconnectメソッドはインプットコネクタからも叩けます。
op('level1').inputConnectors[0].connect(op('circle1').outputConnectors[0])
COMP同士をつなぐ
基本OPのコネクタと一緒で、名称がinputCOMPConnector/outputCOMPConnectorになってるだけです。
op('button1').outputCOMPConnectors[0].connect(op('container1').inputConnectors[0])
Inputの数を数える
len(op('circle1').inputConnectors)
len(op('button1').inputCOMPConnectors)
コネクションを解除する
op('circle1').inputConnectors[0].disconnect()
op('button1').inputCOMPConnectors[0].disconnect()
OPやCOMPの位置を移動する
op('circle1').nodeY = op('circle1').nodex + 10
op('button1').nodeY = op('button1').nodeY + 10