Ссылка на документ подавленного вхождения.

Автор Тема: Ссылка на документ подавленного вхождения.  (Прочитано 4911 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Доброе время суток, уважаемые форумчане. Ищу вашей помощи в решении такой вот задачи:
Есть сборка, внутри которой некоторые вхождения подавлены. Мне необходимо перебрать все вхождения и считать ссылки на документы. Occurence.Definition.Document() не работает для подавленных вхождений. Снимать подавление и давить обратно я не хочу, дабы не тратить лишнее время. Пытаюсь найти альтернативные варианты. Буду признателен за любую идею.
В программировании я новичок...но ненадолго! ;)

Отмечено как Решение R.I.Chernov 21-05-2019, 16:24:07

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Для этих целей есть ReferencedDocumentDescriptor

Код - Visual Basic [Выбрать]
  1. Sub gg()
  2.  
  3. Dim doc As AssemblyDocument: Set doc = ThisApplication.ActiveDocument
  4. Dim pst As PropertySets: Set pst = doc.PropertySets
  5.  
  6. Dim occur As ComponentOccurrence: Set occur = doc.ComponentDefinition.Occurrences(2)
  7. MsgBox occur.ReferencedDocumentDescriptor.FullDocumentName
  8.  
  9. 'occur.ReferencedDocumentDescriptor.ReferencedFileDescriptor
  10.  
  11. End Sub
  12.  

В ReferencedDocumentDescriptor есть еще объект ReferencedFileDescriptor, там тоже можно дополнительную информацию под черпнуть.

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
Спасибо, Михаил, за ответ. Изначально моя задача выглядела в получении ссылки "Inventor.PartDocument doc = ...". В дальнейшем планировалось обращаться к пользовательским параметрам подавленного документа. Покапавшись немного по вашей наводке, нашел свойство ReferencedDocumentDescriptor.ReferencedDocument, которое работает только когда вхождение не подавлено, иначе выдает ошибку. Подскажите пожалуйста, правильный ли я сделал вывод: подавленные документы по факту не являются подгруженными (открытыми) в инвенторе, а значит изначальный план манипуляции с их параметрами не осуществим, и мне необходимо, например в скрытом режиме их открывать, пользуясь путем к файлу, проводить манипуляции и затем закрывать?
В программировании я новичок...но ненадолго! ;)

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
правильный ли я сделал вывод: подавленные документы по факту не являются подгруженными (открытыми) в инвенторе, а значит изначальный план манипуляции с их параметрами не осуществим, и мне необходимо, например в скрытом режиме их открывать, пользуясь путем к файлу, проводить манипуляции и затем закрывать?
Да

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
В очередной раз спасибо за помощь!
В программировании я новичок...но ненадолго! ;)

Оффлайн fedor

  • ADN OPEN
  • Сообщений: 33
  • Карма: 0
Вопрос по теме!
Я пытаюсь пройти по другому пути и как раз таки Снять подавление на компоненте, далее запустить процесс обработки для этого компонента и его состава, и после сбора данных, обратно Подавить данный компонент.
Неудобство возникает на завершающем этапе. При подавлении компонента, инвентор выводит диалог сохранения текущего компонента (возможно создает уровень детализации и прочее) и макрос все это время ждет, пока пользователь не выберет действие.
Код - Visual Basic [Выбрать]
  1.             If oOcc.DefinitionDocumentType = kAssemblyDocumentObject And oOcc.Suppressed = True Then
  2.                 oOcc.Unsuppress
  3.                 'тут запускается процесс обработки по текущему узлу
  4.                Call TraverseAssembly(oOcc.SubOccurrences, Level + 1) 'ПРОЦЕСС ОБРАБОТКИ ДЛЯ ТЕКУЩЕГО КОМПОНЕНТА
  5.                oOcc.Suppressed
  6.                 'после того, как вернули в "исходное" состояние, Инвентор выводит сообщение о сохранении изм.файла
  7.                'и макрос все это время ждет, когда пользователь выберет действие
  8.            End If
Возможно ли как нибудь автоматически отвечать на подобное сообщение?
Или возможно есть метод oOcc.Save(True), аналогичный применяемый в документах?

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

  • ADN Club
  • *****
  • Сообщений: 568
  • Карма: 18
. При подавлении компонента, инвентор выводит диалог сохранения текущего компонента
"ThisApplication.SilentOperation = True" после сохранения не забудьте заменить свойство на "False" иначе до перезапуска инвентора все диалоговые окна не будут всплывать.
В программировании я новичок...но ненадолго! ;)