ScriptManagerPlugin
(SMP Renga)
Инструментальный менеджер скриптов для BIM-системы Renga 9.1 и выше. Позволяет создавать кнопки, контекстные меню и выпадающие списки без перекомпиляции плагина — скрипты C# компилируются "на лету" при каждом запуске.
Основные плюсы плагина
Мгновенное тестирование кода (Hot Reload)
Технология «горячей перезагрузки» позволяет проверять работу скрипта сразу после сохранения текстового файла, избавляя от изнурительной необходимости каждый раз перезапускать саму Renga и заново открывать проект для тестирования одной строчки кода.
Динамическое построение интерфейса
Разработчику больше не нужно тратить время на сложное программирование элементов управления — плагин автоматически превращает обычные папки на вашем компьютере в красивые кнопки, выпадающие списки и контекстные меню на панели инструментов программы.
Безопасность и стабильность
В отличие от скомпилированных DLL-плагинов, которые при ошибке могут «уронить» всю программу и привести к потере данных, Script Manager изолирует ошибки скриптов, выводя их в консоль, при этом сама Renga продолжает стабильно работать.
Снижение порога входа для новичков
Плагин полностью избавляет пользователя от необходимости устанавливать громоздкие среды разработки (например, Visual Studio), изучать шаблоны проектов и разбираться с настройкой компилятора — писать код можно даже в стандартном Блокноте.
Идеальная синергия с ИИ
Формат простых текстовых скриптов позволяет использовать ChatGPT или Gemini в режиме «вайбкодинга» — вы просто копируете предложенный нейросетью код, тут же тестируете его и просите ИИ исправить ошибку, не отвлекаясь на технические сложности сборки.
Готовый контекст выполнения
Плагин самостоятельно инициализирует все необходимые базовые переменные (например, RengaApp для доступа к текущему проекту) и предоставляет готовую функцию логирования Print, позволяя инженеру с первой же строки кода сосредоточиться на решении своей конкретной задачи.
Структура папок
Плагин автоматически сканирует папку Scripts и строит интерфейс Renga на основе найденных директорий:
- *.button — Одиночная кнопка (выполняет скомпилированный код).
- *.folder — Выпадающий список или подменю.
- *.context — Корневое меню по правому клику мыши.
- *.actions — Панель действий Renga при выделении объектов.
Настройки внешнего вида (config.json)
В каждой папке вы можете создать файл конфигурации в формате UTF-8 для управления отображением кнопок, подсказок и областей видимости.
{
"Title": "Моя Кнопка",
"ToolTip": "Развернутое описание того, что делает эта кнопка",
"ViewType": "View3D",
"ShowCase": "Scene"
}
Undefined (Везде), View3D (3D Вид), Drawing (Чертеж), Specification (Спецификация), ProjectExplorer (Обозреватель).
Selection (при клике на выделенный объект), Scene (при клике на свободную область).
Варианты написания скриптов
Вариант 1. Простой скрипт
Идеально для быстрых автоматизаций. Код пишется без объявления классов. Неявные using-инструкции подключены автоматически.
using System.Windows.Forms;
if (RengaApp.Project != null) {
Print("Работает!");
string pName = RengaApp.Project.ProjectInfo.Name;
MessageBox.Show($"Открыт проект: {pName}");
}
Вариант 2. Скрипт на классах
Для сложных, многофайловых скриптов с поддержкой IntelliSense. Плагин компилирует скрипт как полноценную изолированную сборку.
using Renga;
namespace MyScripts {
public class MyCommand {
public void Execute(
IApplication RengaApp,
Action<string> Print)
{
Print("Выполнено из C# класса!");
}
}
}
Фоновые задачи и STA-ограничения
Renga API является однопоточным (STA). Вызов методов API напрямую из фонового потока запрещен. Плагин предоставляет безопасный метод SafeTask / SafeTaskWithUI и RunUI для расчетов в фоне с выводом в поток интерфейса.
Все сборки компилируются в изолированном контексте CollectibleAssemblyLoadContext (.NET 8), благодаря чему старые версии скриптов автоматически выгружаются из памяти при изменении кода на диске.
Особенности компиляции и кэширования
Плагин SMP использует технологию Roslyn для динамической компиляции C# кода "на лету" без остановки работы Renga. Скомпилированные сборки кэшируются в памяти через CollectibleAssemblyLoadContext (.NET Core / .NET 8).
При внесении изменений в файл скрипта на диске, SMP автоматически обнаруживает изменения, выгружает старую сборку из памяти и компилирует новую. Это позволяет вести разработку скриптов в Visual Studio Code или Notepad++ прямо во время работы Renga!
- Автоматическое подключение пространств имен Renga API.
- Поддержка разделения на папки (меню и подменю).
- Возможность задавать контекст видимости кнопки (3D вид, чертеж, спецификация).
- Встроенные методы для вывода логов и сообщений без блокировки UI.
Отладка и вывод информации
SMP предоставляет встроенный метод Print(string message), который перенаправляет ваш текст напрямую в Окно сообщений Renga.
Это позволяет отлаживать скрипты и информировать пользователя о статусе расчетов без зависаний интерфейса и модальных окон MessageBox.
public void Execute(IApplication RengaApp, Action<string> Print) {
Print("Начинаем расчет...");
// ... ваш код ...
Print("Готово! Обработано 150 элементов.");
}
Загрузка скриптов по сети (Remote Scripts)
Плагин поддерживает гибридный режим работы: он может загружать исполняемый код C# напрямую с удаленного сервера. Данный функционал избавляет от необходимости распространять файлы с кодом локально и предотвращает возможность утечки исходного кода скриптов.
Как это работает:
1. Веб-сервер с доступом к локальной сети.
При ошибках обращения к серверу плагин покажет соответствующее системные уведомления с ошибкой.
2. Локальная папка-пустышка.
Папка располагается на локальном компьютере в папке Script и содержит только:
• файл иконку - icon.png
• файл описания плагина - config.json
• файл для загрузки данных с сервераremote_files.json)
3. Файлы-скрипты на сервере.
На веб-сервере создается папка SMPRenga, в которой воспроизводится структура папок скриптов с самими скриптами.