Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: А.Balm от 13-04-2020, 12:07:15

Название: Событие изменения выборки элементов.
Отправлено: А.Balm от 13-04-2020, 12:07:15
Добрый день!
В Revit есть 3 известных мне способа уведомлений о изменении выбранных на экране элементов, как описано в статье у Джереми https://thebuildingcoder.typepad.com/blog/2015/03/element-selection-changed-event.html (https://thebuildingcoder.typepad.com/blog/2015/03/element-selection-changed-event.html).


У каждого способа есть свои недостатки, у первых 2-х, связанные с производительностью, у последнего с точностью. Событие в Ribbon панели не возникает если пользователь щелкает последовательно на элементы той же категории, что и выбранный перед этим элемент.
Есть также панель свойств, в которой отображаются свойства всех элементов. Она реагирует на любое изменение выборки. Вопрос в том, что не понятно, как получить доступ, если это вообще возможно, к этой панели.

Так можно подписаться на событие PropertyChanged Ribbon панели:

Код - C# [Выбрать]
  1. private bool _subscribed = false;  
  2. public void SubscribeToSelectionEvent()
  3.         {
  4.  
  5.             foreach (Autodesk.Windows.RibbonTab tab in Autodesk.Windows.ComponentManager.Ribbon.Tabs)
  6.             {
  7.                 if (tab.Id == "Modify")
  8.                 {
  9.                     if (_subscribed)
  10.                     {
  11.                         tab.PropertyChanged -= SelectionEventHandler;
  12.                         _subscribed = false;
  13.                     }
  14.                     else
  15.                     {
  16.                         tab.PropertyChanged += SelectionEventHandler;
  17.                         _subscribed = true;
  18.                     }
  19.                     break;
  20.                 }
  21.             }
  22.         }

Код - C# [Выбрать]
  1. Autodesk.Windows.ComponentManager.Ribbon.Tabs
это все Ribbon  вкладки в интерфейсе Revit. Как можно добраться до панели свойств?
Название: Re: Событие изменения выборки элементов.
Отправлено: Александр Игнатович от 13-04-2020, 12:27:04
Modify tab может и не кидать событий. В параметрах Revit может быть отключено "При выборе отображать контекстную вкладку". Или, если, например, была выбрана стенка, добавляем к выбору ещё одну.

До панели свойств можно попробовать добраться с помощью WinAPI. Посмотри с помощью Spy++, она устанавливается вместе с утилитами Visual Studio.

(https://i.postimg.cc/ThdF0GgV/spyplusplus.png) (https://postimg.cc/ThdF0GgV)

Попробуй с помощью WinAPI подписаться на события изменения в combobox-а. Правда, надо иметь ввиду, что вкладку свойств может быть и закрыта...