Автоматизация Navisworks

Автор Тема: Автоматизация Navisworks  (Прочитано 2450 раз)

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

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Автоматизация Navisworks
« : 24-11-2021, 12:50:12 »
Доброго времени! С какой целью выполняется проверка .IsAutomated?

Код - C# [Выбрать]
  1. if(!Autodesk.Navisworks.Api.Application.IsAutomated)
  2.                     {
  3. PluginRecord pluginRecord = Autodesk.Navisworks.Api.Application.Plugins.FindPlugin("DockPanel.DP12");
  4.                        
  5. if (pluginRecord is DockPanePluginRecord && pluginRecord.IsEnabled)
  6.                         {
  7. DockPanePlugin docPanel = (DockPanePlugin)(pluginRecord.LoadedPlugin ?? pluginRecord.LoadPlugin());
  8.                             docPanel.ActivatePane();
  9.                         }    
  10.                     }

Такую проверку нет необходимости выполнять в этом случае (создание кнопки на панели инструментов):

Код - C# [Выбрать]
  1. public override int Execute(params string[] parameters)
  2.         {
  3.             MessageBox.Show("Box", "Title");
  4.  
  5.             return 0;
  6.         }

Где можно узнать подробнее про суть этого режима автоматизации?

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

  • Administrator
  • *****
  • Сообщений: 13175
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Автоматизация Navisworks
« Ответ #1 : 24-11-2021, 17:43:15 »
Вот что говорит документация:

Т.е. если это свойство true - не следует создавать диалоги, так как они прервут процесс автоматизации.


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

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Re: Автоматизация Navisworks
« Ответ #2 : 25-11-2021, 19:21:29 »
Спасибо за ответ! Вы смотрите "NET API.chm"? Документация по API c 2018 года совсем не менялась?

По этой строчке,

Код - C# [Выбрать]
  1. if (pluginRecord is DockPanePluginRecord && pluginRecord.IsEnabled)

 как такое может быть, что

Код - C# [Выбрать]
  1. pluginRecord is DockPanePluginRecord


ведь ссылаясь на https://www.bestprog.net/ru/2019/03/09/run-time-type-information-statements-is-as-examples-ru/

Код - C# [Выбрать]
  1.  
  2. class BaseClass
  3. {
  4.     public int d;
  5. }
  6.  
  7. // производный класс от базового класса
  8. class DerivedClass:BaseClass
  9. {
  10.     public int dd;
  11. }
  12.  
  13. BaseClass bc = new BaseClass();
  14. DerivedClass dc = new DerivedClass();
  15. if (bc is DerivedClass)
  16.     Console.WriteLine("Объект bc есть совместим с DerivedClass");

"значение условия в операторе if равное false, так как объект базового класса не может быть совместим с производным классом. Однако, наоборот, объект производного класса есть совместим с базовым, так как, производный класс расширяет возможности базового класса."

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

  • Administrator
  • *****
  • Сообщений: 13175
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Автоматизация Navisworks
« Ответ #3 : 25-11-2021, 19:34:27 »
Вы смотрите "NET API.chm"?
Да.
Документация по API c 2018 года совсем не менялась?
Нет.
как такое может быть, что
Что здесь не так, если Autodesk.Navisworks.Api.Application.IsAutomated == false, т.е. интерфейс есть и соответственно можно работать с панелями?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Re: Автоматизация Navisworks
« Ответ #4 : 25-11-2021, 19:40:59 »
Цитировать
Что здесь не так, если Autodesk.Navisworks.Api.Application.IsAutomated == false, т.е. интерфейс есть

* В каком случае интерфейса может не быть?

* На сайте указанном выше говорится, что "объект базового класса не может быть совместим с производным классом" тогда почему такое возможно?

Код - C# [Выбрать]
  1. pluginRecord is DockPanePluginRecord

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

  • Administrator
  • *****
  • Сообщений: 13175
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Автоматизация Navisworks
« Ответ #5 : 25-11-2021, 19:50:00 »
* В каком случае интерфейса может не быть?
Когда запущено через Automation:



* На сайте указанном выше говорится, что "объект базового класса не может быть совместим с производным классом" тогда почему такое возможно?

Код - C# [Выбрать]

    pluginRecord is DockPanePluginRecord

Потому что в действительности pluginRecord не может быть просто экземпляром PluginRecord, так как это абстрактный класс:
Код - C# [Выбрать]
  1. public abstract class PluginRecord
В действительности pluginRecord экземпляр одного из классов наследников (в том числе может быть и DockPanePluginRecord)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Re: Автоматизация Navisworks
« Ответ #6 : 26-11-2021, 17:42:30 »
Спасибо, что указали, что класс абстрактный, получается действительно, что что мы не приравниваем базовый класс к производному классу. Но как в этом разобраться,

Код - C# [Выбрать]
  1. В действительности pluginRecord экземпляр одного из классов наследников (в том числе может быть и DockPanePluginRecord)

* как можно точно понять какого класса этот экземпляр?

* Смотря на иерархию наследования, DockPanePluginRecord является производным от PluginRecord



Из документации известно, что


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

  • ADN OPEN
  • Сообщений: 23
  • Карма: 0
Re: Автоматизация Navisworks
« Ответ #7 : 26-11-2021, 18:00:40 »
Как можно посмотреть конструктор?



В метадате похоже нет такой информации по возможным конструкторам


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

  • Administrator
  • *****
  • Сообщений: 13175
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Автоматизация Navisworks
« Ответ #8 : 26-11-2021, 20:01:20 »
Как можно посмотреть конструктор?
Если нет своего конструктора, то смотри нет ли конструктора в родительском классе. Хотя вполне возможно, что конструктора нет ни у него, ни у родительского класса. И вообще через конструктор он не создаётся.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13175
  • Карма: 1701
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Автоматизация Navisworks
« Ответ #9 : 26-11-2021, 20:21:06 »
* как можно точно понять какого класса этот экземпляр?
Например, pluginRecord.GetType().FullName вернёт полное имя класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение