Нахождение в браузере вхождений

Автор Тема: Нахождение в браузере вхождений  (Прочитано 13088 раз)

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

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Здравствуйте! Подскажите пожалуйста, я пытаюсь реализовать функцию "найти в обозревателе". То есть когда выделяются компоненты, правой кнопкой и "найти в обозревателе". Казалось бы, все просто, но работает не стабильно и я не могу понять почему. Делаю так:
 
Код - Visual Basic [Выбрать]
  1.     Dim oApp As Inventor.Application
  2.     Set oApp = ThisApplication
  3.    
  4.     Dim oDoc As Inventor.Document
  5.     Dim oDoc2 As Inventor.Document
  6.     Set oDoc = oApp.ActiveDocument
  7.    
  8.     Dim oCompDef As ComponentDefinition
  9.     Set oCompDef = oDoc.ComponentDefinition
  10.     Dim oOcc1 As ComponentOccurrence
  11.     Dim oOcc2 As ComponentOccurrence
  12. 'Схема 1
  13.   Set oOcc1 = oCompDef.Occurrences.Item(1).Definition.Occurrences.ItemByName(1)
  14.    oCompDef.Document.BrowserPanes.Item("Модель").GetBrowserNodeFromObject(oOcc1).EnsureVisible
  15. 'Схема 2
  16. For Each oDoc In oCompDef.Document.AllReferencedDocuments
  17.    Set oOcc2 = oCompDef.Occurrences.AllReferencedOccurrences(oDoc).Item(1)
  18.   oCompDef.Document.BrowserPanes.Item("Модель").GetBrowserNodeFromObject(oOcc2).EnsureVisible
  19. Next
  20.  
Первая схема работает всегда. Но мне необходимо работать по второй схеме, то есть когда ComponentOccurrence получается из документа через AllReferencedOccurrences. Но по этой схеме через раз выдается ошибка метода EnsureVisible или объекта BrowserNode. Ошибка выдается если ComponentOccurrence находится внутри сборки, которая находится внутри массива или ComponentOccurrence находится внутри массива который находится внутри сборки. То есть при работе с массивами выдается такая ошибка.
« Последнее редактирование: 14-07-2015, 17:26:38 от Pabloa »

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Нахождение в броузере вхождений
« Ответ #1 : 10-07-2015, 21:53:43 »
Я совсем не понимаю Inventor, но рискну предположить, что необходима рекурсивная функция. Придется проходить по всем элемент, и, если элемент - сборка, то по по его подэлементам и т.д.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #2 : 10-07-2015, 22:12:21 »
Я совсем не понимаю Inventor, но рискну предположить, что необходима рекурсивная функция. Придется проходить по всем элемент, и, если элемент - сборка, то по по его подэлементам и т.д.
Спасибо за ответ! Да, я так делал раньше, но очень долго, на 600 вхождений 2,5 минуты, а у нас сборки по 50 000 вхождений бывают, поэтому перебор по документам очень ускоряет процесс... Надеюсь что есть другой способ... Я вообще, если честно, даже логики не понимаю, почему метод EnsureVisible не может найти аргумент, если аргумент есть, oOcc получен, что ему еще надо, при чем это не работает только когда деталь внутри массива внутри сборки... Или у массивов другой BrowserPanes должен быть... Но почему тогда работает если оOcc получить напрямую из component definition.... Watches в Vba показывает одно и тоже, если oOcc получен из component definition или если он получен из AllReferencedOccurrences... Почему же последний oOcc не воспринимается методом EnsureVisible... Больше ничего в голову не приходит, тупик....

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Нахождение в броузере вхождений
« Ответ #3 : 10-07-2015, 22:27:46 »
Нну, в принципе можно передавать несколько параметров, в т.ч. один из них (уже вычисленный результат) - по ссылке. Если этот параметр не Null (ну или не отвечает еще каким-то требованиям), то выполнять проходку дальше. Если условия удовлетворены - то просто выход из функции.
P.S. Это общее видение процесса, естественно, без конкретики.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Нахождение в броузере вхождений
« Ответ #4 : 10-07-2015, 22:54:31 »
А постановка задачи какая? Просто развернуть часть браузера? Но что в браузере можно увидеть если там 1000 узлов?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Нахождение в броузере вхождений
« Ответ #5 : 10-07-2015, 23:19:36 »
Подозреваю, что не просто найти, но и открыть, и в браузере активировать ;)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #6 : 11-07-2015, 18:06:21 »
Постановка задачи простая: необходимо разработать средство проверки документов, задействованных в текущей сборке по определенным критериям. Если какие-то документы не проходят эту проверку, их необходимо обозначить визуально. На данный момент я решаю эту задачу выделением определенных компонентов в рабочем окне модели. Но если выделяются 3 компонента из 33000 это плохо заметно визуально, поэтому помимо выделения в окне модели, необходимо сделать выделение в броузере, с раскрытием дерева до этого компонента. Я использую EnsureVisible, но он не может показать в обозревателе ComponentOccurrence, который был получен из AllReferencedOccurrences при условии, что ComponentOccurrence находится внутри сборки, которая находится внутри массива. Поэтому единственное решение, чтобы EnsureVisible работал - это получать все ComponentOccurrence из ComponentDefinition. Но это значит делать перебор по вхождениям, на что будет тратиться большое количество времени. Что не допустимо, т.к. такую проверку необходимо делать постоянно. Поэтому хотел бы с Вами посоветоваться. Может я что-то делаю не так.

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Нахождение в броузере вхождений
« Ответ #7 : 11-07-2015, 19:45:17 »
Pabloa,
Могу подкинуть идею по воркфлоу:
1. после того как проблемные файлы выделены можно сформировать видовое представление, где проблемные файлы останутся видимыми, а все остальные погашеные
2. Работать со встроенным браузером инвентора не очень удобно, по этому можно сделать свою панель типа браузера, куда будет выводится список  проблемных документов. А потом работать с этой панелью нормальными программными инструментами. Загружать деталь отдельно из списка, тут же обрабатывать свойства и пр.  На VBA это тоже можно сделать, но на VB.NET проще и функциональнее.
Производительность VBA и AddIn на VB.NET я не сравнивал. Но AddIn точно не медленнее, чем VBA.
Ну как идеи?

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #8 : 11-07-2015, 22:59:29 »
mikazakov, Спасибо за идеи) Менять видовое представление в рамках моей задачи очень не хочется... А на счет "своего броузера", то у меня, в принципе, уже формируется отчет в эксель по этим файлам и я точно знаю, что это за файлы...  тут просто смысл в том, что для удобства мне необходимо работать именно с броузером инвентора, видеть в нем эти файлы...

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: Нахождение в броузере вхождений
« Ответ #9 : 12-07-2015, 18:53:39 »
Pabloa,
А что там в инвенторовском браузере такого нужного?

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #10 : 12-07-2015, 20:39:31 »
Pabloa,
А что там в инвенторовском браузере такого нужного?
Просто я разрабатываю программу, в работе которой необходим диалог с окном 3д модели, то есть нужно,  например, постоянно выделять определенные компоненты, как в окне 3д модели, так и в броузере, в зависимости от того, где удобно в данный момент. Соответственно, после проверки, о которой шла речь,  необходимо продолжать работать с окном 3Д модели или с броузером... Если будет 2-е окно броузера, то придется постоянно между ними переключаться, а это не совсем удобно...  или надо писать полный аналог броузера инвентора, что и трудно и долго, ну лично для меня)

