رفتن به محتوا
ARTINEXT

BIM و Revit

توسعه اسکریپت اختصاصی Dynamo دقیقاً چه چیزی را جایگزین می‌کند؟

گرافی که یک‌بار روی مدل سازنده‌ی خود اجرا می‌شود، یک آزمایش است؛ کاری که آن را به ابزار تبدیل می‌کند، بخشی است که روی صفحه‌ی Dynamo دیده نمی‌شود.

استودیوی سامانه‌های دیجیتالانتشار: به‌روزرسانی:

تیمی که اسکریپت‌های Dynamo، افزونه‌های اختصاصی و خودکارسازی رویت را برای دفاتر معماری، سازه و تأسیسات می‌سازد.

فهرست مطالب
  1. پاسخ کوتاه
  2. اسکریپت Dynamo چه چیزی را جایگزین می‌کند
  3. ابتدا شیت‌ها، ویوها و داده‌ها
  4. کنترل مدل با گراف
  5. جانمایی تکراری
  6. گرافی که دیگران هم اجرا کنند
  7. نودهای Python
  8. پکیج‌ها و کتابخانه‌ی اسکریپت‌ها
  9. اثر ارتقای نسخه‌ی رویت
  10. زمان ساخت افزونه
  11. ساخت داخلی یا کمک بیرونی
  12. جمع‌بندی
  13. پرسش‌های متداول

توسعه اسکریپت اختصاصی Dynamo یعنی ساخت گرافی که یک کار مشخص و تکراری در رویت را، با همان دقتی که یک فرد باتجربه انجام می‌دهد، هر بار و در هر پروژه‌ای اجرا کند. این کار با اتصال چند نود برای یک نتیجه‌ی یک‌باره تفاوت دارد. گرافی که فقط یک‌بار و روی همان مدلی که برای آن ساخته شده کار می‌کند، یک آزمایش است. گرافی که ماه بعد، در پروژه‌ی بعدی و توسط کسی که هرگز آن را در ویرایشگر باز نکرده نیز همان‌طور کار می‌کند، یک ابزار است.

بیشتر دفاتر جایی میان این دو حالت قرار دارند. یک نفر گرافی ساخته است، فقط خود او می‌داند گراف چه ورودی‌هایی لازم دارد و در هفته‌ای که حضور ندارد، تیم دوباره کار را به‌صورت دستی انجام می‌دهد. توسعه اسکریپت اختصاصی Dynamo همین فاصله را از میان برمی‌دارد، با ساخت گرافی که افرادی غیر از سازنده‌ی آن نیز بتوانند اجرایش کنند و به نتیجه‌ی آن اعتماد داشته باشند.

دستی در حال طراحی نمودار جریان کاری روی تبلت کنار مانیتور کد، برای نوشته‌ای درباره‌ی توسعه اسکریپت اختصاصی Dynamo

اسکریپت Dynamo دقیقاً چه چیزی را جایگزین می‌کند

Dynamo یک محیط برنامه‌نویسی بصری است که همراه رویت ارائه می‌شود. هر گراف از نودهایی ساخته می‌شود که هرکدام یک کار مشخص انجام می‌دهند، مانند جمع‌آوری تمام شیت‌ها یا تنظیم یک پارامتر، و از سیم‌هایی که داده را از خروجی یک نود به ورودی نود بعدی منتقل می‌کنند. گراف از طریق همین نودها به Revit API دسترسی پیدا می‌کند و در نتیجه، کاری که هر بار با همان کلیک‌ها انجام می‌شود، یک‌بار تعریف شده و بارها اجرا می‌شود.

آنچه این ابزار جایگزین می‌کند، زمان تکرار دستی است، نه قضاوت فنی. کسی که می‌داند شیت‌ها باید چگونه شماره‌گذاری شوند، همچنان باید این را بداند؛ گراف فقط او را از تکرار دستی همین کار در هر پروژه بی‌نیاز می‌کند. گرافی که قاعده را درست ثبت کرده باشد، آن را در پایان یک روز طولانی نیز به همان شکلی اجرا می‌کند که در ابتدای روز.

