🧭 خلاصه (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 0CHOP ورودی شامل کانال‌هایی مانند 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 در رابط طراحی کن.