11

1.2. Автоматизация для Autodesk Revit. Создание панели инструментов. Добавление кнопки на панель инструментов

Серия Автоматизация для Autodesk Revit

Часть 1 - Создание нового проекта плагина, подготовка классов Application и Command

Запуск плагинов в Revit осуществляется с помощью кнопок, размещенных на панелях инструментов. Панели инструментов в свою очередь размещаются на вкладках.

Код, отвечающий за размещение кнопок на панели инструментов пишется в классе Application - в методе OnStartUp. С помощью аргумента application данного метода производится обращение к графическому интерфейсу Revit.

Добавление кнопки на панель инструментов производится ступенчато:
▻ Создается вкладка для панели инструментов (класс элементов RibbonTab)
▻ Создается панель инструментов для размещения элементов панели(класс элементов RibbonPanel)
▻ Создаются и размещаются элементы панели (кнопки, раскрывающиеся списки, группы кнопок и т.д.)

Структура панели инструментов Revit

Структура панели инструментов Revit

Создание вкладки

Создание новой вкладки на панели инструментов выполняется с помощью метода CreateRibbonTab аргумента application. В качестве аргумента данный метод принимает название вкладки в виде строки.

Создание вкладки на панели инструментов Revit

Создание вкладки на панели инструментов Revit

В случае, если вкладка с таким именем уже существует - при запуске Revit возникнет ошибка и плагин не будет загружен. Поэтому перед созданием вкладки необходимо убедиться, что вкладка с таким именем ранее не была создана. Проще всего данную проверку можно выполнить с использованием конструкции TRY - CATCH. В этом случае будет выполнена попытка создания вкладки - если вкладка ранее была создана - этап создания будет пропущен.

Попытка создания вкладки. Если вкладка с таким именем уже существует - в блоке TRY произойдет ошибка и он не будет выполнен

Попытка создания вкладки. Если вкладка с таким именем уже существует - в блоке TRY произойдет ошибка и он не будет выполнен

Создание панели

После того, как вкладка была создана - создается панель инструментов для размещения кнопок и других элементов. Создание новой панели инструментов на вкладке выполняется с помощью метода CreateRibbonPanel аргумента application. В качестве аргумента данный метод принимает название вкладки, где будет размещена панель, и название панели в виде строки. В дальнейшем - для добавления кнопок на панель - будет необходимо оперировать элементом панели. Для этого создание новой панели производится с завязкой на параметр с типом данных RibbonPanel.

Создаем панель инструментов TestPanel на вкладке TestTab

Создаем панель инструментов TestPanel на вкладке TestTab

По аналогии с вкладкой - если панель инструментов с таким именем уже существует на вкладке - произойдет ошибка и плагин не будет запущен. Поэтому для панели инструментов также необходимо проводить проверку на создание. Конструкция TRY - CATCH в данном случае не подходит, так как нет возможности выбрать панель инструментов только по имени. В любом случае необходимо производить перебор всех панелей на вкладке и проверять соответствие имен.

Для проверки наличия панели инструментов на вкладке выполняются следующие действия:
▻ Создается список панелей, присутствующих на вкладке
▻ Создается пустой параметр панели с типом данных RibbonPanel
▻ Выполняется перебор всех найденных на вкладке панелей с помощью цикла foreach. Имена панелей сравниваются с целевым именем

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

Проверка наличия панели на вкладке с последующим созданием новой панели

Проверка наличия панели на вкладке с последующим созданием новой панели

После создания панели инструментов - на ней могут быть размещены элементы.

Основные элементы на панели

Основными элементами, которые могут быть добавлены на панель, являются:
▻ Кнопка - PushButton - основной инструмент выполнения кода в классе Command.

▻ Область с текстом - TextBox - позволяет пользователю ввести пользовательский текст. Не является исполнительным элементом, но может служить для настройки сценариев отработки скрипта.
▻ Раскрывающийся список - ComboBox - также как и TextBox, не является исполнительным элементом, но позволяет пользователю выбрать один из предложенных в списке вариантов. Также может служить для настройки сценариев работы.
▻ Группы кнопок - RadioButtonGroup, PullDownButtonGroup, SplitButtonGroup - группировки кнопок, отличающиеся внешним видом на панели инструментов.

RadioButtonGroup - создает ограниченную область на панели, в рамках которой размещаются кнопки. Группа может использоваться как чек-бокс - в рамках группы можно выбрать только один активный элемент (например выбор Да/Нет). Внутри данной группы нет возможности вставки разделителей, но разделитель может быть вставлен на панель между двумя такими группами.

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

SplitButton - похожа на PullDownButton, за тем исключением, что по умолчанию на панели в такой группе отображается один из элементов группы - первый из созданных или последний из использованных.

Разновидности элементов на панели инструментов

Разновидности элементов на панели инструментов

Добавление элементов: кнопка

Кнопка на панели инструментов создается с помощью метода AddItem() элемента панели. В качестве аргумента принимает элементы PushButtonData. Элемент PushButtonData создается с помощью конструктора, который принимает 4 строки в качестве аргументов:

PushButton pb = panel.AddItem(new PushDataButton("RevitName","InterfaceName","DLL Path","NameSpace.CommandClass")) as PushButton;

RevitName - внутреннее имя кнопки, которое используется внутри Revit. Имя должно быть выполнено строго латинскими буквами
InterfaceName - имя кнопки, которое будет отображаться в интерфейсе
DLL Path - путь к DLL-файлу сборки. Путь к файлу сборки может быть получен в классе Application - следующим образом:
string assemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
Путь к сборке лучше получить до описания конструкций панели
NameSpace.CommandClass - путь к классу Command, исполнение которого будет производится данной кнопкой. NameSpace - Пространство имен текущего проекта, CommandClass - Имя класса Command.

Пространство имен проекта и имя класса Command

Пространство имен проекта и имя класса Command

Для элемента кнопки можно задать несколько основных свойств:
▻Всплывающая подсказка - сообщение, которое будет выводиться при наведении курсора. ToolTip - краткое описание, возникает сразу после наведения.
LongDescription - более подробное описание, возникает после того как курсор задержится на кнопке на несколько секунд
pb.ToolTip = "Описание всплывающей подсказки";
pb.LongDescription = "Описание всплывающей подсказки";
▻Справка - можно задать ссылку, которая будет открываться при нажатии F1 при наведенном ContextualHelp contextHelp = new ContextualHelp(ContextualHelpType.Url, "Ссылка на страницу справки");
▻Большая и малая иконки - кнопки поддерживают добавление иконок с размером 32х32 px для большой и 16х16 px для маленькой. Файл изображение должен быть в формате PNG
pb.Image = new BitmapImage(new Uri(@"dev\\16.png"));
pb.LargeImage = new BitmapImage(new Uri(@"dev\\32.png"));

ВАЖНО: Для возможности загрузки иконок - в проект должна быть загружена ссылка на библиотеку PresentationCore.dll (Если на компьютере установлен .Net Framework v3.0 - можно найти в папке: C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0), а также задана ссылка на пространство имен using System.Windows.Media.Imaging;

Процесс добавления кнопки на панель и задание значений свойств

Процесс добавления кнопки на панель и задание значений свойств

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества