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 objSubtracts As SolidEdgePart.Subtracts = Nothing
        Dim objSubtract As SolidEdgePart.Subtract = Nothing
        Dim objTargetBodySubtract(2) As Object
        Dim objToolBodySubtract(3) As Object
        Dim objToolDirectionArray(3) As SolidEdgePart.SESubtractDirection
        Dim objTargetBodySubtractOut(1) As Object
        Dim objToolBodySubtractOut(2) As Object
        Dim objToolDirectionArrayOut(2) As SolidEdgePart.SESubtractDirection
        Dim nTargets As Long
        Dim nTools As Long
        Try
            OleMessageFilter.Register()
            objApplication = Marshal.GetActiveObject("SolidEdge.Application")
            objPartDocument = objApplication.ActiveDocument
            objModels = objPartDocument.Models
            objTargetBodySubtract(0) = objModels.Item(1).Body
            objToolBodySubtract(0) = objModels.Item(2).Body
            objToolBodySubtract(1) = objModels.Item(3).Body
            objToolDirectionArray(0) = SolidEdgePart.SESubtractDirection.igSubtractDirectionNone
            objToolDirectionArray(1) = SolidEdgePart.SESubtractDirection.igSubtractDirectionNone
            objModel = objModels.Item(1)
            objSubtracts = objModel.Subtracts
            objSubtract = objSubtracts.Add(1, objTargetBodySubtract, 2, objToolBodySubtract, objToolDirectionArray,
                                                          SolidEdgePart.SETargetDesignBodyOption.igCreateMultipleDesignBodiesOnNonManifoldOption,
                                                        SolidEdgePart.SETargetConstructionBodyOption.igCreateMultipleConstructionBodiesOnNonManifoldOption)
            objModel.ExtrudedProtrusions.Item(3).RollToFeature()
            objTargetBodySubtract(0) = objModels.Item(1).Body
            objToolBodySubtract(0) = objModels.Item(2).Body
            objToolBodySubtract(1) = objModels.Item(2).Body
            objToolDirectionArray(0) = SolidEdgePart.SESubtractDirection.igSubtractDirectionNone
            objToolDirectionArray(1) = SolidEdgePart.SESubtractDirection.igSubtractDirectionNone
            objSubtract.Edit(1, objTargetBodySubtract, 1, objToolBodySubtract, objToolDirectionArray,
                                                          SolidEdgePart.SETargetDesignBodyOption.igCreateMultipleDesignBodiesOnNonManifoldOption,
                                                        SolidEdgePart.SETargetConstructionBodyOption.igCreateMultipleConstructionBodiesOnNonManifoldOption)
            objSubtract.RollToFeature()
            objSubtract.GetTargets(nTargets, objTargetBodySubtractOut)
            objSubtract.GetTools(nTools, objToolBodySubtractOut, objToolDirectionArrayOut)
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            OleMessageFilter.Revoke()
        End Try
    End Sub
End Module