Нужен исполнитель для написания макроса для Inventor

Автор Тема: Нужен исполнитель для написания макроса для Inventor  (Прочитано 13378 раз)

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

Оффлайн ssn-007Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Есть кто програмирующий в Inventor на VBA?
 Необходимо создать программу копирования сборок.

 1. В сборку могут входить сборки и детали.
 2. Детали могут быть обычными и библиотечными (параметрические)
 3. Все обычные детали, входящие в сборку сохранены в одной папке с именем сборки. Библиотечных файлов в папке сборки нет.
 4. В сборку могут входить другие сборки. Они могут быть библиотечными (сохранены за пределами рабочей папки) и обычными, сохранёнными в папке сборки. Обычные тоже надо копировать.

 Механизм:
 1. Выбираем сборку. Определяется папка её сохранения. Назначается имя новой сборки (можно через запрос, а можно в автомате добавлением номера к сущ. имени)
 2. Создается новая папка с именем новой сборки. В неё сохраняется файл новой сборки. Файл новой сборки можно получить просто через сохранить как для исходного файла.
 3. Имеем новый файл сборки с входящими в него деталями из изначальной сборки. Для всех обычных деталей (которые сохранены в начальной папке) делаем процедуру сохранить как с прежним именем в новую папку.
 4. Входящие сборки оставляем без изменения, как и входящие библиотечные файлы. Просто оставляем их прежними в новой сборке. (это касается сборок, сохранённых за пределами папки исходной сборки. если сборка сохранена внутри папки, то её тоже надо копировать)

 В итоге работы программы имеем копию существующей сборки с новыми местоположениями входящих деталей и с сохранением библиотечных деталей и входящих сборок.


Сколько будет стоить этот макрос?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Сколько будет стоить этот макрос?
Приветствую на форуме! Я правильно понимаю, что вы ищите исполнителя для этой работы? Или вы собираетесь выполнить эту задачу самостоятельно, но не знаете какую сумму можно попросить у заказчика?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ssn-007Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
я пока не понимаю стоимости этой работы. предложите цену.
я сам заказчик.
вдруг когда узнаю цену решу все же сам реализовать это дело в ВБА.
и тогда уже буду приставать с вопросами по коду.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я не пишу для Inventor, так что помочь не смогу ни с программой, ни с оценкой её стоимости. Причина по которой я задал этот вопрос в том, что если это поиск исполнителя, то эту тему нужно было бы создать в этом разделе: http://adn-cis.org/forum/index.php?board=38.0
Если же вы собираетесь решить её самостоятельно, и нужна помощь в реализации, то тогда тема в нужном разделе, но вам нужно как минимум изучить возможности Inventor API и задавать более конкретные вопросы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ssn-007Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
вот именно сама модель API и вызывает у меня вопросы. как мало информации.
проще бы конечно отдать это на откуп профи.
просто сколько это стоит, вот в чем вопрос.

Если не составит труда, переместите пожалуйста в ветку запросов.
спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Сделал. Теперь эта тема будет видна в обоих разделах.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
То, что вы описали, напоминает задачу Pack’n’Go.
Самый простой и рациональный метод ее решения основывается на функционале Apprentice Server.  Именно так работает штатная утилита Design Assistant. 

Источники информации по Apprentice
Существенным ограничением является то, что Apprentice не может работать в одном процессе с самим Inventor.  Так что, традиционные варианты Inventor AddIn или макросов Inventor VBA отпадают сразу.

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

Оффлайн ssn-007Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
Спасибо.
Вопрос каких либо встроенных утилит все же думаю отпадает из за моей организации файловой системы.
Я в работе испльзую параметрические детали, но место их расположения в проекте не объявляю библиотекой. И более того, библиотека этих файлов не общая на все проекты, а своя в каждом проекте. Это связано с ошибками, которые неизбежны при единой библиотеке... ну это другая история (в своё время наелся проектами, которые с течением времени невозможно открыть при каких либо потерях в библиотеках). По этому новый проект - к нему новый набор параметрических деталей.
Все встроенные утилиты размножают абсолютно все файлы, а мне нужна только копия файлов, которые расположены в папке сборки.
Как я поступаю руками сейчас:
открываю второй сеанс инвентора
ставлю там активным проектом специально заведённый проект
копирую в папку того проекта папку сборки, которую надо размножить
открываю эту сборку во втором сеансе инвентора. он ругается, ему на хватает библиотечных и прочих файлов которые за пределами этой папки. на это дело внимания не обращаю... открываю. Изменяю свойство сборки (наименование), и сохраняю. Изменяю имя самой сборки, изменяю имя паки в которой все лежит.
Переношу новую папку обратно. И открываю её в первой сессиии инвентора. все детальки за пределами папки подхватываются и у меня есть копия сборки.

