
概要 📖 – 複数指タッチを表に取込
Multi Touch In DATは、タッチパネルからの複数指タッチイベントをテーブル形式で受信する DATです。出力形態は時系列順の Raw Events と指 ID 単位の ID Table から選択でき、Panel Component 上でのマルチタッチ UI 構築やジェスチャ解析の入口として機能します。
主な用途 🎯
- マルチタッチ対応スクリーンからの複数指タッチイベントの受信
- Panel Component 上での複数指インタラクション UI の構築
- タッチ ID 単位での位置・状態追跡 (ID Table モード)
- 生イベント時系列のロギング・解析 (Raw Events モード)
- マウスとマルチタッチ統合によるデスクトップ環境での動作確認
データフロー 🔄
入力:Panel Component上のタッチイベント (指の押下・移動・離反)
↓
DAT 内部処理 (出力形態・閾値・オクルージョン判定)
↓
出力: タッチイベントテーブル (DAT) + Python コールバック
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Multi Touch In Page 📋
Active .active ✅
イベント受信のオン・オフ切替:
- Active:
Active(有効化) —Onのときだけタッチイベントをテーブルに追加します。Offにすると以降のイベントは記録されず、テーブルは凍結された状態になります。
Output .outputtype 📤
テーブルへのイベント出力形態を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Raw Events | .log |
FIFO 順 (先入れ先出し) で発生したイベントをそのままテーブルに追記する時系列ログ形式 |
| ID Table | .changes |
1 指 1 行でタッチ ID 単位の現在状態を保持し、移動・離反に応じて該当行を更新する状態テーブル形式 |
Panel .panel 🎯
対象 Panel Component の指定:
- Panel:
Panel(対象パネル) — タッチイベントを受信するPanel Componentのパスを指定します。指定パネルの矩形領域内で発生したタッチが取り込まれます。
Relative IDs .relativeid 🔢
指定パネル内に閉じた ID 採番の有効化:
- Relative IDs:
Relative IDs(相対 ID) — オンにすると指定パネル内で発生したタッチだけを対象に ID を 1 から再採番します。他のパネル上のタッチに番号を取られず、自パネル基準で連番管理できます。
Relative Position .relativepos 📐
パネル左下基準の座標系への切替:
- Relative Position:
Relative Position(相対座標) — オンにするとタッチの位置と正規化座標を指定パネルの左下を原点とした相対値で出力します。パネル移動・スケールに追従した座標が得られます。
Occlude Panels by Hierarchy .occlusion 🧱
階層構造に基づくイベント遮断の有効化:
- Occlude Panels by Hierarchy:
Occlude Panels by Hierarchy(階層オクルージョン) — オンにすると指定パネルの子要素にだけイベントが配信され、親・兄弟パネルでのタッチは無視されます。階層内に閉じた UI を構築する用途に有効です。
Occlude Panels by Depth Layer .occbydepth 🪟
Depth Layer 基準の遮断フィルタ有効化:
- Occlude Panels by Depth Layer:
Occlude Panels by Depth Layer(Depth Layer オクルージョン) — オンにすると Panel のDepth Layer値を基準としたタッチイベントの遮断フィルタを有効化します。
Occlude Panels Above Depth .occdepthlayer 📏
遮断する Depth Layer の境界値:
- Occlude Panels Above Depth:
Occlude Panels Above Depth(遮断 Depth 閾値) — この値より大きいDepth Layerを持つパネル上のタッチイベントは破棄されます。手前のパネル群だけを対象にする場合の絞り込みに使います。
Include Mouse .mouse 🖱️
マウスクリックをタッチ ID 1 として統合する設定:
- Include Mouse:
Include Mouse(マウス統合) — オンにするとマウスクリックがタッチイベントとして追加されます。マウスは常に最初のタッチと同じ ID 1 を共有するため、マウスとマルチタッチを同時利用すると意図しない挙動になる可能性がある点に注意してください。
Position Threshold .posthresh 📐
微小移動を抑制する距離閾値:
- Position Threshold:
Position Threshold(位置閾値) — 指の移動距離がこの値未満の場合、新しいメッセージはテーブルに追加されません。単位は入力デバイス依存で、必ずしも画面解像度のピクセル単位とは限りません。
Contact Threshold .contactthresh 🤏
接触圧・接触面積の最小受付値:
- Contact Threshold:
Contact Threshold(接触閾値) — 一部のタッチデバイスは押下の幅・高さ (接触面積や押下圧に相当) を提供します。この閾値より小さい接触は無視され、イベントとして認識されません。
Min Rows Displayed .minrows 📊
常時表示する最低行数の指定:
- Min Rows Displayed:
Min Rows Displayed(最小表示行数) — テーブルに常に表示しておく最低限の行数です。タッチが発生していない時もこの行数まで領域が確保されます。
Double Click (secs) .doubleclickthresh ⏱️
ダブルクリック判定の許容時間:
- Double Click (secs):
Double Click (secs)(ダブルクリック間隔・秒) — 連続するクリックがダブルクリックとして登録されるまでの最大時間 (秒) です。これを超える間隔のクリックは別イベントとして扱われます。
Received Messages Page 📨
Callbacks DAT .callbacks 📞
コールバック関数を保持する DAT の指定:
- Callbacks DAT:
Callbacks DAT(コールバック DAT) — Python コールバックを含む DAT のパスを指定します。タッチイベントの発生時に該当 DAT 内の関数が呼び出されます。
Execute from .executeloc 🎬
コールバックスクリプトを実行する場所を選ぶメニュー
| 項目 | 内部名 | 説明 |
|---|---|---|
| Callbacks DAT | .callbacks |
コールバックを記述している DAT 自身の位置を基点として実行 |
| Current | .current |
現在のネットワーク位置 (この Multi Touch In DAT の位置) を基点として実行 |
| Specified Operator | .op |
From Operator パラメータで指定した任意 OP の位置を基点として実行 |
From Operator .fromop 📍
Specified Operator モードでの基点 OP の指定:
- From Operator:
From Operator(基点 OP) —Execute fromがSpecified Operatorのとき、スクリプトの実行起点となる OP のパスを指定します。
Clamp Output .clamp 🚧
メッセージ件数の上限制御の有効化:
- Clamp Output:
Clamp Output(出力件数制限) — DAT のメッセージ数は既定で 100 件に制限されていますが、本トグルにより上限値をMaximum Linesで自由に変更 (無制限化を含む) できます。
Maximum Lines .maxlines 🔢
保持する最大メッセージ数:
- Maximum Lines:
Maximum Lines(最大行数) — テーブルに保持する最大メッセージ数を指定します。上限を超えると古いメッセージから順に削除されます。
Clear Output .clear 🧹
ヘッダ行を残したテーブル初期化のパルス:
- Clear Output:
Clear Output(出力クリア) — ヘッダ行を除く全ての行を削除します。スクリプトから呼び出す場合はopparm -c /multitouchin1 clearのように指定します。
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: 複数指で UI 操作 👆
タッチパネル → Panel Component → Multi Touch In DAT (ID Table) → Select DAT → Container COMP
マルチタッチ対応スクリーン上の Panel Component に対し Multi Touch In DAT を ID Table モードで配置し、指 ID 単位の位置を取り出して UI 要素の同時操作を実現する基本フローです。
- 対象となる
Panel Componentを Multi Touch In DAT のPanelに指定 OutputをID Tableに切替えて指 ID 単位で 1 行管理にするRelative Positionをオンにしてパネル左下基準の正規化座標で扱う- Select DAT で対象行を抽出し、座標を Panel Component の制御パラメータに接続
Example 2: 生イベントを時系列で記録 📜
Multi Touch In DAT (Raw Events) → File Out DAT → ログファイル
Output を Raw Events に設定して全タッチイベントを FIFO 順でテーブル化し、File Out DAT に流すことで再現テストや解析に使えるタッチログを保存するフローです。
OutputをRaw Eventsに設定して時系列ログ形式に切替えClamp Outputを有効化してMaximum Linesを必要数まで拡張- File Out DAT を後段に接続してテーブル内容をディスクへ書き出し
- 保存ログを Table DAT で読み戻して再生・解析に使用
Example 3: Python で挙動を制御 🐍
Multi Touch In DAT (callbacks=Text DAT) → onTouchBegin / onTouchEnd → 任意の制御処理
Callbacks DAT に Python スクリプトを記述した Text DAT を割り当て、タッチ開始・終了などのイベントごとに任意の処理を起動するイベント駆動の構成例です。
- Text DAT を作成しタッチイベント用のコールバック関数を記述
- Multi Touch In DAT の
Callbacks DATに Text DAT のパスを指定 Execute fromでスクリプト実行の基点を選択 (Callbacks DAT / Current / Specified Operator)- コールバック内から任意の OP のパラメータを更新してインタラクション結果を反映
関連オペレータ 🔗
類似機能OP 🔍
- TUIO In DAT — 外部 TUIO サーバ経由でマルチタッチイベントをネットワーク受信
- Touch In DAT — 別 TouchDesigner プロセスからの DAT (テーブル) 受信
- Keyboard In DAT — キーボード入力イベントをテーブル形式で取得
組み合わせ推奨OP 🔄
- Panel Execute DAT — Panel Component のイベントに同期して Python を実行
- Select DAT — タッチ ID テーブルから対象行のみ抽出
- DAT to CHOP — タッチイベントテーブルをチャンネル化して下流の CHOP 制御に流用
- File Out DAT — タッチイベントをログファイルとしてディスクへ保存
- Info CHOP — Multi Touch In DAT の
num_rows/num_cols等のメタ情報取得
前処理・後処理DAT 🎯
Info CHOP情報 📊
Multi Touch In DAT は Info CHOP による詳細情報取得に対応しています。num_rows / num_cols で現在のテーブル規模を、total_cooks / cook_time / cpu_time で実行統計を参照でき、タッチイベントの流量監視や負荷チェックに利用できます。
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になっているか確認 (オフだとイベントは記録されない)Panelパラメータが正しいPanel Componentを指しているか確認Position Threshold/Contact Thresholdが大きすぎないか見直し、しきい値を下げて受付範囲を広げる
❌ Problem: ID Table の行が想定外に消える・入れ替わる
✅ Solution:
Relative IDsがオンの場合、別パネル上のタッチが除外されることで ID 採番が変わる挙動になるため、用途に合わせてオフにするOutputをRaw Eventsに切替えて時系列で生イベントを確認し、ID 振り直しのタイミングを特定Include Mouseをオンにしている場合、マウスクリックが ID 1 を占有して指タッチと混在する点を意識して切り分ける
❌ Problem: 親パネルや兄弟パネルの位置でもタッチが拾われてしまう
✅ Solution:
Occlude Panels by Hierarchyをオンにし、指定パネルの子要素のみイベントを受け取る構成に変更Occlude Panels by Depth Layer+Occlude Panels Above Depthで前面パネルだけにイベントを限定- Panel Component 側の
Depth Layer設定を見直し、UI の重なり順を物理的に整理する
❌ Problem: イベントが溢れて古い情報が失われる
✅ Solution:
Clamp Outputをオンにし、Maximum Linesで必要件数まで保持上限を拡張OutputをID Tableに切替え、指 ID 単位の状態管理に変更してテーブル肥大を抑える- 後段で File Out DAT などへの書き出しを行い、長期保存はディスクに退避して DAT は短期バッファとして運用
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Multi Touch In DAT
- TouchDesigner公式ドキュメント – Panel Component
- TouchDesigner公式ドキュメント – TUIO In DAT

