🧭 خلاصه (Summary)

Mouse Out CHOP موقعیت موس و وضعیت دکمه‌های آن را از داخل TouchDesigner کنترل می‌کند؛ یعنی این CHOP می‌تواند با استفاده از داده‌های ورودی (کانال‌های CHOP دیگر)، حرکت موس واقعی سیستم را شبیه‌سازی و هدایت کند.

کانال‌های ورودی با نام‌های tx و ty به‌ترتیب، مختصات افقی و عمودی موس را مشخص می‌کنند.
این مختصات در بازه‌ی نرمال‌شده‌ی ۰ تا ۱ هستند:

  • tx = 0 → سمت چپ کل دسکتاپ

  • tx = 1 → سمت راست آخرین مانیتور

  • ty = 0 → پایین صفحه

  • ty = 1 → بالای صفحه

💡 اگر دسکتاپ روی دو مانیتور گسترده شده باشد، مقدار tx = 1 به انتهای مانیتور دوم اشاره می‌کند.

⚠️ هشدار مهم:
اگر کانال‌های ورودی در هر فریم تغییر کنند (مثلاً از یک انیمیشن یا نویز گرفته شوند)، ممکن است کنترل موس واقعی از دست برود و فقط با کیبورد یا توقف پروژه (ESC / Alt+Tab / Ctrl+Break) بتوان دوباره کنترل را بازگرداند.
اما تا زمانی که مقادیر ورودی ثابت باشند، این CHOP کنترلی روی موس ندارد.


⚙️ پارامترها — صفحه Control

پارامتر توضیح
Position U (posu) نام کانال ورودی که موقعیت افقی موس (U) را کنترل می‌کند.
Position V (posv) نام کانال ورودی که موقعیت عمودی موس (V) را کنترل می‌کند.
Left Button (lbuttonname) نام کانال ورودی که وضعیت دکمه چپ موس را کنترل می‌کند (0=رها، 1=فشرده).
Right Button (rbuttonname) نام کانال ورودی که وضعیت دکمه راست موس را کنترل می‌کند.
Middle Button (mbuttonname) نام کانال ورودی که وضعیت دکمه میانی موس را کنترل می‌کند.
Cook Every Frame (cookalways) باعث می‌شود CHOP در هر فریم اجرا (cook) شود، حتی اگر تغییری در ورودی نباشد.

⚙️ پارامترها — صفحه Common

پارامتر توضیح
Time Slice (timeslice) فعال‌کردن این گزینه باعث می‌شود فقط داده‌های بین دو cook متوالی (آخرین و فعلی) پردازش شوند.
Scope (scope) محدودهٔ کانال‌هایی که تحت تأثیر قرار می‌گیرند را تعیین می‌کند (از الگوهای نام‌گذاری استفاده می‌کند).
Sample Rate Match (srselect) ⊞ نحوه‌ی مدیریت اختلاف نرخ نمونه‌برداری بین ورودی‌ها:
Resample At First Input’s Rate – براساس نرخ ورودی اول.
Resample At Maximum Rate – بیشترین نرخ.
Resample At Minimum Rate – کمترین نرخ.
Error If Rates Differ – در صورت تفاوت، خطا می‌دهد.
Export Method (exportmethod) ⊞ تعیین روش اتصال خروجی CHOP به پارامترها:
DAT Table by Index / Name – استفاده از جدول DAT.
Channel Name is Path:Parameter – مسیر کامل پارامتر مانند geo1/transform1:tx.
Export Root (autoexportroot) مسیر ریشه‌ای که تمام خروجی‌های Export نسبت به آن تنظیم می‌شوند.
Export Table (exporttable) جدول DAT برای روش‌های Export مبتنی بر DAT.

🔌 ورودی‌ها (Operator Inputs)

ورودی توضیح
Input 0 CHOP ورودی شامل کانال‌هایی مانند tx, ty, lbutton, rbutton, mbutton برای کنترل موقعیت و دکمه‌های موس.

📊 Info CHOP Channels

اطلاعات اضافی از طریق Info CHOP در دسترس است.

Common CHOP Info Channels

نام توضیح
start آغاز بازهٔ داده در نمونه‌ها.
length تعداد نمونه‌ها در CHOP.
sample_rate نرخ نمونه‌برداری (فریم بر ثانیه).
num_channels تعداد کانال‌ها.
time_slice اگر Time Slice فعال باشد مقدار ۱ دارد.
export_sernum شمار دفعاتی که ارتباط‌های Export به‌روزرسانی شده‌اند.

Common Operator Info Channels

نام توضیح
total_cooks تعداد دفعات cook از شروع اجرای پروژه.
cook_time مدت cook آخر (میلی‌ثانیه).
cook_frame شماره فریم آخرین cook در تایم‌لاین کامپوننت.
cook_abs_frame شماره فریم مطلق cook.
cook_start_time / cook_end_time زمان شروع و پایان cook در همان فریم (میلی‌ثانیه).
cooked_this_frame اگر در فریم فعلی cook شده باشد مقدار ۱ می‌گیرد.
warnings / errors تعداد هشدارها یا خطاهای اپراتور.

🎬 کاربردها در پروژه‌های تعاملی

Mouse Out CHOP معمولاً برای شبیه‌سازی حرکت موس از داخل پروژه استفاده می‌شود؛ کاربردهای خاص آن شامل:

  1. اتوماتیک‌سازی تعاملات کاربر:
    در پروژه‌های نمایشی یا اینتراکتیو که نیاز است مکان‌نمای موس به‌طور خودکار حرکت کند (مثلاً روی منوها یا نقاط خاص صحنه).

  2. کنترل از راه دور (Remote Control):
    استفاده از داده‌های شبکه یا OSC برای هدایت موس در سیستم‌های دیگر.

  3. نصب‌های چند‌نمایشی (Multi-Display Installations):
    هماهنگ‌سازی حرکات موس در سیستم‌هایی با چند مانیتور و ورودی تعاملی.


💡 نکته حرفه‌ای:
برای جلوگیری از قفل‌شدن موس در هنگام آزمایش:

  • از Null CHOP ثابت بین منبع و Mouse Out CHOP استفاده کن؛

  • یا دکمه‌ای برای Pause/Bypass Mouse Out CHOP در رابط طراحی کن.