همین نکته، مرز کار را هم مشخص می‌کند. گراف فقط تصمیمی را تکرار می‌کند که پیش‌تر به‌روشنی گرفته شده باشد. اگر دفتر نتواند قاعده را مکتوب کند، گراف همان نسخه‌ای از قاعده را اجرا می‌کند که سازنده‌ی آن در ذهن داشته است.

جایی که خودکارسازی زودتر نتیجه می‌دهد: شیت‌ها، ویوها و داده‌ها

مرتب‌سازی شیت‌ها، نام‌گذاری ویوها، جانمایی لجندها و پرکردن فیلدهای کادر نقشه معمولاً نخستین جاهایی هستند که دفتر نتیجه‌ی خودکارسازی را در آن‌ها می‌بیند، زیرا این کارها مدام تکرار می‌شوند و قاعده‌ی روشنی دارند: یک شیوه‌ی شماره‌گذاری، یک ترتیب و یک قالب مشخص. همین وضوح، ریسک خودکارسازی آن‌ها را از کارهای طراحی‌محور کمتر می‌کند و به همین دلیل، خودکارسازی مرتب‌سازی شیت در رویت برای بیشتر دفاتر نقطه‌ی شروع مناسبی است.

داده‌ها دومین نقطه‌ی شروع هستند. Dynamo می‌تواند از Excel بخواند و در آن بنویسد، در نتیجه پارامترهایی که امروز یک نفر آن‌ها را میان اسکجوال و فایل Excel جابه‌جا می‌کند، با یک گراف در هر دو جهت منتقل می‌شوند. قاعده همان قاعده‌ی شیت‌هاست: اگر بتوان ارتباط میان ستون‌ها و پارامترها را مکتوب کرد، می‌توان آن را خودکار نیز کرد.

ارزش این بخش فقط در سرعت نیست. مستندسازی‌ای که با گراف انجام می‌شود، هر بار از یک قاعده‌ی ثابت پیروی می‌کند و به برداشت فردی که آن روز کار را انجام داده، وابسته نیست.

کنترل مدل با گراف

گراف می‌تواند نقش یک بازرس خودکار را داشته باشد: المان‌ها را جمع‌آوری کند، پارامترهای خالی، درهای بدون تگ یا ویوهای بدون View Template را مشخص کند و در برخی موارد آن‌ها را اصلاح کند. این همان منطقی است که کنترل‌کننده مدل رویت به کار می‌گیرد، با یک تفاوت: گراف اختصاصی دقیقاً قواعدی را بررسی می‌کند که استاندارد داخلی دفتر شما تعریف کرده است.

ریسک این بخش، گراف کنترلی است که خود آن تست نشده باشد. با هر هشدار نادرست، اعتماد به گزارش سریع‌تر از هر هشدار جاافتاده کاهش می‌یابد، زیرا پس از چند مورد، افراد دیگر گزارش را نمی‌خوانند. گراف بازرسی پیش از آنکه کسی به آن تکیه کند، باید روی چند مدل واقعی و متفاوت اجرا شود، نه فقط روی مدلی که برای آن نوشته شده است.

جانمایی تکراری: فمیلی‌ها، والپست‌ها و نازک‌کاری

جانمایی خودکار فمیلی‌ها در امتداد محیط اتاق، ساخت والپست‌ها بر اساس نوع دیوار یا اعمال نازک‌کاری بر اساس اسکجوال اتاق‌ها، همه از یک الگو پیروی می‌کنند. قاعده از پیش در داده‌های پروژه وجود دارد، مانند نوع اتاق، نوع دیوار یا نازک‌کاری موردنیاز، و فقط باید یک‌بار به‌صورت منطق نوشته شود. خودکارسازی فمیلی والپست در رویت و خودکارسازی نازک‌کاری دیوار، دو نمونه از همین ایده هستند.

