Renga STDL: краткий обзор языка для расширения функциональности программы Renga

Renga — программа для проектирования зданий, с помощью которой можно создать трёхмерную модель, включающую инженерные конструкции, коммуникации и всю информацию о них. Затем из этой модели можно получить чертежи и спецификации. Renga работает под Windows и написана на C++.

В первых версиях приложения мы разрабатывали инструменты для архитектурно-строительного проектирования, у каждого из которых есть свои параметры, особенности, правила построения геометрии, отношения, но число их относительно невелико.

От Renga Architecture к Renga Professional

От Renga Architecture к Renga Professional

Когда пришло время развития функциональности для проектирования внутренних инженерных сетей стало понятно, что нужно бесконечно увеличивать число по сути однотипных, но в то же время совершенно разных по форме объектов. Если вы когда-нибудь попадали в отдел инженерной сантехники в строительном магазине, то представляете о чём речь. 

Зал магазина инженерной сантехники

Зал магазина инженерной сантехники

А теперь представьте, что для каждого типа фитинга нужно создать параметризованную модель на C++… 

В общем, мы стали искать способы, как развивать программу и наращивать функциональность, не утонув в бесконечной номенклатуре оборудования.

На помощь пришли скрипты. С их помощью можно:

  • Отделить код на C++ от шаблонов стилей объектов, которые используются для создания объектов.

  • Не тратить время на компиляцию при создании нового шаблона стиля (о компиляции Renga читайте здесь).

  • Отдать написание шаблонов стилей аналитикам, которые по собственному ТЗ могут написать скрипт.

Развивая внутреннюю функциональность для написания скриптов, мы пришли к тому, что ее нужно сделать общедоступной.

В итоге, мы выпустили язык описания шаблонов стилей Renga STDL, с помощью которого любой человек, знакомый с основами программирования и геометрии, может написать свой шаблон стиля.

Renga STDL — это предметно-ориентированный язык на основе Lua. Он предоставляет средства для создания шаблонов стиля, используя встроенные возможности Lua 5.4.6, а также формат JSON для определения набора параметров стиля объекта. STDL также предоставляет набор функций Style Template API для взаимодействия с Renga.

Теперь, чтобы добавить в Renga новую категорию инженерного оборудования, нужно:

  • описать параметры объекта и порты подключения к инженерной системе в JSON-файле;

  • описать геометрию объекта в Lua-скрипте с использованием функций двумерного и трёхмерного моделирования Style Template API и передать её стилю;

  • с помощью специального сборщика за несколько секунд собрать файл шаблона стиля в формате RST;

  • импортировать категорию в Renga Professional.

Несмотря на то, что скриптовых языков много, выбор достаточно быстро ограничился двумя вариантами: Python и Lua.

Оценив эти факторы мы выбрали Lua. Скорее всего, если пользователи уже владеют Python, то освоение Lua не займёт много времени. А задач, в которых пришлось бы применять множество библиотек Python, мы не смогли найти. 

Выполнение скрипта происходит в момент:

  • вычисления геометрии объекта для его отображения;  

  • получения положения портов подключения оборудования инженерным системам;

  • получения расчётных характеристик, таких как габаритные размеры. 

Функции Lua вызывают соответствующие функции C3D Modeller для выполнения геометрических операций и функции ядра самой Renga для передачи результатов выполнения скрипта в бизнес-логику Renga. Дополнительную информацию об этом можно найти в докладе, представленном на конференции C3Days 2021, который был подготовлен в начале подготовки скриптов к передаче пользователям.

Утилита RstBuilder, предназначенная для сбора шаблона стиля из набора файлов, при запуске проверяет корректность синтаксиса скрипта и структуры описания параметров и портов в формате JSON.

После импорта категории в проект, ошибки времени выполнения, если они есть, записываются в лог приложения. Объекты, в процессе построения которых произошла ошибка времени выполнения, отображаются в приложении желтым треугольником, так же как другие объекты приложения, для которых невозможно построить геометрическое представление.

В результате для рядового пользователя Renga работа с объектами, полученными с помощью скриптов, внешне не отличается от работы с остальными объектами. 

Работа пользователя

Работа пользователя

Продвинутые пользователи или, скорее, инженеры по внедрению, могут использовать в работе не только те категории объектов инженерных систем, которые идут в поставке, но и с помощью Renga STDL создавать уникальные.

Работа инженера по внедрению

Работа инженера по внедрению

В Renga есть и другие стили, создание шаблонов которых будет в будущем переведено на написание с помощью Renga STDL, в частности стили армирования. Для этого Style Template API будет расширяться.

Текущую версию Renga STDL можно скачать и опробовать уже сейчас, скачав Renga Professional, Renga STDL SDK и ознакомившись с документацией.

На этом заканчиваем обзор. Если вам интересны подробности выбора языка или реализации, пишите в комментариях.

© Habrahabr.ru