Тема: Получить параметры через API inventor HELP

Подскажите код реализации задачи через API: есть сборка, надо через API обойти все детали (входящие в сборку и в подсборки) и составить массив значений по параметрам:

В каждой детали могут присутствовать параметры d_A, d_B, d_C, d_E их надо получить:

могут быть
деталь1 = d_A, d_B
могут быть
деталь2 = d_A, d_C, d_E
могут быть
деталь3 = d_A, d_E
могут быть
деталь4 = d_A, d_B, d_C, d_E

и так далее...

Есть код обхода дерева сборки, но...

Public Sub AssemblyTraversal()
    ' Ссылка на активный документ. Полагаем, что это сборка.
    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
    
    ' Начинаем обход сборки
    Call TraverseAsm(oAsmDoc.ComponentDefinition.Occurrences, 1)
End Sub

' Аргумент Level необходим для вычисления левого отступа при печати.
Private Sub TraverseAsm(oOccurrences As ComponentOccurrences, Level As Integer)
    ' перебор списка компонентов на текущем уровне иерархии.
    Dim oOcc As ComponentOccurrence
        For Each oOcc In oOccurrences
        'вывод сообщения с именем текущего компонента
        MsgBox (Level & ": " & oOcc.Name)
        
        ' Если текущий компонент – подсборка, то вызываем эту процедуру
        ' снова с текущим компонентом в качестве параметра.
        If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
            Call TraverseAsm(oOcc.SubOccurrences, Level + 1)
        End If
    Next
End Sub

(изменено: Алексей Романов, 16 марта 2013г. 16:37:26)

Re: Получить параметры через API inventor HELP

trvi пишет:

Подскажите код реализации задачи через API: есть сборка, надо через API обойти все детали (входящие в сборку и в подсборки) и составить массив значений по параметрам:

На этот вопрос я привел пример на форуме cad.ru но не удается дать ссылку (хрень какая то), привожу код здесь:

Dim t1 As TextStream
Public Sub AssemblyTraversal()
    Dim f1 As New FileSystemObject
    
    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
    
    Dim sf As String
    sf = "D:\\Data.csv"
    Set t1 = f1.CreateTextFile(sf, ForWriting)
    
    Dim oBOM As BOM
    Set oBOM = oAsmDoc.ComponentDefinition.BOM
    Dim oBOMView As BOMView
    Set oBOMView = oBOM.BOMViews.Item(1)
    
    Call TraverseAsm(oBOMView.BOMRows, 1)
    
    t1.Close
End Sub
Private Sub TraverseAsm(oRows As BOMRowsEnumerator, Level As Integer)
    Dim oRow As BOMRow
    Dim st As String
    For Each oRow In oRows
        If Not oRow.ChildRows Is Nothing Then
            Call TraverseAsm(oRow.ChildRows, Level + 1)
        Else
            Dim oCompDef As ComponentDefinition
            Set oCompDef = oRow.ComponentDefinitions.Item(1)
            If Not TypeOf oCompDef Is VirtualComponentDefinition Then
                Dim par As Parameter
                st = ""
                For Each par In oCompDef.Parameters
                    If par.Name = "d_A" Or par.Name = "d_B" Or par.Name = "d_C" Or par.Name = "d_E" Then
                        st = st & ";" & par.Name & ";" & par.Value
                    End If
                Next
                    t1.WriteLine Level & ";" & oCompDef.Document.DisplayName & st
            End If
        End If
    Next
End Sub

Здесь параметры сбрасываются в текстовый файл, но по аналогии можно в массив
ps длина в см, углы в радианах...