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-файле;

{     "metadata":{       "defaultName": "Block",       "description": "Просто прямоугольный параллелепипед с портом",       "version": "1.0.0",       "author": "Renga Software"    },     "styleParameters":[        {           "name": "Dimensions",           "text": "Габаритные размеры",           "params": [             {               "name": "Width",               "text": "Ширина",               "type": "Length",               "default": 600             },             {               "name": "Depth",               "text": "Глубина",               "type": "Length",               "default": 600             },             {               "name": "Height",               "text": "Высота",               "type": "Length",               "default": 850             }           ]        }     ],     "ports": [        {            "name": "Gas",            "text": "Газ",            "flowDirection": "Inlet",            "systemCategories": [                "Gas"            ]        }    ]  }
  • описать геометрию объекта в Lua-скрипте с использованием функций двумерного и трёхмерного моделирования Style Template API и передать её стилю, например создание прямоугольного параллелепипеда и передача его стилю:

local parameters = Style.GetParameterValues()  local width = parameters.Dimensions.Width local depth = parameters.Dimensions.Depth local height = parameters.Dimensions.Height  function MakeBody()   return CreateBlock(width, depth, height):Shift(0, 0, - height / 2) end     local solid = MakeBody() solid:Shift(0, 0, height / 2)     Style.SetDetailedGeometry(ModelGeometry():AddSolid(solid))
  • с помощью специального сборщика за несколько секунд собрать файл шаблона стиля в формате RST;

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

Стиль, полученный из категории

Стиль, полученный из категории

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Документация Renga STDL

Документация Renga STDL

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


ссылка на оригинал статьи https://habr.com/ru/articles/765010/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *