Как проверить и закрыть панель свойств через плагин

Автор Тема: Как проверить и закрыть панель свойств через плагин  (Прочитано 2595 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
Добрый день!
Работаю над плагином к Navisworks Manage 2020 на c#. Для улучшения скорости работы плагина есть необходимость проверять открыта ли панель свойств в Navis'e. Если открыта, то закрывать её и по окончании работы снова открывать.
Не получается найти программный путь к панели свойств. Может кто-то знает?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
miss,
В публичном API такая возможность не предусмотрена. Я задам вопрос в ADN DevHelp по этому поводу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
Я задам вопрос в ADN DevHelp по этому поводу.
Благодарю! Может они знают решение. Ждём-с!  :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Отправил запрос. Когда будет какая-нибудь новая информация - я сообщу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Переадресовали команде инженеров. Видимо вопрос не простой. 🙂
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Увы, но команда инженеров подтвердила, что управлять окном свойств и получить его текущее состояние из API нельзя.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
Печаль.  :(
Спасибо, что пытались помочь!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Собственно говоря никто не отменял Windows Hooks для работы с окнами приложения. Но тут вам придется серьезно потрудится. Потребуется среди всех окон NavisWorks найти нужное окно и послать ему WM_CLOSE.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
miss,
В ADN DevHelp предложили попытаться разобраться каким образом окно свойств влияет на скорость работы плагина.
Для этой цели (если это конечно вам интересно) нужно предоставить исходный код плагина.
Кстати, а на сколько (или во сколько раз) увеличивается время время работы плагина при включенной панели свойств?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
Александр Ривилис,
Код увы дать не вправе. Могу объяснить суть.
Плагин создаёт/обновляет вкладку на панели свойств в группе элементов (каждому своё). Каждый элемент ищется через Search. И перед тем как создать вкладку происходит проверка наличия этой вкладки (через Api), чтобы избежать дублирования. Если вкладки нет, она создаётся. Если вкладка есть, то свойства в ней обновляются (через ComApi происходит перебор всех вкладок в поисках нужной, чтобы обновить).
И получается, что если панель свойств открыта, то в процессе проверки и поиска вкладки выделяются и мелькают. Это мелькание увеличивает время исполнения в разы.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Код увы дать не вправе.
OK!
Плагин создаёт/обновляет вкладку на панели свойств в группе элементов (каждому своё).
Тогда возможно предложение от ADN DevHelp имеет право на существование. Они предлагают не использовать стандартную панель свойств, а создать свою:
Цитировать
Therefore, we will advise you to produce your own panel to manage properties, tabs, and etc to match your need. Check this path of DockPanel example under your SDK install location, e.g., `Navisworks Manage 2021\api\NET\examples\Basic Examples\CSharp\BasicDockPanePlugin`
Also, here are some references for you: Selection change event: https://forums.autodesk.com/t5/navisworks-api/event-selecting-objects-api-c/td-p/8804098
Get properties from selected items:
Код - C# [Выбрать]
  1. var doc = sender as Document;        
  2. var selected = doc.CurrentSelection.SelectedItems[0];        
  3. foreach (var propCategory in selected.PropertyCategories)        
  4. {
  5.             sb.AppendLine(propCategory.CombinedName.ToString());            
  6.             foreach (var propData in propCategory.Properties)            
  7.             {                
  8.                    sb.AppendLine("\t" + propData.CombinedName + ":" + propData.Value);            
  9.             }
  10. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, если я правильно понял, то можно послать SHIFT + F7 окну NavisWorks для включения/выключения окна свойств: https://knowledge.autodesk.com/support/navisworks-products/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/Navisworks/files/GUID-56634B99-A85F-485D-A0B1-7093B34A5F53-htm.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
Александр Ривилис,
можно послать SHIFT + F7
Я думала об этом, но это сочетание клавиш работает как на выключение, так и на включение. Поэтому сначала надо убедиться, что панель свойств открыта, а как это сделать внутри плагина не понятно))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 11411
  • Карма: 1476
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр Ривилис,
можно послать SHIFT + F7
Я думала об этом, но это сочетание клавиш работает как на выключение, так и на включение. Поэтому сначала надо убедиться, что панель свойств открыта, а как это сделать внутри плагина не понятно))

А вот это следует делать через Win32 API. Но с этим требуется экспериментировать. Для поиска окон используется утилита Spy++ из состава Visual Studio (spyxx.exe). В API для этой цели используется функции FindWindow или FindWindowEx (использование в C#:  https://social.msdn.microsoft.com/Forums/ru-RU/c4c650b5-4b4a-4e5d-8248-cec8d2dbad60/105010721082-10871086108310911095108010901100?forum=fordesktopru )

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн missАвтор темы

  • ADN OPEN
  • Сообщений: 6
  • Карма: 1
А вот это следует делать через Win32 API
Александр Ривилис, благодарю! Изучу этот момент, поэкспериментирую. Если получится, напишу. Вдруг для кого-то ещё будет актуально.