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

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

Multi Touch In DAT の複数指タッチ入力をテーブル形式で取得するイメージ図

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

概要 📖 – 複数指タッチを表に取込

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 コールバック

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

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 fromSpecified 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 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: 複数指で UI 操作 👆

タッチパネル → Panel Component → Multi Touch In DAT (ID Table) → Select DAT → Container COMP

マルチタッチ対応スクリーン上の Panel Component に対し Multi Touch In DAT を ID Table モードで配置し、指 ID 単位の位置を取り出して UI 要素の同時操作を実現する基本フローです。

  1. 対象となる Panel Component を Multi Touch In DAT の Panel に指定
  2. OutputID Table に切替えて指 ID 単位で 1 行管理にする
  3. Relative Position をオンにしてパネル左下基準の正規化座標で扱う
  4. Select DAT で対象行を抽出し、座標を Panel Component の制御パラメータに接続

Example 2: 生イベントを時系列で記録 📜

Multi Touch In DAT (Raw Events) → File Out DAT → ログファイル

Output を Raw Events に設定して全タッチイベントを FIFO 順でテーブル化し、File Out DAT に流すことで再現テストや解析に使えるタッチログを保存するフローです。

  1. OutputRaw Events に設定して時系列ログ形式に切替え
  2. Clamp Output を有効化して Maximum Lines を必要数まで拡張
  3. File Out DAT を後段に接続してテーブル内容をディスクへ書き出し
  4. 保存ログを Table DAT で読み戻して再生・解析に使用

Example 3: Python で挙動を制御 🐍

Multi Touch In DAT (callbacks=Text DAT) → onTouchBegin / onTouchEnd → 任意の制御処理

Callbacks DAT に Python スクリプトを記述した Text DAT を割り当て、タッチ開始・終了などのイベントごとに任意の処理を起動するイベント駆動の構成例です。

  1. Text DAT を作成しタッチイベント用のコールバック関数を記述
  2. Multi Touch In DAT の Callbacks DAT に Text DAT のパスを指定
  3. Execute from でスクリプト実行の基点を選択 (Callbacks DAT / Current / Specified Operator)
  4. コールバック内から任意の 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:

  • ActiveOn になっているか確認 (オフだとイベントは記録されない)
  • Panel パラメータが正しい Panel Component を指しているか確認
  • Position Threshold / Contact Threshold が大きすぎないか見直し、しきい値を下げて受付範囲を広げる

❌ Problem: ID Table の行が想定外に消える・入れ替わる
✅ Solution:

  • Relative IDs がオンの場合、別パネル上のタッチが除外されることで ID 採番が変わる挙動になるため、用途に合わせてオフにする
  • OutputRaw 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 で必要件数まで保持上限を拡張
  • OutputID Table に切替え、指 ID 単位の状態管理に変更してテーブル肥大を抑える
  • 後段で File Out DAT などへの書き出しを行い、長期保存はディスクに退避して 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をコピーしました