Система для проектирования зданий и сооружений Renga активно разрабатывается, в ней есть инструменты для архитекторов, конструкторов КЖ и КМ, инженеров ВК, ОВ, ЭО и ЭС. С каждой версией система, которая сейчас разделена на Renga Architecture, Renga Structure и Renga MEP, а совсем скоро станет единой, наращивает функциональность. Вместе с этим растет и меняется, становится все более востребованным API. Ведь в Renga можно создать информационную модель здания, но нельзя (и не планируется) получить красивый рендер, смету на строительство или расчет трубопроводов. Конечно, можно экспортировать модель из Renga в такие распространенные форматы, как OBJ, IFC, STEP и многие другие, но, чтобы обойтись без посредников и избежать возможно неверной интерпретации данных при экспорте/импорте, лучше действовать через API.

Renga MEP

Изначально, когда встал вопрос о создании API Renga (после выпуска первой версии Renga Architecture), мы ориентировались только на C++ API, исходя из требований, которые у нас появились на тот момент.

По мере развития Renga мы стали получать вопросы от разработчиков о том, можно ли писать на C# и других языках под Renga и какие версии Visual Studio поддерживаются.

Тогда, проанализировав доступность API для пользователей, мы задумались о смене технологии.

Дело в том, что C++ API довольно “жесткое”. Оно сильно зависит от компилятора, т.е. если SDK собрано компилятором Visual Studio, то вероятно вы не сможете компилировать под него с помощью, например, gcc, поскольку name mangling не стандартизован, могут быть различия в реализации виртуальных таблиц, шаблонов и т.п. В самой Visual Studio тоже могут быть различия в настройках компиляции и поддержке стандарта от версии к версии.

В целом с этим можно было бы жить, например, используя по минимуму виртуальные функции (и как следствие наследование), не используя шаблоны и зафиксировав на определенный промежуток времени используемый стандарт и среду разработки.

Кроме того, мы могли бы создать несколько версий API для разных сред и/или версий системы.
Но все-таки мы решили, посмотреть в другую сторону. И после исследований выбрали COM.
Этот стандарт разработан в далеком 1993 году, то есть он не просто стар, а суперстар) Но он позволил нам предоставить пользователям единое API, используя которое можно писать плагины на C++, C# или другом COM-совместимом языке, кроме того через COM API можно обращаться к Renga из сторонних приложений, в том числе написанных на языках с динамической типизацией, например, на Python.

Справка Renga API

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

Итак, для написания расширения для Renga на любом языке вам понадобятся:

  1. Renga и понимание того, что именно вы хотите автоматизировать при работе с системой.
  2. Renga Software Development Kit.
  3. Microsoft Visual Studio. Любая версия младше 2012.
  4. Знание основ программирования.

О системе Renga и ее возможностях вы можете узнать на сайте системы, в справке, в блоге разработчиков, а также в группах в ВК и Facebook, там выкладываются анонсы и записи вебинаров, а также можно найти реальных пользователей системы и пообщаться с ними. Поэтому пункт ознакомления с системой мы опустим, но уточним какие требования сейчас может удовлетворить API.

С помощью Renga API можно:

  • выбирать объекты в модели и обрабатывать событие выбора объектов в Renga;
  • получать и изменять параметры объектов,
  • получать материалы и расчетные характеристики объектов;
  • создавать и назначать свойства объектов;
  • добавлять команды на Основную панель, на панель Действия, в контекстное меню и т.д.;
  • получать данные, необходимые для рендеринга модели;
  • управлять видимостью объектов и визуальным стилем в 3D Виде и на планах уровней;
  • импортировать и экспортировать модель в формат IFC;
  • экспортировать чертежи в форматы DWG/DXF;
  • создавать, открывать, закрывать или сохранять файл проекта,
  • получать геометрию армирования, аналитические кривые стержней в объектах с армированием и отдельных арматурных изделиях.
  • получать геометрию трасс.

На данный момент вы не сможете создать из API новый объект, это есть в планах, но не на ближайший выпуск.

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

Если бы мы продолжили работу только над C++ API набор возможностей скорее всего был бы таким же, но мы практически уверены, что не все расширения Renga появились бы на свет. Кстати, список известных нам расширений вы можете посмотреть на сайте.

Теперь давайте посмотрим, что в итоге мы предлагаем своим пользователям в плане API. Чтобы получить Renga SDK, вам нужно просто его скачать. А чтобы им воспользоваться вы можете изучить и использовать примеры, которые есть в архиве.

image

В SDK есть примеры для написания расширений на C++ и C#, а также примеры подключения к Renga на Python. В справке Renga API в разделах How To перечислены примеры, в которых применены приемы из этого раздела.

Примеры плагинов C++ и C# демонстрируют почти все возможности API, в примерах на Python вы найдёте, как с его помощью создать пользовательское свойство в Renga из стороннего приложения, а также как автоматизировать открытие, сохранение и закрытие проекта Renga с помощью скрипта.

В настоящее время Renga может загружать плагины из двоичных DLL-библиотек C ++ и сборок .NET, а с помощью динамически типизированных языков, таких как Python, VBScript, 1С и других можно обращаться из сторонних программ к Renga API для получения необходимых данных.
В общем, мы довольны переходом на COM API и возможностями, которые он открыл для наших пользователей.

Любое расширение Renga, которое вызывается из Renga, должно состоять из бинарного файла плагина и xml-файла с расширением .rndesc, со следующим содержанием:

<RengaPlugin>
   <!-- Имя расширения -->
   <Name>Best Plugin</Name>
   <!-- Версия расширения -->
   <Version>1.0</Version>
   <!-- Информация о правообладании -->
   <Copyright>Copyright text</Copyright>
   <!-- Допустимая версия Renga API -->
   <RequiredAPIVersion>2.3</RequiredAPIVersion>
   <!-- Тип расширения cpp/net -->        
   <PluginType>Plugin type</PluginType>
   <!-- Имя вызываемого файла -->                     
   <PluginFilename>Best_Plugin.dll</PluginFilename> ->
   <Vendor>Renga</Vendor>                           
</RengaPlugin>

Чтобы подключить расширение к Renga вам нужно установить или скопировать его в папку установки Renga\Plugins. Информация, которая содержится в файле .rndesc отображается во вкладке Расширения окна Настроек Renga.

Мы уверены, что вооружившись полученными знаниями, и своими знаниями программирования, написать расширение для Renga под силу любому разработчику. Но если у вас есть идея расширения Renga, а с ее реализацией возникли проблемы, пишите на форуме или регистрируйте запрос в ServiceDesk. Мы будем рады вопросам!