در این بخش، فاصله‌ی میان یک گراف آزمایشی و یک ابزار واقعی بیشترین اهمیت را دارد. جانمایی‌ای که در یک اتاق مستطیلی درست کار می‌کند، ممکن است در اتاقی نامنظم یا اتاقی با چند بازشو با خطا روبه‌رو شود. گرافی که فقط حالت ساده را پوشش می‌دهد، پس از هر اجرا به یک بررسی دستی نیاز دارد و در نتیجه، زمانی که قرار بود صرفه‌جویی شود، دوباره صرف همین بررسی می‌شود.

گرافی که دیگران هم بتوانند اجرا کنند

بیشتر گراف‌ها در مرحله‌ی تحویل با مشکل روبه‌رو می‌شوند، نه در منطق. سازنده می‌داند پیش از اجرا کدام نود باید تغییر کند، کدام ویو باید باز باشد و کدام هشدارها اهمیتی ندارند. دیگران این موارد را نمی‌دانند و هیچ‌کدام از آن‌ها روی صفحه‌ی گراف نوشته نشده است.

در رویت، ابزار این کار از پیش وجود دارد. Dynamo Player گراف‌های یک پوشه‌ی مشترک را فهرست می‌کند و آن‌ها را از زبانه‌ی Manage، بدون بازکردن ویرایشگر Dynamo، اجرا می‌کند؛ اگر گراف ورودی لازم داشته باشد، Player آن را از کاربر می‌پرسد و طبق راهنمای Autodesk، نتیجه‌ی هر اجرا با Undo در رویت قابل‌بازگشت است. برای آنکه گراف به این شکل کار کند، باید از ابتدا برای آن ساخته شود:

  • فقط ورودی‌های نام‌گذاری‌شده. هر مقداری که کاربر ممکن است تغییر دهد، یک نود ورودی با نام روشن است و هیچ چیزی نیاز به ویرایش در داخل گراف ندارد.
  • گروه‌بندی و یادداشت. نودها بر اساس مرحله گروه‌بندی می‌شوند و هر گروه یادداشت کوتاهی درباره‌ی کار خود دارد تا فرد بعدی بتواند منطق را دنبال کند.
  • نتیجه‌ی قابل‌پیش‌بینی. گراف گزارش می‌دهد چه چیزی را تغییر داده و از چه چیزی گذشته است تا بتوان اجرا را بدون مقایسه‌ی چشمی مدل بررسی کرد.

گراف‌هایی که مدل را تغییر می‌دهند نیز باید در حالت اجرای Manual ذخیره شوند، نه Automatic، تا هیچ اجرایی بدون درخواست کاربر انجام نشود.

نودهای Python: وقتی برنامه‌نویسی بصری کافی نیست

دستی روی صفحه‌کلید لپ‌تاپ با کد روی صفحه، برای بخش نودهای Python در Dynamo

نودهای بصری برای بیشتر منطق‌های خطی کافی هستند. اما وقتی گراف به شرط‌های پیچیده، حلقه‌های تودرتو یا بخشی از Revit API نیاز دارد که نود آماده‌ای برای آن وجود ندارد، یک نود Python در همان گراف سریع‌تر نوشته می‌شود و نگهداری آن از زنجیره‌ی بلندی از نودهای بصری ساده‌تر است. فصل Python و رویت در Dynamo Primer این الگو را نشان می‌دهد.

این به معنای کنارگذاشتن Dynamo نیست. گراف لایه‌ی قابل‌مشاهده، یعنی ورودی‌ها و خروجی‌ها، باقی می‌ماند و منطق اصلی در چند خط کد زیر آن قرار می‌گیرد. تیمی که هم برنامه‌نویسی بصری و هم Revit API را می‌شناسد، می‌تواند برای هر بخش تصمیم بگیرد که نود کافی است یا Python با نگهداری کمتر همان کار را انجام می‌دهد.

پکیج‌ها و نظم کتابخانه‌ی اسکریپت‌ها

دستی در حال چیدن کتاب روی قفسه، برای نظم‌دادن به کتابخانه‌ی اسکریپت‌های Dynamo

