
概要 📖 – UI操作で処理を発火
Panel Execute DATは、監視対象パネル上の UI 操作 (クリック・ドラッグ・値変化) を検知して Python コールバックを発火させるイベントトリガー DATです。Panels パラメータで監視するパネル群を指定し、Panel Value で監視する値 (たとえば state / v / u) を選び、必要な 5 種のトリガー (Off to On / While On / On to Off / While Off / Value Change) をトグルで有効化して使います。値変化トリガーが CHOP Execute DAT や DAT Execute DAT に近い思想で設計されており、UI 入力を Python ロジックに繋ぐ標準的な経路を担当します。
主な用途 🎯
- ボタンのクリック検知で Python 関数を起動 (Off to On トリガー)
- スライダー・フィールドの値変化検知で他 OP に値をブロードキャスト (Value Change トリガー)
- 押下中の継続処理を毎フレーム実行 (While On トリガー)
- 複数パネルの操作をワイルドカードで一括監視し 1 箇所のハンドラに集約
- UI とロジックの分離: パネル側はビジュアル、Panel Execute 側は Python ロジックという責務分割
データフロー 🔄
Panel COMP 上の UI 操作 (クリック・ドラッグ・値変化)
↓
Panel Execute DAT が対応するon*/while*コールバックを Python として実行
↓
関数本体で任意の副作用 (OP 操作・storage 更新・ログ出力・外部 I/O)
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Panel Execute Page ⚡
基本制御 🟢
Active .active 🔌
– On のとき、参照先パネルに対して DAT がコールバックを発火
– Off にすると 5 種のトリガーをすべて一括停止できる (コールバック本体は残したままデバッグ時に素早く無効化したい用途で便利)
実行コンテキスト (Tscript legacy) 🧭
Execute from .executeloc 📍
– Tscript 専用のレガシーパラメータで、スクリプトが実行される基点位置を決定
– Python コールバックを使う現代的な運用ではほぼ意識しないが、後段の From Operator と組で機能する
From Operator .fromop 🎯
– Execute from が Specified Operator のときに、スクリプトを実行する基点となるコンポーネント参照
– 相対パスの解決基点となるコンポーネントを明示的に固定したい場合に指定する
監視対象パネル 🎯
Panels .panels 🪟
– 変化を監視する対象パネルコンポーネントを指定する文字列
– button1 等の単一パス、btn* / slider[1-4] 等のパターンマッチング、スペース区切りでの複数列挙が可能
– 1 個の Panel Execute DAT で多数のパネルを一括監視でき、ハンドラ内で発火元パネルを判定して分岐させる構造が定石
Panel Value .panelvalue 🔢
– 監視するパネル値 (Panel Value) を指定するパラメータで、state / v / u / select 等のパネル値名をスペース区切りで列挙可能
– 下記 5 種のトリガーは「Panels 内の対象パネルに対する、Panel Value の状態変化」として評価される
– 'on' 状態の判定は 「値がゼロより大きい」として扱われる (公式仕様)
– 同一フレーム内で複数のトリガーが該当する場合でも、優先順位に従って 1 イベントにつき 1 回のみ発火する (例: Off to On と Value Change が同時に該当しても Off to On のみ呼ばれる)
トリガーイベント (Edge / Level) 🚦
Off to On .offtoon 🔼
– On のとき、指定パネル値が off (=0) から on (>0) に切替わった瞬間に onOffToOn(panelValue) が呼ばれる
– 「ボタンが押された瞬間」「スライダーがゼロを跨いだ瞬間」のような立ち上がりエッジを 1 回だけ拾いたい用途の基本トリガー
While On .whileon 🔁
– On のとき、指定パネル値が on (>0) の間、毎フレーム whileOn(panelValue) が呼ばれる
– 「押下中ずっと処理を継続したい」「ドラッグしている間だけ追従させたい」レベル駆動の用途で使う
On to Off .ontooff 🔽
– On のとき、指定パネル値が on から off に切替わった瞬間に onOnToOff(panelValue) が呼ばれる
– 「ボタンを離した瞬間」「ドラッグ終了の確定タイミング」のような立ち下がりエッジを 1 回だけ拾いたい用途
While Off .whileoff 💤
– On のとき、指定パネル値が off の間、毎フレーム whileOff(panelValue) が呼ばれる
– 「未押下中だけアイドルアニメーションを進めたい」など、off 状態を肯定的に使いたい場面用 (常用は per-frame 負荷が高いので注意)
Value Change .valuechange 🔄
– On のとき、指定パネル値が何らかの形で変化した瞬間に onValueChange(panelValue) が呼ばれる
– on/off の遷移だけでなく u / v 等の連続値の変化を拾えるので、スライダーやフィールドの編集を Python 側に流す主役
スクリプト編集 ✏️
Edit.. .edit 📝
– クリック (パルス) で外部テキストエディタを開き、DAT 内の Python コールバック本体を編集する
– def onOffToOn(panelValue): ... のような関数群が雛形として並んでおり、有効化したトリガーに対応する関数本体を書いていく構造
File Page 📁
ファイル参照とロード 📂
File .file 🗂️
– 読み込むスクリプトファイルのパスとファイル名
– 受け付け拡張子は .txt と .dat
Sync to File .syncfile 🔁
– On のとき、プロジェクト開始時に該当ファイルをディスクから DAT に読み込み、以降は双方向で同期
– ディスク側で外部エディタが編集すれば DAT が更新され、DAT が編集されればディスク側にも即書き戻される
– ファイルが存在しない場合は DAT が初めて更新された時点で自動生成され、ファイルが削除された場合は DAT は現在の内容を保持する
Load on Start .loadonstart 🚦
– On のとき、プロジェクト開始時にディスク上のファイルを DAT に再ロード
– 起動時にはディスク側を真の値として強制反映したい運用に使う
Load File .loadonstartpulse ⤵️
– クリック (パルス) で即座にディスク上のファイルを DAT に再ロードする手動トリガー
– 外部編集後にプロジェクトを起動し直さずに反映したいときに使う
ディスクへの書込み 💾
Write on Toe Save .write 📤
– On のとき、.toe プロジェクトファイルを保存した瞬間に DAT 内容をディスク上のファイルへ書き出す
– プロジェクトと外部スクリプトファイルの内容を保存時に同期させたい場合に使う
Write File .writepulse ⤴️
– クリック (パルス) で即座に DAT 内容をディスク上のファイルへ書き出す手動トリガー
– プロジェクト保存を待たずにファイルへ反映したいときに使う
Common Page 🔧
Language .language 📝
DAT が動作するスクリプト言語の決定方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT のスクリプト言語を使用 |
| Node | .node |
この DAT 自身のスクリプト言語を使用 |
Edit/View Extension .extension 📄
外部エディタに公開するファイル拡張子の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| dat | .dat |
汎用的なファイル拡張子 dat を使用 |
| From Language | .language |
DAT のスクリプト言語に応じた拡張子を自動選択 |
| Custom Extension | .custom |
Custom Extension で指定したカスタム拡張子を使用 |
Custom Extension .customext 🔤
Edit/View Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
Word Wrap .wordwrap 🔁
ノード表示でのワードラップ (折り返し) の有効化
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT の Word Wrap 設定を継承 |
| On | .on |
Word Wrap を有効化 (ノード上の長い行を折り返し表示) |
| Off | .off |
Word Wrap を無効化 (折り返さずそのまま表示) |
実践アイデア 💡
Example 1: ボタン押下で関数を起動 🖱️
Button COMP のクリック → Panel Execute DAT (Off to On = On, onOffToOn 実装) → 任意の OP 操作
Button COMP をクリックした瞬間に Python 関数を 1 回だけ走らせたい、もっとも基本的な使い方。Off to On のみを On にしておくと、押下開始の立ち上がりエッジでだけ onOffToOn が呼ばれます。
- Panel Execute DAT を配置し、
Activeを On にする Panelsに対象ボタンのパス (例:button1) を入力、Panel Valueにstateを指定Off to Onのみを On にし、他のトリガーは Off のまま残すEdit..パルスで外部エディタを開き、def onOffToOn(panelValue): ...の本体を実装
Example 2: ドラッグで値を送出 🎚️
Slider COMP の u/v 値変化 → Panel Execute DAT (Value Change = On, onValueChange 実装) → 他 OP のパラメータへ反映
Slider COMP や Field COMP のような連続値パネルの編集を、Python の onValueChange 経由で他 OP のパラメータに反映するフロー。CHOP ネットワークを介さず Python 側に値を取り回せます。
- Panel Execute DAT を配置し、
Activeを On にする Panelsにスライダーのパス (例:slider1) を入力、Panel Valueにuもしくはvを指定Value Changeのみ On にし、エッジ系トリガー (Off to On / On to Off) は Off にするonValueChange(panelValue):内でpanelValue.valから現在値を取り、op('target').par.value0 = panelValue.valのように他 OP へ反映
Example 3: 複数パネルを一括監視 🎛️
複数 Button COMP のクリック → Panel Execute DAT (Panels = btn*, Off to On = On, onOffToOn 内で分岐) → ボタンごとに異なる処理
Container COMP 内に並んだ多数の Button COMP を 1 個の Panel Execute DAT でまとめて監視し、ハンドラ内で発火元パネル名を判定して分岐させる定石構造。Panel Execute DAT を増やさずにスケールできます。
- Panel Execute DAT を配置し、
Activeを On Panelsにワイルドカード (例:btn*) を指定し、コンテナ内の同名規則ボタン群を一括対象化Panel Valueにstate、Off to Onを On に設定onOffToOn(panelValue):内でpanelValue.owner.nameを取り、ボタン名で if 分岐させて処理を切替える
関連オペレータ 🔗
類似機能OP 🔍
- CHOP Execute DAT — 対象 CHOP のチャンネル値変化を検知して Python コールバックを発火させる値変化トリガー DAT
- DAT Execute DAT — 対象 DAT のセル変更・行列変化を検知して Python コールバックを発火させる値変化トリガー DAT
- Parameter Execute DAT — 対象 OP の特定パラメータが変化したときに Python コールバックを発火させる DAT
- OP Execute DAT — 対象 OP のクック・名前変更・削除など OP ライフサイクルイベントを捕捉する DAT
- Execute DAT — TouchDesigner プロセスやフレーム進行などシステム側のイベントで Python を発火させる DAT
組み合わせ推奨OP 🔄
- Button COMP — Panel Execute DAT が最も典型的に監視する押しボタンパネル
- Slider COMP — 1 次元・2 次元の連続値スライダー、
u/vの Value Change を Panel Execute で拾う - Field COMP — テキストフィールドの編集確定 (state の遷移) を Panel Execute で受ける
- Container COMP — 監視対象パネルをまとめる親コンポーネント、相対パスの基点として活用
- List COMP — 行選択イベントを Panel Execute 側で捕捉してリストドリブンな UI を組む
- Replicator COMP — 動的に複製したパネル群をワイルドカード
Panelsで一括監視する定石 - Examine DAT — Panel Execute 側で更新した storage や globals をリアルタイム可視化してデバッグ
前処理・後処理DAT 🎯
- 前処理: Text DAT
- 後処理: Examine DAT、Null DAT
Info DAT情報 📊
Panel Execute DAT は Info DAT による詳細情報取得に対応しています (num_rows / num_cols / total_cooks / cook_time 等の共通 DAT Info チャンネルを参照可能)。
DAT 固有情報 📋
num_rows: DAT の行数num_cols: DAT の列数type: DAT の型 (table / text)is_table: テーブル形式の場合 1、テキスト形式の場合 0
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: クリックや値変化に反応しない
✅ Solution:
Activeパラメータが On になっているか確認 (Off だと 5 種すべてのトリガーが停止する)- 対象トリガー (
Off to On/While On/On to Off/While Off/Value Change) が個別に On になっているか確認 Panelsに書いたパスや wildcard が実在パネルにマッチしているかを Examine DAT 等で目視確認Panel Value名 (例:state/u/v) が監視したいパネルで実際に存在するかを Panel Value 一覧で確認
❌ Problem: 同じ操作で複数のコールバックが二重発火する
✅ Solution:
- 公式仕様により 1 イベントにつき 1 回のみ発火するため、同じ処理を
Off to OnとValue Changeの両方に書くと意図せぬ重複動作の原因となる、いずれかに寄せる While Onは on の間ずっと毎フレーム呼ばれるため、エッジ駆動のOff to Onと意味が違うことを意識する (連続実行で良いか単発で良いかで使い分け)- 立ち上がり・立ち下がりの両方が必要な場面では、
Off to OnとOn to Offをペアで使い、Value Change はオフにする構成が安全
❌ Problem: ワイルドカードで指定した複数パネルが想定どおりマッチしない
✅ Solution:
Panelsのパス解決は Panel Execute DAT 自身の配置場所からの相対が基本、必要に応じて絶対パスや../で起点を調整するbtn*等のパターンが意図と違う対象を巻き込む場合は、btn[1-9]のようにレンジ指定で範囲を絞る- Replicator COMP で動的生成したパネルは、生成タイミングと Panel Execute の評価タイミングがずれることがあるため、生成直後に
Activeをパルス的にトグルし直すと安定化する
❌ Problem: While On が常時呼ばれて重い
✅ Solution:
- 本当に毎フレーム必要かを再検討し、立ち上がり 1 回だけで済むなら
Off to On単発に置き換える - 重い処理を
whileOn内に直書きせず、storage に状態を書き込むだけにし、後段の Execute DAT のonFrameStart側で集約処理する - 監視対象パネルが多いときは
Panelsのワイルドカードを狭める、または Panel Execute DAT を責務ごとに分割する
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Panel Execute DAT
- TouchDesigner公式ドキュメント – Panel Component
- TouchDesigner公式ドキュメント – Panel Value 一覧

