Копирование и переименования даталей сборок и подсборок с помощью VBA

Автор Тема: Копирование и переименования даталей сборок и подсборок с помощью VBA  (Прочитано 1291 раз)

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

Оффлайн ШашлыкАвтор темы

  • ADN OPEN
  • Сообщений: 3
  • Карма: 0
Всем привет!
Для работы с Inventor использую python и библиотеку pywin32.

У меня есть сборка состоящая только из деталей. Эта шаблонная сборка, то есть когда в каком-то из проекте нужна данная сборка, то она копируется и каждый файл переименовывается в соответствии с проектом. Заменяю компоненты в сборке таким образом:

inventor = wc.GetActiveObject('Inventor.Application')
doc = inventor.ActiveDocument

for ref_file in doc.File.ReferencedFileDescriptors:
    ...
    ref_file .ReplaceReference(...)

В таком подходе у меня не возникает проблем и копируются все свойства сборки.
Сейчас у меня появилась аналогичная задача, только копировать более сложную сборку, в которую входят другие сборки и уже не получается просто взять и поменять компоненты сборки, так как надо менять компоненты подсборок и т.д.
Если бы не приходилось переименовывать файлы, то можно было бы просто копировать через Ctrl + C.
Копировать хочу полностью автоматически, без использования Disign Assistent и т.п.

Подобные сборки можно "лечить" после копирования и переименовывания всех файлов через ручную корректировку, где Inventor запрашивает путь к каждому потерянному файлу сборки


Вот и возникает вопрос можно ли как-то это автоматизировать? Ведь бывают большие сборки где десятки деталей




Оффлайн filat

  • ADN Club
  • ****
  • Сообщений: 262
  • Карма: 2
Обход подсборок выполняется через вызов подпрограммы, по условию.
Вот пример подобного цикла, думаю разберешься.  ;)
https://adn-cis.org/forum/index.php?topic=9999.msg44879#msg44879

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Добрый день!

Возможно я немного оффтопик скажу, но для вашей операции есть встроенный функционал инвертора. Как подключиться к нему программно ( если это вобще возможно) я не знаю, но вот от «замены руками» он вам точно спасёт. В волте тоже есть копирование, но оно глючное, некорректно работает, если используете наследование. В целом вопрос наследования - главная проблема при копировании. Потому как, если его не используете, то просто рекурсивно открываете все подсборки, делаете в них замену и закрываете - точно также, ее вы это делали для главной сборки.
П.С. Если правильно работать с проектами инвертора, то от переименовывания деталей в целом можно отказаться, вы можете копировать сборку целиком в папку проекта ( и, например, переименовать только ее). По умолчанию сборка ищет детали в своей подпапке и папке проекта, детали из других проектов тащить не будет, даже если они одноименные. Другое дело, что если вы хотите с имён деталей номера брать, но тут опять же вопрос решаемый.  Хотя, на мой вкус, переименовывать детали все же лучше, чем не переименовывать ))
В программировании я новичок...но ненадолго! ;)

Оффлайн R.I.Chernov

  • ADN Club
  • *****
  • Сообщений: 565
  • Карма: 18
Ну и ещё одна ремарка, опять скорее не про программирование, а про использование инвертора. Если у вас узел типовой и не меняется, в чем необходимость тащить его сборку  из проекта в проект и копировать по сто раз? Можно же сделать отдельный проект-библиотеку с типовыми узлами, подключать его к проектам и использовать.
В программировании я новичок...но ненадолго! ;)