C# Как проверить открыта сборка или деталь?

Автор Тема: C# Как проверить открыта сборка или деталь?  (Прочитано 6250 раз)

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

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

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Доброго времени суток, уважаемые форумчане. Помогите пожалуйста решить задачу указанную в теме. Мне необходимо, чтобы перед запуском формы осуществлялась проверка того, является открытый документ (ActiveDocument) сборкой или деталью. На входе у меня есть объект oApp - ссылка на приложение инвентор. Как понимаю,  мне надо сравнить тип объекта oApp.ActiveDocumentType с типом kPart или kAssamblyComponentDefinitionObject, но у меня не получается это реализовать. Буду рад любому совету.
В программировании я новичок...но ненадолго! ;)

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
У меня есть такой вот код, тока он не работает, быть может вы найдете ошибку:
       
Код - 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.         }
В программировании я новичок...но ненадолго! ;)

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
И я вроде понимаю, что что-то не сходится. Что, вероятно,  в условии надо сравнивать не ActiveDocument.Type, а ComponentDefinition.Type с kAssemblyComponentDefinitionObject, или быть может oApp.ActiveDocumentType с kAssemblyDocumentObject, но ничего из этого сделать не выходит. :(
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 12-04-2016, 17:29:37

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Обсуждение с самим собой на форуме помогло найти решение! Чудо-чудесное! :) Быть может кому-то понадобится, код получился такой:
 
Код - 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... Быть может кто-то сможет подсказать, как можно решить задачу подобным способом, и можно ли ее так решить в принципе?
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Быть может кто-то сможет подсказать, как можно решить задачу подобным способом, и можно ли ее так решить в принципе?
Ну а че oApp.ActiveDocumentType нормальное решение. Так же в любом документе есть член DocumentType по которому можно определить тип документа.
Есть еще кстати член DocumentSubType это для того что отличать обычную деталь от листовой, или обычную сборку от сварной сборки.
Ну и сам C# может определять тип объектов через оператор is, но подразумеваю, что на это будет идти больше ресурсов при работе.

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Есть еще кстати член DocumentSubType это для того что отличать обычную деталь от листовой, или обычную сборку от сварной сборки.
Спасибо за ценную информацию!
В программировании я новичок...но ненадолго! ;)