1.2. Автоматизация для Autodesk Revit. Создание панели инструментов. Добавление кнопки на панель инструментов
Запуск плагинов в Revit осуществляется с помощью кнопок, размещенных на панелях инструментов. Панели инструментов в свою очередь размещаются на вкладках.
Код, отвечающий за размещение кнопок на панели инструментов пишется в классе Application - в методе OnStartUp. С помощью аргумента application данного метода производится обращение к графическому интерфейсу Revit.
Добавление кнопки на панель инструментов производится ступенчато:
▻ Создается вкладка для панели инструментов (класс элементов RibbonTab)
▻ Создается панель инструментов для размещения элементов панели(класс элементов RibbonPanel)
▻ Создаются и размещаются элементы панели (кнопки, раскрывающиеся списки, группы кнопок и т.д.)
Создание вкладки
Создание новой вкладки на панели инструментов выполняется с помощью метода CreateRibbonTab аргумента application. В качестве аргумента данный метод принимает название вкладки в виде строки.
В случае, если вкладка с таким именем уже существует - при запуске Revit возникнет ошибка и плагин не будет загружен. Поэтому перед созданием вкладки необходимо убедиться, что вкладка с таким именем ранее не была создана. Проще всего данную проверку можно выполнить с использованием конструкции TRY - CATCH. В этом случае будет выполнена попытка создания вкладки - если вкладка ранее была создана - этап создания будет пропущен.
Попытка создания вкладки. Если вкладка с таким именем уже существует - в блоке TRY произойдет ошибка и он не будет выполнен
Создание панели
После того, как вкладка была создана - создается панель инструментов для размещения кнопок и других элементов. Создание новой панели инструментов на вкладке выполняется с помощью метода CreateRibbonPanel аргумента application. В качестве аргумента данный метод принимает название вкладки, где будет размещена панель, и название панели в виде строки. В дальнейшем - для добавления кнопок на панель - будет необходимо оперировать элементом панели. Для этого создание новой панели производится с завязкой на параметр с типом данных RibbonPanel.
По аналогии с вкладкой - если панель инструментов с таким именем уже существует на вкладке - произойдет ошибка и плагин не будет запущен. Поэтому для панели инструментов также необходимо проводить проверку на создание. Конструкция 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.
Для элемента кнопки можно задать несколько основных свойств:
▻Всплывающая подсказка - сообщение, которое будет выводиться при наведении курсора. 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;







