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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 12-04-2016, 16:46:25

Название: C# Как проверить открыта сборка или деталь?
Отправлено: R.I.Chernov от 12-04-2016, 16:46:25
Доброго времени суток, уважаемые форумчане. Помогите пожалуйста решить задачу указанную в теме. Мне необходимо, чтобы перед запуском формы осуществлялась проверка того, является открытый документ (ActiveDocument) сборкой или деталью. На входе у меня есть объект oApp - ссылка на приложение инвентор. Как понимаю,  мне надо сравнить тип объекта oApp.ActiveDocumentType с типом kPart или kAssamblyComponentDefinitionObject, но у меня не получается это реализовать. Буду рад любому совету.
Название: Re: C# Как проверить открыта сборка или деталь?
Отправлено: R.I.Chernov от 12-04-2016, 17:08:52
У меня есть такой вот код, тока он не работает, быть может вы найдете ошибку:
       
Код - C# [Выбрать]
  1.  public void Check_DockType()
  2.         {
  3.             if (oApp.ActiveDocument.Type == Inventor.ObjectTypeEnum.kAssemblyComponentDefinitionObject)
  4.             {
  5.                 MessageBox.Show("Открыта сборка");
  6.             }
  7.             if (oApp.ActiveDocument.Type == Inventor.ObjectTypeEnum.kPartComponentDefinitionObject)
  8.             {
  9.                 MessageBox.Show("Открыта деталь");
  10.             }
  11.         }
Название: Re: C# Как проверить открыта сборка или деталь?
Отправлено: R.I.Chernov от 12-04-2016, 17:17:57
И я вроде понимаю, что что-то не сходится. Что, вероятно,  в условии надо сравнивать не ActiveDocument.Type, а ComponentDefinition.Type с kAssemblyComponentDefinitionObject, или быть может oApp.ActiveDocumentType с kAssemblyDocumentObject, но ничего из этого сделать не выходит. :(
Название: Re: C# Как проверить открыта сборка или деталь?
Отправлено: R.I.Chernov от 12-04-2016, 17:29:35
Обсуждение с самим собой на форуме помогло найти решение! Чудо-чудесное! :) Быть может кому-то понадобится, код получился такой:
 
Код - C# [Выбрать]
  1.        public void Check_DockType()
  2.         {
  3.             if (oApp.ActiveDocumentType == Inventor.DocumentTypeEnum.kAssemblyDocumentObject)
  4.             {
  5.                 MessageBox.Show("Открыта сборка");
  6.             }
  7.             if (oApp.ActiveDocumentType == Inventor.DocumentTypeEnum.kPartDocumentObject)
  8.             {
  9.                 MessageBox.Show("Открыта деталь");
  10.             }
  11.         }

П.С. Меня гложет такой вот вопрос: мне кажется, что по идее можно было бы сравнивать ComponentDefinition.Type с Inventor.ObjectTypeEnum.kAssemblyComponentDefinitionObject, но я не смог "докопаться" до ComponentDefinition.Type... Быть может кто-то сможет подсказать, как можно решить задачу подобным способом, и можно ли ее так решить в принципе?
Название: Re: C# Как проверить открыта сборка или деталь?
Отправлено: mikazakov от 12-04-2016, 18:54:55
Быть может кто-то сможет подсказать, как можно решить задачу подобным способом, и можно ли ее так решить в принципе?
Ну а че oApp.ActiveDocumentType нормальное решение. Так же в любом документе есть член DocumentType по которому можно определить тип документа.
Есть еще кстати член DocumentSubType это для того что отличать обычную деталь от листовой, или обычную сборку от сварной сборки.
Ну и сам C# может определять тип объектов через оператор is, но подразумеваю, что на это будет идти больше ресурсов при работе.
Название: Re: C# Как проверить открыта сборка или деталь?
Отправлено: R.I.Chernov от 12-04-2016, 20:56:58
Есть еще кстати член DocumentSubType это для того что отличать обычную деталь от листовой, или обычную сборку от сварной сборки.
Спасибо за ценную информацию!