
Щупаем внутренности Renga. В этой статье залезу под капот к отечественному ПО и разберу его API. Сравню с западным конкурентом и заставлю подружиться с ИИ.
В этой статье:
посмотрим на суть API - тут будет не пересказ примеров из SDK, а общий взгляд на технологию
сравним с Revit API
подключим ии-агента к ренге и заставим работать
Все материалы из этой статьи я выложил в репозиторий.
Почему это важно?
Разработка плагинов для BIM-систем (на примере Revit) традиционно требует:
глубокого знания API;
компиляции сборок;
использование отдельных костылей при отладке
Что если автоматизировать сам процесс разработки? ИИ-агент, который изучает API, пишет скрипты, тестирует их и исправляет ошибки - это рабочий пайплайн, который я реализовал для Renga.
В этой статье покажу, как архитектура Renga API делает такую интеграцию возможной, и как вы можете повторить этот опыт.
Renga API: краткий обзор и сравнение Revit API
Renga - это наш ответ Revit. Представляет из себя систему для автоматизации проектирования и разработки трехмерных строительных моделей.
Сложно рассматривать ренгу в отрыве от ее западного аналога. Поэтому периодически тут будут отсылки и сравнения.
Архитектура: почему COM - это преимущество
Renga API построен на COM - это фундаментальное решение влияет на всю архитектуру интеграции.
COM-интерфейс (Component Object Model Interface) - это стандартный способ описания взаимодействия между программными компонентами в операционных системах Windows (и не только), разработанный компанией Microsoft. COM-интерфейс позволяет одной программе вызывать функции другой, даже если они написаны на разных языках
Что с Revit API? Он работает иначе: плагины загружаются в AppDomain - изолированную доменную среду выполнения .NET внутри процесса Revit. Код плагина выполняется в том же процессе, что и само приложение, с ограниченным доступом извне.
Почему COM - это плюс для ИИ?
Агент может управлять Renga как внешним процессом: запускать, закрывать, отправлять команды.
Не нужно встраиваться в процесс приложения — достаточно знать COM-интерфейсы.
Полный доступ к модели через внешние вызовы.
Немного посмотрим на SDK
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.
Два сценария работы с 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
COM-природа Renga API делает его доступным для ИИ-агентов:
Глубокая интеграция - агент может открывать/закрывать программу, управлять проектами
Полный доступ к модели - через внешние команды без необходимости встраивания в процесс
Библиотека renga_ai: Python-скиллы для агента
В этой статье раскрою именно внешнюю автоматизацию с помощью python.
Для интеграции ИИ-агентов с Ренгой я начал создавать библиотеку инструкций и 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.
Минимальный пример: как начать работать с Renga
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

Ключевой скилл и общий pipeline работы
Для добавления нового функционала реализован 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 и написания плагинов. Он сам пишет логику, сам открывает модель и запускает скрипт ловит ошибки и вносит изменения.
Также есть потенциал для использования такого агента как ассистента при ежедневной работе в программе.
RengaSTDL API - делаем семейства с помощью ИИ

В Renga нет редактора для создания параметрических семейств как в Revit. Разработчики предлагают создавать "семейства "или "шаблоны стилей" с помощью кода на Lua и спецификаций json.
Раньше люди насмехались и негодовали - мало кто готов учить язык программирования, чтобы создать светильник или насос. Был слишком большой порог входа.
Но с искусственным интеллектом на это можно взглянуть по новому.
Что такое STDL
RengaSTDL - отдельный SDK для создания параметрических шаблонов стилей. Основан на Lua + JSON.
Назначение STDL - создавать параметрические объекты с вычисляемой геометрией
Агент для генерации семейств
В моей библиотеке предусмотрена основа для изучения и создания семейств с помощью ИИ.
Я поместил документацию, примеры и вспомогательные файлы в RengaSTDL_Docs/
Идея проста - агент генерирует нам код на lua, где описывает геометрию, создает рядом json и запускает специальный скрипт RstBuilder.exe из sdk.
На выходе получаем файл .rst, который грузим в Ренгу и наслаждаемся.
Вот такой стул был сгенерирован по простому промпту. Агент даже добавил параметризацию.

Как всем этим пользоваться?
Просто скачайте репозиторий renga_ai и дайте прочитать своему агенту README.md и AGENTS.md. После этого он будет готов к боевым задачам.
В качестве агента можно попробовать qwen code - сейчас он бесплатный и доступен без ограничений. Дневных лимитов должно хватать, если работать умеренно.
Заключение
Тут опишу только явные преимущества и плюсы Renga API и STDL:
Гибкость Renga API - COM-интерфейс позволяет управлять приложением из любого процесса.
Штатная поддержка Python - не нужно «костылей» для скриптов.
ИИ-агент как разработчик - сам изучает API, пишет код, тестирует, исправляет.
Lua для семейств - неожиданно мощный инструмент в руках ИИ.
Потенциал:
Автоматизация рутинных задач в BIM;
Быстрое прототипирование плагинов;
Обучение новых разработчиков через ИИ-ассистента;
Генерация библиотек компонентов по ТЗ.
Renga дает приятный опыт взаимодействия с API. Надеюсь, это направление будет развиваться и мы сможем получить иной подход к взаимодействию с CAD софтом.
Моя библиотека renga_ai - позволяет удобно связать ИИ-агента и дает полезные инструменты для работы и изучения
Материалы и ссылки
Renga SDK - набор разработчика Renga API
Renga STDL SDK - комплект разработчика шаблона стилей (семейств)
