Найти тему

Оформление пользовательской панели в Revit

Оглавление

Всем привет! Сегодня расскажу, что можно разместить на пользовательской панели, чтобы создать там интересный интерфейс, а не просто скучный набор кнопок.

Для предыдущих статей я обычно брал информацию "из головы", но в этот раз мне потребовалось довольно сильно погрузится в материал, и поэкспериментировать с кодом, потому что раньше я умел лишь добавлять кнопки.

Рекомендую внимательно ознакомиться со статьёй про создание панелей и кнопок, прежде чем будете повторять то, что написано здесь, особенно с тем, что касается добавления изображений для кнопок в проект.

Пользовательские кнопки

В этой статье я рассматриваю информацию только из библиотеки RevitAPIUI и namespace Autodesk.Revit.UI. Это не единственный способ, можно модифицировать ленту Ревита с помощью библиотеки AdWindows, но об этом я расскажу в другой раз — там более обширная и сложная тема.

Какие бывают кнопки:

1. Обычная кнопка PushButton. Самая часто встречающаяся. Может быть сама по себе, а может быть частью выпадающего списка или сложена в стек из 2 или 3 кнопок.

Обычные кнопки и кнопки в стеке
Обычные кнопки и кнопки в стеке

2. PullDownButton — кнопка-выпадающий список. При нажатии на неё открывается список, и можно выбрать из нескольких вариантов. Список наполняется обычными PushButton.

-2

3. SplitButton — почти тоже самое, что и PullDownButton, но с небольшой разницей. В PullDownButton при нажатии всегда раскрывается выпадающий список, а SplitButton состоит из 2 частей: выбранная кнопка и кнопка раскрытия списка. То есть мы можем сразу нажать на кнопку, а можем выбрать из списка другую: тогда выполнится другая команда, а кнопка по умолчанию заменится на последнюю вызванную.

SplitButton разделена на 2 части
SplitButton разделена на 2 части

3. RadioButtonGroup с кнопками-переключателями ToggleButton. Какие тут нюансы:

  • ToggleButton нельзя добавить непосредственно на панель, только в составе RadioButtonGroup
  • В составе RadioButtonGroup всегда одна кнопка нажатая, а остальные — нет. При нажатии новой кнопки она становится нажатой, а предыдущая переходит в обычное состояние
ToggleButton в Ревите
ToggleButton в Ревите

Все эти классы добавляются примерно одинаково: создаётся класс ButtonNameData, а затем на панели вызывается метод AddItem, куда и передаётся информация о новой кнопке. Метод возвращает саму кнопку, после чего её можно дополнительно модифицировать.

Добавление кнопок в приложении

Ссылка на GitHub со всем кодом будет в конце статьи.

Я добавил в своё приложение несколько изображений, чтобы панель выглядела поживее. Назначил им действия при сборке: Resource. Можете взять мои, а можете загуглить и скачать png-иконки или нарисовать самостоятельно.

Добавление картинок для кнопок
Добавление картинок для кнопок

1. Добавим ToggleButton:

-6

Сначала добавили RadioButtonGroup, а затем в неё — ToggleButton. В кнопку-переключатель передаём ссылку на текущую сборку и имя нужной команды. Здесь я пишу только про оформление панели, так что команды почти везде будут одни и те же.

2. Добавим PullDownButton и SplitButton

SplitButton — это наследник PullDownButton, поэтому тут код мы немножко объединим:

-7

Для обеих кнопок мы вызываем метод FillPullDown, который заполняют их кнопками PushButton. Для разнообразия я добавил в списке разделитель на строке 97.

3. Добавим маленькие кнопки StackedItems

-8

Можно добавить 2 или 3 кнопки. Тут я немножко поиграл с циклами — подробно о них я писал тут.

4. Добавим кнопки на панель.

Мы написали методы на добавление кнопок, но важно не забыть вызвать эти методы в OnStartup() нашего приложения:

-9

Здесь я, чуть забегая вперёд, уже добавил поле для ввода текста и выпадающий список, появляющиеся после нажатия стрелочки внизу панели

Собственно, по кнопкам всё. Давайте посмотрим результат на панели Ревита:

-10

Выпадающий список и поле для ввода текста

Добавим ComboBox и TextBox, а также научимся получать из них информацию для других команд. Я добавлю их под свою панель, чтобы показать, что есть такая возможность. Для этого я вызываю на панели метод AddSlideOut(). Всё, что будет добавлено на панель после него, попадёт в выпадающий список под панелью.

ComboBox и TextBox создаётся по тем же принципам, что и кнопки. Отличие состоит в том, что у них есть события, с помощью которых можно отслеживать изменение выбора в них.

Создадим новую команду, которая будет выводить информацию из них, и добавим в ней статические свойства для хранения и перезаписи изменённого выбора:

-11

А теперь определим ComboBox и TextBox в классе Application:

Добавим ComboBox
Добавим ComboBox

На строке 132 я изменяю значение свойства ComboBoxValue.

Добавим TextBox
Добавим TextBox

Тут данные мы получили на строке 145.

Команду HelloWorldCommand я назначил маленьким кнопкам, расположенным в стеке. Посмотрим результат:

-14

У нас появился выпадающий список под панелью, список со значениями в нём и ТекстБокс для ввода, и мы передали информацию с них во внешнюю команду. Отличный результат!

Итоговый код в моём репозитории на GitHub.

Подписывайтесь на мой телеграм-канал и не забывайте ставить лайки под статьёй и звёздочки на репозитории. До новых встреч!

-15