К основному контенту

Непоследний обзор Renga API

Сегодня мы с вами поговорим об API. Оригинал статьи опубликован на Хабре, но нам кажется, что продублировать информацию в нашем блоге будет не лишним.
Renga активно разрабатывается, в ней есть инструменты для архитекторов, конструкторов КЖ и КМ, инженеров ВК, ОВ, ЭО и ЭС. С каждой версией система наращивает функциональность. Вместе с этим растет и меняется, становится все более востребованным API. Ведь в Renga можно создать информационную модель здания, но нельзя (и не планируется) получить красивый рендер, смету на строительство или расчет трубопроводов. Конечно, можно экспортировать модель из Renga, но, чтобы обойтись без посредников и избежать возможно неверной интерпретации данных при экспорте/импорте, лучше действовать через API.
Изначально, когда встал вопрос о создании 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.
Итак, для написания расширения для Renga на любом языке вам понадобятся:
  1. Renga и понимание того, что именно вы хотите автоматизировать при работе с системой.
  2. Renga Software Development Kit.
  3. Microsoft Visual Studio. Любая версия младше 2012.
  4. Знание основ программирования.
Мы надеемся, что читатели блога знакомы с Renga достаточно хорошо. Поэтому пункт ознакомления с системой мы опустим, но уточним какие требования сейчас может удовлетворить API.
С помощью Renga API можно:
  • выбирать объекты в модели и обрабатывать событие выбора объектов в Renga;
  • получать и изменять параметры объектов,
  • получать материалы и расчетные характеристики объектов;
  • создавать и назначать свойства объектов;
  • добавлять команды на Основную панель, на панель Действия, в контекстное меню и т.д.;
  • получать данные, необходимые для рендеринга модели;
  • управлять видимостью объектов и визуальным стилем в 3D Виде и на планах уровней;
  • импортировать и экспортировать модель в формат IFC;
  • экспортировать чертежи в форматы DWG/DXF;
  • создавать, открывать, закрывать или сохранять файл проекта,
  • получать геометрию армирования, аналитические кривые стержней в объектах с армированием и отдельных арматурных изделиях.
  • получать геометрию трасс.
На данный момент вы не сможете создать из API новый объект, это есть в планах, но не на ближайший выпуск.
Надо отметить, что Renga API расширяется по запросу пользователей, и если в этом списке вы не увидели возможности автоматизации, которая нужна вам, обратитесь к нам и мы обсудим вашу идею.
Если бы мы продолжили работу только над C++ API набор возможностей скорее всего был бы таким же, но мы практически уверены, что не все расширения Renga появились бы на свет. Кстати, список известных нам расширений вы можете посмотреть на сайте.
Теперь давайте посмотрим, что в итоге мы предлагаем своим пользователям в плане API. Чтобы получить Renga SDK, вам нужно просто его скачать. А чтобы им воспользоваться вы можете изучить и использовать примеры, которые есть в архиве.


В 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>MyPlugin</Name>
    <Version>1.0</Version>
    <Vendor>Vendor name</Vendor>
    <Copyright>Copyright text</Copyright>
    <RequiredAPIVersion>2.3</RequiredAPIVersion>
  <!-- Тип расширения cpp, net -->
<PluginType>Plugin Type</PluginType> <PluginFilename>MyPlugin.dll</PluginFilename> <Vendor>Vendor</Vendor> </RengaPlugin>
Чтобы подключить расширение к Renga вам нужно установить или скопировать его в папку установки Renga\Plugins. Информация, которая содержится в файле .rndesc отображается во вкладке Расширения окна Настроек Renga.
Мы уверены, что вооружившись полученными знаниями, и своими знаниями программирования, написать расширение для Renga под силу любому разработчику. Но если у вас есть идея расширения Renga, а с ее реализацией возникли проблемы, пишите на форуме или регистрируйте запрос в ServiceDesk. Мы будем рады вопросам!

Комментарии

Популярные сообщения из этого блога

Под крышей дома моего....

Крыша - это главный атрибут любого дома, а особенно частного загородного дома, коттеджа. Она не только призвана защищать его от дождя, снега и палящего солнца, но и является украшением дома и улицы, притягивает взгляд соседей и прохожих.
В Renga Architecture инструмент Крыша позволяет строить самые разные модели крыши с помощью небольшого набора команд, но с первого взгляда не всегда ясно, как сделать её той или иной формы. Поэтому мы, Арина Соболева (инженер тех.поддержки) и Анастасия Тян (технический писатель), решили рассказать о разных тонкостях и нюансах работы с этим инструментом на примере нескольких загородных домов -  от простого к сложному. Проще всего в Renga Architecture создать четырехскатную вальмовую крышу. Здесь не надо менять никаких параметров, крыша строится по точкам, непрерывно (Рисунок 1). Чтобы её создать, один раз задаем Параметры сегмента (Рисунок 2) и указываем 4 точки по углам здания на 3D Виде. Построение крыши всегда завершается нажатием клавиши ENTER или совм…

Renga в реальных примерах

Сегодня хотим поговорить о примерах проектов, выполненных в Renga. Когда присматриваешься к новой программе, всегда хочется знать, на что она способна, а наши системы довольно молодые, найти в открытом доступе модели и чертежи, выполненные в ней, не просто. Быть может, даже не все текущие пользователи Renga знают, что в поставке систем Renga Architecture и Renga Structure есть примеры таких проектов. Они лежат в папке Samples, которую можно найти в папке установки программы. Если вы уже установили Renga, но еще не видели этих проектов, рекомендуем заглянуть в эту папочку. Помимо этих примеров на сайте Grabcad.com есть пара десятков небольших проектов, выполненных нами в процессе работы над Renga. Там выложены проекты разной степени проработанности и детализации, но тем не менее они наглядно демонстрируют возможности Renga. Найти их можно по запросу renga в поиске grabcad.com. Все модели можно скачать в формате rnp, открыть в Renga и посмотреть, как они сделаны. Тем, кто совсем не зна…

Совместная работа: от теории к практике

Дорогие читатели! Просим вас простить нас за долгое отсутствие. Надеемся, что вы следили за Renga в других источниках и знаете, что здесь долго не было заметок не потому, что нам было не о чем сказать. Сегодня хочется поговорить о том, что мы так долго готовим, а многие так долго ждут. Это Совместная работа в Renga. Уже в ближайшее время вы сможете работать всем отделом над одним проектом в Renga, не разговаривая со своими коллегами (шутка, мы категорически рекомендуем общаться). Если коротко, то для совместной работы вам понадобится Renga Server и всего две кнопки в вашей Renga: Синхронизировать и Опубликовать. В общем-то можно отделаться парой слов. Но мы знаем наперед, что эти две команды (а вернее отсутствие каких-либо других команд) могут стать яблоком раздора, и чтобы это не привело к войне не возникло недопонимания, хотим рассказать вам о нашем замысле подробно. Начнем наш разговор с теории. Можно выделить три вида взаимодействия между людьми, которые отражены в программном об…