کتابخانه‌ی گراف‌ها نیز مانند کتابخانه‌ی فمیلی‌ها به‌تدریج نامرتب می‌شود: نسخه‌های تقریباً یکسانی از یک گراف با نام‌های نزدیک به هم، پکیج‌های شخص‌ثالثی که سال‌هاست به‌روزرسانی نشده‌اند و گرافی که فقط سازنده‌ی آن می‌داند چه ورودی‌ای لازم دارد. همان اصولی که در استاندارد مکتوب کتابخانه‌ی رویت مطرح است، این‌جا هم کاربرد دارد و سه مورد این وضعیت را قابل‌کنترل نگه می‌دارد:

  • یک الگوی نام‌گذاری ثابت برای هر گراف که هدف و نسخه‌ی آن را نشان دهد.
  • فهرستی از پکیج‌های شخص‌ثالث مورد استفاده، مانند Clockwork یا archi-lab، همراه با نسخه‌ی دقیق هرکدام، برای روزی که یک به‌روزرسانی مشکلی ایجاد می‌کند.
  • یادداشتی کوتاه همراه هر گراف که ورودی موردنیاز و خروجی آن را مشخص کند.

اثر ارتقای نسخه‌ی رویت بر گراف‌ها

پایداری هر گراف به پکیج‌هایی بستگی دارد که از آن‌ها استفاده می‌کند. هر نسخه‌ی رویت با نسخه‌ی مشخصی از Dynamo ارائه می‌شود و پکیج‌ها باید با آن هماهنگ شوند. روشن‌ترین نمونه‌ی اخیر، Revit 2025 است: این نسخه با Dynamo 3.0 ارائه می‌شود که بر پایه‌ی .NET 8 اجرا می‌شود و راهنمای خود Dynamo تصریح می‌کند پکیجی که به .NET 8 منتقل شده، در نسخه‌های قدیمی‌تر Dynamo بارگذاری نمی‌شود. دفتری که Revit 2024 و Revit 2025 را هم‌زمان استفاده می‌کند، ممکن است به دو نسخه از یک پکیج نیاز داشته باشد.

قاعده‌ی عملی از همین‌جا به دست می‌آید. نسخه‌ی Dynamo و پکیج‌هایی را که هر گراف با آن‌ها تست شده ثبت کنید، پیش از انتقال دفتر به نسخه‌ی جدید، کتابخانه‌ی گراف‌ها را در یک پروژه‌ی آزمایشی تست کنید و گراف‌های نسخه‌ی قبلی را برای پروژه‌هایی که در همان نسخه می‌مانند، نگه دارید. نوشته‌ی هزینه‌ی توسعه پلاگین رویت همین تغییر .NET 8 را از سمت افزونه‌ها بررسی می‌کند.

چه زمانی گراف باید به افزونه‌ی کامپایل‌شده تبدیل شود

برنامه‌نویس در برابر مانیتوری با کد، برای تبدیل گراف Dynamo به افزونه‌ی کامپایل‌شده

گراف تا زمانی ابزار مناسبی است که اجرای دستی آن از یک پوشه‌ی مشترک قابل‌قبول باشد. زمان این تغییر را می‌توان از سه نشانه تشخیص داد:

  • تعداد زیاد کاربران. وقتی کار هر روز توسط افرادی اجرا می‌شود که هرگز Dynamo را باز نمی‌کنند و نسخه‌های فایل .dyn باید روی هر رایانه هماهنگ نگه داشته شوند، توزیع به‌تنهایی به مشکل اصلی تبدیل می‌شود.
  • سرعت. Dynamo روی رشته‌ی اصلی رابط کاربری رویت (UI Thread) اجرا می‌شود و در نتیجه، یک گراف سنگین روی مدل بزرگ، رویت را تا پایان اجرا متوقف نگه می‌دارد.
  • یکپارچگی یا رابط کاربری. کار به یک پنجره‌ی اختصاصی، اتصال به یک سیستم بیرونی یا قاعده‌ای نیاز دارد که در هر ذخیره‌سازی اعمال شود، کارهایی که گراف به‌طور قابل‌اعتماد انجام نمی‌دهد.

