# Create Macro Using Macro Manager Example (VB.NET)

This example shows how to create a C++COM macro using the macro manager and VB.NET.

    '--------------------------------------------------------------
    ' Preconditions:
    ' 1. Create a VB.NET Windows console project.
    ' 2. Copy and paste this example into the VB.NET IDE.
    ' 3. Add a reference to:
    '    install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll.
    ' 4. Add a reference to System.Windows.Forms.
    ' 5. Create C:\temp\macros, if this folder does not exist.
    ' 6. Start DraftSight.
    ' 7. Press F5.
    '
    ' Postconditions:
    ' 1. Connects to DraftSight.
    ' 2. Gets the active document.
    ' 3. Gets the macro manager.
    ' 4. Sets the macro language, level of detail, and path
    '    where to save the macro.
    ' 5. Starts macro recording.
    ' 6. Creates a Visual Studio 2008 C++ COM project containing the
    '    macro at c:\temp\macros\CircleMacroCPPCOM and inserts
    '    a Circle and Arc in the drawing.
    ' 7. Stops macro recording.
    ' 8. Open a new drawing in DraftSight.
    ' 9. Open C:\temp\macros\CircleMacroSharp\CircleMacroCPPCOM.csproj in
    '    Visual Studio 2008.
    '    a. Expand CircleMacroCPPCOM, if necessary.
    '    b. Expand DSAPIMacros, if necessary.
    '    c. Double-click CircleMacroCPPCOM located below DSAPIMacros, which opens
    '       CircleMacroCPPCOM.cs.
    '    d. Click Start Debugging.
    '    e. Creates a Circle and Arc in the drawing.
    '    f. Click File > Save All and save the solution.
    '    g. Click File > Close Solution.
    '----------------------------------------------

    Imports System
    Imports DraftSight.Interop.dsAutomation
    Imports System.Runtime.InteropServices
    Imports System.Windows.Forms

    Module Module1

        Sub Main()

            Dim dsApp As DraftSight.Interop.dsAutomation.Application

            'Connect to DraftSight application
            dsApp = GetObject(, "DraftSight.Application")

            If dsApp Is Nothing Then
                Return
            End If

            'Abort any command currently running in DraftSight
            'to avoid nested commands
            dsApp.AbortRunningCommand()

            'Get active document
            Dim dsDoc As Document = dsApp.GetActiveDocument()
            If dsDoc Is Nothing Then
                MessageBox.Show("There are no open documents in DraftSight.")
                Return
            End If

            'Get macro manager
            Dim dsMacroManager As MacroManager = dsApp.GetMacroManager()

            'Set macro language
            dsMacroManager.Language = dsMacroLanguage_e.dsMacroLanguage_CSharp

            'Set macro level of detail
            dsMacroManager.LevelOfDetail = dsMacroLevelOfDetail_e.dsMacroLevelOfDetail_Low

            'Set save file path
            dsMacroManager.SavePath = "C:\temp\macros\"

            'Start macro recording
            dsMacroManager.StartMacroRecording()

            'Get Sketch Manager
            Dim dsSketchMgr As SketchManager = dsDoc.GetModel().GetSketchManager()

            'Insert Circle and Arc
            Dim dsCircle As Circle = dsSketchMgr.InsertCircle(2.0, 2.0, 0.0, 4.0)

            Dim dsCircleArc As CircleArc = dsSketchMgr.InsertArc(3.0, 3.0, 0.0, 4.0, 1.0, 2.0)

            'Stop macro recoding
            dsMacroManager.StopMacroRecording("CircleMacroCPPCOM")
        End Sub

    End Module