Как узнать тип объекта инвентор.

Автор Тема: Как узнать тип объекта инвентор.  (Прочитано 3471 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Доброго времени суток, уважаемые форумчане! Буду рад совету в решении такой вот задачи:

У меня есть ссылка объект BrowserNode из которой мне надо получить ссылку на объект BrowserPane. Решил сделать так: использую свойство BrowserPane.Parent, проверяю тип объекта, если это не BrowserPane - запускаю рекурсию. Проблема заключается в том, что я не могу придумать, как проверить тип объекта. Ну то есть у типа object, который возвращает свойство BrowserPane.Parent нет свойства Type().

Быть может есть какой-то универсальный тип объектов инвентора, к которому можно привести объект object, чтобы вызвать свойство Type? Буду рад любой идее.
В программировании я новичок...но ненадолго! ;)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать тип объекта инвентор.
« Ответ #1 : 09-10-2020, 15:01:55 »
Наверное как-то так:
Код - Visual Basic [Выбрать]
  1. If TypeOf oNode.Parent Is BrowserPane Then
  2.    ' тут твои действия
  3. End If
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Как узнать тип объекта инвентор.
« Ответ #2 : 09-10-2020, 15:39:04 »
Спасибо, Александр. К сожалению, я  не понимаю, как сделать аналогичное действие в C# ((
Когда я пытаюсь написать что-то вроде:
Код - C# [Выбрать]
  1. Debug.WriteLine(typeof(oDoc));
, где oDoc - ссылка на сборку

компилятор выдает ошибку "не удалось найти тип или имя пространства имен "oDoc" (возможно отсутствует директива using или ссылка на сборку)".

Полагаю, тут дело в отсутствии строгой типизации в VBA, в котором вот так можно было бы так решить мою задачу:

Код - Visual Basic [Выбрать]
  1. Sub SolutionOne()
  2.     If oNode.NativeObject.Type = kAssemblyComponentDefinitionObject Then
  3.     'действия
  4.    Else 'рекурсия
  5. End Sub
  6.  
  7. Sub SolutionTwo()
  8.     If oNode.Parent.Type = kBrowserPaneObject Then
  9.     'действия
  10.    Else 'рекурсия
  11. End Sub

А как сделать такое же в C# я понять не могу. Можно конечно через try попробовать, но что-то не хотелось бы.
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 09-10-2020, 15:55:11

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Как узнать тип объекта инвентор.
« Ответ #3 : 09-10-2020, 15:47:04 »
А вот так?
Код - C# [Выбрать]
  1. if (oNode.Parent is BrowserPane)
  2. {
  3. // тут твои действия
  4. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн R.I.ChernovАвтор темы

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Re: Как узнать тип объекта инвентор.
« Ответ #4 : 09-10-2020, 15:54:07 »
А вот так?
Да, работает, спасибо большое. Итоговый код выглядит вот так:

Код - C# [Выбрать]
  1. Inventor.BrowserPane oPane = oDoc.BrowserPanes["AmBrowserArrangement"];
  2. Inventor.BrowserNode oNode = oPane.TopNode;
  3.  
  4. if (oNode.Parent is Inventor.BrowserPane)
  5. {
  6.     Debug.WriteLine("Parent method is working");
  7. }
  8. if (oNode.NativeObject is Inventor.AssemblyComponentDefinition)
  9. {
  10.     Debug.WriteLine("NativeObject method is working");
  11. }
В программировании я новичок...но ненадолго! ;)