- BrainTools - https://www.braintools.ru -

Щупаем внутренности Renga. В этой статье залезу под капот к отечественному ПО и разберу его API. Сравню с западным конкурентом и заставлю подружиться с ИИ.
В этой статье:
посмотрим на суть API – тут будет не пересказ примеров из SDK, а общий взгляд на технологию
сравним с Revit API
подключим ии-агента к ренге и заставим работать
Все материалы из этой статьи я выложил в репозиторий [1].
Разработка плагинов для BIM-систем (на примере Revit) традиционно требует:
глубокого знания API;
компиляции сборок;
использование отдельных костылей при отладке
Что если автоматизировать сам процесс разработки? ИИ-агент, который изучает API, пишет скрипты, тестирует их и исправляет ошибки [2] – это рабочий пайплайн, который я реализовал для Renga.
В этой статье покажу, как архитектура Renga API делает такую интеграцию возможной, и как вы можете повторить этот опыт [3].
Renga – это наш ответ Revit. Представляет из себя систему для автоматизации проектирования и разработки трехмерных строительных моделей.
Сложно рассматривать ренгу в отрыве от ее западного аналога. Поэтому периодически тут будут отсылки и сравнения.
Renga API построен на COM – это фундаментальное решение влияет на всю архитектуру интеграции.
COM-интерфейс (Component Object Model Interface) – это стандартный способ описания взаимодействия между программными компонентами в операционных системах Windows (и не только), разработанный компанией Microsoft. COM-интерфейс позволяет одной программе вызывать функции другой, даже если они написаны на разных языках
Что с Revit API? Он работает иначе: плагины загружаются в AppDomain – изолированную доменную среду выполнения .NET внутри процесса Revit. Код плагина выполняется в том же процессе, что и само приложение, с ограниченным доступом извне.
Почему COM – это плюс для ИИ?
Агент может управлять Renga как внешним процессом: запускать, закрывать, отправлять команды.
Не нужно встраиваться в процесс приложения — достаточно знать COM-интерфейсы.
Полный доступ к модели через внешние вызовы.
SDK (Software Development Kit) — это набор инструментов для разработки программного обеспечения под конкретную платформу, устройство или сервис.
Структура SDK (актуально для Renga API v2.46):
RengaSDK/
├── C++/Include/Renga/ # Заголовочные файлы для C++ плагинов
├── Net/ # .NET сборки для C# плагинов
├── Samples/
│ ├── C++/ # Примеры на C++ (18 проектов)
│ ├── C#/ # Примеры на C# (22 проекта)
│ └── Python/ # Python скрипты (2 примера)
├── tlb/RengaCOMAPI.tlb # COM type library
└── Docs/ # HTML документация
Главный файл – RengaCOMAPI.tlb. Это типизированная библиотека COM-интерфейсов, которая генерирует interop-сборки для удобной работы из .NET.
Даже при создании плагина на C# вы взаимодействуете с COM-объектами через .NET-обёртку (interop-слой), а не с нативным .NET API, как в Revit.
C++ – для нативных COM-плагинов;
C#/.NET – для .NET-плагинов через interop-слой ;
Python – для внешних скриптов автоматизации через COM.
Это важное отличие от Revit: Python в Renga – штатный документированный сценарий, а не сторонняя оболочка над .NET API.
Внутрипроцессный плагин – DLL (C++ или .NET) загружается в процесс Renga через XML-дескриптор .rndesc.
Внешняя автоматизация – отдельный процесс управляет Renga через COM Local Server или ROT (Running Object Table).
Для ИИ-агентов второй сценарий предпочтительнее: агент работает как отдельный процесс и не требует компиляции.
Короткая таблица сравнения Renga и Revit API
|
Аспект |
Renga API |
Revit API |
|---|---|---|
|
Базовая технология |
COM – внешний интерфейс |
.NET (RevitAPI.dll, RevitAPIUI.dll). Плагин загружается в appdomain |
|
Развертывание |
– сборка DLL- внешний скрипт на python |
только сборка dll |
|
Языки |
С++ |
только C# |
COM-природа Renga API делает его доступным для ИИ-агентов:
Глубокая интеграция – агент может открывать/закрывать программу, управлять проектами
Полный доступ к модели – через внешние команды без необходимости встраивания в процесс
В этой статье раскрою именно внешнюю автоматизацию с помощью python.
Для интеграции ИИ-агентов с Ренгой я начал создавать библиотеку [1] инструкций и python скриптов. Python скрипты становятся скиллами, которые может применить ИИ-агент.
Вот структура проекта
py_renga/
├── AGENTS.md # правила для агентов
├── AGENT_EXAMPLE.md # минимальный пример прямого использования `renga_api`
├── README.md
├── TODO.md # единый журнал задач, статусов и важных итогов
├── pyproject.toml
├── tlb/RengaCOMAPI.tlb # библиотека из SDK для рефлексии и генерации типов
├── tests/ # тесты
├── RengaAPI_Docs/ # локальная документация по Renga COM API
├── RengaSTDL_Docs/ # локальная документация по Renga STDL и материалы SDK
└── renga_api/ # основной Python-пакет проекта
├── core/ # COM-core, не зависящие от агентного сценария
└── skills/ # agent-facing wrappers поверх core-функций
Реализовано следующее:
подключение к приложению;
открытие и сохранение проекта;
доступ к модели и объектам;
создание и удаление объектов;
чтение параметров и свойств;
dump объектов и геометрии;
reflection по RengaCOMAPI.tlb.
import comtypes.client # Импортируем клиент COM для создания и вызова объектов Renga.
PROG_ID = "Renga.Application.1" # Указываем COM ProgID приложения Renga.
app = comtypes.client.CreateObject(PROG_ID) # Запускаем новый экземпляр Renga.
app.Visible = True # Делаем окно Renga видимым.
result = app.CreateProject() # Просим Renga создать новый пустой проект.
if result != 0: # Проверяем код возврата COM-метода.
raise RuntimeError(f"CreateProject failed with code {result}") # Падаем, если проект не создался.
project = app.Project # Берём текущий открытый проект из приложения.
model = project.Model # Получаем модель проекта.
objects = model.GetObjects() # Получаем коллекцию объектов модели.
print(f"Objects count: {objects.Count}") # Печатаем количество объектов в модели.
for index in range(objects.Count):
obj = objects.GetByIndex(index) # Получаем очередной объект модели.
print(getattr(obj, "Name", None)) # Получаем имя элемента
Для наглядности – простая схема взаимодействия ИИ с Renga
Для добавления нового функционала реализован reflection-driven подход при котором агент получает все данные об элементе, изучает документацию и сам пытается создавать скрипты.
Основной скилл – dump_object(com_object: Any) -> Dict[str, Any]
Дамп нужен, чтобы:
увидеть, какие интерфейсы реально поддерживает конкретный COM-объект;
не гадать по названиям интерфейсов и свойств;
получить реальные параметры, свойства и их значения;
понять, какие методы безопасно вызываются на чтение;
увидеть geometry-related интерфейсы;
сопоставить живой объект из модели с тем, что описано в RengaAPI_Docs/.
Вот порядок действий, которые выполняет агент при работе с библиотекой.
Получает список готовых скиллов через get_skills_catalog()
Находит подходящий скилл при применяет его. Если не находит, продолжает далее по списку.
Выполняет dump_object(...) или dump_selected_object() для элемента
Анализирует полученный дамп.
Находит интересующие интерфейсы и члены в RengaAPI_Docs и RengaCOMAPI.tlb.
Создает новый скрипт и запускает его.
Далее по кругу до достижения результата.
Посмотрим, как агент пишет слова с помощью стен. Работает бесплатный qwen code.
Более практичный пример – подсчет объема и площади стен

Такой агент отлично подходит для изучения Renga API и написания плагинов. Он сам пишет логику [4], сам открывает модель и запускает скрипт ловит ошибки и вносит изменения.
Также есть потенциал для использования такого агента как ассистента при ежедневной работе в программе.
В Renga нет редактора для создания параметрических семейств как в Revit. Разработчики предлагают создавать “семейства “или “шаблоны стилей” с помощью кода на Lua и спецификаций json.
Раньше люди насмехались и негодовали – мало кто готов учить язык программирования, чтобы создать светильник или насос. Был слишком большой порог входа.
Но с искусственным интеллектом [5] на это можно взглянуть по новому.
RengaSTDL – отдельный SDK для создания параметрических шаблонов стилей. Основан на Lua + JSON.
Назначение STDL – создавать параметрические объекты с вычисляемой геометрией
В моей библиотеке [1] предусмотрена основа для изучения и создания семейств с помощью ИИ.
Я поместил документацию, примеры и вспомогательные файлы в RengaSTDL_Docs/
Идея проста – агент генерирует нам код на lua, где описывает геометрию, создает рядом json и запускает специальный скрипт RstBuilder.exe из sdk.
На выходе получаем файл .rst, который грузим в Ренгу и наслаждаемся.
Вот такой стул был сгенерирован по простому промпту. Агент даже добавил параметризацию.
Просто скачайте репозиторий renga_ai [1] и дайте прочитать своему агенту README.md и AGENTS.md. После этого он будет готов к боевым задачам.
В качестве агента можно попробовать qwen code – сейчас он бесплатный и доступен без ограничений. Дневных лимитов должно хватать, если работать умеренно.
Тут опишу только явные преимущества и плюсы Renga API и STDL:
Гибкость Renga API – COM-интерфейс позволяет управлять приложением из любого процесса.
Штатная поддержка Python – не нужно «костылей» для скриптов.
ИИ-агент как разработчик – сам изучает API, пишет код, тестирует, исправляет.
Lua для семейств – неожиданно мощный инструмент в руках ИИ.
Потенциал:
Автоматизация рутинных задач в BIM;
Быстрое прототипирование плагинов;
Обучение [7] новых разработчиков через ИИ-ассистента;
Генерация библиотек компонентов по ТЗ.
Renga дает приятный опыт взаимодействия с API. Надеюсь, это направление будет развиваться и мы сможем получить иной подход к взаимодействию с CAD софтом.
Моя библиотека renga_ai [1] – позволяет удобно связать ИИ-агента и дает полезные инструменты для работы и изучения
Renga SDK [9] – набор разработчика Renga API
Renga STDL SDK [10] – комплект разработчика шаблона стилей (семейств)
Автор: i-savelev
Источник [11]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/28283
URLs in this post:
[1] репозиторий: https://github.com/i-savelev/renga_ai
[2] ошибки: http://www.braintools.ru/article/4192
[3] опыт: http://www.braintools.ru/article/6952
[4] логику: http://www.braintools.ru/article/7640
[5] интеллектом: http://www.braintools.ru/article/7605
[6] внимание: http://www.braintools.ru/article/7595
[7] Обучение: http://www.braintools.ru/article/5125
[8] Мой аккаунт на GitHub: https://github.com/i-savelev
[9] Renga SDK: https://rengabim.com/sdk/
[10] Renga STDL SDK: https://rengabim.com/stdlsdk/
[11] Источник: https://habr.com/ru/articles/1019272/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1019272
Нажмите здесь для печати.