VBA Inventor. Ссылка на объект сборки

Автор Тема: VBA Inventor. Ссылка на объект сборки  (Прочитано 4447 раз)

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

Оффлайн ФедотАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Inventor 2014. VBA.
Добрый день.
Прошу не судить строго. Я не совсем программист. Точнее, совсем не программист. Но появилась задача и вот я пытаюсь ее решить. Споткнулся на одном моменте, и никак не могу победить. Как с помощью команды set обратиться к объекту, с определенным заранее известным именем (сборке или детали) уже содержащейся в сборке. Есть примеры в Интернете, но там либо обращаются к выделенным объектам select приблизительно так,

Код - Visual Basic [Выбрать]
  1. 'Ссылка на коллекцию SelectSet активного документа
  2. Set oSelectSet = oApp.ActiveDocument.SelectSet
  3.  
либо добавляют их с помощью команды add.

Код - Visual Basic [Выбрать]
  1. Dim sFileName As String
  2. sFileName = "c:\temp\Cylinder.ipt"
  3. Dim oCylinder1 As ComponentOccurrence
  4. Set oCylinder1 = oAssyDoc.ComponentDefinition.Occurrences.Add(sFileName, _
  5. oPositionMatrix)
  6.  
А это мне не подходит. Если нужно могу выложить примеры из Интернета.
« Последнее редактирование: 29-01-2019, 17:37:36 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: VBA Inventor. Ссылка на объект сборки
« Ответ #1 : 29-01-2019, 17:36:26 »
Федот,
Приветствую на форуме! Обрати внимание правило форматирования кода на нашем форуме (отмечено у меня в подписи) и соблюдай его.
Предполагаю, что как-то так:
Код - Visual Basic [Выбрать]
  1. Dim oAsmDoc As AssemblyDocument
  2. Set oAsmDoc = ThisApplication.ActiveDocument
  3.  
  4. Dim oAsmDef As AssemblyComponentDefinition
  5. Set oAsmDef = oAsmDoc.ComponentDefinition
  6.  
  7. Dim oLeafOccs As ComponentOccurrencesEnumerator
  8. Set oLeafOccs = oAsmDef.Occurrences.AllLeafOccurrences
  9.  
  10. Dim oOcc As ComponentOccurrence
  11. For Each oOcc In oLeafOccs
  12.     If oOcc.Name = OccurrenceName Then
  13.      ' Здесь вставляй обработку выбраной по имени сборки
  14.  
  15.     End If
  16. Next
  17.  
Непонятно только что будет если у тебя сборки/детали будут с одним именем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 752
  • Карма: 195
  • Skype: mikazakov@mail.ru
Re: VBA Inventor. Ссылка на объект сборки
« Ответ #2 : 29-01-2019, 18:11:43 »
Как с помощью команды set обратиться к объекту
Set это все таки не команда, а оператор языка VBA.
Если просто выбрать по имени то Александр Ривилис вам пример написал. Или там что то по хитрее?

Оффлайн xzenter

  • ADN OPEN
  • Сообщений: 29
  • Карма: 1
    • xzenter.com
  • Skype: xzenter
Re: VBA Inventor. Ссылка на объект сборки
« Ответ #3 : 30-01-2019, 10:50:29 »
Пример для VBA.
Если открыта сборка и в этой сборке есть файл, который мы хотим получить, то можно его получить, используя данную конструкцию:

Код - Visual Basic [Выбрать]
  1. Sub Main()
  2.    Dim oDoc As Document
  3.    ' Получаем документ по имени файла при условии, что данный документ находится в памяти Inventor.
  4.   Set oDoc = ThisApplication.Documents.ItemByName("D:\Part1.ipt")
  5.    MsgBox (oDoc.FullFileName)
  6. End Sub
  7.  
« Последнее редактирование: 30-01-2019, 12:24:01 от Александр Ривилис »

Оффлайн ФедотАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Re: VBA Inventor. Ссылка на объект сборки
« Ответ #4 : 30-01-2019, 16:23:20 »
ООООООгромная благодарность всем кто ответил ;D!!! И всем тем кто не обругал. Всем к карме +100500.
Говорят правильно заданный вопрос - это 60% правильного ответа. Пока даже вопрос сформулировать не очень получается. "Дерево там такое.."
Сейчас разбираюсь с кодом. Получается медленно, но продвигается. Без помощи премного уважаемых Гуру, фиг я бы догадался до такой конструкции. Даже в поисковик не знаешь чего забить. Пока код выглядит вот так (информация для чайников типа меня, дабы они не тревожили Гуру лишний раз ):

Код - Visual Basic [Выбрать]
  1.  Sub test()
  2. '  Имя детали в сборке "Кирпич"
  3.    Dim oAsmDoc As AssemblyDocument
  4.     Set oAsmDoc = ThisApplication.ActiveDocument
  5.      
  6.     Dim oAsmDef As AssemblyComponentDefinition
  7.     Set oAsmDef = oAsmDoc.ComponentDefinition
  8.      
  9.     Dim oLeafOccs As ComponentOccurrencesEnumerator
  10.     Set oLeafOccs = oAsmDef.Occurrences.AllLeafOccurrences
  11.      
  12.     Dim oOcc As ComponentOccurrence
  13.     For Each oOcc In oLeafOccs
  14.         If oOcc.Name = "Кирпич" Then
  15.          ' Здесь вставляй обработку выбраной по имени сборки
  16.              Set Базовая_деталь = oAsmDoc.ComponentDefinition.Occurrences.ItemByName("Кирпич")
  17.         End If
  18.     Next    
  19. End Sub

Если описать задачу полностью, то пытаюсь собрать такой код, чтобы Inventor обращался к файлу Excel, который содержит информацию об изделии "Б" (имя, координаты относительно другого изделия). Опираясь на эту информацию, добавлял в сборку (содержащую изделие "А") из заранее созданной библиотеки подсборку изделия,  и связывал USC (ПСК), этих двух изделий конструкциями.
Продолжаю сражаться.