Мы продолжаем знакомить вас с ключевыми компонентами маркетплейса ARO GROUP.
Наша платформа призвана упростить пользователям различных программ и программных комплексов доступ к сторонним (дополнительным) инструментам, сконцентрировав их в одном удобном и гибком инструменте.
Платформа также стремиться объединить разработчиков дополнений и упростить процесс распространения и рекламы их продуктов.
Архитектура платформы:
— Витрина (магазин дополнений)
Витрина магазина дополнений предназначена для того, чтобы пользователь мог выбрать требующиеся/необходимые ему (для него) программные дополнения и привязать их к своему аккаунту (купить/арендовать).
— Коннектор
Это клиентское приложение, которое встраивается в основное ПО (Revit, Pilot, Renga) и позволяет без дополнительных манипуляций использовать все ранее привязанные (приобретенные/арендованные) к аккаунту программные дополнения. Всю «работу» по доставке, обновлению и исполнению программных дополнений Коннектор берет на себя. Пользователю не нужно беспокоится о том как и куда будут установлены/скопированы/размещены необходимые файлы, все ли из них «свежие» (нужных версий).
Установка коннектора:
При запуске родительского ПО (в данном случае Revit) необходимо выполнить вход на ARO Маркетплейс.
После успешной авторизации будет получен и отображен список доступных пользователю Команд. Далее работа с Командами осуществляет также как и с другими инструментами родительского ПО.
— SDK (Software Development Kit)
Наш набор инструментов для разработчиков предоставляет возможность эмулировать сервер и тестировать плагины до их публикации. Вы получите возможность отлаживать свои продукты, выявлять ошибки и предупреждения, а также просматривать логи — всё это без необходимости перезагрузки! Это значительно упростит процесс разработки и сделает его более эффективным.
В состав пакета SDK входит:
• Публичное API
• Эмулятор службы доставки Команд
• Специальная версия Коннектора
• Инструмент проверки Сборок
• Графическая утилита Разработчика
Публичное API
Предоставляет Разработчику набор объектов для корректного и успешного взаимодействия с платформой AIS.
Эмулятор службы доставки Команд
Помогает Разработчику проверить работоспособность доставки программных решений размещаемых в Сборках.
Специальная версия Коннектора
Позволяет выполнять обмен данными с эмулятором службы доставки Команд. Предоставляет возможность производить отладку программного кода написанного Разработчика при помощи IDE. Доступна для каждого поддерживаемого Родительского Продукта.
Инструмент проверки Сборок
Выполняет проверку корректности составления описания объектов API, выявляет ошибки реализаций объектов
Графическая утилита Разработчика
Вспомогательный инструмент Разработчика с графическим интерфейсом, позволяющий наглядно взаимодействовать с компонентами SDK, а также получить различную вспомогательную, сопроводительную и отладочную информацию. Более подробно о графической утилите можно узнать на соответствующей странице.
SDK Актуальная версия - скачать
Пример создания команды
Рассмотрим пример создания самой простой Команды для ПО Revit в рамках нашей платформы. Предполагается, что Вы уже знакомы с программированием и языком C#.
У Вас должна быть установлена IDE для ведения разработки (например, MS Visual Studio или JetBrains Rider) и пакет .NET Framework 4.8 Targeting Pack (в нашем примере мы создаем Команду для Revit 2024). Далее Вам необходимо скачать и установить набор инструментов для разработчика (SDK). Скачать SDK можно тут.
После всех описанных выше манипуляций мы готовы к созданию Команды. В статье использована IDE MS Visual Studio.
Создадим проект в IDE, выбрав "Библиотека классов (.NET Framework)" для языка C#.
Укажем имя проекта, его расположение на жестком диске, и главное, платформу, а именно - .NET Framwework 4.8.
Если у Вас в вариантах выбора платформы нет .NET Framwework 4.8 - вернитесь к настройке (установке) используемой вами IDE.
Когда проект создался, мы увидим первично созданный класс. Переименуем созданный класс, мы указали имя класса - SimpleCommand.
Теперь необходимо добавить ссылки на наш API (ARO API) и API Revit, а также на пакет PresentationFramework (в нашем случае он понадобиться для вывода сообщения на экран).
Библиотека ARO API находиться по пути C:\ProgramData\ARO\SDK\AIS\libs\4_8. Имя файла библиотеки ARO.AIS.API.dll. Если у Вас нет указанной папки или файла, то вернитесь к шагу установки инструментов разработчика (SDK).
Файлы библиотек Revit API находятся по пути установка ПО Revit.
Обычно установка ведется в директорию: C:\Program Files\Autodesk\Revit 2024 - в нашем случае мы создаем Команду для Revit 2024, поэтому путь заканчивается на 2024.
Из файлов Revit API нам нужны: RevitAPI.dll и RevitAPIUI.dll.
Пакет PresentationFramework можно найти в разделе "Сборки" Менеджера ссылок.
У подключенных библиотек Revit API требуется отключить локальное копирование при сборке. Это действие нужно выполнить для библиотек RevitAPI и RevitAPIUI.
Помимо всего прочего нам необходим логотип/иконка для нашей Команды. Найдем подходящую на свой выбор и разместим в дереве проекта.
Укажем, что наш логотип будет встроенным ресурсом. Это необходимо, т.к. в дальнейшем мы будет использовать работу со встроенными ресурсами.
Ура, мы выполнили начальную подготовку к созданию Команды.
Теперь перейдем непосредственно к коду. Чтобы наш класс считался описанием Команды необходимо убедиться что сам класс является публичным (public) и наследует интерфейс IRevitCommand.
Заполним обязательные поля, которые требует реализация интерфейса IRevitCommand. Подробнее о интерфейсе и его реализации можно почитать тут.
Подробнее про описание полей можно почитать тут.
В описании обязательных полей используются инструменты AIS Tools, входящие в состав ARO API. Подробнее про инструменты AIS Tools можно почитать тут.
Для формирования потока картинки логотипа используется инструмент ImageTool, подробнее можно почитать тут.
для формирования потока описания элемента управления Команды используется инструмент RevitTool, подробнее можно почитать тут.
У Команды есть точка входа, основная функция, которая будет вызвана при обращении (вызове) Команды из Revit. Имя функции точки вход всегда неизменно - Execute, модификатор доступа всегда public. Реализации функции точки входа и функции обработки экстренной остановки (ForcedStop) требует реализация интерфейса IRevitCommand.
Добавим простой код, который выведет в сообщении имя пользователи запустившего Revit:
public byte Execute(object application, IRevitTransaction transaction)
{
_ = MessageBox.Show($"Current Username: {(application as UIApplication)?.Application?.Username ?? "-"}");
return RevitCommandStatus.OK;
}
Если Команда не должна реагировать на экстренное завершение, то реализацию ForcedStop можно сделать пустой:
public void ForcedStop(object application) { }
В итоге у нас должен получиться примерно такой результат для описания нашей Команды:
using ARO.AIS.API;
using ARO.AIS.API.Revit;
using ARO.AIS.API.Utils;
using Autodesk.Revit.UI;
using System;
using System.Windows;
namespace ARO.AIS.Revit.Commands
{
public class SimpleCommand : IRevitCommand
{
public string Uid => "3BF062670187D94B8B05A9F5638B28BE";
public string Name => "Simple command";
public string Tooltip => "Show current user login";
public string Description => "The user on whose behalf Autodesk Revit was launched";
public Version Version => new Version(1, 0);
public int Product => SupportedProduct.REVIT_2024;
public byte[] Logo => AISTools.ImageTool.GetImageFromEmbeddedResource("icon.whois_64x64.png");
public IRevitControl Control => AISTools.RevitTool.CreateButton().AsSingleOnly().SetSize(RevitButtonSize.LARGE).ToGroup("Samples");
public byte[] TooltipImage => null;
public byte Execute(object application, IRevitTransaction transaction)
{
_ = MessageBox.Show($"Current Username: {(application as UIApplication)?.Application?.Username ?? "-"}");
return RevitCommandStatus.OK;
}
public void ForcedStop(object application) { }
}
}
Исходный файл примера описания Команды можно посмотреть тут.
Если все было сделано и описано верно, то IDE не будет подчеркивать ошибки кода и можно переходит к следующему шагу описания для нашей Команды. Если же IDE находит/определяет ошибки синтаксиса и т.п., необходимо внимательно с ними (с ошибками) ознакомиться и исправить до того как приступать к следующему шагу.
Если на предыдущем по итогу все успешно, то можем переходит к описанию класса разработчика.
За каждым разработчиком работающим с нашей платформой закреплен уникальный ID. Этот ID и сокращенное (короткое) имя разработчика нам и предстоит описать.
Создадим новый класс, имя класса не имеет значения, но лучше, чтобы оно отражало имя разработчика. В нашем примере мы использовали наш ID разработчика для публикаций и примеров.
Чтобы созданный нами класс считался описанием Разработчика необходимо убедиться что сам класс является публичным (public) и наследует интерфейс IDeveloper.
Заполним обязательные поля, которые требует реализация интерфейса IDeveloper. Подробнее о интерфейсе и его реализации можно почитать тут.
Уникальный ID разработчика можно получить обратившись к нам по любому из официальных каналов связи, либо в личном кабинете разработчика (если Вы участвуете в закрытом альфа-тестировании).
Если все было сделано правильно и IDE не находит ошибок, то у нас должен получиться примерно такой результат для описания разработчика:
using ARO.AIS.API;
namespace ARO.AIS.Revit.Commands
{
public class AROPublicDev : IDeveloper
{
public string Uid => "A1F439EF1B656C4983BFB705E7368191";
public string Name => "ARO Public";
public string Description => null;
}
}
Исходный файл примера описания Разработчика можно посмотреть тут.
Теперь пришло время собрать проект. Если на всех предыдущих шагах нам сопутствовал успех, то сборка пройдет успешно. Если были найдены ошибки, внимательно ознакомьтесь с их описанием и, при необходимости, вернитесь к предыдущим шагам.
Если сборка прошла без ошибок, то можно приступать к проверке работы нашей созданной Команды. Запустим ToolBox (графическую утилиту позволяющую выполнить проверку работы нашей Команды) щелкнув дважды левой кнопкой мыши по ярлыку "ARO AIS SDK", который должен был появиться после установки пакета ASK.
Подробнее про утилиту ToolBox можно почитать тут.
Когда откроется окно ToolBox нажмем кнопку "Добавить" в левом нижнем углу и выберем нашу собранную на прошлых шагах Команду. Если утилита успешно увидела файл, то в списке сборок появиться наша Команда.
Если описание выполнено корректно и сборка была успешна - результатом работы утилиты ToolBox будет кол-во найденных Команд и Разработчиков отличным от нуля.
Нажмите кнопку "Запустить" в верху окна и убедитесь, что статус службы эмулятора "Online".
Можно переходить в Revit. После загрузки ПО Revit должна появиться вкладка "ARO SDK".
На самой вкладке находятся две кнопки: "Очистить" и "Обновить" - они отвечают за соответственно выгрузку и перезагрузку всех Команд размещенных в ToolBox.
Нажав кнопку "Обновить" мы увидим, что появилась вкладка "ARO Public" (по короткому/сокращенному имени Разработчика), а на ней наша Команда.
Кликнув на логотип (иконку) Команды мы увидим сообщение ОС с именем пользователя запустившего Revit.
Вот и все, полный успех!) Мы смогли успешно завершить создание и проверку нашей первой и простой Команды.
Полный исходный код проекта рассматриваемой в статье Команды можно посмотреть и скачать тут
В следующей части статьи, мы расскажем, как выполнить адаптацию уже готового плагина Revit для платформы, с минимальными правками кода.
Подпишись, чтобы не пропустить)