Panel Execute DAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Panel Execute DAT が Panel COMP の UI 操作 (クリック・ドラッグ・値変化) を捕捉して Python コールバックを発火させる流れを示す図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 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 DATDAT 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)

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Panel Execute Page ⚡

基本制御 🟢

Active .active 🔌
– On のとき、参照先パネルに対して DAT がコールバックを発火
– Off にすると 5 種のトリガーをすべて一括停止できる (コールバック本体は残したままデバッグ時に素早く無効化したい用途で便利)

実行コンテキスト (Tscript legacy) 🧭

Execute from .executeloc 📍
Tscript 専用のレガシーパラメータで、スクリプトが実行される基点位置を決定
– Python コールバックを使う現代的な運用ではほぼ意識しないが、後段の From Operator と組で機能する

From Operator .fromop 🎯
Execute fromSpecified 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 OnValue 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 ExtensionCustom Extension のときに適用される拡張子:

  • Custom Extension 文字列: Edit/View Extensioncustom のときに使用される任意のファイル拡張子

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 が呼ばれます。

  1. Panel Execute DAT を配置し、Active を On にする
  2. Panels に対象ボタンのパス (例: button1) を入力、Panel Valuestate を指定
  3. Off to On のみを On にし、他のトリガーは Off のまま残す
  4. Edit.. パルスで外部エディタを開き、def onOffToOn(panelValue): ... の本体を実装

Example 2: ドラッグで値を送出 🎚️

Slider COMP の u/v 値変化 → Panel Execute DAT (Value Change = On, onValueChange 実装) → 他 OP のパラメータへ反映

Slider COMPField COMP のような連続値パネルの編集を、Python の onValueChange 経由で他 OP のパラメータに反映するフロー。CHOP ネットワークを介さず Python 側に値を取り回せます。

  1. Panel Execute DAT を配置し、Active を On にする
  2. Panels にスライダーのパス (例: slider1) を入力、Panel Valueu もしくは v を指定
  3. Value Change のみ On にし、エッジ系トリガー (Off to On / On to Off) は Off にする
  4. 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 を増やさずにスケールできます。

  1. Panel Execute DAT を配置し、Active を On
  2. Panels にワイルドカード (例: btn*) を指定し、コンテナ内の同名規則ボタン群を一括対象化
  3. Panel ValuestateOff to On を On に設定
  4. 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 🎯


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 OnValue Change の両方に書くと意図せぬ重複動作の原因となる、いずれかに寄せる
  • While On は on の間ずっと毎フレーム呼ばれるため、エッジ駆動の Off to On と意味が違うことを意識する (連続実行で良いか単発で良いかで使い分け)
  • 立ち上がり・立ち下がりの両方が必要な場面では、Off to OnOn 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 DATonFrameStart 側で集約処理する
  • 監視対象パネルが多いときは Panels のワイルドカードを狭める、または Panel Execute DAT を責務ごとに分割する

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました