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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 09-10-2020, 14:17:00

Название: Как узнать тип объекта инвентор.
Отправлено: R.I.Chernov от 09-10-2020, 14:17:00
Доброго времени суток, уважаемые форумчане! Буду рад совету в решении такой вот задачи:

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

Быть может есть какой-то универсальный тип объектов инвентора, к которому можно привести объект object, чтобы вызвать свойство Type? Буду рад любой идее.
Название: Re: Как узнать тип объекта инвентор.
Отправлено: Александр Ривилис от 09-10-2020, 15:01:55
Наверное как-то так:
Код - Visual Basic [Выбрать]
  1. If TypeOf oNode.Parent Is BrowserPane Then
  2.    ' тут твои действия
  3. End If
Название: Re: Как узнать тип объекта инвентор.
Отправлено: R.I.Chernov от 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 попробовать, но что-то не хотелось бы.
Название: Re: Как узнать тип объекта инвентор.
Отправлено: Александр Ривилис от 09-10-2020, 15:47:04
А вот так?
Код - C# [Выбрать]
  1. if (oNode.Parent is BrowserPane)
  2. {
  3. // тут твои действия
  4. }
Название: Re: Как узнать тип объекта инвентор.
Отправлено: R.I.Chernov от 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. }