در این مرحله، گراف هدر نمی‌رود. گرافی که ماه‌ها در پروژه‌های واقعی اجرا شده، بهترین مشخصات فنی برای شروع یک پروژه‌ی توسعه پلاگین رویت است، زیرا هر حالت استثنایی که از آن عبور کرده، از پیش در آن ثبت شده است.

ساخت داخلی یا کمک بیرونی

اگر اسکریپتی فقط برای یک پروژه لازم است و پس از آن دیگر اجرا نمی‌شود، سفارش توسعه‌ی اختصاصی آن، چه به ما و چه به هر تیم دیگری، منطقی نیست. یک گراف ساده با یک پکیج آماده، یا حتی انجام یک‌باره‌ی کار به‌صورت دستی، ارزان‌تر و سریع‌تر است. توسعه اسکریپت اختصاصی Dynamo زمانی ارزش هزینه‌ی خود را دارد که یک فرآیند مشخص، بارها، توسط افراد مختلف و در پروژه‌های مختلف تکرار شود.

یکی از پروژه‌های خود ما دقیقاً همین الگو را داشت: فرآیندی که به‌صورت دستی حدود دو هفته و گاهی نزدیک به یک ماه طول می‌کشید، پس از تبدیل‌شدن به یک ابزار خودکار، به حدود ۱۰ دقیقه رسید. آنچه از بیرون یک دکمه به نظر می‌رسید، بر اساس همان دکمه ساخته نشده بود، بلکه حاصل هفته‌ها تصمیم کوچک پشت آن بود، همان تصمیم‌هایی که در یک اسکریپت آزمایشی هنوز گرفته نشده‌اند.

اگر در دفتر کسی Dynamo را می‌شناسد و برای نگهداری کتابخانه وقت دارد، گراف‌ها را داخلی بسازید و از کمک بیرونی برای بازبینی یا برای گراف‌هایی استفاده کنید که از توان Dynamo فراتر رفته‌اند. اگر کتابخانه مسئولی ندارد، گراف‌هایی که پس از ارتقای بعدی از کار بیفتند، دیگر اصلاح نمی‌شوند و این همان نقطه‌ای است که باید نگهداری آن‌ها را به کسی سپرد که این کار جزو وظایف اوست، چه یک نیروی جدید و چه تیمی که ابزارهای دیجیتال اختصاصی می‌سازد. چه نام آن را توسعه، ساخت یا طراحی اسکریپت Dynamo بگذارید، آنچه اهمیت دارد، مسئول مشخص برای نگهداری آن است.

جمع‌بندی

گراف Dynamo زمانی ارزش واقعی خود را نشان می‌دهد که برای یک کار مشخص، تکرارشونده و قاعده‌مند ساخته شود، نه زمانی که هدف فقط داشتن نوعی خودکارسازی باشد. گرافی که روی چند مدل واقعی تست شده، بدون سازنده‌ی خود از Dynamo Player اجرا می‌شود، نسخه‌ی وابستگی‌های خود را ثبت کرده و مرز روشنی با افزونه دارد، یک‌بار ساخته می‌شود و به کار خود ادامه می‌دهد. هر گراف دیگری هنوز یک آزمایش است و با رفتن سازنده‌ی آن یا ارتقای رویت، باید دوباره ساخته شود.

پرسش‌های متداول

اسکریپت Dynamo در رویت دقیقاً چیست؟

گرافی از نودهای متصل به هم که با استفاده از Revit API یک کار مشخص را در رویت اجرا می‌کند، در نتیجه آن کار دیگر نیازی به انجام دستی در هر نوبت ندارد. کاربرد آن از مرتب‌سازی شیت‌ها تا کنترل کیفیت مدل را شامل می‌شود.

آیا اسکریپت‌نویسی Dynamo همان برنامه‌نویسی با Revit API است؟

