Get the interfering threads in a Assembly via VBA
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello All,
I trying to get via VBA the interfering threds in a assembly, but I can't find the right way to get it done. The collision detection tool in Autodesk Inventor 23 is able to give you these.
So i think it should be possible to get the same information via VBA. To get Interferences in a Assembly there is a API sample, which gives you all interferences:
Public Sub Interference()
Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument
' Find all selected occurrences and add them to an ObjectCollection.
Dim oSelectedOccs As ObjectCollection
Set oSelectedOccs = ThisApplication.TransientObjects.CreateObjectCollection
Dim i As Long
For i = 1 To oDoc.SelectSet.Count
If oDoc.SelectSet.Item(i).Type = kComponentOccurrenceObject Then
oSelectedOccs.Add oDoc.SelectSet.Item(i)
MsgBox oDoc.SelectSet.Item(i).Name
End If
Next
' If no occurrences are selected check for interference of
' all parts against all parts. If one occurrence is selected, check
' for interference between that occurrence and the rest of the assembly.
' If more than one occurrence is selected let the user decide if it
' should check for interference between the parts in the selection or
' between the selected parts and the rest of the assembly.
Dim oResults As InterferenceResults
Dim oCheckSet As ObjectCollection
Set oCheckSet = ThisApplication.TransientObjects.CreateObjectCollection
If oSelectedOccs.Count = 0 Then
' Add all occurrences to the object collection
Dim oOcc As ComponentOccurrence
For Each oOcc In oDoc.ComponentDefinition.Occurrences
oCheckSet.Add oOcc
Next
' Get the interference between everything.
Set oResults = oDoc.ComponentDefinition.AnalyzeInterference(oCheckSet)
ElseIf oSelectedOccs.Count = 1 Then
' Add all occurrences except the selected occurrence to the object collection.
For Each oOcc In oDoc.ComponentDefinition.Occurrences
If Not oOcc Is oSelectedOccs.Item(1) Then
oCheckSet.Add oOcc
End If
Next
' Get the interference between the selected occurrence everything else.
Set oResults = oDoc.ComponentDefinition.AnalyzeInterference(oSelectedOccs, oCheckSet)
Else
If MsgBox("Check interference between selected occurrences and all other occurrences?", vbYesNo + vbQuestion) = vbYes Then
' Add all occurrences except the selected occurrences to the object collection.
For Each oOcc In oDoc.ComponentDefinition.Occurrences
' Check to see if this occurrences is already selected.
Dim bSelected As Boolean
bSelected = False
For i = 1 To oSelectedOccs.Count
If oSelectedOccs.Item(i) Is oOcc Then
bSelected = True
Exit For
End If
Next
If Not bSelected Then
oCheckSet.Add oOcc
End If
Next
' Check interference between the selected items.
Set oResults = oDoc.ComponentDefinition.AnalyzeInterference(oSelectedOccs, oCheckSet)
Else
' Check interference between the selected items.
Set oResults = oDoc.ComponentDefinition.AnalyzeInterference(oSelectedOccs)
End If
End If
If oResults.Count = 1 Then
MsgBox "There is 1 interference."
ElseIf oResults.Count > 1 Then
MsgBox "There are " & oResults.Count & " interferences."
End If
If oResults.Count > 0 Then
Dim oHS1 As HighlightSet
Set oHS1 = oDoc.HighlightSets.Add
oHS1.Color = ThisApplication.TransientObjects.CreateColor(255, 0, 0)
Dim oHS2 As HighlightSet
Set oHS2 = oDoc.HighlightSets.Add
oHS2.Color = ThisApplication.TransientObjects.CreateColor(0, 255, 0)
For i = 1 To oResults.Count
oHS1.Clear
oHS2.Clear
oHS1.AddItem oResults.Item(i).OccurrenceOne
oHS2.AddItem oResults.Item(i).OccurrenceTwo
MsgBox "Occurrences are highlighted from interference " & i
'MsgBox oResults.Item(i).OccurrenceOne.Name
Next
oHS1.Clear
oHS2.Clear
Else
MsgBox "There is no interference."
End If
End Sub
I tryed to find in the Object oResults the information if the collision is a thred or not but I can't find it. May be it#s the wrong way to to it.
I hope someone can helb me with this
Thanks,
Hendrik