Оффлайн filat

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Нахождение в броузере вхождений
« Ответ #11 : 13-07-2015, 08:44:02 »
Постановка задачи простая: необходимо разработать средство проверки документов, задействованных в текущей сборке по определенным критериям. Если какие-то документы не проходят эту проверку, их необходимо обозначить визуально.
Я что-то совсем ничего не понимаю! Вы ходите видеть все файлы проекта и визуальное отображение всех файлов не задействованных в активной сборке? Еще больше не понятны ссылки на размер сборки - до 50 тыщ - работайте с уникальными именами их от силы тыщи полторы будет, хотя есть казусы со сварнями элементами и т.д., но это решаемые вопросы... Не понятной остается общая цель задачи? Очистка проекта!? Но это можно решить другим путем...

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #12 : 13-07-2015, 10:59:52 »
Постановка задачи простая: необходимо разработать средство проверки документов, задействованных в текущей сборке по определенным критериям. Если какие-то документы не проходят эту проверку, их необходимо обозначить визуально.
Я что-то совсем ничего не понимаю! Вы ходите видеть все файлы проекта и визуальное отображение всех файлов не задействованных в активной сборке? Еще больше не понятны ссылки на размер сборки - до 50 тыщ - работайте с уникальными именами их от силы тыщи полторы будет, хотя есть казусы со сварнями элементами и т.д., но это решаемые вопросы... Не понятной остается общая цель задачи? Очистка проекта!? Но это можно решить другим путем...
Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели. Находить для последующих манипуляций с ними. Но т.к. отношение всех компонентов сборки к этим, найденным, большое, то их не всегда заметно при выделении, поэтому я хотел находить их еще и в браузере, чтобы, если нужно, показать их в окне модели. А при чем тут уникальные имена, если в сборке 50 тыщ вхождений. Документов конечно меньше, поэтому я и перебираю их, а не вхождения. Вот я и пытаюсь сохраняя эту схему перебора осуществить такую визуальную проверку.

Оффлайн filat

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Нахождение в броузере вхождений
« Ответ #13 : 13-07-2015, 12:00:34 »
которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку
Мне еще меньше понятно стало... если вы детали/подсборки видете в сборке, то о какой проверке по отношению к текущейсборке может идти речь? Вы подразумеваете вопрос о нахождении копий вхождения текущей модели детали/подсборки в текущей сборке?
Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели.
Я не понимаю, что мешает использовать команду Find in browser? Или выхотите выполнить выделение входящи элементов, входящих в сборку, по определенному признаку, таким образом, чтоб все они были подсвечены в браузере сборки?

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Нахождение в броузере вхождений
« Ответ #14 : 13-07-2015, 12:41:13 »
которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку
Мне еще меньше понятно стало... если вы детали/подсборки видете в сборке, то о какой проверке по отношению к текущейсборке может идти речь? Вы подразумеваете вопрос о нахождении копий вхождения текущей модели детали/подсборки в текущей сборке?
Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели.
Я не понимаю, что мешает использовать команду Find in browser? Или выхотите выполнить выделение входящи элементов, входящих в сборку, по определенному признаку, таким образом, чтоб все они были подсвечены в браузере сборки?
Я проверяю перебором пользовательские свойства деталей и сборок, которые в данный момент задействованы в открытой сборке. Проверка идет перебором по документам. После такой проверки, необходимо видеть все вхождения непрошедших эту проверку документов в открытой сборке. И видеть желательно в окне 3д модели, а не в форме отчета где-то в 10-ом окне... Я это делаю для удобства работы с программой, которую разрабатываю, потому что ее работа строится на том, что нужно постоянно выделять компоненты в окне 3д модели.