Imports SolidEdgeAssembly
Imports SolidEdgeFramework
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.IO
Module Module1
' Event set object
Friend WithEvents m_ChangeEventSet As SolidEdgeFramework.ISEAssemblyChangeEvents_Event
Private objApp As Application
Private objAsmDoc As AssemblyDocument
Private bEventHandlerCalled As Boolean
Private bBeforeEventHandler As Boolean
Private objOccs As Occurrences
Private objOcc As Occurrence
Private objFolder As DirectoryInfo
Private objFileInfo As FileInfo
Sub Main()
Try
Console.WriteLine("Starting Solid Edge")
'To start SolidEdge application
objApp = Activator.CreateInstance(Type.GetTypeFromProgID("SolidEdge.Application"))
If IsNothing(objApp) Then
Throw New Exception("Failed to get Application object")
End If
objApp.Visible = True
objFolder = GetTrainingFolder()
objFileInfo = New FileInfo(System.IO.Path.Combine(objFolder.FullName, "carrier.asm"))
Console.WriteLine("Opening " & objFileInfo.FullName)
' To open Assembly Document
objAsmDoc = objApp.Documents.Open(objFileInfo.FullName)
' Instantiate the event set object.
m_ChangeEventSet = DirectCast(objAsmDoc.AssemblyChangeEvents, SolidEdgeFramework.ISEAssemblyChangeEvents_Event)
Console.WriteLine("Change state of any Occurrence to fire ""AssemblyChangeEvents""..")
If IsNothing(m_ChangeEventSet) Then
Throw New Exception("Failed to get AssemblyChangeEvents object")
End If
objOccs = objAsmDoc.Occurrences
If IsNothing(objOccs) Then
Throw New Exception("Failed to get Occurrences collection")
End If
objOcc = objOccs.Item(1)
If IsNothing(objOcc) Then
Throw New Exception("Failed to get Occurrence")
End If
objOcc.Visible = False ' Events should be raised by now
If Not bEventHandlerCalled Then
Throw New Exception("Event handler never called. ")
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
Console.WriteLine("Press any key to exit..")
Console.ReadKey()
objApp.Quit()
objApp = Nothing
objAsmDoc = Nothing
objOccs = Nothing
objOcc = Nothing
m_ChangeEventSet = Nothing
End Try
End Sub
Private Sub AssemblyChangeEvents_AfterChange(theDocument As Object, occurrenceModified As Object, modifiedOccurrenceObjectType As ObjectType, changeType As AssemblyEventConstants) Handles m_ChangeEventSet.AfterChange
' To ensure BeforeChange event called before AfterChange
If bBeforeEventHandler Then
bEventHandlerCalled = True
End If
Dim sb As New StringBuilder()
Dim szStr As String = ""
Dim objAsmDocLocal As AssemblyDocument = theDocument
Dim objOcc As Occurrence = occurrenceModified
If (seAssemblyChangeEventsConstants.seAssemblyComponentShow = changeType) Then
sb.AppendFormat("{0}( {1} {2} {3} {4} )", _
"AfterChange", _
objAsmDocLocal.Name, objOcc.Name, _
objOcc.TopLevelDocument.Name, "Show")
ElseIf (seAssemblyChangeEventsConstants.seAssemblyComponentHide = changeType) Then
sb.AppendFormat("{0}( {1} {2} {3} {4} )", _
"AfterChange", _
objAsmDocLocal.Name, objOcc.Name, _
objOcc.TopLevelDocument.Name, "Hide")
End If
' To display Received Parameters
Console.WriteLine(sb.ToString())
End Sub
Private Sub AssemblyChangeEvents_BeforeChange(theDocument As Object, occurrenceModified As Object, modifiedOccurrenceObjectType As ObjectType, changeType As AssemblyEventConstants) Handles m_ChangeEventSet.BeforeChange
bBeforeEventHandler = True
Dim sb As New StringBuilder()
Dim szStr As String = ""
Dim objAsmDocLocal As AssemblyDocument = theDocument
Dim objOcc As Occurrence = occurrenceModified
If (seAssemblyChangeEventsConstants.seAssemblyComponentShow = changeType) Then
sb.AppendFormat("{0}( {1} {2} {3} {4} )", _
"BeforeChange", _
objAsmDocLocal.Name, objOcc.Name, _
objOcc.TopLevelDocument.Name, "Show")
ElseIf (seAssemblyChangeEventsConstants.seAssemblyComponentHide = changeType) Then
sb.AppendFormat("{0}( {1} {2} {3} {4} )", _
"BeforeChange", _
objAsmDocLocal.Name, objOcc.Name, _
objOcc.TopLevelDocument.Name, "Hide")
End If
' To display Received Parameters
Console.WriteLine(sb.ToString())
End Sub
Function GetTrainingFolder() As DirectoryInfo
Dim objInstallData As SEInstallDataLib.SEInstallData = Nothing
Dim objInstallFolder As DirectoryInfo = Nothing
Dim objTrainingFolder As DirectoryInfo = Nothing
Try
objInstallData = New SEInstallDataLib.SEInstallData
objInstallFolder = New DirectoryInfo(objInstallData.GetInstalledPath())
objTrainingFolder = New DirectoryInfo(System.IO.Path.Combine(objInstallFolder.Parent.FullName, "Training"))
Catch
Finally
If Not (objInstallData Is Nothing) Then
Marshal.FinalReleaseComObject(objInstallData)
objInstallData = Nothing
End If
End Try
Return objTrainingFolder
End Function
End Module