Share

Interference Analysis

Description

This sample demonstrates the functions used to calculate interference analysis in an assembly.

Code Samples

To use this sample have an assembly open that contains mutiple parts. Depending on preselected parts when running the sample, you'll get different results. If one part is selected, that one part will be checked against the rest of the assembly. If more than one part is selected you have the choice of checking for interference among the selected parts or checking the selected parts against the rest of the assembly. If no parts are selected it will check every part against every other part.
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)
        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
        Next
        
        oHS1.Clear
        oHS2.Clear
    Else
        MsgBox "There is no interference."
    End If
End Sub


Was this information helpful?