به‌طور کامل نه. Dynamo یک لایه‌ی بصری روی بخشی از Revit API است. برای منطق ساده و خطی همین لایه کافی است؛ برای منطق پیچیده‌تر یا بخش‌هایی از API که نود آماده ندارند، یک نود Python در همان گراف یا یک افزونه‌ی کامل لازم می‌شود.

آیا افراد بدون یادگیری Dynamo می‌توانند اسکریپت را اجرا کنند؟

بله. Dynamo Player در زبانه‌ی Manage رویت، گراف‌ها را از یک پوشه‌ی مشترک و بدون بازکردن ویرایشگر Dynamo اجرا می‌کند و ورودی‌های تعریف‌شده در گراف را از کاربر می‌پرسد. گراف باید برای این کار ساخته شده باشد، با ورودی‌های نام‌گذاری‌شده و بدون نیاز به ویرایش در داخل گراف.

آیا اسکریپت Dynamo پس از ارتقای رویت همچنان کار می‌کند؟

نه همیشه. هر نسخه‌ی رویت با نسخه‌ی مشخصی از Dynamo ارائه می‌شود و گرافی که به پکیج‌های شخص‌ثالث وابسته است، اگر آن پکیج‌ها به‌روزرسانی نشده باشند، ممکن است از کار بیفتد. انتقال Revit 2025 به Dynamo 3.0 و .NET 8 نمونه‌ی اخیر آن است. ثبت نسخه‌ی پکیج‌ها و تست کتابخانه پیش از ارتقای دفتر، ریسک را کاهش می‌دهد، اما آن را از بین نمی‌برد.

چه زمانی اسکریپت Dynamo باید به افزونه‌ی کامپایل‌شده تبدیل شود؟

وقتی کار هر روز توسط افرادی اجرا می‌شود که Dynamo را باز نمی‌کنند، وقتی یک گراف سنگین روی مدل‌های بزرگ رویت را متوقف می‌کند، یا وقتی ابزار به رابط کاربری اختصاصی، اتصال به سیستم بیرونی یا قاعده‌ای نیاز دارد که در هر ذخیره‌سازی اعمال شود.

آیا برای اسکریپت‌نویسی Dynamo حتماً به برنامه‌نویس نیاز داریم؟

برای یک گراف ساده و یک‌باره، خیر. برای گرافی که در پروژه‌های مختلف استفاده می‌شود و باید در برابر مدل‌های واقعی و نامرتب پایدار بماند، تجربه در Revit API و منطق برنامه‌نویسی، نتیجه را قابل‌اعتمادتر می‌کند.

هزینه‌ی توسعه اسکریپت اختصاصی Dynamo به چه عواملی بستگی دارد؟

به پیچیدگی منطق، تعداد حالت‌های استثنایی که باید پوشش داده شوند و میزان تست لازم روی مدل‌های واقعی، نه به تعداد نودهای روی صفحه. گرافی که فقط حالت ساده را پوشش می‌دهد، ارزان‌تر است و در عمل قابلیت اطمینان کمتری دارد.

چه زمانی توسعه اسکریپت اختصاصی ارزش ندارد؟

وقتی کار فقط یک‌بار و برای یک پروژه لازم است. در این حالت، یک گراف ساده با یک پکیج آماده یا انجام دستی کار، ارزان‌تر و سریع‌تر از سفارش توسعه‌ی اختصاصی است.

بازگشت به بالا

قدم بعدی

اولین چیزی که می‌خواهید تغییر کند چیست؟

از جریان کاری‌تان بگویید، کجا زمان از دست می‌رود و کجا خطا ایجاد می‌شود. بعد تصمیم می‌گیریم چه چیزی باید ساخته شود. اگر راه‌حل ابزار نباشد، همان ابتدا می‌گوییم.

اگر فقط به‌دنبال یک قالب آماده یا پلاگین پیش‌ساخته هستید و نمی‌خواهید فرآیندتان بررسی شود، احتمالاً جای درستی نیامده‌اید.