Imports System.Runtime.InteropServices
Public Class VirtualComponentOccurrences
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim objApplication As SolidEdgeFramework.Application = Nothing
        Dim objTopAsmDoc As SolidEdgeAssembly.AssemblyDocument = Nothing
        Dim documents As SolidEdgeFramework.Documents = Nothing
        Dim objType As Type = Nothing
        Dim objVCOccurs0 As SolidEdgeAssembly.VirtualComponentOccurrences
        Dim objVCOccurs1 As SolidEdgeAssembly.VirtualComponentOccurrences
        Dim objVCOccurs2 As SolidEdgeAssembly.VirtualComponentOccurrences
        Dim objVCOccurs3 As SolidEdgeAssembly.VirtualComponentOccurrences
        Dim objVCOccurs4 As SolidEdgeAssembly.VirtualComponentOccurrences
        Dim objVCOccur1 As SolidEdgeAssembly.VirtualComponentOccurrence
        Dim objVCOccur2 As SolidEdgeAssembly.VirtualComponentOccurrence
        Dim objVCOccur3 As SolidEdgeAssembly.VirtualComponentOccurrence
        Dim objVCOccur4 As SolidEdgeAssembly.VirtualComponentOccurrence
        Dim objVirtComp1 As SolidEdgeAssembly.VirtualComponent
        Dim objVirtComp2 As SolidEdgeAssembly.VirtualComponent
        Dim objVirtComp3 As SolidEdgeAssembly.VirtualComponent
        Dim objVirtComp4 As SolidEdgeAssembly.VirtualComponent
        Dim VirtCompType1 As SolidEdgeConstants.VirtualComponentTypeConstants
        'Dim VirtCompType2 As SolidEdgeConstants.VirtualComponentTypeConstants
        Dim VirtCompType3 As SolidEdgeConstants.VirtualComponentTypeConstants
        Dim VirtCompType4 As SolidEdgeConstants.VirtualComponentTypeConstants
        Dim VirtCompStatusConst As SolidEdgeAssembly.VirtualComponentStatusConstants
        Dim objProperties0 As Object
        Dim objProperties1 As Object
        Dim VirtCompName1 As String
        'Dim VirtCompName2 As String
        Dim VirtCompName3 As String
        Dim VirtCompName4 As String
        Dim lngCount0 As Long
        Dim lngCount1 As Long
        Dim lngCount2 As Long
        Dim lngCount3 As Long
        Try
            ' Create/get the application with specific settings
            objApplication = Marshal.GetActiveObject("SolidEdge.Application")
            ' Get a reference to the documents collection.
            documents = objApplication.Documents
            objTopAsmDoc = CType(documents.Add("SolidEdge.AssemblyDocument"), SolidEdgeAssembly.AssemblyDocument)
            'Get the root virtual component occurrences collection from the top assembly doc.
            objVCOccurs0 = Nothing
            objVCOccurs0 = objTopAsmDoc.VirtualComponentOccurrences
            lngCount0 = -1
            lngCount0 = objVCOccurs0.Count
            'Add 1st new virtual component occurrence, and hence Alfa virtual component.
            objVCOccur1 = Nothing
            objVCOccur1 = objVCOccurs0.Add("VirtCompAlfa", SolidEdgeAssembly.VirtualComponentTypeConstants.seVirtualComponentType_Assembly, VirtCompStatusConst)
            lngCount1 = -1
            lngCount1 = objVCOccurs0.Count
            'Add 2nd new virtual component occurrence, of same Alfa virtual component.
            objVCOccur2 = Nothing
            objVCOccur2 = objVCOccurs0.Add("VirtCompAlfa", SolidEdgeAssembly.VirtualComponentTypeConstants.seVirtualComponentType_Assembly, VirtCompStatusConst)
            lngCount2 = -1
            lngCount2 = objVCOccurs0.Count
            'Get Alfa virtual component from the 1st virtual component occurrence.
            objVirtComp1 = Nothing
            objVirtComp1 = objVCOccur1.VirtualComponent
            'Get virtual component type from Alfa virtual component.
            VirtCompType1 = SolidEdgeConstants.VirtualComponentTypeConstants.seVirtualComponentType_Unknown
            VirtCompType1 = objVirtComp1.VirtualComponentType
            'Get virtual component name from Alfa virtual component.
            VirtCompName1 = ""
            VirtCompName1 = objVirtComp1.Name
            'Get 1st virtual component occurrences collection from Alfa virtual component.
            objVCOccurs1 = Nothing
            objVCOccurs1 = objVirtComp1.VirtualComponentOccurrences
            'Add 3rd new virtual component occurrence, of Beta virtual component.
            objVCOccur3 = Nothing
            objVCOccur3 = objVCOccurs1.Add("VirtCompBeta", SolidEdgeAssembly.VirtualComponentTypeConstants.seVirtualComponentType_Assembly, VirtCompStatusConst)
            'Get Beta virtual component from the 3rd virtual component occurrence.
            objVirtComp3 = Nothing
            objVirtComp3 = objVCOccur3.VirtualComponent
            'Get virtual component type from Beta virtual component.
            VirtCompType3 = SolidEdgeConstants.VirtualComponentTypeConstants.seVirtualComponentType_Unknown
            VirtCompType3 = objVirtComp3.VirtualComponentType
            'Get virtual component name from Beta virtual component.
            VirtCompName3 = ""
            VirtCompName3 = objVirtComp3.Name
            'Add 4th new virtual component occurrence, of Gamma virtual component.
            objVCOccur4 = Nothing
            objVCOccur4 = objVCOccurs0.Add("VirtCompGamma", SolidEdgeAssembly.VirtualComponentTypeConstants.seVirtualComponentType_Assembly, VirtCompStatusConst)
            'Get Gamma virtual component from the 4th virtual component occurrence.
            objVirtComp4 = Nothing
            objVirtComp4 = objVCOccur4.VirtualComponent
            'Get virtual component type from Gamma virtual component.
            VirtCompType4 = SolidEdgeConstants.VirtualComponentTypeConstants.seVirtualComponentType_Unknown
            VirtCompType4 = objVirtComp4.VirtualComponentType
            'Get virtual component name from Gamma virtual component.
            VirtCompName4 = ""
            VirtCompName4 = objVirtComp4.Name
            'Move 3rd virtual component occurrence from Beta VC to Gamma VC.
            Call objVCOccur3.MoveTo(objVirtComp4)
            lngCount3 = -1
            lngCount3 = objVCOccurs1.Count
            'Get properties from top assembly document.
            'Set objProperties0 = Nothing
            'Set objProperties0 = objTopAsmDoc.Properties
            'Get properties from Alfa virtual component.
            objProperties1 = Nothing
            objProperties1 = objVirtComp1.Properties
            'Publish all virtual components in this assembly document.
            'objTopAsmDoc.PublishVirtualComponents()
            
            ' Release all the objects
            objProperties0 = Nothing
            objProperties1 = Nothing
            objVirtComp4 = Nothing
            objVirtComp3 = Nothing
            objVirtComp2 = Nothing
            objVirtComp1 = Nothing
            objVCOccur4 = Nothing
            objVCOccur3 = Nothing
            objVCOccur2 = Nothing
            objVCOccur1 = Nothing
            objVCOccurs4 = Nothing
            objVCOccurs3 = Nothing
            objVCOccurs2 = Nothing
            objVCOccurs1 = Nothing
            objVCOccurs0 = Nothing
            objTopAsmDoc = Nothing
            'Set ObjApp = Nothing
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
End Class