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

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

От 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

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