Q: I'm trying to check if a given component occurrence is visible in a drawing view. How can I do it?
A: You can use the DrawingView.GetVisibility function for this. Here is some sample code. First select a drawing view which is referencing an assembly document and then run the code.
Sub checkVisibility()
Dim invDV As DrawingView
Set invDV = ThisApplication.ActiveDocument.SelectSet(1)
Dim invD As Document
Set invD = invDV.ReferencedDocumentDescriptor.ReferencedDocument
Dim invAD As AssemblyDocument
If TypeOf invD Is AssemblyDocument Then
Set invAD = invD
Call checkVisibilityRecursive( _
invAD.ComponentDefinition.Occurrences, invDV)
MsgBox "Result is in the Immediate window"
Else
MsgBox "No assembly document is used"
End If
End Sub
Sub checkVisibilityRecursive( _
invCOs As ComponentOccurrences, _
invDV As DrawingView)
Dim iTab As Integer
iTab = 1 + invCOs(1).OccurrencePath.Count * 3
Dim invCO As ComponentOccurrence
For Each invCO In invCOs
If Not invCO.IsSubstituteOccurrence Then
If invCO.SubOccurrences.Count > 0 Then _
Call checkVisibilityRecursive( _
invCO.SubOccurrences, invDV)
If invCO.Definition.Type = kVirtualComponentDefinitionObject Then
Debug.Print Space(iTab) & invCO.Name & " is virtual"
Else
Debug.Print Space(iTab) & invCO.Name & _
" is visible = " & invDV.GetVisibility(invCO)
End If
End If
Next
End Sub