Я совсем не понимаю Inventor, но рискну предположить, что необходима рекурсивная функция. Придется проходить по всем элемент, и, если элемент - сборка, то по по его подэлементам и т.д.Спасибо за ответ! Да, я так делал раньше, но очень долго, на 600 вхождений 2,5 минуты, а у нас сборки по 50 000 вхождений бывают, поэтому перебор по документам очень ускоряет процесс... Надеюсь что есть другой способ... Я вообще, если честно, даже логики не понимаю, почему метод EnsureVisible не может найти аргумент, если аргумент есть, oOcc получен, что ему еще надо, при чем это не работает только когда деталь внутри массива внутри сборки... Или у массивов другой BrowserPanes должен быть... Но почему тогда работает если оOcc получить напрямую из component definition.... Watches в Vba показывает одно и тоже, если oOcc получен из component definition или если он получен из AllReferencedOccurrences... Почему же последний oOcc не воспринимается методом EnsureVisible... Больше ничего в голову не приходит, тупик....
Pabloa,Просто я разрабатываю программу, в работе которой необходим диалог с окном 3д модели, то есть нужно, например, постоянно выделять определенные компоненты, как в окне 3д модели, так и в броузере, в зависимости от того, где удобно в данный момент. Соответственно, после проверки, о которой шла речь, необходимо продолжать работать с окном 3Д модели или с броузером... Если будет 2-е окно броузера, то придется постоянно между ними переключаться, а это не совсем удобно... или надо писать полный аналог броузера инвентора, что и трудно и долго, ну лично для меня)
А что там в инвенторовском браузере такого нужного?
Постановка задачи простая: необходимо разработать средство проверки документов, задействованных в текущей сборке по определенным критериям. Если какие-то документы не проходят эту проверку, их необходимо обозначить визуально.Я что-то совсем ничего не понимаю! Вы ходите видеть все файлы проекта и визуальное отображение всех файлов не задействованных в активной сборке? Еще больше не понятны ссылки на размер сборки - до 50 тыщ - работайте с уникальными именами их от силы тыщи полторы будет, хотя есть казусы со сварнями элементами и т.д., но это решаемые вопросы... Не понятной остается общая цель задачи? Очистка проекта!? Но это можно решить другим путем...
Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели. Находить для последующих манипуляций с ними. Но т.к. отношение всех компонентов сборки к этим, найденным, большое, то их не всегда заметно при выделении, поэтому я хотел находить их еще и в браузере, чтобы, если нужно, показать их в окне модели. А при чем тут уникальные имена, если в сборке 50 тыщ вхождений. Документов конечно меньше, поэтому я и перебираю их, а не вхождения. Вот я и пытаюсь сохраняя эту схему перебора осуществить такую визуальную проверку.Постановка задачи простая: необходимо разработать средство проверки документов, задействованных в текущей сборке по определенным критериям. Если какие-то документы не проходят эту проверку, их необходимо обозначить визуально.Я что-то совсем ничего не понимаю! Вы ходите видеть все файлы проекта и визуальное отображение всех файлов не задействованных в активной сборке? Еще больше не понятны ссылки на размер сборки - до 50 тыщ - работайте с уникальными именами их от силы тыщи полторы будет, хотя есть казусы со сварнями элементами и т.д., но это решаемые вопросы... Не понятной остается общая цель задачи? Очистка проекта!? Но это можно решить другим путем...
которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборкуМне еще меньше понятно стало... если вы детали/подсборки видете в сборке, то о какой проверке по отношению к текущейсборке может идти речь? Вы подразумеваете вопрос о нахождении копий вхождения текущей модели детали/подсборки в текущей сборке?
Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели.Я не понимаю, что мешает использовать команду Find in browser? Или выхотите выполнить выделение входящи элементов, входящих в сборку, по определенному признаку, таким образом, чтоб все они были подсвечены в браузере сборки?
Я проверяю перебором пользовательские свойства деталей и сборок, которые в данный момент задействованы в открытой сборке. Проверка идет перебором по документам. После такой проверки, необходимо видеть все вхождения непрошедших эту проверку документов в открытой сборке. И видеть желательно в окне 3д модели, а не в форме отчета где-то в 10-ом окне... Я это делаю для удобства работы с программой, которую разрабатываю, потому что ее работа строится на том, что нужно постоянно выделять компоненты в окне 3д модели.которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборкуМне еще меньше понятно стало... если вы детали/подсборки видете в сборке, то о какой проверке по отношению к текущейсборке может идти речь? Вы подразумеваете вопрос о нахождении копий вхождения текущей модели детали/подсборки в текущей сборке?Я хочу видеть определенные сборки или детали, которые не прошли определенную проверку. Эти сборки или детали входят в мою текущую сборку. Мне просто нужно их быстро находить в окне 3Д модели.Я не понимаю, что мешает использовать команду Find in browser? Или выхотите выполнить выделение входящи элементов, входящих в сборку, по определенному признаку, таким образом, чтоб все они были подсвечены в браузере сборки?
Я проверяю перебором пользовательские свойства деталей и сборок, которые в данный момент задействованы в открытой сборке. Проверка идет перебором по документам. После такой проверки, необходимо видеть все вхождения непрошедших эту проверку документов в открытой сборке. И видеть желательно в окне 3д модели, а не в форме отчета где-то в 10-ом окне... Я это делаю для удобства работы с программой, которую разрабатываю, потому что ее работа строится на том, что нужно постоянно выделять компоненты в окне 3д модели.Раз просто нужны свойства моделей, то самая тема, сделать свою форму с датагридом в которой будет список проблемных моделей с полями для конкретных свойств. При выделении строки с деталью легко подсветить эту деталь в сборке, здесь же можно быстро отредактировать свойства грида. Форму с таблицей можно сделать не модальной, что бы не блокировала доступ к инвентору и всегда была сверху.
Я только не пойму каким это образом выделяя что-то в датагриде я увижу это в окне 3Д модели. В браузере есть функция "показать в окне" а через датагрид как я это сделаю? Сейчас возможность только на VBA работать.Я проверяю перебором пользовательские свойства деталей и сборок, которые в данный момент задействованы в открытой сборке. Проверка идет перебором по документам. После такой проверки, необходимо видеть все вхождения непрошедших эту проверку документов в открытой сборке. И видеть желательно в окне 3д модели, а не в форме отчета где-то в 10-ом окне... Я это делаю для удобства работы с программой, которую разрабатываю, потому что ее работа строится на том, что нужно постоянно выделять компоненты в окне 3д модели.Раз просто нужны свойства моделей, то самая тема, сделать свою форму с датагридом в которой будет список проблемных моделей с полями для конкретных свойств. При выделении строки с деталью легко подсветить эту деталь в сборке, здесь же можно быстро отредактировать свойства грида. Форму с таблицей можно сделать не модальной, что бы не блокировала доступ к инвентору и всегда была сверху.
Но это все конечно лучше через VB.NET. Через VBA теоретически тоже можно, но там нужно будет допотопные контролы искать с гридом и регестрировать его в винде.
С VB.NET в принципе подсобим, можем и с С# подсобить.
Я только не пойму каким это образом выделяя что-то в датагриде я увижу это в окне 3Д модели.Легко, Выдели деталь и запусти макрос
Sub Zoom()
Dim ZoomCommand As String: ZoomCommand = "AppZoomSelectCmd"
Call ThisApplication.CommandManager.ControlDefinitions(ZoomCommand).Execute
End Sub
Сейчас возможность только на VBA работать.Visual Studio Express имеет бесплатную лицензию. Как обойти ограничения функциональности я подробно написал в своем мануале.
Ясно) попробую ваш способ) спасибо за ответы)Я только не пойму каким это образом выделяя что-то в датагриде я увижу это в окне 3Д модели.Легко, Выдели деталь и запусти макросКод: [Выделить]Sub Zoom()
Dim ZoomCommand As String: ZoomCommand = "AppZoomSelectCmd"
Call ThisApplication.CommandManager.ControlDefinitions(ZoomCommand).Execute
End SubСейчас возможность только на VBA работать.Visual Studio Express имеет бесплатную лицензию. Как обойти ограничения функциональности я подробно написал в своем мануале.
как говорится: VBA must die