Imports System.IO
Imports System.Runtime.InteropServices
Module Example
    <STAThread()> _
    Sub Main()
        Dim objApplication As SolidEdgeFramework.Application = Nothing
        Dim objPartDocument As SolidEdgePart.PartDocument = Nothing
        Dim objModels As SolidEdgePart.Models = Nothing
        Dim objModel As SolidEdgePart.Model = Nothing
        Dim objModelBody As SolidEdgeGeometry.Body = Nothing
        Dim objFaces As SolidEdgeGeometry.Faces = Nothing
        Dim objFaceOrBody(1) As Object
        Dim NumBodies As Integer
        Dim NumHoles As Integer
        Dim NumFaces As Integer
        Dim objRecognizedHoles(9) As Object
        Try
            OleMessageFilter.Register()
            objApplication = Marshal.GetActiveObject("SolidEdge.Application")
            objPartDocument = objApplication.ActiveDocument
            objPartDocument.ModelingMode = SolidEdgePart.ModelingModeConstants.seModelingModeSynchronous
            objModels = objPartDocument.Models
            objModel = objModels.Item(1)
            objModelBody = objModel.Body
            'We can have three ways of recognition
            '1 - Body Base Recognition
            objFaceOrBody(0) = objModelBody
            NumBodies = 1
            objModel.Holes.RecognizeAndCreateHoleGroups(NumBodies, objFaceOrBody, NumHoles, objRecognizedHoles)
            '2 - Active Working Body Case
            objModel.Holes.RecognizeAndCreateHoleGroups(0, objFaceOrBody, NumHoles, objRecognizedHoles)
            '3 - Face Base Recognition
            objFaces = objModelBody.Faces(SolidEdgeGeometry.FeatureTopologyQueryTypeConstants.igQueryAll)
            objFaceOrBody(0) = objFaces.Item(5)
            objFaceOrBody(1) = objFaces.Item(6)
            NumFaces = 2
            objModel.Holes.RecognizeAndCreateHoleGroups(NumFaces, objFaceOrBody, NumHoles, objRecognizedHoles)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            OleMessageFilter.Revoke()
        End Try
    End Sub
End Module