Сообщество программистов Autodesk в СНГ

ADN Club => Inventor API => Тема начата: Федот от 29-01-2019, 17:33:09

Название: VBA Inventor. Ссылка на объект сборки
Отправлено: Федот от 29-01-2019, 17:33:09
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.  
А это мне не подходит. Если нужно могу выложить примеры из Интернета.
Название: Re: VBA Inventor. Ссылка на объект сборки
Отправлено: Александр Ривилис от 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.  
Непонятно только что будет если у тебя сборки/детали будут с одним именем.
Название: Re: VBA Inventor. Ссылка на объект сборки
Отправлено: mikazakov от 29-01-2019, 18:11:43
Как с помощью команды set обратиться к объекту
Set это все таки не команда, а оператор языка VBA.
Если просто выбрать по имени то Александр Ривилис вам пример написал. Или там что то по хитрее?
Название: Re: VBA Inventor. Ссылка на объект сборки
Отправлено: xzenter от 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.  
Название: Re: VBA Inventor. Ссылка на объект сборки
Отправлено: Федот от 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 (ПСК), этих двух изделий конструкциями.
Продолжаю сражаться.