TouchDesignerでCallbacksExt Extensionを使う
TouchDesignerのCallbacksExtを使用するとCOMPに独自のコールバックを定義することができます。
CallbacksExtはExtensionという仕組みを利用しています。
セットアップ
まず、コールバックを定義したいCOMP(Base COMPなど)を作成し、COMPの中にさらにSelect DATを作成します。作成したSelect DATの名前をCallbacksExtに変更し、DATパラメータに以下のExpressionを記述します。
op.TDModules.op('TDCallbacksExt')

COMPのパラメータダイアログのExteionsタブのObjectパラメータに以下を記述し、Promoteパラメータを有効にします。
op('./CallbacksExt').module.CallbacksExt(me)

COMPを右クリックし、「Customize Component...」からComponent Editorを開き、次の2つのパラメータを追加します。
- Callback DAT(
Callbackdat): DAT - Print Callbacks(
Printcallbacks): Toggle
COMPと同じ階層にText DATを作成し、COMPに追加したCallback DATプロパティから参照されるようにします。このText DATにコールバック関数を記述します。Print Callbacksは有効にするとコールバックが実行されたときにTextportにデバッグ用の文字列が出力されます。

使い方
CallbackExt Extensionにより、COMPからDoCallbackメソッドを利用することができるようになります。DoCallbackメソッドの第一引数がコールバック名、第二引数がコールバック関数に引数として渡すディクショナリとなります。DoCallbackメソッドを実行すると、COMPに追加したCallback DATプロパティで指定したDATに定義されているコールバック名と同名の関数がDoCallbackの第二引数のディクショナリを引数にして実行されます。
例えば、COMP内から以下のスクリプトを実行すると、Callback DATで定義されているonCallback関数が呼び出されてTextportにHello, World!と出力されます。
info = { 'value': 'Hello, World!' }
parent().DoCallback('onCallback', info)
def onCallback(info):
print(info['value'])
# Textportに「Hello, World!」と出力される
Discussion