Т.е. по сути, надо физически спопироват папку. Переименовать. Открыть новую сборку (скопированную). Но все детали в этой сборке будут браться из первой папки... и надо их как бы заменить такими же деталями из скопированной папки.
Ещё вариант, которым так же иногда пользуюсь при копировании сборки... Это скопировать цель за пределы проекта, оставшуюся копию переименовать, запустить, изменить свойства, сохранить, и потом вернуть изначальную папку в проект. При открытии папки копии она будет искать файлы сначало на их прежнем месте, не найдёт их там и дальше будет искать их в папке сборки.. и все получается.
все файлы в папках имеют названия типа
деталь 1
деталь 2
деталь 3
и ни разу ещё линки сборок между собой не перепутались.

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Описываемые вами манипуляции в пользовательском интерфейсе Инвентора инициируют его внутренние механизмы восстановления целостности системы файловых ссылок в сборке и ее компонентах.
Воспроизводить программно эти манипуляции неверно концептуально, коль скоро существуют «идеологически правильные» методы. 

Вариант 1.  Рекомендуемый. Для изменения файловых ссылок используется функционал объекта ApprenticeServerComponent.FileSaveAs

Код - Visual Basic [Выбрать]
  1. Private Sub ChangeReferenceSample()
  2.     Dim oApprentice As New ApprenticeServerComponent
  3.    
  4.     ' Open a document.
  5.    Dim oDoc As ApprenticeServerDocument
  6.     Set oDoc = oApprentice.Open("C:\Temp\Assembly1.iam")
  7.    
  8.     ' Iterate through the references looking for a
  9.    ' reference to a specific file.
  10.    Dim oRefFileDesc As ReferencedFileDescriptor
  11.     For Each oRefFileDesc In oDoc.ReferencedFileDescriptors
  12.         If oRefFileDesc.FullFileName = "C:\Temp\OldPart.ipt" Then
  13.             ' Replace the reference.
  14.            Call oRefFileDesc.PutLogicalFileNameUsingFull( _
  15.                                              "C:\Temp\NewPart.ipt")
  16.             Exit For
  17.         End If
  18.     Next
  19.    
  20.     ' Set a reference to the FileSaveAs object.
  21.    Dim oFileSaveAs As FileSaveAs
  22.     Set oFileSaveAs = oApprentice.FileSaveAs
  23.    
  24.     ' Save the assembly.
  25.    Call oFileSaveAs.AddFileToSave(oDoc, oDoc.FullFileName)
  26.     Call oFileSaveAs.ExecuteSave
  27. End Sub

Вариант 2.  Альтернативный способ сводится к извлечению из документа ссылки на связанные файлы в виде объектов FileDescriptor и лобовой замены ссылки на файл методом FileDescriptor.ReplaceReference.

В обоих случаях замена файловых ссылок выполняется только для файлов, которые надлежит копировать. Ссылки на внешние файлы (как бы ”библиотечные”) вы оставляете без изменений.  В итоге имеем сборку-клон, в которой внутренние ссылки являются действительно внутренними (переопределены на свежие копии), а все внешние не изменялись.

Желаю успехов.
« Последнее редактирование: 11-11-2014, 13:26:28 от Александр Ривилис »

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Стоит иметь ввиду, что в текущей версии Inventor интересующий вас функционал уже реализован штатными средствами.

См. раздел в хелпе:
Компоненты iLogic
Описано клонирование детали или подсборки с последующей вставкой в активную сборку
http://help.autodesk.com/view/INVNTOR/2015/RUS/?guid=GUID-77EAB07E-932B-4E21-AA7E-F4AD9807807B

Вот пара видео про детали и подсборки, соответственно:
http://designandmotion.net/autodesk/mfg-pages/inventor/iparts-iassemblies-be-gone-well-almost/
http://designandmotion.net/autodesk/mfg-pages/inventor/ilogic-assemblies-its-wise-to-normalise/
Автор видео дополнительно рекомендует полезное – выполнить стабилизацию имен компонентов (он оперирует термином “нормализация”) – дать им собственные неавтоматические имена.   Тогда вставка подсборки компонентом iLogic будет означать не только ее классическое клонирование ( == CopyDesign) безо всяких танцев с бубном, но и ссылки на компоненты в правилах iLogic останутся корректными. 

Полноценная команда для выполнения операции CopyDesign описана здесь:
Копирование проектов, содержащих правила iLogic
http://help.autodesk.com/view/INVNTOR/2015/RUS/?guid=GUID-494D8A9B-105C-4032-B9A9-FC77DD39FEA8

Насколько я понимаю, наличие правил iLogic в клонируемых компонентах совершенно не обязательно.

Это тот самый случай, когда апгрейд - не роскошь, а средство "передвижения"  ;)

Оффлайн ssn-007Автор темы

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
это не совсем то что надо.
подобные вещи можно было кстати делать и без правил лоджик. Просто с параметрическими библиотечными деталями. когда создавался экземпляр детали в папке сборки а не в библиотеке... правда, на сколько я помню, этот экземпляр терял параметры и становился "пустой" деталькой...
тут конено круче.
Но, это не для меня. поскольку все новые клонируемые сборки отличаются от шаблона. вернее невозможно создать такой шаблон на все случаи жизни.
а новые версии инвентора меня очень растраивают своим интерфейсом. эта менюшка аля майя или макс меня просто убивает. посмотрел, как вернуть старый внешний вид не нашёл, закрыл и больше не открывал. хотя, использование этих правил наверно крутой инструмент.