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 и ознакомившись с документацией.

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

Источник: https://habr.com/ru/companies/ascon/articles/765010/


Интересные статьи

Интересные статьи

UNIX, SGI и динозавры. Обзор одного из самых необычных файловых менеджеров.
Всем доброго времени суток!Публикую обзор книги "Изучаем Python" от автора Марка Лутца.Стоит читать? Да! Почему? Опишу в статье.Python - хороший первый язык программирования, а это хорошая первая...
Multiplayer Online Battle Arena (MOBA) — жанр компьютерных игр, сочетающий в себе элементы стратегий в реальном времени и компьютерных ролевых игр. Самыми известными играми в этом ...
25 февраля автор курса «Разработчик C++» в Яндекс.Практикуме Георгий Осипов рассказал о новом этапе языка C++ — Стандарте C++20. В лекции сделан обзор всех основных нововведений Станд...
«Пять экзабайт информации создано человечеством с момента зарождения цивилизации до 2003 года, но столько же сейчас создаётся каждые два дня». Эрик Шмидт Datatable — это Python-библиотека дл...